Difference: HowtoInformatique (1 vs. 153)

Revision 1532023-10-27 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1522023-08-10 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1512021-02-03 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1502019-12-03 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1492019-09-20 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1482019-03-04 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1472019-01-18 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1462018-07-05 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1452018-04-24 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1442017-09-14 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1432017-05-22 - AnaisRoche

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1422017-04-19 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1412017-02-21 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1402017-01-21 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1392017-01-09 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1382016-12-22 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1372016-12-15 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1362016-12-15 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1352016-12-09 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1342016-12-09 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1332016-12-08 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1322016-12-01 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1312016-11-22 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1302016-11-21 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1292016-11-21 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1282016-06-13 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1272016-02-11 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1262016-02-03 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1252015-10-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1242015-06-10 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 1232015-06-01 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Deleted:
<
<
  "rwxr-xr-x"
>
>
chmod 755 /projects/raman/ftp/files/ --> "rwxr-xr-x"
  Les autoriser en les ajoutant dans dans /etc/vsftpd/user_list
Line: 4462 to 4152
 Outil de visualisation graphique des logs : gnome-system-log

Common Linux log files name and usage :

Changed:
<
<
    /var/log/message: General message and system related stuff

>
>
    /var/log/message: General message and system related stuff

  /var/log/auth.log: Authenication logs /var/log/kern.log: Kernel logs /var/log/cron.log: Crond logs (cron job)
Line: 4491 to 4180
  sudo logrotate -f /etc/logrotate.conf
Changed:
<
<
==> new file "messages", "messages" devient "messages1", "messages1" devient "messages2"...
>
>
==> new file "messages", "messages" devient "messages1", "messages1" devient "messages2"...
 
logwatch
Line: 4524 to 4213
 Exemple de config sur planetoweb (aug 2010) :

Création d'une config locale /etc/logwatch/conf/logwatch.conf :

Changed:
<
<
Range = All

>
>
Range = All

 Detail = High Archives = Yes Output = html
Line: 4539 to 4228
 http://www.linux-mag.com/id/7807

yum install swatch

Changed:
<
<
[root@planetoweb planetoweb]# rpm -ql swatch

>
>
[root@planetoweb planetoweb]# rpm -ql swatch

 /usr/bin/swatch /usr/lib/perl5/vendor_perl/5.8.8/Swatch /usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm
Line: 4570 to 4257
 /usr/share/doc/swatch

Créer un startup script : vi /etc/init.d/swatch

Changed:
<
<
#!/bin/sh

>
>
#!/bin/sh

 # Simple Log Watcher Program

case "$1" in

Line: 4592 to 4279
 chmod 755 /etc/init.d/swatch

Make sure swatch starts automatically at my runlevels :

Changed:
<
<
# ln -s /etc/init.d/swatch /etc/rc2.d/S99swatch

>
>
# ln -s /etc/init.d/swatch /etc/rc2.d/S99swatch

 # ln -s /etc/init.d/swatch /etc/rc3.d/S99swatch # ln -s /etc/init.d/swatch /etc/rc5.d/S99swatch

Créer un fichier de conf /etc/swatch.conf :

Changed:
<
<
watchfor /invalid|repeated|incomplete/

>
>
watchfor /invalid|repeated|incomplete/

  echo write khess mail addresses=khess@localhost, subject=Authentication Problems
Changed:
<
<
/etc/init.d/swatch start ==> créer un pid dans /var/run/swatch.pid et un fichier /root/.swatch_script.xxxx (avec xxxx = pid - 2)
>
>
/etc/init.d/swatch start ==> créer un pid dans /var/run/swatch.pid et un fichier /root/.swatch_script.xxxx (avec xxxx = pid - 2)
 

SSH, config plus stricte

Line: 4617 to 4302
 http://www.ibm.com/developerworks/aix/library/au-ssh_restrict/

vi /etc/ssh/sshd_config :

Changed:
<
<
PermitRootLogin yes

>
>
PermitRootLogin yes

 AllowUsers moi@MONPC moi@MONPC.domain root@MONPC root@MONPC.domain moi@PASSERELLE
Line: 4631 to 4316
 Si j'essaye une connexion (moi ou root) depuis un AUTREPC, je suis rejeté

On voit le refus de connexion dans /var/log/secure :

Changed:
<
<
User root from AUTREPC not allowed because not listed in AllowUsers

>
>
User root from AUTREPC not allowed because not listed in AllowUsers

 Jul 16 14:57:06 planetoweb sshd[28008]: input_userauth_request: invalid user root Jul 16 14:57:11 planetoweb sshd[28007]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=AUTREPC user=root Jul 16 14:57:13 planetoweb sshd[28007]: Failed password for invalid user root from AUTREPC_IP port 60246 ssh2
Line: 4641 to 4326
 2) Encore plus strict, AUCUN accès ssh direct en root autorisé

http://www.howtogeek.com/howto/linux/security-tip-disable-root-ssh-login-on-linux/

Changed:
<
<
vi /etc/ssh/sshd_config

>
>
vi /etc/ssh/sshd_config

  (Port 22 : on pourrait mettre ici un autre port, genre 2010, histoire de brouiller les pirates...)
Line: 4679 to 4362
 

Tester les disques durs

Occupation disques : df -h

Changed:
<
<
[root@hyperion home]# df -h

>
>
[root@hyperion home]# df -h

 Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/sda3 178G 63G 106G 38% / /dev/sdb1 2,7T 1,4T 1,3T 52% /data
Line: 4715 to 4397
  Keep in mind that you will no longer be informed that there updates available and as such you will need to check periodically with yum check-update
Changed:
<
<
Quels sont les packages commençant par "mesa-" installés + à installer ? --> yum list mesa-*
>
>
Quels sont les packages commençant par "mesa-" installés + à installer ? --> yum list mesa-*
 

Samba

Line: 4752 to 4430
 clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"

Cas particulier des clients Windows 8 :

Changed:
<
<
Try making the following adjustments on the Windows 8 machine that needs to connect to the Samba share.

>
>
Try making the following adjustments on the Windows 8 machine that needs to connect to the Samba share.

  This type of problem usually requires that you change the lanman server parameters in order to get Windows 8 working with older servers.
Line: 4792 to 4465
  Open A terminal window paste in the following line followed by the return key(should be all on one line):
Changed:
<
<
echo "[default]" >> ~/Library/Preferences/nsmb.conf; 
echo "smb_neg=smb1_only" >> ~/Library/Preferences/nsmb.conf

>
>
echo "[default]" >> ~/Library/Preferences/nsmb.conf; 
echo "smb_neg=smb1_only" >> ~/Library/Preferences/nsmb.conf

 
Added:
>
>
 Reboot

This command adds directives to force SMB connections to use the SMB1 protocol. This is slower but stable.

Line: 5059 to 4697
  3178-1.gif
Changed:
<
<
donc pas de jumper = sata2 , le jumper est mis = sata1
>
>
donc pas de jumper = sata2 , le jumper est mis = sata1
  Comme il est mis la il est en sata 1 donc bridé à 150Mo/sec Si on l'enlève on passe en sata2 donc 375Mo/sec

Revision 1222015-02-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 16 to 16
 
Added:
>
>

Imprimer sur les imprimantes

1) Imprimer sur Sprinter (bureau Chemcam 58) :

http://planetowiki.irap.omp.eu/do/view/Computers/SprinterPrinter

2) Imprimer sur les imprimantes générales du labo :

Article général sur l'intranet : https://intranet.irap.omp.eu/spip.php?article205

Je donne ici quelques raccourcis et petites mises à jour par rapport à cette doc, pour installer notamment l'imprimante improche3 :

a) Installation sur Mac OS

Mon expérience sur OS 10.10 (Yosemite) :

Préférences Système / Imprimantes

Cliquer sur bouton "+"

Adresse : impression.irap.omp.eu

Protocole : IPP

File d'attente : /printers/improche3

Cliquer sur "Ajouter"

Cocher "unité d'impression duplex" pour le recto-verso

b) Installation sur Linux

Mon expérience sur Fedora 20 :

Par défaut, ça ne marche pas car le protocole IPP n'est pas autorisé par le firewall. Donc, à moins de l'autoriser dans la config du firewall, ne pas passer par Preferences / Imprimantes, mais plutôt par le script d'installation :

sudo system-config-printer

Ajouter une imprimante

Cliquer sur "Imprimante Réseau", puis "IPP"

Là, on nous propose d'activer IPP qui n'est pas forcément activé par défaut

OK

Entrer directement l'URI complète de l'imprimante : ipp://impression.irap.omp.eu/printers/improche3

Le bon pilote devrait être automatiquement sélectionné

Activer le recto-verso dans les options

 

Accéder aux ressources du labo depuis l'extérieur

Revision 1212015-01-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1134 to 1134
 Si vous voulez exécutez idl SUR HYPERION, alors c'est différent, il s'agit seulement de se connecter à hyperion via la passerelle (voir à ce sujet la section "Accès à hyperion avec Putty")
Changed:
<
<
Si vous êtes toujours partants, allez directement au point 2)
>
>
Si vous êtes toujours partants, allez directement au point (2) (car le point (1) ne concerne que l'administrateur du serveur)
  1) Travail à faire pour l'administrateur système sur hyperion (vous pouvez sauter cette section)
Line: 1175 to 1175
  Pour les utilisateurs MacOS ou Linux:
Changed:
<
<
Placer les 2 lignes suivantes (une fois pour toutes) dans votre fichier de démarrage .bash_login (depuis votre répertoire home, ou bien ~/.bash_login directement depuis n'importe où), pour ne plus avoir à les taper :
>
>
Placer les 2 lignes suivantes (une fois pour toutes) dans votre fichier de démarrage .bash_profile (depuis votre répertoire home, ou bien ~/.bash_profile directement depuis n'importe où), pour ne plus avoir à les taper :
 
export PATH=$PATH:PATH_TO_IDL_BIN
export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
Il vous faudra remplacer PATH_TO_IDL_BIN par le chemin vers VOTRE installation d'idl (par exemple pour idl 8.3 sur Mac : /Applications/exelis/idl83/bin ou bien /Users/monlogin/Applications/exelis/idl83/bin si c'est une installation seulement sur votre compte)
Added:
>
>
(
ATTENTION, il est preferable d'utiliser vi, emacs, ou gedit pour faire ce fichier ; 
si vous voulez vraiment utiliser TextEdit, voici la démarche à suivre :
1) Ouvrir un terminal
2) cd
3) touch .bash_profile
4) open .bash_profile
5) Verifier que dans le menu Format, il soit bien écrit : "Convertir au format RTF" (ce qui veut dire que le format actuel est bien un format TEXTE)
)
  Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac).
Line: 1200 to 1211
 ##################### end of license file #######################
Added:
>
>
( ATTENTION : Pour faire cela avec TextEdit, suivre la même procédure que pour .bash_profile décrite ci-dessus, sauf qu'il faut remplacer le "cd" de la 2ème étape par un "cd /Applications/exelis/license" (ou quelque chose du genre) )
  c) "Creuser" un tunnel
Line: 1209 to 1225
  Ouvrir un tunnel avec mise en correspondance de 2 ports :
Added:
>
>
  • Depuis le Terminal (console), Aller dans votre home : cd
 
  • Avec un éditeur de texte (style "vi" ou "emacs" ou "gedit"...), créer un fichier "A_EXECUTER_DEPUIS_CHEZ_MOI_AVANT_IDL.sh"
Added:
>
>
(Si vous voulez utiliser TextEdit, suivre la même procédure que pour .bash_profile décrite ci-dessus)
 
  • Y placer cette ligne unique :
  • ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MON_LOGIN_EMAIL@GATEWAY
  • (remplacer MON_LOGIN_EMAIL par votre login utilisé pour le mail ou pour vous connecter à la passerelle du labo, et GATEWAY par le serveur passerelle du labo)

Revision 1202014-11-04 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 9 to 9
  Cette page donne des réponses à diverses questions informatique (Etienne Pallier)
Changed:
<
<
Voir aussi ComputerScience
>
>
Voir aussi ComputerScience (informations sur générales sur des notions informatique)

Voir aussi InformationAboutThisTwiki (informations sur ce wiki)

 
Line: 5000 to 5002
 

GWIS

Changed:
<
<
(should be later moved to : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject)

Réalisation d'un site web générique de projet en s'inspirant du site Europlanet : GWIS (Generic Web Information System)

Il s'agit de concevoir un système d'information web professionnel à l'aide d'un framework Php nommé Cakephp (http://cakephp.org)

Pour cakephp, voir aussi http://bakery.cakephp.org/

Nouvelle version 2.1.1 sortie le 26/3/12 : http://bakery.cakephp.org/articles/lorenzo/2012/03/26/cakephp_2_1_1_and_1_3_15_released

Version 2.1.0 sortie le 5/3/12

Version en cours : http://cakephp.lighthouseapp.com/projects/42648-cakephp/milestones/current

Roadmaps (pas très à jour) :

Code completion for cakephp in Eclipse : http://mark-story.com/posts/view/code-completion-for-cakephp-in-eclipse

ROADMAP (PLAN OF WORK, CAHIER DES CHARGES)

Ne pas oublier de noter tout ce que tu fais. Rédige au fur et à mesure (avec OpenOffice).

NOUVELLES MODIFS FAITES :

4 juin :

  • VII-3 c) relation 1-1

16 mai :

  • IX-5
  • X - Documentation

15 mai :

  • IX-2 et 3

14 mai :

  • IX-1
  • VI-4

3 mai :

  • section VI-3 (lost password)

  • section IX-1 (logout)

5 Avril :

  • section VII-3 (crud)

Plus tard :

  • (pas encore sûr, à réfléchir) ajouter un script qui permet de définir un tableau de champs obligatoires pour un Modèle donné ==> Ces champs devront obligatoirement être saisis dans les vues associées au Modèle (voir http://book.cakephp.org/1.3/view/1147/required)

I - Installation des outils

Serveur web+php+mysql Xampp : Télécharger et installer un serveur web apache/php/mysql avec xampp pour windows, c'est très facile : http://www.apachefriends.org/fr/xampp-windows.html

Framework php CakePhp : Télécharger et installer cakephp, la version 2.1 (la plus récente, bientôt officielle)

IDE Eclipse : Télécharger et installer Eclipse + plugin PDT pour php

II - Familiarisation avec Cakephp : Lecture documentation + test des tutoriels

http://cakephp.org/ (la doc de la version 2 est ici : http://book.cakephp.org/2.0/en)

1) Lire le MVC : http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view-controller.html Lire un peu plus sur le sujet : - les Controlleurs : http://book.cakephp.org/2.0/en/controllers.html - les Vues : http://book.cakephp.org/2.0/en/views.html - les Modèles : http://book.cakephp.org/2.0/en/models.html

2) tester les tutoriels sur le "blog" : a) tester le tutoriel cakephp "blog", très simple : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/blog.html b) tester la 2e partie du tutoriel "blog" : http://book.cakephp.org/2.0/en/getting-started.html#blog-tutorial-adding-a-layer

3) comprendre la génération de code avec l'outil important de cakephp : "bake" http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html

4) AUTH et ACL :

Tester le tutoriel blog avec l'ajout de auth et acl : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html

(voir aussi ce tutoriel plus complet : part1 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html, part2 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html)

doc sur AUTH : http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

doc sur ACL : http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

5) important aussi, disponible uniquement depuis cakephp 2.1, la gestion des événements : http://book.cakephp.org/2.0/en/core-libraries/events.html

6) A lire aussi, le cycle de développement complet : http://book.cakephp.org/2.0/en/development.html surtout lire : - Exceptions - Error Handling - Debugging - Testing

III - En s'inspirant du tutoriel "blog", commmencer à construire une architecture à partir d'un sous-ensemble de la BDD Europlanet

1) Ce projet est géré en versions avec subversion (plugin Eclipse subclipse)

2) Construire un schéma d'une petite BDD avec MysqlWorkbench Ce schéma contient 7 tables principales : - people (lien N-1 avec institutes, status, et profiles, et 1-N avec resources) : id, name, firstname, email, password, status, active, job, created, updated (le champ "active" est un booléen VRAI par défaut) - status : id, name (avec les valeurs suivantes pour name : NULL, 'registered', 'invalidated', 'validated') - profiles : id, name, level (level indique la hiérarchie ; name et level ont les valeurs suivantes : {'admin',10}, {'priv',5}, {'validator',3}, {'normal',0} ; donc on a la hiérarchie admin > priv > validator > normal) - institutes : id, name, created, updated - expertises : id, name (lien M-N avec people) - resources (lien M-N avec sciencases) : id, name, created, updated - sciencecases : id, name, created, updated

Pour gérer les relation M-N, il faudra créer les tables intermédiaires suivantes (voir la convention de nommage dans cakephp : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm) :

  • resources_sciencecases : avec les champs resources_id et sciencecases_id (les 2 clés étrangères formant la clé primaire de la table)
  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table)

Tous les champs sont obligatoires (NOT NULL), sauf people.job (default NULL).

Toutes les clés primaires (id) sont autoincrémentées.

Les champs "created" et "updated" sont gérés automatiquement par cakephp.

Ajouter la contrainte "on delete CASCADE" (avec MysqlWorkbench) sur les clés étrangères des tables M-N (resources_sciencecases et expertises_people)

Ajouter la contrainte "on delete NULL" sur toutes les clés étrangères des autres tables (people, resources)

Générer le script sql de création de la base.

Vérifier que MysqlWorkbench ajoute bien les contraintes sur les clés étrangères (FK = "Foreign Key")

Alimenter les tables avec des données quelconques

3) Configurer l'accès à la BDD login : epn pass : pass

4) Avec l'outil "bake", construire un premier échafaudage (scaffolding) automatique MVC (modèles, vues, contrôleurs) + tests unitaires PhpUnit http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html (cake bake project …) cake bake model all cake bake controller all cake bake view all

Par défaut, l'action "people/index" ne doit afficher que les personnes dont le champ "active" est à TRUE et le champ "status" vaut "validated"

5) Lancer les tests générés par "bake" (avec phpUnit, inclus dans Xampp ?) pour tester les modèles et les contrôleurs http://book.cakephp.org/2.0/en/development/testing.html cake bake fixture all ? cake bake test all ? Depuis cakephp 2.1 : Console/cake test app/Model/Post.php Console/cake test app/Controller/PostsController.php

6) Ajouter la validation des champs de tous les formulaires http://book.cakephp.org/2.0/en/models/data-validation.html "bake" ajoute des validations par défaut. Les étendre si nécessaire pour que toutes les validations soient générées automatiquement, en fonction du type des champs. Vérifier que les champs obligatoires sont bien obligatoires en saisie. Ajouter un test pour s'assurer qu'une personne est obligée de remplir tous les champs (sauf people.job) quand elle s'enregistre.

IV - Gestion du projet avec ICESCRUM

http://planetoweb2.cesr.fr:8080/icescrum

http://www.icescrum.org/

doc plus complète :

https://www.kagilum.com/fr/blog

ex : https://www.kagilum.com/fr/blog/les-taches-selon-son-role-icescrum/

Un diagramme des classes uml pour décrire SCRUM (intéressant à mettre dans le rapport de stage), et décrivant les 3 types de stories (user, technical et defect) : http://www.aubryconseil.com/post/Un-%C3%A9l%C3%A9ment-du-backlog-de-produit

diagramme d'état uml pour montrer les différents états d'un élément du backlog (c'est à dire une feature ou une user story ; rappel : une feature = 1 grosse user story qui doit être décomposée en N user stories) : http://www.aubryconseil.com/post/2007/06/21/251-les-etats-significatifs-d-un-element-de-backlog

V - Authentification et Contrôle d'accès

1) Ajouter l'authentification (AUTH) Login = email Auth (et Acl) doivent avoir pour support la table "people" (et status et profiles). Auth (et Acl) impliquent aussi l'usage des Sessions (http://book.cakephp.org/2.0/en/development/sessions.html) Astuce : dans la session, stocker l'id de la personne, et non pas son email (car l'email peut changer, mais pas l'id)

Toute personne non authentifiée (accès anonyme) peut : - lire (R ) toutes les tables, sauf la table "resources" - s'enregistrer (droit C sur la table people)

Toute personne authentifiée peut : - lire (R ) toutes les tables (y-compris "resources") - modifier (U) sa fiche (sauf son profil), mais pas celle des autres - créer (C ) une ressource - modifier/supprimer (UD) une ressource qu'elle a créée, mais pas celles des autres - modifier (U) un institut auquel elle appartient

Gérer le login et le logout

Ajouter les tests nécessaires : (Utiliser des "fixtures", cf section "Fixtures" dans http://book.cakephp.org/2.0/en/development/testing.html) (cake bake fixture all ?) Tester qu'une personne non authentifiée : - peut lire la table 'resource' - peut s'enregistrer - ne peut pas modifier une table Tester qu'une personne authentifiée peut : … Faire un test login/logout complet selon le scénario suivant : - une personne se logue - vérifier qu'elle peut créer une ressource - elle se délogue - vérifier qu'elle ne peut plus créer une ressource

2) Ajouter le contrôle d'accès (ACL)

Créer quelques personnes avec des rôles (profils) différents :

  • 'user1', profil 'admin' (tous les droits)
  • 'user2' et 'user3', profil 'normal', utilisateur normal
  • 'user4', profil 'priv', utilisateur privilégié
  • 'user5', profil 'validator', utilisateur pouvant valider d'autres utilisateurs

Une personne de profil 'admin' a un droit CRUD (créer/lire/modifier/supprimer) sur toutes les tables.

Une personne de profil 'priv' :

  • a un droit CRUD seulement sur la table 'institutes'
  • peut modifier le profil de toutes les personnes (sauf le sien)

Ajouter les tests nécessaires :

  • tester que 'user1' peut tout faire (faire juste quelques tests, pas tout)
  • tester que 'user4' : * peut ajouter un nouvel institut * peut modifier le profil d'une personne (mais pas le sien)
  • tester que 'user2' : * ne peut pas modifier une ressource qui ne lui appartient pas * peut ajouter une nouvelle ressource, et la modifier ensuite * peut modifier son email (login) et/ou son mot de passe
...

VI - ENREGISTREMENT DES UTILISATEURS (registration)

1) Réalisation de la procédure d'enregistrement (inscription) d'une personne :

(voir s'il n'existe pas déjà un plugin cakephp pour gérer ça, car c'est assez classique au début)

a) une personne remplit sa fiche d'enregistrement et la soumet (SUBMIT) ==> elle est enregistrée dans la table people avec "status" à NULL

b) elle reçoit un 1er mail de confirmation avec un lien de validation

c) elle clique sur le lien de validation, ce qui valide son inscription ==> son champ "status" passe à "registered" ; les validateurs reçoivent un mail pour les avertir de cette inscription, avec un lien vers la page du site permettant de valider ou invalider la personne

d) elle reçoit un 2e mail de confirmation lui disant qu'elle est inscrite, MAIS qu'elle doit attendre que son inscription soit validée par un 'validateur', et qu'elle recevra un mail pour le lui confirmer

e) si un validateur valide l'inscription, la personne reçoit un mail pour l'en informer (à partir de là, elle peut se connecter au site) ==> son "status" passe à "validated"

f) si un validateur invalide l'inscription, la personne reçoit un mail pour l'en informer ==> son "status" passe à "invalidated"

Ajouter les actions suivantes au Contrôleur "person" :

  • validate (profil 'validator') : pour valider une personne (champ "status")
  • invalidate (profil 'validator') : pour invalider une personne
  • deleteInvalidated (profil 'priv') : pour supprimer les personnes ayant un statut "invalidated"
  • activate (profil 'priv') : pour activer une personne (champ "active")
  • deactivate (profil 'priv') : pour désactiver une personne

Ajouter/modifier les tests nécessaires

2) Ajouter un captcha sur la fiche d'inscription

Ajouter/modifier les tests nécessaires :

  • tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon
  • tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste)

3) Récupération du mot de passe (lost password)

Sur le formulaire de login, ajouter (à droite du bouton LOGIN) un lien "register" (pour s'enregistrer) et un lien "forgot password" (mot de passe oublié)

Le lien "forgot password" pointe vers un formulaire de modification du mot de passe (Person/PasswordUpdate) contenant juste 1 champ "email" et un bouton "SUBMIT"

L'utilisateur saisit son email et clique sur "submit" pour qu'on lui envoie un nouveau mot de passe par mail (le mot de passe est aussi mis à jour dans la database)

Test

4) Procédure de désinscription (ACTION unregister)

a) une personne clique sur un lien "unregister"

b) une confirmation est demandée via une fenêtre javascript : "Are you sure that you want to unregister ?" OK/CANCEL

c) l'action "unregister" est exécutée, la personne n'est pas supprimée de la base, mais juste marquée "inactive"

d) la personne est automatiquement déconnectée

e) Test

VII - Améliorer le CRUD

1) Bien gérer complètement les relations 1-N

Actions sur Person (relation N-1 avec Institute) :

  • create : doit permettre d'associer la personne à un institut (via liste de noms)
  • update : doit permettre de modifier l'institut associé (via liste de noms)
  • index : doit permettre de voir toutes les personnes avec le nom (name) de l'institut associé ; un clic sur un institut doit amener à sa vue détaillée
  • view : doit afficher le nom (name) de l'institut associé

Action sur Institute (relation 1-N avec Person) :

  • view : doit afficher toutes les personnes associées

2) Bien gérer complètement les relations M-N

Actions sur Person (relation M-N avec Expertise) :

  • create : doit permettre d'ajouter des expertises (ET une date "since")
  • update : doit permettre de modifier les expertises associées
  • view : doit permettre de voir toutes les expertises associées
Idem pour Expertise (lien vers Person)

Même chose pour Resource (relation M-N avec Sciencecase)

Gestion des champs supplémentaires d'une table associative : exemple de la relation entre Person et Expertise :

  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table) et le champ supplémentaire "since" (date à laquelle l'expertise a été acquise)

3) Gérer d'autres types de relations

a) Ajout de plusieurs rôles différents entre 2 mêmes tables

voir http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model

Une personne peut avoir plusieurs liens avec une ressource (plusieurs liens entre les tables "people" et "resources"), ce qui veut dire qu'elle peut jouer plusieurs rôles par rapport à une ressource. Ainsi, au lieu d'avoir seulement une clé étrangère "resources_id" dans la table "people", nous en aurons plusieurs avec des noms différents :

  • resource_provider_id : la personne qui a donné l'information sur la ressource (et qui l'a saisit)
  • resource_owner_id : le propriétaire de la ressource
  • resource_contact_id : le contact pour la ressource
Ces 3 clés pointent toutes vers la même clé primaire resource.id, et sont donc des "alias". Améliorer les actions CRUD en conséquence

b) Relation réflexive (d'une table sur elle-même)

Ajout d'une relation réflexive sur "institutes" (dans ce cas particulier, il s'agit d'une relation hiérarchique) :

  • un institut peut appartenir à un autre institut (de niveau hiérarchique supérieur ; par exemple, le "CNRS" regroupe plusieurs instituts, "l'OMP" regroupe plusieurs laboratoires dont l'IRAP…)
  • cela revient seulement à ajouter un champ "institute_id" dans la table institutes (qui pointe sur la table institute, lien réflexif)
  • améliorer les actions CRUD en conséquence

c) Relation d'héritage ou spécialisation (1:1)

Une ressource peut être de différents types (ajouter la table "resourcetype") :

  • data
  • info (information, document...)
  • website
  • datacenter

chaque type de ressource est une spécialisation du type général "resource".

On aura donc 4 nouvelles tables filles "resourcedata", "resourceinfo", "resourcewebsite", "resourcedatacenter" qui "hériteront" de la table mère (générique) "resource" pour l'étendre chacune avec sa spécificité.

On peut représenter ce lien d'héritage par une relation 1-1 entre chacune de ces 4 tables filles et la table mère "resource".

Aucune des tables filles n'a d'existence propre, chacune dépend de la table mère "resource".

Ainsi, les tables filles n'ont pas de clé primaire, mais juste une clé étrangère (resource_id) qui pointe vers la clé primaire de la table mère (cette clé étrangère peut aussi leur servir de clé primaire).

Cette relation d'héritage a un impact sur toutes les VUES de la table "resource", car à chaque fois qu'on veut accéder à une ressource, il faut récupérer aussi les informations spécifiques à son type dans la table fille associée (via la clé étrangère resource_id).

Plus particulièrement, la vue "Create" (et "Update") devra contenir un sélecteur de type ("Type de ressource"), et n'afficher que les champs spécifiques au type sélectionné (en plus des champs généraux de la table mère).

Ajouter dans la table resource un champ "URL" (général à tous les types)

Voici les informations spécifiques à chaque type, et donc présent dans les tables filles respectives :

  • table data :
    • volume (en MB) :
    • restricted (oui/non)

  • table info (information, document...) :
    • langage (champ texte liste : English, French, Spanish...)

  • table website :
    • restricted (oui/non)
    • nom du webmaster (champ texte libre)

  • table datacenter :
    • nom du responsable (champ texte libre)

4) Ajouter les nouveaux tests nécessaires

VIII - Ajout d'une nouvelle action dans TOUS les Contrôleurs : search

ex : Person/search

Cela amène à une nouvelle vue PersonSearch qui est équivalente au formulaire de Person/create, sauf qu'au lieu de servir à créer une nouvelle personne, il sert à en CHERCHER.

L'ensemble des personnes trouvées sont affichées dans une vue "FOUND" semblable à Person/index (sauf que c'est une vue PARTIELLE et non pas COMPLETE). Les recherches se font sans tenir compte des majuscules ou minuscules.

En bas du formulaire, 2 boutons :

  • SEARCH
  • EXACT SEARCH

Exemples de requêtes possibles :

  • j'entre "Pallier" dans le champ "name" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier", par exemple "Apallieri"...
  • j'entre "Pallier" dans le champ "name", "Etienne" dans le champ "firstname", et "informaticien" dans le champ "job" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier" ET le prénom EST EGAL à "Etienne" ET le job EST EGAL à "informaticien"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier" ET le prénom CONTIENT "Etienne" et le job CONTIENT "informaticien"

Cette VUE "search" doit être accessible par un lien qui se trouve au début de la vue "index", sous la forme d'une icône en forme de LOUPE suivie de la mention "Search"

Faire les tests d'acceptation (ACCEPTANCE TESTS)

IX - Améliorer les vues

1) ajouter les liens généraux suivants :

  • "login" (qui n'apparaît que si l'utilisateur n'est pas logué)
  • et les liens "logout", "update my registration" et "unregister" (qui n'apparaissent que si l'utilisateur est logué)

2) Vue "view" : vue détaillée d'une ligne de table

Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)

Ajouter les boutons "Edit", "Delete" et "Create a copy" (visibles uniquement avec le profil "admin")

Pour le formulaire Person, le bouton "Edit" est aussi visible si la personne connectée correspond à la fiche visualisée.

3) Action "index" : vue globale d'une table

Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)

Masquer la clé primaire (id)

La colonne du champ "name" est triable : en cliquant sur la colonne "name", on trie en ordre croissant, puis décroissant

Le champ "name" est cliquable : en cliquant sur un nom, on va à la vue détaillée correspondante

Afficher le champ "name" des clés étrangères ; en cliquant dessus on va sur la vue détaillée

Les colonnes des clés étrangères sont filtrables : dans la vue people/index, en cliquant sur la colonne "institutes_id" on doit pouvoir sélectionner un nom d'institut (name) et filtrer la vue en conséquence

Au-dessus de la liste d'une table, ajouter un "filtre externe" pour chaque table M-N associée : par exemple, pour la vue people/index, ajouter au-dessus de la liste des personnes une liste d'expertises : en sélectionnant une expertise, on ne voit plus que les personnes associées à cette expertise

En début de page, ajouter un bouton "Add a new one"

4) Ajouter les nouveaux tests nécessaires

5) Ajouter une page contenant tous les tests, avec un bouton permettant de lancer tous les tests à la suite "LAUNCH ALL TESTS"

X - Documentation

Installer phpdocumentor v2 et l'intégrer dans eclipse (http://www.phpdoc.org) :

phpdocumentor respecte les standards de codage du format phpdoc : http://en.wikipedia.org/wiki/PHPDoc

Suivre les standards de codage de cakephp 2 : http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html

XI - Ajout d'un menu

Ajout d'une gestion de menu

XII - Ajout de modules

Ajout d'un module de News

Ajout d'un module d'upload de documents

Newsletter

...

XIII - Charte graphique

Gestion de la présentation avec CSS

...

XIV - Intégrer la BDD Europlanet complète

Annexe : A lire aussi

Associations : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

Callback : http://book.cakephp.org/2.0/en/models/callback-methods.html

Behaviors : http://book.cakephp.org/2.0/en/models/behaviors.html

Transactions : http://book.cakephp.org/2.0/en/models/transactions.html

Virtual fields : http://book.cakephp.org/2.0/en/models/virtual-fields.html

-- EtiennePallier - 25 Dec 2009

>
>
moved to EuroplanetProject
 
META FILEATTACHMENT attachment="styleguide.pdf" attr="" comment="" date="1289338057" name="styleguide.pdf" path="styleguide.pdf" size="58705" stream="styleguide.pdf" user="Main.EtiennePallier" version="1"
META FILEATTACHMENT attachment="idldoc-tutorial.pdf" attr="" comment="" date="1289338074" name="idldoc-tutorial.pdf" path="idldoc-tutorial.pdf" size="112376" stream="idldoc-tutorial.pdf" user="Main.EtiennePallier" version="1"

Revision 1192014-11-03 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Added:
>
>
<--
Autoriser tout le monde à voir cette page (alors que le web Main n'est visible que si on est connecté) :  
-->
 Cette page donne des réponses à diverses questions informatique (Etienne Pallier)

Voir aussi ComputerScience

Revision 1182014-09-29 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 4645 to 4645
 

Samba

Changed:
<
<
Créer un new user "toto" : sbmpasswd -a toto
>
>
Installation du service sur le serveur :

service smb start

 
Changed:
<
<
Mettre à jour le pass de "toto" : smbpasswd toto
>
>
chkconfig --level 345 smb on
  Est-ce que samba est à l'écoute ? : service smb status

Redémarrer samba : service smb restart

Deleted:
<
<
Depuis le poste client windows :

clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"

 Corriger un bug sur Mac Leopard (pas sur Tiger) : samba ne suit pas les liens qui vont vers un disque différent

Pour corriger ce bug, il suffit d'ajouter cette ligne dans la partie "[global]" du smb.conf :

Line: 4664 to 4662
 unix extensions = no
Added:
>
>
Gestion des utilisateurs :

Les utilisateurs enregistrés sont dans /etc/samba/smbpasswd

Créer un new user "toto" : sbmpasswd -a toto

Pour modifier le mot de passe de "toto" : smbpasswd toto

Connexion depuis un poste client Windows :

clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"

Cas particulier des clients Windows 8 :

Try making the following adjustments on the Windows 8 machine that needs to connect to the Samba share.

This type of problem usually requires that you change the lanman server parameters in order to get Windows 8 working with older servers.

Control Panel - Administrative Tools - Local Security Policy

Local Policies - Security Options

Network security: LAN Manager authentication level
Set to Send LM & NTLM responses only

Set the Minimum session security for NTLM SSP
Disable Require 128-bit encryption

Reboot

Connexion depuis un poste client Mac :

CMD-K sur une fenetre (finder), puis saisir "smb://hyperion" (ou encore "smb://pallier@hyperion")

Problèmes sur Mavericks (Mac OS 10.9) : http://cammodude.blogspot.fr

Workaround Option 1:

To force your connection to be SMB1, simply type cifs://servername instead of smb://servername when connecting to a Windows or NAS share. This is by far easier and requires no real configuration changes.

Workaround Option 2:

To force all connections to be SMB1:

Open A terminal window paste in the following line followed by the return key(should be all on one line):

echo "[default]" >> ~/Library/Preferences/nsmb.conf; 
echo "smb_neg=smb1_only" >> ~/Library/Preferences/nsmb.conf
Reboot

This command adds directives to force SMB connections to use the SMB1 protocol. This is slower but stable.

 

Revision 1172014-09-01 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1129 to 1129
  Si vous êtes toujours partants, allez directement au point 2)
Changed:
<
<
1) Travail à faire pour l'administrateur système sur hyperion
>
>
1) Travail à faire pour l'administrateur système sur hyperion (vous pouvez sauter cette section)
  Modifier le fichier de licences /usr/local/itt/license/license.dat, remplacer la ligne : "DAEMON idl_lmgrd" par "DAEMON idl_lmgrd port=1701"
Line: 1173 to 1173
 export PATH=$PATH:PATH_TO_IDL_BIN export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
Changed:
<
<
Il vous faudra remplacer PATH_TO_IDL_BIN par le chemin vers VOTRE installation d'idl (par exemple pour idl 8.3 sur MacOS : /Applications/exelis/idl83/bin ou bien /Users/monlogin/Applications/exelis/idl83/bin si c'est une installation seulement sur votre compte)
>
>
Il vous faudra remplacer PATH_TO_IDL_BIN par le chemin vers VOTRE installation d'idl (par exemple pour idl 8.3 sur Mac : /Applications/exelis/idl83/bin ou bien /Users/monlogin/Applications/exelis/idl83/bin si c'est une installation seulement sur votre compte)
 

Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac).

Line: 1181 to 1181
 Si vous êtes à l'extérieur du labo, continuez la lecture...
Changed:
<
<
b) "Creuser" un tunnel
>
>
b) Fichier de licence idl minimum
 
Added:
>
>
Créer un fichier de licence nommé "license.dat" dans le repertoire "license" de votre installation d'idl (quelquechose comme C:\Programmes\exelis\license sur Windows et /Applications/exelis/license sur Mac), contenant les 6 lignes suivantes :
############ license file comments, do not delete ###############  
# License Number(s):35689, 500181, 500448, 501255, 502304  
SERVER localhost 0021856ceeec 9700  
USE_SERVER  
DAEMON idl_lmgrd  
##################### end of license file #######################

c) "Creuser" un tunnel

  Utilisateurs Mac et Linux :
Line: 1201 to 1213
  (Remarque pour l'admin système : attention, sur le localhost on a le choix de la correspondance du port 1700 d'hyperion (port 9700 local) mais pas pour le 1701)
Changed:
<
<
Allez maintenant à la section "c) Lancer idl"
>
>
Allez maintenant à la section "d) Lancer idl"
 

Utilisateurs Windows (avec Putty) :

Changed:
<
<
Deux choses à faire encore :

(1) Créer un fichier de licence nommé "license.dat" dans le repertoire "License" de votre installation d'idl (quelquechose comme C:\Programmes\exelis\License), contenant les 6 lignes suivantes :

############ license file comments, do not delete ###############  
# License Number(s):35689, 500181, 500448, 501255, 502304  
SERVER localhost 0021856ceeec 9700  
USE_SERVER  
DAEMON idl_lmgrd  
##################### end of license file #######################

(2) Télécharger Putty (http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe) et l'exécuter pour créer une session avec les paramètres suivants :

>
>
  (NB : si vous voulez vraiment utiliser ce logiciel sur Mac OS, il faut le faire via macport ; voici un lien utile : http://korben.info/installer-putty-mac.html)
Line: 1260 to 1260
 
Changed:
<
<
c) Lancer idl
>
>
d) Lancer idl
  Voilà, vous avez créé un tunnel entre votre pc/mac et hyperion, passant par GATEWAY (vous êtes d'ailleurs connecté à la passerelle).
Line: 1268 to 1268
  Attention, une fois la session idl terminée, ne pas oublier de détruire le tunnel en vous déconnectant d'hyperion !!! (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)
Changed:
<
<
d) ON RECAPITULE ?
>
>
e) ON RECAPITULE ?
  Une fois les étapes ci-dessus réalisées, voici ce que vous avez à faire pour exécuter idl :

Revision 1162014-06-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1206 to 1206
  Utilisateurs Windows (avec Putty) :
Added:
>
>
Deux choses à faire encore :

(1) Créer un fichier de licence nommé "license.dat" dans le repertoire "License" de votre installation d'idl (quelquechose comme C:\Programmes\exelis\License), contenant les 6 lignes suivantes :

############ license file comments, do not delete ###############  
# License Number(s):35689, 500181, 500448, 501255, 502304  
SERVER localhost 0021856ceeec 9700  
USE_SERVER  
DAEMON idl_lmgrd  
##################### end of license file #######################

(2) Télécharger Putty (http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe) et l'exécuter pour créer une session avec les paramètres suivants :

 (NB : si vous voulez vraiment utiliser ce logiciel sur Mac OS, il faut le faire via macport ; voici un lien utile : http://korben.info/installer-putty-mac.html)

  • Démarrer Putty
Line: 1238 to 1252
  Cliquer sur le bouton "Save"
Changed:
<
<
  • Exécuter cette session en cliquant sur le bouton "Open"
>
>
  • Exécuter cette session

Cliquer sur le nom de la session, et sur le bouton "Open"

  Entrer votre login et mot de passe (du webmail)

Revision 1152014-06-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1162 to 1162
  Positionner la variable d'environnement avec 2 serveurs de jetons (pour pouvoir bosser à l'INTERIEUR (port 1700 de hyperion) ET à l'EXTERIEUR (port 9700 de localhost) du labo sans jamais rien modifier) :
Changed:
<
<
(Pour les utilisateurs de Windows, faire un clic droit sur Poste de Travail, puis onglet "Variables d'environnement", puis entrer la variable nommée LM_LICENSE_FILE avec la valeur "1700@hyperion.cesr.fr:9700@localhost")
>
>
Pour les utilisateurs de Windows:
 
Changed:
<
<
Sur MacOS ou Linux (après avoir installé IDL), placer les 2 lignes suivantes (une fois pour toutes) dans votre fichier de démarrage .bash_login (depuis votre répertoire home, ou bien ~/.bash_login directement depuis n'importe où), pour ne plus avoir à les taper :
>
>
Faire un clic droit sur Poste de Travail, puis onglet "Variables d'environnement", puis entrer la variable nommée LM_LICENSE_FILE avec la valeur "1700@hyperion.cesr.fr:9700@localhost")
 
Added:
>
>
Pour les utilisateurs MacOS ou Linux:

Placer les 2 lignes suivantes (une fois pour toutes) dans votre fichier de démarrage .bash_login (depuis votre répertoire home, ou bien ~/.bash_login directement depuis n'importe où), pour ne plus avoir à les taper :

 
export PATH=$PATH:PATH_TO_IDL_BIN
export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"

Revision 1142014-05-27 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1152 to 1152
 
Changed:
<
<
2) Pour vous (côté client), Il suffit de faire 2 choses sur votre pc/mac
>
>
2) Pour vous (côté client), voici ce qui est à faire sur votre pc/mac
  NB: For English readers, go to section 3) below
Changed:
<
<
PREREQUIS : idl doit être installé localement sur votre pc
>
>
PREREQUIS : idl doit être installé localement sur votre pc
  a) Positionner une variable d'environnement
Line: 1164 to 1164
  (Pour les utilisateurs de Windows, faire un clic droit sur Poste de Travail, puis onglet "Variables d'environnement", puis entrer la variable nommée LM_LICENSE_FILE avec la valeur "1700@hyperion.cesr.fr:9700@localhost")
Changed:
<
<
export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"

(Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_login, pour ne plus avoir à la taper)

Sur Mac OS X, après avoir installé IDL 8.2 (par exemple) pour Mac OS, il suffira d'ajouter ces 2 lignes dans votre fichier de démarrage .bash_login :

>
>
Sur MacOS ou Linux (après avoir installé IDL), placer les 2 lignes suivantes (une fois pour toutes) dans votre fichier de démarrage .bash_login (depuis votre répertoire home, ou bien ~/.bash_login directement depuis n'importe où), pour ne plus avoir à les taper :
 

Changed:
<
<
export PATH=$PATH:/Applications/exelis/idl82/bin
>
>
export PATH=$PATH:PATH_TO_IDL_BIN
 export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
Changed:
<
<
Pour votre cas personnel, dans votre fichier .bash_login, il faudra mettre le chemin vers votre installation d'idl (par exemple /Applications/exelis/idl83/bin pour idl 8.3, ou bien /Users/monlogin/Applications/exelis/idl83/bin si c'est une installation d'idl 8.3 seulement sur votre compte)
>
>
Il vous faudra remplacer PATH_TO_IDL_BIN par le chemin vers VOTRE installation d'idl (par exemple pour idl 8.3 sur MacOS : /Applications/exelis/idl83/bin ou bien /Users/monlogin/Applications/exelis/idl83/bin si c'est une installation seulement sur votre compte)
 
Changed:
<
<
Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.
>
>
Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac).
  Si vous êtes à l'extérieur du labo, continuez la lecture...
Line: 1185 to 1181
 b) "Creuser" un tunnel
Changed:
<
<
Utilisateurs Mac et Linux
>
>
Utilisateurs Mac et Linux :
  Pour les personnes qui utilisent Windows, aller à la section suivante "Utilisateurs Windows (avec Putty)"
Line: 1212 to 1201
 Allez maintenant à la section "c) Lancer idl"
Changed:
<
<
Utilisateurs Windows (avec Putty)
>
>
Utilisateurs Windows (avec Putty) :
  (NB : si vous voulez vraiment utiliser ce logiciel sur Mac OS, il faut le faire via macport ; voici un lien utile : http://korben.info/installer-putty-mac.html)
Line: 1263 to 1251
  Une fois les étapes ci-dessus réalisées, voici ce que vous avez à faire pour exécuter idl :
Changed:
<
<
  • Je suis au labo

Rien à faire ! Juste lancer idl (ou idlde), c'est tout !

>
>
Je suis au labo : Rien à faire ! Juste lancer idl (ou idlde), c'est tout !
 
Changed:
<
<
* Je suis chez moi
>
>
Je suis chez moi :
  * Mon poste tourne avec MacOS ou Linux :
Added:
>
>

 Ouvrir un terminal Exécuter le fichier de creation du tunnel vers hyperion : ./A_EXECUTER_DEPUIS_CHEZ_MOI_AVANT_IDL.sh Lancer votre idl Fermer le tunnel vers hyperion seulement quand vous avez terminé de travailler avec idl : (taper "exit" dans le terminal)
Added:
>
>
  * Mon poste tourne avec Windows :
Added:
>
>

 Ouvrir Putty et exécuter votre session nommée "use_hyperion_idl_license" (ou autre nom que vous avez donné à cette session) Lancer votre idl Fermer cette session seulement quand vous avez terminé de travailler avec idl
Changed:
<
<
>
>
  Bon, on peut encore améliorer les choses... si ça vous dit, allez voir un peu plus loin, juste après la partie IN ENGLISH.

Revision 1132014-05-27 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1156 to 1156
  NB: For English readers, go to section 3) below
Added:
>
>
PREREQUIS : idl doit être installé localement sur votre pc
 a) Positionner une variable d'environnement

Positionner la variable d'environnement avec 2 serveurs de jetons (pour pouvoir bosser à l'INTERIEUR (port 1700 de hyperion) ET à l'EXTERIEUR (port 9700 de localhost) du labo sans jamais rien modifier) :

Line: 1173 to 1175
 export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
Added:
>
>
Pour votre cas personnel, dans votre fichier .bash_login, il faudra mettre le chemin vers votre installation d'idl (par exemple /Applications/exelis/idl83/bin pour idl 8.3, ou bien /Users/monlogin/Applications/exelis/idl83/bin si c'est une installation d'idl 8.3 seulement sur votre compte)
 Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.

Si vous êtes à l'extérieur du labo, continuez la lecture...

Line: 1187 to 1191
  Ouvrir un tunnel avec mise en correspondance de 2 ports :
Changed:
<
<
ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MON_LOGIN_EMAIL@GATEWAY
>
>
* Avec un éditeur de texte (style "vi" ou "emacs" ou "gedit"...), créer un fichier "A_EXECUTER_DEPUIS_CHEZ_MOI_AVANT_IDL.sh"

* Y placer cette ligne unique :

* ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MON_LOGIN_EMAIL@GATEWAY

* (remplacer MON_LOGIN_EMAIL par votre login utilisé pour le mail ou pour vous connecter à la passerelle du labo, et GATEWAY par le serveur passerelle du labo)

 
Changed:
<
<
(remplacer MON_LOGIN_EMAIL par votre login utilisé pour le mail ou pour vous connecter à la passerelle du labo, et GATEWAY par le serveur passerelle du labo)
>
>
* Sauvegarder ce fichier

* Rendre ce fichier exécutable en tapant la commande suivante : chmod +x A_EXECUTER_DEPUIS_CHEZ_MOI_AVANT_IDL.sh

* Exécuter ce fichier : ./A_EXECUTER_DEPUIS_CHEZ_MOI_AVANT_IDL.sh

* Entrer votre login et mot de passe (du webmail)

  (Remarque pour l'admin système : attention, sur le localhost on a le choix de la correspondance du port 1700 d'hyperion (port 9700 local) mais pas pour le 1701)
Changed:
<
<
Allez maintenant à la section "c) Se connecter"
>
>
Allez maintenant à la section "c) Lancer idl"
 
Line: 1233 to 1249
 
  • Exécuter cette session en cliquant sur le bouton "Open"
Deleted:
<
<
c) Se connecter
 Entrer votre login et mot de passe (du webmail)
Added:
>
>
c) Lancer idl
 Voilà, vous avez créé un tunnel entre votre pc/mac et hyperion, passant par GATEWAY (vous êtes d'ailleurs connecté à la passerelle).

Il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.

Attention, une fois la session idl terminée, ne pas oublier de détruire le tunnel en vous déconnectant d'hyperion !!! (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)

Added:
>
>
d) ON RECAPITULE ?

Une fois les étapes ci-dessus réalisées, voici ce que vous avez à faire pour exécuter idl :

  • Je suis au labo

Rien à faire ! Juste lancer idl (ou idlde), c'est tout !

* Je suis chez moi

* Mon poste tourne avec MacOS ou Linux : Ouvrir un terminal Exécuter le fichier de creation du tunnel vers hyperion : ./A_EXECUTER_DEPUIS_CHEZ_MOI_AVANT_IDL.sh Lancer votre idl Fermer le tunnel vers hyperion seulement quand vous avez terminé de travailler avec idl : (taper "exit" dans le terminal)

* Mon poste tourne avec Windows : Ouvrir Putty et exécuter votre session nommée "use_hyperion_idl_license" (ou autre nom que vous avez donné à cette session) Lancer votre idl Fermer cette session seulement quand vous avez terminé de travailler avec idl

 

Revision 1122014-03-03 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1112 to 1111
 

IDL

Changed:
<
<

Utiliser mon IDL au labo ou bien à l'extérieur du labo (en une seule config)

>
>

Utiliser mon IDL perso (de mon pc) depuis l'extérieur du labo (mais aussi à l'intérieur) (en une seule config)

 
Changed:
<
<
Problème : Comment exécuter mon idl (celui qui est installé localement sur mon pc/mac) au labo et même à l'extérieur du labo ???
>
>
Problème : Comment exécuter mon idl (celui qui est installé localement sur mon pc/mac) à l'extérieur du labo (mais aussi à l'intérieur) ???
  Réponse : en profitant des licences du serveur hyperion
Changed:
<
<
En ce qui vous concerne, allez directement au point 2)
>
>
Il s'agit de faire une configuration unique qui vous permettra d'utiliser votre idl installé sur votre portable, quelque soit votre situation, aussi bien :
  • à l'extérieur du labo
  • en wifi (y-compris wifi IRAP au labo)
  • à l'intérieur du labo, dans votre bureau, branché avec un câble réseau

Comprenez bien qu'il s'agit d'exécuter l'idl de votre portable, PAS CELUI d'HYPERION. Donc, vous n'aurez pas accès aux données qui sont sur hyperion, sauf si vous en avez une copie locale sur votre portable. Si vous voulez exécutez idl SUR HYPERION, alors c'est différent, il s'agit seulement de se connecter à hyperion via la passerelle (voir à ce sujet la section "Accès à hyperion avec Putty")

Si vous êtes toujours partants, allez directement au point 2)

  1) Travail à faire pour l'administrateur système sur hyperion
Line: 1145 to 1154
  2) Pour vous (côté client), Il suffit de faire 2 choses sur votre pc/mac
Added:
>
>
NB: For English readers, go to section 3) below
 a) Positionner une variable d'environnement

Positionner la variable d'environnement avec 2 serveurs de jetons (pour pouvoir bosser à l'INTERIEUR (port 1700 de hyperion) ET à l'EXTERIEUR (port 9700 de localhost) du labo sans jamais rien modifier) :

Line: 1170 to 1181
 b) "Creuser" un tunnel
Changed:
<
<
(Pour les personnes qui utilisent Windows, vous pouvez faire la même chose que ci-dessous avec le logiciel Putty, en vous inspirant de ce qui est décrit sur cette même page au point 4) a) de l'article http://planetoweb.cesr.fr/twiki/bin/view/Main/HowtoInformatique#Se_connecter_un_serveur_linux_en)
>
>
Utilisateurs Mac et Linux

Pour les personnes qui utilisent Windows, aller à la section suivante "Utilisateurs Windows (avec Putty)"

  Ouvrir un tunnel avec mise en correspondance de 2 ports :
Line: 1180 to 1193
  (Remarque pour l'admin système : attention, sur le localhost on a le choix de la correspondance du port 1700 d'hyperion (port 9700 local) mais pas pour le 1701)
Changed:
<
<
Entrer le mot de passe pour GATEWAY (pour vous connecter de votre pc à GATEWAY)
>
>
Allez maintenant à la section "c) Se connecter"

Utilisateurs Windows (avec Putty)

(NB : si vous voulez vraiment utiliser ce logiciel sur Mac OS, il faut le faire via macport ; voici un lien utile : http://korben.info/installer-putty-mac.html)

  • Démarrer Putty

  • Remplir les champs suivants :

Host Name = GATEWAY (nom à remplacer par le VRAI, avec son adresse complète (nom + domaine), nom que je tairai sur cette page publique)

port = 22

connection type = ssh

  • Déployer la catégorie "Connection/Session" (dans le panneau de gauche, en bas), et sélectionner "Tunnels"

  • Créer 2 tunnels :
    • local:9700 vers hyperion:1700 :
      • Source port : 9700
      • Destination : hyperion.cesr.fr:1700
      • cliquer sur bouton Add
    • local:1701 vers hyperion:1701 :
      • Source port : 1701
      • Destination : hyperion.cesr.fr:1701
      • cliquer sur bouton Add

  • Sauvegarder cette session

Cliquer sur la catégorie "Session" (dans le panneau de gauche, en haut)

Donner un nom à cette session dans le champ "Saved Sessions", par exemple "use_hyperion_idl_license"

Cliquer sur le bouton "Save"

  • Exécuter cette session en cliquant sur le bouton "Open"

c) Se connecter

Entrer votre login et mot de passe (du webmail)

  Voilà, vous avez créé un tunnel entre votre pc/mac et hyperion, passant par GATEWAY (vous êtes d'ailleurs connecté à la passerelle).
Line: 1188 to 1244
  Attention, une fois la session idl terminée, ne pas oublier de détruire le tunnel en vous déconnectant d'hyperion !!! (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)
Added:
>
>
 Bon, on peut encore améliorer les choses... si ça vous dit, allez voir un peu plus loin, juste après la partie IN ENGLISH.
Changed:
<
<
Now, IN ENGLISH (and for Mac/Linux users only) :
>
>
3) Now, IN ENGLISH (and for Mac/Linux users only) :
  (First, be sure you have removed any remaining license.dat file from your itt/license/ directory ; just drop it, you don't need it)
Changed:
<
<
1) set and export LM_LICENSE_FILE
>
>
3.1) set and export LM_LICENSE_FILE
  Open a new terminal and set this variable :
Line: 1207 to 1266
 If you are OUTSIDE the lab, you need one last step...
Changed:
<
<
2) set a tunnel
>
>
3.2) set a tunnel
  Open a new terminal and create this tunnel :
Line: 1222 to 1281
 
Changed:
<
<
ETAPE FACULTATIVE : On peut encore améliorer les choses... Comment ?
>
>
4) ETAPE FACULTATIVE : On peut encore améliorer les choses... Comment ?
  En s'arrangeant pour ne plus avoir aucun mot de passe à entrer grâce aux clés publique&privée.

Voici comment faire...

Changed:
<
<
1) Créer une paire de clés privée/publique sur mon pc
>
>
4.1) Créer une paire de clés privée/publique sur mon pc
 
$ ssh-keygen -t dsa

Line: 1240 to 1299
 Your public key has been saved in /Users/pallier/.ssh/id_dsa.pub.
Changed:
<
<
2) Distribuer ensuite la clé publique de mon pc sur la passerelle du labo (que nous appelerons GATEWAY pour raison de sécurité)
>
>
4.2) Distribuer ensuite la clé publique de mon pc sur la passerelle du labo (que nous appelerons GATEWAY pour raison de sécurité)
  La clé publique, doit être copiée sur le serveur distant dans ~/.ssh/authorized_keys. (La clé privée reste sur votre poste client)
Line: 1255 to 1314
 
Changed:
<
<
3) Tester maintenant la connexion à GATEWAY
>
>
4.3) Tester maintenant la connexion à GATEWAY
  ssh monlogin@GATEWAY

On peut désormais se connecter directement sans mot de passe !!!

Changed:
<
<
4) Faire de même entre GATEWAY et hyperion
>
>
4.4) Faire de même entre GATEWAY et hyperion
  Maintenant, il suffit de faire la même chose que 2) et 3) mais depuis GATEWAY (et vers hyperion)

Revision 1112014-02-28 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 39 to 39
  Pour accéder au site de réservation des ressources, il suffit de faire comme au premier point ci-dessus (intranet), et de renseigner l’adresse du site : https://localhost:9443/grr
Added:
>
>

Accès à hyperion avec Putty

Comment accéder à un serveur interne au labo depuis l'extérieur, avec le logiciel Putty (souvent utilisé sur Windows)

(NB : si vous voulez vraiment utiliser ce logiciel sur Mac OS, il faut le faire via macport ; voici un lien utile : http://korben.info/installer-putty-mac.html)

A. Solution simple, sans tunnel

1) Démarrer Putty

2) Remplir les champs suivants :

Host Name = GATEWAY (nom à remplacer par le VRAI que je tairai sur cette page publique)

port = 22

connection type = ssh

3) Cliquer sur la catégorie "SSH" (à gauche), et sélectionner X11

4) Cocher "Enable X11 forwarding"

5) Cliquer sur la catégorie "Session" (à gauche, tout en haut)

6) Donner un nom à cette session dans le champ "Saved Sessions", par exemple "passerelle_labo"

7) Cliquer sur le bouton "Save"

From here, si on veut pouvoir visualiser des plots idl, il faut aussi démarrer le logiciel Xming (qu'on peut trouver ici : http://www.clubic.com/lancer-le-telechargement-202646-0-xming.html)

8) Exécuter cette session en cliquant sur le bouton "Open"

9) Saisir votre login puis votre mot de pass (ceux du webmail)

==> c'est bon, on est sur la passerelle

10) pour se loguer sur hyperion, taper ceci :

ssh -X monlogin@hyperion.cesr.fr

(le "-X" pas nécessaire si on ne veut pas d'affichage graphique)

(attention, ici utiliser le login hyperion, pas celui du webmail)

puis entrer votre mot de passe de hyperion (pas celui du webmail)

==> c'est bon, on est sur hyperion

11) Tester si on a bien une connexion graphique

xterm

ou bien démarrer idl et faire un plot

Si ça ne marche pas c'est qu'il faut donner le nom exact du DISPLAY dans la session putty.

Depuis hyperion, pour voir le numero exact du display (normalement quelque chose comme localhost:11.0 ou 11.1...), taper :

echo $DISPLAY

et mettre ce nom dans putty, dans SSH/X11/"X display location" (avec "Enable X11 forwarding" coché)

A. Solution avec tunnel

Si on a besoin de faire ça souvent, il vaut mieux "creuser" un tunnel d'accès direct au serveur hyperion (ou autre), afin de pouvoir s'y connecter directement (sans l'étape passerelle, qui devient un intermédiaire transparent).

//TODO

 

MAC OS X

Revision 1102014-02-27 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 9 to 9
 
Added:
>
>

Accéder aux ressources du labo depuis l'extérieur

 
Deleted:
<
<

Accéder à l'intranet depuis l'extérieur

 
Changed:
<
<

Intranet depuis l'extérieur du labo (avec tunnel)

>
>
https://intranet.irap.omp.eu/spip.php?article103

Accès à l'Intranet depuis l'extérieur du labo (avec tunnel)

  Comment accéder à l'intranet depuis l'extérieur ?

Revision 1092013-07-24 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 4148 to 4148
 MacOS propose un "super-daemon" launchd qui regroupe les fonctionnalités de init (lance démon lors du démarrage), crond (lance démon lors de top horaires), et (x)inetd (lance démon lors de requêtes réseaux)
Added:
>
>

CRON

Pour tester manuellement une entrée du cron.daily :

run-parts /etc/cron.daily

 

FTP

ex: installation ftp pour l'expérience RAMAN (sur ExoMars)

Revision 1082013-07-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 4351 to 4351
 

SSH, config plus stricte

Added:
>
>
1) Accès ssh direct en root autorisé seulement depuis mon pc

http://www.ibm.com/developerworks/aix/library/au-ssh_restrict/

vi /etc/ssh/sshd_config :

PermitRootLogin yes
AllowUsers moi@MONPC moi@MONPC.domain root@MONPC root@MONPC.domain moi@PASSERELLE 

(le moi@PASSERELLE est nécessaire pour que je puisse aussi me connecter depuis chez moi)

/etc/init.d/sshd restart

Si j'essaye une connexion (moi ou root) depuis MONPC, ça passe

Si j'essaye une connexion (moi ou root) depuis un AUTREPC, je suis rejeté

On voit le refus de connexion dans /var/log/secure :

User root from AUTREPC not allowed because not listed in AllowUsers
Jul 16 14:57:06 planetoweb sshd[28008]: input_userauth_request: invalid user root
Jul 16 14:57:11 planetoweb sshd[28007]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=AUTREPC  user=root
Jul 16 14:57:13 planetoweb sshd[28007]: Failed password for invalid user root from AUTREPC_IP port 60246 ssh2

2) Encore plus strict, AUCUN accès ssh direct en root autorisé

http://www.howtogeek.com/howto/linux/security-tip-disable-root-ssh-login-on-linux/

 
vi /etc/ssh/sshd_config

Changed:
<
<
Port 22 : on pourrait mettre ici un autre port, genre 2010, histoire de brouiller les pirates...
>
>
(Port 22 : on pourrait mettre ici un autre port, genre 2010, histoire de brouiller les pirates...)
 
Changed:
<
<
PermitRootLogin? no
>
>
PermitRootLogin yes changed to : PermitRootLogin no
 
Changed:
<
<
LoginGraceTime? 2m
>
>
LoginGraceTime 2m
 changed to :
Changed:
<
<
LoginGraceTime? 30
>
>
LoginGraceTime 30
  /etc/init.d/sshd restart
Line: 4377 to 4410
  /var/log/messages
Added:
>
>
/var/log/secure
 /var/log/boot.log

Voir aussi section suivante (test des disques)

Revision 1072013-07-05 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1232 to 1232
 (il suffit de taper une seule fois "exit" pour revenir à mon pc)
Added:
>
>

IDL 8.1 installer SVN

Selectionner Window/Source Control Tools/Subversion

Selectionner le connecteur SVN nommé SVNKit 1.3.0 (for svn 1.6.2) (ou un plus ancien car le serveur svn qui est sur planetoweb est une ancienne version 1.4.4)

Terminer l'installation, redémarrer IDL, c'est fait

Le depot (repository) svn de chemcam est http://planetoweb.cesr.fr/chemcam_svn et accepte les comptes créés sur ce wiki

 

IDL 8.1 workbench (idlde) crash sous Mac OS 10.7

Revision 1062012-10-29 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1080 to 1080
  export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
Changed:
<
<
(Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_profile, pour ne plus avoir à la taper)
>
>
(Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_login, pour ne plus avoir à la taper)

Sur Mac OS X, après avoir installé IDL 8.2 (par exemple) pour Mac OS, il suffira d'ajouter ces 2 lignes dans votre fichier de démarrage .bash_login :

export PATH=$PATH:/Applications/exelis/idl82/bin
export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
  Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.

Revision 1052012-10-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 664 to 664
 

ECLIPSE

Added:
>
>

SVN : Supprimer une location (une adresse de dépôt)

Window -> show view -> Other... -> SVN repositories

sélectionner une location et la supprimer (touche suppr)

 

Install Eclipse Indigo (3.7) sur Mac OS X (10.7.2) avec Yoxos : NE MARCHE PAS

1) Download Yoxos :

Revision 1042012-10-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 9 to 9
 
Deleted:
<
<

GWIS

 
Changed:
<
<
(should be later moved to : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject)
>
>

Accéder à l'intranet depuis l'extérieur

 
Changed:
<
<
Réalisation d'un site web générique de projet en s'inspirant du site Europlanet : GWIS (Generic Web Information System)
>
>

Intranet depuis l'extérieur du labo (avec tunnel)

 
Changed:
<
<
Il s'agit de concevoir un système d'information web professionnel à l'aide d'un framework Php nommé Cakephp (http://cakephp.org)
>
>
Comment accéder à l'intranet depuis l'extérieur ?
 
Changed:
<
<
Pour cakephp, voir aussi http://bakery.cakephp.org/
>
>
1) Créer un tunnel (entre le port local 9443 et le port distant 443 du serveur web du labo, via la passerelle)
 
Changed:
<
<
Nouvelle version 2.1.1 sortie le 26/3/12 : http://bakery.cakephp.org/articles/lorenzo/2012/03/26/cakephp_2_1_1_and_1_3_15_released
>
>
ssh -L 9443:SERVEURINTRANET.irap.omp.eu:443 MON_LOGIN_DU_LABO@SERVEURGATEWAY.irap.omp.eu
 
Changed:
<
<
Version 2.1.0 sortie le 5/3/12
>
>
(Pour les personnes qui utilisent Windows, vous pouvez faire la même chose avec le logiciel Putty, en vous inspirant de ce qui est décrit sur cette même page au point 4) a) de l'article http://planetoweb.cesr.fr/twiki/bin/view/Main/HowtoInformatique#Se_connecter_un_serveur_linux_en)
 
Changed:
<
<
Version en cours : http://cakephp.lighthouseapp.com/projects/42648-cakephp/milestones/current
>
>
2) Pointer son navigateur sur https://localhost:9443
 
Changed:
<
<
Roadmaps (pas très à jour) :
>
>
Accepter le certificat, et le tour est joué, vous êtes sur l'intranet !
 
Deleted:
<
<
Code completion for cakephp in Eclipse : http://mark-story.com/posts/view/code-completion-for-cakephp-in-eclipse
 
Changed:
<
<

ROADMAP (PLAN OF WORK, CAHIER DES CHARGES)

>
>

Redmine depuis l'extérieur du labo (avec tunnel)

 
Changed:
<
<
Ne pas oublier de noter tout ce que tu fais. Rédige au fur et à mesure (avec OpenOffice).
>
>
Comment accéder au site redmine depuis l'extérieur ?
 
Changed:
<
<
NOUVELLES MODIFS FAITES :
>
>
C'est la même chose qu'au point précédent, mais en remplaçant SERVEURINTRANET par SERVEURREDMINE
 
Changed:
<
<
4 juin :
  • VII-3 c) relation 1-1
>
>

Réservation des ressources depuis l'extérieur du labo (avec tunnel)

 
Changed:
<
<
16 mai :
  • IX-5
  • X - Documentation
>
>
Pour accéder au site de réservation des ressources, il suffit de faire comme au premier point ci-dessus (intranet), et de renseigner l’adresse du site : https://localhost:9443/grr
 
Deleted:
<
<
15 mai :
  • IX-2 et 3
 
Changed:
<
<
14 mai :
  • IX-1
  • VI-4
>
>

MAC OS X

 
Changed:
<
<
3 mai :
>
>

locate

 
Changed:
<
<
  • section VI-3 (lost password)
>
>
Il faut créer la bd une première fois :
 
Changed:
<
<
  • section IX-1 (logout)
>
>
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
 
Changed:
<
<
5 Avril :
>
>

VIM

 
Changed:
<
<
  • section VII-3 (crud)
>
>
http://macvim.org/OSX/index.php
 
Changed:
<
<
Plus tard :
>
>
By default, Vim runs in "compatible" mode. That is, it acts a lot like traditional vi, without the improvements. Unless you want a maximally vi-compatible version of vim, I recommend that you copy the standard startup files to your home directory, and name them .vimrc and .gvimrc.
 
Changed:
<
<
  • (pas encore sûr, à réfléchir) ajouter un script qui permet de définir un tableau de champs obligatoires pour un Modèle donné ==> Ces champs devront obligatoirement être saisis dans les vues associées au Modèle (voir http://book.cakephp.org/1.3/view/1147/required)
>
>
Ce que j'ai fait simplement :
 
Added:
>
>
1) recherche de vimrc_example :
 
Changed:
<
<
I - Installation des outils
>
>
locate vimrc
 
Changed:
<
<
Serveur web+php+mysql Xampp : Télécharger et installer un serveur web apache/php/mysql avec xampp pour windows, c'est très facile : http://www.apachefriends.org/fr/xampp-windows.html
>
>
2) Copie locale :
 
Changed:
<
<
Framework php CakePhp : Télécharger et installer cakephp, la version 2.1 (la plus récente, bientôt officielle)
>
>
cp /usr/share/vim/vim73/vimrc_example.vim .vimrc
 
Deleted:
<
<
IDE Eclipse : Télécharger et installer Eclipse + plugin PDT pour php
 
Added:
>
>

Installation AMP avec XAMPP (solution la plus simple, bien pour le développement, mais pas très blindée pour un serveur de production)

 
Added:
>
>
Version 1.7.3
 
Changed:
<
<
II - Familiarisation avec Cakephp : Lecture documentation + test des tutoriels
>
>
http://www.apachefriends.org/en/xampp-macosx.html
 
Changed:
<
<
http://cakephp.org/ (la doc de la version 2 est ici : http://book.cakephp.org/2.0/en)
>
>
(ou aussi en french, mais moins à jour, http://www.apachefriends.org/fr/xampp-macosx.html)
 
Deleted:
<
<
1) Lire le MVC : http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view-controller.html Lire un peu plus sur le sujet : - les Controlleurs : http://book.cakephp.org/2.0/en/controllers.html - les Vues : http://book.cakephp.org/2.0/en/views.html - les Modèles : http://book.cakephp.org/2.0/en/models.html
 
Changed:
<
<
2) tester les tutoriels sur le "blog" : a) tester le tutoriel cakephp "blog", très simple : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/blog.html b) tester la 2e partie du tutoriel "blog" : http://book.cakephp.org/2.0/en/getting-started.html#blog-tutorial-adding-a-layer
>
>
1) Download
 
Changed:
<
<
3) comprendre la génération de code avec l'outil important de cakephp : "bake" http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html
>
>
2) Install (environ 300Mo)
 
Changed:
<
<
4) AUTH et ACL :
>
>
XAMPP est installé dans le répertoire/Applications/XAMPP
 
Changed:
<
<
Tester le tutoriel blog avec l'ajout de auth et acl : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html
>
>
3) Démarrer
 
Changed:
<
<
(voir aussi ce tutoriel plus complet : part1 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html, part2 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html)
>
>
sudo /Applications/XAMPP/xamppfiles/xampp start
 
Changed:
<
<
doc sur AUTH : http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html
>
>
Sur l'écran devrait apparaitre les instructions suivantes:
 
Changed:
<
<
doc sur ACL : http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html
>
>
Démarre XAMPP pour MacOS X 1.7.3... XAMPP: Démarre Apache avec SSL... XAMPP: Démarre MySQL... XAMPP: Démarre ProFTPD... XAMPP démarré.
 
Changed:
<
<
5) important aussi, disponible uniquement depuis cakephp 2.1, la gestion des événements : http://book.cakephp.org/2.0/en/core-libraries/events.html
>
>
Moi j'ai plutôt un pb avec proftpd, sans doute incompatible avec mac :
 
Changed:
<
<
6) A lire aussi, le cycle de développement complet : http://book.cakephp.org/2.0/en/development.html surtout lire : - Exceptions - Error Handling - Debugging - Testing
>
>
File permissions are being checked...ok. Starting XAMPP for Mac OS X 1.7.3... XAMPP: Starting Apache...ok. XAMPP: Starting MySQL...ok. XAMPP: Starting ProFTPD...XAMPP/XAMPP/xamppfiles/xampp: line 184: /Applications/XAMPP/xamppfiles//var/proftpd/start.err: No such file or directory fail. Contents of "/Applications/XAMPP/xamppfiles//var/proftpd/start.err": cat: /Applications/XAMPP/xamppfiles//var/proftpd/start.err: No such file or directory
 
Added:
>
>
4) Tester
 
Changed:
<
<
III - En s'inspirant du tutoriel "blog", commmencer à construire une architecture à partir d'un sous-ensemble de la BDD Europlanet
>
>
http://localhost/ pointe automatiquement sur :
 
Changed:
<
<
1) Ce projet est géré en versions avec subversion (plugin Eclipse subclipse)
>
>
http://localhost/xampp/splash.php
 
Changed:
<
<
2) Construire un schéma d'une petite BDD avec MysqlWorkbench Ce schéma contient 7 tables principales : - people (lien N-1 avec institutes, status, et profiles, et 1-N avec resources) : id, name, firstname, email, password, status, active, job, created, updated (le champ "active" est un booléen VRAI par défaut) - status : id, name (avec les valeurs suivantes pour name : NULL, 'registered', 'invalidated', 'validated') - profiles : id, name, level (level indique la hiérarchie ; name et level ont les valeurs suivantes : {'admin',10}, {'priv',5}, {'validator',3}, {'normal',0} ; donc on a la hiérarchie admin > priv > validator > normal) - institutes : id, name, created, updated - expertises : id, name (lien M-N avec people) - resources (lien M-N avec sciencases) : id, name, created, updated - sciencecases : id, name, created, updated
>
>
et ça marche !
 
Changed:
<
<
Pour gérer les relation M-N, il faudra créer les tables intermédiaires suivantes (voir la convention de nommage dans cakephp : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm) :
  • resources_sciencecases : avec les champs resources_id et sciencecases_id (les 2 clés étrangères formant la clé primaire de la table)
  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table)
>
>
Si plus tard on remplace la page d'accueil de XAMPP par la sienne, on peut toujours joindre la page d'accueil de XAMPP avec http://localhost/xampp/
 
Changed:
<
<
Tous les champs sont obligatoires (NOT NULL), sauf people.job (default NULL).
>
>
5) Aspects sécurité
 
Changed:
<
<
Toutes les clés primaires (id) sont autoincrémentées.
>
>
Comme cela a déjà été expliqué antérieurement XAMPP n'est pas fait pour l'emploi de production, mais seulement pour développeur et l'environnement du développement. Cela a pour suite que XAMPP est volontairement préconfiguré pour ne pas être restrictif et être au contraire trés ouvert. Pour un développeur cela est idéal qu'il ne soit pas limité par les limites du systéme. Par contre pour un emploi en production cela est absolument pas recommendable.
 
Changed:
<
<
Les champs "created" et "updated" sont gérés automatiquement par cakephp.
>
>
Ici, une liste de choses donc XAMPP est volontairement(!) insécurisé:
 
Changed:
<
<
Ajouter la contrainte "on delete CASCADE" (avec MysqlWorkbench) sur les clés étrangères des tables M-N (resources_sciencecases et expertises_people)
>
>
1. L'administrateur (root)MySQL n'a pas de mot de passe. 2. Le démon MySQL est joignable par le réseau. 3. Le démon ProFTPD utilise le mot de passe "xampp". 4. PhpMyAdmin est joignable par le réseau. 5. MySQL et Apache fonctionne sous le même utilisateur (nobody)
 
Changed:
<
<
Ajouter la contrainte "on delete NULL" sur toutes les clés étrangères des autres tables (people, resources)
>
>
Dans la page XAMPP-Demo (que l'on trouve sous http://localhost) il y a le point "Security check". À cet endroit on peut faire apparaître le niveau de sécurité actuel de XAMPP.
 
Changed:
<
<
Générer le script sql de création de la base.
>
>
Si on veut utiliser XAMPP en réseau , pour que le serveur XAMPP soit accessible par d'autres utilisateurs, alors il faut impérativement exécuter les commandes suivantes avec lesquelles ont pourra alors limiter les failles de sécurité:
 
Changed:
<
<
Vérifier que MysqlWorkbench ajoute bien les contraintes sur les clés étrangères (FK = "Foreign Key")
>
>
/Applications/XAMPP/xamppfiles/xampp security
 
Deleted:
<
<
Alimenter les tables avec des données quelconques
 
Changed:
<
<
3) Configurer l'accès à la BDD login : epn pass : pass
>
>
6) START et STOP
 
Changed:
<
<
4) Avec l'outil "bake", construire un premier échafaudage (scaffolding) automatique MVC (modèles, vues, contrôleurs) + tests unitaires PhpUnit http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html (cake bake project …) cake bake model all cake bake controller all cake bake view all
>
>
To start XAMPP simply open XAMPP Control and start Apache, MySQL and ProFTPD.
 
Changed:
<
<
Par défaut, l'action "people/index" ne doit afficher que les personnes dont le champ "active" est à TRUE et le champ "status" vaut "validated"
>
>
Mais, on peut aussi utiliser la commande /Applications/XAMPP/xamppfiles/xampp :
 
Changed:
<
<
5) Lancer les tests générés par "bake" (avec phpUnit, inclus dans Xampp ?) pour tester les modèles et les contrôleurs http://book.cakephp.org/2.0/en/development/testing.html cake bake fixture all ? cake bake test all ? Depuis cakephp 2.1 : Console/cake test app/Model/Post.php Console/cake test app/Controller/PostsController.php
>
>
on peut non seulement démarrer Xampp mais aussi exécuter d'autres commandes :
 
Changed:
<
<
6) Ajouter la validation des champs de tous les formulaires http://book.cakephp.org/2.0/en/models/data-validation.html "bake" ajoute des validations par défaut. Les étendre si nécessaire pour que toutes les validations soient générées automatiquement, en fonction du type des champs. Vérifier que les champs obligatoires sont bien obligatoires en saisie. Ajouter un test pour s'assurer qu'une personne est obligée de remplir tous les champs (sauf people.job) quand elle s'enregistre.
>
>
Pour arrêter XAMPP simplement entrer cette commande:
 
Added:
>
>
/Applications/XAMPP/xamppfiles/xampp stop
 
Added:
>
>
Pour démarrer Apache avec support SSL suivre les commandes suivantes:
 
Changed:
<
<
IV - Gestion du projet avec ICESCRUM
>
>
/Applications/XAMPP/xamppfiles/xampp startssl
 
Changed:
<
<
http://planetoweb2.cesr.fr:8080/icescrum
>
>
Et Apache avec support SSL fonctionne déjà. Joignable sous https://localhost.
 
Changed:
<
<
http://www.icescrum.org/
>
>
Liste des autres commandes : http://www.apachefriends.org/fr/xampp-macosx.html#3413
 
Deleted:
<
<
doc plus complète :
 
Deleted:
<
<
https://www.kagilum.com/fr/blog
 
Changed:
<
<
ex : https://www.kagilum.com/fr/blog/les-taches-selon-son-role-icescrum/
>
>
7) FICHIERS ET RÉPERTOIRES IMPORTANTS
 
Changed:
<
<
Un diagramme des classes uml pour décrire SCRUM (intéressant à mettre dans le rapport de stage), et décrivant les 3 types de stories (user, technical et defect) : http://www.aubryconseil.com/post/Un-%C3%A9l%C3%A9ment-du-backlog-de-produit
>
>
/Applications/XAMPP/xamppfiles/bin
 
Changed:
<
<
diagramme d'état uml pour montrer les différents états d'un élément du backlog (c'est à dire une feature ou une user story ; rappel : une feature = 1 grosse user story qui doit être décomposée en N user stories) : http://www.aubryconseil.com/post/2007/06/21/251-les-etats-significatifs-d-un-element-de-backlog
>
>
Ici les commandes pour XAMPP.
 
Added:
>
>
(il suffit de placer /Applications/XAMPP/xamppfiles/bin dans mon $PATH pour que j'ai accès à toutes les commandes de xampp directement, telles que "mysql")
 
Changed:
<
<
V - Authentification et Contrôle d'accès
>
>
/Applications/XAMPP/xamppfiles/bin/mysql appelle par ex .MySQL.
 
Changed:
<
<
1) Ajouter l'authentification (AUTH) Login = email Auth (et Acl) doivent avoir pour support la table "people" (et status et profiles). Auth (et Acl) impliquent aussi l'usage des Sessions (http://book.cakephp.org/2.0/en/development/sessions.html) Astuce : dans la session, stocker l'id de la personne, et non pas son email (car l'email peut changer, mais pas l'id)
>
>
/Applications/XAMPP/htdocs/
 
Changed:
<
<
Toute personne non authentifiée (accès anonyme) peut : - lire (R ) toutes les tables, sauf la table "resources" - s'enregistrer (droit C sur la table people)
>
>
Le répertoire Root du serveur web Apache. Ici sont les pages web d'Apache.
 
Changed:
<
<
Toute personne authentifiée peut : - lire (R ) toutes les tables (y-compris "resources") - modifier (U) sa fiche (sauf son profil), mais pas celle des autres - créer (C ) une ressource - modifier/supprimer (UD) une ressource qu'elle a créée, mais pas celles des autres - modifier (U) un institut auquel elle appartient
>
>
/Applications/XAMPP/etc/httpd.conf
 
Changed:
<
<
Gérer le login et le logout
>
>
Le fichier central de configuration du serveur web Apache.
 
Changed:
<
<
Ajouter les tests nécessaires : (Utiliser des "fixtures", cf section "Fixtures" dans http://book.cakephp.org/2.0/en/development/testing.html) (cake bake fixture all ?) Tester qu'une personne non authentifiée : - peut lire la table 'resource' - peut s'enregistrer - ne peut pas modifier une table Tester qu'une personne authentifiée peut : … Faire un test login/logout complet selon le scénario suivant : - une personne se logue - vérifier qu'elle peut créer une ressource - elle se délogue - vérifier qu'elle ne peut plus créer une ressource
>
>
/Applications/XAMPP/etc/my.cnf
 
Added:
>
>
Le fichier de configuration pour le serveur MySQL-Base de données.
 
Changed:
<
<
2) Ajouter le contrôle d'accès (ACL)
>
>
/Applications/XAMPP/etc/php.ini
 
Changed:
<
<
Créer quelques personnes avec des rôles (profils) différents :
  • 'user1', profil 'admin' (tous les droits)
  • 'user2' et 'user3', profil 'normal', utilisateur normal
  • 'user4', profil 'priv', utilisateur privilégié
  • 'user5', profil 'validator', utilisateur pouvant valider d'autres utilisateurs
>
>
Le fichier de configuration de PHP.
 
Changed:
<
<
Une personne de profil 'admin' a un droit CRUD (créer/lire/modifier/supprimer) sur toutes les tables.
>
>
/Applications/XAMPP/etc/proftpd.conf
 
Changed:
<
<
Une personne de profil 'priv' :
  • a un droit CRUD seulement sur la table 'institutes'
  • peut modifier le profil de toutes les personnes (sauf le sien)
>
>
le fichier de configuration de ProFTPd.
 
Changed:
<
<
Ajouter les tests nécessaires :
  • tester que 'user1' peut tout faire (faire juste quelques tests, pas tout)
  • tester que 'user4' : * peut ajouter un nouvel institut * peut modifier le profil d'une personne (mais pas le sien)
  • tester que 'user2' : * ne peut pas modifier une ressource qui ne lui appartient pas * peut ajouter une nouvelle ressource, et la modifier ensuite * peut modifier son email (login) et/ou son mot de passe
...
>
>
8) Mes Sites Webs
 
Added:
>
>
You can put your Websites in /Applications/XAMPP/htdocs/ and access them via http://localhost/
 
Changed:
<
<
VI - ENREGISTREMENT DES UTILISATEURS (registration)
>
>
Or you put your Websites in the Sites-Folder in your Home and access them via http://localhost/~pallier/.
 
Changed:
<
<
1) Réalisation de la procédure d'enregistrement (inscription) d'une personne :
>
>
Whats the username and the password for MySQL?
 
Changed:
<
<
(voir s'il n'existe pas déjà un plugin cakephp pour gérer ça, car c'est assez classique au début)
>
>
Username: root Password: No password
 
Deleted:
<
<
a) une personne remplit sa fiche d'enregistrement et la soumet (SUBMIT) ==> elle est enregistrée dans la table people avec "status" à NULL
 
Changed:
<
<
b) elle reçoit un 1er mail de confirmation avec un lien de validation
>
>
9) Désinstallation
 
Changed:
<
<
c) elle clique sur le lien de validation, ce qui valide son inscription ==> son champ "status" passe à "registered" ; les validateurs reçoivent un mail pour les avertir de cette inscription, avec un lien vers la page du site permettant de valider ou invalider la personne
>
>
To uninstall XAMPP just stop it and move it to the Trash.
 
Changed:
<
<
d) elle reçoit un 2e mail de confirmation lui disant qu'elle est inscrite, MAIS qu'elle doit attendre que son inscription soit validée par un 'validateur', et qu'elle recevra un mail pour le lui confirmer
>
>
Ou bien
 
Changed:
<
<
e) si un validateur valide l'inscription, la personne reçoit un mail pour l'en informer (à partir de là, elle peut se connecter au site) ==> son "status" passe à "validated"
>
>
sudo rm -rf /Applications/XAMPP
 
Deleted:
<
<
f) si un validateur invalide l'inscription, la personne reçoit un mail pour l'en informer ==> son "status" passe à "invalidated"
 
Deleted:
<
<
Ajouter les actions suivantes au Contrôleur "person" :
  • validate (profil 'validator') : pour valider une personne (champ "status")
  • invalidate (profil 'validator') : pour invalider une personne
  • deleteInvalidated (profil 'priv') : pour supprimer les personnes ayant un statut "invalidated"
  • activate (profil 'priv') : pour activer une personne (champ "active")
  • deactivate (profil 'priv') : pour désactiver une personne
 
Changed:
<
<
Ajouter/modifier les tests nécessaires
>
>

Installation AMP (Apache Mysql Php) en utilisant MacPort

 
Changed:
<
<
2) Ajouter un captcha sur la fiche d'inscription
>
>
http://www.blogafab.com/installer-apache-2-mysql-5-et-php-5-3-sur-mac-os-10-7-lion-avec-macport/
 
Changed:
<
<
Ajouter/modifier les tests nécessaires :
  • tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon
  • tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste)
>
>
Install XCode4 via AppleStore (1,8 Go) (AC)
 
Added:
>
>
Install MacPort2 (1,7Mo only) :
 
Changed:
<
<
3) Récupération du mot de passe (lost password)
>
>
Téléchargez MacPorts 2.0 sur le site officiel http://www.macports.org/
 
Changed:
<
<
Sur le formulaire de login, ajouter (à droite du bouton LOGIN) un lien "register" (pour s'enregistrer) et un lien "forgot password" (mot de passe oublié)
>
>
Ouvrez le fichier .dmg que vous venez de télécharger
 
Changed:
<
<
Le lien "forgot password" pointe vers un formulaire de modification du mot de passe (Person/PasswordUpdate) contenant juste 1 champ "email" et un bouton "SUBMIT"
>
>
Lancez le fichier .pkg et suivez les instructions
 
Changed:
<
<
L'utilisateur saisit son email et clique sur "submit" pour qu'on lui envoie un nouveau mot de passe par mail (le mot de passe est aussi mis à jour dans la database)
>
>
Crée un fichier ~pallier/.bash_login qui ajoute /opt/local/bin au PATH
 
Changed:
<
<
Test
>
>
sudo port -v selfupdate
 
Added:
>
>

Installation Apache 2

 
Changed:
<
<
4) Procédure de désinscription (ACTION unregister)
>
>
Téléchargez et installez Apache2 et ses dépendances :
 
Changed:
<
<
a) une personne clique sur un lien "unregister"
>
>
sudo port install apache2
 
Changed:
<
<
b) une confirmation est demandée via une fenêtre javascript : "Are you sure that you want to unregister ?" OK/CANCEL
>
>
Une fois l’installation terminée, vous pouvez activer lancement automatique de Apache au démarrage de l’ordinateur :
 
Changed:
<
<
c) l'action "unregister" est exécutée, la personne n'est pas supprimée de la base, mais juste marquée "inactive"
>
>
sudo port load apache2
 
Changed:
<
<
d) la personne est automatiquement déconnectée
>
>
fichiers sont dans /Library/LaunchDaemons/org.macports.apache2.plist
 
Deleted:
<
<
e) Test
 
Added:
>
>

Installation MySQL 5

 
Added:
>
>
Téléchargez et installez MySQL 5 et ses dépendances :
 
Added:
>
>
sudo port install mysql5
 
Added:
>
>
Installez/Activez le serveur MySQL 5 :
 
Changed:
<
<
VII - Améliorer le CRUD
>
>
sudo port install mysql5-server
 
Changed:
<
<
1) Bien gérer complètement les relations 1-N
>
>
Une fois l’installation terminée, vous pouvez activer le lancement automatique de MySQL au démarrage de l’ordinateur :
 
Changed:
<
<
Actions sur Person (relation N-1 avec Institute) :
  • create : doit permettre d'associer la personne à un institut (via liste de noms)
  • update : doit permettre de modifier l'institut associé (via liste de noms)
  • index : doit permettre de voir toutes les personnes avec le nom (name) de l'institut associé ; un clic sur un institut doit amener à sa vue détaillée
  • view : doit afficher le nom (name) de l'institut associé
>
>
sudo port load mysql5-server
 
Changed:
<
<
Action sur Institute (relation 1-N avec Person) :
  • view : doit afficher toutes les personnes associées
>
>
Terminez l’installation de MySQL :
 
Changed:
<
<
2) Bien gérer complètement les relations M-N
>
>
sudo -u _mysql mysql_install_db5
 
Changed:
<
<
Actions sur Person (relation M-N avec Expertise) :
  • create : doit permettre d'ajouter des expertises (ET une date "since")
  • update : doit permettre de modifier les expertises associées
  • view : doit permettre de voir toutes les expertises associées
Idem pour Expertise (lien vers Person)
>
>
Une fois l’installation terminée, vous pouvez lancer MySQL au démarrage de l’ordinateur :
 
Changed:
<
<
Même chose pour Resource (relation M-N avec Sciencecase)
>
>
sudo port load mysql5
 
Deleted:
<
<
Gestion des champs supplémentaires d'une table associative : exemple de la relation entre Person et Expertise :
 
Changed:
<
<
  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table) et le champ supplémentaire "since" (date à laquelle l'expertise a été acquise)
>
>

Installation PHP 5.3

 
Added:
>
>
Téléchargez et installez PHP 5.3 et ces dépendances. A noter ici que je choisi également d’activer le PEAR, d’où le +pear.
 
Changed:
<
<
3) Gérer d'autres types de relations
>
>
sudo port install php5 +pear
 
Changed:
<
<
a) Ajout de plusieurs rôles différents entre 2 mêmes tables
>
>
Ajoutez le module PHP pour Apache 2 :
 
Changed:
<
<
voir http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model
>
>
sudo /opt/local/apache2/bin/apxs -a -e -n "php5" /opt/local/apache2/modules/libphp5.so
 
Changed:
<
<
Une personne peut avoir plusieurs liens avec une ressource (plusieurs liens entre les tables "people" et "resources"), ce qui veut dire qu'elle peut jouer plusieurs rôles par rapport à une ressource. Ainsi, au lieu d'avoir seulement une clé étrangère "resources_id" dans la table "people", nous en aurons plusieurs avec des noms différents :
  • resource_provider_id : la personne qui a donné l'information sur la ressource (et qui l'a saisit)
  • resource_owner_id : le propriétaire de la ressource
  • resource_contact_id : le contact pour la ressource
Ces 3 clés pointent toutes vers la même clé primaire resource.id, et sont donc des "alias". Améliorer les actions CRUD en conséquence
>
>
Créez le fichier de configuration php.inide PHP :
 
Changed:
<
<
b) Relation réflexive (d'une table sur elle-même)
>
>
sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini
 
Changed:
<
<
Ajout d'une relation réflexive sur "institutes" (dans ce cas particulier, il s'agit d'une relation hiérarchique) :
  • un institut peut appartenir à un autre institut (de niveau hiérarchique supérieur ; par exemple, le "CNRS" regroupe plusieurs instituts, "l'OMP" regroupe plusieurs laboratoires dont l'IRAP…)
  • cela revient seulement à ajouter un champ "institute_id" dans la table institutes (qui pointe sur la table institute, lien réflexif)
  • améliorer les actions CRUD en conséquence
>
>
Installez et activez MySQL pour PHP :
 
Changed:
<
<
c) Relation d'héritage ou spécialisation (1:1)
>
>
sudo port install php5-mysql
 
Changed:
<
<
Une ressource peut être de différents types (ajouter la table "resourcetype") :
>
>
Étape optionnelle : Installez quelques extensions utiles pour PHP (apc, curl, gd, iconv, mbstring, …).
 
Changed:
<
<
  • data
  • info (information, document...)
  • website
  • datacenter
>
>
sudo port install php5-apc php5-curl php5-gd php5-iconv php5-intl php5-mbstring php5-mcrypt php5-posix php5-sqlite php5-xdebug php5-zip
 
Changed:
<
<
chaque type de ressource est une spécialisation du type général "resource".
>
>
  • Configuration de votre environnement LAMP
 
Deleted:
<
<
On aura donc 4 nouvelles tables filles "resourcedata", "resourceinfo", "resourcewebsite", "resourcedatacenter" qui "hériteront" de la table mère (générique) "resource" pour l'étendre chacune avec sa spécificité.
 
Changed:
<
<
On peut représenter ce lien d'héritage par une relation 1-1 entre chacune de ces 4 tables filles et la table mère "resource".
>
>

Configuration Apache 2

 
Changed:
<
<
Aucune des tables filles n'a d'existence propre, chacune dépend de la table mère "resource".
>
>
Les étapes ci-dessous permettent de configurer le support de PHP dans Apache et d’activer le module UserDir (facultatif).
 
Changed:
<
<
Ainsi, les tables filles n'ont pas de clé primaire, mais juste une clé étrangère (resource_id) qui pointe vers la clé primaire de la table mère (cette clé étrangère peut aussi leur servir de clé primaire).
>
>
Activer PHP dans Apache Éditez le fichier /opt/local/apache2/conf/httpd.conf Ajoutez à la fin du fichier
 
Changed:
<
<
Cette relation d'héritage a un impact sur toutes les VUES de la table "resource", car à chaque fois qu'on veut accéder à une ressource, il faut récupérer aussi les informations spécifiques à son type dans la table fille associée (via la clé étrangère resource_id).
>
>
# Include PHP configuration Include conf/extra/mod_php.conf
 
Changed:
<
<
Plus particulièrement, la vue "Create" (et "Update") devra contenir un sélecteur de type ("Type de ressource"), et n'afficher que les champs spécifiques au type sélectionné (en plus des champs généraux de la table mère).
>
>
Ajouter index.php dans les pages d’index reconnues par Apache Éditez le fichier /opt/local/apache2/conf/httpd.conf Recherchez la ligne ci-dessous :
 
Changed:
<
<
Ajouter dans la table resource un champ "URL" (général à tous les types)
>
>
DirectoryIndex index.html
 
Changed:
<
<
Voici les informations spécifiques à chaque type, et donc présent dans les tables filles respectives :
>
>
Ajoutez sur la même ligne, à la fin :
 
Changed:
<
<
  • table data :
    • volume (en MB) :
    • restricted (oui/non)
>
>
index.php
 
Changed:
<
<
  • table info (information, document...) :
    • langage (champ texte liste : English, French, Spanish...)
>
>
Étape optionnelle : Activer l’extension UserDir pour Apache. Cette extension permet d’avoir des urls dédiées pour chaque utilisateur de l’ordinateur du type http://localhost/~utilisateur/ Éditez le fichier /opt/local/apache2/conf/httpd.conf Recherchez et décommentez la ligne ci-dessous :
 
Changed:
<
<
  • table website :
    • restricted (oui/non)
    • nom du webmaster (champ texte libre)
>
>
#Include conf/extra/httpd-userdir.conf
 
Changed:
<
<
  • table datacenter :
    • nom du responsable (champ texte libre)
>
>
Étape optionnelle : Autoriser l’ajout/suppression d’options via un .htaccess (exemple Options +FollowSymLinks) Éditez le fichier /opt/local/apache2/conf/extra/httpd-userdir.conf Recherchez la ligne ci-dessous :
 
Changed:
<
<
4) Ajouter les nouveaux tests nécessaires
>
>
AllowOverride FileInfo AuthConfig Limit Indexes
 
Added:
>
>
Ajoutez sur la même ligne, à la fin :
 
Changed:
<
<
VIII - Ajout d'une nouvelle action dans TOUS les Contrôleurs : search
>
>
Options
 
Changed:
<
<
ex : Person/search
>
>
Une fois les modifications effectuées, vous pouvez (re)démarrer Apache :
 
Changed:
<
<
Cela amène à une nouvelle vue PersonSearch qui est équivalente au formulaire de Person/create, sauf qu'au lieu de servir à créer une nouvelle personne, il sert à en CHERCHER.
>
>
sudo /opt/local/apache2/bin/apachectl restart
 
Changed:
<
<
L'ensemble des personnes trouvées sont affichées dans une vue "FOUND" semblable à Person/index (sauf que c'est une vue PARTIELLE et non pas COMPLETE). Les recherches se font sans tenir compte des majuscules ou minuscules.
>
>

Configuration MySQL 5

 
Changed:
<
<
En bas du formulaire, 2 boutons :
  • SEARCH
  • EXACT SEARCH
>
>
Les étapes ci-dessous ont pour objectif de configurer et sécuriser votre serveur MySQL.
 
Changed:
<
<
Exemples de requêtes possibles :
>
>
Démarrez le serveur MySQL
 
Changed:
<
<
  • j'entre "Pallier" dans le champ "name" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier", par exemple "Apallieri"...
  • j'entre "Pallier" dans le champ "name", "Etienne" dans le champ "firstname", et "informaticien" dans le champ "job" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier" ET le prénom EST EGAL à "Etienne" ET le job EST EGAL à "informaticien"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier" ET le prénom CONTIENT "Etienne" et le job CONTIENT "informaticien"
>
>
sudo /opt/local/lib/mysql5/bin/mysqld_safe &
 
Changed:
<
<
Cette VUE "search" doit être accessible par un lien qui se trouve au début de la vue "index", sous la forme d'une icône en forme de LOUPE suivie de la mention "Search"
>
>
Sécurisez votre serveur MySQL. Je vous recommande de configurer le mot de passe root et de répondre « Yes » à toutes les questions.
 
Changed:
<
<
Faire les tests d'acceptation (ACCEPTANCE TESTS)
>
>
sudo /opt/local/lib/mysql5/bin/mysql_secure_installation
 
Added:
>
>

Configuration PHP 5

 
Changed:
<
<
IX - Améliorer les vues
>
>
Configurer MySQL pour PHP Éditez le fichier /opt/local/etc/php5/php.ini Recherchez les paramètres pdo_mysql.default_socket, mysql.default_socket, mysqli.default_socketet mettez comme valeur ceci :
 
Changed:
<
<
1) ajouter les liens généraux suivants :
  • "login" (qui n'apparaît que si l'utilisateur n'est pas logué)
  • et les liens "logout", "update my registration" et "unregister" (qui n'apparaissent que si l'utilisateur est logué)
>
>
/opt/local/var/run/mysql5/mysqld.sock
 
Changed:
<
<
2) Vue "view" : vue détaillée d'une ligne de table
>
>
Configurer le fuseau horaire par défaut Éditez le fichier /opt/local/etc/php5/php.ini Recherchez la ligne suivante :
 
Changed:
<
<
Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)
>
>
;date.timezone =
 
Changed:
<
<
Ajouter les boutons "Edit", "Delete" et "Create a copy" (visibles uniquement avec le profil "admin")
>
>
Remplacez par :
 
Changed:
<
<
Pour le formulaire Person, le bouton "Edit" est aussi visible si la personne connectée correspond à la fiche visualisée.
>
>
date.timezone = "Europe/Paris"
 
Changed:
<
<
3) Action "index" : vue globale d'une table
>
>
Étape optionnelle : Activer les archives Phar Éditez le fichier /opt/local/etc/php5/php.ini Recherchez et décommentez la ligne ci-dessous
 
Changed:
<
<
Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)
>
>
;phar.readonly = On
 
Changed:
<
<
Masquer la clé primaire (id)
>
>
Une fois les modifications terminées, redémarrez votre serveur Apache 2.
 
Deleted:
<
<
La colonne du champ "name" est triable : en cliquant sur la colonne "name", on trie en ordre croissant, puis décroissant
 
Changed:
<
<
Le champ "name" est cliquable : en cliquant sur un nom, on va à la vue détaillée correspondante
>
>

Gestion

 
Changed:
<
<
Afficher le champ "name" des clés étrangères ; en cliquant dessus on va sur la vue détaillée
>
>
Apache :
 
Changed:
<
<
Les colonnes des clés étrangères sont filtrables : dans la vue people/index, en cliquant sur la colonne "institutes_id" on doit pouvoir sélectionner un nom d'institut (name) et filtrer la vue en conséquence
>
>
Fichier gestion : /Library/LaunchDaemons/org.macports.apache2.plist
 
Changed:
<
<
Au-dessus de la liste d'une table, ajouter un "filtre externe" pour chaque table M-N associée : par exemple, pour la vue people/index, ajouter au-dessus de la liste des personnes une liste d'expertises : en sélectionnant une expertise, on ne voit plus que les personnes associées à cette expertise
>
>
start : sudo port load apache2 (apachectl start/stop ne semble pas marcher)
 
Changed:
<
<
En début de page, ajouter un bouton "Add a new one"
>
>
Voir les processus apache : ps -efl|grep apac
 
Changed:
<
<
4) Ajouter les nouveaux tests nécessaires
>
>
stop : sudo port load apache2
 
Changed:
<
<
5) Ajouter une page contenant tous les tests, avec un bouton permettant de lancer tous les tests à la suite "LAUNCH ALL TESTS"
>
>
(le Apache d'origine de Mac est démarré via les préférences systèmes, partage, web : on voit alors les processus avec "ps -efl | grep http")
 
Deleted:
<
<
X - Documentation
 
Deleted:
<
<
Installer phpdocumentor v2 et l'intégrer dans eclipse (http://www.phpdoc.org) :
 
Deleted:
<
<
phpdocumentor respecte les standards de codage du format phpdoc : http://en.wikipedia.org/wiki/PHPDoc
 
Deleted:
<
<
Suivre les standards de codage de cakephp 2 : http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html
 
Changed:
<
<
XI - Ajout d'un menu
>
>

Installation AMP (Apache Mysql Php) en utilisant les packages Mac OS pré-existant

 
Changed:
<
<
Ajout d'une gestion de menu
>
>
apache déjà installé, mais pas activé
 
Added:
>
>
php déjà installé mais pas activé
 
Added:
>
>
mysql à installer
 
Changed:
<
<
XII - Ajout de modules
>
>

Apache

 
Changed:
<
<
Ajout d'un module de News
>
>
Pour activer le serveur, allez dans Préférences système -> Partage et cochez la case Partage Web. Si elle est déjà cochée, décochez-la pour arrêter le serveur et recochez-là pour que la modification du fichier httpd.conf soit prise en compte.
 
Changed:
<
<
Ajout d'un module d'upload de documents
>
>
v2.2.20
 
Changed:
<
<
Newsletter
>
>
/usr/sbin/
 
Changed:
<
<
...
>
>
Documents : /Library/Webserver/Documents/
 
Changed:
<
<
XIII - Charte graphique
>
>

PHP

 
Changed:
<
<
Gestion de la présentation avec CSS
>
>
v5.3.6
 
Added:
>
>
Php : /usr/lib/
 
Changed:
<
<
...
>
>
Pour activer PHP il faut décommenter la ligne #LoadModule php5_module libexec/apache2/libphp5.so du fichier httpd.conf situé dans le dossier apache2 du dossier etc.
 
Changed:
<
<
XIV - Intégrer la BDD Europlanet complète
>
>
Ensuite réactiver le serveur apache (voir ci-dessus)
 
Added:
>
>
Ajouter test.php dans le rep doc de apache qui contient :
 
Added:
>
>
 
Changed:
<
<
Annexe : A lire aussi
>
>
http://localhost/test
 
Changed:
<
<
Associations : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html
>
>
ou encore http://localhost:80/test
 
Changed:
<
<
Callback : http://book.cakephp.org/2.0/en/models/callback-methods.html
>
>

Mysql 5.5.20

 
Changed:
<
<
Behaviors : http://book.cakephp.org/2.0/en/models/behaviors.html
>
>
http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/
 
Changed:
<
<
Transactions : http://book.cakephp.org/2.0/en/models/transactions.html
>
>
Download :
 
Changed:
<
<
Virtual fields : http://book.cakephp.org/2.0/en/models/virtual-fields.html
>
>
http://dev.mysql.com/downloads/
 
Added:
>
>
Community server
 
Added:
>
>
version 64 bits (format DMG) pour Mac OS 10.6
 
Added:
>
>

Configuration

 
Added:
>
>
masquer/afficher le dock (barre du bas) : cmd-alt-D
 
Changed:
<
<

MAC OS X

>
>
Avoir accès au labo depuis l'extérieur (via la passerelle SSH du labo) : suivre la procédure décrite sur l'intranet (https://intranet.irap.omp.eu/spip.php?article103)
 
Deleted:
<
<

locate

 
Changed:
<
<
Il faut créer la bd une première fois :
>
>
  • Créer un mot de passe pour root
 
Changed:
<
<
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
>
>
Par défaut, root n'a pas de mot de passe, il faut donc en définir un :
 
Changed:
<
<

VIM

>
>
su passwd root
 
Changed:
<
<
http://macvim.org/OSX/index.php
>
>
Ensuite, pour passer root, comme d'hab :
 
Changed:
<
<
By default, Vim runs in "compatible" mode. That is, it acts a lot like traditional vi, without the improvements. Unless you want a maximally vi-compatible version of vim, I recommend that you copy the standard startup files to your home directory, and name them .vimrc and .gvimrc.
>
>
su -
 
Changed:
<
<
Ce que j'ai fait simplement :
>
>
ou
 
Changed:
<
<
1) recherche de vimrc_example :
>
>
su - root
 
Changed:
<
<
locate vimrc
>
>
ou
 
Changed:
<
<
2) Copie locale :
>
>
sudo -s
 
Deleted:
<
<
cp /usr/share/vim/vim73/vimrc_example.vim .vimrc
 
Changed:
<
<

Installation AMP avec XAMPP (solution la plus simple, bien pour le développement, mais pas très blindée pour un serveur de production)

>
>
  • changer définitivement le nom du mac (hostname) : pour moi c'était "mac-13"
 
Changed:
<
<
Version 1.7.3
>
>
pomme, préférences systèmes, partage : changer le nom, puis fermer
 
Changed:
<
<
http://www.apachefriends.org/en/xampp-macosx.html
>
>
(sudo hostname newname ne change que temporairement)
 
Changed:
<
<
(ou aussi en french, mais moins à jour, http://www.apachefriends.org/fr/xampp-macosx.html)
>
>
sudo scutil --set HostName hostname[.domain]
 
Added:
>
>
(if the domain is not specified the hostname will be automatically configured as .local)
 
Deleted:
<
<
1) Download
 
Deleted:
<
<
2) Install (environ 300Mo)
 
Changed:
<
<
XAMPP est installé dans le répertoire/Applications/XAMPP
>
>
  • Créer un script de démarrage bash
 
Changed:
<
<
3) Démarrer
>
>
vi .bash_login : source .bash_rc
 
Changed:
<
<
sudo /Applications/XAMPP/xamppfiles/xampp start
>
>
vi .bash_rc : alias l="ls -l"
 
Deleted:
<
<
Sur l'écran devrait apparaitre les instructions suivantes:
 
Changed:
<
<
Démarre XAMPP pour MacOS X 1.7.3... XAMPP: Démarre Apache avec SSL... XAMPP: Démarre MySQL... XAMPP: Démarre ProFTPD... XAMPP démarré.
>
>
  • Installer sprinter
 
Changed:
<
<
Moi j'ai plutôt un pb avec proftpd, sans doute incompatible avec mac :
>
>
Pref Sys / Imprimantes
 
Changed:
<
<
File permissions are being checked...ok. Starting XAMPP for Mac OS X 1.7.3... XAMPP: Starting Apache...ok. XAMPP: Starting MySQL...ok. XAMPP: Starting ProFTPD...XAMPP/XAMPP/xamppfiles/xampp: line 184: /Applications/XAMPP/xamppfiles//var/proftpd/start.err: No such file or directory fail. Contents of "/Applications/XAMPP/xamppfiles//var/proftpd/start.err": cat: /Applications/XAMPP/xamppfiles//var/proftpd/start.err: No such file or directory
>
>
bouton "+"
 
Changed:
<
<
4) Tester
>
>
bouton "IP"
 
Changed:
<
<
http://localhost/ pointe automatiquement sur :
>
>
rechercher "sprinter.cesr.fr"
 
Changed:
<
<
http://localhost/xampp/splash.php
>
>
elle est trouvée en tant que "hp laserjet 2300 series"
 
Deleted:
<
<
et ça marche !
 
Deleted:
<
<
Si plus tard on remplace la page d'accueil de XAMPP par la sienne, on peut toujours joindre la page d'accueil de XAMPP avec http://localhost/xampp/
 
Changed:
<
<
5) Aspects sécurité
>
>
  • Partitionnement du disque :
 
Changed:
<
<
Comme cela a déjà été expliqué antérieurement XAMPP n'est pas fait pour l'emploi de production, mais seulement pour développeur et l'environnement du développement. Cela a pour suite que XAMPP est volontairement préconfiguré pour ne pas être restrictif et être au contraire trés ouvert. Pour un développeur cela est idéal qu'il ne soit pas limité par les limites du systéme. Par contre pour un emploi en production cela est absolument pas recommendable.
>
>
http://www.osxfacile.com/partition.html
 
Changed:
<
<
Ici, une liste de choses donc XAMPP est volontairement(!) insécurisé:
>
>
Applications / Utilitaires / Utilitaire de disque
 
Changed:
<
<
1. L'administrateur (root)MySQL n'a pas de mot de passe. 2. Le démon MySQL est joignable par le réseau. 3. Le démon ProFTPD utilise le mot de passe "xampp". 4. PhpMyAdmin est joignable par le réseau. 5. MySQL et Apache fonctionne sous le même utilisateur (nobody)
>
>
onglet "Partition"
 
Changed:
<
<
Dans la page XAMPP-Demo (que l'on trouve sous http://localhost) il y a le point "Security check". À cet endroit on peut faire apparaître le niveau de sécurité actuel de XAMPP.
>
>
Diminuer la partition unique "Macintosh HD" de 500 à 100Go
 
Changed:
<
<
Si on veut utiliser XAMPP en réseau , pour que le serveur XAMPP soit accessible par d'autres utilisateurs, alors il faut impérativement exécuter les commandes suivantes avec lesquelles ont pourra alors limiter les failles de sécurité:
>
>
Bouton "+" pour ajouter une nouvelle partition de 400Go
 
Deleted:
<
<
/Applications/XAMPP/xamppfiles/xampp security
 
Added:
>
>
  • modif du mapping clavier :
 
Changed:
<
<
6) START et STOP
>
>
http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=ukelele
 
Changed:
<
<
To start XAMPP simply open XAMPP Control and start Apache, MySQL and ProFTPD.
>
>
http://support.apple.com/kb/HT1220
 
Deleted:
<
<
Mais, on peut aussi utiliser la commande /Applications/XAMPP/xamppfiles/xampp :
 
Changed:
<
<
on peut non seulement démarrer Xampp mais aussi exécuter d'autres commandes :
>
>
  • Firefox
 
Changed:
<
<
Pour arrêter XAMPP simplement entrer cette commande:
>
>
ScrapBook plugin : Volumes/DATA/ScrapBook
 
Deleted:
<
<
/Applications/XAMPP/xamppfiles/xampp stop
 
Changed:
<
<
Pour démarrer Apache avec support SSL suivre les commandes suivantes:
>
>

Transition depuis le monde Windows

 
Changed:
<
<
/Applications/XAMPP/xamppfiles/xampp startssl
>
>
Visualiser un dossier ou fichier caché : http://perso.univ-lyon2.fr/~brogniar/articles/mosx-fichier-invisible.html
 
Changed:
<
<
Et Apache avec support SSL fonctionne déjà. Joignable sous https://localhost.
>
>
maj-pom-G
 
Changed:
<
<
Liste des autres commandes : http://www.apachefriends.org/fr/xampp-macosx.html#3413
>
>
Pour montrer les éléments cachés il faut taper la commande "defaults write com.apple.finder AppleShowAllFiles 1". Pour cacher à nouveau les fichiers et dossiers spéciaux il faut taper la commande "defaults write com.apple.finder AppleShowAllFiles 0". L'utilitaire TinkerTool de Marcel Bresink permet de régler ces préférences d'une manière plus conviviale.
 
Added:
>
>
  • Déplacement clavier :
 
Added:
>
>
home : cmd left end : cmd right mot : alt left/right Effacer le mot suivant Ctrl+Suppr
 
Deleted:
<
<
7) FICHIERS ET RÉPERTOIRES IMPORTANTS
 
Changed:
<
<
/Applications/XAMPP/xamppfiles/bin
>
>
  • Navigation :
 
Changed:
<
<
Ici les commandes pour XAMPP.
>
>
entre applis : Cmd Tab entre onglets d'une mm appli : ctrl tab entre fenêtres d'une mm appui : (alt tab ???) cmd * (sur clavier mac, c'est cmd `, sous le £), à droite de la lettre "m"
 
Deleted:
<
<
(il suffit de placer /Applications/XAMPP/xamppfiles/bin dans mon $PATH pour que j'ai accès à toutes les commandes de xampp directement, telles que "mysql")
 
Deleted:
<
<
/Applications/XAMPP/xamppfiles/bin/mysql appelle par ex .MySQL.
 
Deleted:
<
<
/Applications/XAMPP/htdocs/
 
Deleted:
<
<
Le répertoire Root du serveur web Apache. Ici sont les pages web d'Apache.
 
Changed:
<
<
/Applications/XAMPP/etc/httpd.conf
>
>

Transition depuis le monde Linux

 
Changed:
<
<
Le fichier central de configuration du serveur web Apache.
>
>
packages = .dmg
 
Changed:
<
<
/Applications/XAMPP/etc/my.cnf
>
>
  • Gestion des Services
 
Changed:
<
<
Le fichier de configuration pour le serveur MySQL-Base de données.
>
>
Pas de /etc/init.d/
 
Changed:
<
<
/Applications/XAMPP/etc/php.ini
>
>
A la place :
 
Changed:
<
<
Le fichier de configuration de PHP.
>
>
/System/Library/StartupItems et /Library/StartupItems
 
Changed:
<
<
/Applications/XAMPP/etc/proftpd.conf
>
>
Apple provides a program called SystemStarter which is used to start and stop scripts in the /System -> Library -> StartupItems and /Library -> StartupItems folders. You can use it to restart services like so: % sudo SystemStarter restart NetInfo Or if you've just installed GimpPrint and need to restart CUPS for it to find your printer: % sudo SystemStarter restart PrintingServices The one caveat is that all the start, stop, and restart options do is pass this argument to the various scripts. If the script doesn't respond to that argument, nothing happens. An example is AppServices, which controls coreservicesd. Sending stop or restart to this script has no effect.
 
Changed:
<
<
le fichier de configuration de ProFTPd.
>
>
Type man SystemStarter and browse through the various scripts to learn more about the program and the scripts.
 
Deleted:
<
<
8) Mes Sites Webs
 
Changed:
<
<
You can put your Websites in /Applications/XAMPP/htdocs/ and access them via http://localhost/
>
>

Astuces, raccourcis clavier

 
Changed:
<
<
Or you put your Websites in the Sites-Folder in your Home and access them via http://localhost/~pallier/.
>
>
RACCOURCIS
 
Changed:
<
<
Whats the username and the password for MySQL?
>
>
caractère DIESE : maj alt * (touche à droite du "m")
 
Changed:
<
<
Username: root Password: No password
>
>
Refaire (Ctrl+Maj+Z) Cmd+Maj+Z Ouvrir un menu contextuel (Maj+F10) Ctrl+Espace
 
Added:
>
>
(Windows-E) Cmd-Maj-C Ouvre la fenêtre Computer sous Windows. / Va sur la vue Computer dans le Finder sous Mac OS X
 
Changed:
<
<
9) Désinstallation
>
>
(Ctrl-Maj-Echap) Cmd-Option-Esc Ouvre une fenêtre permettant de forcer l'arrêt d'une application
 
Changed:
<
<
To uninstall XAMPP just stop it and move it to the Trash.
>
>
Quitter un programme +
 
Changed:
<
<
Ou bien
>
>
Afficher les propriétés
<Command> + <I>
 
Changed:
<
<
sudo rm -rf /Applications/XAMPP
>
>
Forcer à quitter : Command + Option + Escape
 
Added:
>
>
Capture d'écran : Command + Shift + 3
 
Added:
>
>
Bureau : F11
 
Changed:
<
<

Installation AMP (Apache Mysql Php) en utilisant MacPort

>
>
Voir l'ensemble des appris en réduction : F9 et F10
 
Changed:
<
<
http://www.blogafab.com/installer-apache-2-mysql-5-et-php-5-3-sur-mac-os-10-7-lion-avec-macport/
>
>
Masquer finder : cmd H
 
Changed:
<
<
Install XCode4 via AppleStore (1,8 Go) (AC)
>
>
Masquer les autres : cmd alt H
 
Changed:
<
<
Install MacPort2 (1,7Mo only) :
>
>
Créer un alias : Pom-alt + déplacer une icone sur bureau
 
Changed:
<
<
Téléchargez MacPorts 2.0 sur le site officiel http://www.macports.org/
>
>
Créer un alias/raccourci : Command + L
 
Deleted:
<
<
Ouvrez le fichier .dmg que vous venez de télécharger
 
Changed:
<
<
Lancez le fichier .pkg et suivez les instructions
>
>
=========================================================
 
Changed:
<
<
Crée un fichier ~pallier/.bash_login qui ajoute /opt/local/bin au PATH
>
>

JAVA

 
Changed:
<
<
sudo port -v selfupdate
>
>

Start a Java program

 
Changed:
<
<

Installation Apache 2

>
>
http://www.vogella.de/articles/JavaIntroduction/article.html#classpath
 
Changed:
<
<
Téléchargez et installez Apache2 et ses dépendances :
>
>
Run your program outside Eclipse :
 
Changed:
<
<
sudo port install apache2
>
>
Open a command shell, e.g. under Microsoft Windows select Start -> Run and type in cmd. This should open a consle.
 
Changed:
<
<
Une fois l’installation terminée, vous pouvez activer lancement automatique de Apache au démarrage de l’ordinateur :
>
>
Switch to your output directory, e.g. by typing cd path, e.g. if you jar is located in "c:\temp" type "cd c:\temp".
 
Changed:
<
<
sudo port load apache2
>
>
To run this program you need to include the jar file into your classpath.
 
Changed:
<
<
fichiers sont dans /Library/LaunchDaemons/org.macports.apache2.plist
>
>
				
java -classpath myprogram.jar de.vogella.eclipse.ide.first.MyFirstClass
 
Added:
>
>
You can use the classpath to run the program from another place in your directory.
 
Changed:
<
<

Installation MySQL 5

>
>
Switch to the command line, e.g. under Windows Start-> Run -> cmd. Switch to any directory you want. Type:
 
Changed:
<
<
Téléchargez et installez MySQL 5 et ses dépendances :
>
>
java HelloWorld
 
Changed:
<
<
sudo port install mysql5
>
>
If you are not in the directory in which the compiled class is stored then the system should result an error message Exception in thread "main" java.lang.NoClassDefFoundError: test/TestClass
 
Changed:
<
<
Installez/Activez le serveur MySQL 5 :
>
>
To use the class type the following command. Replace "mydirectory" with the directory which contains the test directory. You should again see the "HelloWorld" output.
 
Changed:
<
<
sudo port install mysql5-server
>
>
			
java -classpath "mydirectory" HelloWorld
 
Changed:
<
<
Une fois l’installation terminée, vous pouvez activer le lancement automatique de MySQL au démarrage de l’ordinateur :
>
>
Create an executable JAR
 
Changed:
<
<
sudo port load mysql5-server
>
>
A JAR file is a Java Archive based on the pkzip file format. A jar files can contain java classes and other resources (icons, property files) and can be executable.
 
Changed:
<
<
Terminez l’installation de MySQL :
>
>
JAR files are the deployment format for Java. You can distribute your program in a jar file or you can use exiting java code via jars by putting them into your classpath.
 
Changed:
<
<
sudo -u _mysql mysql_install_db5
>
>
An executable JAR means the end-user doesn't have to pull the class files out before running the program. This is done via a manifest.txt file which tells the JVM which class has the main() method. The content of the manifest.txt file:
 
Changed:
<
<
Une fois l’installation terminée, vous pouvez lancer MySQL au démarrage de l’ordinateur :
>
>
Manifest-Version: 1.0 Main-Class: MyApp Class-Path: . lib/jcommon-1.0.6.jar lib/itext-1.4.6.jar "Empty Line"
 
Deleted:
<
<
sudo port load mysql5
 
Added:
>
>
An empty line is required otherwise the jar won't be executable. Space after a new line is also required
 
Changed:
<
<

Installation PHP 5.3

>
>
To create one executable JAR file run on the command line
 
Changed:
<
<
Téléchargez et installez PHP 5.3 et ces dépendances. A noter ici que je choisi également d’activer le PEAR, d’où le +pear.
>
>
 jar -cvmf mainfest.txt app1.jar *.class
 
Deleted:
<
<
sudo port install php5 +pear
 
Deleted:
<
<
Ajoutez le module PHP pour Apache 2 :
 
Deleted:
<
<
sudo /opt/local/apache2/bin/apxs -a -e -n "php5" /opt/local/apache2/modules/libphp5.so
 
Deleted:
<
<
Créez le fichier de configuration php.inide PHP :
 
Changed:
<
<
sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini
>
>

ECLIPSE

 
Changed:
<
<
Installez et activez MySQL pour PHP :
>
>

Install Eclipse Indigo (3.7) sur Mac OS X (10.7.2) avec Yoxos : NE MARCHE PAS

 
Changed:
<
<
sudo port install php5-mysql
>
>
1) Download Yoxos :
 
Changed:
<
<
Étape optionnelle : Installez quelques extensions utiles pour PHP (apc, curl, gd, iconv, mbstring, …).
>
>
http://eclipsesource.com/en/downloads/eclipse-indigo-download/
 
Changed:
<
<
sudo port install php5-apc php5-curl php5-gd php5-iconv php5-intl php5-mbstring php5-mcrypt php5-posix php5-sqlite php5-xdebug php5-zip
>
>
download for mac 64 bits
 
Deleted:
<
<
  • Configuration de votre environnement LAMP
 
Added:
>
>
2) Run Yoxos :
 
Changed:
<
<

Configuration Apache 2

Les étapes ci-dessous permettent de configurer le support de PHP dans Apache et d’activer le module UserDir (facultatif).

>
>
Add "Eclipse for java developpers"
 
Changed:
<
<
Activer PHP dans Apache Éditez le fichier /opt/local/apache2/conf/httpd.conf Ajoutez à la fin du fichier
>
>
SwingDesigner (inclus) : http://code.google.com/intl/fr/javadevtools/wbpro/whatsnew/index.html
 
Changed:
<
<
# Include PHP configuration Include conf/extra/mod_php.conf
>
>
WindowBuilder (inclus) : http://code.google.com/intl/fr/javadevtools/wbpro/quick_start.html
 
Changed:
<
<
Ajouter index.php dans les pages d’index reconnues par Apache Éditez le fichier /opt/local/apache2/conf/httpd.conf Recherchez la ligne ci-dessous :
>
>
(Junit est déjà inclut)
 
Changed:
<
<
DirectoryIndex index.html
>
>
Add subclipse
 
Changed:
<
<
Ajoutez sur la même ligne, à la fin :
>
>
Add pdt
 
Changed:
<
<
index.php
>
>
Add MakeGood (TDD intégré à pdt)
 
Changed:
<
<
Étape optionnelle : Activer l’extension UserDir pour Apache. Cette extension permet d’avoir des urls dédiées pour chaque utilisateur de l’ordinateur du type http://localhost/~utilisateur/ Éditez le fichier /opt/local/apache2/conf/httpd.conf Recherchez et décommentez la ligne ci-dessous :
>
>
Add php source feature (automatic php code generation, getters, setters...)
 
Changed:
<
<
#Include conf/extra/httpd-userdir.conf
>
>
FEST ??? : http://code.google.com/p/fest/ http://fest.easytesting.org/ http://docs.codehaus.org/display/FEST/Home
 
Changed:
<
<
Étape optionnelle : Autoriser l’ajout/suppression d’options via un .htaccess (exemple Options +FollowSymLinks) Éditez le fichier /opt/local/apache2/conf/extra/httpd-userdir.conf Recherchez la ligne ci-dessous :
>
>
CA NE MARCHE PAS !!!
 
Changed:
<
<
AllowOverride FileInfo AuthConfig Limit Indexes
>
>
DONC, INSTALLATION MANUELLE (ci-dessous)
 
Deleted:
<
<
Ajoutez sur la même ligne, à la fin :
 
Deleted:
<
<
Options
 
Deleted:
<
<
Une fois les modifications effectuées, vous pouvez (re)démarrer Apache :
 
Changed:
<
<
sudo /opt/local/apache2/bin/apachectl restart
>
>

SVN avec le plugin Subclipse

 
Changed:
<
<

Configuration MySQL 5

>
>
1) (Pas sûr que ça soit nécessaire) install client subversion en local sur le disque (avec JavaHL)
 
Changed:
<
<
Les étapes ci-dessous ont pour objectif de configurer et sécuriser votre serveur MySQL.
>
>
(http://subclipse.tigris.org/wiki/JavaHL#head-5bf26515097c3231c1b04dfdb22c036bc511926b)
 
Changed:
<
<
Démarrez le serveur MySQL
>
>
http://www.open.collab.net/downloads/community/
 
Changed:
<
<
sudo /opt/local/lib/mysql5/bin/mysqld_safe &
>
>
downloaded subversion 1.6.x
 
Changed:
<
<
Sécurisez votre serveur MySQL. Je vous recommande de configurer le mot de passe root et de répondre « Yes » à toutes les questions.
>
>
Installé dans /opt/subversion (/opt a été créé pour l'occasion lors de l'installation !!!!)
 
Changed:
<
<
sudo /opt/local/lib/mysql5/bin/mysql_secure_installation
>
>
Uninstallation Notes To uninstall the Subversion 1.6.17 Universal binary, just run the following:
 
Changed:
<
<

Configuration PHP 5

>
>
sudo rm -fR /opt/subversion pkgutil --forget net.collab.subversion
 
Deleted:
<
<
Configurer MySQL pour PHP Éditez le fichier /opt/local/etc/php5/php.ini Recherchez les paramètres pdo_mysql.default_socket, mysql.default_socket, mysqli.default_socketet mettez comme valeur ceci :
 
Deleted:
<
<
/opt/local/var/run/mysql5/mysqld.sock
 
Changed:
<
<
Configurer le fuseau horaire par défaut Éditez le fichier /opt/local/etc/php5/php.ini Recherchez la ligne suivante :
>
>
2) install subclipse (plugin eclipse)
 
Changed:
<
<
;date.timezone =
>
>
Help / Install new software
 
Changed:
<
<
Remplacez par :
>
>
http://subclipse.tigris.org/update_1.6.x/ (la version 1.8 ne marchait pas)
 
Changed:
<
<
date.timezone = "Europe/Paris"
>
>
(pour info, voir http://subclipse.tigris.org)
 
Deleted:
<
<
Étape optionnelle : Activer les archives Phar Éditez le fichier /opt/local/etc/php5/php.ini Recherchez et décommentez la ligne ci-dessous
 
Deleted:
<
<
;phar.readonly = On
 
Deleted:
<
<
Une fois les modifications terminées, redémarrez votre serveur Apache 2.
 
Added:
>
>

JUnit

 
Changed:
<
<

Gestion

>
>
1) installer Eclipse pour Java (testé avec 3.7 Indigo)
 
Changed:
<
<
Apache :
>
>
Download "Eclipse IDE for Java Developers" from http://www.eclipse.org/downloads
 
Changed:
<
<
Fichier gestion : /Library/LaunchDaemons/org.macports.apache2.plist
>
>
2) installer Junit
 
Changed:
<
<
start : sudo port load apache2 (apachectl start/stop ne semble pas marcher)
>
>
http://www.vogella.de/articles/JUnit/article.html
 
Changed:
<
<
Voir les processus apache : ps -efl|grep apac
>
>
http://junit.sourceforge.net/doc/cookbook/cookbook.htm
 
Changed:
<
<
stop : sudo port load apache2
>
>
When you need to test something, here is what you do:
    Annotate a method with @org.junit.Test
    When you want to check a value, import org.junit.Assert.* statically, call assertTrue() and pass a boolean that is true if the test succeeds
    (Use a method provides by JUnit to check the expected result of the code execution versus the actual result)
 
Changed:
<
<
(le Apache d'origine de Mac est démarré via les préférences systèmes, partage, web : on voit alors les processus avec "ps -efl | grep http")
>
>
For example, to test that the sum of two Moneys with the same currency contains a value which is the sum of the values of the two Moneys, write:
@Test 
public void simpleAdd() {
        Money m12CHF= new Money(12, "CHF"); 
        Money m14CHF= new Money(14, "CHF"); 
        Money expected= new Money(26, "CHF"); 
        Money result= m12CHF.add(m14CHF); 
        assertTrue(expected.equals(result));
}
 
Added:
>
>
Fixture :
 
Added:
>
>
What if you have two or more tests that operate on the same or similar sets of objects?
 
Added:
>
>
Tests need to run against the background of a known set of objects. This set of objects is called a test fixture. When you are writing tests you will often find that you spend more time writing the code to set up the fixture than you do in actually testing values.
 
Added:
>
>
To some extent, you can make writing the fixture code easier by paying careful attention to the constructors you write. However, a much bigger savings comes from sharing fixture code. Often, you will be able to use the same fixture for several different tests. Each case will send slightly different messages or parameters to the fixture and will check for different results.
 
Added:
>
>
When you have a common fixture, here is what you do:
 
Changed:
<
<

Installation AMP (Apache Mysql Php) en utilisant les packages Mac OS pré-existant

>
>
Add a field for each part of the fixture Annotate a method with @org.junit.Before and initialize the variables in that method Annotate a method with @org.junit.After to release any permanent resources you allocated in setUp
 
Changed:
<
<
apache déjà installé, mais pas activé
>
>
For example, to write several test cases that want to work with different combinations of 12 Swiss Francs, 14 Swiss Francs, and 28 US Dollars, first create a fixture:
 
Changed:
<
<
php déjà installé mais pas activé
>
>
public class MoneyTest { private Money f12CHF; private Money f14CHF; private Money f28USD;
 
Changed:
<
<
mysql à installer
>
>
@Before public void setUp() { f12CHF= new Money(12, "CHF"); f14CHF= new Money(14, "CHF"); f28USD= new Money(28, "USD"); } }
 
Changed:
<
<

Apache

>
>
Once you have the Fixture in place, you can write as many Test Cases as you'd like. Add as many test methods (annotated with @Test) as you'd like.
 
Deleted:
<
<
Pour activer le serveur, allez dans Préférences système -> Partage et cochez la case Partage Web. Si elle est déjà cochée, décochez-la pour arrêter le serveur et recochez-là pour que la modification du fichier httpd.conf soit prise en compte.
 
Changed:
<
<
v2.2.20
>
>
You use a tool like Eclipse or the class "org.junit.runner.JUnitCore" to run the test.
 
Changed:
<
<
/usr/sbin/
>
>
Download junit-dep-4.10 from https://github.com/KentBeck/junit/downloads
 
Changed:
<
<
Documents : /Library/Webserver/Documents/
>
>
3) Créer un projet Java
 
Changed:
<
<

PHP

>
>
Create a new project "de.vogella.junit.first".
 
Changed:
<
<
v5.3.6
>
>
We want to create the unit tests in a separate folder. Create therefore a new source folder "test" via right mouse click on your project, select properties and choose the "Java Build Path". Select the tab source code. Press "Add folder" then then press "Create new folder". Create the folder "test". The creation of an separate folder for the test is not mandatory. But it is good advice to keep the test coding separate from the normal coding.
 
Changed:
<
<
Php : /usr/lib/
>
>
Create a Java class
 
Changed:
<
<
Pour activer PHP il faut décommenter la ligne #LoadModule php5_module libexec/apache2/libphp5.so du fichier httpd.conf situé dans le dossier apache2 du dossier etc.
>
>
Create a package "de.vogella.junit.first" and the following class.
 
Changed:
<
<
Ensuite réactiver le serveur apache (voir ci-dessus)
>
>
package de.vogella.junit.first; 
public class MyClass { 
public int multiply(int x, int y) { return x / y; } 
}
 
Deleted:
<
<
Ajouter test.php dans le rep doc de apache qui contient :
 
Changed:
<
<
>
>
4) Create a JUnit test
 
Changed:
<
<
http://localhost/test
>
>
Select your new class, right mouse click and select New ->JUnit Test case, change the source folder to JUnit. Select "New JUnit 4 test". Make sure you change the source folder to test.
 
Changed:
<
<
ou encore http://localhost:80/test
>
>
Press next and select the methods which you want to test.
 
Changed:
<
<

Mysql 5.5.20

>
>
If you have not yet JUnit in your classpath, Eclipse will asked you if it should be added to the classpath.
 
Changed:
<
<
http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/
>
>
Create a test with the following code.
 
Changed:
<
<
Download :
>
>

 
Changed:
<
<
http://dev.mysql.com/downloads/
>
>
package de.vogella.junit.first; import org.junit.Test; import static org.junit.Assert.assertEquals;
 
Changed:
<
<
Community server
>
>
public class MyClassTest { @Test public void testMultiply() { MyClass tester = new MyClass(); assertEquals("Result", 50, tester.multiply(10, 5)); } }
 
Changed:
<
<
version 64 bits (format DMG) pour Mac OS 10.6
>
>
 
Changed:
<
<

Configuration

>
>
5) Run your test via Eclipse
 
Changed:
<
<
masquer/afficher le dock (barre du bas) : cmd-alt-D
>
>
Right click on your new test class and select Run-As-> Junit Test.
 
Changed:
<
<
Avoir accès au labo depuis l'extérieur (via la passerelle SSH du labo) : suivre la procédure décrite sur l'intranet (https://intranet.irap.omp.eu/spip.php?article103)
>
>
The test should be failing (indicated via a red bar). This is due to the fact that our multiplier class is currently not working correctly (it does a division instead of multiplication). Fix the bug and re-run test to get a green light.
 
Added:
>
>
If you have several tests you can combine them into a test suite. All test in this test suite will then be executed if you run the test suite. To create a new test suite, select your test classes, right mouse click-> New-> Other -> JUnit -Test Suite
 
Changed:
<
<
  • Créer un mot de passe pour root
>
>
Select next and select the methods you would like to have test created for.
 
Changed:
<
<
Par défaut, root n'a pas de mot de passe, il faut donc en définir un :
>
>
cela crée une classe AllTests.java :
 
Changed:
<
<
su passwd root
>
>
package de.vogella.junit.first;

 
Changed:
<
<
Ensuite, pour passer root, comme d'hab :
>
>
import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses;
 
Changed:
<
<
su -
>
>
@RunWith(Suite.class) @SuiteClasses({ MyClassTest.class, OtherClassTest.class }) public class AllTests {
 
Changed:
<
<
ou
>
>
}
 
Changed:
<
<
su - root
>
>
 
Changed:
<
<
ou
>
>
If you later develop another test you can add it to @Suite.SuiteClasses
 
Deleted:
<
<
sudo -s
 
Added:
>
>
6) Run your test via code
 
Added:
>
>
You can also run your test via your own coding. The class "org.junit.runner.JUnitCore" provides the method runClasses() which allows you to run one or several tests classes. As a return parameter you receive an object of type "org.junit.runner.Result". This object can be used to retrieve information about the tests and provides information about the failed tests.
 
Changed:
<
<
  • changer définitivement le nom du mac (hostname) : pour moi c'était "mac-13"
>
>
Create in your "test" folder a new class "MyTestRunner" with the following coding. This class will execute your test class and write potential failures to the console.
 
Changed:
<
<
pomme, préférences systèmes, partage : changer le nom, puis fermer
>
>
			
package de.vogella.junit.first;

 
Changed:
<
<
(sudo hostname newname ne change que temporairement)
>
>
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure;
 
Changed:
<
<
sudo scutil --set HostName hostname[.domain]
>
>
public class MyTestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MyClassTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } } }
 
Deleted:
<
<
(if the domain is not specified the hostname will be automatically configured as .local)
 
Added:
>
>
7) Annotations and Assert statements
 
Added:
>
>
a) Annotations
 
Changed:
<
<
  • Créer un script de démarrage bash
>
>
The following give an overview of the available annotations in JUnit 4.x
 
Changed:
<
<
vi .bash_login : source .bash_rc
>
>
Annotation 	Description
@Test public void method() 	Annotation @Test identifies that this method is a test method.
@Before public void method() 	Will perform the method() before each test. This method can prepare the test environment (called a "fixture"), e.g. read input data, initialize the class)
@After public void method() 	Test method must start with test
@BeforeClass public void method() 	Will perform the method before the start of all tests. This can be used to perform time intensive activities for example be used to connect to a database
@AfterClass public void method() 	Will perform the method after all tests have finished. This can be used to perform clean-up activities for example be used to disconnect to a database
@Ignore 	Will ignore the test method, e.g. useful if the underlying code has been changed and the test has not yet been adapted or if the runtime of this test is just to long to be included.
@Test(expected=IllegalArgumentException.class) 	Tests if the method throws the named exception
@Test(timeout=100) 	Fails if the method takes longer then 100 milliseconds
 
Deleted:
<
<
vi .bash_rc : alias l="ls -l"
 
Added:
>
>
b) Assert statements
 
Changed:
<
<
  • Installer sprinter
>
>
The following gives an overview of the available test methods:
 
Changed:
<
<
Pref Sys / Imprimantes
>
>
Statement 	Description
fail(String) 	Let the method fail, might be usable to check that a certain part of the code is not reached.
assertTrue(true); 	True
assertsEquals([String message], expected, actual) 	Test if the values are the same. Note: for arrays the reference is checked not the content of the arrays
assertsEquals([String message], expected, actual, tolerance) 	Usage for float and double; the tolerance are the number of decimals which must be the same
assertNull([message], object) 	Checks if the object is null
assertNotNull([message], object) 	Check if the object is not null
assertSame([String], expected, actual) 	Check if both variables refer to the same object
assertNotSame([String], expected, actual) 	Check that both variables refer not to the same object
assertTrue([message], boolean condition) 	Check if the boolean condition is true.
 
Deleted:
<
<
bouton "+"
 
Changed:
<
<
bouton "IP"
>
>
8) Fixture (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)
 
Changed:
<
<
rechercher "sprinter.cesr.fr"
>
>
9) Running Tests FROM JAVA (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)
 
Changed:
<
<
elle est trouvée en tant que "hp laserjet 2300 series"
>
>
10) Expected Exceptions (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)
 
Deleted:
<
<
  • Partitionnement du disque :
 
Changed:
<
<
http://www.osxfacile.com/partition.html
>
>

WIKI

 
Changed:
<
<
Applications / Utilitaires / Utilitaire de disque
>
>
Voir aussi InformationAboutThisTwiki
 
Changed:
<
<
onglet "Partition"
>
>
Tutoriel : TWikiTutorial
 
Changed:
<
<
Diminuer la partition unique "Macintosh HD" de 500 à 100Go
>
>

Niveau Utilisateur

 
Changed:
<
<
Bouton "+" pour ajouter une nouvelle partition de 400Go
>
>

Créer un raccourci vers une icône :

 
Added:
>
>
Par exemple, créer todo.gif comme raccourci de l'icône TODO :
 
Changed:
<
<
  • modif du mapping clavier :
>
>
Editer TWikiPreferences
* Set TD = http://planetowiki.irap.omp.eu/pub/TWiki/TWikiDocGraphics/todo.gif
* Set DO = DONE
 
Deleted:
<
<
http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=ukelele
 
Changed:
<
<
http://support.apple.com/kb/HT1220
>
>

Commentaire

 
Added:
>
>
Html comment = 
<-- comment -->
Twiki comment = # comment
 
Changed:
<
<
  • Firefox
>
>

Voir ce qui change sur le site

 
Changed:
<
<
ScrapBook plugin : Volumes/DATA/ScrapBook
>
>
Pour savoir ce qui a changé (en ordre chronologique) sur le web Team, consulter cette page : WebChanges
 
Added:
>
>
Changements survenus sur le web "twiki" : WebChanges
 
Changed:
<
<

Transition depuis le monde Windows

>
>
on peut aussi s'inscrire sur cette page pour recevoir les changements du web Team par email : WebNotify
 
Changed:
<
<
Visualiser un dossier ou fichier caché : http://perso.univ-lyon2.fr/~brogniar/articles/mosx-fichier-invisible.html
>
>

Contribuer (enrichir le site)

 
Changed:
<
<
maj-pom-G
>
>
Vous êtes vivement encouragés à contribuer au contenu de ce site.
 
Changed:
<
<
Pour montrer les éléments cachés il faut taper la commande "defaults write com.apple.finder AppleShowAllFiles 1". Pour cacher à nouveau les fichiers et dossiers spéciaux il faut taper la commande "defaults write com.apple.finder AppleShowAllFiles 0". L'utilitaire TinkerTool de Marcel Bresink permet de régler ces préférences d'une manière plus conviviale.
>
>
Pour modifier n'importe quelle page du site :
  • cliquez sur bouton "Edit", faites vos modifs, puis cliquez sur le bouton "Save".
  • si vous êtes plus à l'aise avec la souris, cliquez plutot sur le bouton "WYSIWYG"
 
Deleted:
<
<
  • Déplacement clavier :
 
Changed:
<
<
home : cmd left end : cmd right mot : alt left/right Effacer le mot suivant Ctrl+Suppr
>
>

Faire une copie (de sauvegarde) d'un Web (pour consultation offline) :

  • Grace au plugin PublishContrib, on peut obtenir une copie du Web à tout instant (attention, cette copie est READ ONLY, ce n'est plus un wiki, mais juste des pages web).
  • Pour publier la version courante du Web, aller sur le topic PublishWeb, et cliquer sur le bouton "Publish" (en milieu de page). Par défaut, c'est l'option "zip" qui est sélectionnée, ce qui crée un zip du Web.
  • Il suffit maintenant de cliquer en bas de la page générée par la requete, sur le lien "Published To: NomduWeb.zip", pour télécharger ce zip (L'accès à cette adresse est protégé pour que seuls les personnes enregistrées puissent y acceder)
  • Dézipper et cliquer sur la page WebHome.html. Le résultat n'est pas très joli, mais le contenu y est...
  • Un historique de la dernière publication se trouve dans le topic PublishContribHistory (utile pour voir si tout s'est bien passé)
 
Added:
>
>

Mise à jour d'une pièce attachée (remarque) :

 
Changed:
<
<
  • Navigation :
>
>
Il vaut mieux utiliser des noms de fichier assez génériques (par exemple FDD.pdf au lieu de FF_v1.4.pdf) ainsi on peut mettre à jour un document sans changer son nom et les liens vers ce fichier
 
Changed:
<
<
entre applis : Cmd Tab entre onglets d'une mm appli : ctrl tab entre fenêtres d'une mm appui : (alt tab ???) cmd * (sur clavier mac, c'est cmd `, sous le £), à droite de la lettre "m"
>
>

Insérer une icone:

%Y%
DONE
%TD%
ou
%ICONURL{todo}%
todo.gif
%DO%
ou
%ICONURL{done}%
done.gif
%CL%
ou
%ICONURL{closed}%
closed.gif
Pour en savoir plus: TWikiDocGraphics#Status_flag_LED_tag_icons
 
Added:
>
>

RACCOURCIS PRATIQUES

 
Added:
>
>
 
Added:
>
>
  • Liste de tous les users twiki enregistrés : UserList
 
Changed:
<
<

Transition depuis le monde Linux

>
>
  • Liste plus générale des users twiki : TWikiUsers
 
Changed:
<
<
packages = .dmg
>
>
 
Changed:
<
<
  • Gestion des Services
>
>
 
Changed:
<
<
Pas de /etc/init.d/
>
>
 
Deleted:
<
<
A la place :
 
Changed:
<
<
/System/Library/StartupItems et /Library/StartupItems
>
>

Niveau Administrateur

 
Changed:
<
<
Apple provides a program called SystemStarter which is used to start and stop scripts in the /System -> Library -> StartupItems and /Library -> StartupItems folders. You can use it to restart services like so: % sudo SystemStarter restart NetInfo Or if you've just installed GimpPrint and need to restart CUPS for it to find your printer: % sudo SystemStarter restart PrintingServices The one caveat is that all the start, stop, and restart options do is pass this argument to the various scripts. If the script doesn't respond to that argument, nothing happens. An example is AppServices, which controls coreservicesd. Sending stop or restart to this script has no effect.
>
>
Voir aussi InformationAboutThisTwiki
 
Deleted:
<
<
Type man SystemStarter and browse through the various scripts to learn more about the program and the scripts.
 
Deleted:
<
<

Astuces, raccourcis clavier

 
Deleted:
<
<
RACCOURCIS
 
Changed:
<
<
caractère DIESE : maj alt * (touche à droite du "m")
>
>

IDL

 
Changed:
<
<
Refaire (Ctrl+Maj+Z) Cmd+Maj+Z Ouvrir un menu contextuel (Maj+F10) Ctrl+Espace
>
>

Utiliser mon IDL au labo ou bien à l'extérieur du labo (en une seule config)

 
Changed:
<
<
(Windows-E) Cmd-Maj-C Ouvre la fenêtre Computer sous Windows. / Va sur la vue Computer dans le Finder sous Mac OS X
>
>
Problème : Comment exécuter mon idl (celui qui est installé localement sur mon pc/mac) au labo et même à l'extérieur du labo ???
 
Changed:
<
<
(Ctrl-Maj-Echap) Cmd-Option-Esc Ouvre une fenêtre permettant de forcer l'arrêt d'une application
>
>
Réponse : en profitant des licences du serveur hyperion
 
Changed:
<
<
Quitter un programme +
>
>
En ce qui vous concerne, allez directement au point 2)
 
Changed:
<
<
Afficher les propriétés
<Command> + <I>
>
>
1) Travail à faire pour l'administrateur système sur hyperion
 
Changed:
<
<
Forcer à quitter : Command + Option + Escape
>
>
Modifier le fichier de licences /usr/local/itt/license/license.dat, remplacer la ligne : "DAEMON idl_lmgrd" par "DAEMON idl_lmgrd port=1701"
 
Changed:
<
<
Capture d'écran : Command + Shift + 3
>
>
(cela force flexlm à utiliser le port 1701 pour idl_lmgrd)
 
Changed:
<
<
Bureau : F11
>
>
Relancer les service lmgrd et idl_lmgrd
 
Changed:
<
<
Voir l'ensemble des appris en réduction : F9 et F10
>
>
Si tout s'est bien passé, la commande "nmap hyperion.cesr.fr -p1700-1701" permet de voir que le port 1701 est bien ouvert
 
Changed:
<
<
Masquer finder : cmd H
>
>
$ nmap hyperion.cesr.fr -p1700-1701

 
Changed:
<
<
Masquer les autres : cmd alt H
>
>
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-10-08 18:10 CEST Interesting ports on hyperion.cesr.fr (195.83.102.174): PORT STATE SERVICE 1700/tcp open unknown 1701/tcp open unknown
 
Changed:
<
<
Créer un alias : Pom-alt + déplacer une icone sur bureau
>
>
Nmap finished: 1 IP address (1 host up) scanned in 0.119 seconds
 
Deleted:
<
<
Créer un alias/raccourci : Command + L
 
Added:
>
>
2) Pour vous (côté client), Il suffit de faire 2 choses sur votre pc/mac
 
Changed:
<
<
=========================================================
>
>
a) Positionner une variable d'environnement
 
Changed:
<
<

JAVA

>
>
Positionner la variable d'environnement avec 2 serveurs de jetons (pour pouvoir bosser à l'INTERIEUR (port 1700 de hyperion) ET à l'EXTERIEUR (port 9700 de localhost) du labo sans jamais rien modifier) :
 
Changed:
<
<

Start a Java program

>
>
(Pour les utilisateurs de Windows, faire un clic droit sur Poste de Travail, puis onglet "Variables d'environnement", puis entrer la variable nommée LM_LICENSE_FILE avec la valeur "1700@hyperion.cesr.fr:9700@localhost")
 
Changed:
<
<
http://www.vogella.de/articles/JavaIntroduction/article.html#classpath
>
>
export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
 
Changed:
<
<
Run your program outside Eclipse :
>
>
(Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_profile, pour ne plus avoir à la taper)
 
Changed:
<
<
Open a command shell, e.g. under Microsoft Windows select Start -> Run and type in cmd. This should open a consle.
>
>
Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.
 
Changed:
<
<
Switch to your output directory, e.g. by typing cd path, e.g. if you jar is located in "c:\temp" type "cd c:\temp".
>
>
Si vous êtes à l'extérieur du labo, continuez la lecture...
 
Deleted:
<
<
To run this program you need to include the jar file into your classpath.
 
Changed:
<
<
				
java -classpath myprogram.jar de.vogella.eclipse.ide.first.MyFirstClass
>
>
b) "Creuser" un tunnel
 
Deleted:
<
<
You can use the classpath to run the program from another place in your directory.
 
Changed:
<
<
Switch to the command line, e.g. under Windows Start-> Run -> cmd. Switch to any directory you want. Type:
>
>
(Pour les personnes qui utilisent Windows, vous pouvez faire la même chose que ci-dessous avec le logiciel Putty, en vous inspirant de ce qui est décrit sur cette même page au point 4) a) de l'article http://planetoweb.cesr.fr/twiki/bin/view/Main/HowtoInformatique#Se_connecter_un_serveur_linux_en)
 
Changed:
<
<
java HelloWorld
>
>
Ouvrir un tunnel avec mise en correspondance de 2 ports :
 
Changed:
<
<
If you are not in the directory in which the compiled class is stored then the system should result an error message Exception in thread "main" java.lang.NoClassDefFoundError: test/TestClass
>
>
ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MON_LOGIN_EMAIL@GATEWAY
 
Changed:
<
<
To use the class type the following command. Replace "mydirectory" with the directory which contains the test directory. You should again see the "HelloWorld" output.
>
>
(remplacer MON_LOGIN_EMAIL par votre login utilisé pour le mail ou pour vous connecter à la passerelle du labo, et GATEWAY par le serveur passerelle du labo)
 
Changed:
<
<
			
java -classpath "mydirectory" HelloWorld
>
>
(Remarque pour l'admin système : attention, sur le localhost on a le choix de la correspondance du port 1700 d'hyperion (port 9700 local) mais pas pour le 1701)
 
Changed:
<
<
Create an executable JAR
>
>
Entrer le mot de passe pour GATEWAY (pour vous connecter de votre pc à GATEWAY)
 
Changed:
<
<
A JAR file is a Java Archive based on the pkzip file format. A jar files can contain java classes and other resources (icons, property files) and can be executable.
>
>
Voilà, vous avez créé un tunnel entre votre pc/mac et hyperion, passant par GATEWAY (vous êtes d'ailleurs connecté à la passerelle).
 
Changed:
<
<
JAR files are the deployment format for Java. You can distribute your program in a jar file or you can use exiting java code via jars by putting them into your classpath.
>
>
Il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.
 
Changed:
<
<
An executable JAR means the end-user doesn't have to pull the class files out before running the program. This is done via a manifest.txt file which tells the JVM which class has the main() method. The content of the manifest.txt file:
>
>
Attention, une fois la session idl terminée, ne pas oublier de détruire le tunnel en vous déconnectant d'hyperion !!! (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)
 
Changed:
<
<
Manifest-Version: 1.0 Main-Class: MyApp Class-Path: . lib/jcommon-1.0.6.jar lib/itext-1.4.6.jar "Empty Line"
>
>
Bon, on peut encore améliorer les choses... si ça vous dit, allez voir un peu plus loin, juste après la partie IN ENGLISH.
 
Added:
>
>
Now, IN ENGLISH (and for Mac/Linux users only) :
 
Changed:
<
<
An empty line is required otherwise the jar won't be executable. Space after a new line is also required
>
>
(First, be sure you have removed any remaining license.dat file from your itt/license/ directory ; just drop it, you don't need it)
 
Changed:
<
<
To create one executable JAR file run on the command line
>
>
1) set and export LM_LICENSE_FILE
 
Changed:
<
<
 jar -cvmf mainfest.txt app1.jar *.class
>
>
Open a new terminal and set this variable :
 
Added:
>
>
$ export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
 
Added:
>
>
(you can also write this line once and for all in your ~/.bash_profile file, so that you won't have to do it every day)
 
Added:
>
>
If you are INSIDE the lab, you are finished. Just launch your (local) idl : $ idlde (or idl) (or from the Applications launcher)
 
Added:
>
>
If you are OUTSIDE the lab, you need one last step...
 
Deleted:
<
<

ECLIPSE

 
Changed:
<
<

Install Eclipse Indigo (3.7) sur Mac OS X (10.7.2) avec Yoxos : NE MARCHE PAS

>
>
2) set a tunnel
 
Changed:
<
<
1) Download Yoxos :
>
>
Open a new terminal and create this tunnel :
 
Changed:
<
<
http://eclipsesource.com/en/downloads/eclipse-indigo-download/
>
>
$ ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MYLOGIN@GATEWAY
 
Changed:
<
<
download for mac 64 bits
>
>
You are now connected to the lab gateway.
 
Added:
>
>
Keep it open as long as you are running idl !
 
Changed:
<
<
2) Run Yoxos :
>
>
Only once finished with idl, don't forget to destroy the tunnel by closing the connexion to GATEWAY !!!
 
Deleted:
<
<
Add "Eclipse for java developpers"
 
Changed:
<
<
SwingDesigner (inclus) : http://code.google.com/intl/fr/javadevtools/wbpro/whatsnew/index.html
>
>

 
Changed:
<
<
WindowBuilder (inclus) : http://code.google.com/intl/fr/javadevtools/wbpro/quick_start.html
>
>
ETAPE FACULTATIVE : On peut encore améliorer les choses... Comment ?
 
Changed:
<
<
(Junit est déjà inclut)
>
>
En s'arrangeant pour ne plus avoir aucun mot de passe à entrer grâce aux clés publique&privée.
 
Changed:
<
<
Add subclipse
>
>
Voici comment faire...
 
Changed:
<
<
Add pdt
>
>
1) Créer une paire de clés privée/publique sur mon pc
 
Changed:
<
<
Add MakeGood (TDD intégré à pdt)
>
>
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/Users/pallier/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/pallier/.ssh/id_dsa.
Your public key has been saved in /Users/pallier/.ssh/id_dsa.pub.
 
Changed:
<
<
Add php source feature (automatic php code generation, getters, setters...)
>
>
2) Distribuer ensuite la clé publique de mon pc sur la passerelle du labo (que nous appelerons GATEWAY pour raison de sécurité)
 
Changed:
<
<
FEST ??? : http://code.google.com/p/fest/ http://fest.easytesting.org/ http://docs.codehaus.org/display/FEST/Home
>
>
La clé publique, doit être copiée sur le serveur distant dans ~/.ssh/authorized_keys. (La clé privée reste sur votre poste client)
 
Changed:
<
<
CA NE MARCHE PAS !!!
>
>
Aller dans votre HOME
 
Changed:
<
<
DONC, INSTALLATION MANUELLE (ci-dessous)
>
>
ssh-copy-id -i .ssh/id_dsa.pub GATEWAY
(
ou bien, si on ne dispose pas de la commande ssh-copy-id, l'exemple est ici donné pour moi :
$ cat .ssh/id_dsa.pub | ssh epallier@GATEWAY "cat - >>.ssh/authorized_keys" 
)

 
Added:
>
>
 
Added:
>
>
3) Tester maintenant la connexion à GATEWAY
 
Added:
>
>
ssh monlogin@GATEWAY
 
Changed:
<
<

SVN avec le plugin Subclipse

>
>
On peut désormais se connecter directement sans mot de passe !!!
 
Changed:
<
<
1) (Pas sûr que ça soit nécessaire) install client subversion en local sur le disque (avec JavaHL)

(http://subclipse.tigris.org/wiki/JavaHL#head-5bf26515097c3231c1b04dfdb22c036bc511926b)

>
>
4) Faire de même entre GATEWAY et hyperion
 
Changed:
<
<
http://www.open.collab.net/downloads/community/
>
>
Maintenant, il suffit de faire la même chose que 2) et 3) mais depuis GATEWAY (et vers hyperion)
 
Changed:
<
<
downloaded subversion 1.6.x
>
>
Quand c'est fait, depuis GATEWAY, on peut maintenant se connecter directement à hyperion sans mot de passe :
 
Changed:
<
<
Installé dans /opt/subversion (/opt a été créé pour l'occasion lors de l'installation !!!!)
>
>
ssh monlogin@hyperion.cesr.fr
 
Changed:
<
<
Uninstallation Notes To uninstall the Subversion 1.6.17 Universal binary, just run the following:
>
>
(je tape 2 fois "exit" pour revenir à mon pc)
 
Changed:
<
<
sudo rm -fR /opt/subversion pkgutil --forget net.collab.subversion
>
>
Voilà, on peut maintenant créer le tunnel (voir ci-dessus) sans avoir aucun mot de passe à entrer.
 
Added:
>
>
Pour faire encore plus simple, on peut se créer un alias nommé "tunnel" :
 
Added:
>
>
alias tunnel = 'ssh -t -L 9700:localhost:1700 YOUR_IRAP_LOGIN@GATEWAY ssh -L 1700:localhost:1700 YOUR_HYPERION_LOGIN@hyperion.cesr.fr'
 
Changed:
<
<
2) install subclipse (plugin eclipse)
>
>
Il suffit alors de taper "tunnel" pour qu'il soit créé.
 
Deleted:
<
<
Help / Install new software
 
Changed:
<
<
http://subclipse.tigris.org/update_1.6.x/ (la version 1.8 ne marchait pas)
>
>
Autre Méthode (pour info)
 
Changed:
<
<
(pour info, voir http://subclipse.tigris.org)
>
>
Pour automatiser le "rebond" via GATEWAY*
 
Added:
>
>
On va maintenant rendre transparent le passage via GATEWAY. Il suffit pour cela de créer un fichier de config :
 
Added:
>
>
DEPUIS MON PC, j'édite le fichier .ssh/config, et j'y mets le contenu suivant :
 
Added:
>
>
Host hyp
        Hostname hyperion.cesr.fr
        ProxyCommand ssh GATEWAY nc %h %p 2> /dev/null
 
Changed:
<
<

JUnit

>
>
(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)
 
Changed:
<
<
1) installer Eclipse pour Java (testé avec 3.7 Indigo)
>
>
VOILA C FINI, OUF !
 
Changed:
<
<
Download "Eclipse IDE for Java Developers" from http://www.eclipse.org/downloads
>
>
Désormais, depuis votre pc, il suffit de faire un bête ssh :
 
Changed:
<
<
2) installer Junit
>
>
ssh hyp (éventuellemtn avec l'option -X pour l'affichage graphique, si nécessaire)
 
Changed:
<
<
http://www.vogella.de/articles/JUnit/article.html
>
>
(il suffit de taper une seule fois "exit" pour revenir à mon pc)
 
Deleted:
<
<
http://junit.sourceforge.net/doc/cookbook/cookbook.htm
 
Deleted:
<
<
When you need to test something, here is what you do:
    Annotate a method with @org.junit.Test
    When you want to check a value, import org.junit.Assert.* statically, call assertTrue() and pass a boolean that is true if the test succeeds
    (Use a method provides by JUnit to check the expected result of the code execution versus the actual result)
 
Changed:
<
<
For example, to test that the sum of two Moneys with the same currency contains a value which is the sum of the values of the two Moneys, write:
@Test 
public void simpleAdd() {
        Money m12CHF= new Money(12, "CHF"); 
        Money m14CHF= new Money(14, "CHF"); 
        Money expected= new Money(26, "CHF"); 
        Money result= m12CHF.add(m14CHF); 
        assertTrue(expected.equals(result));
}
>
>

IDL 8.1 workbench (idlde) crash sous Mac OS 10.7

 
Changed:
<
<
Fixture :
>
>
Voici ce qu'il faut faire pour corriger le pb :
 
Changed:
<
<
What if you have two or more tests that operate on the same or similar sets of objects?
>
>
cd /Applications/itt/idl/idl81/bin/bin.darwin.x86_64/
 
Changed:
<
<
Tests need to run against the background of a known set of objects. This set of objects is called a test fixture. When you are writing tests you will often find that you spend more time writing the code to set up the fixture than you do in actually testing values.
>
>
mv libcurl.4.0.1.dylib libcurl.4.0.1.dylib.bak
 
Changed:
<
<
To some extent, you can make writing the fixture code easier by paying careful attention to the constructors you write. However, a much bigger savings comes from sharing fixture code. Often, you will be able to use the same fixture for several different tests. Each case will send slightly different messages or parameters to the fixture and will check for different results.
>
>
mv libcurl.4.dylib libcurl.4.dylib.bak
 
Changed:
<
<
When you have a common fixture, here is what you do:
>
>
mv libcurl.dylib libcurl.dylib.bak
 
Changed:
<
<
Add a field for each part of the fixture Annotate a method with @org.junit.Before and initialize the variables in that method Annotate a method with @org.junit.After to release any permanent resources you allocated in setUp
>
>
Lire l'article complet sur le pb :
 
Changed:
<
<
For example, to write several test cases that want to work with different combinations of 12 Swiss Francs, 14 Swiss Francs, and 28 US Dollars, first create a fixture:
>
>
http://www.exelisvis.com/Support/HelpArticleDetail/ArticleId/4698/IDL-8-1-Workbench-crashing-on-Mac-OS-X-10-7-2-and-10-7-3.aspx
 
Deleted:
<
<
public class MoneyTest { private Money f12CHF; private Money f14CHF; private Money f28USD;
 
Changed:
<
<
@Before public void setUp() { f12CHF= new Money(12, "CHF"); f14CHF= new Money(14, "CHF"); f28USD= new Money(28, "USD"); } }
>
>

OpenGL Direct Hardware Rendering on Linux

 
Changed:
<
<
Once you have the Fixture in place, you can write as many Test Cases as you'd like. Add as many test methods (annotated with @Test) as you'd like.
>
>
The "Direct Rendering Infrastructure" (DRI) or "Direct hardware rendering" is described here :
 
Added:
>
>
http://www.ittvis.com/services/techtip.asp?ttid=3524
 
Changed:
<
<
You use a tool like Eclipse or the class "org.junit.runner.JUnitCore" to run the test.
>
>
As it currently does not work on hyperion, we have to deactivate it and activate "software rendering" instead (slower).
 
Changed:
<
<
Download junit-dep-4.10 from https://github.com/KentBeck/junit/downloads
>
>
How to set IDL to use "software rendering" (IDL 8 issue) ?
 
Changed:
<
<
3) Créer un projet Java
>
>
  • From IDLDE
 
Changed:
<
<
Create a new project "de.vogella.junit.first".
>
>
Fenêtre/Préférences/IDL/Graphiques :
 
Changed:
<
<
We want to create the unit tests in a separate folder. Create therefore a new source folder "test" via right mouse click on your project, select properties and choose the "Java Build Path". Select the tab source code. Press "Add folder" then then press "Create new folder". Create the folder "test". The creation of an separate folder for the test is not mandatory. But it is good advice to keep the test coding separate from the normal coding.
>
>
Méthode de rendu pour les objets graphiques : sélectionner "Logiciel" au lieu de "Matériel"
 
Changed:
<
<
Create a Java class
>
>
  • From the idl console
 
Changed:
<
<
Create a package "de.vogella.junit.first" and the following class.
>
>
There are a couple of ways to set IDL to use software rendering, besides from the IDLDE.
 
Changed:
<
<
package de.vogella.junit.first; 
public class MyClass { 
public int multiply(int x, int y) { return x / y; } 
}
>
>
If you want to set the entire IDL session to use software rendering, then when you start up IDL, you could use this command:
 
Added:
>
>
idl -IDL_GR_WIN_RENDERER 1 (for Windows) or idl -IDL_GR_X_RENDERER 1 (for X Windows)
 
Changed:
<
<
4) Create a JUnit test
>
>
If you want to switch from the default hardware rendering to software rendering in the middle of an IDL session, you could use this command:
 
Changed:
<
<
Select your new class, right mouse click and select New ->JUnit Test case, change the source folder to JUnit. Select "New JUnit 4 test". Make sure you change the source folder to test.
>
>
PREF_SET, 'IDL_GR_WIN_RENDERER', '1', /COMMIT (for Windows) or PREF_SET, 'IDL_GR_X_RENDERER', '1', /COMMIT (for X Windows)
 
Deleted:
<
<
Press next and select the methods which you want to test.
 
Changed:
<
<
If you have not yet JUnit in your classpath, Eclipse will asked you if it should be added to the classpath.
>
>

Conseils pour bien documenter son code

 
Changed:
<
<
Create a test with the following code.
>
>
  • Voir conseils généraux (Michael Galloy) "A style guide" : styleguide.pdf
 
Changed:
<
<

>
>
Je livre ici une synthèse des conseils de Michael Galloy pour bien documenter un code IDL (Lire "A style guide" pour la version complète avec justifications) :
 
Changed:
<
<
package de.vogella.junit.first; import org.junit.Test; import static org.junit.Assert.assertEquals;
>
>

1. General principles

 
Changed:
<
<
public class MyClassTest { @Test public void testMultiply() { MyClass tester = new MyClass(); assertEquals("Result", 50, tester.multiply(10, 5)); } }
>
>
1. Code is for humans.
 
Changed:
<
<
>
>
2. Do not mix styles.
 
Added:
>
>
3. Avoid redundancy.
 
Changed:
<
<
5) Run your test via Eclipse
>
>
4. Use an easy to maintain style.
 
Changed:
<
<
Right click on your new test class and select Run-As-> Junit Test.
>
>

2. Layout

 
Changed:
<
<
The test should be failing (indicated via a red bar). This is due to the fact that our multiplier class is currently not working correctly (it does a division instead of multiplication). Fix the bug and re-run test to get a green light.
>
>
1. Layout should enhance the logical structure of the code.
 
Changed:
<
<
If you have several tests you can combine them into a test suite. All test in this test suite will then be executed if you run the test suite. To create a new test suite, select your test classes, right mouse click-> New-> Other -> JUnit -Test Suite
>
>
2. Use two spaces (not tabs) per indentation level.
 
Changed:
<
<
Select next and select the methods you would like to have test created for.
>
>
3. Use a maximum line length of 79 characters.
 
Changed:
<
<
cela crée une classe AllTests.java :
>
>
4. Write code in paragraphs.
 
Added:
>
>
Example:
 

Changed:
<
<
package de.vogella.junit.first;

import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses;

>
>
function mg_sample, nValues, nIndices, seed=seed compile_opt strictarr
 
Changed:
<
<
@RunWith(Suite.class) @SuiteClasses({ MyClassTest.class, OtherClassTest.class }) public class AllTests {
>
>
; get random nIndices by finding the indices of the smallest ; nIndices in an array of random values values = randomu(seed, nValues)
 
Changed:
<
<
}
>
>
; our random values are uniformly distributed, so ideally ; the nIndices smallest values are in the first bin of the ; below histogram nBins = nValues / nIndices h = histogram(values, nbins=nBins, reverse_indices=ri)
 
Changed:
<
<
>
>
; the candidates for being in the first nIndices will live in ; bins 0..bin nCandidates = 0L for bin = 0L, nBins - 1L do begin nCandidates += h[bin] if (nCandidates ge nIndices) then break endfor
 
Changed:
<
<
If you later develop another test you can add it to @Suite.SuiteClasses
>
>
; get the candidates and sort them candidates = ri[ri[0] : ri[bin + 1L] - 1L] sortedCandidates = sort(values[candidates])
 
Added:
>
>
; return the first nIndices of them return, (candidates[sortedCandidates])[0:nIndices-1L] end
 
Changed:
<
<
6) Run your test via code
>
>
5. Insert two blank lines between routines.
 
Changed:
<
<
You can also run your test via your own coding. The class "org.junit.runner.JUnitCore" provides the method runClasses() which allows you to run one or several tests classes. As a return parameter you receive an object of type "org.junit.runner.Result". This object can be used to retrieve information about the tests and provides information about the failed tests.
>
>
One blank line separates "paragraphs"; two blank lines separate "sections."
 
Deleted:
<
<
Create in your "test" folder a new class "MyTestRunner" with the following coding. This class will execute your test class and write potential failures to the console.
 
Changed:
<
<
			
package de.vogella.junit.first;

>
>

3. Comments

 
Changed:
<
<
import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure;
>
>
1. Document intent.
 
Changed:
<
<
public class MyTestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(MyClassTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } } }
>
>
2. Keep comments up to date with the code.
 
Added:
>
>
3. For a short comment, use a phrase with lowercase first letter and no period. For longer comments, use all normal grammar rules.
 
Changed:
<
<
7) Annotations and Assert statements
>
>
5. Write a complete header for each routine.
 
Changed:
<
<
a) Annotations
>
>
Use comments between ;+ and ;- before the routine. Document the purpose of the routine, the return value (if a function), and side effects of the routine (which you should strive to eliminate). Each parameter should be documented with whether it is an input and/or output, optional or required, data type expected, default value (if any) and a description of its purpose.
 
Changed:
<
<
The following give an overview of the available annotations in JUnit 4.x
>
>
For example, the below is an IDLdoc formatted header for the routine listed above:
 

Changed:
<
<
Annotation Description @Test public void method() Annotation @Test identifies that this method is a test method. @Before public void method() Will perform the method() before each test. This method can prepare the test environment (called a "fixture"), e.g. read input data, initialize the class) @After public void method() Test method must start with test @BeforeClass public void method() Will perform the method before the start of all tests. This can be used to perform time intensive activities for example be used to connect to a database @AfterClass public void method() Will perform the method after all tests have finished. This can be used to perform clean-up activities for example be used to disconnect to a database @Ignore Will ignore the test method, e.g. useful if the underlying code has been changed and the test has not yet been adapted or if the runtime of this test is just to long to be included. @Test(expected=IllegalArgumentException.class) Tests if the method throws the named exception @Test(timeout=100) Fails if the method takes longer then 100 milliseconds
>
>
;+ ; Get nIndices random indices for an array of size nValues (do ; not repeat an index). ; ; :Returns: lonarr(nIndices) ; ; :Params: ; nValues : in, required, type=long ; size of array to choose indices from ; nIndices : in, required, type=long ; number of indices needed ; ; :Keywords: ; seed : in, out, optional, type=long or lonarr(36) ; seed to use for random number generation, a new seed ; will be output ;- function mg_sample, nValues, nIndices, seed=seed
 
Added:
>
>
6. Indent a comment along with the code it's documenting.
 
Changed:
<
<
b) Assert statements

The following gives an overview of the available test methods:

>
>
7. Document paragraph by paragraph.
 
Changed:
<
<
Statement 	Description
fail(String) 	Let the method fail, might be usable to check that a certain part of the code is not reached.
assertTrue(true); 	True
assertsEquals([String message], expected, actual) 	Test if the values are the same. Note: for arrays the reference is checked not the content of the arrays
assertsEquals([String message], expected, actual, tolerance) 	Usage for float and double; the tolerance are the number of decimals which must be the same
assertNull([message], object) 	Checks if the object is null
assertNotNull([message], object) 	Check if the object is not null
assertSame([String], expected, actual) 	Check if both variables refer to the same object
assertNotSame([String], expected, actual) 	Check that both variables refer not to the same object
assertTrue([message], boolean condition) 	Check if the boolean condition is true.
>
>
Each paragraph of code may need a comment to document its purpose, but inside a paragraph use only end-of-line comments to comment particular lines. It can be helpful to write the comments first, providing an outline of the code to write.
 
Added:
>
>
ex of end-of-line comment :
 
Changed:
<
<
8) Fixture (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)
>
>
if (event.type eq 2) then begin ; type 2 = motion events
 
Changed:
<
<
9) Running Tests FROM JAVA (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)
>
>
9. Don't repeat the code in the comments.
 
Changed:
<
<
10) Expected Exceptions (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)
>
>
Don't document the obvious.
 
Added:
>
>
10. Don't add extra comments for convoluted code; improve the code.
 
Added:
>
>
Don't document bad code—rewrite it. (Kernighan and Plauger, The Elements of Programming Style)
 
Added:
>
>

4. Statement formatting

 
Changed:
<
<

WIKI

>
>
4.1. Use lowercase for reserved words, operators, and compile_opt option names.
 
Changed:
<
<
Voir aussi InformationAboutThisTwiki
>
>
For example, use:
compile_opt strictarr 
if (not done) then readf, lun, line 
 
Changed:
<
<
Tutoriel : TWikiTutorial
>
>
4.2. Use only one statement per line.
 
Changed:
<
<

Niveau Utilisateur

>
>
For example, don't write:
 
Changed:
<
<

Créer un raccourci vers une icône :

>
>
a = 1 & b = 2
 
Changed:
<
<
Par exemple, créer todo.gif comme raccourci de l'icône TODO :
>
>
4.3. Prefer begin/end blocks unless the entire statements fits on one line.
 
Changed:
<
<
Editer TWikiPreferences
>
>
For a single, long statement, use:
 

Changed:
<
<
* Set TD = todo.gif * Set DO = DONE
>
>
for i = 0, 10 do begin print, i, format='("The index is ", I0, ".")' end
 
Changed:
<
<

Commentaire

>
>
But never write:
 

Changed:
<
<
Html comment =
<-- comment -->
Twiki comment = # comment
>
>
for i = 0, 10 do $ print, i, format='("The index is ", I0, ".")'
 
Changed:
<
<

Voir ce qui change sur le site

Pour savoir ce qui a changé (en ordre chronologique) sur le web Team, consulter cette page : WebChanges

Changements survenus sur le web "twiki" : WebChanges

on peut aussi s'inscrire sur cette page pour recevoir les changements du web Team par email : WebNotify

Contribuer (enrichir le site)

Vous êtes vivement encouragés à contribuer au contenu de ce site.

Pour modifier n'importe quelle page du site :

  • cliquez sur bouton "Edit", faites vos modifs, puis cliquez sur le bouton "Save".
  • si vous êtes plus à l'aise avec la souris, cliquez plutot sur le bouton "WYSIWYG"
>
>
4.5. Define structures one field per line unless the entire definition can fit on one line.
 
Added:
>
>
For example, use:
point = { x: 0.0, y:0.0 } 
state = { x: 0.0, $ 
          y: 0.0, $ 
          pdata: ptr_new(), $ ; image data 
          drawId: 0L $ ; window identifier 
        } 
 
Changed:
<
<

Faire une copie (de sauvegarde) d'un Web (pour consultation offline) :

  • Grace au plugin PublishContrib, on peut obtenir une copie du Web à tout instant (attention, cette copie est READ ONLY, ce n'est plus un wiki, mais juste des pages web).
  • Pour publier la version courante du Web, aller sur le topic PublishWeb, et cliquer sur le bouton "Publish" (en milieu de page). Par défaut, c'est l'option "zip" qui est sélectionnée, ce qui crée un zip du Web.
  • Il suffit maintenant de cliquer en bas de la page générée par la requete, sur le lien "Published To: NomduWeb.zip", pour télécharger ce zip (L'accès à cette adresse est protégé pour que seuls les personnes enregistrées puissent y acceder)
  • Dézipper et cliquer sur la page WebHome.html. Le résultat n'est pas très joli, mais le contenu y est...
  • Un historique de la dernière publication se trouve dans le topic PublishContribHistory (utile pour voir si tout s'est bien passé)
>
>
4.6. Add one space around most operators.
 
Changed:
<
<

Mise à jour d'une pièce attachée (remarque) :

>
>
ex:
 
Changed:
<
<
Il vaut mieux utiliser des noms de fichier assez génériques (par exemple FDD.pdf au lieu de FF_v1.4.pdf) ainsi on peut mettre à jour un document sans changer son nom et les liens vers ce fichier
>
>
slope = (y0 - y1) / (x0 - x1)
 
Changed:
<
<

Insérer une icone:

%Y%
DONE
%TD%
ou
%ICONURL{todo}%
todo.gif
%DO%
ou
%ICONURL{done}%
done.gif
%CL%
ou
%ICONURL{closed}%
closed.gif
Pour en savoir plus: TWikiDocGraphics#Status_flag_LED_tag_icons
>
>
tvscl, im, true=1
 
Added:
>
>
bin = arr[r[r[i]:r[i + 1] - 1]]
 
Changed:
<
<

RACCOURCIS PRATIQUES

>
>
point = { x: 0.0, y: 0.0 }
 
Changed:
<
<
>
>
Also, don't add extra spaces in order to align values.
 
Changed:
<
<
  • Liste de tous les users twiki enregistrés : UserList
>
>
4.7. Use single quotes for strings.
 
Changed:
<
<
  • Liste plus générale des users twiki : TWikiUsers
>
>
Use double single quotes if you need a single quote. For example,
 
Changed:
<
<
>
>
sign = 'Eat at Joe''s'
 
Changed:
<
<
>
>
4.9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers.
 
Changed:
<
<
>
>
Use 0L not 0l because "l" (lowercase letter el) looks like "1" (integer one). Use '5'o and '5'x, not '5'O and '5'X.
 
Added:
>
>
4.10. Use square brackets for array indices.
 
Changed:
<
<

Niveau Administrateur

>
>
Use
 
Changed:
<
<
Voir aussi InformationAboutThisTwiki
>
>
compile_opt strictarr
 
Added:
>
>
in each routine to prevent issues with IDL confusing arrays and functions calls.
 
Added:
>
>

5. Variables

 
Added:
>
>
1. Use good variable names.
 
Changed:
<
<

IDL

>
>
2. Variable names should be in camel case.
 
Changed:
<
<

Utiliser mon IDL au labo ou bien à l'extérieur du labo (en une seule config)

>
>
Camel case uppercases the first letter of each word in the name except for the first letter.
 
Changed:
<
<
Problème : Comment exécuter mon idl (celui qui est installé localement sur mon pc/mac) au labo et même à l'extérieur du labo ???
>
>
Uppercase each letter in an abbreviation that appears in a variable name unless it starts the name:
 
Changed:
<
<
Réponse : en profitant des licences du serveur hyperion
>
>
noaaWeatherURL.
 
Changed:
<
<
En ce qui vous concerne, allez directement au point 2)
>
>
Prefix the name with "n" for variables that hold counts, "o" for object references, "p" for pointers, "id" for iTools identifiers.
 
Changed:
<
<
1) Travail à faire pour l'administrateur système sur hyperion
>
>
Examples that follow this convention,
nFiles 
oModel 
pState 
idPlot 
 
Changed:
<
<
Modifier le fichier de licences /usr/local/itt/license/license.dat, remplacer la ligne : "DAEMON idl_lmgrd" par "DAEMON idl_lmgrd port=1701"
>
>
3. Prefer pointers, objects, and passing local variables over common blocks or system variables.
 
Changed:
<
<
(cela force flexlm à utiliser le port 1701 pour idl_lmgrd)
>
>
Occasionally there is a reason to use common blocks or system variables, but you should have a good argument for it.
 
Changed:
<
<
Relancer les service lmgrd et idl_lmgrd
>
>
When using direct graphics, prefer using graphics keywords of the plotting routines over setting system variables directly.
 
Changed:
<
<
Si tout s'est bien passé, la commande "nmap hyperion.cesr.fr -p1700-1701" permet de voir que le port 1701 est bien ouvert
>
>
4. Define common blocks and named structures in only one location.
 
Changed:
<
<
$ nmap hyperion.cesr.fr -p1700-1701

>
>
Define the variables in a common block only once in a batch file. Include that file where needed.
 
Changed:
<
<
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-10-08 18:10 CEST Interesting ports on hyperion.cesr.fr (195.83.102.174): PORT STATE SERVICE 1700/tcp open unknown 1701/tcp open unknown
>
>
map_proj_init_commonblock.pro is an example of this.
 
Changed:
<
<
Nmap finished: 1 IP address (1 host up) scanned in 0.119 seconds
>
>
Define a named structure using automatic structure definition. For example, define MG_Point in a routine named MG_POINT__DEFINE in a file named mg_point__define.pro.
 
Changed:
<
<
2) Pour vous (côté client), Il suffit de faire 2 choses sur votre pc/mac
>
>

6. Routines

 
Changed:
<
<
a) Positionner une variable d'environnement
>
>
1. For any file containing IDL code, filenames should always be in lower case and use the ".pro" extension.
 
Changed:
<
<
Positionner la variable d'environnement avec 2 serveurs de jetons (pour pouvoir bosser à l'INTERIEUR (port 1700 de hyperion) ET à l'EXTERIEUR (port 9700 de localhost) du labo sans jamais rien modifier) :
>
>
2. Each file should include only one routine called from outside the file.
 
Changed:
<
<
(Pour les utilisateurs de Windows, faire un clic droit sur Poste de Travail, puis onglet "Variables d'environnement", puis entrer la variable nommée LM_LICENSE_FILE avec la valeur "1700@hyperion.cesr.fr:9700@localhost")
>
>
Each file should contain only one routine called from outside that file. Add the ".pro" extension to the routine name of the externally called routine to get the filename. For example, the routine MG_LINEAR_FUNCTION should be in a file named mg_linear_function.pro. If there are multiple routines in the file, make sure the externally called routine is last in the file.
 
Changed:
<
<
export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
>
>
3. Routine names should be lower case, begin with a short organization prefix, and separate words with underscores.
 
Changed:
<
<
(Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_profile, pour ne plus avoir à la taper)
>
>
The prefix indicates the individual or group responsible for the code. It is usually the initials of the individual or orgranization. Limit to two or three letters. Don't use the "IDL", "RSI", "ITT", "cw", "it", or empty prefixes.
 
Changed:
<
<
Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.
>
>
4. Routines should fit on one screen.
 
Changed:
<
<
Si vous êtes à l'extérieur du labo, continuez la lecture...
>
>
5. Keywords should always be optional for the caller; positional parameters should generally be required.
 
Added:
>
>
Keywords should either be an optional input with a reasonable default value or an extra output (i.e. not the main purpose of the routine).
 
Changed:
<
<
b) "Creuser" un tunnel
>
>
6. Keyword names should be lowercase and separate words with underscores.
 
Added:
>
>
For example,
filename 
ntests 
eye_separation 
left_image 
 
Changed:
<
<
(Pour les personnes qui utilisent Windows, vous pouvez faire la même chose que ci-dessous avec le logiciel Putty, en vous inspirant de ce qui est décrit sur cette même page au point 4) a) de l'article http://planetoweb.cesr.fr/twiki/bin/view/Main/HowtoInformatique#Se_connecter_un_serveur_linux_en)
>
>
7. Always use the full keyword name when calling the routine.
 
Changed:
<
<
Ouvrir un tunnel avec mise en correspondance de 2 ports :
>
>
8. If the purpose of a routine is to return a value, use a function, otherwise use a procedure.
 
Changed:
<
<
ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MON_LOGIN_EMAIL@GATEWAY
>
>
9. Status and error codes should be returned via keyword.
 
Deleted:
<
<
(remplacer MON_LOGIN_EMAIL par votre login utilisé pour le mail ou pour vous connecter à la passerelle du labo, et GATEWAY par le serveur passerelle du labo)
 
Changed:
<
<
(Remarque pour l'admin système : attention, sur le localhost on a le choix de la correspondance du port 1700 d'hyperion (port 9700 local) mais pas pour le 1701)
>
>

7. Object-oriented programming

 
Changed:
<
<
Entrer le mot de passe pour GATEWAY (pour vous connecter de votre pc à GATEWAY)
>
>
1. Class names should begin with a prefix indicating organization and a code indicating the class' area of use. Each word should be capitalized
 
Changed:
<
<
Voilà, vous avez créé un tunnel entre votre pc/mac et hyperion, passant par GATEWAY (vous êtes d'ailleurs connecté à la passerelle).
>
>
Use the same prefix as given to normal routine names; avoid "IDL", "ITT", "RSI", and the empty prefix.
 
Changed:
<
<
Il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.
>
>
Codes already in use by IDL: an (analysis), com (COM), db (database), ex (example), ff (file format), gr (graphics), it (iTools), sys (system), net (network), and _ (general use). Make use of the existing codes and make up new ones as necessary.
 
Changed:
<
<
Attention, une fois la session idl terminée, ne pas oublier de détruire le tunnel en vous déconnectant d'hyperion !!! (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)
>
>
Use all caps for abbreviations in class names, as in IDLnetURL.
 
Changed:
<
<
Bon, on peut encore améliorer les choses... si ça vous dit, allez voir un peu plus loin, juste après la partie IN ENGLISH.
>
>
2. Put all the methods and the routine defining the instance variables for a class into a single file.
 
Changed:
<
<
Now, IN ENGLISH (and for Mac/Linux users only) :
>
>
For the definition of MGexClass, the file should be named mgexclass__define.pro. The last routine in this file should be MGEXCLASS__DEFINE and should define the instance variables for the class (i.e. create a named structure with name MGexClass).
 
Changed:
<
<
(First, be sure you have removed any remaining license.dat file from your itt/license/ directory ; just drop it, you don't need it)
>
>
Define only one structure/class name in the __DEFINE routine.
 
Changed:
<
<
1) set and export LM_LICENSE_FILE
>
>
3. Method names should be a verb phrase in camel case.
 
Changed:
<
<
Open a new terminal and set this variable :
>
>
For example, here are some method names following these conventions:
getProperty 
setProperty 
add 
findTestNames 
runTest 
reportTestResult 
 
Changed:
<
<
$ export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
>
>
Use the conventions that are used by the IDL library classes. For example, use the GETPROPERTY and SETPROPERTY scheme of procedures to handle getting and setting properties of a class.
 
Changed:
<
<
(you can also write this line once and for all in your ~/.bash_profile file, so that you won't have to do it every day)
>
>
4. Begin "protected" methods' names with a underscore.
 
Changed:
<
<
If you are INSIDE the lab, you are finished. Just launch your (local) idl : $ idlde (or idl) (or from the Applications launcher)
>
>
For example,
 
Changed:
<
<
If you are OUTSIDE the lab, you need one last step...
>
>
MGexSomeClass::_helperMethod
 
Added:
>
>
is a helper method called by other methods in MGexSomeClass, but should not be called from outside of MGexSomeClass.
 
Changed:
<
<
2) set a tunnel
>
>
5. Beware of multiple inheritance.
 
Changed:
<
<
Open a new terminal and create this tunnel :
>
>
Use multiple inheritance as a last resort. Prefer delegation for one of the parent classes i.e. make the new class contain the secondary parent class as an instance variable.
 
Deleted:
<
<
$ ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MYLOGIN@GATEWAY
 
Changed:
<
<
You are now connected to the lab gateway.

Keep it open as long as you are running idl !

Only once finished with idl, don't forget to destroy the tunnel by closing the connexion to GATEWAY !!!

>
>

8. Exemple de commentaires proposé par ITT dans examples/template.pro

 
Added:
>
>
;+
; NAME:
; ROUTINE_NAME
;
; PURPOSE:
; Tell what your routine does here.  I like to start with the words:
; "This function (or procedure) ..."
; Try to use the active, present tense.
;
; CATEGORY:
; Put a category (or categories) here.  For example:
; Widgets.
;
; CALLING SEQUENCE:
; Write the calling sequence here. Include only positional parameters
; (i.e., NO KEYWORDS). For procedures, use the form:
;
; ROUTINE_NAME, Parameter1, Parameter2, Foobar
;
; Note that the routine name is ALL CAPS and arguments have Initial
; Caps.  For functions, use the form:
; 
; Result = FUNCTION_NAME(Parameter1, Parameter2, Foobar)
;
; Always use the "Result = " part to begin. This makes it super-obvious
; to the user that this routine is a function!
;
; INPUTS:
; Parm1:  Describe the positional input parameters here. Note again
;   that positional parameters are shown with Initial Caps.
;
; OPTIONAL INPUTS:
; Parm2:  Describe optional inputs here. If you don't have any, just
;   delete this section.
; 
; KEYWORD PARAMETERS:
; KEY1: Document keyword parameters like this. Note that the keyword
;   is shown in ALL CAPS!
;
; KEY2: Yet another keyword. Try to use the active, present tense
;   when describing your keywords.  For example, if this keyword
;   is just a set or unset flag, say something like:
;   "Set this keyword to use foobar subfloatation. The default
;    is foobar superfloatation."
;
; OUTPUTS:
; Describe any outputs here.  For example, "This function returns the
; foobar superflimpt version of the input array."  This is where you
; should also document the return value for functions.
;
; OPTIONAL OUTPUTS:
; Describe optional outputs here.  If the routine doesn't have any, 
; just delete this section.
;
; COMMON BLOCKS:
; BLOCK1: Describe any common blocks here. If there are no COMMON
;   blocks, just delete this entry.
;
; SIDE EFFECTS:
; Describe "side effects" here.  There aren't any?  Well, just delete
; this entry.
;
; RESTRICTIONS:
; Describe any "restrictions" here.  Delete this section if there are
; no important restrictions.
;
; PROCEDURE:
; You can describe the foobar superfloatation method being used here.
; You might not need this section for your routine.
;
; EXAMPLE:
; Please provide a simple example here. An example from the
; DIALOG_PICKFILE documentation is shown below. Please try to
; include examples that do not rely on variables or data files
; that are not defined in the example code. Your example should
; execute properly if typed in at the IDL command line with no
; other preparation. 
;
;       Create a DIALOG_PICKFILE dialog that lets users select only
;       files with the extension `pro'. Use the `Select File to Read'
;       title and store the name of the selected file in the variable
;       file. Enter:
;
;       file = DIALOG_PICKFILE(/READ, FILTER = '*.pro') 
;
; MODIFICATION HISTORY:
;   Written by: Your name here, Date.
; July, 1994  Any additional mods get described here.  Remember to
;     change the stuff above if you add a new keyword or
;     something!
;-

 
Changed:
<
<

>
>
PRO TEMPLATE
 
Changed:
<
<
ETAPE FACULTATIVE : On peut encore améliorer les choses... Comment ?
>
>
PRINT, "This is an example header file for documenting IDL routines"
 
Changed:
<
<
En s'arrangeant pour ne plus avoir aucun mot de passe à entrer grâce aux clés publique&privée.
>
>
END
 
Deleted:
<
<
Voici comment faire...
 
Changed:
<
<
1) Créer une paire de clés privée/publique sur mon pc
>
>
Le même bloc de commentaires, mais vide :
 

Changed:
<
<
$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/Users/pallier/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/pallier/.ssh/id_dsa. Your public key has been saved in /Users/pallier/.ssh/id_dsa.pub.
>
>
;+ ; NAME: ; ; ; ; PURPOSE: ; ; ; ; CATEGORY: ; ; ; ; CALLING SEQUENCE: ; ; ; ; INPUTS: ; ; ; ; OPTIONAL INPUTS: ; ; ; ; KEYWORD PARAMETERS: ; ; ; ; OUTPUTS: ; ; ; ; OPTIONAL OUTPUTS: ; ; ; ; COMMON BLOCKS: ; ; ; ; SIDE EFFECTS: ; ; ; ; RESTRICTIONS: ; ; ; ; PROCEDURE: ; ; ; ; EXAMPLE: ; ; ; ; MODIFICATION HISTORY: ; ;-
 
Deleted:
<
<
2) Distribuer ensuite la clé publique de mon pc sur la passerelle du labo (que nous appelerons GATEWAY pour raison de sécurité)
 
Deleted:
<
<
La clé publique, doit être copiée sur le serveur distant dans ~/.ssh/authorized_keys. (La clé privée reste sur votre poste client)
 
Changed:
<
<
Aller dans votre HOME
>
>

OUTILS pour documenter le code

doc_library

doc_library affiche seulement "tel quel" le bloc de commentaires complet compris entre ";+" et ";-", et affiche le chemin du fichier.

Pour documenter une fonction ou une procédure :

  • Fonction "dist":
 

Changed:
<
<
ssh-copy-id -i .ssh/id_dsa.pub GATEWAY ( ou bien, si on ne dispose pas de la commande ssh-copy-id, l'exemple est ici donné pour moi : $ cat .ssh/id_dsa.pub | ssh epallier@GATEWAY "cat - >>.ssh/authorized_keys" )
>
>
IDL> doc_library, 'DIST'
 
Changed:
<
<
>
>

Documentation for C:\Program Files\ITT\IDL\IDL80\lib\dist.pro
 
Changed:
<
<
3) Tester maintenant la connexion à GATEWAY
>
>
NAME: DIST
 
Changed:
<
<
ssh monlogin@GATEWAY
>
>
PURPOSE: Create a rectangular array in which each element is proportional to its frequency. This array may be used for a variety of purposes, including frequency-domain filtering and making pretty pictures.
 
Changed:
<
<
On peut désormais se connecter directement sans mot de passe !!!
>
>
CATEGORY: Signal Processing.
 
Changed:
<
<
4) Faire de même entre GATEWAY et hyperion
>
>
CALLING SEQUENCE: Result = DIST(N [, M])
 
Changed:
<
<
Maintenant, il suffit de faire la même chose que 2) et 3) mais depuis GATEWAY (et vers hyperion)
>
>
INPUTS: N = number of columns in result. M = number of rows in result. If omitted, N is used to return a square array.
 
Changed:
<
<
Quand c'est fait, depuis GATEWAY, on peut maintenant se connecter directement à hyperion sans mot de passe :
>
>
OUTPUTS: Returns an (N,M) floating array in which:
 
Changed:
<
<
ssh monlogin@hyperion.cesr.fr
>
>
R(i,j) = SQRT(F(i)^2 + G(j)^2) where: F(i) = i IF 0 <= i <= n/2 = n-i IF i > n/2 G(i) = i IF 0 <= i <= m/2 = m-i IF i > m/2
 
Changed:
<
<
(je tape 2 fois "exit" pour revenir à mon pc)
>
>
SIDE EFFECTS: None.
 
Changed:
<
<
Voilà, on peut maintenant créer le tunnel (voir ci-dessus) sans avoir aucun mot de passe à entrer.
>
>
RESTRICTIONS: None.
 
Changed:
<
<
Pour faire encore plus simple, on peut se créer un alias nommé "tunnel" :
>
>
PROCEDURE: Straightforward. The computation is done a row at a time.
 
Changed:
<
<
alias tunnel = 'ssh -t -L 9700:localhost:1700 YOUR_IRAP_LOGIN@GATEWAY ssh -L 1700:localhost:1700 YOUR_HYPERION_LOGIN@hyperion.cesr.fr'
>
>
MODIFICATION HISTORY: Very Old. SMR, March 27, 1991 - Added the NOZERO keyword to increase efficiency. (Recomended by Wayne Landsman) DMS, July, 1992. - Added M parameter to make non-square arrays. CT, RSI, March 2000: Changed i^2 to i^2. to avoid overflow.
 
Changed:
<
<
Il suffit alors de taper "tunnel" pour qu'il soit créé.
>
>
  • Fonction plot:
 
Added:
>
>
IDL> doc_library, 'plot'

 
Changed:
<
<
Autre Méthode (pour info)
>
>

Documentation for C:\Program Files\ITT\IDL\IDL80\lib\graphics\plot.pro
 
Changed:
<
<
Pour automatiser le "rebond" via GATEWAY*
>
>
:Description: Create IDL Plot graphic.
 
Changed:
<
<
On va maintenant rendre transparent le passage via GATEWAY. Il suffit pour cela de créer un fichier de config :
>
>
:Params: arg1 : optional generic argument arg2 : optional generic argument
 
Changed:
<
<
DEPUIS MON PC, j'édite le fichier .ssh/config, et j'y mets le contenu suivant :
>
>
:Keywords: _REF_EXTRA
 
Changed:
<
<
Host hyp
        Hostname hyperion.cesr.fr
        ProxyCommand ssh GATEWAY nc %h %p 2> /dev/null
>
>
Dans ce dernier exemple (plot), on se rend compte que depuis idl 8, les nouvelles fonctions/procédures (telles que la fonction plot) ne sont plus commentées au format "idl" mais "rst", qui semble donc être le nouveau format à utiliser pour commenter du code idl.
 
Changed:
<
<
(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)
>
>

mk_html_help

 
Changed:
<
<
VOILA C FINI, OUF !
>
>
Cet outil génère une doc html d'un fichier ou même d'un répertoire complet :
 
Changed:
<
<
Désormais, depuis votre pc, il suffit de faire un bête ssh :
>
>
ex: documentation du fichier dist.pro:
 
Changed:
<
<
ssh hyp (éventuellemtn avec l'option -X pour l'affichage graphique, si nécessaire)
>
>
MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib\dist.pro', 'help_dist.html' ; La doc générée est help_dist.html
 
Changed:
<
<
(il suffit de taper une seule fois "exit" pour revenir à mon pc)
>
>
ex: documentation d'une arborescence complète:
 
Added:
>
>
MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib', 'help.html' ; La doc générée est help.html
 
Changed:
<
<

IDL 8.1 workbench (idlde) crash sous Mac OS 10.7

>
>

IdlDoc

 
Changed:
<
<
Voici ce qu'il faut faire pour corriger le pb :
>
>
 
Changed:
<
<
cd /Applications/itt/idl/idl81/bin/bin.darwin.x86_64/
>
>
 
Changed:
<
<
mv libcurl.4.0.1.dylib libcurl.4.0.1.dylib.bak
>
>
home: http://idldoc.idldev.com/
 
Changed:
<
<
mv libcurl.4.dylib libcurl.4.dylib.bak
>
>
download: http://idldoc.idldev.com/wiki/Downloads
 
Changed:
<
<
mv libcurl.dylib libcurl.dylib.bak
>
>
tutoriel: http://idldoc.idldev.com/wiki/GettingStarted
 
Changed:
<
<
Lire l'article complet sur le pb :
>
>
idldoc est un outil qui permet de générer une doc à partir du code idl
 
Changed:
<
<
http://www.exelisvis.com/Support/HelpArticleDetail/ArticleId/4698/IDL-8-1-Workbench-crashing-on-Mac-OS-X-10-7-2-and-10-7-3.aspx
>
>
Il propose 3 formats différents :
 
Added:
>
>
  • rst : le format le plus récent, qui tend à devenir le nouveau standard, il apporte beaucoup de possibilités
  • idldoc : le format historique de idldoc, qui ressemble à celui utilisé par des outils plus génériques, tels que Doxygen
  • idl : le format utilisé par ITT (et proposé dans examples/template.pro)
 
Changed:
<
<

OpenGL Direct Hardware Rendering on Linux

>
>
Ce dernier format ("idl") a juste le "mérite" d'être un standard pour les routines IDL, mais il est peu et mal exploité par IdlDoc qui ne reconnait que très peu de balises de commentaires (seulement 6) parmis celles proposées dans template.pro, et les met mal en valeur dans la doc générée.
 
Changed:
<
<
The "Direct Rendering Infrastructure" (DRI) or "Direct hardware rendering" is described here :
>
>
Les 6 balises exploitées sont :
 
Changed:
<
<
http://www.ittvis.com/services/techtip.asp?ttid=3524
>
>
; PURPOSE:
 
Changed:
<
<
As it currently does not work on hyperion, we have to deactivate it and activate "software rendering" instead (slower).
>
>
; SIDE EFFECTS:
 
Changed:
<
<
How to set IDL to use "software rendering" (IDL 8 issue) ?
>
>
; RESTRICTIONS:
 
Changed:
<
<
  • From IDLDE
>
>
; PROCEDURE:
 
Changed:
<
<
Fenêtre/Préférences/IDL/Graphiques :
>
>
; EXAMPLE:
 
Changed:
<
<
Méthode de rendu pour les objets graphiques : sélectionner "Logiciel" au lieu de "Matériel"
>
>
; MODIFICATION HISTORY:
 
Changed:
<
<
  • From the idl console
>
>
Cette dernière balise est affichée en tant que "Author information" dans la doc générée
 
Changed:
<
<
There are a couple of ways to set IDL to use software rendering, besides from the IDLDE.
>
>
Quant à la balise suivante...
 
Changed:
<
<
If you want to set the entire IDL session to use software rendering, then when you start up IDL, you could use this command:
>
>
; CALLING SEQUENCE:
 
Changed:
<
<
idl -IDL_GR_WIN_RENDERER 1 (for Windows) or idl -IDL_GR_X_RENDERER 1 (for X Windows)
>
>
... elle n'est pas reconnue, mais elle semble inutile puisque cette information est automatiquement générée par idldoc.
 
Deleted:
<
<
If you want to switch from the default hardware rendering to software rendering in the middle of an IDL session, you could use this command:
 
Changed:
<
<
PREF_SET, 'IDL_GR_WIN_RENDERER', '1', /COMMIT (for Windows) or PREF_SET, 'IDL_GR_X_RENDERER', '1', /COMMIT (for X Windows)
>
>
Voir mes commentaires à l'auteur du logiciel et ses réponses:
 
Added:
>
>
http://michaelgalloy.com/2010/10/20/idldoc-3-3-released.html
 
Deleted:
<
<

Conseils pour bien documenter son code

 
Changed:
<
<
  • Voir conseils généraux (Michael Galloy) "A style guide" : styleguide.pdf
>
>
Installation
 
Changed:
<
<
Je livre ici une synthèse des conseils de Michael Galloy pour bien documenter un code IDL (Lire "A style guide" pour la version complète avec justifications) :
>
>
(NB: sur hyperion, c'est déjà installé sous /usr/local/itt/idldoc/idldoc)
 
Changed:
<
<

1. General principles

>
>
1) Download
 
Changed:
<
<
1. Code is for humans.
>
>
2) Copier et dézipper dans un dossier de mon choix (ex : D:/idldoc/idldoc-3.3)
 
Changed:
<
<
2. Do not mix styles.
>
>
3) Ajouter le chemin vers idldoc dans le IDL_PATH (Fenêtre/Preferences/IDL/Chemins/Insérer (puis Appliquer)
 
Deleted:
<
<
3. Avoid redundancy.
 
Changed:
<
<
4. Use an easy to maintain style.
>
>
Utilisation
 
Changed:
<
<

2. Layout

>
>
Pour générer la doc avec idldoc :
 
Changed:
<
<
1. Layout should enhance the logical structure of the code.
>
>
IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc'
 
Changed:
<
<
2. Use two spaces (not tabs) per indentation level.
>
>
Puis, 2clic sur index.html
 
Changed:
<
<
3. Use a maximum line length of 79 characters.
>
>
Exemple plus complet:
 
Changed:
<
<
4. Write code in paragraphs.
>
>
IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc', title='DOC pour mon projet', subtitle='generated with idldoc 3.3', format_style='rst', overview='path_vers_mon_fichier_overview'
 
Changed:
<
<
Example:
function mg_sample, nValues, nIndices, seed=seed 
  compile_opt strictarr 

>
>
Remarque: format_style peut prendre les 3 valeurs "rst", "idl" ou "idldoc"
 
Deleted:
<
<
; get random nIndices by finding the indices of the smallest ; nIndices in an array of random values values = randomu(seed, nValues)
 
Deleted:
<
<
; our random values are uniformly distributed, so ideally ; the nIndices smallest values are in the first bin of the ; below histogram nBins = nValues / nIndices h = histogram(values, nbins=nBins, reverse_indices=ri)
 
Changed:
<
<
; the candidates for being in the first nIndices will live in ; bins 0..bin nCandidates = 0L for bin = 0L, nBins - 1L do begin nCandidates += h[bin] if (nCandidates ge nIndices) then break endfor
>
>

Enregistrer une image dans un fichier

 
Changed:
<
<
; get the candidates and sort them candidates = ri[ri[0] : ri[bin + 1L] - 1L] sortedCandidates = sort(values[candidates])
>
>
; envoi vers fichier postscript
set_plot, 'ps'

 
Changed:
<
<
; return the first nIndices of them return, (candidates[sortedCandidates])[0:nIndices-1L] end
>
>
; éventuellement donner un nom device, filename='toto.ps'

plot, findgen(2)

; retour à l'affichage sur écran device, /close set_plot, 'x'

 
Deleted:
<
<
5. Insert two blank lines between routines.
 
Changed:
<
<
One blank line separates "paragraphs"; two blank lines separate "sections."
>
>

PHP

Fonctions anonymes (lambda) et closures (php 5.3)

Fonctions anonymes (lambda)

 
Added:
>
>
http://blog.pascal-martin.fr/post/php-5.3-1-closures-et-lambdas

$f1= function () {
    echo "<p>Hello, World!</p>";
};
 
Changed:
<
<

3. Comments

>
>
$f2= function ($param) { echo "

Hello, $param!

"; };
 
Changed:
<
<
1. Document intent.
>
>
call :
 
Changed:
<
<
2. Keep comments up to date with the code.
>
>
$f1();
 
Changed:
<
<
3. For a short comment, use a phrase with lowercase first letter and no period. For longer comments, use all normal grammar rules.
>
>
$f2('there');
 
Changed:
<
<
5. Write a complete header for each routine.
>
>
call_user_func($f1);
 
Changed:
<
<
Use comments between ;+ and ;- before the routine. Document the purpose of the routine, the return value (if a function), and side effects of the routine (which you should strive to eliminate). Each parameter should be documented with whether it is an input and/or output, optional or required, data type expected, default value (if any) and a description of its purpose.
>
>
call_user_func($f2, 'You');
 
Changed:
<
<
For example, the below is an IDLdoc formatted header for the routine listed above:
>
>
call_user_func_array($f1, array());
 
Changed:
<
<
;+ 
; Get nIndices random indices for an array of size nValues (do 
; not repeat an index). 
;
; :Returns: lonarr(nIndices) 
;
; :Params: 
;     nValues : in, required, type=long 
;          size of array to choose indices from 
;     nIndices : in, required, type=long 
;         number of indices needed 
;
; :Keywords: 
;     seed : in, out, optional, type=long or lonarr(36) 
;         seed to use for random number generation, a new seed 
;         will be output 
;- 
function mg_sample, nValues, nIndices, seed=seed 
>
>
call_user_func_array($f2, array('You'));
 
Changed:
<
<
6. Indent a comment along with the code it's documenting.
>
>
Exemple d'utilisation avec array_map :
 
Changed:
<
<
7. Document paragraph by paragraph.
>
>
$data = array('iron maiden', 'judas priest', 'rammstein');
$output = array_map(function ($item) {
        return ucwords($item);
    },
    $data);
var_dump($output);
 
Changed:
<
<
Each paragraph of code may need a comment to document its purpose, but inside a paragraph use only end-of-line comments to comment particular lines. It can be helpful to write the comments first, providing an outline of the code to write.
>
>
Résultat :
 
Changed:
<
<
ex of end-of-line comment :
>
>
array
  0 => string 'Iron Maiden' (length=11)
  1 => string 'Judas Priest' (length=12)
  2 => string 'Rammstein' (length=9)
 
Changed:
<
<
if (event.type eq 2) then begin ; type 2 = motion events
>
>
Un autre exemple, en utilisant cette fois-ci array_walk, qui attend une fonction de callback travaillant avec un paramètre passé par référence :
 
Changed:
<
<
9. Don't repeat the code in the comments.
>
>
$data = array('iron maiden', 'judas priest', 'rammstein');
array_walk($data, function (& $item) {
        $item = ucwords($item);
    });
var_dump($data);
 
Changed:
<
<
Don't document the obvious.
>
>
Le résultat obtenu sera exactement le même que juste au-dessus, à savoir :
 
Changed:
<
<
10. Don't add extra comments for convoluted code; improve the code.
>
>
array
  0 => string 'Iron Maiden' (length=11)
  1 => string 'Judas Priest' (length=12)
  2 => string 'Rammstein' (length=9)
 
Changed:
<
<
Don't document bad code—rewrite it. (Kernighan and Plauger, The Elements of Programming Style)
>
>
Utilisé pour les fonctions anonymes, le mot-clef "use" permet d’importer (en lecture seule) des variables externes, issues de l’espace de noms « global », au sein de la fonction lambda.
 
Changed:
<
<

4. Statement formatting

>
>
$var = 'World';
$f2 = function () use ($var) {
    echo "<p>Hello, $var!</p>";
};
 
Changed:
<
<
4.1. Use lowercase for reserved words, operators, and compile_opt option names.
>
>
$f2(); // Hello, World!
 
Deleted:
<
<
For example, use:
compile_opt strictarr 
if (not done) then readf, lun, line 
 
Changed:
<
<
4.2. Use only one statement per line.
>
>
En quelque sorte, "use" fait penser à l’instruction "global", que nous rencontrions parfois auparavant… Mais global ne répond pas aux besoins des closures
 
Changed:
<
<
For example, don't write:
>
>
Import de variable par référence :
 
Changed:
<
<
a = 1 & b = 2
>
>
 
Changed:
<
<
4.3. Prefer begin/end blocks unless the entire statements fits on one line.
>
>
$var = 0;
 
Changed:
<
<
For a single, long statement, use:
for i = 0, 10 do begin 
  print, i, format='("The index is ", I0, ".")' 
end 
>
>
$func2 = function () use (& $var) { echo "

Début 2 : $var

"; $var = 2; echo "

Fin 2 : $var

"; };
 
Changed:
<
<
But never write:
for i = 0, 10 do $ 
  print, i, format='("The index is ", I0, ".")' 
>
>
et le résultat :
 
Changed:
<
<
4.5. Define structures one field per line unless the entire definition can fit on one line.
>
>
echo "

Avant 2 : $var

"; // Avant 2 : 0 $func2(); // Début 2 : 0 // Fin 2 : 2 echo "

Après 2 : $var

"; // Après 2 : 2
 
Deleted:
<
<
For example, use:
point = { x: 0.0, y:0.0 } 
state = { x: 0.0, $ 
          y: 0.0, $ 
          pdata: ptr_new(), $ ; image data 
          drawId: 0L $ ; window identifier 
        } 
 
Changed:
<
<
4.6. Add one space around most operators.
>
>
Mais, qu'est-ce qu'une fonction anonyme pour php ?
 
Changed:
<
<
ex:
>
>
$func = function ($param) {
    echo "<p>Hello, $param!</p>";
};
 
Changed:
<
<
slope = (y0 - y1) / (x0 - x1)
>
>
var_dump($func);
 
Changed:
<
<
tvscl, im, true=1
>
>
Le résultat obtenu est le suivant :
 
Changed:
<
<
bin = arr[r[r[i]:r[i + 1] - 1]]
>
>
object(Closure)[1]
 
Changed:
<
<
point = { x: 0.0, y: 0.0 }
>
>
Pour PHP, une fonction anonyme — une lambda — est un objet : une instance de classe Closure…
 
Deleted:
<
<
Also, don't add extra spaces in order to align values.
 
Changed:
<
<
4.7. Use single quotes for strings.
>
>

Closures

 
Changed:
<
<
Use double single quotes if you need a single quote. For example,
>
>
http://blog.pascal-martin.fr/post/php-5.3-2-closures-et-lambdas
 
Changed:
<
<
sign = 'Eat at Joe''s'
>
>
Une closure est une fonction qui est évaluée dans un environnement contenant une ou plusieurs variables liées, auxquelles elle peut accéder au moment de son exécution.
 
Changed:
<
<
4.9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers.
>
>
Dans certains langages — dont Javascript, et PHP >= 5.3 — une closure peut exister lorsqu’une fonction est définie au sein d’une autre, et que la fonction interne fait référence à des variables de la fonction externe. A l’exécution, une closure est formée : elle est constituée du code de la fonction interne et des références aux variables externes utilisées par celle-ci.
 
Changed:
<
<
Use 0L not 0l because "l" (lowercase letter el) looks like "1" (integer one). Use '5'o and '5'x, not '5'O and '5'X.
>
>
En PHP, une closure se construit de la manière suivante :
 
Changed:
<
<
4.10. Use square brackets for array indices.
>
>
  • Une variable locale est créée dans une première fonction "externe",
  • Une seconde fonction "interne" est définie à l’intérieur de la première fonction, sous forme d’une fonction anonyme,
  • Et cette fonction "interne" importe la variable locale de la fonction "externe", à l’aide du mot-clef use.
 
Changed:
<
<
Use
>
>
  • Closure en lecture-seule :
 
Changed:
<
<
compile_opt strictarr
>
>
Ex :
 
Changed:
<
<
in each routine to prevent issues with IDL confusing arrays and functions calls.
>
>
$func = function ($arg) {
    $compteur = $arg;  // Copie privée, en lecture seule
    return function () use ($compteur) {
        return ++$compteur;
    };
};
 
Added:
>
>
$a1 = $func(10); $a2 = $func(50);
 
Deleted:
<
<

5. Variables

 
Changed:
<
<
1. Use good variable names.
>
>
Nous venons ici de créer deux fonctions anonymes
 
Changed:
<
<
2. Variable names should be in camel case.
>
>
echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51 echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51 echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51
 
Changed:
<
<
Camel case uppercases the first letter of each word in the name except for the first letter.
>
>
 
Deleted:
<
<
Uppercase each letter in an abbreviation that appears in a variable name unless it starts the name:
 
Changed:
<
<
noaaWeatherURL.
>
>
  • Closure en lecture-écriture
 
Changed:
<
<
Prefix the name with "n" for variables that hold counts, "o" for object references, "p" for pointers, "id" for iTools identifiers.
>
>
$func = function ($arg) {
    $compteur = $arg;  // Copie privée, en lecture / écriture
    return function () use (& $compteur) {
        return ++$compteur;
    };
};
 
Changed:
<
<
Examples that follow this convention,
nFiles 
oModel 
pState 
idPlot 
>
>
echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51 echo 'a1 : ' . $a1() . "\n"; // 12 echo 'a2 : ' . $a2() . "\n"; // 52 echo 'a1 : ' . $a1() . "\n"; // 13 echo 'a2 : ' . $a2() . "\n"; // 53
 
Changed:
<
<
3. Prefer pointers, objects, and passing local variables over common blocks or system variables.
>
>
 
Changed:
<
<
Occasionally there is a reason to use common blocks or system variables, but you should have a good argument for it.
>
>
Le mécanisme de closure permet donc de créer des variables au sein de la fonction "externe", qui conserveront leur valeur aussi longtemps que l’on aura conservé un pointeur sur la fonction "interne". Ces variables seront accessibles par la fonction interne, éventuellement en écriture si nous avons utilisé & lors de leur import, tout en n’étant pas visibles du reste de notre script.
 
Deleted:
<
<
When using direct graphics, prefer using graphics keywords of the plotting routines over setting system variables directly.
 
Changed:
<
<
4. Define common blocks and named structures in only one location.
>
>
  • Appel de fonction sur un objet
 
Changed:
<
<
Define the variables in a common block only once in a batch file. Include that file where needed.
>
>
PHP 5.3 ajoute la possibilité d’utiliser la syntaxe d’un appel de fonction sur un objet, en lui appliquant l’opérateur ().
 
Changed:
<
<
map_proj_init_commonblock.pro is an example of this.
>
>
Pour cela, une nouvelle méthode magique a été ajoutée : __invoke :
 
Changed:
<
<
Define a named structure using automatic structure definition. For example, define MG_Point in a routine named MG_POINT__DEFINE in a file named mg_point__define.pro.
>
>
lors d’un appel de fonction sur une instance de classe comportant une méthode __invoke, c’est cette méthode qui sera appelée.
 
Added:
>
>
Voici une classe d’exemple :
 
Changed:
<
<

6. Routines

>
>
class MyString {
    public $str;
    public function __construct($a) {
        $this->str = $a;
    }
 
Changed:
<
<
1. For any file containing IDL code, filenames should always be in lower case and use the ".pro" extension.
>
>
// Appelée quand on appelle dynamiquement un // objet instance de cette classe public function __invoke($a) { var_dump(METHOD); $this->str = $a; } }
 
Deleted:
<
<
2. Each file should include only one routine called from outside the file.
 
Changed:
<
<
Each file should contain only one routine called from outside that file. Add the ".pro" extension to the routine name of the externally called routine to get the filename. For example, the routine MG_LINEAR_FUNCTION should be in a file named mg_linear_function.pro. If there are multiple routines in the file, make sure the externally called routine is last in the file.
>
>

Session

 
Changed:
<
<
3. Routine names should be lower case, begin with a short organization prefix, and separate words with underscores.
>
>
Endroit où sont stockés les fichiers (temporaires) de session : session.save_path (php.ini)
 
Changed:
<
<
The prefix indicates the individual or group responsible for the code. It is usually the initials of the individual or orgranization. Limit to two or three letters. Don't use the "IDL", "RSI", "ITT", "cw", "it", or empty prefixes.
>
>
Dans xampp : session.save_path = "D:\xampp\tmp"
 
Changed:
<
<
4. Routines should fit on one screen.
>
>
Sur linux : session.save_path = "/var/lib/php/session" (/etc/php.ini)
 
Changed:
<
<
5. Keywords should always be optional for the caller; positional parameters should generally be required.
>
>
La façon la plus sécurisée est d'utiliser les cookies
 
Changed:
<
<
Keywords should either be an optional input with a reasonable default value or an extra output (i.e. not the main purpose of the routine).
>
>
1) Le client (navigateur) demande un identifiant de session (jeton)
 
Changed:
<
<
6. Keyword names should be lowercase and separate words with underscores.
>
>
2) Le serveur crée l'identifiant et le retourne au client
 
Changed:
<
<
For example,
filename 
ntests 
eye_separation 
left_image 
>
>
3) Le client stocke sur son disque dur cet identifiant sous la forme d'un cookie qu'il enverra désormais à chaque requête
 
Changed:
<
<
7. Always use the full keyword name when calling the routine.
>
>
Nom du jeton par défaut = PHPSESSID (cf php.ini session.name et fonction session_name())
 
Changed:
<
<
8. If the purpose of a routine is to return a value, use a function, otherwise use a procedure.
>
>
Sur le serveur, ce jeton aura le nom "sess_" suivi de sa valeur
 
Changed:
<
<
9. Status and error codes should be returned via keyword.
>
>
Valeur du jeton = string générée aléatoirement par php (fonction session_id() retourne cette valeur et permet éventuellement de la fixer, mais déconseilllé)
 
Added:
>
>
Paramètres php.ini à positionner (on peut utiliser session_set_cookie_params() pour cela, il y a aussi ini_get() et ini_set()) :
 
Changed:
<
<

7. Object-oriented programming

>
>
session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0 (si cookies pas acceptés, ne pas pour autant transmettre l'id de session dans l'url)
session.cookie_lifetime = 0 (jusqu'au moment de quitter le navigateur)
session.auto_start = 0
session.save_handler = files
session.save_path = ...
 
Changed:
<
<
1. Class names should begin with a prefix indicating organization and a code indicating the class' area of use. Each word should be capitalized
>
>
La fonction session_start() crée ou restaure une session (à mettre en première ligne du bootstrap)
 
Changed:
<
<
Use the same prefix as given to normal routine names; avoid "IDL", "ITT", "RSI", and the empty prefix.
>
>
session_regenerate_id() regénère l'id de session afin d'éviter une fixation de la session
 
Changed:
<
<
Codes already in use by IDL: an (analysis), com (COM), db (database), ex (example), ff (file format), gr (graphics), it (iTools), sys (system), net (network), and _ (general use). Make use of the existing codes and make up new ones as necessary.
>
>
appeler session_destroy() à la déconnexion du user
 
Deleted:
<
<
Use all caps for abbreviations in class names, as in IDLnetURL.
 
Deleted:
<
<
2. Put all the methods and the routine defining the instance variables for a class into a single file.
 
Deleted:
<
<
For the definition of MGexClass, the file should be named mgexclass__define.pro. The last routine in this file should be MGEXCLASS__DEFINE and should define the instance variables for the class (i.e. create a named structure with name MGexClass).
 
Deleted:
<
<
Define only one structure/class name in the __DEFINE routine.
 
Deleted:
<
<
3. Method names should be a verb phrase in camel case.
 
Deleted:
<
<
For example, here are some method names following these conventions:
getProperty 
setProperty 
add 
findTestNames 
runTest 
reportTestResult 
 
Deleted:
<
<
Use the conventions that are used by the IDL library classes. For example, use the GETPROPERTY and SETPROPERTY scheme of procedures to handle getting and setting properties of a class.
 
Changed:
<
<
4. Begin "protected" methods' names with a underscore.
>
>

Gestion de l'authentification avec Zend_Auth

 
Changed:
<
<
For example,
>
>
http://r-benyacoub.developpez.com/tutoriels/php/zend-framework/zend-auth/
 
Changed:
<
<
MGexSomeClass::_helperMethod
>
>
http://framework.zend.com/manual/1.11/en/zend.auth.adapter.dbtable.html
 
Changed:
<
<
is a helper method called by other methods in MGexSomeClass, but should not be called from outside of MGexSomeClass.
>
>
best :
 
Deleted:
<
<
5. Beware of multiple inheritance.
 
Deleted:
<
<
Use multiple inheritance as a last resort. Prefer delegation for one of the parent classes i.e. make the new class contain the secondary parent class as an instance variable.
 
Added:
>
>

Créer un projet Zend

 
Changed:
<
<

8. Exemple de commentaires proposé par ITT dans examples/template.pro

>
>
http://framework.zend.com/manual/en/learning.quickstart.create-project.html
 
Changed:
<
<
;+
; NAME:
; ROUTINE_NAME
;
; PURPOSE:
; Tell what your routine does here.  I like to start with the words:
; "This function (or procedure) ..."
; Try to use the active, present tense.
;
; CATEGORY:
; Put a category (or categories) here.  For example:
; Widgets.
;
; CALLING SEQUENCE:
; Write the calling sequence here. Include only positional parameters
; (i.e., NO KEYWORDS). For procedures, use the form:
;
; ROUTINE_NAME, Parameter1, Parameter2, Foobar
;
; Note that the routine name is ALL CAPS and arguments have Initial
; Caps.  For functions, use the form:
; 
; Result = FUNCTION_NAME(Parameter1, Parameter2, Foobar)
;
; Always use the "Result = " part to begin. This makes it super-obvious
; to the user that this routine is a function!
;
; INPUTS:
; Parm1:  Describe the positional input parameters here. Note again
;   that positional parameters are shown with Initial Caps.
;
; OPTIONAL INPUTS:
; Parm2:  Describe optional inputs here. If you don't have any, just
;   delete this section.
; 
; KEYWORD PARAMETERS:
; KEY1: Document keyword parameters like this. Note that the keyword
;   is shown in ALL CAPS!
;
; KEY2: Yet another keyword. Try to use the active, present tense
;   when describing your keywords.  For example, if this keyword
;   is just a set or unset flag, say something like:
;   "Set this keyword to use foobar subfloatation. The default
;    is foobar superfloatation."
;
; OUTPUTS:
; Describe any outputs here.  For example, "This function returns the
; foobar superflimpt version of the input array."  This is where you
; should also document the return value for functions.
;
; OPTIONAL OUTPUTS:
; Describe optional outputs here.  If the routine doesn't have any, 
; just delete this section.
;
; COMMON BLOCKS:
; BLOCK1: Describe any common blocks here. If there are no COMMON
;   blocks, just delete this entry.
;
; SIDE EFFECTS:
; Describe "side effects" here.  There aren't any?  Well, just delete
; this entry.
;
; RESTRICTIONS:
; Describe any "restrictions" here.  Delete this section if there are
; no important restrictions.
;
; PROCEDURE:
; You can describe the foobar superfloatation method being used here.
; You might not need this section for your routine.
;
; EXAMPLE:
; Please provide a simple example here. An example from the
; DIALOG_PICKFILE documentation is shown below. Please try to
; include examples that do not rely on variables or data files
; that are not defined in the example code. Your example should
; execute properly if typed in at the IDL command line with no
; other preparation. 
;
;       Create a DIALOG_PICKFILE dialog that lets users select only
;       files with the extension `pro'. Use the `Select File to Read'
;       title and store the name of the selected file in the variable
;       file. Enter:
;
;       file = DIALOG_PICKFILE(/READ, FILTER = '*.pro') 
;
; MODIFICATION HISTORY:
;   Written by: Your name here, Date.
; July, 1994  Any additional mods get described here.  Remember to
;     change the stuff above if you add a new keyword or
;     something!
;-

>
>
Le contrôleur de Zend Framework réserve une action "index" comme action par défaut. C'est-à-dire que pour l'URI "http://localhost/tutoriel-zf/actualités/", l'action "index" est exécutée. Le framework réserve également un nom de contrôleur si aucun n'est fourni dans l'URI : aucune surprise qu'il soit également appelé "index". Ainsi, l'URI "http://localhost/tutoriel-zf/" appelle le contrôleur "index" avec l'action "index".
 
Changed:
<
<
PRO TEMPLATE
>
>
1) install
 
Changed:
<
<
PRINT, "This is an example header file for documenting IDL routines"
>
>
Download zf
 
Changed:
<
<
END
>
>
Copier dans D:\ProgFilesNoInstall\zf
 
Added:
>
>
Ajouter D:\ProgFilesNoInstall\zf\bin dans PATH windows
 
Changed:
<
<
Le même bloc de commentaires, mais vide :
>
>
2) Créer un projet
 
Changed:
<
<
;+
; NAME:
;
;
;
; PURPOSE:
;
;
;
; CATEGORY:
;
;
;
; CALLING SEQUENCE:
;
;
;
; INPUTS:
;
;
;
; OPTIONAL INPUTS:
;
;
;
; KEYWORD PARAMETERS:
;
;
;
; OUTPUTS:
;
;
;
; OPTIONAL OUTPUTS:
;
;
;
; COMMON BLOCKS:
;
;
;
; SIDE EFFECTS:
;
;
;
; RESTRICTIONS:
;
;
;
; PROCEDURE:
;
;
;
; EXAMPLE:
;
;
;
; MODIFICATION HISTORY:
;
;-
>
>
http://blog.aurevec.be/?p=71
 
Added:
>
>
Dans Eclipse, créer un projet PHP nommé "zfquickstart"
 
Added:
>
>
Ouvrir une console DOS
 
Changed:
<
<

OUTILS pour documenter le code

>
>
Aller dans xampp/htdocs
 
Changed:
<
<

doc_library

>
>
zf create project zfquickstart
 
Changed:
<
<
doc_library affiche seulement "tel quel" le bloc de commentaires complet compris entre ";+" et ";-", et affiche le chemin du fichier.
>
>
crée 3 dossiers :
 
Changed:
<
<
Pour documenter une fonction ou une procédure :
>
>
- application/ qui contient Bootstrap.php et configs/application.ini
 
Changed:
<
<
  • Fonction "dist":
>
>
- public/
 
Changed:
<
<
IDL> doc_library, 'DIST'

>
>
- library/
 
Changed:
<
<

Documentation for C:\Program Files\ITT\IDL\IDL80\lib\dist.pro
>
>
public/ contient 2 fichiers importants :
 
Changed:
<
<
NAME: DIST
>
>
.htaccess :
 
Changed:
<
<
PURPOSE: Create a rectangular array in which each element is proportional to its frequency. This array may be used for a variety of purposes, including frequency-domain filtering and making pretty pictures.
>
>
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
 
Changed:
<
<
CATEGORY: Signal Processing.
>
>
index.php : qui lance $application->bootstrap() et ->run()
 
Deleted:
<
<
CALLING SEQUENCE: Result = DIST(N [, M])
 
Deleted:
<
<
INPUTS: N = number of columns in result. M = number of rows in result. If omitted, N is used to return a square array.
 
Deleted:
<
<
OUTPUTS: Returns an (N,M) floating array in which:
 
Deleted:
<
<
R(i,j) = SQRT(F(i)^2 + G(j)^2) where: F(i) = i IF 0 <= i <= n/2 = n-i IF i > n/2 G(i) = i IF 0 <= i <= m/2 = m-i IF i > m/2
 
Changed:
<
<
SIDE EFFECTS: None.
>
>
3) The Bootstrap
 
Changed:
<
<
RESTRICTIONS: None.
>
>
Your Bootstrap class defines what resources and components to initialize. By default, Zend Framework's Front Controller is initialized, and it uses the application/controllers/ as the default directory in which to look for action controllers
 
Changed:
<
<
PROCEDURE: Straightforward. The computation is done a row at a time.
>
>
 
Changed:
<
<
MODIFICATION HISTORY: Very Old. SMR, March 27, 1991 - Added the NOZERO keyword to increase efficiency. (Recomended by Wayne Landsman) DMS, July, 1992. - Added M parameter to make non-square arrays. CT, RSI, March 2000: Changed i^2 to i^2. to avoid overflow.
>
>
// application/Bootstrap.php
 
Changed:
<
<
  • Fonction plot:
>
>
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
 
Changed:
<
<
IDL> doc_library, 'plot'

>
>
4) Configuration
 
Changed:
<
<

Documentation for C:\Program Files\ITT\IDL\IDL80\lib\graphics\plot.pro
>
>
While Zend Framework is itself configurationless, you often need to configure your application. The default configuration is placed in application/configs/application.ini, and contains some basic directives for setting your PHP environment (for instance, turning error reporting on and off), indicating the path to your bootstrap class (as well as its class name), and the path to your action controllers.
 
Changed:
<
<
:Description: Create IDL Plot graphic.
>
>
    ; application/configs/application.ini
 
Changed:
<
<
:Params: arg1 : optional generic argument arg2 : optional generic argument
>
>
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0
 
Changed:
<
<
:Keywords: _REF_EXTRA
>
>
[staging : production]
 
Changed:
<
<
Dans ce dernier exemple (plot), on se rend compte que depuis idl 8, les nouvelles fonctions/procédures (telles que la fonction plot) ne sont plus commentées au format "idl" mais "rst", qui semble donc être le nouveau format à utiliser pour commenter du code idl.
>
>
[testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
 
Changed:
<
<

mk_html_help

>
>
[development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
 
Changed:
<
<
Cet outil génère une doc html d'un fichier ou même d'un répertoire complet :
>
>
First, when using INI-style configuration, you can reference constants directly and expand them; APPLICATION_PATH is actually a constant.
 
Changed:
<
<
ex: documentation du fichier dist.pro:
>
>
Additionally note that there are several sections defined: production, staging, testing, and development. The latter three inherit settings from the "production" environment. This is a useful way to organize configuration to ensure that appropriate settings are available in each stage of application development.
 
Changed:
<
<
MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib\dist.pro', 'help_dist.html' ; La doc générée est help_dist.html
>
>
5) Action Controllers
 
Changed:
<
<
ex: documentation d'une arborescence complète:
>
>
Your application's action controllers contain your application workflow, and do the work of mapping your requests to the appropriate models and views.
 
Changed:
<
<
MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib', 'help.html' ; La doc générée est help.html
>
>
An action controller should have one or more methods ending in "Action"; these methods may then be requested via the web. By default, Zend Framework URLs follow the schema /controller/action, where "controller" maps to the action controller name (minus the "Controller" suffix) and "action" maps to an action method (minus the "Action" suffix).
 
Added:
>
>
Typically, you always need an IndexController, which is a fallback controller and which also serves the home page of the site, and an ErrorController, which is used to indicate things such as HTTP 404 errors (controller or action not found) and HTTP 500 errors (application errors).
 
Changed:
<
<

IdlDoc

>
>
    // application/controllers/IndexController.php
 
Changed:
<
<
>
>
class IndexController extends Zend_Controller_Action {
 
Changed:
<
<
>
>
public function init() { /* Initialize action controller here */ }
 
Changed:
<
<
home: http://idldoc.idldev.com/
>
>
public function indexAction() { // action body } }
 
Changed:
<
<
download: http://idldoc.idldev.com/wiki/Downloads
>
>
And the default ErrorController is as follows:
 
Changed:
<
<
tutoriel: http://idldoc.idldev.com/wiki/GettingStarted
>
>
// application/controllers/ErrorController.php
 
Changed:
<
<
idldoc est un outil qui permet de générer une doc à partir du code idl
>
>
class ErrorController extends Zend_Controller_Action {
 
Changed:
<
<
Il propose 3 formats différents :
>
>
public function errorAction() { $errors = $this->_getParam('error_handler');
 
Changed:
<
<
  • rst : le format le plus récent, qui tend à devenir le nouveau standard, il apporte beaucoup de possibilités
  • idldoc : le format historique de idldoc, qui ressemble à celui utilisé par des outils plus génériques, tels que Doxygen
  • idl : le format utilisé par ITT (et proposé dans examples/template.pro)
>
>
switch ($errors->type) { case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
 
Changed:
<
<
Ce dernier format ("idl") a juste le "mérite" d'être un standard pour les routines IDL, mais il est peu et mal exploité par IdlDoc qui ne reconnait que très peu de balises de commentaires (seulement 6) parmis celles proposées dans template.pro, et les met mal en valeur dans la doc générée.
>
>
// 404 error -- controller or action not found $this->getResponse()->setHttpResponseCode(404); $this->view->message = 'Page not found'; break; default: // application error $this->getResponse()->setHttpResponseCode(500); $this->view->message = 'Application error'; break; }
 
Changed:
<
<
Les 6 balises exploitées sont :
>
>
$this->view->exception = $errors->exception; $this->view->request = $errors->request; } }
 
Changed:
<
<
; PURPOSE:
>
>
You'll note that the IndexController contains no real code, and the ErrorController makes reference to a "view" property. That leads nicely into our next subject.
 
Deleted:
<
<
; SIDE EFFECTS:
 
Changed:
<
<
; RESTRICTIONS:
>
>
6) Views
 
Changed:
<
<
; PROCEDURE:
>
>
Views in Zend Framework are written in plain old PHP. View scripts are placed in application/views/scripts/, where they are further categorized using the controller names. In our case, we have an IndexController and an ErrorController, and thus we have corresponding index/ and error/ subdirectories within our view scripts directory. Within these subdirectories, you will then find and create view scripts that correspond to each controller action exposed; in the default case, we thus have the view scripts index/index.phtml and error/error.phtml.
 
Changed:
<
<
; EXAMPLE:
>
>
View scripts may contain any markup you want, and use the closing tag to insert PHP directives.
 
Changed:
<
<
; MODIFICATION HISTORY:
>
>
    <!-- application/views/scripts/index/index.phtml -->
    <style>
 
Changed:
<
<
Cette dernière balise est affichée en tant que "Author information" dans la doc générée
>
>
a:link, a:visited {
color
#0398CA; }
 
Changed:
<
<
Quant à la balise suivante...
>
>
span#zf-name {
color
#91BE3F; }
 
Changed:
<
<
; CALLING SEQUENCE:
>
>
div#welcome {
color
#FFFFFF;
background-image
url(bkg_header.jpg);
width
600px;
height
400px;
border
2px solid #444444;
overflow
hidden;
text-align
center; }
 
Changed:
<
<
... elle n'est pas reconnue, mais elle semble inutile puisque cette information est automatiquement générée par idldoc.
>
>
div#more-information {
background-image
url(bkg_body-bottom.gif);
height
100%; }
 
Added:
>
>

Welcome to the Zend Framework!

This is your project's main page

 
Changed:
<
<
Voir mes commentaires à l'auteur du logiciel et ses réponses:
>
>

Helpful Links:
Zend Framework Website | Zend Framework Manual

<="" span="">
 
Changed:
<
<
http://michaelgalloy.com/2010/10/20/idldoc-3-3-released.html
>
>
The error/error.phtml view script is slightly more interesting as it uses some PHP conditionals:
 
Added:
>
>
<-- application/views/scripts/error/error.phtml -->
Zend Framework Default Application

An error occurred

message ?>

 
Changed:
<
<
Installation
>
>
env): ?>

Exception information:

Message: exception->getMessage() ?>

Stack trace:

exception->getTraceAsString() ?>
      

Request Parameters:

request->getParams(), 1) ?>
      

 
Deleted:
<
<
(NB: sur hyperion, c'est déjà installé sous /usr/local/itt/idldoc/idldoc)
 
Changed:
<
<
1) Download
>
>
7) Create a virtual host
 
Changed:
<
<
2) Copier et dézipper dans un dossier de mon choix (ex : D:/idldoc/idldoc-3.3)
>
>
Dans "D:\xampp\apache\conf\extra\myvhosts", créer un fichier "zfquickstart.conf"
 
Changed:
<
<
3) Ajouter le chemin vers idldoc dans le IDL_PATH (Fenêtre/Preferences/IDL/Chemins/Insérer (puis Appliquer)
>
>
Listen 8087
<VirtualHost *:8087>
 
Added:
>
>
ServerName zfquickstart.local ServerAlias zfquickstart.local zfquickstart #ServerName .local DocumentRoot "D:/xampp/htdocs/zfquickstart/public"
 
Changed:
<
<
Utilisation
>
>
# This should be omitted in the production environment SetEnv APPLICATION_ENV "development"
 
Changed:
<
<
Pour générer la doc avec idldoc :
>
>
DirectoryIndex index.php #Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all
 
Changed:
<
<
IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc'
>
>
 
Changed:
<
<
Puis, 2clic sur index.html
>
>
There are several things to note. First, note that the DocumentRoot setting specifies the public subdirectory of our project; this means that only files under that directory can ever be served directly by the server. Second, note the AllowOverride, Order, and Allow directives; these are to allow us to use htacess files within our project. During development, this is a good practice, as it prevents the need to constantly restart the web server as you make changes to your site directives; however, in production, you should likely push the content of your htaccess file into your server configuration and disable this. Third, note the SetEnv directive. What we are doing here is setting an environment variable for your virtual host; this variable will be picked up in the index.php and used to set the APPLICATION_ENV constant for our Zend Framework application. In production, you can omit this directive (in which case it will default to the value "production") or set it explicitly to "production".
 
Changed:
<
<
Exemple plus complet:
>
>
Avec un , il faudrait aussi faire ceci :
 
Changed:
<
<
IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc', title='DOC pour mon projet', subtitle='generated with idldoc 3.3', format_style='rst', overview='path_vers_mon_fichier_overview'
>
>
Finally, you will need to add an entry in your hosts file corresponding to the value you place in your ServerName directive. On *nix-like systems, this is usually /etc/hosts; on Windows, you'll typically find it in C:\WINDOWS\system32\drivers\etc. Regardless of the system, the entry will look like the following:
 
Changed:
<
<
Remarque: format_style peut prendre les 3 valeurs "rst", "idl" ou "idldoc"
>
>
127.0.0.1 zfquickstart.local
 
Added:
>
>
Start your webserver (or restart it), and you should be ready to go.
 
Added:
>
>
http://localhost:8087
 
Changed:
<
<

Enregistrer une image dans un fichier

>
>
NB: il faut ajouter le chemin vers ZF ("D:\ProgFilesNoInstall\zf\library") :
 
Changed:
<
<
; envoi vers fichier postscript
set_plot, 'ps'

>
>
  • soit dans php.ini,
  • soit, mieux, dans le fichier index.php du dossier "public/" du projet : chercher la ligne "set_include_path" et insérer en tête de liste, ce qui donne :
 
Changed:
<
<
; éventuellement donner un nom device, filename='toto.ps'
>
>
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
 
Changed:
<
<
plot, findgen(2)
>
>
//EP added : "D:\ProgFilesNoInstall\zf\library",
 
Changed:
<
<
; retour à l'affichage sur écran device, /close set_plot, 'x'
>
>
realpath(APPLICATION_PATH . '/../library'), get_include_path(), )));
 
Changed:
<
<

PHP

>
>
8) Create A Layout
 
Added:
>
>
http://framework.zend.com/manual/en/learning.quickstart.create-layout.html
 
Changed:
<
<

Fonctions anonymes (lambda) et closures (php 5.3)

>
>
To get started using Zend_Layout, first we need to inform our bootstrap to use the Layout resource. This can be done using the zf enable layout command:
 
Changed:
<
<

Fonctions anonymes (lambda)

>
>
    % zf enable layout
    Layouts have been enabled, and a default layout created at
    application/layouts/scripts/layout.phtml
    A layout entry has been added to the application config file.
 
Changed:
<
<
http://blog.pascal-martin.fr/post/php-5.3-1-closures-et-lambdas
>
>
As noted by the command, application/configs/application.ini is updated, and now contains the following within the production section:
 
Changed:
<
<
$f1= function () { echo "

Hello, World!

"; };
>
>
; application/configs/application.ini
 
Changed:
<
<
$f2= function ($param) { echo "

Hello, $param!

"; };
>
>
; Add to [production] section: resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
 
Changed:
<
<
call :

$f1();

>
>
We also want to ensure we have an XHTML DocType declaration for our application. To enable this, we need to add a resource to our bootstrap.
 
Changed:
<
<
$f2('there');
>
>
The simplest way to add a bootstrap resource is to simply create a protected method beginning with the phrase _init. In this case, we want to initialize the doctype, so we'll create an _initDoctype() method within our bootstrap class.
 
Changed:
<
<
call_user_func($f1);
>
>
Within that method, we need to hint to the view to use the appropriate doctype. But where will the view object come from? The easy solution is to initialize the View resource; once we have, we can pull the view object from the bootstrap and use it.
 
Changed:
<
<
call_user_func($f2, 'You');
>
>
To initialize the view resource, add the following line to your application/configs/application.ini file, in the section marked production:
 
Changed:
<
<
call_user_func_array($f1, array());
>
>
resources.view[] =
 
Changed:
<
<
call_user_func_array($f2, array('You'));
>
>
This tells us to initialize the view with no options (the '[]' indicates that the "view" key is an array, and we pass nothing to it).
 
Changed:
<
<
Exemple d'utilisation avec array_map :
>
>
Now that we have a view, let's flesh out our _initDoctype() method. In it, we will first ensure the View resource has run, fetch the view object, and then configure it:
 
Changed:
<
<
$data = array('iron maiden', 'judas priest', 'rammstein'); $output = array_map(function ($item) { return ucwords($item); }, $data); var_dump($output);
>
>
// application/Bootstrap.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initDoctype() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->doctype('XHTML1_STRICT'); } }

 
Changed:
<
<
Résultat :
>
>
Now that we've initialized Zend_Layout and set the Doctype, let's create our site-wide layout:
 
Changed:
<
<
array 0 => string 'Iron Maiden' (length=11) 1 => string 'Judas Priest' (length=12) 2 => string 'Rammstein' (length=9)
>
>
<-- application/layouts/scripts/layout.phtml -->
doctype() ?> Zend Framework Quickstart Application headLink()->appendStylesheet('/css/global.css') ?>
 
Changed:
<
<
Un autre exemple, en utilisant cette fois-ci array_walk, qui attend une fonction de callback travaillant avec un paramètre passé par référence :
>
>
layout()->content ?>
 
Changed:
<
<
$data = array('iron maiden', 'judas priest', 'rammstein');
array_walk($data, function (& $item) {
        $item = ucwords($item);
    });
var_dump($data);
>
>
 
Changed:
<
<
Le résultat obtenu sera exactement le même que juste au-dessus, à savoir :
>
>
We grab our application content using the layout() view helper, and accessing the "content" key. You may render to other response segments if you wish to, but in most cases, this is all that's necessary.
 
Changed:
<
<
array
  0 => string 'Iron Maiden' (length=11)
  1 => string 'Judas Priest' (length=12)
  2 => string 'Rammstein' (length=9)
>
>
Note also the use of the headLink() placeholder. This is an easy way to generate the HTML for elements, as well as to keep track of them throughout your application. If you need to add additional CSS sheets to support a single action, you can do so, and be assured it will be present in the final rendered page.
 
Deleted:
<
<
Utilisé pour les fonctions anonymes, le mot-clef "use" permet d’importer (en lecture seule) des variables externes, issues de l’espace de noms « global », au sein de la fonction lambda.
 
Changed:
<
<
$var = 'World';
$f2 = function () use ($var) {
    echo "<p>Hello, $var!</p>";
};
>
>
9) Create a Model and Database Table
 
Changed:
<
<
$f2(); // Hello, World!
>
>
http://framework.zend.com/manual/en/learning.quickstart.create-model.html
 
Added:
>
>
Your application bootstrap will by default use the module prefix "Application". As such, our models, forms, and table classes will all begin with the class prefix "Application_".
 
Changed:
<
<
En quelque sorte, "use" fait penser à l’instruction "global", que nous rencontrions parfois auparavant… Mais global ne répond pas aux besoins des closures
>
>
zf configure db-adapter 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook.db"' production
 
Changed:
<
<
Import de variable par référence :
>
>
php scripts/load.sqlite.php --withdata
 
Changed:
<
<
>
>
zf create db-table Guestbook guestbook
 
Changed:
<
<
$var = 0;
>
>
zf create model GuestbookMapper
 
Changed:
<
<
$func2 = function () use (& $var) { echo "

Début 2 : $var

"; $var = 2; echo "

Fin 2 : $var

"; };
>
>
zf create model Guestbook
 
Changed:
<
<
et le résultat :
>
>
zf create controller Guestbook
 
Changed:
<
<
echo "

Avant 2 : $var

"; // Avant 2 : 0 $func2(); // Début 2 : 0 // Fin 2 : 2 echo "

Après 2 : $var

"; // Après 2 : 2
>
>
This will create a new controller, GuestbookController, in application/controllers/GuestbookController.php, with a single action method, indexAction(). It will also create a view script directory for the controller, application/views/scripts/guestbook/, with a view script for the index action.
 
Changed:
<
<
>
>
We'll use the "index" action as a landing page to view all guestbook entries.
 
Changed:
<
<
Mais, qu'est-ce qu'une fonction anonyme pour php ?
>
>
Now, let's flesh out the basic application logic. On a hit to indexAction(), we'll display all guestbook entries. This would look like the following:
 
Changed:
<
<
$func = function ($param) { echo "

Hello, $param!

"; };
>
>
// application/controllers/GuestbookController.php
 
Changed:
<
<
var_dump($func);
>
>
class GuestbookController extends Zend_Controller_Action { public function indexAction() { $guestbook = new Application_Model_GuestbookMapper(); $this->view->entries = $guestbook->fetchAll(); } }
 
Deleted:
<
<
Le résultat obtenu est le suivant :
 
Changed:
<
<
object(Closure)[1]
>
>
And, of course, we need a view script to go along with that. Edit application/views/scripts/guestbook/index.phtml to read as follows:

<-- application/views/scripts/guestbook/index.phtml -->

Sign Our Guestbook

Guestbook Entries:

entries as $entry): ?>
escape($entry->email) ?>
escape($entry->comment) ?>
 
Changed:
<
<
Pour PHP, une fonction anonyme — une lambda — est un objet : une instance de classe Closure…
>
>
Now browse to "http://localhost/guestbook"
 
Changed:
<
<

Closures

>
>
10) Create A Form
 
Changed:
<
<
http://blog.pascal-martin.fr/post/php-5.3-2-closures-et-lambdas
>
>
http://framework.zend.com/manual/en/learning.quickstart.create-form.html
 
Changed:
<
<
Une closure est une fonction qui est évaluée dans un environnement contenant une ou plusieurs variables liées, auxquelles elle peut accéder au moment de son exécution.
>
>
% zf create form Guestbook
 
Changed:
<
<
Dans certains langages — dont Javascript, et PHP >= 5.3 — une closure peut exister lorsqu’une fonction est définie au sein d’une autre, et que la fonction interne fait référence à des variables de la fonction externe. A l’exécution, une closure est formée : elle est constituée du code de la fonction interne et des références aux variables externes utilisées par celle-ci.
>
>
Next, we will add a signAction() to our GuestbookController which will process the form upon submission. To create the action and related view script, execute the following:
 
Changed:
<
<
En PHP, une closure se construit de la manière suivante :
>
>
% zf create action sign Guestbook
 
Changed:
<
<
  • Une variable locale est créée dans une première fonction "externe",
  • Une seconde fonction "interne" est définie à l’intérieur de la première fonction, sous forme d’une fonction anonyme,
  • Et cette fonction "interne" importe la variable locale de la fonction "externe", à l’aide du mot-clef use.
>
>
Now browse to "http://localhost/guestbook/sign".

php.ini

 
Changed:
<
<
  • Closure en lecture-seule :
>
>
Depuis v5.3 : http://fr.php.net/manual/fr/migration53.ini.php
 
Changed:
<
<
Ex :
>
>
Le fichier standard php.ini a été réorganisé, et renommé :
 
Changed:
<
<
$func = function ($arg) {
    $compteur = $arg;  // Copie privée, en lecture seule
    return function () use ($compteur) {
        return ++$compteur;
    };
};
>
>
  • php.ini-development contient les options qui sont recommandées pour un environnement de développement.
  • php.ini-production contient les configurations recommandées pour la production.
 
Changed:
<
<
$a1 = $func(10); $a2 = $func(50);
>
>
On les trouve dans /usr/share/doc/php-common-5.3.3
 
Added:
>
>
Voici la différence entre les 2 :
 
Changed:
<
<
Nous venons ici de créer deux fonctions anonymes
>
>
[root@planetoweb etc]# diff /usr/share/doc/php-common-5.3.3/php.ini-development /usr/share/doc/php-common-5.3.3/php.ini-production
514c514
< error_reporting = E_ALL | E_STRICT
---
> error_reporting = E_ALL & ~E_DEPRECATED
531c531
< display_errors = On
---
> display_errors = Off
542c542
< display_startup_errors = On
---
> display_startup_errors = Off
586c586
< track_errors = On
---
> track_errors = Off
604c604
< html_errors = On
---
> html_errors = Off
1248a1249,1256
> ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
> ; http://php.net/mysqli.allow_local_infile
> ;mysqli.allow_local_infile = On
>
> ; Allow or prevent persistent links.
> ; http://php.net/mysqli.allow-persistent
> mysqli.allow_persistent = On
>
1297c1305
< mysqlnd.collect_memory_statistics = On
---
> mysqlnd.collect_memory_statistics = Off
1566c1574
< session.bug_compat_42 = On
---
> session.bug_compat_42 = Off
1575c1583
< session.bug_compat_warn = On
---
> session.bug_compat_warn = Off
1593d1600
< session.entropy_file =

 
Changed:
<
<
echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51 echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51 echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51
>
>
 
Changed:
<
<
>
>

HereDoc

 
Changed:
<
<
  • Closure en lecture-écriture
>
>
La syntaxe Heredoc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela signifie que vous n'avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont remplacées par leur valeur et le même soin doit leur être apporté que dans les chaînes à guillemets doubles. Exemple de chaîne HereDoc
 
Deleted:
<
<
$func = function ($arg) { $compteur = $arg; // Copie privée, en lecture / écriture return function () use (& $compteur) { return ++$compteur; }; };

echo 'a1 : ' . $a1() . "\n"; // 11 echo 'a2 : ' . $a2() . "\n"; // 51 echo 'a1 : ' . $a1() . "\n"; // 12 echo 'a2 : ' . $a2() . "\n"; // 52 echo 'a1 : ' . $a1() . "\n"; // 13 echo 'a2 : ' . $a2() . "\n"; // 53

 
Changed:
<
<
>
>
<?php $str = <<<EOD Exemple de chaîne s'étalant sur plusieurs lignes avec la syntaxe heredoc EOD;
 
Changed:
<
<
Le mécanisme de closure permet donc de créer des variables au sein de la fonction "externe", qui conserveront leur valeur aussi longtemps que l’on aura conservé un pointeur sur la fonction "interne". Ces variables seront accessibles par la fonction interne, éventuellement en écriture si nous avons utilisé & lors de leur import, tout en n’étant pas visibles du reste de notre script.
>
>
/* Exemple plus complexe, avec des variables. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } }
 
Added:
>
>
$foo = new foo(); $name = 'MonNom';
 
Changed:
<
<
  • Appel de fonction sur un objet
>
>
echo <<foo. Maintenant, j'affiche un {$foo->bar[1]}. Ceci se traduit par un 'A' majuscule : \x41 EOT; ?>
 
Deleted:
<
<
PHP 5.3 ajoute la possibilité d’utiliser la syntaxe d’un appel de fonction sur un objet, en lui appliquant l’opérateur ().
 
Changed:
<
<
Pour cela, une nouvelle méthode magique a été ajoutée : __invoke :
>
>
 
Changed:
<
<
lors d’un appel de fonction sur une instance de classe comportant une méthode __invoke, c’est cette méthode qui sera appelée.
>
>
 
Changed:
<
<
Voici une classe d’exemple :
>
>

Fonctions anonymes (exemples d'algo de tri et de somme)

 
Changed:
<
<
class MyString { public $str; public function __construct($a) { $this->str = $a; }
>
>
<?php
 
Changed:
<
<
// Appelée quand on appelle dynamiquement un // objet instance de cette classe public function __invoke($a) { var_dump(METHOD); $this->str = $a; } }
>
>
$t = array (2,3,6,7,9,2,43,5,2,54,65,34,23,54,23,654,43);
 
Added:
>
>
print_r ($t);
 
Changed:
<
<

Session

>
>
uasort ($t, function ($x,$y) { return $x > $y;});
 
Changed:
<
<
Endroit où sont stockés les fichiers (temporaires) de session : session.save_path (php.ini)
>
>
print_r ($t);
 
Changed:
<
<
Dans xampp : session.save_path = "D:\xampp\tmp"
>
>
printf ("somme = %d\n", array_reduce ($t, function ($x,$y) { return $x+$y;})); ?>
 
Deleted:
<
<
Sur linux : session.save_path = "/var/lib/php/session" (/etc/php.ini)
 
Changed:
<
<
La façon la plus sécurisée est d'utiliser les cookies
>
>

Travail sur les chaînes

 
Changed:
<
<
1) Le client (navigateur) demande un identifiant de session (jeton)
>
>
- Supprimer une partie de la chaîne : str_replace()
 
Changed:
<
<
2) Le serveur crée l'identifiant et le retourne au client
>
>
- sous-chaîne : substr()
 
Changed:
<
<
3) Le client stocke sur son disque dur cet identifiant sous la forme d'un cookie qu'il enverra désormais à chaque requête
>
>
- tester la présence d'une sous-chaine dans la chaine (et récupérer sa position) : strpos()
 
Changed:
<
<
Nom du jeton par défaut = PHPSESSID (cf php.ini session.name et fonction session_name())
>
>
- parser une chaine de paramètres html, et les placer dans un tableau : parse_str($chaine, $args)
 
Changed:
<
<
Sur le serveur, ce jeton aura le nom "sess_" suivi de sa valeur
>
>
- remplacer une partie de la chaine : $bodytag = str_replace("%body%", "black", "");
 
Deleted:
<
<
Valeur du jeton = string générée aléatoirement par php (fonction session_id() retourne cette valeur et permet éventuellement de la fixer, mais déconseilllé)
 
Changed:
<
<
Paramètres php.ini à positionner (on peut utiliser session_set_cookie_params() pour cela, il y a aussi ini_get() et ini_set()) :
>
>

Travail sur les arrays

 
Changed:
<
<
session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0 (si cookies pas acceptés, ne pas pour autant transmettre l'id de session dans l'url)
session.cookie_lifetime = 0 (jusqu'au moment de quitter le navigateur)
session.auto_start = 0
session.save_handler = files
session.save_path = ...
>
>
- merge : $GET = array_merge($GET,$args)
 
Changed:
<
<
La fonction session_start() crée ou restaure une session (à mettre en première ligne du bootstrap)
>
>
- dispatcher contenu array dans n strings (explode) : $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);

- regrouper contenu array dans 1 string (implode) : $array = array('lastname', 'email', 'phone'); $comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone

 
Deleted:
<
<
session_regenerate_id() regénère l'id de session afin d'éviter une fixation de la session
 
Deleted:
<
<
appeler session_destroy() à la déconnexion du user
 
Added:
>
>

Reflection

 
Added:
>
>
print FUNCTION." in ".__FILE__." at ".__LINE__."\n";
 
Added:
>
>
Ou bien (php5) :
 
Added:
>
>
$modelReflector = new ReflectionClass(CLASS);
 
Added:
>
>
$method = $modelReflector->getMethod(METHOD);
 
Added:
>
>

ATTENTION

 
Changed:
<
<

Gestion de l'authentification avec Zend_Auth

>
>
- echo "cette variable n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $nimportekoi;
 
Changed:
<
<
http://r-benyacoub.developpez.com/tutoriels/php/zend-framework/zend-auth/
>
>
- echo "cette propriété (attribut, variable) n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $this->nimportekoi;
 
Deleted:
<
<
http://framework.zend.com/manual/1.11/en/zend.auth.adapter.dbtable.html
 
Changed:
<
<
best :
>
>

Afficher un bloc de code html dans php (ou tout autre texte long) :

 
Added:
>
>
http://forum.webrankinfo.com/petite-astuce-pour-afficher-simplement-code-html-t32812.html
 
Added:
>
>
La commande top classe tous les processus par leur consommation de la CPU et de la mémoire
 
Changed:
<
<

Créer un projet Zend

>
>
Elle affiche le "top 20" sous forme d'une table
 
Changed:
<
<
http://framework.zend.com/manual/en/learning.quickstart.create-project.html
>
>
top -n 1 -b > top.txt affiche tous les processus
 
Changed:
<
<
Le contrôleur de Zend Framework réserve une action "index" comme action par défaut. C'est-à-dire que pour l'URI "http://localhost/tutoriel-zf/actualités/", l'action "index" est exécutée. Le framework réserve également un nom de contrôleur si aucun n'est fourni dans l'URI : aucune surprise qu'il soit également appelé "index". Ainsi, l'URI "http://localhost/tutoriel-zf/" appelle le contrôleur "index" avec l'action "index".
>
>
top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.
 
Deleted:
<
<
1) install
 
Changed:
<
<
Download zf
>
>

LINUX

 
Deleted:
<
<
Copier dans D:\ProgFilesNoInstall\zf
 
Changed:
<
<
Ajouter D:\ProgFilesNoInstall\zf\bin dans PATH windows
>
>

Utilisation

 
Deleted:
<
<
2) Créer un projet
 
Deleted:
<
<
http://blog.aurevec.be/?p=71
 
Deleted:
<
<
Dans Eclipse, créer un projet PHP nommé "zfquickstart"
 
Changed:
<
<
Ouvrir une console DOS
>
>

netstat

 
Changed:
<
<
Aller dans xampp/htdocs
>
>
http://www.simplehelp.net/2009/01/19/monitor-your-linux-machine-with-netstat/
 
Changed:
<
<
zf create project zfquickstart
>
>
Voir les connexions au port 8080 sur mon pc :
 
Changed:
<
<
crée 3 dossiers :
>
>
$> netstat -ant|grep 8080

 
Changed:
<
<
- application/ qui contient Bootstrap.php et configs/application.ini
>
>
tcp4 0 0 195.83.102.52.54533 195.83.102.176.8080 ESTABLISHED tcp6 0 0 ::1.8080 ::1.53481 ESTABLISHED tcp6 0 0 ::1.53481 ::1.8080 ESTABLISHED tcp6 0 0 ::1.8080 ::1.50287 ESTABLISHED tcp6 0 0 ::1.50287 ::1.8080 ESTABLISHED tcp46 0 0 .8080 *. LISTEN
 
Changed:
<
<
- public/
>
>
Je vois ainsi que ma machine est connectée à 195.83.102.176 via le port 8080 en TCP
 
Changed:
<
<
- library/
>
>
Pour savoir qui c'est, j'utilise la commande "host" ou "nslookup" :
 
Changed:
<
<
public/ contient 2 fichiers importants :
>
>
$> host 195.83.102.176
 
Changed:
<
<
.htaccess :
>
>
Idem pour mysql :
 
Changed:
<
<
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
>
>
$> netstat -ant | grep 3306
 
Changed:
<
<
index.php : qui lance $application->bootstrap() et ->run()
>
>
This tells me how many connections of different types of state I have on my machine. I can run a similar command to see a complete picture of the state of all the connections made to my web server:
 
Added:
>
>
$> netstat -ant | grep 80 | awk ‘{print $6}’ | sort | uniq -c | sort -n

 
Added:
>
>
1 FIN_WAIT1 4 LISTEN 6 FIN_WAIT2 17 CLOSE_WAIT 94 ESTABLISHED 534 TIME_WAIT
 
Added:
>
>

Informations sur le hardware

 
Added:
>
>
  • RAM
 
Changed:
<
<
3) The Bootstrap
>
>
cat /proc/meminfo
 
Changed:
<
<
Your Bootstrap class defines what resources and components to initialize. By default, Zend Framework's Front Controller is initialized, and it uses the application/controllers/ as the default directory in which to look for action controllers
>
>
  • CPU(s)
 
Changed:
<
<
>
>
http://www.cyberciti.biz/faq/linux-display-cpu-information-number-of-cpus-and-their-speed/
 
Changed:
<
<
// application/Bootstrap.php
>
>
cat /proc/cpuinfo
 
Changed:
<
<
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { }
>
>
Plus précisément :
 
Changed:
<
<
4) Configuration
>
>
Exact number of available cores, virtual or not (8 pour hyperion, soit 2 proc x 4 cores) : grep -c processor /proc/cpuinfo
 
Changed:
<
<
While Zend Framework is itself configurationless, you often need to configure your application. The default configuration is placed in application/configs/application.ini, and contains some basic directives for setting your PHP environment (for instance, turning error reporting on and off), indicating the path to your bootstrap class (as well as its class name), and the path to your action controllers.
>
>
Nb de processeurs "physiques" (2 pour hyperion) : grep core\ id /proc/cpuinfo | grep -c \ 0$
 
Changed:
<
<
    ; application/configs/application.ini
>
>
The following (clumsy) group of commands will return the number of physical CPUs regardless of if there is only a single core per CPU (2 pour planetoweb et surfasafe) :
 
Changed:
<
<
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0
>
>
grep core\ id /proc/cpuinfo | grep -c \ 0$ | grep ^0$ >> /dev/null && grep -c processor /proc/cpuinfo || grep core\ id /proc/cpuinfo | grep -c \ 0$
 
Changed:
<
<
[staging : production]
>
>
Processeur(s) virtualisable(s) ? (cpuinfo doit contenir le flag vmx pour un processeur intel, et svm pour AMD) : egrep '(vmx|svm)' /proc/cpuinfo
 
Changed:
<
<
[testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
>
>
Information détaillée : dmidecode
 
Changed:
<
<
[development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
>
>
dmidecode --type 4 | grep -c Socket
 
Deleted:
<
<
First, when using INI-style configuration, you can reference constants directly and expand them; APPLICATION_PATH is actually a constant.
 
Changed:
<
<
Additionally note that there are several sections defined: production, staging, testing, and development. The latter three inherit settings from the "production" environment. This is a useful way to organize configuration to ensure that appropriate settings are available in each stage of application development.
>
>
CPU utilization
 
Changed:
<
<
5) Action Controllers
>
>
TOP : Informations sur la charge CPU et la consommation mémoire provoquée par les processus
 
Changed:
<
<
Your application's action controllers contain your application workflow, and do the work of mapping your requests to the appropriate models and views.
>
>
http://www.loligrub.be/contrib/tlepoint/BASE/node104.html
 
Changed:
<
<
An action controller should have one or more methods ending in "Action"; these methods may then be requested via the web. By default, Zend Framework URLs follow the schema /controller/action, where "controller" maps to the action controller name (minus the "Controller" suffix) and "action" maps to an action method (minus the "Action" suffix).
>
>
http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html
 
Changed:
<
<
Typically, you always need an IndexController, which is a fallback controller and which also serves the home page of the site, and an ErrorController, which is used to indicate things such as HTTP 404 errors (controller or action not found) and HTTP 500 errors (application errors).
>
>
La commande top classe tous les processus par leur consommation de la CPU et de la mémoire.
 
Changed:
<
<
    // application/controllers/IndexController.php
>
>
Elle affiche le "top 20" sous forme d'une table
 
Changed:
<
<
class IndexController extends Zend_Controller_Action {
>
>
top -n 1 -b > top.txt affiche tous les processus
 
Changed:
<
<
public function init() { /* Initialize action controller here */ }
>
>
top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.
 
Changed:
<
<
public function indexAction() { // action body } }
>
>
O N pour trier par occupation mémoire
 
Changed:
<
<
And the default ErrorController is as follows:
>
>
O K pour trier par charge CPU (par défaut)
 
Changed:
<
<
// application/controllers/ErrorController.php
>
>
1 pour montrer/cacher chaque processeur séparément
 
Changed:
<
<
class ErrorController extends Zend_Controller_Action {
>
>
mpstat (fait partie du package sysstat)
 
Changed:
<
<
public function errorAction() { $errors = $this->_getParam('error_handler');
>
>
mpstat -P ALL
 
Changed:
<
<
switch ($errors->type) { case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
>
>
You can display today’s CPU activity, with sar
 
Changed:
<
<
// 404 error -- controller or action not found $this->getResponse()->setHttpResponseCode(404); $this->view->message = 'Page not found'; break; default: // application error $this->getResponse()->setHttpResponseCode(500); $this->view->message = 'Application error'; break; }
>
>
sar
 
Changed:
<
<
$this->view->exception = $errors->exception; $this->view->request = $errors->request; } }
>
>
For example display comparison of CPU utilization; 2 seconds apart; 5 times, use:
 
Changed:
<
<
You'll note that the IndexController contains no real code, and the ErrorController makes reference to a "view" property. That leads nicely into our next subject.
>
>
# sar -u 2 5
 
Added:
>
>
(for each 2 seconds. 5 lines are displayed)
 
Changed:
<
<
6) Views
>
>
To get multiple samples and multiple reports, set an output file for the sar command. Run the sar command as a background process using.
 
Changed:
<
<
Views in Zend Framework are written in plain old PHP. View scripts are placed in application/views/scripts/, where they are further categorized using the controller names. In our case, we have an IndexController and an ErrorController, and thus we have corresponding index/ and error/ subdirectories within our view scripts directory. Within these subdirectories, you will then find and create view scripts that correspond to each controller action exposed; in the default case, we thus have the view scripts index/index.phtml and error/error.phtml.
>
>
# sar -o output.file 12 8 >/dev/null 2>&1 &
 
Changed:
<
<
View scripts may contain any markup you want, and use the closing tag to insert PHP directives.
>
>
Better use nohup command so that you can logout and check back report later on:
 
Changed:
<
<
    <!-- application/views/scripts/index/index.phtml -->
    <style>
>
>
# nohup sar -o output.file 12 8 >/dev/null 2>&1 &
 
Changed:
<
<
a:link, a:visited {
color
#0398CA; }
>
>
puis pour lire : sar -f output.file
 
Changed:
<
<
span#zf-name {
color
#91BE3F; }
>
>
%user = % temps cpu utilisé par les applications
 
Changed:
<
<
div#welcome {
color
#FFFFFF;
background-image
url(bkg_header.jpg);
width
600px;
height
400px;
border
2px solid #444444;
overflow
hidden;
text-align
center; }
>
>
%system = % temps cpu utilisé par le kernel
 
Changed:
<
<
div#more-information {
background-image
url(bkg_body-bottom.gif);
height
100%; }
>
>
%iowait = % temps cpu utilisé à attendre une requête I/O
 
Deleted:
<
<

Welcome to the Zend Framework!

This is your project's main page

 
Changed:
<
<

Helpful Links:
Zend Framework Website | Zend Framework Manual

<="" span="">
>
>
displays the top 10 CPU users :
 
Changed:
<
<
The error/error.phtml view script is slightly more interesting as it uses some PHP conditionals:
>
>
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10
 
Changed:
<
<
<-- application/views/scripts/error/error.phtml -->
Zend Framework Default Application

An error occurred

message ?>

>
>
ps command displays every process (-e) with a user-defined format (-o pcpu). First field is pcpu (cpu utilization). It is sorted in reverse order to display top 10 CPU eating process.
 
Changed:
<
<
env): ?>
>
>
iostat :
 
Changed:
<
<

Exception information:

Message: exception->getMessage() ?>

>
>
It can be use to find out your system's average CPU utilization since the last reboot.
 
Changed:
<
<

Stack trace:

exception->getTraceAsString() ?>
      
>
>
$ iostat
 
Changed:
<
<

Request Parameters:

request->getParams(), 1) ?>
      
>
>
This gives you three outputs every 5 seconds (as previous command gives information since the last reboot):
 
Changed:
<
<
>
>
$ iostat -xtc 5 3
 
Added:
>
>
gnome-system-monitor : allows you to view and control the processes
 
Changed:
<
<
7) Create a virtual host
>
>
Voir aussi http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
 
Deleted:
<
<
Dans "D:\xampp\apache\conf\extra\myvhosts", créer un fichier "zfquickstart.conf"
 
Changed:
<
<
Listen 8087
<VirtualHost *:8087>
>
>

SSH

 
Changed:
<
<
ServerName zfquickstart.local ServerAlias zfquickstart.local zfquickstart #ServerName .local DocumentRoot "D:/xampp/htdocs/zfquickstart/public"
>
>
Exécuter une commande sur un serveur distant
 
Changed:
<
<
# This should be omitted in the production environment SetEnv APPLICATION_ENV "development"
>
>
  • De manière générale:
 
Changed:
<
<
DirectoryIndex index.php #Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all
>
>
# ssh user@server bash -c "ls -l"
 
Changed:
<
<
>
>
Mode raccourci:
 
Changed:
<
<
There are several things to note. First, note that the DocumentRoot setting specifies the public subdirectory of our project; this means that only files under that directory can ever be served directly by the server. Second, note the AllowOverride, Order, and Allow directives; these are to allow us to use htacess files within our project. During development, this is a good practice, as it prevents the need to constantly restart the web server as you make changes to your site directives; however, in production, you should likely push the content of your htaccess file into your server configuration and disable this. Third, note the SetEnv directive. What we are doing here is setting an environment variable for your virtual host; this variable will be picked up in the index.php and used to set the APPLICATION_ENV constant for our Zend Framework application. In production, you can omit this directive (in which case it will default to the value "production") or set it explicitly to "production".
>
>
# ssh user@server "ls -l"
 
Changed:
<
<
Avec un , il faudrait aussi faire ceci :
>
>
  • depuis planetoweb:
 
Changed:
<
<
Finally, you will need to add an entry in your hosts file corresponding to the value you place in your ServerName directive. On *nix-like systems, this is usually /etc/hosts; on Windows, you'll typically find it in C:\WINDOWS\system32\drivers\etc. Regardless of the system, the entry will look like the following:
>
>
# ssh surfasafe "ls -l"
 
Changed:
<
<
127.0.0.1 zfquickstart.local
>
>
# ssh root@surfasafe "ls -l"
 
Changed:
<
<
Start your webserver (or restart it), and you should be ready to go.
>
>
# ssh root@surfasafe bash -c "ls -l"
 
Changed:
<
<
http://localhost:8087
>
>
  • Non autorisé vers sauvcesr2:
 
Changed:
<
<
NB: il faut ajouter le chemin vers ZF ("D:\ProgFilesNoInstall\zf\library") :
>
>
# ssh pallier@sauvcesr2 bash -c "ls -l"
 
Changed:
<
<
  • soit dans php.ini,
  • soit, mieux, dans le fichier index.php du dossier "public/" du projet : chercher la ligne "set_include_path" et insérer en tête de liste, ce qui donne :
>
>
This account is restricted by rssh.

Allowed commands: scp sftp rsync

 
Changed:
<
<
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
>
>
If you believe this is in error, please contact your system administrator.
 
Deleted:
<
<
//EP added : "D:\ProgFilesNoInstall\zf\library",
 
Changed:
<
<
realpath(APPLICATION_PATH . '/../library'), get_include_path(), )));
>
>
Simplifier une connexion ssh avec rebond
 
Added:
>
>
Par exemple, depuis chez moi, je veux me connecter à hyperion
 
Changed:
<
<
8) Create A Layout
>
>
Il me faut donc passer par GATEWAY (la passerelle du labo)
 
Changed:
<
<
http://framework.zend.com/manual/en/learning.quickstart.create-layout.html
>
>
1) le plus simple, méthode manuelle (depuis mon pc)
 
Changed:
<
<
To get started using Zend_Layout, first we need to inform our bootstrap to use the Layout resource. This can be done using the zf enable layout command:
>
>
ssh GATEWAY (entrer le mot de passe utilisé pour le mail)
 
Changed:
<
<
    % zf enable layout
    Layouts have been enabled, and a default layout created at
    application/layouts/scripts/layout.phtml
    A layout entry has been added to the application config file.
>
>
puis
 
Changed:
<
<
As noted by the command, application/configs/application.ini is updated, and now contains the following within the production section:
>
>
ssh hyperion.cesr.fr (entrer votre mot de passe hyperion)
 
Changed:
<
<
    ; application/configs/application.ini
>
>
(NB : "ssh -X GATEWAY", puis "ssh -X hyperion" si on veut l'affichage graphique)
 
Changed:
<
<
; Add to [production] section: resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
>
>
Il faut taper 2 fois "exit" pour revenir à mon pc.
 
Deleted:
<
<
We also want to ensure we have an XHTML DocType declaration for our application. To enable this, we need to add a resource to our bootstrap.
 
Changed:
<
<
The simplest way to add a bootstrap resource is to simply create a protected method beginning with the phrase _init. In this case, we want to initialize the doctype, so we'll create an _initDoctype() method within our bootstrap class.
>
>
2) Pour accélérer la connexion : ETAPE 1, générer des clés ssh
 
Changed:
<
<
Within that method, we need to hint to the view to use the appropriate doctype. But where will the view object come from? The easy solution is to initialize the View resource; once we have, we can pull the view object from the bootstrap and use it.
>
>
DEPUIS MON PC, je génère une paire de clés privée et publique :
 
Changed:
<
<
To initialize the view resource, add the following line to your application/configs/application.ini file, in the section marked production:
>
>
ssh-keygen -t dsa
 
Changed:
<
<
resources.view[] =
>
>
Puis, je distribue ensuite la clé publique à la fois sur GATEWAY ET sur hyperion :
 
Changed:
<
<
This tells us to initialize the view with no options (the '[]' indicates that the "view" key is an array, and we pass nothing to it).
>
>
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub GATEWAY
 
Changed:
<
<
Now that we have a view, let's flesh out our _initDoctype() method. In it, we will first ensure the View resource has run, fetch the view object, and then configure it:
>
>
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub hyperion.cesr.fr
 
Changed:
<
<
    // application/Bootstrap.php
>
>
Tester maintenant à nouveau la double connexion (GATEWAY, puis hyperion) :
 
Changed:
<
<
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initDoctype() { $this->bootstrap('view'); $view = $this->getResource('view'); $view->doctype('XHTML1_STRICT'); } }
>
>
ssh GATEWAY (sans mot de passe)
 
Changed:
<
<
Now that we've initialized Zend_Layout and set the Doctype, let's create our site-wide layout:
>
>
puis
 
Changed:
<
<
    <!-- application/layouts/scripts/layout.phtml -->
    <?php echo $this->doctype() ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Zend Framework Quickstart Application</title>
      <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
    </head>
    <body>
    <div id="header" style="background-color: #EEEEEE; height: 30px;">
        <div id="header-logo" style="float: left">
            <b>ZF Quickstart Application</b>
        </div>
        <div id="header-navigation" style="float: right">
            <a href="<?php echo $this->url(
                array('controller'=>'guestbook'),
                'default',
                true) ?>">Guestbook</a>
        </div>
    </div>
>
>
ssh hyperion.cesr.fr (avec mot de passe)
 
Changed:
<
<
layout()->content ?>
>
>
Malheureusement, il faut encore entrer un mot de passe pour se connecter à hyperion, bouh...
 
Changed:
<
<
>
>
(je tape 2 fois "exit" pour revenir à mon pc)
 
Deleted:
<
<
We grab our application content using the layout() view helper, and accessing the "content" key. You may render to other response segments if you wish to, but in most cases, this is all that's necessary.
 
Changed:
<
<
Note also the use of the headLink() placeholder. This is an easy way to generate the HTML for elements, as well as to keep track of them throughout your application. If you need to add additional CSS sheets to support a single action, you can do so, and be assured it will be present in the final rendered page.
>
>
3) Pour accélérer la connexion : ETAPE 2, automatiser le "rebond" par GATEWAY
 
Added:
>
>
On va maintenant rendre transparent le passage via GATEWAY. Il suffit pour cela de créer un fichier de config :
 
Changed:
<
<
9) Create a Model and Database Table
>
>
DEPUIS MON PC, j'édite le fichier /home/USERNAME/.ssh/config, et j'y mets le contenu suivant :
 
Changed:
<
<
http://framework.zend.com/manual/en/learning.quickstart.create-model.html
>
>
Host hyp hyperion hyperion.cesr.fr
        Hostname hyperion.cesr.fr
        ProxyCommand ssh GATEWAY nc %h %p 2> /dev/null
 
Changed:
<
<
Your application bootstrap will by default use the module prefix "Application". As such, our models, forms, and table classes will all begin with the class prefix "Application_".
>
>
(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)
 
Changed:
<
<
zf configure db-adapter 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook.db"' production
>
>
VOILA C FINI, OUF !
 
Changed:
<
<
php scripts/load.sqlite.php --withdata
>
>
Désormais, depuis votre pc, il suffit de faire un bête ssh :
 
Changed:
<
<
zf create db-table Guestbook guestbook
>
>
ssh hyp (avec l'option -X pour l'affichage graphique)
 
Changed:
<
<
zf create model GuestbookMapper
>
>
(ou "ssh hyperion" ou "ssh hyperion.cesr.fr")
 
Changed:
<
<
zf create model Guestbook
>
>
On n'a plus besoin de rentrer aucun mot de passe (ni de GATEWAY, ni de hyperion), c'est direct !
 
Changed:
<
<
zf create controller Guestbook
>
>
(il suffit de taper une seule fois "exit" pour revenir à mon pc)
 
Deleted:
<
<
This will create a new controller, GuestbookController, in application/controllers/GuestbookController.php, with a single action method, indexAction(). It will also create a view script directory for the controller, application/views/scripts/guestbook/, with a view script for the index action.
 
Changed:
<
<
We'll use the "index" action as a landing page to view all guestbook entries.
>
>

SED (substitution de texte)

 
Changed:
<
<
Now, let's flesh out the basic application logic. On a hit to indexAction(), we'll display all guestbook entries. This would look like the following:
>
>
Pleins d'exemples ici : http://sed.sourceforge.net/sed1line_fr.html
 
Changed:
<
<
    // application/controllers/GuestbookController.php
>
>
  • remplacer tutu par toto, mais seulement des lignes 3 à 6 :
 
Changed:
<
<
class GuestbookController extends Zend_Controller_Action { public function indexAction() { $guestbook = new Application_Model_GuestbookMapper(); $this->view->entries = $guestbook->fetchAll(); } }
>
>
cat monfichier.txt | sed -e 3,6"s/tutu/toto/" >| monfichiertemp.txt
 
Added:
>
>
  • remplacer tutu par toto, mais seulement entre les lignes "titi" et "toto" :
 
Changed:
<
<
And, of course, we need a view script to go along with that. Edit application/views/scripts/guestbook/index.phtml to read as follows:
>
>
/titi/,/toto/s/tutu/toto/
 
Changed:
<
<
<-- application/views/scripts/guestbook/index.phtml -->
>
>
ou encore :
 
Changed:
<
<

Sign Our Guestbook

>
>
sed -e "/$debut/,/$fin/"'s#HostId="t3://.*\n#HostId="t3://'"$WLS_ADM_HOST:$PORT\"/" < "$file1" > "$file2"
 
Deleted:
<
<
Guestbook Entries:
entries as $entry): ?>
escape($entry->email) ?>
escape($entry->comment) ?>
 
Changed:
<
<
>
>

GREP (recherche textuelle)

 
Changed:
<
<
Now browse to "http://localhost/guestbook"
>
>
Afficher uniquement les lignes de commentaire:
 
Added:
>
>
egrep '^#' fichier
 
Changed:
<
<
10) Create A Form
>
>
Ne pas afficher les lignes de commentaire:
 
Changed:
<
<
http://framework.zend.com/manual/en/learning.quickstart.create-form.html
>
>
egrep -v '^#' fichier
 
Changed:
<
<
% zf create form Guestbook
>
>
N'afficher que les lignes utiles (tout sauf commentaires et lignes vides) :
 
Changed:
<
<
Next, we will add a signAction() to our GuestbookController which will process the form upon submission. To create the action and related view script, execute the following:
>
>
egrep -v '^(#|$)' fichier
 
Deleted:
<
<
% zf create action sign Guestbook
 
Changed:
<
<
Now browse to "http://localhost/guestbook/sign".
>
>

RSYNC

 
Added:
>
>
Sauvegarder (de façon incrémentielle) des répertoires du poste A vers le poste B :
 
Changed:
<
<

php.ini

>
>
1) Depuis A...
 
Changed:
<
<
Depuis v5.3 : http://fr.php.net/manual/fr/migration53.ini.php
>
>
A#> rsync -avz /rep/rep1 /rep/rep2 B:/rep/
 
Changed:
<
<
Le fichier standard php.ini a été réorganisé, et renommé :
>
>
option -v = verbose
 
Changed:
<
<
  • php.ini-development contient les options qui sont recommandées pour un environnement de développement.
  • php.ini-production contient les configurations recommandées pour la production.
>
>
attention aux slashes '/' :
 
Changed:
<
<
On les trouve dans /usr/share/doc/php-common-5.3.3
>
>
/rep/rep1 écrit un répertoire rep1 sur B
 
Changed:
<
<
Voici la différence entre les 2 :
>
>
/rep/rep1/ écrit directement le contenu du répertoire rep1 sur B
 
Changed:
<
<
[root@planetoweb etc]# diff /usr/share/doc/php-common-5.3.3/php.ini-development /usr/share/doc/php-common-5.3.3/php.ini-production
514c514
< error_reporting = E_ALL | E_STRICT
---
> error_reporting = E_ALL & ~E_DEPRECATED
531c531
< display_errors = On
---
> display_errors = Off
542c542
< display_startup_errors = On
---
> display_startup_errors = Off
586c586
< track_errors = On
---
> track_errors = Off
604c604
< html_errors = On
---
> html_errors = Off
1248a1249,1256
> ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
> ; http://php.net/mysqli.allow_local_infile
> ;mysqli.allow_local_infile = On
>
> ; Allow or prevent persistent links.
> ; http://php.net/mysqli.allow-persistent
> mysqli.allow_persistent = On
>
1297c1305
< mysqlnd.collect_memory_statistics = On
---
> mysqlnd.collect_memory_statistics = Off
1566c1574
< session.bug_compat_42 = On
---
> session.bug_compat_42 = Off
1575c1583
< session.bug_compat_warn = On
---
> session.bug_compat_warn = Off
1593d1600
< session.entropy_file =

>
>
2) ... ou Depuis B
 
Changed:
<
<
>
>
rsync -avz A:/rep/rep1 A:/rep/rep2 ./rep
 
Deleted:
<
<

HereDoc

 
Added:
>
>

FIND

 
Changed:
<
<
La syntaxe Heredoc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela signifie que vous n'avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont remplacées par leur valeur et le même soin doit leur être apporté que dans les chaînes à guillemets doubles. Exemple de chaîne HereDoc
>
>
Chercher le fichier "foo" sur tout le disque :
 
Changed:
<
<
>
>
find / -name foo
 
Changed:
<
<
<?php $str = <<<EOD Exemple de chaîne s'étalant sur plusieurs lignes avec la syntaxe heredoc EOD;
>
>
(si on n'est pas root, on voit plein de messages d'erreur, donc pour éviter ça :
 
Changed:
<
<
/* Exemple plus complexe, avec des variables. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } }
>
>
find / -name foo 2>/dev/null
 
Deleted:
<
<
$foo = new foo(); $name = 'MonNom';
 
Changed:
<
<
echo <<foo. Maintenant, j'affiche un {$foo->bar[1]}. Ceci se traduit par un 'A' majuscule : \x41 EOT; ?>
>
>
Supprimer tous les répertoires CVS/ dans toute une arborescence (à partir du répertoire courant) :
 
Added:
>
>
find . -name "CVS" -exec \rm -r {} \; > /dev/null 2>&1
 
Changed:
<
<
>
>
Combien de fichiers dans un répertoire (y-compris les sous-rep) :
 
Changed:
<
<
>
>
find rep | wc -l
 
Changed:
<
<

Fonctions anonymes (exemples d'algo de tri et de somme)

>
>
Affecter des droits spécifiques à certains éléments d'un répertoire (tout le contenu, y-compris sous-dossiers) :
 
Changed:
<
<
<?php
>
>
dossiers:
 
Changed:
<
<
$t = array (2,3,6,7,9,2,43,5,2,54,65,34,23,54,23,654,43);
>
>
find /home/jsmith/awstats/ -type d | xargs chmod 0755
 
Changed:
<
<
print_r ($t);
>
>
fichiers:
 
Changed:
<
<
uasort ($t, function ($x,$y) { return $x > $y;});
>
>
find /home/jsmith/awstats/ -type f | xargs chmod 0644
 
Changed:
<
<
print_r ($t);
>
>
fichiers perl:
 
Changed:
<
<
printf ("somme = %d\n", array_reduce ($t, function ($x,$y) { return $x+$y;})); ?>
>
>
find /home/jsmith/awstats/ -type f -name *.pl | xargs chmod 0755
 
Deleted:
<
<

Travail sur les chaînes

 
Deleted:
<
<
- Supprimer une partie de la chaîne : str_replace()
 
Changed:
<
<
- sous-chaîne : substr()
>
>

Forwarder les mails du serveur

 
Changed:
<
<
- tester la présence d'une sous-chaine dans la chaine (et récupérer sa position) : strpos()
>
>
http://www.feep.net/sendmail/tutorial/intro/forward.html
 
Changed:
<
<
- parser une chaine de paramètres html, et les placer dans un tableau : parse_str($chaine, $args)
>
>
Par exemple, je veux forwarder mes mails de pallier@planetoweb.cesr.fr vers ma boite LABO ou encore ma boite perso :
 
Changed:
<
<
- remplacer une partie de la chaine : $bodytag = str_replace("%body%", "black", "");
>
>
cd ~
 
Added:
>
>
créer un fichier ".forward" contenant mon adresse LABO ou perso
 
Changed:
<
<

Travail sur les arrays

>
>
S'il s'agit de forwarder les mails adressés à root@planetoweb.cesr.fr, on peut utiliser la même solution, mais on peut aussi ajouter cette ligne tout à la fin du fichier /etc/aliases
 
Changed:
<
<
- merge : $GET = array_merge($GET,$args)
>
>
root: etienne.pallier@cesr.fr
 
Deleted:
<
<
- dispatcher contenu array dans n strings (explode) : $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
 
Changed:
<
<
- regrouper contenu array dans 1 string (implode) : $array = array('lastname', 'email', 'phone'); $comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone
>
>

Rechercher un fichier (dans une hiérarchie de répertoires)

 
Added:
>
>
find . -name filename_searched
 
Added:
>
>

Rechercher un mot dans un ou plusieurs fichiers

 
Changed:
<
<

Reflection

>
>
  • rechercher "mot" dans les fichiers idl du répertoire courant
 
Changed:
<
<
print FUNCTION." in ".__FILE__." at ".__LINE__."\n";
>
>
grep "mot" *.pro
 
Changed:
<
<
Ou bien (php5) :
>
>
  • rechercher "mot" dans tous les fichiers du répertoire courant
 
Changed:
<
<
$modelReflector = new ReflectionClass(CLASS);
>
>
grep -i "mot" .
 
Changed:
<
<
$method = $modelReflector->getMethod(METHOD);
>
>
L'option "-i" permet de ne pas tenir compte de la casse
 
Added:
>
>
  • rechercher "mot" dans tous les fichiers du répertoire courant ainsi que dans tous les sous-rep (récursif) :
 
Changed:
<
<

ATTENTION

>
>
grep -r -i "mot" .
 
Deleted:
<
<
- echo "cette variable n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $nimportekoi;
 
Changed:
<
<
- echo "cette propriété (attribut, variable) n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $this->nimportekoi;
>
>

Faire une action sur un ensemble de dossiers et fichiers

 
Added:
>
>
Depuis répertoire courant, supprimer tous les dossiers "CVS" (récursivement) :
 
Changed:
<
<

Afficher un bloc de code html dans php (ou tout autre texte long) :

>
>
find . -name CVS -exec rm -rf {} \;
 
Deleted:
<
<
http://forum.webrankinfo.com/petite-astuce-pour-afficher-simplement-code-html-t32812.html
 
Changed:
<
<
La commande top classe tous les processus par leur consommation de la CPU et de la mémoire
>
>

Créer un alias

 
Changed:
<
<
Elle affiche le "top 20" sous forme d'une table
>
>
Exemple : quand on tape "l" ça fera "ls -l"
 
Changed:
<
<
top -n 1 -b > top.txt affiche tous les processus
>
>
alias l="ls -l"
 
Changed:
<
<
top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.
>
>
Cette ligne doit être placée dans votre ~/.bashrc
 
Added:
>
>

Configurer mon environnement

 
Changed:
<
<

LINUX

>
>
Pour les configurations perso, les placer dans son ~/.bash_profile (ce script appelle ~/.bashrc qui doit contenir les alias et fonctions)
 
Added:
>
>
Mettre les configurations générales dans /etc/profile.d/profile_etienne.sh (elles seront ainsi valables pour TOUS les users du serveur)
 
Changed:
<
<

Utilisation

>
>
Ce fichier est automatiquement lu par /etc/profile au démarrage d'une session
 
Added:
>
>

Imprimer sur linux

 
Added:
>
>
Pour installer l'imprimante "sprinter", voir SprinterPrinter
 
Changed:
<
<

netstat

>
>
Pour faire de cette imprimante l'imprimante par défaut, ajouter cette ligne dans votre ~/.bash_profile :
 
Changed:
<
<
http://www.simplehelp.net/2009/01/19/monitor-your-linux-machine-with-netstat/
>
>
export PRINTER=sprinter (mettre le nom de votre imprimante à la place de "sprinter")
 
Changed:
<
<
Voir les connexions au port 8080 sur mon pc :
>
>
Pour imprimer du texte, on peut utiliser les utilitaires "a2ps" ou "enscript"
 
Deleted:
<
<
$> netstat -ant|grep 8080

 
Changed:
<
<
tcp4 0 0 195.83.102.52.54533 195.83.102.176.8080 ESTABLISHED tcp6 0 0 ::1.8080 ::1.53481 ESTABLISHED tcp6 0 0 ::1.53481 ::1.8080 ESTABLISHED tcp6 0 0 ::1.8080 ::1.50287 ESTABLISHED tcp6 0 0 ::1.50287 ::1.8080 ESTABLISHED tcp46 0 0 .8080 *. LISTEN
>
>

Visualiser des images (jpeg, ps, ...) en mode console

display
 
Changed:
<
<
Je vois ainsi que ma machine est connectée à 195.83.102.176 via le port 8080 en TCP
>
>
Note : display permet aussi de convertir une image d'un format vers un autre (enregistrer sous...)
 
Changed:
<
<
Pour savoir qui c'est, j'utilise la commande "host" ou "nslookup" :
>
>
Voir aussi "xv" et "gthumb"
 
Deleted:
<
<
$> host 195.83.102.176
 
Changed:
<
<
Idem pour mysql :
>
>

Convertir une image d'un format vers un autre

 
Changed:
<
<
$> netstat -ant | grep 3306
>
>
PS to PDF : ps2pdf
 
Changed:
<
<
This tells me how many connections of different types of state I have on my machine. I can run a similar command to see a complete picture of the state of all the connections made to my web server:
>
>
Voir aussi l'utilitaire convert
 
Changed:
<
<
$> netstat -ant | grep 80 | awk ‘{print $6}’ | sort | uniq -c | sort -n

>
>
En mode interactif, On peut aussi utiliser display (voir ci-dessus)
 
Changed:
<
<
1 FIN_WAIT1 4 LISTEN 6 FIN_WAIT2 17 CLOSE_WAIT 94 ESTABLISHED 534 TIME_WAIT
>
>

Réduire la taille d'un fichier PDF

 
Deleted:
<
<

Informations sur le hardware

 
Changed:
<
<
  • RAM
>
>
Taper dans un terminal la commande suivante
 
Changed:
<
<
cat /proc/meminfo
>
>
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=fichier_reduit.pdf fichier_a_reduire.pdf
 
Changed:
<
<
  • CPU(s)
>
>
La commande peut se faire avec l'option suivante (non obligatoire):
 
Changed:
<
<
http://www.cyberciti.biz/faq/linux-display-cpu-information-number-of-cpus-and-their-speed/
>
>
-dPDFSETTINGS=/screen (qualité faible - compression forte) -dPDFSETTINGS=/ebook (qualité moyenne - compression moyenne) -dPDFSETTINGS=/printer (qualité élevée - compression faible)
 
Deleted:
<
<
cat /proc/cpuinfo
 
Changed:
<
<
Plus précisément :
>
>

Administration

 
Deleted:
<
<
Exact number of available cores, virtual or not (8 pour hyperion, soit 2 proc x 4 cores) : grep -c processor /proc/cpuinfo
 
Changed:
<
<
Nb de processeurs "physiques" (2 pour hyperion) : grep core\ id /proc/cpuinfo | grep -c \ 0$
>
>

IPTABLES (FIREWALL)

 
Changed:
<
<
The following (clumsy) group of commands will return the number of physical CPUs regardless of if there is only a single core per CPU (2 pour planetoweb et surfasafe) :
>
>
  • Quelles sont lès règles actuelles ?
 
Changed:
<
<
grep core\ id /proc/cpuinfo | grep -c \ 0$ | grep ^0$ >> /dev/null && grep -c processor /proc/cpuinfo || grep core\ id /proc/cpuinfo | grep -c \ 0$
>
>
/etc/init.d/iptables status
 
Changed:
<
<
Processeur(s) virtualisable(s) ? (cpuinfo doit contenir le flag vmx pour un processeur intel, et svm pour AMD) : egrep '(vmx|svm)' /proc/cpuinfo
>
>
  • Fichiers :
 
Changed:
<
<
Information détaillée : dmidecode
>
>
ls /etc/sysconfig/iptables*
 
Changed:
<
<
dmidecode --type 4 | grep -c Socket
>
>
  • Modifs :
 
Added:
>
>
cd /etc/sysconfig/
 
Changed:
<
<
CPU utilization
>
>
1) modifs à faire sur iptables.clean
 
Changed:
<
<
TOP : Informations sur la charge CPU et la consommation mémoire provoquée par les processus
>
>
2) cp iptables.clean iptables
 
Changed:
<
<
http://www.loligrub.be/contrib/tlepoint/BASE/node104.html
>
>
3) /etc/init.d/iptables restart
 
Changed:
<
<
http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html
>
>
4) /etc/init.d/iptables save
 
Changed:
<
<
La commande top classe tous les processus par leur consommation de la CPU et de la mémoire.
>
>
5) /etc/init.d/iptables status (vérifier que les nouvelles règles apparaissent bien)
 
Deleted:
<
<
Elle affiche le "top 20" sous forme d'une table
 
Deleted:
<
<
top -n 1 -b > top.txt affiche tous les processus
 
Deleted:
<
<
top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.
 
Deleted:
<
<
O N pour trier par occupation mémoire
 
Deleted:
<
<
O K pour trier par charge CPU (par défaut)
 
Deleted:
<
<
1 pour montrer/cacher chaque processeur séparément
 
Deleted:
<
<
mpstat (fait partie du package sysstat)
 
Deleted:
<
<
mpstat -P ALL
 
Changed:
<
<
You can display today’s CPU activity, with sar
>
>

SVN (SUBVERSION)

 
Changed:
<
<
sar
>
>
Voir l'exemple du projet Europlanet : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN
 
Changed:
<
<
For example display comparison of CPU utilization; 2 seconds apart; 5 times, use:
>
>
Voir l'exemple de la configuration pour chemcam : /etc/httpd/conf.d/vhosts/chemcam.conf (planetoweb)
 
Changed:
<
<
# sar -u 2 5
>
>
Besoins à considérer avant de mettre en place une solution svn :
 
Changed:
<
<
(for each 2 seconds. 5 lines are displayed)
>
>
- accès via apache (et non pas seulement en svnserve) pour assurer un accès depuis l'extérieur et qui passe les firewall
 
Changed:
<
<
To get multiple samples and multiple reports, set an output file for the sar command. Run the sar command as a background process using.
>
>
- AUTH : accès authentifié (AuthType, AuthUserFile et Require valid-user)
 
Changed:
<
<
# sar -o output.file 12 8 >/dev/null 2>&1 &
>
>
Exceptionnellement, sur un projet avec différents groupes (mais uniquement si nécessaire car ralentit les accès svn et alourdit la gestion) :
 
Changed:
<
<
Better use nohup command so that you can logout and check back report later on:
>
>
- ACL : contrôle d'accès basé sur les chemins : (grâce au module authz_svn_module et à la directive AuthzSVNAccessFile), pour pouvoir réserver certains répertoires à certains groupes...
 
Deleted:
<
<
# nohup sar -o output.file 12 8 >/dev/null 2>&1 &
 
Changed:
<
<
puis pour lire : sar -f output.file
>
>
Exemple de config (chemcam) authentifiée mais SANS ACL :
 
Changed:
<
<
%user = % temps cpu utilisé par les applications
>
>

 
Changed:
<
<
%system = % temps cpu utilisé par le kernel
>
>
DAV svn
 
Changed:
<
<
%iowait = % temps cpu utilisé à attendre une requête I/O
>
>
ErrorDocument 404 default # Only 1 repository : SVNPath /home/projects/chemcam/svn # Many repositories : # any "/svn/foo" URL will map to a repository /home/svn/foo #SVNParentPath /home/svn #SVNListParentPath on
 
Added:
>
>
# Desactiver completement les controles sur les chemins (par defaut = on) SVNPathAuthz off
 
Changed:
<
<
displays the top 10 CPU users :
>
>
# For any operations other than these (GET, PROFIND...), require an authenticated user # Require valid-user #
 
Changed:
<
<
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10
>
>
# AUTH AuthType Basic AuthName "CHEMCAM Subversion repository" # password file : AuthUserFile /chemin/vers/fichier/des/mots/de/passe
 
Changed:
<
<
ps command displays every process (-e) with a user-defined format (-o pcpu). First field is pcpu (cpu utilization). It is sorted in reverse order to display top 10 CPU eating process.
>
>
# For any operations other than these, require an authenticated user (this would allow anybody to READ without authentication)
 
Changed:
<
<
iostat :
>
>
# Custom log file and format : LogFormat "%t %u %h %{SVN-ACTION}e" svn CustomLog logs/journal-svn.log svn env=SVN-ACTION
 
Changed:
<
<
It can be use to find out your system's average CPU utilization since the last reboot.
>
>
 
Deleted:
<
<
$ iostat
 
Changed:
<
<
This gives you three outputs every 5 seconds (as previous command gives information since the last reboot):
>
>
Exemple de config (chemcam) authentifiée et AVEC ACL :


        DAV svn

        ErrorDocument 404 default
        # Only 1 repository :
        SVNPath /home/projects/chemcam/svn
        # Many repositories :
        # any "/svn/foo" URL will map to a repository /home/svn/foo
        #SVNParentPath /home/svn 
        #SVNListParentPath on

 
Changed:
<
<
$ iostat -xtc 5 3
>
>
# Desactiver completement les controles sur les chemins (par defaut = on) SVNPathAuthz on
 
Changed:
<
<
gnome-system-monitor : allows you to view and control the processes
>
>
# ACL # politique de controle d'acces (uses apache module mod_authz_svn) AuthzSVNAccessFile /chemin/vers/fichier/police_acces_svn
 
Changed:
<
<
Voir aussi http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html
>
>
# For any operations other than these (GET, PROFIND...), require an authenticated user # Require valid-user #
 
Added:
>
>
# AUTH AuthType Basic AuthName "CHEMCAM Subversion repository" # password file : AuthUserFile /chemin/vers/fichier/des/mots/de/passe
 
Changed:
<
<

SSH

>
>
# For any operations other than these, require an authenticated user (this would allow anybody to READ without authentication)
 
Changed:
<
<
Exécuter une commande sur un serveur distant
>
>
# Custom log file and format : LogFormat "%t %u %h %{SVN-ACTION}e" svn CustomLog logs/journal-svn.log svn env=SVN-ACTION
 
Changed:
<
<
  • De manière générale:
>
>
 
Changed:
<
<
# ssh user@server bash -c "ls -l"
>
>
Format du fichier de police d'accès aux répertoires du projet svn (nommé police_acces_svn ci-dessus) :
 
Changed:
<
<
Mode raccourci:
>
>

 
Changed:
<
<
# ssh user@server "ls -l"
>
>
[groups] # Virtual Machine only group : cc-vm = user1, user20, user7 # Privileged access group : cc-privileged = user3, user2, user6, user8, user30
 
Changed:
<
<
  • depuis planetoweb:
>
>
[/] # cc-privileged group has total access to the project (and no one else) @cc-privileged = rw # access given to ALL users !!! #* = rw
 
Changed:
<
<
# ssh surfasafe "ls -l"
>
>
[/trunk/vm] # cc-vm group has read only access to the /vm dir (and no other dir) @cc-vm = r # cc-vm group has no access at all to the /vm dir #@cc-vm =
 
Changed:
<
<
# ssh root@surfasafe "ls -l"
>
>
 
Changed:
<
<
# ssh root@surfasafe bash -c "ls -l"
>
>

LVM (Logical Volume Management)

 
Changed:
<
<
  • Non autorisé vers sauvcesr2:
>
>
http://www.linux-mag.com/id/7454
 
Changed:
<
<
# ssh pallier@sauvcesr2 bash -c "ls -l"
>
>
LVM can be used to effectively manage storage to make expansion, snapshots, and other aspects of storage fairly easy.
 
Changed:
<
<
This account is restricted by rssh.
>
>
LVM allows you to abstract various pieces of physical storage into groups that can be carved into chunks that form the basis of file systems (virtual partitions if you like). It also allows you to combine physical partitions into groups, resize these groups (grow or shrink), and effectively manage these groups.
 
Changed:
<
<
Allowed commands: scp sftp rsync
>
>
1) h physical hd découpés chacun en p physical partitions (PP) (pas forcément le même nb de partitions pour chaque hd)
 
Changed:
<
<
If you believe this is in error, please contact your system administrator.
>
>
ex : sda découpé en /dev/sda1, /dev/sda2 et sdb découpé en /dev/sdb1, /dev/sdb2, /dev/sdb3
 
Added:
>
>
2) mapping identité entre les partitions physiques (PP) et virtuelles (PV) : 1 PV = 1 PP
 
Changed:
<
<
Simplifier une connexion ssh avec rebond
>
>
Make sure the partition type for the physical volumes is correct. The partition type should be “8e”.
 
Changed:
<
<
Par exemple, depuis chez moi, je veux me connecter à hyperion
>
>
# fdisk -l /dev/sdb

 
Changed:
<
<
Il me faut donc passer par GATEWAY (la passerelle du labo)
>
>
Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
 
Changed:
<
<
1) le plus simple, méthode manuelle (depuis mon pc)
>
>
Device Boot Start End Blocks Id System /dev/sdb1 1 30400 244187968+ 8e Linux LVM /dev/sdb2 30401 60801 244196032+ 8e Linux LVM
 
Changed:
<
<
ssh GATEWAY (entrer le mot de passe utilisé pour le mail)
>
>
# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
 
Changed:
<
<
puis
>
>
# pvdisplay
  "/dev/sdb1" is a new physical volume of "232.88 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               232.88 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               j4XKT6-OI2y-cPMK-YpNR-gmgc-es67-ey4CV2

 
Changed:
<
<
ssh hyperion.cesr.fr (entrer votre mot de passe hyperion)
>
>
"/dev/sdb2" is a new physical volume of "232.88 GB" --- NEW Physical volume --- ...
 
Changed:
<
<
(NB : "ssh -X GATEWAY", puis "ssh -X hyperion" si on veut l'affichage graphique)
>
>
Notice that each PV is given a PV UUID
 
Changed:
<
<
Il faut taper 2 fois "exit" pour revenir à mon pc.
>
>
3) Les PV sont regroupés en 1 à n volume group (VG) (a VG can be seen as a "virtual hd")
 
Added:
>
>
ex : le VG primary_vg regroupera /dev/sda1, /dev/sda2 , /dev/sdb1, et /dev/sdb3
 
Changed:
<
<
2) Pour accélérer la connexion : ETAPE 1, générer des clés ssh
>
>
# vgcreate primary_vg /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
  Volume group "primary_vg" successfully created
 
Changed:
<
<
DEPUIS MON PC, je génère une paire de clés privée et publique :
>
>
# vgdisplay
  --- Volume group ---
  VG Name               primary_vg
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               931.52 GB
  PE Size               4.00 MB
  Total PE              238468
  Alloc PE / Size       0 / 0
  Free  PE / Size       238468 / 931.52 GB
  VG UUID               oNH6jk-PBE0-mR0c-aaDi-3Fys-y5SQ-0tVaxX
 
Changed:
<
<
ssh-keygen -t dsa
>
>
If you don't happen to remember the name of a VG or you happen upon a new system to administer, then you can use a command called "vgscan" that will tell what VG's are on the system.
 
Changed:
<
<
Puis, je distribue ensuite la clé publique à la fois sur GATEWAY ET sur hyperion :
>
>
# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "primary_vg" using metadata type lvm2
 
Changed:
<
<
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub GATEWAY
>
>
4) Chaque VG est redécoupé en m logical volume (LV) : 1 VG = m LV (a LV can be seen as a "virtual partition")
 
Changed:
<
<
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub hyperion.cesr.fr
>
>
ex : le VG primary_vg est redécoupé en 2 LV : /dev/primary_vg/home_lv et /dev/primary_vg/data_lv
 
Changed:
<
<
Tester maintenant à nouveau la double connexion (GATEWAY, puis hyperion) :
>
>
# lvcreate --name /dev/primary_vg/home_lv --size 450G
  Logical volume "home_lv" created

 
Changed:
<
<
ssh GATEWAY (sans mot de passe)
>
>
lvdisplay...
 
Changed:
<
<
puis
>
>
lvscan...
 
Changed:
<
<
ssh hyperion.cesr.fr (avec mot de passe)
>
>
 
Changed:
<
<
Malheureusement, il faut encore entrer un mot de passe pour se connecter à hyperion, bouh...
>
>
5) Sur chaque LG, on monte un système de fichier (FS) :
 
Changed:
<
<
(je tape 2 fois "exit" pour revenir à mon pc)
>
>
ex : /home monté en ext3 sur le LV home_lv et /data monté en xfs sur le LV data_lv Comment
# mkfs.ext3 /dev/primary_vg/home_lv
...
 
Changed:
<
<
3) Pour accélérer la connexion : ETAPE 2, automatiser le "rebond" par GATEWAY
>
>
Comment faire un snaphot ?
 
Changed:
<
<
On va maintenant rendre transparent le passage via GATEWAY. Il suffit pour cela de créer un fichier de config :
>
>
http://www.linux-mag.com/id/7454/2/
 
Changed:
<
<
DEPUIS MON PC, j'édite le fichier /home/USERNAME/.ssh/config, et j'y mets le contenu suivant :
>
>
For example, if the file system says it has 29G used (29 GB), then you should snapshot a little larger – perhaps 30-32 GB (always good to have a cushion). This cushion isn’t strictly necessary, but a little safety never hurts...
 
Deleted:
<
<
Host hyp hyperion hyperion.cesr.fr
        Hostname hyperion.cesr.fr
        ProxyCommand ssh GATEWAY nc %h %p 2> /dev/null
 
Deleted:
<
<
(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)
 
Changed:
<
<
VOILA C FINI, OUF !
>
>

soft RAID (Redundant Array of Inexpensive Disks)

 
Changed:
<
<
Désormais, depuis votre pc, il suffit de faire un bête ssh :
>
>
http://smpfr.mesdiscussions.net/smpfr/Software/soft-linux-nuls-sujet_338_1.htm
 
Changed:
<
<
ssh hyp (avec l'option -X pour l'affichage graphique)
>
>
Vous pouvez faire vos tests sur des fichiers ou des clefs USB pour commencer... Remplacez simplement le "device" par un fichier existant. Ex : /dev/sdX par /home/moi/raid-test/disque-1.img.
 
Changed:
<
<
(ou "ssh hyperion" ou "ssh hyperion.cesr.fr")
>
>
Pour créer un fichier quelque part avec la bonne taille : dd if=/dev/zero of=/home/moi/raid-test/disque-1.img count=10000 bs=65535. Pour en savoir plus : man dd.
 
Changed:
<
<
On n'a plus besoin de rentrer aucun mot de passe (ni de GATEWAY, ni de hyperion), c'est direct !
>
>
Apres on fait un : mdadm --create /dev/md0 --level=1 --raid-devices=/home/moi/raid-test/disque-1.img,/home/moi/raid-test/disque-2.img
 
Changed:
<
<
(il suffit de taper une seule fois "exit" pour revenir à mon pc)
>
>
Et voila un RAID 1 créé avec deux fichiers stockés sur le disque dur.
 
Added:
>
>
J'ai testé le Raid0 sur 2DD externes de 2,5" en USB, et j'arrive à 45Mo sec avec mon portable...
 
Changed:
<
<

SED (substitution de texte)

>
>
Avant de mettre un raid sur une machine en production VERIFIEZ les noms des disques et des partitions !!! Préférez les /dev/disk/by-id, vous ferez moins facilement des erreurs qu'en mettant seulement /dev/sde, surtout si vous ajoutez des disques par la suite...
 
Changed:
<
<
Pleins d'exemples ici : http://sed.sourceforge.net/sed1line_fr.html
>
>
L'outil magique de management du RAID sous Linux : mdadm
 
Changed:
<
<
  • remplacer tutu par toto, mais seulement des lignes 3 à 6 :
>
>
Quelques exemples : (vous noterez que l'on utilise la syntaxe /dev/sdX alors que c'est mal.. mais c'est plus lisible que /dev/disk/by-id/ata-ST3250310AS_6RY7R988-part1)
 
Changed:
<
<
cat monfichier.txt | sed -e 3,6"s/tutu/toto/" >| monfichiertemp.txt
>
>
création d'une pile raid :
 
Changed:
<
<
  • remplacer tutu par toto, mais seulement entre les lignes "titi" et "toto" :
>
>
mdadm --create /dev/mdX --level=[01456] --raid-devices={/dev/sdYZ, missing, ...}
 
Changed:
<
<
/titi/,/toto/s/tutu/toto/
>
>
crée un device /dev/mdX (X étant un chiffre) de niveau (--level) 0 (stripping), 1 (mirroring), 4 (comme le 5 mais la parité est toujours sur le même disque), 5 ou 6 (2 disques de parité) à partir des devices /dev/sdYZ (Y est une lettre indiquant un disque physique , Z un chiffre indicant un numéro de partition). On peut également mettre missing dans la liste des devices. C'est très utile lorsque l'on passe son système sur un raid 1 big grin
 
Changed:
<
<
ou encore :
>
>
Mise en échec d'un disque (pour test par ex.) : mdadm --manage /dev/mdX --failed /dev/sdYZ
 
Changed:
<
<
sed -e "/$debut/,/$fin/"'s#HostId="t3://.*\n#HostId="t3://'"$WLS_ADM_HOST:$PORT\"/" < "$file1" > "$file2"
>
>
"Ejection" d'un disque d'une pile : mdadm --manage /dev/mdX --remove /dev/sdYZ
 
Added:
>
>
Ajout d'un disque à une pile : mdadm --manage /dev/mdX --add /dev/sdYZ
 
Changed:
<
<

GREP (recherche textuelle)

>
>
Liste des périphériques d'une pile : mdadm --misc --detail /dev/mdX
 
Changed:
<
<
Afficher uniquement les lignes de commentaire:
>
>
On peux aussi faire :
 
Changed:
<
<
egrep '^#' fichier
>
>
cat /proc/mdstat
 
Deleted:
<
<
Ne pas afficher les lignes de commentaire:
 
Changed:
<
<
egrep -v '^#' fichier
>
>

Agrandir une partition

 
Changed:
<
<
N'afficher que les lignes utiles (tout sauf commentaires et lignes vides) :
>
>
La première étape consiste à repérer quel device correspond aux partitions que tu veux redimensionner. Pour cela tu peux utiliser la commande :
 
Changed:
<
<
egrep -v '^(#|$)' fichier
>
>
sudo fdisk -l
 
Added:
>
>
# fdisk -l

 
Changed:
<
<

RSYNC

>
>
Disque /dev/sda: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<
Sauvegarder (de façon incrémentielle) des répertoires du poste A vers le poste B :
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 535 4096575 82 Linux swap / Solaris /dev/sda3 536 30401 239898645 83 Linux
 
Changed:
<
<
1) Depuis A...
>
>
Disque /dev/sdb: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<
A#> rsync -avz /rep/rep1 /rep/rep2 B:/rep/
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sdb1 * 1 30401 244196001 fd Linux raid autodetect
 
Changed:
<
<
option -v = verbose
>
>
Disque /dev/sdc: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<
attention aux slashes '/' :
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sdc1 * 1 30401 244196001 fd Linux raid autodetect
 
Changed:
<
<
/rep/rep1 écrit un répertoire rep1 sur B
>
>
Disque /dev/sdd: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<
/rep/rep1/ écrit directement le contenu du répertoire rep1 sur B
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sdd1 * 1 30401 244196001 fd Linux raid autodetect
 
Changed:
<
<
2) ... ou Depuis B
>
>
Disque /dev/md0: 500.1 Go, 500113080320 octets 2 heads, 4 sectors/track, 122097920 cylinders Unités = cylindres de 8 * 512 = 4096 octets
 
Changed:
<
<
rsync -avz A:/rep/rep1 A:/rep/rep2 ./rep
>
>
Disque /dev/md0 ne contient pas une table de partition valide
 
Added:
>
>
Pour avoir un résultat plus parlant (tailles en octets + système de fichiers) tu peux utiliser cfdisk : sudo cfdisk /dev/sda
 
Changed:
<
<

FIND

>
>
L'ext3 c'est en fait de l'ext2 mais avec un "journal" et c'est pour ça qu'il est facile de passer d'ext2 à ext3 et réciproquement.
 
Changed:
<
<
Chercher le fichier "foo" sur tout le disque :
>
>
Les outils de redimensionnement s'appliquent à de l'ext2 ce qui nécessitera de passer d'ext3 à ext2, redimensionner, puis repasser en ext3
 
Changed:
<
<
find / -name foo
>
>
http://www.webactus.net/coin-du-geek/linux/2704-linux-augmenter-la-taille-dune-partition-ext3/
 
Deleted:
<
<
(si on n'est pas root, on voit plein de messages d'erreur, donc pour éviter ça :
 
Changed:
<
<
find / -name foo 2>/dev/null
>
>

Redimensionner une partition (avec gparted)

 
Added:
>
>
http://www.oxygenepc.com/forum/cloner-un-disque-dur-t486.html
 
Changed:
<
<
Supprimer tous les répertoires CVS/ dans toute une arborescence (à partir du répertoire courant) :
>
>

Copie de disque ou partition avec dd (création d'image "ghost")

 
Changed:
<
<
find . -name "CVS" -exec \rm -r {} \; > /dev/null 2>&1
>
>
http://www.oxygenepc.com/forum/cloner-un-disque-dur-t486.html
 
Changed:
<
<
Combien de fichiers dans un répertoire (y-compris les sous-rep) :
>
>
http://www.linuxquestions.org/linux/answers/Applications_GUI_Multimedia/How_To_Do_Eveything_With_DD
 
Changed:
<
<
find rep | wc -l
>
>
http://www.debianhelp.co.uk/ddcommand.htm
 
Changed:
<
<
Affecter des droits spécifiques à certains éléments d'un répertoire (tout le contenu, y-compris sous-dossiers) :
>
>
The basic command is structured as follows:
 
Changed:
<
<
dossiers:
>
>
dd if= of= bs=(usually some power of 2, not less than 512 bytes(ie, 512, 1024, 2048, 4096, 8192, 16384, but can be any number.) skip= seek= conv=.
 
Changed:
<
<
find /home/jsmith/awstats/ -type d | xargs chmod 0755
>
>
Source is the data being read. Target is where the data gets written. If you mess up, and accidentally reverse the source and target, you can wipe out a lot of data.
 
Changed:
<
<
fichiers:
>
>
(http://www.efense.com/helix is a good boot cd : The helix boot environment contains the DoD version of dd called dcfldd. It works the same way, but is has a progress bar)
 
Deleted:
<
<
find /home/jsmith/awstats/ -type f | xargs chmod 0644
 
Changed:
<
<
fichiers perl:
>
>
Using dd you can create backups of an entire harddisk or just a parts of it. This is also usefull to quickly copy installations to similar machines. It will only work on disks that are exactly the same in disk geometry, meaning they have to the same model from the same brand.
 
Changed:
<
<
find /home/jsmith/awstats/ -type f -name *.pl | xargs chmod 0755
>
>
Examples:
 
Added:
>
>
  • full hard disk copy
 
Added:
>
>
dd if=/dev/hdx of=/dev/hdy dd if=/dev/hdx of=/path/to/image dd if=/dev/hdx | gzip > /path/to/image.gz
 
Added:
>
>
Hdx could be hda, hdb etc. In the second example gzip is used to compress the image if it is really just a backup.
 
Changed:
<
<

Forwarder les mails du serveur

>
>
  • Restore Backup of hard disk copy
 
Changed:
<
<
http://www.feep.net/sendmail/tutorial/intro/forward.html
>
>
dd if=/path/to/image of=/dev/hdx
 
Changed:
<
<
Par exemple, je veux forwarder mes mails de pallier@planetoweb.cesr.fr vers ma boite LABO ou encore ma boite perso :
>
>
gzip -dc /path/to/image.gz | dd of=/dev/hdx
 
Changed:
<
<
cd ~
>
>
  • MBR backup
 
Changed:
<
<
créer un fichier ".forward" contenant mon adresse LABO ou perso
>
>
In order to backup only the first few bytes containing the MBR and the partition table you can use dd as well.
 
Changed:
<
<
S'il s'agit de forwarder les mails adressés à root@planetoweb.cesr.fr, on peut utiliser la même solution, mais on peut aussi ajouter cette ligne tout à la fin du fichier /etc/aliases
>
>
dd if=/dev/hdx of=/path/to/image count=1 bs=512
 
Changed:
<
<
root: etienne.pallier@cesr.fr
>
>
  • MBR restore
 
Added:
>
>
dd if=/path/to/image of=/dev/hdx
 
Changed:
<
<

Rechercher un fichier (dans une hiérarchie de répertoires)

>
>
Add "count=1 bs=446" to exclude the partition table from being written to disk. You can manually restore the table.
 
Changed:
<
<
find . -name filename_searched
>
>
  • Copy one hard disk partition to another hard disk:
 
Changed:
<
<

Rechercher un mot dans un ou plusieurs fichiers

>
>
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror
 
Changed:
<
<
  • rechercher "mot" dans les fichiers idl du répertoire courant
>
>
sda2, sdb2 are partitions. You want to copy sda2 to sdb2. If sdb2 doesn't exist, dd will start at the beginning of the disk, and create it. Be careful with order of if and of. You can write a blank disk to a good disk if you get confused.
 
Changed:
<
<
grep "mot" *.pro
>
>
  • Make an iso image of a CD:
 
Changed:
<
<
  • rechercher "mot" dans tous les fichiers du répertoire courant
>
>
dd if=/dev/hdc of=/home/sam/mycd.iso bs=2048 conv=notrunc
 
Changed:
<
<
grep -i "mot" .
>
>
CD sectors are 2048 bytes, so this copies sector for sector. The result will be a hard disk image file of the CD. You can use "chmod a+rwx mycd.iso" to make the image writable. You can mount the image with "mkdir /mnt/mycd", this line in fstab: "/home/sam/mycd.iso /mnt/mycd iso9660 rw,user,noauto 0 0", save fstab, "mount -o loop /mnt/mycd". Then the file system will be viewable as files and directories in the directory /mnt/mycd. You can edit the image as you wish, and the new file will be "/home/sam/mycd.iso" dd does not write to CD's. You need to use a burning utility, or the cdrdao command
 
Changed:
<
<
L'option "-i" permet de ne pas tenir compte de la casse
>
>
  • Cloning an entire hard disk:
 
Changed:
<
<
  • rechercher "mot" dans tous les fichiers du répertoire courant ainsi que dans tous les sous-rep (récursif) :
>
>
dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror
 
Changed:
<
<
grep -r -i "mot" .
>
>
In this example, sda is the source. sdb is the target. Do not reverse the intended source and target. Surprisingly many people do. notrunc means to not truncate. noerror means to keep going if there is an error. Normally dd stops at any error. if you have a question about a hard drive on whether or not it works, you can try to use it as the source drive for the dd command. You should get an error if it is not working. target drives need to be really messed up to give an error in dd.
 
Added:
>
>
  • Copy MBR only of a hard drive:
 
Changed:
<
<

Faire une action sur un ensemble de dossiers et fichiers

>
>
dd if=/dev/sda of=/home/sam/MBR.image bs=446 count=1
 
Changed:
<
<
Depuis répertoire courant, supprimer tous les dossiers "CVS" (récursivement) :
>
>
this will copy the first 446 bytes of the hard drive to a file. If you haven't already guessed, reversing the objects of if and of, in the dd command line reverses the direction of the write.
 
Changed:
<
<
find . -name CVS -exec rm -rf {} \;
>
>
  • Back up your MBR
 
Added:
>
>
dd if=/dev/sda of=mbr.bin count=1
 
Changed:
<
<

Créer un alias

>
>
Put this on a floppy you make with
 
Changed:
<
<
Exemple : quand on tape "l" ça fera "ls -l"
>
>
dd if=boot.img of=/dev/fd0
 
Changed:
<
<
alias l="ls -l"
>
>
Along with dd. Boot from the floppy and
 
Changed:
<
<
Cette ligne doit être placée dans votre ~/.bashrc
>
>
dd if=mbr.bin of=/dev/sda count=1
 
Changed:
<
<

Configurer mon environnement

>
>
Will restore the MBR
 
Changed:
<
<
Pour les configurations perso, les placer dans son ~/.bash_profile (ce script appelle ~/.bashrc qui doit contenir les alias et fonctions)
>
>
  • Copy a disk partition to a file on a different partition (Do not copy a partition to the same partition)
 
Changed:
<
<
Mettre les configurations générales dans /etc/profile.d/profile_etienne.sh (elles seront ainsi valables pour TOUS les users du serveur)
>
>
dd if=/dev/sdb2 of=/home/sam/partition.image bs=4096 conv=notrunc,noerror
 
Changed:
<
<
Ce fichier est automatiquement lu par /etc/profile au démarrage d'une session
>
>
This will make a file that is an exact duplicate of the sdb2 partition. You can substitue hdb, sda, hda, or whatever the disk is called.
 
Added:
>
>
  • Restore a disk partition from an image file.
 
Changed:
<
<

Imprimer sur linux

>
>
dd if=/home/sam/partition.image of=/dev/sdb2 bs=4096 conv=notrunc,noerror
 
Changed:
<
<
Pour installer l'imprimante "sprinter", voir SprinterPrinter
>
>
This way you can get a bazonga hard drive and partition it so you can back up your root partition. If you mess up your root partition, you just boot from the helix cd and restore the image.
 
Deleted:
<
<
Pour faire de cette imprimante l'imprimante par défaut, ajouter cette ligne dans votre ~/.bash_profile :
 
Deleted:
<
<
export PRINTER=sprinter (mettre le nom de votre imprimante à la place de "sprinter")
 
Changed:
<
<
Pour imprimer du texte, on peut utiliser les utilitaires "a2ps" ou "enscript"
>
>

Copie de disque ou partition (image "ghost") avec partimage (SystemRescueCd)

 
Added:
>
>
J'ai un disque qui montre des faiblesses
 
Changed:
<
<

Visualiser des images (jpeg, ps, ...) en mode console

display
>
>
Je veux le remplacer par un nouveau disque
 
Changed:
<
<
Note : display permet aussi de convertir une image d'un format vers un autre (enregistrer sous...)
>
>
Je dois donc faire une image du disque et la copier ensuite sur le nouveau disque
 
Changed:
<
<
Voir aussi "xv" et "gthumb"
>
>
1) Télécharger une ISO de SystemRescueCd (x86)
 
Added:
>
>
http://www.sysresccd.org/Download
 
Changed:
<
<

Convertir une image d'un format vers un autre

>
>
2) Vérifier le checksum de cette ISO
 
Changed:
<
<
PS to PDF : ps2pdf
>
>
md5sum systemrescuecd-x86-2.1.1.iso
 
Changed:
<
<
Voir aussi l'utilitaire convert
>
>
Pour faire ça depuis Windows, télécharger md5deep (http://sourceforge.net/projects/md5deep/files/md5deep/md5deep-1.12/md5deep-1.12.zip/download)
 
Changed:
<
<
En mode interactif, On peut aussi utiliser display (voir ci-dessus)
>
>
Il contient md5sum, que l'on peut appeler sous Dos : md5sum systemrescuecd-x86-2.1.1.iso
 
Changed:
<
<

Réduire la taille d'un fichier PDF

>
>
3) Créer un DVD à partir de cette ISO
 
Added:
>
>
4) Identifier les partitions du disque à copier (avec df, fdisk, et /proc/partitions)
 
Changed:
<
<
Taper dans un terminal la commande suivante
>
>
Dans mon cas, c'était le disque système qui montrait des faiblesses
 
Changed:
<
<
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=fichier_reduit.pdf fichier_a_reduire.pdf
>
>
Il s'appelle /dev/sda et contient 3 partitions
 
Changed:
<
<
La commande peut se faire avec l'option suivante (non obligatoire):
>
>

 
Changed:
<
<
-dPDFSETTINGS=/screen (qualité faible - compression forte) -dPDFSETTINGS=/ebook (qualité moyenne - compression moyenne) -dPDFSETTINGS=/printer (qualité élevée - compression faible)
>
>
# df -h Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/sda3 222G 18G 193G 9% / /dev/sda1 190M 18M 163M 10% /boot ...
 
Changed:
<
<

Administration

>
>
# fdisk -l
 
Added:
>
>
Disque /dev/sda: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<

IPTABLES (FIREWALL)

>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 535 4096575 82 Linux swap / Solaris /dev/sda3 536 30401 239898645 83 Linux
 
Changed:
<
<
  • Quelles sont lès règles actuelles ?
>
>
Disque /dev/sdb: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<
/etc/init.d/iptables status
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sdb1 * 1 30401 244196001 fd Linux raid autodetect
 
Changed:
<
<
  • Fichiers :
>
>
Disque /dev/sdc: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<
ls /etc/sysconfig/iptables*
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sdc1 * 1 30401 244196001 fd Linux raid autodetect
 
Changed:
<
<
  • Modifs :
>
>
Disque /dev/sdd: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
 
Changed:
<
<
cd /etc/sysconfig/
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sdd1 * 1 30401 244196001 fd Linux raid autodetect
 
Changed:
<
<
1) modifs à faire sur iptables.clean
>
>
Disque /dev/md0: 500.1 Go, 500113080320 octets 2 heads, 4 sectors/track, 122097920 cylinders Unités = cylindres de 8 * 512 = 4096 octets
 
Changed:
<
<
2) cp iptables.clean iptables
>
>
Disque /dev/md0 ne contient pas une table de partition valide
 
Deleted:
<
<
3) /etc/init.d/iptables restart
 
Changed:
<
<
4) /etc/init.d/iptables save
>
>
# fdisk /dev/sda ...
 
Changed:
<
<
5) /etc/init.d/iptables status (vérifier que les nouvelles règles apparaissent bien)
>
>
Commande (m pour l'aide): p
 
Added:
>
>
Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 535 4096575 82 Linux swap / Solaris /dev/sda3 536 30401 239898645 83 Linux
 
Added:
>
>
# cat /proc/partitions major minor #blocks name
 
Added:
>
>
  1. 0 244198584 sda
  2. 1 200781 sda1
  3. 2 4096575 sda2
  4. 3 239898645 sda3
  5. 16 244198584 sdb
  6. 17 244196001 sdb1
  7. 32 244198584 sdc
  8. 33 244196001 sdc1
  9. 48 244198584 sdd
  10. 49 244196001 sdd1
  11. 0 488391680 md0
 
Added:
>
>
# cat /etc/fstab
 
Added:
>
>
LABEL=/ / ext3 defaults 1 1 LABEL=/boot1 /boot ext3 defaults 1 2 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs defaults 0 0 /dev/md0 /home ext3 defaults 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 LABEL=SWAP-sda2 swap swap defaults 0 0 /dev/cdrom /media/cdrom udf,iso9660 user,noauto,exec 0 0
 
Added:
>
>
 
Changed:
<
<

SVN (SUBVERSION)

>
>

Virtualisation

 
Changed:
<
<
Voir l'exemple du projet Europlanet : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN
>
>
La virtualisation consiste à faire cohabiter plusieurs (VM) machines "virtuelles" (OS) sur une même machine physique
 
Changed:
<
<
Voir l'exemple de la configuration pour chemcam : /etc/httpd/conf.d/vhosts/chemcam.conf (planetoweb)
>
>
Prérequis :
 
Changed:
<
<
Besoins à considérer avant de mettre en place une solution svn :
>
>
  • Les processeurs doivent être virtualisables (cpuinfo doit contenir le flag vmx pour un processeur intel, et svm pour AMD) : egrep '(vmx|svm)' /proc/cpuinfo
 
Changed:
<
<
- accès via apache (et non pas seulement en svnserve) pour assurer un accès depuis l'extérieur et qui passe les firewall
>
>
  • RAM : au moins 8Go (pour 2 VM)
 
Changed:
<
<
- AUTH : accès authentifié (AuthType, AuthUserFile et Require valid-user)
>
>
  • Disques :
    • au moins 2x500Go (en raid1 par exemple)
    • bonne config type :
      • 2 disques raid1 pour le système de base
      • 3 disques raid5 avec un LVM dessus pour stocker les images disques des VM
 
Deleted:
<
<
Exceptionnellement, sur un projet avec différents groupes (mais uniquement si nécessaire car ralentit les accès svn et alourdit la gestion) :
 
Changed:
<
<
- ACL : contrôle d'accès basé sur les chemins : (grâce au module authz_svn_module et à la directive AuthzSVNAccessFile), pour pouvoir réserver certains répertoires à certains groupes...
>
>

Serveur de gestion de versions (de code source) SUBVERSION

 
Added:
>
>
http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN
 
Changed:
<
<
Exemple de config (chemcam) authentifiée mais SANS ACL :
>
>

Connexion X11

 
Changed:
<
<

>
>
http://en.wikipedia.org/wiki/X_display_manager
 
Changed:
<
<
DAV svn
>
>
http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture
 
Changed:
<
<
ErrorDocument 404 default # Only 1 repository : SVNPath /home/projects/chemcam/svn # Many repositories : # any "/svn/foo" URL will map to a repository /home/svn/foo #SVNParentPath /home/svn #SVNListParentPath on
>
>
http://tldp.org/HOWTO/XDMCP-HOWTO/intro.html
 
Changed:
<
<
# Desactiver completement les controles sur les chemins (par defaut = on) SVNPathAuthz off
>
>
Le serveur X tourne localement sur mon pc (win ou lin), c'est à dire le pc avec un écran (output), un clavier et une souris (inputs).
 
Changed:
<
<
# For any operations other than these (GET, PROFIND...), require an authenticated user # Require valid-user #
>
>
Il se connecte à un display manager (xdm ou gdm ou kdm...) qui peut être local ou distant (sur un autre pc) :
  • Si le DM est local, il démarre un ou plusieurs serveurs X, affiche l'écran de connexion (login) au démarrage et chaque fois qu'un user se délogge.
  • Si le DM est distant, il est utilisé via le protocole XDMCP : un user lance des programmes depuis le pc distant (qui exécute le DM) alors que ses input/output se passent sur son pc local.
 
Changed:
<
<
# AUTH AuthType Basic AuthName "CHEMCAM Subversion repository" # password file : AuthUserFile /chemin/vers/fichier/des/mots/de/passe
>
>
Ainsi, le serveur X (local) communique avec différents clients graphiques (qui peuvent être distants) à qui il envoit les inputs et de qui il reçoit les outputs.
 
Changed:
<
<
# For any operations other than these, require an authenticated user (this would allow anybody to READ without authentication)
>
>
Pour CentOS, le DM par défaut est sélectionné dans /etc/X11/prefdm (qui regarde si un DM par défaut est donné dans /etc/sysconfig/desktop)
 
Changed:
<
<
# Custom log file and format : LogFormat "%t %u %h %{SVN-ACTION}e" svn CustomLog logs/journal-svn.log svn env=SVN-ACTION
>
>
C'est le fichier /etc/X11/xinit/Xsession qui exécute notre environnement.
 
Changed:
<
<
>
>
xdm : voir /etc/X11/
 
Added:
>
>
kdm : voir /etc/kdm/
 
Changed:
<
<
Exemple de config (chemcam) authentifiée et AVEC ACL :
>
>
gdm : voir /etc/gdm/ Il devrait s'y trouver un gdm.conf
 
Changed:
<
<

>
>
gdm appelle /etc/X11/xinit/Xsession avec les bonnes options
 
Changed:
<
<
DAV svn
>
>
http://projects.gnome.org/gdm/docs/gdmtalk.pdf
 
Changed:
<
<
ErrorDocument 404 default # Only 1 repository : SVNPath /home/projects/chemcam/svn # Many repositories : # any "/svn/foo" URL will map to a repository /home/svn/foo #SVNParentPath /home/svn #SVNListParentPath on
>
>
Attention, X et XDMCP sont tous les 2 non sécurisés !!!
 
Changed:
<
<
# Desactiver completement les controles sur les chemins (par defaut = on) SVNPathAuthz on
>
>
Vérifier /etc/resolv.conf
 
Changed:
<
<
# ACL # politique de controle d'acces (uses apache module mod_authz_svn) AuthzSVNAccessFile /chemin/vers/fichier/police_acces_svn
>
>
Vérifier /etc/init.d/xfs (font server)
 
Changed:
<
<
# For any operations other than these (GET, PROFIND...), require an authenticated user # Require valid-user #
>
>
Vérifier que dans /etc/inittab, le default runlevel est bien 5 :
 
Changed:
<
<
# AUTH AuthType Basic AuthName "CHEMCAM Subversion repository" # password file : AuthUserFile /chemin/vers/fichier/des/mots/de/passe
>
>
id:5:initdefault:
 
Changed:
<
<
# For any operations other than these, require an authenticated user (this would allow anybody to READ without authentication)
>
>
Vérifier /etc/X11/xorg.conf
 
Changed:
<
<
# Custom log file and format : LogFormat "%t %u %h %{SVN-ACTION}e" svn CustomLog logs/journal-svn.log svn env=SVN-ACTION
>
>
Sur serveur boulot, on voit bien que c'est gdm qui tourne :
 
Added:
>
>
[root@hyperion xinit]# ps -efl|grep gdm
4 S root      3815     1  0  76   0 - 41936 429493  2010 ?        00:00:00 /usr/sbin/gdm-binary -nodaemon
5 S root      3917  3815  0  76   0 - 48714 pipe_w  2010 ?        00:00:00 /usr/sbin/gdm-binary -nodaemon
4 S root      3919     1  0  77   0 - 47464 304555  2010 ?        00:00:04 /usr/libexec/gdm-rh-security-token-helper
4 S root      3920  3917  0  75   0 - 22128 -       2010 tty7     00:03:08 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7
4 S gdm       3946  3917  0  75   0 - 56317 -       2010 ?        00:00:02 /usr/libexec/gdmgreeter

 
Changed:
<
<
Format du fichier de police d'accès aux répertoires du projet svn (nommé police_acces_svn ci-dessus) :
>
>
Log de X : /var/log/Xorg.0.log
 
Changed:
<
<

>
>
Config de X : /etc/X11/xorg.conf
 
Deleted:
<
<
[groups] # Virtual Machine only group : cc-vm = user1, user20, user7 # Privileged access group : cc-privileged = user3, user2, user6, user8, user30
 
Changed:
<
<
[/] # cc-privileged group has total access to the project (and no one else) @cc-privileged = rw # access given to ALL users !!! #* = rw
>
>

BOOT LINUX

 
Changed:
<
<
[/trunk/vm] # cc-vm group has read only access to the /vm dir (and no other dir) @cc-vm = r # cc-vm group has no access at all to the /vm dir #@cc-vm =
>
>
I - Le boot : tryptique noyau, arguments, et ramdisk
Synthèse du workflow : bootloader ==> noyau + initramfs + arguments ==> montage de la racine
 
Changed:
<
<
>
>
1) Chargeur de boot (bootloader)
C'est le 1er prog à s'exécuter. Différent selon les architectures (pc x86, station Sun, Mac PPC...) Rôle: mettre en RAM le noyau (kernel), lui passer des arguments, copier un ramdisk en RAM, et passer la main au noyau Ex: lilo, grup, outils syslinux (bien adapté à partifion FAT, clé usb, cd) Etapes : - allumage électrique - POST (Power On Self Test) - BIOS (dans lequel le periph d'amorçage est défini) - lancement bootloader installé sur periph amorcé Ex: noyau grub, /boot/bzImage-2.6 Ex: ramdisk grub, /boot/initrd.img
 
Changed:
<
<

LVM (Logical Volume Management)

>
>
2) Le noyau
Rôle : monter la racine et lancer /sbin/init situé dessus Au boot, le noyau décourvre son environnement (ram, cpu, disque...). Ces périph sont gérés par des pilotes (drivers), des "modules" qui sont compilés dans le noyau ou dans des fichiers externes (souvent dans /lib/modules/). Les fichiers modules sont situés sur une partition qui n'est pas encore montée, et donc les périph correspondants ne peuvent pas être utilisés. Le noyau monte sa racine avec /bin/mount ex: montage de /dev/sda1 en lecture seule avec sys de fichier ext4 $ mount -t ext4 -o ro /dev/sda1 / Les arguments passés au noyau peuvent être relus après boot : $ cat /proc/cmdline On peut aussi passer l'argument "init=/bin/bash" pour accéder au système au démarrage avec un shell bash.
 
Changed:
<
<
http://www.linux-mag.com/id/7454
>
>
3) Le ramdisk initial : initramfs
Rôle : permettre une détection plus intelligente de la racine ainsi qu'une facilité de configuration. S'appelait initrd, mais est de plus en plus remplacé par initramfs L'initramsf est un ensemble de fichiers qui vont être directement copiés dans le cache de système de fichiers sous la racine (tous les sys 2.6 utilisent un rootfs, cf "cat /proc/mounts"). Il doit au moins contenir un programme /init exécutable que le noyau va lancer pour qu'il trouve la racine et la monte. C'est un microsystème linux à part entière. Le prog /init est souvent un script shell, simple à lire. Avec un initramfs, il devient possible de conserver un noyau minimal et de mettre les modules essentiels au boot dans l'initramfs (évite de devoir recompiler le noyau). Il contient aussi l'image qui permet un affichage graphique pendant le boot. /init parse donc la ligne /proc/cmdline, cherche la racine, et la monte pour ensuite basculer le noyau dessus, et enfin s'autoremplace par le vrai binaire /sbin/init.
 
Changed:
<
<
LVM can be used to effectively manage storage to make expansion, snapshots, and other aspects of storage fairly easy.
>
>
II - init et inittab
 
Changed:
<
<
LVM allows you to abstract various pieces of physical storage into groups that can be carved into chunks that form the basis of file systems (virtual partitions if you like). It also allows you to combine physical partitions into groups, resize these groups (grow or shrink), and effectively manage these groups.
>
>
Arrivé à ce point, la noyau tourne, la racine de la distrib est montée (souvent en "ro") et le binaire /sbin/init est lancé, premier processus.
 
Changed:
<
<
1) h physical hd découpés chacun en p physical partitions (PP) (pas forcément le même nb de partitions pour chaque hd)
>
>
Si ce processus meurt (pid=1), le noyau fait un kernel panic. Il est aussi responsable de l'extinction de la machine. Si on passe au noyau l'argument "init=/bin/bash", seul "bash" est lancé (à la place de /sbin/init) et on a ainsi un accès root sur la racine (utile pour réparer une distrib, ou modifier mot passe root dans /etc/shadow)
 
Changed:
<
<
ex : sda découpé en /dev/sda1, /dev/sda2 et sdb découpé en /dev/sdb1, /dev/sdb2, /dev/sdb3
>
>
/sbin/init a pour fichier de conf, /etc/inittab : décrit les processus lancés au démarrage et à surveiller durant le fonctionnement normal du système. Init à 7 runlevels (0=stop, ..., 6=reboot). Runlevel 1 est pour la maintenance (nb minimum de processus et user root only). Chaque ligne est composée de 4 paramètres : référence:runlevel:manière de lancer la commande:commande Runlevel par défaut (ici, le 3): id:3:initdefault: On peut modifier ça avec un argument au noyau, par ex: root=/dev/hda2 ro 1 Runlevel courant ? $ runlevel Changer de runlevel ? $ init n
 
Changed:
<
<
2) mapping identité entre les partitions physiques (PP) et virtuelles (PV) : 1 PV = 1 PP
>
>
sysinit est lancé au boot, mais avant les cdes boot: si::sysinit:/etc/rc.d/rc.sysinit
 
Changed:
<
<
Make sure the partition type for the physical volumes is correct. The partition type should be “8e”.
>
>
reset: ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
Changed:
<
<
# fdisk -l /dev/sdb

>
>
wait, lance un process et attend sa fin pour continuer: l5:5:wait:/etc/rc.d/rc 5
 
Changed:
<
<
Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes
>
>
respawn, relance le process quand il se termine (ex: les gettys texte, alt-F1... relancés dès qu'on se délogue) 5:2345:respawn:/sbin/mingetty tty5
 
Changed:
<
<
Device Boot Start End Blocks Id System /dev/sdb1 1 30400 244187968+ 8e Linux LVM /dev/sdb2 30401 60801 244196032+ 8e Linux LVM
>
>
Relecture de inittab après modif ? kill -HUP 1
 
Changed:
<
<
# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
>
>
inittab lance des script rc (run command) de 2 façons selon les familles de systèmes linux :
  • façon systemV (RedHat et Debian)
  • façon BSD (slackware)
 
Changed:
<
<
# pvdisplay
  "/dev/sdb1" is a new physical volume of "232.88 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               232.88 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               j4XKT6-OI2y-cPMK-YpNR-gmgc-es67-ey4CV2

>
>
Voyons ici la façon SystemV (plus élaborée que BSD)
 
Changed:
<
<
"/dev/sdb2" is a new physical volume of "232.88 GB" --- NEW Physical volume --- ...
>
>
en fait, inittab lance le script rc général et lui passe le runlevel en argument: l5:5:wait:/etc/rc.d/rc 5 rc va lancer les scripts du runlevel associé, dans l'ordre alpha. /etc/rc.d/ contient un dossier rcN.d/ par runlevel (N) ex: /etc/rc.d/rc5.d/ Ce dossier contient simplement des liens vers les scripts de /etc/init.d/ (qui doivent accepter au moins les arguments "start" et "stop") Ces liens sont préfixés par S (Start) ou K (Kill). Quand on entre dans un runlevel, tous les liens S* de ce runlevel sont exécutés (dans l'ordre alpha) Quand on sort d'un runlevel, tous les liens K* de ce runlevel sont exécutés Ex: S85httpd lancera "/etc/init.d/httpd start" Un lien /etc/rc.d/rc5.d/S42foobar sera exécuté à l'entrée du runlevel 5, et appellera /etc/init.d/foobar start Il sera exécuté avant l'appel de S95barqux Sur RedHat, seul le runlevel 5 lance X : x:5:respawn:/etc/X11/prefdm -nodaemon
 
Changed:
<
<
Notice that each PV is given a PV UUID
>
>
Le dernier script à être lancé est /etc/rc.d/rc.local (on peut y mettre tout ce qu'on veut voir exécuter au boot) Le prog update-rc.d peut être utilisé pour activer/désactiver des scripts au démarrage.
 
Changed:
<
<
3) Les PV sont regroupés en 1 à n volume group (VG) (a VG can be seen as a "virtual hd")
>
>
Ubuntu propose Upstart en remplacement du couple init/inittab MacOS propose un "super-daemon" launchd qui regroupe les fonctionnalités de init (lance démon lors du démarrage), crond (lance démon lors de top horaires), et (x)inetd (lance démon lors de requêtes réseaux)
 
Deleted:
<
<
ex : le VG primary_vg regroupera /dev/sda1, /dev/sda2 , /dev/sdb1, et /dev/sdb3
 
Changed:
<
<
# vgcreate primary_vg /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
  Volume group "primary_vg" successfully created
>
>

FTP

 
Changed:
<
<
# vgdisplay
  --- Volume group ---
  VG Name               primary_vg
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               931.52 GB
  PE Size               4.00 MB
  Total PE              238468
  Alloc PE / Size       0 / 0
  Free  PE / Size       238468 / 931.52 GB
  VG UUID               oNH6jk-PBE0-mR0c-aaDi-3Fys-y5SQ-0tVaxX
>
>
ex: installation ftp pour l'expérience RAMAN (sur ExoMars)
 
Changed:
<
<
If you don't happen to remember the name of a VG or you happen upon a new system to administer, then you can use a command called "vgscan" that will tell what VG's are on the system.
>
>
http://www.obs-mip.fr/index.php/fre/recherche/techniques-missions-spatiales/Exomars-RAMAN
 
Changed:
<
<
# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "primary_vg" using metadata type lvm2
>
>
  • Mission
 
Changed:
<
<
4) Chaque VG est redécoupé en m logical volume (LV) : 1 VG = m LV (a LV can be seen as a "virtual partition")
>
>
La mission ExoMars, de l’Agence Spatiale Européenne (ESA), est une mission du programme Aurora. Son objectif est de caractériser l’environnement biologique martien pour préparer l’exploration humaine de la planète rouge.
 
Changed:
<
<
ex : le VG primary_vg est redécoupé en 2 LV : /dev/primary_vg/home_lv et /dev/primary_vg/data_lv
>
>
  • Instrument LABO
 
Changed:
<
<
# lvcreate --name /dev/primary_vg/home_lv --size 450G
  Logical volume "home_lv" created

>
>
EXLIBRIS serait capable d’effectuer une ablation des roches puis l’analyse de la composition de cette roche à la fois en chimie élémentaire (ultra-violet), en minéraux et composés organiques (Raman). Le LABO serait responsable de la partie LIBS (ultra-violet) et de la calibration de l’instrument. F. Rull Pérez (Centro de Astrobiologia , Espagne) serait en charge de la partie Raman. Contexte de réalisation
 
Changed:
<
<
lvdisplay...
>
>
Mission ESA : Tir prévu en 2013.
 
Changed:
<
<
lvscan...
>
>
Voir en ligne (Site Officiel d’ExoMars à l’ESA) : http://www.esa.int/esaSC/SEMGB7MJ74G_index_0.html
 
Changed:
<
<
>
>
  • Installation ftp
 
Changed:
<
<
5) Sur chaque LG, on monte un système de fichier (FS) :
>
>
Ajout 2 users ftpread et ftpw (groupe ftpgroup) dans /etc/passwd (et /etc/shadow), et leur donner pour home /projects/raman/ftp/files
 
Changed:
<
<
ex : /home monté en ext3 sur le LV home_lv et /data monté en xfs sur le LV data_lv Comment
# mkfs.ext3 /dev/primary_vg/home_lv
...
>
>
Leur attribuer un pass via "password"
 
Added:
>
>
Leur donner un accès exclusif a leur home:
 
Changed:
<
<
Comment faire un snaphot ?
>
>
chown ftpw:ftpgroup /projects/raman/ftp/files/
 
Changed:
<
<
http://www.linux-mag.com/id/7454/2/
>
>
Faire en sorte que ftpread n'est qu'un accès en lecture seule (via son groupe ftpgroup) :
 
Changed:
<
<
For example, if the file system says it has 29G used (29 GB), then you should snapshot a little larger – perhaps 30-32 GB (always good to have a cushion). This cushion isn’t strictly necessary, but a little safety never hurts...
>
>
chmod 755 /projects/raman/ftp/files/ --> "rwxr-xr-x"
 
Added:
>
>
Les autoriser en les ajoutant dans dans /etc/vsftpd/user_list
 
Added:
>
>
(chroot doit être activé par défaut pour tous les users internes)
 
Changed:
<
<

soft RAID (Redundant Array of Inexpensive Disks)

>
>
/etc/init.d/vsftpd restart
 
Deleted:
<
<
http://smpfr.mesdiscussions.net/smpfr/Software/soft-linux-nuls-sujet_338_1.htm
 
Deleted:
<
<
Vous pouvez faire vos tests sur des fichiers ou des clefs USB pour commencer... Remplacez simplement le "device" par un fichier existant. Ex : /dev/sdX par /home/moi/raid-test/disque-1.img.
 
Deleted:
<
<
Pour créer un fichier quelque part avec la bonne taille : dd if=/dev/zero of=/home/moi/raid-test/disque-1.img count=10000 bs=65535. Pour en savoir plus : man dd.
 
Deleted:
<
<
Apres on fait un : mdadm --create /dev/md0 --level=1 --raid-devices=/home/moi/raid-test/disque-1.img,/home/moi/raid-test/disque-2.img
 
Deleted:
<
<
Et voila un RAID 1 créé avec deux fichiers stockés sur le disque dur.
 
Deleted:
<
<
J'ai testé le Raid0 sur 2DD externes de 2,5" en USB, et j'arrive à 45Mo sec avec mon portable...
 
Changed:
<
<
Avant de mettre un raid sur une machine en production VERIFIEZ les noms des disques et des partitions !!! Préférez les /dev/disk/by-id, vous ferez moins facilement des erreurs qu'en mettant seulement /dev/sde, surtout si vous ajoutez des disques par la suite...
>
>

LOGS

 
Changed:
<
<
L'outil magique de management du RAID sous Linux : mdadm
>
>
/var/log
 
Changed:
<
<
Quelques exemples : (vous noterez que l'on utilise la syntaxe /dev/sdX alors que c'est mal.. mais c'est plus lisible que /dev/disk/by-id/ata-ST3250310AS_6RY7R988-part1)
>
>
auth.log ou secure (sur Redhat)
 
Changed:
<
<
création d'une pile raid :
>
>
Outil de visualisation graphique des logs : gnome-system-log
 
Changed:
<
<
mdadm --create /dev/mdX --level=[01456] --raid-devices={/dev/sdYZ, missing, ...}
>
>
Common Linux log files name and usage :
    /var/log/message: General message and system related stuff
    /var/log/auth.log: Authenication logs
    /var/log/kern.log: Kernel logs
    /var/log/cron.log: Crond logs (cron job)
    /var/log/maillog: Mail server logs
    /var/log/qmail/ : Qmail log directory (more files inside this directory)
    /var/log/httpd/: Apache access and error logs directory
    /var/log/lighttpd: Lighttpd access and error logs directory
    /var/log/boot.log : System boot log
    /var/log/mysqld.log: MySQL database server log file
    /var/log/secure: Authentication log
    /var/log/utmp or /var/log/wtmp : Login records file
    /var/log/yum.log: Yum log files
 
Changed:
<
<
crée un device /dev/mdX (X étant un chiffre) de niveau (--level) 0 (stripping), 1 (mirroring), 4 (comme le 5 mais la parité est toujours sur le même disque), 5 ou 6 (2 disques de parité) à partir des devices /dev/sdYZ (Y est une lettre indiquant un disque physique , Z un chiffre indicant un numéro de partition). On peut également mettre missing dans la liste des devices. C'est très utile lorsque l'on passe son système sur un raid 1 big grin
>
>
In short /var/log is the location where you should find all Linux logs file. However some applications such as httpd have a directory within /var/log/ for their own log files. You can rotate log file using logrotate software and monitor logs files using logwatch software.
 
Deleted:
<
<
Mise en échec d'un disque (pour test par ex.) : mdadm --manage /dev/mdX --failed /dev/sdYZ
 
Changed:
<
<
"Ejection" d'un disque d'une pile : mdadm --manage /dev/mdX --remove /dev/sdYZ
>
>
logrotate
 
Changed:
<
<
Ajout d'un disque à une pile : mdadm --manage /dev/mdX --add /dev/sdYZ
>
>
/etc/logrotate.conf
 
Changed:
<
<
Liste des périphériques d'une pile : mdadm --misc --detail /dev/mdX
>
>
/etc/logrotate.d/
 
Changed:
<
<
On peux aussi faire :
>
>
Forcer une rotation :
 
Changed:
<
<
cat /proc/mdstat
>
>
sudo logrotate -f /etc/logrotate.conf
 
Added:
>
>
==> new file "messages", "messages" devient "messages1", "messages1" devient "messages2"...
 
Changed:
<
<

Agrandir une partition

>
>
logwatch
 
Changed:
<
<
La première étape consiste à repérer quel device correspond aux partitions que tu veux redimensionner. Pour cela tu peux utiliser la commande :
>
>
by default, runs daily on yesterday's logs (/etc/cron.daily/0logwatch qui pointe sur /usr/share/logwatch/scripts/logwatch.pl), includes all services, and sends a mail to root
 
Changed:
<
<
sudo fdisk -l
>
>
Configuration locale :
  • Générale : /usr/share/logwatch/default.conf/logwatch.conf
  • Locale : /etc/logwatch/conf/logwatch.conf
 
Changed:
<
<
# fdisk -l

>
>
Exemples :
 
Changed:
<
<
Disque /dev/sda: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
info sur l'activité sshd d'aujourd'hui :
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 535 4096575 82 Linux swap / Solaris /dev/sda3 536 30401 239898645 83 Linux
>
>
logwatch --service sshd --range=Today
 
Changed:
<
<
Disque /dev/sdb: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
Plus de détails :
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sdb1 * 1 30401 244196001 fd Linux raid autodetect
>
>
logwatch --service sshd --range=Today --detail=Medium (ou High)
 
Changed:
<
<
Disque /dev/sdc: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
Pour créer un fichier au lieu d'un mail : --save=logwatch.today
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sdc1 * 1 30401 244196001 fd Linux raid autodetect
>
>
Bonne config de logwatch.conf :
 
Changed:
<
<
Disque /dev/sdd: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
Range=All (au lieu de "Yesterday") Detail=High Archives=Yes (ajoute les logs des semaines précédentes, pas seulement le log en cours)
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sdd1 * 1 30401 244196001 fd Linux raid autodetect
>
>
Equivalent commande : --range=All --archives
 
Changed:
<
<
Disque /dev/md0: 500.1 Go, 500113080320 octets 2 heads, 4 sectors/track, 122097920 cylinders Unités = cylindres de 8 * 512 = 4096 octets
>
>
Exemple de config sur planetoweb (aug 2010) :
 
Changed:
<
<
Disque /dev/md0 ne contient pas une table de partition valide
>
>
Création d'une config locale /etc/logwatch/conf/logwatch.conf :
Range = All
Detail = High
Archives = Yes
Output = html
Save = /var/www/html/servers/planetoweb/logwatch.html

 
Changed:
<
<
Pour avoir un résultat plus parlant (tailles en octets + système de fichiers) tu peux utiliser cfdisk : sudo cfdisk /dev/sda
>
>
Résultat sur http://planetoweb/servers/planetoweb/logwatch.html
 
Changed:
<
<
L'ext3 c'est en fait de l'ext2 mais avec un "journal" et c'est pour ça qu'il est facile de passer d'ext2 à ext3 et réciproquement.
>
>
swatch
 
Changed:
<
<
Les outils de redimensionnement s'appliquent à de l'ext2 ce qui nécessitera de passer d'ext3 à ext2, redimensionner, puis repasser en ext3
>
>
http://www.linux-mag.com/id/7807
 
Changed:
<
<
http://www.webactus.net/coin-du-geek/linux/2704-linux-augmenter-la-taille-dune-partition-ext3/
>
>
yum install swatch
 
Added:
>
>
[root@planetoweb planetoweb]# rpm -ql swatch
/usr/bin/swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Threshold.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Throttle.pm
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions/autosplit.ix
/usr/share/doc/swatch-3.2.1
/usr/share/doc/swatch-3.2.1/CHANGES
/usr/share/doc/swatch-3.2.1/COPYING
/usr/share/doc/swatch-3.2.1/COPYRIGHT
/usr/share/doc/swatch-3.2.1/KNOWN_BUGS
/usr/share/doc/swatch-3.2.1/README
/usr/share/doc/swatch-3.2.1/examples
/usr/share/doc/swatch-3.2.1/examples/SendMail.pm
/usr/share/doc/swatch-3.2.1/tools
/usr/share/doc/swatch-3.2.1/tools/reswatch
/usr/share/doc/swatch-3.2.1/tools/swatch_oldrc2newrc
/usr/share/man/man1/swatch.1.gz
/usr/share/man/man3/Swatch::Actions.3pm.gz
/usr/share/man/man3/Swatch::Threshold.3pm.gz
/usr/share/man/man3/Swatch::Throttle.3pm.gz
 
Changed:
<
<

Redimensionner une partition (avec gparted)

>
>
/usr/share/doc/swatch
 
Changed:
<
<
http://www.oxygenepc.com/forum/cloner-un-disque-dur-t486.html
>
>
Créer un startup script : vi /etc/init.d/swatch
#!/bin/sh
# Simple Log Watcher Program

 
Changed:
<
<

Copie de disque ou partition avec dd (création d'image "ghost")

>
>
case "$1" in 'start') /usr/bin/swatch --daemon --config-file=/etc/swatch.conf --tail-file=/var/log/auth.log --pid-file=/var/run/swatch.pid ;; 'stop') PID=`cat /var/run/swatch.pid` kill $PID ;; *) echo "Usage: $0 { start | stop }" ;; esac exit 0
 
Changed:
<
<
http://www.oxygenepc.com/forum/cloner-un-disque-dur-t486.html
>
>
chmod 755 /etc/init.d/swatch
 
Changed:
<
<
http://www.linuxquestions.org/linux/answers/Applications_GUI_Multimedia/How_To_Do_Eveything_With_DD
>
>
Make sure swatch starts automatically at my runlevels :
# ln -s /etc/init.d/swatch /etc/rc2.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc3.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc5.d/S99swatch
 
Changed:
<
<
http://www.debianhelp.co.uk/ddcommand.htm
>
>
Créer un fichier de conf /etc/swatch.conf :
watchfor /invalid|repeated|incomplete/
         echo
	 write khess
	 mail addresses=khess@localhost, subject=Authentication Problems
 
Changed:
<
<
The basic command is structured as follows:
>
>
/etc/init.d/swatch start ==> créer un pid dans /var/run/swatch.pid et un fichier /root/.swatch_script.xxxx (avec xxxx = pid - 2)
 
Deleted:
<
<
dd if= of= bs=(usually some power of 2, not less than 512 bytes(ie, 512, 1024, 2048, 4096, 8192, 16384, but can be any number.) skip= seek= conv=.
 
Changed:
<
<
Source is the data being read. Target is where the data gets written. If you mess up, and accidentally reverse the source and target, you can wipe out a lot of data.
>
>

SSH, config plus stricte

 
Changed:
<
<
(http://www.efense.com/helix is a good boot cd : The helix boot environment contains the DoD version of dd called dcfldd. It works the same way, but is has a progress bar)
>
>
vi /etc/ssh/sshd_config

 
Added:
>
>
Port 22 : on pourrait mettre ici un autre port, genre 2010, histoire de brouiller les pirates...
 
Changed:
<
<
Using dd you can create backups of an entire harddisk or just a parts of it. This is also usefull to quickly copy installations to similar machines. It will only work on disks that are exactly the same in disk geometry, meaning they have to the same model from the same brand.
>
>
PermitRootLogin? no
 
Changed:
<
<
Examples:
>
>
LoginGraceTime? 2m changed to : LoginGraceTime? 30
 
Changed:
<
<
  • full hard disk copy
>
>
/etc/init.d/sshd restart
 
Changed:
<
<
dd if=/dev/hdx of=/dev/hdy dd if=/dev/hdx of=/path/to/image dd if=/dev/hdx | gzip > /path/to/image.gz
>
>

Surveiller un serveur

 
Changed:
<
<
Hdx could be hda, hdb etc. In the second example gzip is used to compress the image if it is really just a backup.
>
>
last reboot
 
Changed:
<
<
  • Restore Backup of hard disk copy
>
>
lastlog
 
Changed:
<
<
dd if=/path/to/image of=/dev/hdx
>
>
dmesg
 
Changed:
<
<
gzip -dc /path/to/image.gz | dd of=/dev/hdx
>
>
lspci
 
Changed:
<
<
  • MBR backup
>
>
/var/log/messages

/var/log/boot.log

Voir aussi section suivante (test des disques)

 
Changed:
<
<
In order to backup only the first few bytes containing the MBR and the partition table you can use dd as well.
>
>

Tester les disques durs

 
Changed:
<
<
dd if=/dev/hdx of=/path/to/image count=1 bs=512
>
>
Occupation disques : df -h
[root@hyperion home]# df -h
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/sda3             178G   63G  106G  38% /
/dev/sdb1             2,7T  1,4T  1,3T  52% /data
/dev/sda1              99M   29M   65M  31% /boot
tmpfs                  24G  4,0K   24G   1% /dev/shm
 
Changed:
<
<
  • MBR restore
>
>
cat /proc/partitions
 
Changed:
<
<
dd if=/path/to/image of=/dev/hdx
>
>
cat /etc/mtab
 
Changed:
<
<
Add "count=1 bs=446" to exclude the partition table from being written to disk. You can manually restore the table.
>
>
cat /proc/mounts (equivalent de la commande "mount")
 
Changed:
<
<
  • Copy one hard disk partition to another hard disk:
>
>
cat /proc/scsi/scsi
 
Changed:
<
<
dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror
>
>
Voir aussi si messages d'erreur disques dans /var/log/messsages
 
Changed:
<
<
sda2, sdb2 are partitions. You want to copy sda2 to sdb2. If sdb2 doesn't exist, dd will start at the beginning of the disk, and create it. Be careful with order of if and of. You can write a blank disk to a good disk if you get confused.
>
>
Tester aussi la commande dmesg (equivalent à /var/log/dmesg)
 
Deleted:
<
<
  • Make an iso image of a CD:
 
Changed:
<
<
dd if=/dev/hdc of=/home/sam/mycd.iso bs=2048 conv=notrunc
>
>

Yum

 
Changed:
<
<
CD sectors are 2048 bytes, so this copies sector for sector. The result will be a hard disk image file of the CD. You can use "chmod a+rwx mycd.iso" to make the image writable. You can mount the image with "mkdir /mnt/mycd", this line in fstab: "/home/sam/mycd.iso /mnt/mycd iso9660 rw,user,noauto 0 0", save fstab, "mount -o loop /mnt/mycd". Then the file system will be viewable as files and directories in the directory /mnt/mycd. You can edit the image as you wish, and the new file will be "/home/sam/mycd.iso" dd does not write to CD's. You need to use a burning utility, or the cdrdao command
>
>
Annuler l'information sur les updates disponibles :
 
Changed:
<
<
  • Cloning an entire hard disk:
>
>
/etc/init.d/yum-updatesd stop
 
Changed:
<
<
dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror
>
>
su -c 'chkconfig --level 2345 yum-updatesd off'
 
Changed:
<
<
In this example, sda is the source. sdb is the target. Do not reverse the intended source and target. Surprisingly many people do. notrunc means to not truncate. noerror means to keep going if there is an error. Normally dd stops at any error. if you have a question about a hard drive on whether or not it works, you can try to use it as the source drive for the dd command. You should get an error if it is not working. target drives need to be really messed up to give an error in dd.
>
>
Every other workaround seems to only kill yum-updatesd for runlevel 5.
 
Changed:
<
<
  • Copy MBR only of a hard drive:
>
>
Try yum update after that.
 
Changed:
<
<
dd if=/dev/sda of=/home/sam/MBR.image bs=446 count=1
>
>
Keep in mind that you will no longer be informed that there updates available and as such you will need to check periodically with yum check-update
 
Changed:
<
<
this will copy the first 446 bytes of the hard drive to a file. If you haven't already guessed, reversing the objects of if and of, in the dd command line reverses the direction of the write.
>
>
Quels sont les packages commençant par "mesa-" installés + à installer ? --> yum list mesa-*
 
Deleted:
<
<
  • Back up your MBR
 
Deleted:
<
<
dd if=/dev/sda of=mbr.bin count=1
 
Changed:
<
<
Put this on a floppy you make with
>
>

Samba

 
Changed:
<
<
dd if=boot.img of=/dev/fd0
>
>
Créer un new user "toto" : sbmpasswd -a toto
 
Changed:
<
<
Along with dd. Boot from the floppy and
>
>
Mettre à jour le pass de "toto" : smbpasswd toto
 
Changed:
<
<
dd if=mbr.bin of=/dev/sda count=1
>
>
Est-ce que samba est à l'écoute ? : service smb status
 
Changed:
<
<
Will restore the MBR
>
>
Redémarrer samba : service smb restart
 
Changed:
<
<
  • Copy a disk partition to a file on a different partition (Do not copy a partition to the same partition)
>
>
Depuis le poste client windows :
 
Changed:
<
<
dd if=/dev/sdb2 of=/home/sam/partition.image bs=4096 conv=notrunc,noerror
>
>
clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"
 
Changed:
<
<
This will make a file that is an exact duplicate of the sdb2 partition. You can substitue hdb, sda, hda, or whatever the disk is called.
>
>
Corriger un bug sur Mac Leopard (pas sur Tiger) : samba ne suit pas les liens qui vont vers un disque différent
 
Changed:
<
<
  • Restore a disk partition from an image file.
>
>
Pour corriger ce bug, il suffit d'ajouter cette ligne dans la partie "[global]" du smb.conf :
 
Changed:
<
<
dd if=/home/sam/partition.image of=/dev/sdb2 bs=4096 conv=notrunc,noerror
>
>
unix extensions = no
 
Deleted:
<
<
This way you can get a bazonga hard drive and partition it so you can back up your root partition. If you mess up your root partition, you just boot from the helix cd and restore the image.
 
Deleted:
<
<

Copie de disque ou partition (image "ghost") avec partimage (SystemRescueCd)

 
Deleted:
<
<
J'ai un disque qui montre des faiblesses
 
Changed:
<
<
Je veux le remplacer par un nouveau disque
>
>

 
Changed:
<
<
Je dois donc faire une image du disque et la copier ensuite sur le nouveau disque
>
>

WINDOWS

 
Changed:
<
<
1) Télécharger une ISO de SystemRescueCd (x86)
>
>

Se connecter à un serveur linux en mode graphique

 
Changed:
<
<
http://www.sysresccd.org/Download
>
>
Il s'agit ici de récupérer le bureau complet d'un serveur linux distant sur l'écran de mon pc Windows (ou Linux) depuis le boulot (ou la maison).
 
Changed:
<
<
2) Vérifier le checksum de cette ISO
>
>
1) L'administrateur du serveur linux doit y avoir installé freenx (yum install freenx)
 
Changed:
<
<
md5sum systemrescuecd-x86-2.1.1.iso
>
>
C'est fait pour hyperion
 
Changed:
<
<
Pour faire ça depuis Windows, télécharger md5deep (http://sourceforge.net/projects/md5deep/files/md5deep/md5deep-1.12/md5deep-1.12.zip/download)
>
>
2) Installer sur mon pc Windows (ou linux) un client de connexion au serveur freenx
 
Changed:
<
<
Il contient md5sum, que l'on peut appeler sous Dos : md5sum systemrescuecd-x86-2.1.1.iso
>
>
Pour Windows, télécharger et installer "NX client for Windows" ici : http://www.nomachine.com/download.php
 
Changed:
<
<
3) Créer un DVD à partir de cette ISO
>
>
(ou NX client for Linux pour un pc linux)
 
Changed:
<
<
4) Identifier les partitions du disque à copier (avec df, fdisk, et /proc/partitions)
>
>
(Si nécessaire, voici les instructions d'installation pour le client Windows : http://www.nomachine.com/documents/client/install.html#2)
 
Changed:
<
<
Dans mon cas, c'était le disque système qui montrait des faiblesses
>
>
3) Exemple : Configurer une session graphique vers hyperion (depuis le boulot)
 
Changed:
<
<
Il s'appelle /dev/sda et contient 3 partitions
>
>
Démarrer le "NX Connection Wizard" (un des programmes installés avec le client)
 
Changed:
<
<

>
>
Cliquer sur Next
 
Changed:
<
<
# df -h Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/sda3 222G 18G 193G 9% / /dev/sda1 190M 18M 163M 10% /boot ...
>
>
  • Session : donner un nom à votre session graphique (par exemple "connexion à hyperion depuis le boulot")
 
Added:
>
>
  • Host : hyperion.cesr.fr (port 22)
 
Changed:
<
<
# fdisk -l
>
>
Cliquer sur Next
 
Changed:
<
<
Disque /dev/sda: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
  • Sélectionner "Unix" et "GNOME"
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 535 4096575 82 Linux swap / Solaris /dev/sda3 536 30401 239898645 83 Linux
>
>
<-- 
  • Cocher "Disable encryption of all traffic" (pour accélerer la connexion)
-->
 
Changed:
<
<
Disque /dev/sdb: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
Cliquer sur Next
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sdb1 * 1 30401 244196001 fd Linux raid autodetect
>
>
  • Cocher "Create shortcut on desktop"
 
Changed:
<
<
Disque /dev/sdc: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
Cliquer sur Next
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sdc1 * 1 30401 244196001 fd Linux raid autodetect
>
>
Une fenetre de connexion s'affiche (que vous pourrez relancer à loisir en cliquant sur votre raccourci bureau portant le nom de votre session)
 
Changed:
<
<
Disque /dev/sdd: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets
>
>
Cliquer sur "Configure"
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sdd1 * 1 30401 244196001 fd Linux raid autodetect
>
>
  • Cocher "Remember my password"
 
Changed:
<
<
Disque /dev/md0: 500.1 Go, 500113080320 octets 2 heads, 4 sectors/track, 122097920 cylinders Unités = cylindres de 8 * 512 = 4096 octets
>
>
  • Cliquer sur le bouton Key et y coller l'intégralité de la clé publique suivante à la place de la clé courante :
 
Changed:
<
<
Disque /dev/md0 ne contient pas une table de partition valide
>
>
(pour info, cette clé provient du fichier /etc/nxserver/client.id_dsa.key dans l'installation du serveur freenx)
 
Added:
>
>
Par soucis de sécurité, je ne diffuse pas la clé ici (vous l'avez reçue par mail)
 
Changed:
<
<
# fdisk /dev/sda ...
>
>
  • cliquer sur "Save", puis "Ok" pour revenir à la fenêtre de connexion
 
Changed:
<
<
Commande (m pour l'aide): p
>
>
Entrer votre login/pass pour hyperion
 
Changed:
<
<
Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 535 4096575 82 Linux swap / Solaris /dev/sda3 536 30401 239898645 83 Linux
>
>
Cliquer sur "Login"
 
Changed:
<
<
# cat /proc/partitions major minor #blocks name
>
>
Et voilà !
 
Changed:
<
<
  1. 0 244198584 sda
  2. 1 200781 sda1
  3. 2 4096575 sda2
  4. 3 239898645 sda3
  5. 16 244198584 sdb
  6. 17 244196001 sdb1
  7. 32 244198584 sdc
  8. 33 244196001 sdc1
  9. 48 244198584 sdd
  10. 49 244196001 sdd1
  11. 0 488391680 md0
>
>
(Lorsque votre bureau hyperion s'affiche, répondre à la question posée en choisissant "GNOME")
 
Added:
>
>
Si le clavier est qwerty, pour passer à un clavier azerty :
 
Changed:
<
<
# cat /etc/fstab
>
>
  • aller dans le menu Système / Préférences / Clavier
  • cliquer sur onglet "Agencements"
  • cliquer sur bouton "+ Ajouter"
  • sélectionner France puis cliquer sur Valider
  • sélectionner France puis cliquer sur "Vers le haut"
  • cliquer sur bouton "X Fermer"
 
Changed:
<
<
LABEL=/ / ext3 defaults 1 1 LABEL=/boot1 /boot ext3 defaults 1 2 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs defaults 0 0 /dev/md0 /home ext3 defaults 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 LABEL=SWAP-sda2 swap swap defaults 0 0 /dev/cdrom /media/cdrom udf,iso9660 user,noauto,exec 0 0
>
>
(Plus d'information sur la configuration du client ici : http://www.nomachine.com/documents/configuration/client-guide.php)
 
Changed:
<
<
>
>
(pour savoir qui est connecté : ps -efl|grep NX)
 
Changed:
<
<

Virtualisation

>
>
4) C'est très bien tout ça, mais comment je fais depuis chez moi ???
 
Changed:
<
<
La virtualisation consiste à faire cohabiter plusieurs (VM) machines "virtuelles" (OS) sur une même machine physique
>
>
C'est un peu plus compliqué car il faut installer un tunnel qui passe par le GATEWAY LABO.
 
Changed:
<
<
Prérequis :
>
>
a) Creuser un tunnel
 
Changed:
<
<
  • Les processeurs doivent être virtualisables (cpuinfo doit contenir le flag vmx pour un processeur intel, et svm pour AMD) : egrep '(vmx|svm)' /proc/cpuinfo
>
>
Sur Windows, on crée le tunnel avec le logiciel Putty
 
Changed:
<
<
  • RAM : au moins 8Go (pour 2 VM)
>
>
Exécuter Putty
 
Changed:
<
<
  • Disques :
    • au moins 2x500Go (en raid1 par exemple)
    • bonne config type :
      • 2 disques raid1 pour le système de base
      • 3 disques raid5 avec un LVM dessus pour stocker les images disques des VM
>
>
Si vous avez déjà une session vers GATEWAY, inutile d'en recréer une autre, vous pouvez l'utiliser. Sinon, il faut créer une nouvelle session :
 
Added:
>
>
Host name : GATEWAY
 
Changed:
<
<

Serveur de gestion de versions (de code source) SUBVERSION

>
>
Port : 22
 
Changed:
<
<
http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN
>
>
Saved Sessions : GATEWAY (ou ce que vous voulez, par exemple "le GATEWAY du LABO")
 
Changed:
<
<

Connexion X11

>
>
Dans le panneau de gauche (Category:), cliquer sur l'arbre "Connection", puis "SSH", puis "Tunnels"
 
Changed:
<
<
http://en.wikipedia.org/wiki/X_display_manager
>
>
(si vous avez déjà un ou plusieurs tunnels créés, pas de problème, vous pouvez en ajouter un de plus)
 
Changed:
<
<
http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture
>
>
Source Port : 9022
 
Changed:
<
<
http://tldp.org/HOWTO/XDMCP-HOWTO/intro.html
>
>
Destination : hyperion.cesr.fr:22
 
Changed:
<
<
Le serveur X tourne localement sur mon pc (win ou lin), c'est à dire le pc avec un écran (output), un clavier et une souris (inputs).
>
>
Cliquer sur bouton "Add"
 
Changed:
<
<
Il se connecte à un display manager (xdm ou gdm ou kdm...) qui peut être local ou distant (sur un autre pc) :
  • Si le DM est local, il démarre un ou plusieurs serveurs X, affiche l'écran de connexion (login) au démarrage et chaque fois qu'un user se délogge.
  • Si le DM est distant, il est utilisé via le protocole XDMCP : un user lance des programmes depuis le pc distant (qui exécute le DM) alors que ses input/output se passent sur son pc local.
>
>
Dans le panneau de gauche (Category:), cliquer sur l'arbre "Session"
 
Changed:
<
<
Ainsi, le serveur X (local) communique avec différents clients graphiques (qui peuvent être distants) à qui il envoit les inputs et de qui il reçoit les outputs.
>
>
Cliquer sur bouton "Save"
 
Changed:
<
<
Pour CentOS, le DM par défaut est sélectionné dans /etc/X11/prefdm (qui regarde si un DM par défaut est donné dans /etc/sysconfig/desktop)
>
>
Ouvrir cette session (GATEWAY) que vous venez de créer, et se connecter sur GATEWAY (avec votre mot de passe mail).
 
Deleted:
<
<
C'est le fichier /etc/X11/xinit/Xsession qui exécute notre environnement.
 
Changed:
<
<
xdm : voir /etc/X11/
>
>
b) Créer une session graphique
 
Changed:
<
<
kdm : voir /etc/kdm/
>
>
Suivre toutes les étapes du point 3) mais en remplaçant "hyperion.cesr.fr (port 22)" par "localhost (port 9022)"
 
Changed:
<
<
gdm : voir /etc/gdm/ Il devrait s'y trouver un gdm.conf
>
>
Ya pu ka tester !
 
Deleted:
<
<
gdm appelle /etc/X11/xinit/Xsession avec les bonnes options
 
Deleted:
<
<
http://projects.gnome.org/gdm/docs/gdmtalk.pdf
 
Deleted:
<
<
Attention, X et XDMCP sont tous les 2 non sécurisés !!!
 
Deleted:
<
<
Vérifier /etc/resolv.conf
 
Deleted:
<
<
Vérifier /etc/init.d/xfs (font server)
 
Deleted:
<
<
Vérifier que dans /etc/inittab, le default runlevel est bien 5 :
 
Deleted:
<
<
id:5:initdefault:
 
Deleted:
<
<
Vérifier /etc/X11/xorg.conf
 
Deleted:
<
<
Sur serveur boulot, on voit bien que c'est gdm qui tourne :
 
Deleted:
<
<
[root@hyperion xinit]# ps -efl|grep gdm
4 S root      3815     1  0  76   0 - 41936 429493  2010 ?        00:00:00 /usr/sbin/gdm-binary -nodaemon
5 S root      3917  3815  0  76   0 - 48714 pipe_w  2010 ?        00:00:00 /usr/sbin/gdm-binary -nodaemon
4 S root      3919     1  0  77   0 - 47464 304555  2010 ?        00:00:04 /usr/libexec/gdm-rh-security-token-helper
4 S root      3920  3917  0  75   0 - 22128 -       2010 tty7     00:03:08 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7
4 S gdm       3946  3917  0  75   0 - 56317 -       2010 ?        00:00:02 /usr/libexec/gdmgreeter
 
Deleted:
<
<
Log de X : /var/log/Xorg.0.log
 
Deleted:
<
<
Config de X : /etc/X11/xorg.conf
 
Changed:
<
<

BOOT LINUX

>
>

Visualiser les fichiers Postscript

 
Changed:
<
<
I - Le boot : tryptique noyau, arguments, et ramdisk
Synthèse du workflow : bootloader ==> noyau + initramfs + arguments ==> montage de la racine
>
>
Installer GhostScript (engine) puis GhostView (frontend)
 
Changed:
<
<
1) Chargeur de boot (bootloader)
C'est le 1er prog à s'exécuter. Différent selon les architectures (pc x86, station Sun, Mac PPC...) Rôle: mettre en RAM le noyau (kernel), lui passer des arguments, copier un ramdisk en RAM, et passer la main au noyau Ex: lilo, grup, outils syslinux (bien adapté à partifion FAT, clé usb, cd) Etapes : - allumage électrique - POST (Power On Self Test) - BIOS (dans lequel le periph d'amorçage est défini) - lancement bootloader installé sur periph amorcé Ex: noyau grub, /boot/bzImage-2.6 Ex: ramdisk grub, /boot/initrd.img
>
>
http://pages.cs.wisc.edu/~ghost/
 
Changed:
<
<
2) Le noyau
Rôle : monter la racine et lancer /sbin/init situé dessus Au boot, le noyau décourvre son environnement (ram, cpu, disque...). Ces périph sont gérés par des pilotes (drivers), des "modules" qui sont compilés dans le noyau ou dans des fichiers externes (souvent dans /lib/modules/). Les fichiers modules sont situés sur une partition qui n'est pas encore montée, et donc les périph correspondants ne peuvent pas être utilisés. Le noyau monte sa racine avec /bin/mount ex: montage de /dev/sda1 en lecture seule avec sys de fichier ext4 $ mount -t ext4 -o ro /dev/sda1 / Les arguments passés au noyau peuvent être relus après boot : $ cat /proc/cmdline On peut aussi passer l'argument "init=/bin/bash" pour accéder au système au démarrage avec un shell bash.
>
>

Convertir un fichier Postscript en JPEG (ou autre) avec GhostScript (en mode batch)

 
Changed:
<
<
3) Le ramdisk initial : initramfs
Rôle : permettre une détection plus intelligente de la racine ainsi qu'une facilité de configuration. S'appelait initrd, mais est de plus en plus remplacé par initramfs L'initramsf est un ensemble de fichiers qui vont être directement copiés dans le cache de système de fichiers sous la racine (tous les sys 2.6 utilisent un rootfs, cf "cat /proc/mounts"). Il doit au moins contenir un programme /init exécutable que le noyau va lancer pour qu'il trouve la racine et la monte. C'est un microsystème linux à part entière. Le prog /init est souvent un script shell, simple à lire. Avec un initramfs, il devient possible de conserver un noyau minimal et de mettre les modules essentiels au boot dans l'initramfs (évite de devoir recompiler le noyau). Il contient aussi l'image qui permet un affichage graphique pendant le boot. /init parse donc la ligne /proc/cmdline, cherche la racine, et la monte pour ensuite basculer le noyau dessus, et enfin s'autoremplace par le vrai binaire /sbin/init.
>
>
Pour info, sur Linux, c'est très simple, il suffit d'utiliser la commande "convert" (ou plus spécifique "ps2...")
 
Changed:
<
<
II - init et inittab
>
>
Sous Windows, c'est un peu plus compliqué.
 
Changed:
<
<
Arrivé à ce point, la noyau tourne, la racine de la distrib est montée (souvent en "ro") et le binaire /sbin/init est lancé, premier processus.
>
>
GhostScript converts PS to PNG, JPEG, PNM, TIFF, BMP, PCX, PSD, PDF, EPS, PCL-XL.
 
Changed:
<
<
Si ce processus meurt (pid=1), le noyau fait un kernel panic. Il est aussi responsable de l'extinction de la machine. Si on passe au noyau l'argument "init=/bin/bash", seul "bash" est lancé (à la place de /sbin/init) et on a ainsi un accès root sur la racine (utile pour réparer une distrib, ou modifier mot passe root dans /etc/shadow)
>
>
1) Télécharger la version Windows de GhostScript et l'installer
 
Changed:
<
<
/sbin/init a pour fichier de conf, /etc/inittab : décrit les processus lancés au démarrage et à surveiller durant le fonctionnement normal du système. Init à 7 runlevels (0=stop, ..., 6=reboot). Runlevel 1 est pour la maintenance (nb minimum de processus et user root only). Chaque ligne est composée de 4 paramètres : référence:runlevel:manière de lancer la commande:commande Runlevel par défaut (ici, le 3): id:3:initdefault: On peut modifier ça avec un argument au noyau, par ex: root=/dev/hda2 ro 1 Runlevel courant ? $ runlevel Changer de runlevel ? $ init n
>
>
http://pages.cs.wisc.edu/~ghost/
 
Changed:
<
<
sysinit est lancé au boot, mais avant les cdes boot: si::sysinit:/etc/rc.d/rc.sysinit
>
>
ou encore:
 
Changed:
<
<
reset: ca::ctrlaltdel:/sbin/shutdown -t3 -r now
>
>
http://ghostscript.com/releases/
 
Changed:
<
<
wait, lance un process et attend sa fin pour continuer: l5:5:wait:/etc/rc.d/rc 5
>
>
2) Ajouter le dossier exécutable de GhosScript dans votre PATH windows
 
Changed:
<
<
respawn, relance le process quand il se termine (ex: les gettys texte, alt-F1... relancés dès qu'on se délogue) 5:2345:respawn:/sbin/mingetty tty5
>
>
set PATH=%PATH%;C:\Program Files\gs\gs9.00\bin
 
Changed:
<
<
Relecture de inittab après modif ? kill -HUP 1
>
>
3) Exemple de conversion d'un fichier PS en JPG:
 
Changed:
<
<
inittab lance des script rc (run command) de 2 façons selon les familles de systèmes linux :
  • façon systemV (RedHat et Debian)
  • façon BSD (slackware)
>
>
Aller dans le dossier qui contient le fichier PS (somefile.ps) à convertir (cd ...)
 
Changed:
<
<
Voyons ici la façon SystemV (plus élaborée que BSD)
>
>
L'instruction suivante créera un fichier somefile.jpg dans c:\temp :
 
Changed:
<
<
en fait, inittab lance le script rc général et lui passe le runlevel en argument: l5:5:wait:/etc/rc.d/rc 5 rc va lancer les scripts du runlevel associé, dans l'ordre alpha. /etc/rc.d/ contient un dossier rcN.d/ par runlevel (N) ex: /etc/rc.d/rc5.d/ Ce dossier contient simplement des liens vers les scripts de /etc/init.d/ (qui doivent accepter au moins les arguments "start" et "stop") Ces liens sont préfixés par S (Start) ou K (Kill). Quand on entre dans un runlevel, tous les liens S* de ce runlevel sont exécutés (dans l'ordre alpha) Quand on sort d'un runlevel, tous les liens K* de ce runlevel sont exécutés Ex: S85httpd lancera "/etc/init.d/httpd start" Un lien /etc/rc.d/rc5.d/S42foobar sera exécuté à l'entrée du runlevel 5, et appellera /etc/init.d/foobar start Il sera exécuté avant l'appel de S95barqux Sur RedHat, seul le runlevel 5 lance X : x:5:respawn:/etc/X11/prefdm -nodaemon
>
>
gswin32c -sDEVICE=jpeg -o c:\temp\somefile.jpg somefile.ps
 
Changed:
<
<
Le dernier script à être lancé est /etc/rc.d/rc.local (on peut y mettre tout ce qu'on veut voir exécuter au boot) Le prog update-rc.d peut être utilisé pour activer/désactiver des scripts au démarrage.
>
>
Pour plus d'information sur les possibilités de GhostScript : http://pages.cs.wisc.edu/~ghost/doc/cvs/Use.htm
 
Changed:
<
<
Ubuntu propose Upstart en remplacement du couple init/inittab MacOS propose un "super-daemon" launchd qui regroupe les fonctionnalités de init (lance démon lors du démarrage), crond (lance démon lors de top horaires), et (x)inetd (lance démon lors de requêtes réseaux)
>
>
REMARQUE : pour faire la même chose en mode graphique, il existe une interface graphique qui s'installe par-dessus GhostScript (en frontend), c'est GhostView (gsview) :
 
Added:
>
>
http://pages.cs.wisc.edu/~ghost/gsview/index.htm
 
Deleted:
<
<

FTP

 
Deleted:
<
<
ex: installation ftp pour l'expérience RAMAN (sur ExoMars)
 
Deleted:
<
<
http://www.obs-mip.fr/index.php/fre/recherche/techniques-missions-spatiales/Exomars-RAMAN
 
Deleted:
<
<
  • Mission
 
Deleted:
<
<
La mission ExoMars, de l’Agence Spatiale Européenne (ESA), est une mission du programme Aurora. Son objectif est de caractériser l’environnement biologique martien pour préparer l’exploration humaine de la planète rouge.
 
Deleted:
<
<
  • Instrument LABO
 
Changed:
<
<
EXLIBRIS serait capable d’effectuer une ablation des roches puis l’analyse de la composition de cette roche à la fois en chimie élémentaire (ultra-violet), en minéraux et composés organiques (Raman). Le LABO serait responsable de la partie LIBS (ultra-violet) et de la calibration de l’instrument. F. Rull Pérez (Centro de Astrobiologia , Espagne) serait en charge de la partie Raman. Contexte de réalisation
>
>

Migrer de Windows XP vers Windows 7

 
Changed:
<
<
Mission ESA : Tir prévu en 2013.
>
>
Il faut acheter la licence Microsoft. La démarche dépend de la marque du PC.
 
Changed:
<
<
Voir en ligne (Site Officiel d’ExoMars à l’ESA) : http://www.esa.int/esaSC/SEMGB7MJ74G_index_0.html
>
>
Pour un hp : aller sur le site hp et rechercher "windows upgrade"
 
Changed:
<
<
  • Installation ftp
>
>
Modèles éligibles : http://h41112.www4.hp.com/promo/win7web/fr/fr/eligmodels.html
 
Changed:
<
<
Ajout 2 users ftpread et ftpw (groupe ftpgroup) dans /etc/passwd (et /etc/shadow), et leur donner pour home /projects/raman/ftp/files
>
>
http://welcome.hp.com/country/fr/fr/mda/windows7/upgrade/which_version.html?jumpid=reg_R1002_FRFR
 
Changed:
<
<
Leur attribuer un pass via "password"
>
>
http://h41112.www4.hp.com/promo/win7web/fr/fr/
 
Deleted:
<
<
Leur donner un accès exclusif a leur home:
 
Deleted:
<
<
chown ftpw:ftpgroup /projects/raman/ftp/files/
 
Deleted:
<
<
Faire en sorte que ftpread n'est qu'un accès en lecture seule (via son groupe ftpgroup) :
 
Changed:
<
<
chmod 755 /projects/raman/ftp/files/ --> "rwxr-xr-x"
>
>

Envoyer des mails avec Outlook quand on n'est pas au LABO

 
Deleted:
<
<
Les autoriser en les ajoutant dans dans /etc/vsftpd/user_list
 
Changed:
<
<
(chroot doit être activé par défaut pour tous les users internes)
>
>
1) "Creuser" un tunnel avec Putty
 
Changed:
<
<
/etc/init.d/vsftpd restart
>
>
Créer une nouvelle session que vous appelerez par exemple "tunnel_mail_LABO", et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail LABO (GATEWAY).

La procédure est décrite sur la faq informatique du LABO : http://www1.cesr.fr/intranet/informatique/faq/ssh-tunnels/ssh.htm#_Toc150503764 (Exemple 1, cas numéro 2)

 
Added:
>
>
Il faudra lancer cette session (et la garder ouverte en tâche de fond) avant d'envoyer un mail
 
Added:
>
>
2) Configurer votre client mail Outlook
 
Added:
>
>
  • Menu Outils/Paramètres du compte
  • Clic sur bouton "Modifier"
  • Dans le champ "Serveur de courrier sortant (SMTP)", remplacer "mailhost.cesr.fr" par "localhost"
  • Clic sur bouton "Paramètres supplémentaires...", clic sur onglet "Options avancées"
  • Dans le champ "Serveur Sortant (SMTP)", remplacer "25" par "9025"
 
Added:
>
>
Bien sûr, il faut tout remettre en place quand on revient au LABO (en fait, on pourrait aussi fonctionner en permanence avec le tunnel, même au LABO...)
 
Added:
>
>

Synchroniser Outlook 2007 Calendar et Google Calendar

 
Changed:
<
<

LOGS

>
>
http://content.techrepublic.com.com/2346-10877_11-191016.html
 
Deleted:
<
<
/var/log
 
Changed:
<
<
auth.log ou secure (sur Redhat)
>
>

Installer un serveur X sur Windows pour afficher les fenêtres graphiques de linux

 
Changed:
<
<
Outil de visualisation graphique des logs : gnome-system-log
>
>
On propose d'utiliser Xming qui est un serveur X gratuit pour Windows
 
Changed:
<
<
Common Linux log files name and usage :
    /var/log/message: General message and system related stuff
    /var/log/auth.log: Authenication logs
    /var/log/kern.log: Kernel logs
    /var/log/cron.log: Crond logs (cron job)
    /var/log/maillog: Mail server logs
    /var/log/qmail/ : Qmail log directory (more files inside this directory)
    /var/log/httpd/: Apache access and error logs directory
    /var/log/lighttpd: Lighttpd access and error logs directory
    /var/log/boot.log : System boot log
    /var/log/mysqld.log: MySQL database server log file
    /var/log/secure: Authentication log
    /var/log/utmp or /var/log/wtmp : Login records file
    /var/log/yum.log: Yum log files
>
>
Il suffit d'éxécuter Xming avant de lancer une session graphique via putty (ou autre shell)
 
Changed:
<
<
In short /var/log is the location where you should find all Linux logs file. However some applications such as httpd have a directory within /var/log/ for their own log files. You can rotate log file using logrotate software and monitor logs files using logwatch software.
>
>
Installation : http://sourceforge.net/projects/xming
 
Added:
>
>
Cliquer sur Download
 
Changed:
<
<
logrotate
>
>
1) Installer Xming
 
Changed:
<
<
/etc/logrotate.conf
>
>
2) Installer Xming-fonts (surtout nécessaire pour Emacs)
 
Deleted:
<
<
/etc/logrotate.d/
 
Deleted:
<
<
Forcer une rotation :
 
Deleted:
<
<
sudo logrotate -f /etc/logrotate.conf
 
Changed:
<
<
==> new file "messages", "messages" devient "messages1", "messages1" devient "messages2"...
>
>

HARDWARE

 
Changed:
<
<
logwatch
>
>

Disques SATA

 
Deleted:
<
<
by default, runs daily on yesterday's logs (/etc/cron.daily/0logwatch qui pointe sur /usr/share/logwatch/scripts/logwatch.pl), includes all services, and sends a mail to root
 
Changed:
<
<
Configuration locale :
  • Générale : /usr/share/logwatch/default.conf/logwatch.conf
  • Locale : /etc/logwatch/conf/logwatch.conf
>
>
Les jumper sur les disque sata ne sont pas la pour specifier si le disque est slave, master ou en cable select
 
Changed:
<
<
Exemples :
>
>
mais pour pouvoir brider le disque en sata1 ( dans certain cas ca peut resoudre un probleme de compatibilité)
 
Changed:
<
<
info sur l'activité sshd d'aujourd'hui :
>
>
3178-1.gif
 
Changed:
<
<
logwatch --service sshd --range=Today
>
>
donc pas de jumper = sata2 , le jumper est mis = sata1
 
Changed:
<
<
Plus de détails :
>
>
Comme il est mis la il est en sata 1 donc bridé à 150Mo/sec Si on l'enlève on passe en sata2 donc 375Mo/sec
 
Changed:
<
<
logwatch --service sshd --range=Today --detail=Medium (ou High)
>
>
Mais comme ton disque ne doit pas dépasser 100Mo/sec tu ne veras pas du tout la difference
 
Deleted:
<
<
Pour créer un fichier au lieu d'un mail : --save=logwatch.today
 
Deleted:
<
<
Bonne config de logwatch.conf :
 
Deleted:
<
<
Range=All (au lieu de "Yesterday") Detail=High Archives=Yes (ajoute les logs des semaines précédentes, pas seulement le log en cours)
 
Changed:
<
<
Equivalent commande : --range=All --archives
>
>

GWIS

 
Changed:
<
<
Exemple de config sur planetoweb (aug 2010) :
>
>
(should be later moved to : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject)
 
Changed:
<
<
Création d'une config locale /etc/logwatch/conf/logwatch.conf :
Range = All
Detail = High
Archives = Yes
Output = html
Save = /var/www/html/servers/planetoweb/logwatch.html
>
>
Réalisation d'un site web générique de projet en s'inspirant du site Europlanet : GWIS (Generic Web Information System)
 
Changed:
<
<
Résultat sur http://planetoweb/servers/planetoweb/logwatch.html
>
>
Il s'agit de concevoir un système d'information web professionnel à l'aide d'un framework Php nommé Cakephp (http://cakephp.org)
 
Changed:
<
<
swatch
>
>
Pour cakephp, voir aussi http://bakery.cakephp.org/
 
Changed:
<
<
http://www.linux-mag.com/id/7807
>
>
Nouvelle version 2.1.1 sortie le 26/3/12 : http://bakery.cakephp.org/articles/lorenzo/2012/03/26/cakephp_2_1_1_and_1_3_15_released
 
Changed:
<
<
yum install swatch
>
>
Version 2.1.0 sortie le 5/3/12
 
Changed:
<
<
[root@planetoweb planetoweb]# rpm -ql swatch
/usr/bin/swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Threshold.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Throttle.pm
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions/autosplit.ix
/usr/share/doc/swatch-3.2.1
/usr/share/doc/swatch-3.2.1/CHANGES
/usr/share/doc/swatch-3.2.1/COPYING
/usr/share/doc/swatch-3.2.1/COPYRIGHT
/usr/share/doc/swatch-3.2.1/KNOWN_BUGS
/usr/share/doc/swatch-3.2.1/README
/usr/share/doc/swatch-3.2.1/examples
/usr/share/doc/swatch-3.2.1/examples/SendMail.pm
/usr/share/doc/swatch-3.2.1/tools
/usr/share/doc/swatch-3.2.1/tools/reswatch
/usr/share/doc/swatch-3.2.1/tools/swatch_oldrc2newrc
/usr/share/man/man1/swatch.1.gz
/usr/share/man/man3/Swatch::Actions.3pm.gz
/usr/share/man/man3/Swatch::Threshold.3pm.gz
/usr/share/man/man3/Swatch::Throttle.3pm.gz
>
>
Version en cours : http://cakephp.lighthouseapp.com/projects/42648-cakephp/milestones/current
 
Changed:
<
<
/usr/share/doc/swatch
>
>
Roadmaps (pas très à jour) :
 
Changed:
<
<
Créer un startup script : vi /etc/init.d/swatch
#!/bin/sh
# Simple Log Watcher Program

>
>
Code completion for cakephp in Eclipse : http://mark-story.com/posts/view/code-completion-for-cakephp-in-eclipse
 
Changed:
<
<
case "$1" in 'start') /usr/bin/swatch --daemon --config-file=/etc/swatch.conf --tail-file=/var/log/auth.log --pid-file=/var/run/swatch.pid ;; 'stop') PID=`cat /var/run/swatch.pid` kill $PID ;; *) echo "Usage: $0 { start | stop }" ;; esac exit 0
>
>

ROADMAP (PLAN OF WORK, CAHIER DES CHARGES)

 
Changed:
<
<
chmod 755 /etc/init.d/swatch
>
>
Ne pas oublier de noter tout ce que tu fais. Rédige au fur et à mesure (avec OpenOffice).
 
Changed:
<
<
Make sure swatch starts automatically at my runlevels :
# ln -s /etc/init.d/swatch /etc/rc2.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc3.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc5.d/S99swatch
>
>
NOUVELLES MODIFS FAITES :
 
Changed:
<
<
Créer un fichier de conf /etc/swatch.conf :
watchfor /invalid|repeated|incomplete/
         echo
	 write khess
	 mail addresses=khess@localhost, subject=Authentication Problems
>
>
4 juin :
  • VII-3 c) relation 1-1
 
Changed:
<
<
/etc/init.d/swatch start ==> créer un pid dans /var/run/swatch.pid et un fichier /root/.swatch_script.xxxx (avec xxxx = pid - 2)
>
>
16 mai :
  • IX-5
  • X - Documentation
 
Added:
>
>
15 mai :
  • IX-2 et 3
 
Changed:
<
<

SSH, config plus stricte

>
>
14 mai :
  • IX-1
  • VI-4
 
Changed:
<
<
vi /etc/ssh/sshd_config

>
>
3 mai :
 
Changed:
<
<
Port 22 : on pourrait mettre ici un autre port, genre 2010, histoire de brouiller les pirates...
>
>
  • section VI-3 (lost password)
 
Changed:
<
<
PermitRootLogin? no
>
>
  • section IX-1 (logout)
 
Changed:
<
<
LoginGraceTime? 2m changed to : LoginGraceTime? 30
>
>
5 Avril :
 
Changed:
<
<
/etc/init.d/sshd restart
>
>
  • section VII-3 (crud)
 
Changed:
<
<

Surveiller un serveur

>
>
Plus tard :
 
Changed:
<
<
last reboot
>
>
  • (pas encore sûr, à réfléchir) ajouter un script qui permet de définir un tableau de champs obligatoires pour un Modèle donné ==> Ces champs devront obligatoirement être saisis dans les vues associées au Modèle (voir http://book.cakephp.org/1.3/view/1147/required)
 
Deleted:
<
<
lastlog
 
Changed:
<
<
dmesg
>
>
I - Installation des outils
 
Changed:
<
<
lspci
>
>
Serveur web+php+mysql Xampp : Télécharger et installer un serveur web apache/php/mysql avec xampp pour windows, c'est très facile : http://www.apachefriends.org/fr/xampp-windows.html
 
Changed:
<
<
/var/log/messages
>
>
Framework php CakePhp : Télécharger et installer cakephp, la version 2.1 (la plus récente, bientôt officielle)
 
Changed:
<
<
/var/log/boot.log
>
>
IDE Eclipse : Télécharger et installer Eclipse + plugin PDT pour php
 
Deleted:
<
<
Voir aussi section suivante (test des disques)
 
Deleted:
<
<

Tester les disques durs

 
Changed:
<
<
Occupation disques : df -h
[root@hyperion home]# df -h
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/sda3             178G   63G  106G  38% /
/dev/sdb1             2,7T  1,4T  1,3T  52% /data
/dev/sda1              99M   29M   65M  31% /boot
tmpfs                  24G  4,0K   24G   1% /dev/shm
>
>
II - Familiarisation avec Cakephp : Lecture documentation + test des tutoriels
 
Changed:
<
<
cat /proc/partitions
>
>
http://cakephp.org/ (la doc de la version 2 est ici : http://book.cakephp.org/2.0/en)
 
Changed:
<
<
cat /etc/mtab
>
>
1) Lire le MVC : http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view-controller.html Lire un peu plus sur le sujet : - les Controlleurs : http://book.cakephp.org/2.0/en/controllers.html - les Vues : http://book.cakephp.org/2.0/en/views.html - les Modèles : http://book.cakephp.org/2.0/en/models.html
 
Changed:
<
<
cat /proc/mounts (equivalent de la commande "mount")
>
>
2) tester les tutoriels sur le "blog" : a) tester le tutoriel cakephp "blog", très simple : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/blog.html b) tester la 2e partie du tutoriel "blog" : http://book.cakephp.org/2.0/en/getting-started.html#blog-tutorial-adding-a-layer
 
Changed:
<
<
cat /proc/scsi/scsi
>
>
3) comprendre la génération de code avec l'outil important de cakephp : "bake" http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html
 
Changed:
<
<
Voir aussi si messages d'erreur disques dans /var/log/messsages
>
>
4) AUTH et ACL :
 
Changed:
<
<
Tester aussi la commande dmesg (equivalent à /var/log/dmesg)
>
>
Tester le tutoriel blog avec l'ajout de auth et acl : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html
 
Added:
>
>
(voir aussi ce tutoriel plus complet : part1 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html, part2 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html)
 
Changed:
<
<

Yum

>
>
doc sur AUTH : http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html
 
Changed:
<
<
Annuler l'information sur les updates disponibles :
>
>
doc sur ACL : http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html
 
Changed:
<
<
/etc/init.d/yum-updatesd stop
>
>
5) important aussi, disponible uniquement depuis cakephp 2.1, la gestion des événements : http://book.cakephp.org/2.0/en/core-libraries/events.html
 
Changed:
<
<
su -c 'chkconfig --level 2345 yum-updatesd off'
>
>
6) A lire aussi, le cycle de développement complet : http://book.cakephp.org/2.0/en/development.html surtout lire : - Exceptions - Error Handling - Debugging - Testing
 
Deleted:
<
<
Every other workaround seems to only kill yum-updatesd for runlevel 5.
 
Changed:
<
<
Try yum update after that.
>
>
III - En s'inspirant du tutoriel "blog", commmencer à construire une architecture à partir d'un sous-ensemble de la BDD Europlanet
 
Changed:
<
<
Keep in mind that you will no longer be informed that there updates available and as such you will need to check periodically with yum check-update
>
>
1) Ce projet est géré en versions avec subversion (plugin Eclipse subclipse)
 
Changed:
<
<
Quels sont les packages commençant par "mesa-" installés + à installer ? --> yum list mesa-*
>
>
2) Construire un schéma d'une petite BDD avec MysqlWorkbench Ce schéma contient 7 tables principales : - people (lien N-1 avec institutes, status, et profiles, et 1-N avec resources) : id, name, firstname, email, password, status, active, job, created, updated (le champ "active" est un booléen VRAI par défaut) - status : id, name (avec les valeurs suivantes pour name : NULL, 'registered', 'invalidated', 'validated') - profiles : id, name, level (level indique la hiérarchie ; name et level ont les valeurs suivantes : {'admin',10}, {'priv',5}, {'validator',3}, {'normal',0} ; donc on a la hiérarchie admin > priv > validator > normal) - institutes : id, name, created, updated - expertises : id, name (lien M-N avec people) - resources (lien M-N avec sciencases) : id, name, created, updated - sciencecases : id, name, created, updated
 
Added:
>
>
Pour gérer les relation M-N, il faudra créer les tables intermédiaires suivantes (voir la convention de nommage dans cakephp : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm) :
  • resources_sciencecases : avec les champs resources_id et sciencecases_id (les 2 clés étrangères formant la clé primaire de la table)
  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table)
 
Added:
>
>
Tous les champs sont obligatoires (NOT NULL), sauf people.job (default NULL).
 
Changed:
<
<

Samba

>
>
Toutes les clés primaires (id) sont autoincrémentées.
 
Changed:
<
<
Créer un new user "toto" : sbmpasswd -a toto
>
>
Les champs "created" et "updated" sont gérés automatiquement par cakephp.
 
Changed:
<
<
Mettre à jour le pass de "toto" : smbpasswd toto
>
>
Ajouter la contrainte "on delete CASCADE" (avec MysqlWorkbench) sur les clés étrangères des tables M-N (resources_sciencecases et expertises_people)
 
Changed:
<
<
Est-ce que samba est à l'écoute ? : service smb status
>
>
Ajouter la contrainte "on delete NULL" sur toutes les clés étrangères des autres tables (people, resources)
 
Changed:
<
<
Redémarrer samba : service smb restart
>
>
Générer le script sql de création de la base.
 
Changed:
<
<
Depuis le poste client windows :
>
>
Vérifier que MysqlWorkbench ajoute bien les contraintes sur les clés étrangères (FK = "Foreign Key")
 
Changed:
<
<
clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"
>
>
Alimenter les tables avec des données quelconques
 
Changed:
<
<
Corriger un bug sur Mac Leopard (pas sur Tiger) : samba ne suit pas les liens qui vont vers un disque différent
>
>
3) Configurer l'accès à la BDD login : epn pass : pass
 
Changed:
<
<
Pour corriger ce bug, il suffit d'ajouter cette ligne dans la partie "[global]" du smb.conf :
>
>
4) Avec l'outil "bake", construire un premier échafaudage (scaffolding) automatique MVC (modèles, vues, contrôleurs) + tests unitaires PhpUnit http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html (cake bake project …) cake bake model all cake bake controller all cake bake view all
 
Changed:
<
<
unix extensions = no
>
>
Par défaut, l'action "people/index" ne doit afficher que les personnes dont le champ "active" est à TRUE et le champ "status" vaut "validated"
 
Added:
>
>
5) Lancer les tests générés par "bake" (avec phpUnit, inclus dans Xampp ?) pour tester les modèles et les contrôleurs http://book.cakephp.org/2.0/en/development/testing.html cake bake fixture all ? cake bake test all ? Depuis cakephp 2.1 : Console/cake test app/Model/Post.php Console/cake test app/Controller/PostsController.php
 
Added:
>
>
6) Ajouter la validation des champs de tous les formulaires http://book.cakephp.org/2.0/en/models/data-validation.html "bake" ajoute des validations par défaut. Les étendre si nécessaire pour que toutes les validations soient générées automatiquement, en fonction du type des champs. Vérifier que les champs obligatoires sont bien obligatoires en saisie. Ajouter un test pour s'assurer qu'une personne est obligée de remplir tous les champs (sauf people.job) quand elle s'enregistre.
 
Added:
>
>
IV - Gestion du projet avec ICESCRUM
 
Changed:
<
<

>
>
http://planetoweb2.cesr.fr:8080/icescrum
 
Changed:
<
<

WINDOWS

>
>
http://www.icescrum.org/
 
Changed:
<
<

Se connecter à un serveur linux en mode graphique

>
>
doc plus complète :
 
Changed:
<
<
Il s'agit ici de récupérer le bureau complet d'un serveur linux distant sur l'écran de mon pc Windows (ou Linux) depuis le boulot (ou la maison).
>
>
https://www.kagilum.com/fr/blog
 
Changed:
<
<
1) L'administrateur du serveur linux doit y avoir installé freenx (yum install freenx)
>
>
ex : https://www.kagilum.com/fr/blog/les-taches-selon-son-role-icescrum/
 
Changed:
<
<
C'est fait pour hyperion
>
>
Un diagramme des classes uml pour décrire SCRUM (intéressant à mettre dans le rapport de stage), et décrivant les 3 types de stories (user, technical et defect) : http://www.aubryconseil.com/post/Un-%C3%A9l%C3%A9ment-du-backlog-de-produit
 
Changed:
<
<
2) Installer sur mon pc Windows (ou linux) un client de connexion au serveur freenx
>
>
diagramme d'état uml pour montrer les différents états d'un élément du backlog (c'est à dire une feature ou une user story ; rappel : une feature = 1 grosse user story qui doit être décomposée en N user stories) : http://www.aubryconseil.com/post/2007/06/21/251-les-etats-significatifs-d-un-element-de-backlog
 
Deleted:
<
<
Pour Windows, télécharger et installer "NX client for Windows" ici : http://www.nomachine.com/download.php
 
Changed:
<
<
(ou NX client for Linux pour un pc linux)
>
>
V - Authentification et Contrôle d'accès
 
Changed:
<
<
(Si nécessaire, voici les instructions d'installation pour le client Windows : http://www.nomachine.com/documents/client/install.html#2)
>
>
1) Ajouter l'authentification (AUTH) Login = email Auth (et Acl) doivent avoir pour support la table "people" (et status et profiles). Auth (et Acl) impliquent aussi l'usage des Sessions (http://book.cakephp.org/2.0/en/development/sessions.html) Astuce : dans la session, stocker l'id de la personne, et non pas son email (car l'email peut changer, mais pas l'id)
 
Changed:
<
<
3) Exemple : Configurer une session graphique vers hyperion (depuis le boulot)
>
>
Toute personne non authentifiée (accès anonyme) peut : - lire (R ) toutes les tables, sauf la table "resources" - s'enregistrer (droit C sur la table people)
 
Changed:
<
<
Démarrer le "NX Connection Wizard" (un des programmes installés avec le client)
>
>
Toute personne authentifiée peut : - lire (R ) toutes les tables (y-compris "resources") - modifier (U) sa fiche (sauf son profil), mais pas celle des autres - créer (C ) une ressource - modifier/supprimer (UD) une ressource qu'elle a créée, mais pas celles des autres - modifier (U) un institut auquel elle appartient
 
Changed:
<
<
Cliquer sur Next
>
>
Gérer le login et le logout
 
Changed:
<
<
  • Session : donner un nom à votre session graphique (par exemple "connexion à hyperion depuis le boulot")
>
>
Ajouter les tests nécessaires : (Utiliser des "fixtures", cf section "Fixtures" dans http://book.cakephp.org/2.0/en/development/testing.html) (cake bake fixture all ?) Tester qu'une personne non authentifiée : - peut lire la table 'resource' - peut s'enregistrer - ne peut pas modifier une table Tester qu'une personne authentifiée peut : … Faire un test login/logout complet selon le scénario suivant : - une personne se logue - vérifier qu'elle peut créer une ressource - elle se délogue - vérifier qu'elle ne peut plus créer une ressource
 
Deleted:
<
<
  • Host : hyperion.cesr.fr (port 22)
 
Changed:
<
<
Cliquer sur Next
>
>
2) Ajouter le contrôle d'accès (ACL)
 
Changed:
<
<
  • Sélectionner "Unix" et "GNOME"
>
>
Créer quelques personnes avec des rôles (profils) différents :
  • 'user1', profil 'admin' (tous les droits)
  • 'user2' et 'user3', profil 'normal', utilisateur normal
  • 'user4', profil 'priv', utilisateur privilégié
  • 'user5', profil 'validator', utilisateur pouvant valider d'autres utilisateurs
 
Changed:
<
<
<-- 
  • Cocher "Disable encryption of all traffic" (pour accélerer la connexion)
-->
>
>
Une personne de profil 'admin' a un droit CRUD (créer/lire/modifier/supprimer) sur toutes les tables.
 
Changed:
<
<
Cliquer sur Next
>
>
Une personne de profil 'priv' :
  • a un droit CRUD seulement sur la table 'institutes'
  • peut modifier le profil de toutes les personnes (sauf le sien)
 
Changed:
<
<
  • Cocher "Create shortcut on desktop"
>
>
Ajouter les tests nécessaires :
  • tester que 'user1' peut tout faire (faire juste quelques tests, pas tout)
  • tester que 'user4' : * peut ajouter un nouvel institut * peut modifier le profil d'une personne (mais pas le sien)
  • tester que 'user2' : * ne peut pas modifier une ressource qui ne lui appartient pas * peut ajouter une nouvelle ressource, et la modifier ensuite * peut modifier son email (login) et/ou son mot de passe
...
 
Deleted:
<
<
Cliquer sur Next
 
Changed:
<
<
Une fenetre de connexion s'affiche (que vous pourrez relancer à loisir en cliquant sur votre raccourci bureau portant le nom de votre session)
>
>
VI - ENREGISTREMENT DES UTILISATEURS (registration)
 
Changed:
<
<
Cliquer sur "Configure"
>
>
1) Réalisation de la procédure d'enregistrement (inscription) d'une personne :
 
Changed:
<
<
  • Cocher "Remember my password"
>
>
(voir s'il n'existe pas déjà un plugin cakephp pour gérer ça, car c'est assez classique au début)
 
Changed:
<
<
  • Cliquer sur le bouton Key et y coller l'intégralité de la clé publique suivante à la place de la clé courante :
>
>
a) une personne remplit sa fiche d'enregistrement et la soumet (SUBMIT) ==> elle est enregistrée dans la table people avec "status" à NULL
 
Changed:
<
<
(pour info, cette clé provient du fichier /etc/nxserver/client.id_dsa.key dans l'installation du serveur freenx)
>
>
b) elle reçoit un 1er mail de confirmation avec un lien de validation
 
Changed:
<
<
Par soucis de sécurité, je ne diffuse pas la clé ici (vous l'avez reçue par mail)
>
>
c) elle clique sur le lien de validation, ce qui valide son inscription ==> son champ "status" passe à "registered" ; les validateurs reçoivent un mail pour les avertir de cette inscription, avec un lien vers la page du site permettant de valider ou invalider la personne
 
Changed:
<
<
  • cliquer sur "Save", puis "Ok" pour revenir à la fenêtre de connexion
>
>
d) elle reçoit un 2e mail de confirmation lui disant qu'elle est inscrite, MAIS qu'elle doit attendre que son inscription soit validée par un 'validateur', et qu'elle recevra un mail pour le lui confirmer
 
Changed:
<
<
Entrer votre login/pass pour hyperion
>
>
e) si un validateur valide l'inscription, la personne reçoit un mail pour l'en informer (à partir de là, elle peut se connecter au site) ==> son "status" passe à "validated"
 
Changed:
<
<
Cliquer sur "Login"
>
>
f) si un validateur invalide l'inscription, la personne reçoit un mail pour l'en informer ==> son "status" passe à "invalidated"
 
Changed:
<
<
Et voilà !
>
>
Ajouter les actions suivantes au Contrôleur "person" :
  • validate (profil 'validator') : pour valider une personne (champ "status")
  • invalidate (profil 'validator') : pour invalider une personne
  • deleteInvalidated (profil 'priv') : pour supprimer les personnes ayant un statut "invalidated"
  • activate (profil 'priv') : pour activer une personne (champ "active")
  • deactivate (profil 'priv') : pour désactiver une personne
 
Changed:
<
<
(Lorsque votre bureau hyperion s'affiche, répondre à la question posée en choisissant "GNOME")
>
>
Ajouter/modifier les tests nécessaires
 
Changed:
<
<
Si le clavier est qwerty, pour passer à un clavier azerty :
>
>
2) Ajouter un captcha sur la fiche d'inscription
 
Changed:
<
<
  • aller dans le menu Système / Préférences / Clavier
  • cliquer sur onglet "Agencements"
  • cliquer sur bouton "+ Ajouter"
  • sélectionner France puis cliquer sur Valider
  • sélectionner France puis cliquer sur "Vers le haut"
  • cliquer sur bouton "X Fermer"
>
>
Ajouter/modifier les tests nécessaires :
  • tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon
  • tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste)
 
Deleted:
<
<
(Plus d'information sur la configuration du client ici : http://www.nomachine.com/documents/configuration/client-guide.php)
 
Changed:
<
<
(pour savoir qui est connecté : ps -efl|grep NX)
>
>
3) Récupération du mot de passe (lost password)
 
Added:
>
>
Sur le formulaire de login, ajouter (à droite du bouton LOGIN) un lien "register" (pour s'enregistrer) et un lien "forgot password" (mot de passe oublié)
 
Changed:
<
<
4) C'est très bien tout ça, mais comment je fais depuis chez moi ???
>
>
Le lien "forgot password" pointe vers un formulaire de modification du mot de passe (Person/PasswordUpdate) contenant juste 1 champ "email" et un bouton "SUBMIT"
 
Changed:
<
<
C'est un peu plus compliqué car il faut installer un tunnel qui passe par le GATEWAY LABO.
>
>
L'utilisateur saisit son email et clique sur "submit" pour qu'on lui envoie un nouveau mot de passe par mail (le mot de passe est aussi mis à jour dans la database)
 
Changed:
<
<
a) Creuser un tunnel
>
>
Test
 
Deleted:
<
<
Sur Windows, on crée le tunnel avec le logiciel Putty
 
Changed:
<
<
Exécuter Putty
>
>
4) Procédure de désinscription (ACTION unregister)
 
Changed:
<
<
Si vous avez déjà une session vers GATEWAY, inutile d'en recréer une autre, vous pouvez l'utiliser. Sinon, il faut créer une nouvelle session :
>
>
a) une personne clique sur un lien "unregister"
 
Changed:
<
<
Host name : GATEWAY
>
>
b) une confirmation est demandée via une fenêtre javascript : "Are you sure that you want to unregister ?" OK/CANCEL
 
Changed:
<
<
Port : 22
>
>
c) l'action "unregister" est exécutée, la personne n'est pas supprimée de la base, mais juste marquée "inactive"
 
Changed:
<
<
Saved Sessions : GATEWAY (ou ce que vous voulez, par exemple "le GATEWAY du LABO")
>
>
d) la personne est automatiquement déconnectée
 
Changed:
<
<
Dans le panneau de gauche (Category:), cliquer sur l'arbre "Connection", puis "SSH", puis "Tunnels"
>
>
e) Test
 
Deleted:
<
<
(si vous avez déjà un ou plusieurs tunnels créés, pas de problème, vous pouvez en ajouter un de plus)
 
Deleted:
<
<
Source Port : 9022
 
Deleted:
<
<
Destination : hyperion.cesr.fr:22
 
Deleted:
<
<
Cliquer sur bouton "Add"
 
Changed:
<
<
Dans le panneau de gauche (Category:), cliquer sur l'arbre "Session"
>
>
VII - Améliorer le CRUD
 
Changed:
<
<
Cliquer sur bouton "Save"
>
>
1) Bien gérer complètement les relations 1-N
 
Changed:
<
<
Ouvrir cette session (GATEWAY) que vous venez de créer, et se connecter sur GATEWAY (avec votre mot de passe mail).
>
>
Actions sur Person (relation N-1 avec Institute) :
  • create : doit permettre d'associer la personne à un institut (via liste de noms)
  • update : doit permettre de modifier l'institut associé (via liste de noms)
  • index : doit permettre de voir toutes les personnes avec le nom (name) de l'institut associé ; un clic sur un institut doit amener à sa vue détaillée
  • view : doit afficher le nom (name) de l'institut associé
 
Added:
>
>
Action sur Institute (relation 1-N avec Person) :
  • view : doit afficher toutes les personnes associées
 
Changed:
<
<
b) Créer une session graphique
>
>
2) Bien gérer complètement les relations M-N
 
Changed:
<
<
Suivre toutes les étapes du point 3) mais en remplaçant "hyperion.cesr.fr (port 22)" par "localhost (port 9022)"
>
>
Actions sur Person (relation M-N avec Expertise) :
  • create : doit permettre d'ajouter des expertises (ET une date "since")
  • update : doit permettre de modifier les expertises associées
  • view : doit permettre de voir toutes les expertises associées
Idem pour Expertise (lien vers Person)
 
Changed:
<
<
Ya pu ka tester !
>
>
Même chose pour Resource (relation M-N avec Sciencecase)
 
Added:
>
>
Gestion des champs supplémentaires d'une table associative : exemple de la relation entre Person et Expertise :
 
Added:
>
>
  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table) et le champ supplémentaire "since" (date à laquelle l'expertise a été acquise)
 
Added:
>
>
3) Gérer d'autres types de relations
 
Added:
>
>
a) Ajout de plusieurs rôles différents entre 2 mêmes tables
 
Added:
>
>
voir http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model
 
Added:
>
>
Une personne peut avoir plusieurs liens avec une ressource (plusieurs liens entre les tables "people" et "resources"), ce qui veut dire qu'elle peut jouer plusieurs rôles par rapport à une ressource. Ainsi, au lieu d'avoir seulement une clé étrangère "resources_id" dans la table "people", nous en aurons plusieurs avec des noms différents :
  • resource_provider_id : la personne qui a donné l'information sur la ressource (et qui l'a saisit)
  • resource_owner_id : le propriétaire de la ressource
  • resource_contact_id : le contact pour la ressource
Ces 3 clés pointent toutes vers la même clé primaire resource.id, et sont donc des "alias". Améliorer les actions CRUD en conséquence
 
Added:
>
>
b) Relation réflexive (d'une table sur elle-même)
 
Added:
>
>
Ajout d'une relation réflexive sur "institutes" (dans ce cas particulier, il s'agit d'une relation hiérarchique) :
  • un institut peut appartenir à un autre institut (de niveau hiérarchique supérieur ; par exemple, le "CNRS" regroupe plusieurs instituts, "l'OMP" regroupe plusieurs laboratoires dont l'IRAP…)
  • cela revient seulement à ajouter un champ "institute_id" dans la table institutes (qui pointe sur la table institute, lien réflexif)
  • améliorer les actions CRUD en conséquence
 
Added:
>
>
c) Relation d'héritage ou spécialisation (1:1)
 
Added:
>
>
Une ressource peut être de différents types (ajouter la table "resourcetype") :
 
Added:
>
>
  • data
  • info (information, document...)
  • website
  • datacenter
 
Added:
>
>
chaque type de ressource est une spécialisation du type général "resource".
 
Changed:
<
<

Visualiser les fichiers Postscript

>
>
On aura donc 4 nouvelles tables filles "resourcedata", "resourceinfo", "resourcewebsite", "resourcedatacenter" qui "hériteront" de la table mère (générique) "resource" pour l'étendre chacune avec sa spécificité.
 
Changed:
<
<
Installer GhostScript (engine) puis GhostView (frontend)
>
>
On peut représenter ce lien d'héritage par une relation 1-1 entre chacune de ces 4 tables filles et la table mère "resource".
 
Changed:
<
<
http://pages.cs.wisc.edu/~ghost/
>
>
Aucune des tables filles n'a d'existence propre, chacune dépend de la table mère "resource".
 
Changed:
<
<

Convertir un fichier Postscript en JPEG (ou autre) avec GhostScript (en mode batch)

>
>
Ainsi, les tables filles n'ont pas de clé primaire, mais juste une clé étrangère (resource_id) qui pointe vers la clé primaire de la table mère (cette clé étrangère peut aussi leur servir de clé primaire).
 
Changed:
<
<
Pour info, sur Linux, c'est très simple, il suffit d'utiliser la commande "convert" (ou plus spécifique "ps2...")
>
>
Cette relation d'héritage a un impact sur toutes les VUES de la table "resource", car à chaque fois qu'on veut accéder à une ressource, il faut récupérer aussi les informations spécifiques à son type dans la table fille associée (via la clé étrangère resource_id).
 
Changed:
<
<
Sous Windows, c'est un peu plus compliqué.
>
>
Plus particulièrement, la vue "Create" (et "Update") devra contenir un sélecteur de type ("Type de ressource"), et n'afficher que les champs spécifiques au type sélectionné (en plus des champs généraux de la table mère).
 
Changed:
<
<
GhostScript converts PS to PNG, JPEG, PNM, TIFF, BMP, PCX, PSD, PDF, EPS, PCL-XL.
>
>
Ajouter dans la table resource un champ "URL" (général à tous les types)
 
Changed:
<
<
1) Télécharger la version Windows de GhostScript et l'installer
>
>
Voici les informations spécifiques à chaque type, et donc présent dans les tables filles respectives :
 
Changed:
<
<
http://pages.cs.wisc.edu/~ghost/
>
>
  • table data :
    • volume (en MB) :
    • restricted (oui/non)
 
Changed:
<
<
ou encore:
>
>
  • table info (information, document...) :
    • langage (champ texte liste : English, French, Spanish...)
 
Changed:
<
<
http://ghostscript.com/releases/
>
>
  • table website :
    • restricted (oui/non)
    • nom du webmaster (champ texte libre)
 
Changed:
<
<
2) Ajouter le dossier exécutable de GhosScript dans votre PATH windows
>
>
  • table datacenter :
    • nom du responsable (champ texte libre)
 
Changed:
<
<
set PATH=%PATH%;C:\Program Files\gs\gs9.00\bin
>
>
4) Ajouter les nouveaux tests nécessaires
 
Deleted:
<
<
3) Exemple de conversion d'un fichier PS en JPG:
 
Changed:
<
<
Aller dans le dossier qui contient le fichier PS (somefile.ps) à convertir (cd ...)
>
>
VIII - Ajout d'une nouvelle action dans TOUS les Contrôleurs : search
 
Changed:
<
<
L'instruction suivante créera un fichier somefile.jpg dans c:\temp :
>
>
ex : Person/search
 
Changed:
<
<
gswin32c -sDEVICE=jpeg -o c:\temp\somefile.jpg somefile.ps
>
>
Cela amène à une nouvelle vue PersonSearch qui est équivalente au formulaire de Person/create, sauf qu'au lieu de servir à créer une nouvelle personne, il sert à en CHERCHER.
 
Changed:
<
<
Pour plus d'information sur les possibilités de GhostScript : http://pages.cs.wisc.edu/~ghost/doc/cvs/Use.htm
>
>
L'ensemble des personnes trouvées sont affichées dans une vue "FOUND" semblable à Person/index (sauf que c'est une vue PARTIELLE et non pas COMPLETE). Les recherches se font sans tenir compte des majuscules ou minuscules.
 
Changed:
<
<
REMARQUE : pour faire la même chose en mode graphique, il existe une interface graphique qui s'installe par-dessus GhostScript (en frontend), c'est GhostView (gsview) :
>
>
En bas du formulaire, 2 boutons :
  • SEARCH
  • EXACT SEARCH
 
Changed:
<
<
http://pages.cs.wisc.edu/~ghost/gsview/index.htm
>
>
Exemples de requêtes possibles :
 
Added:
>
>
  • j'entre "Pallier" dans le champ "name" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier", par exemple "Apallieri"...
  • j'entre "Pallier" dans le champ "name", "Etienne" dans le champ "firstname", et "informaticien" dans le champ "job" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier" ET le prénom EST EGAL à "Etienne" ET le job EST EGAL à "informaticien"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier" ET le prénom CONTIENT "Etienne" et le job CONTIENT "informaticien"
 
Added:
>
>
Cette VUE "search" doit être accessible par un lien qui se trouve au début de la vue "index", sous la forme d'une icône en forme de LOUPE suivie de la mention "Search"
 
Added:
>
>
Faire les tests d'acceptation (ACCEPTANCE TESTS)
 
Added:
>
>
IX - Améliorer les vues
 
Added:
>
>
1) ajouter les liens généraux suivants :
  • "login" (qui n'apparaît que si l'utilisateur n'est pas logué)
  • et les liens "logout", "update my registration" et "unregister" (qui n'apparaissent que si l'utilisateur est logué)
 
Changed:
<
<

Migrer de Windows XP vers Windows 7

>
>
2) Vue "view" : vue détaillée d'une ligne de table
 
Changed:
<
<
Il faut acheter la licence Microsoft. La démarche dépend de la marque du PC.
>
>
Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)
 
Changed:
<
<
Pour un hp : aller sur le site hp et rechercher "windows upgrade"
>
>
Ajouter les boutons "Edit", "Delete" et "Create a copy" (visibles uniquement avec le profil "admin")
 
Changed:
<
<
Modèles éligibles : http://h41112.www4.hp.com/promo/win7web/fr/fr/eligmodels.html
>
>
Pour le formulaire Person, le bouton "Edit" est aussi visible si la personne connectée correspond à la fiche visualisée.
 
Changed:
<
<
http://welcome.hp.com/country/fr/fr/mda/windows7/upgrade/which_version.html?jumpid=reg_R1002_FRFR
>
>
3) Action "index" : vue globale d'une table
 
Changed:
<
<
http://h41112.www4.hp.com/promo/win7web/fr/fr/
>
>
Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)
 
Added:
>
>
Masquer la clé primaire (id)
 
Added:
>
>
La colonne du champ "name" est triable : en cliquant sur la colonne "name", on trie en ordre croissant, puis décroissant
 
Added:
>
>
Le champ "name" est cliquable : en cliquant sur un nom, on va à la vue détaillée correspondante
 
Changed:
<
<

Envoyer des mails avec Outlook quand on n'est pas au LABO

>
>
Afficher le champ "name" des clés étrangères ; en cliquant dessus on va sur la vue détaillée
 
Added:
>
>
Les colonnes des clés étrangères sont filtrables : dans la vue people/index, en cliquant sur la colonne "institutes_id" on doit pouvoir sélectionner un nom d'institut (name) et filtrer la vue en conséquence
 
Changed:
<
<
1) "Creuser" un tunnel avec Putty
>
>
Au-dessus de la liste d'une table, ajouter un "filtre externe" pour chaque table M-N associée : par exemple, pour la vue people/index, ajouter au-dessus de la liste des personnes une liste d'expertises : en sélectionnant une expertise, on ne voit plus que les personnes associées à cette expertise
 
Changed:
<
<
Créer une nouvelle session que vous appelerez par exemple "tunnel_mail_LABO", et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail LABO (GATEWAY).
>
>
En début de page, ajouter un bouton "Add a new one"
 
Changed:
<
<
La procédure est décrite sur la faq informatique du LABO : http://www1.cesr.fr/intranet/informatique/faq/ssh-tunnels/ssh.htm#_Toc150503764 (Exemple 1, cas numéro 2)
>
>
4) Ajouter les nouveaux tests nécessaires
 
Changed:
<
<
Il faudra lancer cette session (et la garder ouverte en tâche de fond) avant d'envoyer un mail
>
>
5) Ajouter une page contenant tous les tests, avec un bouton permettant de lancer tous les tests à la suite "LAUNCH ALL TESTS"
 
Changed:
<
<
2) Configurer votre client mail Outlook
>
>
X - Documentation
 
Changed:
<
<
  • Menu Outils/Paramètres du compte
  • Clic sur bouton "Modifier"
  • Dans le champ "Serveur de courrier sortant (SMTP)", remplacer "mailhost.cesr.fr" par "localhost"
  • Clic sur bouton "Paramètres supplémentaires...", clic sur onglet "Options avancées"
  • Dans le champ "Serveur Sortant (SMTP)", remplacer "25" par "9025"
>
>
Installer phpdocumentor v2 et l'intégrer dans eclipse (http://www.phpdoc.org) :
 
Changed:
<
<
Bien sûr, il faut tout remettre en place quand on revient au LABO (en fait, on pourrait aussi fonctionner en permanence avec le tunnel, même au LABO...)
>
>
phpdocumentor respecte les standards de codage du format phpdoc : http://en.wikipedia.org/wiki/PHPDoc
 
Added:
>
>
Suivre les standards de codage de cakephp 2 : http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html
 
Deleted:
<
<

Synchroniser Outlook 2007 Calendar et Google Calendar

 
Changed:
<
<
http://content.techrepublic.com.com/2346-10877_11-191016.html
>
>
XI - Ajout d'un menu
 
Added:
>
>
Ajout d'une gestion de menu
 
Deleted:
<
<

Installer un serveur X sur Windows pour afficher les fenêtres graphiques de linux

 
Deleted:
<
<
On propose d'utiliser Xming qui est un serveur X gratuit pour Windows
 
Changed:
<
<
Il suffit d'éxécuter Xming avant de lancer une session graphique via putty (ou autre shell)
>
>
XII - Ajout de modules
 
Changed:
<
<
Installation : http://sourceforge.net/projects/xming
>
>
Ajout d'un module de News
 
Changed:
<
<
Cliquer sur Download
>
>
Ajout d'un module d'upload de documents
 
Changed:
<
<
1) Installer Xming
>
>
Newsletter
 
Changed:
<
<
2) Installer Xming-fonts (surtout nécessaire pour Emacs)
>
>
...
 
Added:
>
>
XIII - Charte graphique
 
Added:
>
>
Gestion de la présentation avec CSS
 
Changed:
<
<

HARDWARE

>
>
...
 
Changed:
<
<

Disques SATA

>
>
XIV - Intégrer la BDD Europlanet complète
 
Deleted:
<
<
Les jumper sur les disque sata ne sont pas la pour specifier si le disque est slave, master ou en cable select
 
Changed:
<
<
mais pour pouvoir brider le disque en sata1 ( dans certain cas ca peut resoudre un probleme de compatibilité)
>
>
Annexe : A lire aussi
 
Changed:
<
<
3178-1.gif
>
>
Associations : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html
 
Changed:
<
<
donc pas de jumper = sata2 , le jumper est mis = sata1
>
>
Callback : http://book.cakephp.org/2.0/en/models/callback-methods.html
 
Changed:
<
<
Comme il est mis la il est en sata 1 donc bridé à 150Mo/sec Si on l'enlève on passe en sata2 donc 375Mo/sec
>
>
Behaviors : http://book.cakephp.org/2.0/en/models/behaviors.html
 
Changed:
<
<
Mais comme ton disque ne doit pas dépasser 100Mo/sec tu ne veras pas du tout la difference
>
>
Transactions : http://book.cakephp.org/2.0/en/models/transactions.html
 
Added:
>
>
Virtual fields : http://book.cakephp.org/2.0/en/models/virtual-fields.html
 

Revision 1032012-10-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1574 to 1574
  (Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_profile, pour ne plus avoir à la taper)
Added:
>
>
Si vous travaillez à l'intérieur du labo, pas besoin de l'étape suivante, il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.

Si vous êtes à l'extérieur du labo, continuez la lecture...

 b) "Creuser" un tunnel
Added:
>
>
 (Pour les personnes qui utilisent Windows, vous pouvez faire la même chose que ci-dessous avec le logiciel Putty, en vous inspirant de ce qui est décrit sur cette même page au point 4) a) de l'article http://planetoweb.cesr.fr/twiki/bin/view/Main/HowtoInformatique#Se_connecter_un_serveur_linux_en)

Ouvrir un tunnel avec mise en correspondance de 2 ports :

Line: 1592 to 1598
  Il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.
Changed:
<
<
c) Une fois la session idl terminée, ne pas oublier de...

détruire le tunnel en vous déconnectant d'hyperion (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)

>
>
Attention, une fois la session idl terminée, ne pas oublier de détruire le tunnel en vous déconnectant d'hyperion !!! (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)
  Bon, on peut encore améliorer les choses... si ça vous dit, allez voir un peu plus loin, juste après la partie IN ENGLISH.
Changed:
<
<
Now, IN ENGLISH :
>
>
Now, IN ENGLISH (and for Mac/Linux users only) :
  (First, be sure you have removed any remaining license.dat file from your itt/license/ directory ; just drop it, you don't need it)
Changed:
<
<
1) set a tunnel
>
>
1) set and export LM_LICENSE_FILE
 
Changed:
<
<
Open a new terminal and create this tunnel :

$ ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MYLOGIN@GATEWAY

You are now connected to the labo gateway.

>
>
Open a new terminal and set this variable :
 
Changed:
<
<
Keep it open as long as you are running idl !
>
>
$ export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
 
Added:
>
>
(you can also write this line once and for all in your ~/.bash_profile file, so that you won't have to do it every day)
 
Changed:
<
<
2) set and export LM_LICENSE_FILE
>
>
If you are INSIDE the lab, you are finished. Just launch your (local) idl : $ idlde (or idl) (or from the Applications launcher)
 
Changed:
<
<
Open a new terminal and set this variable :
>
>
If you are OUTSIDE the lab, you need one last step...
 
Deleted:
<
<
$ export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
 
Changed:
<
<
(you can also write this line once and for all in your ~/.bash_profile file, so that you won't have to do it every day)
>
>
2) set a tunnel
 
Changed:
<
<
then, from the same terminal, launch your idl :
>
>
Open a new terminal and create this tunnel :
 
Changed:
<
<
$ idlde (or idl) (or from the Applications launcher)
>
>
$ ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MYLOGIN@GATEWAY
 
Added:
>
>
You are now connected to the lab gateway.
 
Changed:
<
<
3) Only once finished with idl, don't forget to...
>
>
Keep it open as long as you are running idl !
 
Changed:
<
<
destroy the tunnel by closing the connexion to GATEWAY
>
>
Only once finished with idl, don't forget to destroy the tunnel by closing the connexion to GATEWAY !!!
 


Changed:
<
<
On peut encore améliorer les choses... Comment ?
>
>
ETAPE FACULTATIVE : On peut encore améliorer les choses... Comment ?
  En s'arrangeant pour ne plus avoir aucun mot de passe à entrer grâce aux clés publique&privée.

Revision 1022012-10-11 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1568 to 1568
  Positionner la variable d'environnement avec 2 serveurs de jetons (pour pouvoir bosser à l'INTERIEUR (port 1700 de hyperion) ET à l'EXTERIEUR (port 9700 de localhost) du labo sans jamais rien modifier) :
Added:
>
>
(Pour les utilisateurs de Windows, faire un clic droit sur Poste de Travail, puis onglet "Variables d'environnement", puis entrer la variable nommée LM_LICENSE_FILE avec la valeur "1700@hyperion.cesr.fr:9700@localhost")
 export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"

(Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_profile, pour ne plus avoir à la taper)

b) "Creuser" un tunnel

Added:
>
>
(Pour les personnes qui utilisent Windows, vous pouvez faire la même chose que ci-dessous avec le logiciel Putty, en vous inspirant de ce qui est décrit sur cette même page au point 4) a) de l'article http://planetoweb.cesr.fr/twiki/bin/view/Main/HowtoInformatique#Se_connecter_un_serveur_linux_en)
 Ouvrir un tunnel avec mise en correspondance de 2 ports :

ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MON_LOGIN_EMAIL@GATEWAY

Line: 1594 to 1598
  Bon, on peut encore améliorer les choses... si ça vous dit, allez voir un peu plus loin, juste après la partie IN ENGLISH.
Changed:
<
<
Now, IN ENGLISH :
>
>
Now, IN ENGLISH :
  (First, be sure you have removed any remaining license.dat file from your itt/license/ directory ; just drop it, you don't need it)
Line: 1629 to 1633
 
Changed:
<
<
On peut encore améliorer les choses... Comment ?
>
>
On peut encore améliorer les choses... Comment ?
  En s'arrangeant pour ne plus avoir aucun mot de passe à entrer grâce aux clés publique&privée.

Revision 1012012-10-08 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1531 to 1531
 

IDL

Changed:
<
<

Utiliser la licence IDL hyperion depuis l'extérieur

>
>

Utiliser mon IDL au labo ou bien à l'extérieur du labo (en une seule config)

 
Changed:
<
<
Comment exécuter idl depuis mon pc/mac (mon idl à moi) depuis l'extérieur du labo, comme si j'étais au labo, et donc en profitant de la licence hyperion ???
>
>
Problème : Comment exécuter mon idl (celui qui est installé localement sur mon pc/mac) au labo et même à l'extérieur du labo ???
 
Changed:
<
<
Il suffit de 2 choses : un fichier de licence idl hyperion un peu modifié, et un tunnel
>
>
Réponse : en profitant des licences du serveur hyperion
 
Changed:
<
<
1) Fichier de licence
>
>
En ce qui vous concerne, allez directement au point 2)
 
Changed:
<
<
Récupérer le fichier de licence de hyperion license.dat et le copier dans votre installation IDL locale (de votre pc/mac), sous le dossier itt/license/
>
>
1) Travail à faire pour l'administrateur système sur hyperion
 
Changed:
<
<
Editer ce fichier pour en modifier la 2ème ligne comme suit :
>
>
Modifier le fichier de licences /usr/local/itt/license/license.dat, remplacer la ligne : "DAEMON idl_lmgrd" par "DAEMON idl_lmgrd port=1701"
 
Changed:
<
<
SERVER localhost 0021856ceeec 9700
>
>
(cela force flexlm à utiliser le port 1701 pour idl_lmgrd)
 
Changed:
<
<
(on a remplacé "hyperion" par "localhost" et "1700" par "9700")
>
>
Relancer les service lmgrd et idl_lmgrd
 
Added:
>
>
Si tout s'est bien passé, la commande "nmap hyperion.cesr.fr -p1700-1701" permet de voir que le port 1701 est bien ouvert
 
Changed:
<
<
2) Créer un tunnel (entre mon pc et hyperion, via le GATEWAY)
>
>
$ nmap hyperion.cesr.fr -p1700-1701

 
Changed:
<
<
ssh -t -L 9700:localhost:1700 MON_LOGIN_IRAP@GATEWAY ssh -L 1700:localhost:1700 MON_LOGIN_HYPERION@hyperion.cesr.fr
>
>
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-10-08 18:10 CEST Interesting ports on hyperion.cesr.fr (195.83.102.174): PORT STATE SERVICE 1700/tcp open unknown 1701/tcp open unknown
 
Changed:
<
<
(
si ca ne marche pas, essayer plutôt ceci (mon exemple perso) :
ssh -t -L 9700:localhost:1700 epallier@GATEWAY ssh -L 1700:hyperion.cesr.fr:1700 pallier@hyperion.cesr.fr
)

>
>
Nmap finished: 1 IP address (1 host up) scanned in 0.119 seconds
 
Deleted:
<
<
Entrer le mot de passe pour GATEWAY (pour vous connecter de votre pc à GATEWAY)
 
Changed:
<
<
Entrer le mot de passe pour hyperion (pour vous connecter de GATEWAY à hyperion)
>
>
2) Pour vous (côté client), Il suffit de faire 2 choses sur votre pc/mac

a) Positionner une variable d'environnement

Positionner la variable d'environnement avec 2 serveurs de jetons (pour pouvoir bosser à l'INTERIEUR (port 1700 de hyperion) ET à l'EXTERIEUR (port 9700 de localhost) du labo sans jamais rien modifier) :

export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"

(Le mieux est de placer cette ligne une fois pour toutes dans votre fichier de démarrage ~/.bash_profile, pour ne plus avoir à la taper)

b) "Creuser" un tunnel

 
Changed:
<
<
Voilà, vous êtes connecté sur hyperion, via un tunnel passant par GATEWAY.
>
>
Ouvrir un tunnel avec mise en correspondance de 2 ports :

ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MON_LOGIN_EMAIL@GATEWAY

(remplacer MON_LOGIN_EMAIL par votre login utilisé pour le mail ou pour vous connecter à la passerelle du labo, et GATEWAY par le serveur passerelle du labo)

(Remarque pour l'admin système : attention, sur le localhost on a le choix de la correspondance du port 1700 d'hyperion (port 9700 local) mais pas pour le 1701)

Entrer le mot de passe pour GATEWAY (pour vous connecter de votre pc à GATEWAY)

Voilà, vous avez créé un tunnel entre votre pc/mac et hyperion, passant par GATEWAY (vous êtes d'ailleurs connecté à la passerelle).

  Il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.
Changed:
<
<
Une fois votre session idl terminée, n'oubliez pas de détruire le tunnel en vous déconnectant d'hyperion (il suffit de taper "exit" et vous serez déconnecté de hyperion ET de GATEWAY)
>
>
c) Une fois la session idl terminée, ne pas oublier de...

détruire le tunnel en vous déconnectant d'hyperion (il suffit de taper "exit" et vous serez déconnecté de GATEWAY)

Bon, on peut encore améliorer les choses... si ça vous dit, allez voir un peu plus loin, juste après la partie IN ENGLISH.

 
Changed:
<
<
On peut encore améliorer les choses... Voir plus loin, après la partie "ENGLISH"
>
>
Now, IN ENGLISH :
 
Added:
>
>
(First, be sure you have removed any remaining license.dat file from your itt/license/ directory ; just drop it, you don't need it)
 
Changed:
<
<
IN ENGLISH :
>
>
1) set a tunnel
 
Changed:
<
<
1) Licence file
>
>
Open a new terminal and create this tunnel :
 
Changed:
<
<
Get the hyperion licence file license.dat and copy it into your LOCAL idl installation (on your pc/mac) under the itt/license/ directory
>
>
$ ssh -L9700:hyperion.cesr.fr:1700 -L1701:hyperion.cesr.fr:1701 MYLOGIN@GATEWAY
 
Changed:
<
<
Edit this file and modify the 2nd line as below :
>
>
You are now connected to the labo gateway.
 
Changed:
<
<
SERVER localhost 0021856ceeec 9700
>
>
Keep it open as long as you are running idl !
 
Deleted:
<
<
(we just replaced "hyperion" with "localhost" and "1700" with "9700")
 
Changed:
<
<
2) Tunnel
>
>
2) set and export LM_LICENSE_FILE
 
Changed:
<
<
Type this command to create a tunnel between your mac and hyperion (via the irap gateway) :
>
>
Open a new terminal and set this variable :
 
Changed:
<
<
ssh -t -L 9700:localhost:1700 YOUR_IRAP_LOGIN@GATEWAY ssh -L 1700:localhost:1700 YOUR_HYPERION_LOGIN@hyperion.cesr.fr
>
>
$ export LM_LICENSE_FILE="1700@hyperion.cesr.fr:9700@localhost"
 
Changed:
<
<
Enter the gateway password (to connect from your mac to the gateway)
>
>
(you can also write this line once and for all in your ~/.bash_profile file, so that you won't have to do it every day)
 
Changed:
<
<
Enter the hyperion password (to connect from the gateway to hyperion)
>
>
then, from the same terminal, launch your idl :
 
Changed:
<
<
You are now connected to hyperion (via the gateway). Attention : Keep this connection opened as long as you are working with idl.
>
>
$ idlde (or idl) (or from the Applications launcher)
 
Deleted:
<
<
3) Run your local idl (from your mac)
 
Changed:
<
<
It should not go to the limited demonstration session (7 mn) but allow you to work as long as you want...
>
>
3) Only once finished with idl, don't forget to...
 
Changed:
<
<
4) Disconnect
>
>
destroy the tunnel by closing the connexion to GATEWAY
 
Deleted:
<
<
Once you have finished with idl, do not forget to destroy the tunnel by just disconnecting from hyperion (type "exit" just once)
 
Added:
>
>

On peut encore améliorer les choses... Comment ?

 
Deleted:
<
<
Comme je disais, on peut encore améliorer les choses... Comment ?
 En s'arrangeant pour ne plus avoir aucun mot de passe à entrer grâce aux clés publique&privée.

Voici comment faire...

Revision 1002012-10-04 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1531 to 1531
 

IDL

Added:
>
>

Utiliser la licence IDL hyperion depuis l'extérieur

Comment exécuter idl depuis mon pc/mac (mon idl à moi) depuis l'extérieur du labo, comme si j'étais au labo, et donc en profitant de la licence hyperion ???

Il suffit de 2 choses : un fichier de licence idl hyperion un peu modifié, et un tunnel

1) Fichier de licence

Récupérer le fichier de licence de hyperion license.dat et le copier dans votre installation IDL locale (de votre pc/mac), sous le dossier itt/license/

Editer ce fichier pour en modifier la 2ème ligne comme suit :

SERVER localhost 0021856ceeec 9700

(on a remplacé "hyperion" par "localhost" et "1700" par "9700")

2) Créer un tunnel (entre mon pc et hyperion, via le GATEWAY)

ssh -t -L 9700:localhost:1700 MON_LOGIN_IRAP@GATEWAY ssh -L 1700:localhost:1700 MON_LOGIN_HYPERION@hyperion.cesr.fr

(
si ca ne marche pas, essayer plutôt ceci (mon exemple perso) :
ssh -t -L 9700:localhost:1700 epallier@GATEWAY ssh -L 1700:hyperion.cesr.fr:1700 pallier@hyperion.cesr.fr
)

Entrer le mot de passe pour GATEWAY (pour vous connecter de votre pc à GATEWAY)

Entrer le mot de passe pour hyperion (pour vous connecter de GATEWAY à hyperion)

Voilà, vous êtes connecté sur hyperion, via un tunnel passant par GATEWAY.

Il vous suffit maintenant de lancer votre idl LOCAL (votre logiciel idl installé sur votre pc/mac), comme d'habitude.

Une fois votre session idl terminée, n'oubliez pas de détruire le tunnel en vous déconnectant d'hyperion (il suffit de taper "exit" et vous serez déconnecté de hyperion ET de GATEWAY)

On peut encore améliorer les choses... Voir plus loin, après la partie "ENGLISH"

IN ENGLISH :

1) Licence file

Get the hyperion licence file license.dat and copy it into your LOCAL idl installation (on your pc/mac) under the itt/license/ directory

Edit this file and modify the 2nd line as below :

SERVER localhost 0021856ceeec 9700

(we just replaced "hyperion" with "localhost" and "1700" with "9700")

2) Tunnel

Type this command to create a tunnel between your mac and hyperion (via the irap gateway) :

ssh -t -L 9700:localhost:1700 YOUR_IRAP_LOGIN@GATEWAY ssh -L 1700:localhost:1700 YOUR_HYPERION_LOGIN@hyperion.cesr.fr

Enter the gateway password (to connect from your mac to the gateway)

Enter the hyperion password (to connect from the gateway to hyperion)

You are now connected to hyperion (via the gateway). Attention : Keep this connection opened as long as you are working with idl.

3) Run your local idl (from your mac)

It should not go to the limited demonstration session (7 mn) but allow you to work as long as you want...

4) Disconnect

Once you have finished with idl, do not forget to destroy the tunnel by just disconnecting from hyperion (type "exit" just once)

Comme je disais, on peut encore améliorer les choses... Comment ? En s'arrangeant pour ne plus avoir aucun mot de passe à entrer grâce aux clés publique&privée.

Voici comment faire...

1) Créer une paire de clés privée/publique sur mon pc

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/Users/pallier/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/pallier/.ssh/id_dsa.
Your public key has been saved in /Users/pallier/.ssh/id_dsa.pub.

2) Distribuer ensuite la clé publique de mon pc sur la passerelle du labo (que nous appelerons GATEWAY pour raison de sécurité)

La clé publique, doit être copiée sur le serveur distant dans ~/.ssh/authorized_keys. (La clé privée reste sur votre poste client)

Aller dans votre HOME

ssh-copy-id -i .ssh/id_dsa.pub GATEWAY
(
ou bien, si on ne dispose pas de la commande ssh-copy-id, l'exemple est ici donné pour moi :
$ cat .ssh/id_dsa.pub | ssh epallier@GATEWAY "cat - >>.ssh/authorized_keys" 
)

3) Tester maintenant la connexion à GATEWAY

ssh monlogin@GATEWAY

On peut désormais se connecter directement sans mot de passe !!!

4) Faire de même entre GATEWAY et hyperion

Maintenant, il suffit de faire la même chose que 2) et 3) mais depuis GATEWAY (et vers hyperion)

Quand c'est fait, depuis GATEWAY, on peut maintenant se connecter directement à hyperion sans mot de passe :

ssh monlogin@hyperion.cesr.fr

(je tape 2 fois "exit" pour revenir à mon pc)

Voilà, on peut maintenant créer le tunnel (voir ci-dessus) sans avoir aucun mot de passe à entrer.

Pour faire encore plus simple, on peut se créer un alias nommé "tunnel" :

alias tunnel = 'ssh -t -L 9700:localhost:1700 YOUR_IRAP_LOGIN@GATEWAY ssh -L 1700:localhost:1700 YOUR_HYPERION_LOGIN@hyperion.cesr.fr'

Il suffit alors de taper "tunnel" pour qu'il soit créé.

Autre Méthode (pour info)

Pour automatiser le "rebond" via GATEWAY*

On va maintenant rendre transparent le passage via GATEWAY. Il suffit pour cela de créer un fichier de config :

DEPUIS MON PC, j'édite le fichier .ssh/config, et j'y mets le contenu suivant :

Host hyp
        Hostname hyperion.cesr.fr
        ProxyCommand ssh GATEWAY nc %h %p 2> /dev/null

(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)

VOILA C FINI, OUF !

Désormais, depuis votre pc, il suffit de faire un bête ssh :

ssh hyp (éventuellemtn avec l'option -X pour l'affichage graphique, si nécessaire)

(il suffit de taper une seule fois "exit" pour revenir à mon pc)

IDL 8.1 workbench (idlde) crash sous Mac OS 10.7

Voici ce qu'il faut faire pour corriger le pb :

cd /Applications/itt/idl/idl81/bin/bin.darwin.x86_64/

mv libcurl.4.0.1.dylib libcurl.4.0.1.dylib.bak

mv libcurl.4.dylib libcurl.4.dylib.bak

mv libcurl.dylib libcurl.dylib.bak

Lire l'article complet sur le pb :

http://www.exelisvis.com/Support/HelpArticleDetail/ArticleId/4698/IDL-8-1-Workbench-crashing-on-Mac-OS-X-10-7-2-and-10-7-3.aspx

 

OpenGL Direct Hardware Rendering on Linux

The "Direct Rendering Infrastructure" (DRI) or "Direct hardware rendering" is described here :

Line: 3368 to 3543
 If you believe this is in error, please contact your system administrator.
Changed:
<
<
Simplifier une connexion avec rebond
>
>
Simplifier une connexion ssh avec rebond
  Par exemple, depuis chez moi, je veux me connecter à hyperion
Changed:
<
<
Il me faut donc passer par FIREWALL (le firewall du labo)
>
>
Il me faut donc passer par GATEWAY (la passerelle du labo)
  1) le plus simple, méthode manuelle (depuis mon pc)
Changed:
<
<
ssh FIREWALL (entrer le mot de passe utilisé pour le mail)
>
>
ssh GATEWAY (entrer le mot de passe utilisé pour le mail)
  puis

ssh hyperion.cesr.fr (entrer votre mot de passe hyperion)

Changed:
<
<
(NB : "ssh -X FIREWALL", puis "ssh -X hyperion" si on veut l'affichage graphique)
>
>
(NB : "ssh -X GATEWAY", puis "ssh -X hyperion" si on veut l'affichage graphique)
  Il faut taper 2 fois "exit" pour revenir à mon pc.
Line: 3393 to 3568
  ssh-keygen -t dsa
Changed:
<
<
Puis, je distribue ensuite la clé publique à la fois sur FIREWALL ET sur hyperion :
>
>
Puis, je distribue ensuite la clé publique à la fois sur GATEWAY ET sur hyperion :
 
Changed:
<
<
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub FIREWALL
>
>
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub GATEWAY
  ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub hyperion.cesr.fr
Changed:
<
<
Tester maintenant à nouveau la double connexion (FIREWALL, puis hyperion) :
>
>
Tester maintenant à nouveau la double connexion (GATEWAY, puis hyperion) :
 
Changed:
<
<
ssh FIREWALL (sans mot de passe)
>
>
ssh GATEWAY (sans mot de passe)
  puis
Line: 3412 to 3587
 (je tape 2 fois "exit" pour revenir à mon pc)
Changed:
<
<
3) Pour accélérer la connexion : ETAPE 2, automatiser le "rebond" par FIREWALL
>
>
3) Pour accélérer la connexion : ETAPE 2, automatiser le "rebond" par GATEWAY
 
Changed:
<
<
On va maintenant rendre transparent le passage via FIREWALL. Il suffit pour cela de créer un fichier de config :
>
>
On va maintenant rendre transparent le passage via GATEWAY. Il suffit pour cela de créer un fichier de config :
  DEPUIS MON PC, j'édite le fichier /home/USERNAME/.ssh/config, et j'y mets le contenu suivant :

Host hyp hyperion hyperion.cesr.fr
        Hostname hyperion.cesr.fr
Changed:
<
<
ProxyCommand ssh FIREWALL nc %h %p 2> /dev/null
>
>
ProxyCommand ssh GATEWAY nc %h %p 2> /dev/null
 

(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)

Line: 3434 to 3609
  (ou "ssh hyperion" ou "ssh hyperion.cesr.fr")
Changed:
<
<
On n'a plus besoin de rentrer aucun mot de passe (ni de FIREWALL, ni de hyperion), c'est direct !
>
>
On n'a plus besoin de rentrer aucun mot de passe (ni de GATEWAY, ni de hyperion), c'est direct !
  (il suffit de taper une seule fois "exit" pour revenir à mon pc)
Line: 3532 to 3707
  http://www.feep.net/sendmail/tutorial/intro/forward.html
Changed:
<
<
Par exemple, je veux forwarder mes mails de pallier@planetoweb.cesr.fr vers ma boite cesr ou encore ma boite perso :
>
>
Par exemple, je veux forwarder mes mails de pallier@planetoweb.cesr.fr vers ma boite LABO ou encore ma boite perso :
  cd ~
Changed:
<
<
créer un fichier ".forward" contenant mon adresse cesr ou perso
>
>
créer un fichier ".forward" contenant mon adresse LABO ou perso
  S'il s'agit de forwarder les mails adressés à root@planetoweb.cesr.fr, on peut utiliser la même solution, mais on peut aussi ajouter cette ligne tout à la fin du fichier /etc/aliases
Line: 4428 to 4603
  La mission ExoMars, de l’Agence Spatiale Européenne (ESA), est une mission du programme Aurora. Son objectif est de caractériser l’environnement biologique martien pour préparer l’exploration humaine de la planète rouge.
Changed:
<
<
  • Instrument CESR
>
>
  • Instrument LABO
 
Changed:
<
<
EXLIBRIS serait capable d’effectuer une ablation des roches puis l’analyse de la composition de cette roche à la fois en chimie élémentaire (ultra-violet), en minéraux et composés organiques (Raman). Le CESR serait responsable de la partie LIBS (ultra-violet) et de la calibration de l’instrument. F. Rull Pérez (Centro de Astrobiologia , Espagne) serait en charge de la partie Raman.
>
>
EXLIBRIS serait capable d’effectuer une ablation des roches puis l’analyse de la composition de cette roche à la fois en chimie élémentaire (ultra-violet), en minéraux et composés organiques (Raman). Le LABO serait responsable de la partie LIBS (ultra-violet) et de la calibration de l’instrument. F. Rull Pérez (Centro de Astrobiologia , Espagne) serait en charge de la partie Raman.
 Contexte de réalisation

Mission ESA : Tir prévu en 2013.

Line: 4801 to 4976
  4) C'est très bien tout ça, mais comment je fais depuis chez moi ???
Changed:
<
<
C'est un peu plus compliqué car il faut installer un tunnel qui passe par le firewall CESR.
>
>
C'est un peu plus compliqué car il faut installer un tunnel qui passe par le GATEWAY LABO.
  a) Creuser un tunnel
Line: 4809 to 4984
  Exécuter Putty
Changed:
<
<
Si vous avez déjà une session vers FIREWALL, inutile d'en recréer une autre, vous pouvez l'utiliser. Sinon, il faut créer une nouvelle session :
>
>
Si vous avez déjà une session vers GATEWAY, inutile d'en recréer une autre, vous pouvez l'utiliser. Sinon, il faut créer une nouvelle session :
 
Changed:
<
<
Host name : FIREWALL
>
>
Host name : GATEWAY
  Port : 22
Changed:
<
<
Saved Sessions : FIREWALL (ou ce que vous voulez, par exemple "le firewall du cesr")
>
>
Saved Sessions : GATEWAY (ou ce que vous voulez, par exemple "le GATEWAY du LABO")
  Dans le panneau de gauche (Category:), cliquer sur l'arbre "Connection", puis "SSH", puis "Tunnels"
Line: 4831 to 5006
  Cliquer sur bouton "Save"
Changed:
<
<
Ouvrir cette session (FIREWALL) que vous venez de créer, et se connecter sur FIREWALL (avec votre mot de passe mail).
>
>
Ouvrir cette session (GATEWAY) que vous venez de créer, et se connecter sur GATEWAY (avec votre mot de passe mail).
 

b) Créer une session graphique

Line: 4916 to 5091
 
Changed:
<
<

Envoyer des mails avec Outlook quand on n'est pas au CESR

>
>

Envoyer des mails avec Outlook quand on n'est pas au LABO

 

1) "Creuser" un tunnel avec Putty

Changed:
<
<
Créer une nouvelle session que vous appelerez par exemple "tunnel_mail_cesr", et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail cesr (FIREWALL).
>
>
Créer une nouvelle session que vous appelerez par exemple "tunnel_mail_LABO", et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail LABO (GATEWAY).
 
Changed:
<
<
La procédure est décrite sur la faq informatique du cesr :
>
>
La procédure est décrite sur la faq informatique du LABO :
 http://www1.cesr.fr/intranet/informatique/faq/ssh-tunnels/ssh.htm#_Toc150503764 (Exemple 1, cas numéro 2)
Line: 4938 to 5113
 
  • Clic sur bouton "Paramètres supplémentaires...", clic sur onglet "Options avancées"
  • Dans le champ "Serveur Sortant (SMTP)", remplacer "25" par "9025"
Changed:
<
<
Bien sûr, il faut tout remettre en place quand on revient au cesr (en fait, on pourrait aussi fonctionner en permanence avec le tunnel, même au CESR...)
>
>
Bien sûr, il faut tout remettre en place quand on revient au LABO (en fait, on pourrait aussi fonctionner en permanence avec le tunnel, même au LABO...)
 

Synchroniser Outlook 2007 Calendar et Google Calendar

Revision 992012-06-04 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 37 to 37
  NOUVELLES MODIFS FAITES :
Added:
>
>
4 juin :
  • VII-3 c) relation 1-1
 16 mai :
  • IX-5
  • X - Documentation
Line: 347 to 350
  3) Gérer d'autres types de relations
Changed:
<
<
Ajout de plusieurs rôles différents entre 2 mêmes tables : voir http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model
>
>
a) Ajout de plusieurs rôles différents entre 2 mêmes tables

voir http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model

 Une personne peut avoir plusieurs liens avec une ressource (plusieurs liens entre les tables "people" et "resources"), ce qui veut dire qu'elle peut jouer plusieurs rôles par rapport à une ressource. Ainsi, au lieu d'avoir seulement une clé étrangère "resources_id" dans la table "people", nous en aurons plusieurs avec des noms différents :
  • resource_provider_id : la personne qui a donné l'information sur la ressource (et qui l'a saisit)
Line: 356 to 362
 Ces 3 clés pointent toutes vers la même clé primaire resource.id, et sont donc des "alias". Améliorer les actions CRUD en conséquence
Changed:
<
<
Ajout d'une relation réflexive sur "institutes" (dont une application est la relation hiérarchique) :
>
>
b) Relation réflexive (d'une table sur elle-même)

Ajout d'une relation réflexive sur "institutes" (dans ce cas particulier, il s'agit d'une relation hiérarchique) :

 
  • un institut peut appartenir à un autre institut (de niveau hiérarchique supérieur ; par exemple, le "CNRS" regroupe plusieurs instituts, "l'OMP" regroupe plusieurs laboratoires dont l'IRAP…)
  • cela revient seulement à ajouter un champ "institute_id" dans la table institutes (qui pointe sur la table institute, lien réflexif)
  • améliorer les actions CRUD en conséquence
Added:
>
>
c) Relation d'héritage ou spécialisation (1:1)

Une ressource peut être de différents types (ajouter la table "resourcetype") :

  • data
  • info (information, document...)
  • website
  • datacenter

chaque type de ressource est une spécialisation du type général "resource".

On aura donc 4 nouvelles tables filles "resourcedata", "resourceinfo", "resourcewebsite", "resourcedatacenter" qui "hériteront" de la table mère (générique) "resource" pour l'étendre chacune avec sa spécificité.

On peut représenter ce lien d'héritage par une relation 1-1 entre chacune de ces 4 tables filles et la table mère "resource".

Aucune des tables filles n'a d'existence propre, chacune dépend de la table mère "resource".

Ainsi, les tables filles n'ont pas de clé primaire, mais juste une clé étrangère (resource_id) qui pointe vers la clé primaire de la table mère (cette clé étrangère peut aussi leur servir de clé primaire).

Cette relation d'héritage a un impact sur toutes les VUES de la table "resource", car à chaque fois qu'on veut accéder à une ressource, il faut récupérer aussi les informations spécifiques à son type dans la table fille associée (via la clé étrangère resource_id).

Plus particulièrement, la vue "Create" (et "Update") devra contenir un sélecteur de type ("Type de ressource"), et n'afficher que les champs spécifiques au type sélectionné (en plus des champs généraux de la table mère).

Ajouter dans la table resource un champ "URL" (général à tous les types)

Voici les informations spécifiques à chaque type, et donc présent dans les tables filles respectives :

  • table data :
    • volume (en MB) :
    • restricted (oui/non)

  • table info (information, document...) :
    • langage (champ texte liste : English, French, Spanish...)

  • table website :
    • restricted (oui/non)
    • nom du webmaster (champ texte libre)

  • table datacenter :
    • nom du responsable (champ texte libre)
  4) Ajouter les nouveaux tests nécessaires

Revision 982012-05-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 39 to 39
  16 mai :
  • IX-5
Added:
>
>
  • X - Documentation
  15 mai :
  • IX-2 et 3
Line: 429 to 430
  5) Ajouter une page contenant tous les tests, avec un bouton permettant de lancer tous les tests à la suite "LAUNCH ALL TESTS"
Changed:
<
<
X - Ajout d'un menu
>
>
X - Documentation

Installer phpdocumentor v2 et l'intégrer dans eclipse (http://www.phpdoc.org) :

phpdocumentor respecte les standards de codage du format phpdoc : http://en.wikipedia.org/wiki/PHPDoc

Suivre les standards de codage de cakephp 2 : http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html

XI - Ajout d'un menu
  Ajout d'une gestion de menu

Changed:
<
<
XI - Ajout de modules
>
>
XII - Ajout de modules
  Ajout d'un module de News
Line: 445 to 458
  ...
Changed:
<
<
XII - Charte graphique
>
>
XIII - Charte graphique
  Gestion de la présentation avec CSS

...

Changed:
<
<
XIII - Intégrer la BDD Europlanet complète
>
>
XIV - Intégrer la BDD Europlanet complète
 

Revision 972012-05-15 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 37 to 37
  NOUVELLES MODIFS FAITES :
Added:
>
>
16 mai :
  • IX-5

15 mai :

  • IX-2 et 3
  14 mai :
  • IX-1
Line: 282 to 287
 Ajouter/modifier les tests nécessaires :
  • tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon
  • tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste)
Changed:
<
<
...
>
>
  3) Récupération du mot de passe (lost password)
Line: 292 to 297
  L'utilisateur saisit son email et clique sur "submit" pour qu'on lui envoie un nouveau mot de passe par mail (le mot de passe est aussi mis à jour dans la database)
Added:
>
>
Test
  4) Procédure de désinscription (ACTION unregister)
Line: 303 to 310
  d) la personne est automatiquement déconnectée
Added:
>
>
e) Test

 

VII - Améliorer le CRUD
Line: 389 to 400
  2) Vue "view" : vue détaillée d'une ligne de table
Added:
>
>
Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)
 Ajouter les boutons "Edit", "Delete" et "Create a copy" (visibles uniquement avec le profil "admin")

Pour le formulaire Person, le bouton "Edit" est aussi visible si la personne connectée correspond à la fiche visualisée.

3) Action "index" : vue globale d'une table

Added:
>
>
Ajouter une checkbox "Show dates" (visible uniquement avec profil "admin"), désactivée par défaut : quand on l'active, il faut afficher les dates (created, updated)
 Masquer la clé primaire (id)

La colonne du champ "name" est triable : en cliquant sur la colonne "name", on trie en ordre croissant, puis décroissant

Line: 412 to 427
  4) Ajouter les nouveaux tests nécessaires
Changed:
<
<
>
>
5) Ajouter une page contenant tous les tests, avec un bouton permettant de lancer tous les tests à la suite "LAUNCH ALL TESTS"
 
X - Ajout d'un menu

Revision 962012-05-14 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 38 to 38
 NOUVELLES MODIFS FAITES :
Added:
>
>
14 mai :
  • IX-1
  • VI-4
 3 mai :

  • section VI-3 (lost password)
Line: 289 to 293
 L'utilisateur saisit son email et clique sur "submit" pour qu'on lui envoie un nouveau mot de passe par mail (le mot de passe est aussi mis à jour dans la database)

Added:
>
>
4) Procédure de désinscription (ACTION unregister)

a) une personne clique sur un lien "unregister"

b) une confirmation est demandée via une fenêtre javascript : "Are you sure that you want to unregister ?" OK/CANCEL

c) l'action "unregister" est exécutée, la personne n'est pas supprimée de la base, mais juste marquée "inactive"

d) la personne est automatiquement déconnectée

 
VII - Améliorer le CRUD
Line: 368 to 383
 
IX - Améliorer les vues
Changed:
<
<
1) ajouter un lien général "logout"
>
>
1) ajouter les liens généraux suivants :
  • "login" (qui n'apparaît que si l'utilisateur n'est pas logué)
  • et les liens "logout", "update my registration" et "unregister" (qui n'apparaissent que si l'utilisateur est logué)
  2) Vue "view" : vue détaillée d'une ligne de table
Changed:
<
<
Ajouter les boutons "Delete" et "Create a copy"
>
>
Ajouter les boutons "Edit", "Delete" et "Create a copy" (visibles uniquement avec le profil "admin")

Pour le formulaire Person, le bouton "Edit" est aussi visible si la personne connectée correspond à la fiche visualisée.

  3) Action "index" : vue globale d'une table

Revision 952012-05-10 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 248 to 248
 
VI - ENREGISTREMENT DES UTILISATEURS (registration)
Changed:
<
<
1) Amélioration de la procédure d'enregistrement (inscription) d'une personne :
>
>
1) Réalisation de la procédure d'enregistrement (inscription) d'une personne :
  (voir s'il n'existe pas déjà un plugin cakephp pour gérer ça, car c'est assez classique au début)
Line: 372 to 372
  2) Vue "view" : vue détaillée d'une ligne de table
Changed:
<
<
Ajouter les "Delete" et "Create a copy"
>
>
Ajouter les boutons "Delete" et "Create a copy"
  3) Action "index" : vue globale d'une table

Revision 942012-05-03 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 35 to 35
  Ne pas oublier de noter tout ce que tu fais. Rédige au fur et à mesure (avec OpenOffice).
Changed:
<
<
NOUVELLES MODIFS FAITES :
>
>
NOUVELLES MODIFS FAITES :
 
Changed:
<
<
  • section VI-3
>
>
3 mai :

  • section VI-3 (lost password)

  • section IX-1 (logout)

5 Avril :

  • section VII-3 (crud)

Plus tard :

 
  • (pas encore sûr, à réfléchir) ajouter un script qui permet de définir un tableau de champs obligatoires pour un Modèle donné ==> Ces champs devront obligatoirement être saisis dans les vues associées au Modèle (voir http://book.cakephp.org/1.3/view/1147/required)
Line: 234 to 245
  * peut modifier son email (login) et/ou son mot de passe ...
Changed:
<
<
3) Amélioration de la procédure d'enregistrement (inscription) d'une personne :
>
>
VI - ENREGISTREMENT DES UTILISATEURS (registration)

1) Amélioration de la procédure d'enregistrement (inscription) d'une personne :

  (voir s'il n'existe pas déjà un plugin cakephp pour gérer ça, car c'est assez classique au début)
Line: 259 to 273
  Ajouter/modifier les tests nécessaires
Changed:
<
<
4) Ajouter un captcha sur la fiche d'inscription
>
>
2) Ajouter un captcha sur la fiche d'inscription
  Ajouter/modifier les tests nécessaires :
  • tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon
  • tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste)
...
Added:
>
>
3) Récupération du mot de passe (lost password)
 
Changed:
<
<
VI - Améliorer le CRUD
>
>
Sur le formulaire de login, ajouter (à droite du bouton LOGIN) un lien "register" (pour s'enregistrer) et un lien "forgot password" (mot de passe oublié)

Le lien "forgot password" pointe vers un formulaire de modification du mot de passe (Person/PasswordUpdate) contenant juste 1 champ "email" et un bouton "SUBMIT"

L'utilisateur saisit son email et clique sur "submit" pour qu'on lui envoie un nouveau mot de passe par mail (le mot de passe est aussi mis à jour dans la database)

VII - Améliorer le CRUD
  1) Bien gérer complètement les relations 1-N
Line: 315 to 338
 4) Ajouter les nouveaux tests nécessaires
Changed:
<
<
VII - Ajout d'une nouvelle action dans TOUS les Contrôleurs : search
>
>
VIII - Ajout d'une nouvelle action dans TOUS les Contrôleurs : search
  ex : Person/search
Line: 343 to 366
 Faire les tests d'acceptation (ACCEPTANCE TESTS)
Changed:
<
<
VIII - Améliorer les vues
>
>
IX - Améliorer les vues

1) ajouter un lien général "logout"

 
Changed:
<
<
1) Vue "view" : vue détaillée d'une ligne de table
>
>
2) Vue "view" : vue détaillée d'une ligne de table
  Ajouter les "Delete" et "Create a copy"
Changed:
<
<
2) Action "index" : vue globale d'une table
>
>
3) Action "index" : vue globale d'une table
  Masquer la clé primaire (id)
Line: 366 to 391
  En début de page, ajouter un bouton "Add a new one"
Changed:
<
<
3) Ajouter les nouveaux tests nécessaires
>
>
4) Ajouter les nouveaux tests nécessaires
 
Changed:
<
<
IX - Ajout d'un menu
>
>
X - Ajout d'un menu
  Ajout d'une gestion de menu

Changed:
<
<
X - Ajout de modules
>
>
XI - Ajout de modules
  Ajout d'un module de News
Line: 386 to 411
  ...
Changed:
<
<
XI - Charte graphique
>
>
XII - Charte graphique
  Gestion de la présentation avec CSS

...

Changed:
<
<
XII - Intégrer la BDD Europlanet complète
>
>
XIII - Intégrer la BDD Europlanet complète
 

Revision 932012-04-18 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 315 to 315
 4) Ajouter les nouveaux tests nécessaires
Changed:
<
<
VII - Améliorer les vues
>
>
VII - Ajout d'une nouvelle action dans TOUS les Contrôleurs : search

ex : Person/search

Cela amène à une nouvelle vue PersonSearch qui est équivalente au formulaire de Person/create, sauf qu'au lieu de servir à créer une nouvelle personne, il sert à en CHERCHER.

L'ensemble des personnes trouvées sont affichées dans une vue "FOUND" semblable à Person/index (sauf que c'est une vue PARTIELLE et non pas COMPLETE). Les recherches se font sans tenir compte des majuscules ou minuscules.

En bas du formulaire, 2 boutons :

  • SEARCH
  • EXACT SEARCH

Exemples de requêtes possibles :

  • j'entre "Pallier" dans le champ "name" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier", par exemple "Apallieri"...
  • j'entre "Pallier" dans le champ "name", "Etienne" dans le champ "firstname", et "informaticien" dans le champ "job" :
    • un clic sur "EXACT SEARCH" me donne la liste des personnes dont le nom EST EGAL à "Pallier" ET le prénom EST EGAL à "Etienne" ET le job EST EGAL à "informaticien"
    • un clic sur "SEARCH" me donne la liste des personnes dont le nom CONTIENT "Pallier" ET le prénom CONTIENT "Etienne" et le job CONTIENT "informaticien"

Cette VUE "search" doit être accessible par un lien qui se trouve au début de la vue "index", sous la forme d'une icône en forme de LOUPE suivie de la mention "Search"

Faire les tests d'acceptation (ACCEPTANCE TESTS)

VIII - Améliorer les vues
  1) Vue "view" : vue détaillée d'une ligne de table
Line: 342 to 370
 
Changed:
<
<
VIII - Ajout d'un menu
>
>
IX - Ajout d'un menu
  Ajout d'une gestion de menu

Changed:
<
<
IX - Ajout de modules
>
>
X - Ajout de modules
  Ajout d'un module de News
Line: 358 to 386
  ...
Changed:
<
<
X - Charte graphique
>
>
XI - Charte graphique
  Gestion de la présentation avec CSS

...

Changed:
<
<
XI - Intégrer la BDD Europlanet complète
>
>
XII - Intégrer la BDD Europlanet complète
 

Revision 922012-04-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 165 to 165
  ex : https://www.kagilum.com/fr/blog/les-taches-selon-son-role-icescrum/
Added:
>
>
Un diagramme des classes uml pour décrire SCRUM (intéressant à mettre dans le rapport de stage), et décrivant les 3 types de stories (user, technical et defect) : http://www.aubryconseil.com/post/Un-%C3%A9l%C3%A9ment-du-backlog-de-produit

diagramme d'état uml pour montrer les différents états d'un élément du backlog (c'est à dire une feature ou une user story ; rappel : une feature = 1 grosse user story qui doit être décomposée en N user stories) : http://www.aubryconseil.com/post/2007/06/21/251-les-etats-significatifs-d-un-element-de-backlog

 
V - Authentification et Contrôle d'accès

Revision 912012-04-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 105 to 105
 - sciencecases : id, name, created, updated

Pour gérer les relation M-N, il faudra créer les tables intermédiaires suivantes (voir la convention de nommage dans cakephp : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm) :

Changed:
<
<
- resources_sciencecases : avec les champs resources_id et sciencecases_id (les 2 clés étrangères formant la clé primaire de la table) - expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table) et le champ supplémentaire "since" (date à laquelle l'expertise a été acquise)
>
>
  • resources_sciencecases : avec les champs resources_id et sciencecases_id (les 2 clés étrangères formant la clé primaire de la table)
  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table)
 Tous les champs sont obligatoires (NOT NULL), sauf people.job (default NULL).
Added:
>
>
 Toutes les clés primaires (id) sont autoincrémentées.
Added:
>
>
 Les champs "created" et "updated" sont gérés automatiquement par cakephp.
Added:
>
>
 Ajouter la contrainte "on delete CASCADE" (avec MysqlWorkbench) sur les clés étrangères des tables M-N (resources_sciencecases et expertises_people)
Added:
>
>
 Ajouter la contrainte "on delete NULL" sur toutes les clés étrangères des autres tables (people, resources)
Added:
>
>
 Générer le script sql de création de la base.
Added:
>
>
 Vérifier que MysqlWorkbench ajoute bien les contraintes sur les clés étrangères (FK = "Foreign Key")

Alimenter les tables avec des données quelconques

Line: 277 to 284
  Même chose pour Resource (relation M-N avec Sciencecase)
Added:
>
>
Gestion des champs supplémentaires d'une table associative : exemple de la relation entre Person et Expertise :

  • expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table) et le champ supplémentaire "since" (date à laquelle l'expertise a été acquise)
 3) Gérer d'autres types de relations

Ajout de plusieurs rôles différents entre 2 mêmes tables : voir http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model

Revision 902012-04-13 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 199 to 199
 2) Ajouter le contrôle d'accès (ACL)

Créer quelques personnes avec des rôles (profils) différents :

Changed:
<
<
- 'user1', profil 'admin' (tous les droits) - 'user2' et 'user3', profil 'normal', utilisateur normal - 'user4', profil 'priv', utilisateur privilégié - 'user5', profil 'validator', utilisateur pouvant valider d'autres utilisateurs
>
>
  • 'user1', profil 'admin' (tous les droits)
  • 'user2' et 'user3', profil 'normal', utilisateur normal
  • 'user4', profil 'priv', utilisateur privilégié
  • 'user5', profil 'validator', utilisateur pouvant valider d'autres utilisateurs
  Une personne de profil 'admin' a un droit CRUD (créer/lire/modifier/supprimer) sur toutes les tables.

Une personne de profil 'priv' :

Changed:
<
<
- a un droit CRUD seulement sur la table 'institutes' - peut modifier le profil de toutes les personnes (sauf le sien)
>
>
  • a un droit CRUD seulement sur la table 'institutes'
  • peut modifier le profil de toutes les personnes (sauf le sien)
  Ajouter les tests nécessaires :
Changed:
<
<
- tester que 'user1' peut tout faire (faire juste quelques tests, pas tout) - tester que 'user4' : - peut ajouter un nouvel institut - peut modifier le profil d'une personne (mais pas le sien) - tester que 'user2' : - ne peut pas modifier une ressource qui ne lui appartient pas - peut ajouter une nouvelle ressource, et la modifier ensuite - peut modifier son email (login) et/ou son mot de passe
>
>
  • tester que 'user1' peut tout faire (faire juste quelques tests, pas tout)
  • tester que 'user4' : * peut ajouter un nouvel institut * peut modifier le profil d'une personne (mais pas le sien)
  • tester que 'user2' : * ne peut pas modifier une ressource qui ne lui appartient pas * peut ajouter une nouvelle ressource, et la modifier ensuite * peut modifier son email (login) et/ou son mot de passe
 ...

3) Amélioration de la procédure d'enregistrement (inscription) d'une personne :

Line: 231 to 238
 f) si un validateur invalide l'inscription, la personne reçoit un mail pour l'en informer ==> son "status" passe à "invalidated"

Ajouter les actions suivantes au Contrôleur "person" :

Changed:
<
<
- validate (profil 'validator') : pour valider une personne (champ "status") - invalidate (profil 'validator') : pour invalider une personne - deleteInvalidated (profil 'priv') : pour supprimer les personnes ayant un statut "invalidated" - activate (profil 'priv') : pour activer une personne (champ "active") - deactivate (profil 'priv') : pour désactiver une personne
>
>
  • validate (profil 'validator') : pour valider une personne (champ "status")
  • invalidate (profil 'validator') : pour invalider une personne
  • deleteInvalidated (profil 'priv') : pour supprimer les personnes ayant un statut "invalidated"
  • activate (profil 'priv') : pour activer une personne (champ "active")
  • deactivate (profil 'priv') : pour désactiver une personne
  Ajouter/modifier les tests nécessaires

4) Ajouter un captcha sur la fiche d'inscription

Ajouter/modifier les tests nécessaires :

Changed:
<
<
- tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon - tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste)
>
>
  • tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon
  • tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste)
 ...

Revision 892012-04-13 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 9 to 9
 
Added:
>
>

GWIS

(should be later moved to : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject)

Réalisation d'un site web générique de projet en s'inspirant du site Europlanet : GWIS (Generic Web Information System)

Il s'agit de concevoir un système d'information web professionnel à l'aide d'un framework Php nommé Cakephp (http://cakephp.org)

Pour cakephp, voir aussi http://bakery.cakephp.org/

Nouvelle version 2.1.1 sortie le 26/3/12 : http://bakery.cakephp.org/articles/lorenzo/2012/03/26/cakephp_2_1_1_and_1_3_15_released

Version 2.1.0 sortie le 5/3/12

Version en cours : http://cakephp.lighthouseapp.com/projects/42648-cakephp/milestones/current

Roadmaps (pas très à jour) :

Code completion for cakephp in Eclipse : http://mark-story.com/posts/view/code-completion-for-cakephp-in-eclipse

ROADMAP (PLAN OF WORK, CAHIER DES CHARGES)

Ne pas oublier de noter tout ce que tu fais. Rédige au fur et à mesure (avec OpenOffice).

NOUVELLES MODIFS FAITES :

  • section VI-3

  • (pas encore sûr, à réfléchir) ajouter un script qui permet de définir un tableau de champs obligatoires pour un Modèle donné ==> Ces champs devront obligatoirement être saisis dans les vues associées au Modèle (voir http://book.cakephp.org/1.3/view/1147/required)

I - Installation des outils

Serveur web+php+mysql Xampp : Télécharger et installer un serveur web apache/php/mysql avec xampp pour windows, c'est très facile : http://www.apachefriends.org/fr/xampp-windows.html

Framework php CakePhp : Télécharger et installer cakephp, la version 2.1 (la plus récente, bientôt officielle)

IDE Eclipse : Télécharger et installer Eclipse + plugin PDT pour php

II - Familiarisation avec Cakephp : Lecture documentation + test des tutoriels

http://cakephp.org/ (la doc de la version 2 est ici : http://book.cakephp.org/2.0/en)

1) Lire le MVC : http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view-controller.html Lire un peu plus sur le sujet : - les Controlleurs : http://book.cakephp.org/2.0/en/controllers.html - les Vues : http://book.cakephp.org/2.0/en/views.html - les Modèles : http://book.cakephp.org/2.0/en/models.html

2) tester les tutoriels sur le "blog" : a) tester le tutoriel cakephp "blog", très simple : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/blog.html b) tester la 2e partie du tutoriel "blog" : http://book.cakephp.org/2.0/en/getting-started.html#blog-tutorial-adding-a-layer

3) comprendre la génération de code avec l'outil important de cakephp : "bake" http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html

4) AUTH et ACL :

Tester le tutoriel blog avec l'ajout de auth et acl : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html

(voir aussi ce tutoriel plus complet : part1 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html, part2 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html)

doc sur AUTH : http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html

doc sur ACL : http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

5) important aussi, disponible uniquement depuis cakephp 2.1, la gestion des événements : http://book.cakephp.org/2.0/en/core-libraries/events.html

6) A lire aussi, le cycle de développement complet : http://book.cakephp.org/2.0/en/development.html surtout lire : - Exceptions - Error Handling - Debugging - Testing

III - En s'inspirant du tutoriel "blog", commmencer à construire une architecture à partir d'un sous-ensemble de la BDD Europlanet

1) Ce projet est géré en versions avec subversion (plugin Eclipse subclipse)

2) Construire un schéma d'une petite BDD avec MysqlWorkbench Ce schéma contient 7 tables principales : - people (lien N-1 avec institutes, status, et profiles, et 1-N avec resources) : id, name, firstname, email, password, status, active, job, created, updated (le champ "active" est un booléen VRAI par défaut) - status : id, name (avec les valeurs suivantes pour name : NULL, 'registered', 'invalidated', 'validated') - profiles : id, name, level (level indique la hiérarchie ; name et level ont les valeurs suivantes : {'admin',10}, {'priv',5}, {'validator',3}, {'normal',0} ; donc on a la hiérarchie admin > priv > validator > normal) - institutes : id, name, created, updated - expertises : id, name (lien M-N avec people) - resources (lien M-N avec sciencases) : id, name, created, updated - sciencecases : id, name, created, updated

Pour gérer les relation M-N, il faudra créer les tables intermédiaires suivantes (voir la convention de nommage dans cakephp : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm) : - resources_sciencecases : avec les champs resources_id et sciencecases_id (les 2 clés étrangères formant la clé primaire de la table) - expertises_people : avec les champs expertises_id et people_id (les 2 clés étrangères formant la clé primaire de la table) et le champ supplémentaire "since" (date à laquelle l'expertise a été acquise) Tous les champs sont obligatoires (NOT NULL), sauf people.job (default NULL). Toutes les clés primaires (id) sont autoincrémentées. Les champs "created" et "updated" sont gérés automatiquement par cakephp. Ajouter la contrainte "on delete CASCADE" (avec MysqlWorkbench) sur les clés étrangères des tables M-N (resources_sciencecases et expertises_people) Ajouter la contrainte "on delete NULL" sur toutes les clés étrangères des autres tables (people, resources) Générer le script sql de création de la base. Vérifier que MysqlWorkbench ajoute bien les contraintes sur les clés étrangères (FK = "Foreign Key")

Alimenter les tables avec des données quelconques

3) Configurer l'accès à la BDD login : epn pass : pass

4) Avec l'outil "bake", construire un premier échafaudage (scaffolding) automatique MVC (modèles, vues, contrôleurs) + tests unitaires PhpUnit http://book.cakephp.org/2.0/en/console-and-shells/code-generation-with-bake.html (cake bake project …) cake bake model all cake bake controller all cake bake view all

Par défaut, l'action "people/index" ne doit afficher que les personnes dont le champ "active" est à TRUE et le champ "status" vaut "validated"

5) Lancer les tests générés par "bake" (avec phpUnit, inclus dans Xampp ?) pour tester les modèles et les contrôleurs http://book.cakephp.org/2.0/en/development/testing.html cake bake fixture all ? cake bake test all ? Depuis cakephp 2.1 : Console/cake test app/Model/Post.php Console/cake test app/Controller/PostsController.php

6) Ajouter la validation des champs de tous les formulaires http://book.cakephp.org/2.0/en/models/data-validation.html "bake" ajoute des validations par défaut. Les étendre si nécessaire pour que toutes les validations soient générées automatiquement, en fonction du type des champs. Vérifier que les champs obligatoires sont bien obligatoires en saisie. Ajouter un test pour s'assurer qu'une personne est obligée de remplir tous les champs (sauf people.job) quand elle s'enregistre.

IV - Gestion du projet avec ICESCRUM

http://planetoweb2.cesr.fr:8080/icescrum

http://www.icescrum.org/

doc plus complète :

https://www.kagilum.com/fr/blog

ex : https://www.kagilum.com/fr/blog/les-taches-selon-son-role-icescrum/

V - Authentification et Contrôle d'accès

1) Ajouter l'authentification (AUTH) Login = email Auth (et Acl) doivent avoir pour support la table "people" (et status et profiles). Auth (et Acl) impliquent aussi l'usage des Sessions (http://book.cakephp.org/2.0/en/development/sessions.html) Astuce : dans la session, stocker l'id de la personne, et non pas son email (car l'email peut changer, mais pas l'id)

Toute personne non authentifiée (accès anonyme) peut : - lire (R ) toutes les tables, sauf la table "resources" - s'enregistrer (droit C sur la table people)

Toute personne authentifiée peut : - lire (R ) toutes les tables (y-compris "resources") - modifier (U) sa fiche (sauf son profil), mais pas celle des autres - créer (C ) une ressource - modifier/supprimer (UD) une ressource qu'elle a créée, mais pas celles des autres - modifier (U) un institut auquel elle appartient

Gérer le login et le logout

Ajouter les tests nécessaires : (Utiliser des "fixtures", cf section "Fixtures" dans http://book.cakephp.org/2.0/en/development/testing.html) (cake bake fixture all ?) Tester qu'une personne non authentifiée : - peut lire la table 'resource' - peut s'enregistrer - ne peut pas modifier une table Tester qu'une personne authentifiée peut : … Faire un test login/logout complet selon le scénario suivant : - une personne se logue - vérifier qu'elle peut créer une ressource - elle se délogue - vérifier qu'elle ne peut plus créer une ressource

2) Ajouter le contrôle d'accès (ACL)

Créer quelques personnes avec des rôles (profils) différents : - 'user1', profil 'admin' (tous les droits) - 'user2' et 'user3', profil 'normal', utilisateur normal - 'user4', profil 'priv', utilisateur privilégié - 'user5', profil 'validator', utilisateur pouvant valider d'autres utilisateurs

Une personne de profil 'admin' a un droit CRUD (créer/lire/modifier/supprimer) sur toutes les tables.

Une personne de profil 'priv' : - a un droit CRUD seulement sur la table 'institutes' - peut modifier le profil de toutes les personnes (sauf le sien)

Ajouter les tests nécessaires : - tester que 'user1' peut tout faire (faire juste quelques tests, pas tout) - tester que 'user4' : - peut ajouter un nouvel institut - peut modifier le profil d'une personne (mais pas le sien) - tester que 'user2' : - ne peut pas modifier une ressource qui ne lui appartient pas - peut ajouter une nouvelle ressource, et la modifier ensuite - peut modifier son email (login) et/ou son mot de passe ...

3) Amélioration de la procédure d'enregistrement (inscription) d'une personne : (voir s'il n'existe pas déjà un plugin cakephp pour gérer ça, car c'est assez classique au début) a) une personne remplit sa fiche d'enregistrement et la soumet (SUBMIT) ==> elle est enregistrée dans la table people avec "status" à NULL b) elle reçoit un 1er mail de confirmation avec un lien de validation c) elle clique sur le lien de validation, ce qui valide son inscription ==> son champ "status" passe à "registered" ; les validateurs reçoivent un mail pour les avertir de cette inscription, avec un lien vers la page du site permettant de valider ou invalider la personne d) elle reçoit un 2e mail de confirmation lui disant qu'elle est inscrite, MAIS qu'elle doit attendre que son inscription soit validée par un 'validateur', et qu'elle recevra un mail pour le lui confirmer e) si un validateur valide l'inscription, la personne reçoit un mail pour l'en informer (à partir de là, elle peut se connecter au site) ==> son "status" passe à "validated" f) si un validateur invalide l'inscription, la personne reçoit un mail pour l'en informer ==> son "status" passe à "invalidated"

Ajouter les actions suivantes au Contrôleur "person" : - validate (profil 'validator') : pour valider une personne (champ "status") - invalidate (profil 'validator') : pour invalider une personne - deleteInvalidated (profil 'priv') : pour supprimer les personnes ayant un statut "invalidated" - activate (profil 'priv') : pour activer une personne (champ "active") - deactivate (profil 'priv') : pour désactiver une personne

Ajouter/modifier les tests nécessaires

4) Ajouter un captcha sur la fiche d'inscription

Ajouter/modifier les tests nécessaires : - tester qu'une personne ne peut pas s'enregistrer si le captcha n'est pas bon - tester qu'une personne peut s'enregistrer si le captcha est bon (et tout le reste) ...

VI - Améliorer le CRUD

1) Bien gérer complètement les relations 1-N

Actions sur Person (relation N-1 avec Institute) :

  • create : doit permettre d'associer la personne à un institut (via liste de noms)
  • update : doit permettre de modifier l'institut associé (via liste de noms)
  • index : doit permettre de voir toutes les personnes avec le nom (name) de l'institut associé ; un clic sur un institut doit amener à sa vue détaillée
  • view : doit afficher le nom (name) de l'institut associé

Action sur Institute (relation 1-N avec Person) :

  • view : doit afficher toutes les personnes associées

2) Bien gérer complètement les relations M-N

Actions sur Person (relation M-N avec Expertise) :

  • create : doit permettre d'ajouter des expertises (ET une date "since")
  • update : doit permettre de modifier les expertises associées
  • view : doit permettre de voir toutes les expertises associées
Idem pour Expertise (lien vers Person)

Même chose pour Resource (relation M-N avec Sciencecase)

3) Gérer d'autres types de relations

Ajout de plusieurs rôles différents entre 2 mêmes tables : voir http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model Une personne peut avoir plusieurs liens avec une ressource (plusieurs liens entre les tables "people" et "resources"), ce qui veut dire qu'elle peut jouer plusieurs rôles par rapport à une ressource. Ainsi, au lieu d'avoir seulement une clé étrangère "resources_id" dans la table "people", nous en aurons plusieurs avec des noms différents :

  • resource_provider_id : la personne qui a donné l'information sur la ressource (et qui l'a saisit)
  • resource_owner_id : le propriétaire de la ressource
  • resource_contact_id : le contact pour la ressource
Ces 3 clés pointent toutes vers la même clé primaire resource.id, et sont donc des "alias". Améliorer les actions CRUD en conséquence

Ajout d'une relation réflexive sur "institutes" (dont une application est la relation hiérarchique) :

  • un institut peut appartenir à un autre institut (de niveau hiérarchique supérieur ; par exemple, le "CNRS" regroupe plusieurs instituts, "l'OMP" regroupe plusieurs laboratoires dont l'IRAP…)
  • cela revient seulement à ajouter un champ "institute_id" dans la table institutes (qui pointe sur la table institute, lien réflexif)
  • améliorer les actions CRUD en conséquence

4) Ajouter les nouveaux tests nécessaires

VII - Améliorer les vues

1) Vue "view" : vue détaillée d'une ligne de table

Ajouter les "Delete" et "Create a copy"

2) Action "index" : vue globale d'une table

Masquer la clé primaire (id)

La colonne du champ "name" est triable : en cliquant sur la colonne "name", on trie en ordre croissant, puis décroissant

Le champ "name" est cliquable : en cliquant sur un nom, on va à la vue détaillée correspondante

Afficher le champ "name" des clés étrangères ; en cliquant dessus on va sur la vue détaillée

Les colonnes des clés étrangères sont filtrables : dans la vue people/index, en cliquant sur la colonne "institutes_id" on doit pouvoir sélectionner un nom d'institut (name) et filtrer la vue en conséquence

Au-dessus de la liste d'une table, ajouter un "filtre externe" pour chaque table M-N associée : par exemple, pour la vue people/index, ajouter au-dessus de la liste des personnes une liste d'expertises : en sélectionnant une expertise, on ne voit plus que les personnes associées à cette expertise

En début de page, ajouter un bouton "Add a new one"

3) Ajouter les nouveaux tests nécessaires

VIII - Ajout d'un menu

Ajout d'une gestion de menu

IX - Ajout de modules

Ajout d'un module de News

Ajout d'un module d'upload de documents

Newsletter

...

X - Charte graphique

Gestion de la présentation avec CSS

...

XI - Intégrer la BDD Europlanet complète

Annexe : A lire aussi

Associations : http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

Callback : http://book.cakephp.org/2.0/en/models/callback-methods.html

Behaviors : http://book.cakephp.org/2.0/en/models/behaviors.html

Transactions : http://book.cakephp.org/2.0/en/models/transactions.html

Virtual fields : http://book.cakephp.org/2.0/en/models/virtual-fields.html

 

MAC OS X

locate

Revision 882012-04-05 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2664 to 2664
 
Added:
>
>

netstat

http://www.simplehelp.net/2009/01/19/monitor-your-linux-machine-with-netstat/

Voir les connexions au port 8080 sur mon pc :

$> netstat -ant|grep 8080

tcp4       0      0  195.83.102.52.54533    195.83.102.176.8080    ESTABLISHED
tcp6       0      0  ::1.8080               ::1.53481              ESTABLISHED
tcp6       0      0  ::1.53481              ::1.8080               ESTABLISHED
tcp6       0      0  ::1.8080               ::1.50287              ESTABLISHED
tcp6       0      0  ::1.50287              ::1.8080               ESTABLISHED
tcp46      0      0  *.8080                 *.*                    LISTEN   

Je vois ainsi que ma machine est connectée à 195.83.102.176 via le port 8080 en TCP

Pour savoir qui c'est, j'utilise la commande "host" ou "nslookup" :

$> host 195.83.102.176

Idem pour mysql :

$> netstat -ant | grep 3306

This tells me how many connections of different types of state I have on my machine. I can run a similar command to see a complete picture of the state of all the connections made to my web server:

$> netstat -ant | grep 80 | awk ‘{print $6}’ | sort | uniq -c | sort -n

1 FIN_WAIT1
4 LISTEN
6 FIN_WAIT2
17 CLOSE_WAIT
94 ESTABLISHED
534 TIME_WAIT
 

Informations sur le hardware

Revision 872012-03-05 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 3064 to 3064
 

Administration

Added:
>
>

IPTABLES (FIREWALL)

  • Quelles sont lès règles actuelles ?

/etc/init.d/iptables status

  • Fichiers :

ls /etc/sysconfig/iptables*

  • Modifs :

cd /etc/sysconfig/

1) modifs à faire sur iptables.clean

2) cp iptables.clean iptables

3) /etc/init.d/iptables restart

4) /etc/init.d/iptables save

5) /etc/init.d/iptables status (vérifier que les nouvelles règles apparaissent bien)

 

SVN (SUBVERSION)

Voir l'exemple du projet Europlanet : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN

Revision 862012-02-24 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2925 to 2925
 

FIND

Added:
>
>
Chercher le fichier "foo" sur tout le disque :

find / -name foo

(si on n'est pas root, on voit plein de messages d'erreur, donc pour éviter ça :

find / -name foo 2>/dev/null

 Supprimer tous les répertoires CVS/ dans toute une arborescence (à partir du répertoire courant) :

find . -name "CVS" -exec \rm -r {} \; > /dev/null 2>&1

Revision 852012-02-20 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2952 to 2952
 

Forwarder les mails du serveur

Added:
>
>
http://www.feep.net/sendmail/tutorial/intro/forward.html
 Par exemple, je veux forwarder mes mails de pallier@planetoweb.cesr.fr vers ma boite cesr ou encore ma boite perso :

cd ~

Revision 842012-01-31 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 554 to 554
  Quitter un programme +
Changed:
<
<
Afficher les propriétés +
>
>
Afficher les propriétés
<Command> + <I>
  Forcer à quitter : Command + Option + Escape
Line: 3053 to 3053
 

Administration

Added:
>
>

SVN (SUBVERSION)

Voir l'exemple du projet Europlanet : http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN

Voir l'exemple de la configuration pour chemcam : /etc/httpd/conf.d/vhosts/chemcam.conf (planetoweb)

Besoins à considérer avant de mettre en place une solution svn :

- accès via apache (et non pas seulement en svnserve) pour assurer un accès depuis l'extérieur et qui passe les firewall

- AUTH : accès authentifié (AuthType, AuthUserFile et Require valid-user)

Exceptionnellement, sur un projet avec différents groupes (mais uniquement si nécessaire car ralentit les accès svn et alourdit la gestion) :

- ACL : contrôle d'accès basé sur les chemins : (grâce au module authz_svn_module et à la directive AuthzSVNAccessFile), pour pouvoir réserver certains répertoires à certains groupes...

Exemple de config (chemcam) authentifiée mais SANS ACL :


        DAV svn

        ErrorDocument 404 default
        # Only 1 repository :
        SVNPath /home/projects/chemcam/svn
        # Many repositories :
        # any "/svn/foo" URL will map to a repository /home/svn/foo
        #SVNParentPath /home/svn 
        #SVNListParentPath on

        # Desactiver completement les controles sur les chemins (par defaut = on)
        SVNPathAuthz off

        # For any operations other than these (GET, PROFIND...), require an authenticated user
        # 
                Require valid-user
        #

        # AUTH
        AuthType Basic
        AuthName "CHEMCAM Subversion repository"
        # password file :
        AuthUserFile /chemin/vers/fichier/des/mots/de/passe

        # For any operations other than these, require an authenticated user (this would allow anybody to READ without authentication)


# Custom log file and format :
LogFormat "%t %u %h %{SVN-ACTION}e" svn
CustomLog logs/journal-svn.log svn env=SVN-ACTION

Exemple de config (chemcam) authentifiée et AVEC ACL :


        DAV svn

        ErrorDocument 404 default
        # Only 1 repository :
        SVNPath /home/projects/chemcam/svn
        # Many repositories :
        # any "/svn/foo" URL will map to a repository /home/svn/foo
        #SVNParentPath /home/svn 
        #SVNListParentPath on

        # Desactiver completement les controles sur les chemins (par defaut = on)
        SVNPathAuthz on

        # ACL
        # politique de controle d'acces (uses apache module mod_authz_svn)
        AuthzSVNAccessFile /chemin/vers/fichier/police_acces_svn

        # For any operations other than these (GET, PROFIND...), require an authenticated user
        # 
                Require valid-user
        #

        # AUTH
        AuthType Basic
        AuthName "CHEMCAM Subversion repository"
        # password file :
        AuthUserFile /chemin/vers/fichier/des/mots/de/passe

        # For any operations other than these, require an authenticated user (this would allow anybody to READ without authentication)


# Custom log file and format :
LogFormat "%t %u %h %{SVN-ACTION}e" svn
CustomLog logs/journal-svn.log svn env=SVN-ACTION

Format du fichier de police d'accès aux répertoires du projet svn (nommé police_acces_svn ci-dessus) :

[groups]
# Virtual Machine only group :
cc-vm = user1, user20, user7
# Privileged access group :
cc-privileged = user3, user2, user6, user8, user30

[/]
# cc-privileged group has total access to the project (and no one else)
@cc-privileged = rw
# access given to ALL users !!!
#* = rw

[/trunk/vm]
# cc-vm group has read only access to the /vm dir (and no other dir)
@cc-vm = r
# cc-vm group has no access at all to the /vm dir
#@cc-vm =

 

LVM (Logical Volume Management)

http://www.linux-mag.com/id/7454

Revision 832012-01-20 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 129 to 129
  Ici les commandes pour XAMPP.
Added:
>
>
(il suffit de placer /Applications/XAMPP/xamppfiles/bin dans mon $PATH pour que j'ai accès à toutes les commandes de xampp directement, telles que "mysql")
 /Applications/XAMPP/xamppfiles/bin/mysql appelle par ex.MySQL.

/Applications/XAMPP/htdocs/

Revision 822012-01-19 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 11 to 11
 

MAC OS X

Added:
>
>

locate

Il faut créer la bd une première fois :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

VIM

http://macvim.org/OSX/index.php

By default, Vim runs in "compatible" mode. That is, it acts a lot like traditional vi, without the improvements. Unless you want a maximally vi-compatible version of vim, I recommend that you copy the standard startup files to your home directory, and name them .vimrc and .gvimrc.

Ce que j'ai fait simplement :

1) recherche de vimrc_example :

locate vimrc

2) Copie locale :

cp /usr/share/vim/vim73/vimrc_example.vim .vimrc

 

Installation AMP avec XAMPP (solution la plus simple, bien pour le développement, mais pas très blindée pour un serveur de production)

Revision 812012-01-19 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 12 to 12
 

MAC OS X

Added:
>
>

Installation AMP avec XAMPP (solution la plus simple, bien pour le développement, mais pas très blindée pour un serveur de production)

Version 1.7.3

http://www.apachefriends.org/en/xampp-macosx.html

(ou aussi en french, mais moins à jour, http://www.apachefriends.org/fr/xampp-macosx.html)

1) Download

2) Install (environ 300Mo)

XAMPP est installé dans le répertoire/Applications/XAMPP

3) Démarrer

sudo /Applications/XAMPP/xamppfiles/xampp start

Sur l'écran devrait apparaitre les instructions suivantes:

Démarre XAMPP pour MacOS X 1.7.3... XAMPP: Démarre Apache avec SSL... XAMPP: Démarre MySQL... XAMPP: Démarre ProFTPD... XAMPP démarré.

Moi j'ai plutôt un pb avec proftpd, sans doute incompatible avec mac :

File permissions are being checked...ok. Starting XAMPP for Mac OS X 1.7.3... XAMPP: Starting Apache...ok. XAMPP: Starting MySQL...ok. XAMPP: Starting ProFTPD...XAMPP/XAMPP/xamppfiles/xampp: line 184: /Applications/XAMPP/xamppfiles//var/proftpd/start.err: No such file or directory fail. Contents of "/Applications/XAMPP/xamppfiles//var/proftpd/start.err": cat: /Applications/XAMPP/xamppfiles//var/proftpd/start.err: No such file or directory

4) Tester

http://localhost/ pointe automatiquement sur :

http://localhost/xampp/splash.php

et ça marche !

Si plus tard on remplace la page d'accueil de XAMPP par la sienne, on peut toujours joindre la page d'accueil de XAMPP avec http://localhost/xampp/

5) Aspects sécurité

Comme cela a déjà été expliqué antérieurement XAMPP n'est pas fait pour l'emploi de production, mais seulement pour développeur et l'environnement du développement. Cela a pour suite que XAMPP est volontairement préconfiguré pour ne pas être restrictif et être au contraire trés ouvert. Pour un développeur cela est idéal qu'il ne soit pas limité par les limites du systéme. Par contre pour un emploi en production cela est absolument pas recommendable.

Ici, une liste de choses donc XAMPP est volontairement(!) insécurisé:

1. L'administrateur (root)MySQL n'a pas de mot de passe. 2. Le démon MySQL est joignable par le réseau. 3. Le démon ProFTPD utilise le mot de passe "xampp". 4. PhpMyAdmin est joignable par le réseau. 5. MySQL et Apache fonctionne sous le même utilisateur (nobody)

Dans la page XAMPP-Demo (que l'on trouve sous http://localhost) il y a le point "Security check". À cet endroit on peut faire apparaître le niveau de sécurité actuel de XAMPP.

Si on veut utiliser XAMPP en réseau , pour que le serveur XAMPP soit accessible par d'autres utilisateurs, alors il faut impérativement exécuter les commandes suivantes avec lesquelles ont pourra alors limiter les failles de sécurité:

/Applications/XAMPP/xamppfiles/xampp security

6) START et STOP

To start XAMPP simply open XAMPP Control and start Apache, MySQL and ProFTPD.

Mais, on peut aussi utiliser la commande /Applications/XAMPP/xamppfiles/xampp :

on peut non seulement démarrer Xampp mais aussi exécuter d'autres commandes :

Pour arrêter XAMPP simplement entrer cette commande:

/Applications/XAMPP/xamppfiles/xampp stop

Pour démarrer Apache avec support SSL suivre les commandes suivantes:

/Applications/XAMPP/xamppfiles/xampp startssl

Et Apache avec support SSL fonctionne déjà. Joignable sous https://localhost.

Liste des autres commandes : http://www.apachefriends.org/fr/xampp-macosx.html#3413

7) FICHIERS ET RÉPERTOIRES IMPORTANTS

/Applications/XAMPP/xamppfiles/bin

Ici les commandes pour XAMPP.

/Applications/XAMPP/xamppfiles/bin/mysql appelle par ex.MySQL.

/Applications/XAMPP/htdocs/

Le répertoire Root du serveur web Apache. Ici sont les pages web d'Apache.

/Applications/XAMPP/etc/httpd.conf

Le fichier central de configuration du serveur web Apache.

/Applications/XAMPP/etc/my.cnf

Le fichier de configuration pour le serveur MySQL-Base de données.

/Applications/XAMPP/etc/php.ini

Le fichier de configuration de PHP.

/Applications/XAMPP/etc/proftpd.conf

le fichier de configuration de ProFTPd.

8) Mes Sites Webs

You can put your Websites in /Applications/XAMPP/htdocs/ and access them via http://localhost/

Or you put your Websites in the Sites-Folder in your Home and access them via http://localhost/~pallier/.

Whats the username and the password for MySQL?

Username: root Password: No password

9) Désinstallation

To uninstall XAMPP just stop it and move it to the Trash.

Ou bien

sudo rm -rf /Applications/XAMPP

 

Installation AMP (Apache Mysql Php) en utilisant MacPort

http://www.blogafab.com/installer-apache-2-mysql-5-et-php-5-3-sur-mac-os-10-7-lion-avec-macport/

Line: 30 to 169
  sudo port -v selfupdate
Changed:
<
<
  • Installation Apache 2
>
>

Installation Apache 2

  Téléchargez et installez Apache2 et ses dépendances :
Line: 43 to 182
 fichiers sont dans /Library/LaunchDaemons/org.macports.apache2.plist

Changed:
<
<
>
>

Installation MySQL 5

  Téléchargez et installez MySQL 5 et ses dépendances :
Line: 66 to 205
  sudo port load mysql5

Changed:
<
<
  • Installation PHP 5.3
>
>

Installation PHP 5.3

  Téléchargez et installez PHP 5.3 et ces dépendances. A noter ici que je choisi également d’activer le PEAR, d’où le +pear.
Line: 91 to 230
 
  • Configuration de votre environnement LAMP
Changed:
<
<
Configuration Apache 2
>
>

Configuration Apache 2

  Les étapes ci-dessous permettent de configurer le support de PHP dans Apache et d’activer le module UserDir (facultatif).
Line: 132 to 271
  sudo /opt/local/apache2/bin/apachectl restart
Changed:
<
<
Configuration MySQL 5
>
>

Configuration MySQL 5

  Les étapes ci-dessous ont pour objectif de configurer et sécuriser votre serveur MySQL.
Line: 144 to 283
  sudo /opt/local/lib/mysql5/bin/mysql_secure_installation
Changed:
<
<
Configuration PHP 5
>
>

Configuration PHP 5

  Configurer MySQL pour PHP Éditez le fichier /opt/local/etc/php5/php.ini
Line: 171 to 310
  Une fois les modifications terminées, redémarrez votre serveur Apache 2.
Added:
>
>

Gestion

Apache :

Fichier gestion : /Library/LaunchDaemons/org.macports.apache2.plist

start : sudo port load apache2 (apachectl start/stop ne semble pas marcher)

Voir les processus apache : ps -efl|grep apac

stop : sudo port load apache2

(le Apache d'origine de Mac est démarré via les préférences systèmes, partage, web : on voit alors les processus avec "ps -efl | grep http")

 

Installation AMP (Apache Mysql Php) en utilisant les packages Mac OS pré-existant

apache déjà installé, mais pas activé

Revision 802012-01-18 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 792012-01-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 26 to 26
  Lancez le fichier .pkg et suivez les instructions
Added:
>
>
Crée un fichier ~pallier/.bash_login qui ajoute /opt/local/bin au PATH
 sudo port -v selfupdate

  • Installation Apache 2
Changed:
<
<
Téléchargez et installez Apache2 et ces dépendances :
>
>
Téléchargez et installez Apache2 et ses dépendances :
  sudo port install apache2
Line: 43 to 45
 
Changed:
<
<
Téléchargez et installez MySQL 5 et ces dépendances :
>
>
Téléchargez et installez MySQL 5 et ses dépendances :
  sudo port install mysql5
Line: 89 to 91
 
  • Configuration de votre environnement LAMP
Added:
>
>
Configuration Apache 2

Les étapes ci-dessous permettent de configurer le support de PHP dans Apache et d’activer le module UserDir (facultatif).

Activer PHP dans Apache Éditez le fichier /opt/local/apache2/conf/httpd.conf Ajoutez à la fin du fichier

# Include PHP configuration Include conf/extra/mod_php.conf

Ajouter index.php dans les pages d’index reconnues par Apache Éditez le fichier /opt/local/apache2/conf/httpd.conf Recherchez la ligne ci-dessous :

DirectoryIndex index.html

Ajoutez sur la même ligne, à la fin :

index.php

Étape optionnelle : Activer l’extension UserDir pour Apache. Cette extension permet d’avoir des urls dédiées pour chaque utilisateur de l’ordinateur du type http://localhost/~utilisateur/ Éditez le fichier /opt/local/apache2/conf/httpd.conf Recherchez et décommentez la ligne ci-dessous :

#Include conf/extra/httpd-userdir.conf

Étape optionnelle : Autoriser l’ajout/suppression d’options via un .htaccess (exemple Options +FollowSymLinks) Éditez le fichier /opt/local/apache2/conf/extra/httpd-userdir.conf Recherchez la ligne ci-dessous :

AllowOverride FileInfo AuthConfig Limit Indexes

Ajoutez sur la même ligne, à la fin :

Options

Une fois les modifications effectuées, vous pouvez (re)démarrer Apache :

sudo /opt/local/apache2/bin/apachectl restart

Configuration MySQL 5

Les étapes ci-dessous ont pour objectif de configurer et sécuriser votre serveur MySQL.

Démarrez le serveur MySQL

sudo /opt/local/lib/mysql5/bin/mysqld_safe &

Sécurisez votre serveur MySQL. Je vous recommande de configurer le mot de passe root et de répondre « Yes » à toutes les questions.

sudo /opt/local/lib/mysql5/bin/mysql_secure_installation

Configuration PHP 5

Configurer MySQL pour PHP Éditez le fichier /opt/local/etc/php5/php.ini Recherchez les paramètres pdo_mysql.default_socket, mysql.default_socket, mysqli.default_socketet mettez comme valeur ceci :

/opt/local/var/run/mysql5/mysqld.sock

Configurer le fuseau horaire par défaut Éditez le fichier /opt/local/etc/php5/php.ini Recherchez la ligne suivante :

;date.timezone =

Remplacez par :

date.timezone = "Europe/Paris"

Étape optionnelle : Activer les archives Phar Éditez le fichier /opt/local/etc/php5/php.ini Recherchez et décommentez la ligne ci-dessous

;phar.readonly = On

Une fois les modifications terminées, redémarrez votre serveur Apache 2.

 

Installation AMP (Apache Mysql Php) en utilisant les packages Mac OS pré-existant

apache déjà installé, mais pas activé

Revision 782012-01-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 12 to 12
 

MAC OS X

Changed:
<
<

Installation AMP (Apache Mysql Php)

>
>

Installation AMP (Apache Mysql Php) en utilisant MacPort

http://www.blogafab.com/installer-apache-2-mysql-5-et-php-5-3-sur-mac-os-10-7-lion-avec-macport/

Install XCode4 via AppleStore (1,8 Go) (AC)

Install MacPort2 (1,7Mo only) :

Téléchargez MacPorts 2.0 sur le site officiel http://www.macports.org/

Ouvrez le fichier .dmg que vous venez de télécharger

Lancez le fichier .pkg et suivez les instructions

sudo port -v selfupdate

  • Installation Apache 2

Téléchargez et installez Apache2 et ces dépendances :

sudo port install apache2

Une fois l’installation terminée, vous pouvez activer lancement automatique de Apache au démarrage de l’ordinateur :

sudo port load apache2

fichiers sont dans /Library/LaunchDaemons/org.macports.apache2.plist

Téléchargez et installez MySQL 5 et ces dépendances :

sudo port install mysql5

Installez/Activez le serveur MySQL 5 :

sudo port install mysql5-server

Une fois l’installation terminée, vous pouvez activer le lancement automatique de MySQL au démarrage de l’ordinateur :

sudo port load mysql5-server

Terminez l’installation de MySQL :

sudo -u _mysql mysql_install_db5

Une fois l’installation terminée, vous pouvez lancer MySQL au démarrage de l’ordinateur :

sudo port load mysql5

  • Installation PHP 5.3

Téléchargez et installez PHP 5.3 et ces dépendances. A noter ici que je choisi également d’activer le PEAR, d’où le +pear.

sudo port install php5 +pear

Ajoutez le module PHP pour Apache 2 :

sudo /opt/local/apache2/bin/apxs -a -e -n "php5" /opt/local/apache2/modules/libphp5.so

Créez le fichier de configuration php.inide PHP :

sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini

Installez et activez MySQL pour PHP :

sudo port install php5-mysql

Étape optionnelle : Installez quelques extensions utiles pour PHP (apc, curl, gd, iconv, mbstring, …).

sudo port install php5-apc php5-curl php5-gd php5-iconv php5-intl php5-mbstring php5-mcrypt php5-posix php5-sqlite php5-xdebug php5-zip

  • Configuration de votre environnement LAMP

Installation AMP (Apache Mysql Php) en utilisant les packages Mac OS pré-existant

  apache déjà installé, mais pas activé
Line: 28 to 105
  /usr/sbin/
Added:
>
>
Documents : /Library/Webserver/Documents/
 

PHP

v5.3.6

Line: 38 to 117
  Ensuite réactiver le serveur apache (voir ci-dessus)
Added:
>
>
Ajouter test.php dans le rep doc de apache qui contient :

http://localhost/test

ou encore http://localhost:80/test

Mysql 5.5.20

http://www.patpro.net/blog/index.php/2008/01/27/135-mysql-sur-mac-os-x-105-en-5-minutes/

Download :

 
Added:
>
>
http://dev.mysql.com/downloads/
 
Changed:
<
<

Mysql

>
>
Community server
 
Added:
>
>
version 64 bits (format DMG) pour Mac OS 10.6
 

Configuration

Revision 772012-01-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 12 to 12
 

MAC OS X

Added:
>
>

Installation AMP (Apache Mysql Php)

apache déjà installé, mais pas activé

php déjà installé mais pas activé

mysql à installer

Apache

Pour activer le serveur, allez dans Préférences système -> Partage et cochez la case Partage Web. Si elle est déjà cochée, décochez-la pour arrêter le serveur et recochez-là pour que la modification du fichier httpd.conf soit prise en compte.

v2.2.20

/usr/sbin/

PHP

v5.3.6

Php : /usr/lib/

Pour activer PHP il faut décommenter la ligne #LoadModule php5_module libexec/apache2/libphp5.so du fichier httpd.conf situé dans le dossier apache2 du dossier etc.

Ensuite réactiver le serveur apache (voir ci-dessus)

Mysql

 

Configuration

Revision 762012-01-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 246 to 246
 

ECLIPSE

Changed:
<
<

Install Eclipse Indigo (3.7) sur Mac OS X (10.7.2) avec Yoxos

>
>

Install Eclipse Indigo (3.7) sur Mac OS X (10.7.2) avec Yoxos : NE MARCHE PAS

  1) Download Yoxos :
Line: 278 to 278
 http://fest.easytesting.org/ http://docs.codehaus.org/display/FEST/Home
Added:
>
>
CA NE MARCHE PAS !!!

DONC, INSTALLATION MANUELLE (ci-dessous)

 

SVN avec le plugin Subclipse

Changed:
<
<
http://subclipse.tigris.org
>
>
1) (Pas sûr que ça soit nécessaire) install client subversion en local sur le disque (avec JavaHL)

(http://subclipse.tigris.org/wiki/JavaHL#head-5bf26515097c3231c1b04dfdb22c036bc511926b)

http://www.open.collab.net/downloads/community/

downloaded subversion 1.6.x

Installé dans /opt/subversion (/opt a été créé pour l'occasion lors de l'installation !!!!)

Uninstallation Notes To uninstall the Subversion 1.6.17 Universal binary, just run the following:

sudo rm -fR /opt/subversion pkgutil --forget net.collab.subversion

2) install subclipse (plugin eclipse)

Help / Install new software

http://subclipse.tigris.org/update_1.6.x/ (la version 1.8 ne marchait pas)

(pour info, voir http://subclipse.tigris.org)

 

JUnit

Revision 752012-01-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 246 to 246
 

ECLIPSE

Added:
>
>

Install Eclipse Indigo (3.7) sur Mac OS X (10.7.2) avec Yoxos

1) Download Yoxos :

http://eclipsesource.com/en/downloads/eclipse-indigo-download/

download for mac 64 bits

2) Run Yoxos :

Add "Eclipse for java developpers"

SwingDesigner (inclus) : http://code.google.com/intl/fr/javadevtools/wbpro/whatsnew/index.html

WindowBuilder (inclus) : http://code.google.com/intl/fr/javadevtools/wbpro/quick_start.html

(Junit est déjà inclut)

Add subclipse

Add pdt

Add MakeGood (TDD intégré à pdt)

Add php source feature (automatic php code generation, getters, setters...)

FEST ??? : http://code.google.com/p/fest/ http://fest.easytesting.org/ http://docs.codehaus.org/display/FEST/Home

 

SVN avec le plugin Subclipse

http://subclipse.tigris.org

Revision 742012-01-06 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 9 to 9
 
Added:
>
>

MAC OS X

Configuration

masquer/afficher le dock (barre du bas) : cmd-alt-D

Avoir accès au labo depuis l'extérieur (via la passerelle SSH du labo) : suivre la procédure décrite sur l'intranet (https://intranet.irap.omp.eu/spip.php?article103)

  • Créer un mot de passe pour root

Par défaut, root n'a pas de mot de passe, il faut donc en définir un :

su passwd root

Ensuite, pour passer root, comme d'hab :

su -

ou

su - root

ou

sudo -s

  • changer définitivement le nom du mac (hostname) : pour moi c'était "mac-13"

pomme, préférences systèmes, partage : changer le nom, puis fermer

(sudo hostname newname ne change que temporairement)

sudo scutil --set HostName hostname[.domain]

(if the domain is not specified the hostname will be automatically configured as .local)

  • Créer un script de démarrage bash

vi .bash_login : source .bash_rc

vi .bash_rc : alias l="ls -l"

  • Installer sprinter

Pref Sys / Imprimantes

bouton "+"

bouton "IP"

rechercher "sprinter.cesr.fr"

elle est trouvée en tant que "hp laserjet 2300 series"

  • Partitionnement du disque :

http://www.osxfacile.com/partition.html

Applications / Utilitaires / Utilitaire de disque

onglet "Partition"

Diminuer la partition unique "Macintosh HD" de 500 à 100Go

Bouton "+" pour ajouter une nouvelle partition de 400Go

  • modif du mapping clavier :

http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=ukelele

http://support.apple.com/kb/HT1220

  • Firefox

ScrapBook plugin : Volumes/DATA/ScrapBook

Transition depuis le monde Windows

Visualiser un dossier ou fichier caché : http://perso.univ-lyon2.fr/~brogniar/articles/mosx-fichier-invisible.html

maj-pom-G

Pour montrer les éléments cachés il faut taper la commande "defaults write com.apple.finder AppleShowAllFiles 1". Pour cacher à nouveau les fichiers et dossiers spéciaux il faut taper la commande "defaults write com.apple.finder AppleShowAllFiles 0". L'utilitaire TinkerTool de Marcel Bresink permet de régler ces préférences d'une manière plus conviviale.

  • Déplacement clavier :

home : cmd left end : cmd right mot : alt left/right Effacer le mot suivant Ctrl+Suppr

  • Navigation :

entre applis : Cmd Tab entre onglets d'une mm appli : ctrl tab entre fenêtres d'une mm appui : (alt tab ???) cmd * (sur clavier mac, c'est cmd `, sous le £), à droite de la lettre "m"

Transition depuis le monde Linux

packages = .dmg

  • Gestion des Services

Pas de /etc/init.d/

A la place :

/System/Library/StartupItems et /Library/StartupItems

Apple provides a program called SystemStarter which is used to start and stop scripts in the /System -> Library -> StartupItems and /Library -> StartupItems folders. You can use it to restart services like so: % sudo SystemStarter restart NetInfo Or if you've just installed GimpPrint and need to restart CUPS for it to find your printer: % sudo SystemStarter restart PrintingServices The one caveat is that all the start, stop, and restart options do is pass this argument to the various scripts. If the script doesn't respond to that argument, nothing happens. An example is AppServices, which controls coreservicesd. Sending stop or restart to this script has no effect.

Type man SystemStarter and browse through the various scripts to learn more about the program and the scripts.

Astuces, raccourcis clavier

RACCOURCIS

caractère DIESE : maj alt * (touche à droite du "m")

Refaire (Ctrl+Maj+Z) Cmd+Maj+Z Ouvrir un menu contextuel (Maj+F10) Ctrl+Espace

(Windows-E) Cmd-Maj-C Ouvre la fenêtre Computer sous Windows. / Va sur la vue Computer dans le Finder sous Mac OS X

(Ctrl-Maj-Echap) Cmd-Option-Esc Ouvre une fenêtre permettant de forcer l'arrêt d'une application

Quitter un programme +

Afficher les propriétés +

Forcer à quitter : Command + Option + Escape

Capture d'écran : Command + Shift + 3

Bureau : F11

Voir l'ensemble des appris en réduction : F9 et F10

Masquer finder : cmd H

Masquer les autres : cmd alt H

Créer un alias : Pom-alt + déplacer une icone sur bureau

Créer un alias/raccourci : Command + L

=========================================================

 

JAVA

Start a Java program

Revision 732011-12-08 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2031 to 2031
 

Utilisation

Deleted:
<
<

TOP : Informations sur la charge CPU et la consommation mémoire provoquée par les processus

 
Deleted:
<
<
http://www.loligrub.be/contrib/tlepoint/BASE/node104.html
 
Deleted:
<
<
La commande top classe tous les processus par leur consommation de la CPU et de la mémoire.
 
Deleted:
<
<
Elle affiche le "top 20" sous forme d'une table
 
Deleted:
<
<
top -n 1 -b > top.txt affiche tous les processus
 
Deleted:
<
<
top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.
 
Deleted:
<
<
O N pour trier par occupation mémoire
 
Deleted:
<
<
O K pour trier par charge CPU (par défaut)
 

Informations sur le hardware

Line: 2056 to 2048
 
  • CPU(s)
Added:
>
>
http://www.cyberciti.biz/faq/linux-display-cpu-information-number-of-cpus-and-their-speed/
 cat /proc/cpuinfo

Plus précisément :

Line: 2075 to 2069
 dmidecode --type 4 | grep -c Socket
Added:
>
>
CPU utilization

TOP : Informations sur la charge CPU et la consommation mémoire provoquée par les processus

http://www.loligrub.be/contrib/tlepoint/BASE/node104.html

http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html

La commande top classe tous les processus par leur consommation de la CPU et de la mémoire.

Elle affiche le "top 20" sous forme d'une table

top -n 1 -b > top.txt affiche tous les processus

top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.

O N pour trier par occupation mémoire

O K pour trier par charge CPU (par défaut)

1 pour montrer/cacher chaque processeur séparément

mpstat (fait partie du package sysstat)

mpstat -P ALL

You can display today’s CPU activity, with sar

sar

For example display comparison of CPU utilization; 2 seconds apart; 5 times, use:

# sar -u 2 5

(for each 2 seconds. 5 lines are displayed)

To get multiple samples and multiple reports, set an output file for the sar command. Run the sar command as a background process using.

# sar -o output.file 12 8 >/dev/null 2>&1 &

Better use nohup command so that you can logout and check back report later on:

# nohup sar -o output.file 12 8 >/dev/null 2>&1 &

puis pour lire : sar -f output.file

%user = % temps cpu utilisé par les applications

%system = % temps cpu utilisé par le kernel

%iowait = % temps cpu utilisé à attendre une requête I/O

displays the top 10 CPU users :

ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10

ps command displays every process (-e) with a user-defined format (-o pcpu). First field is pcpu (cpu utilization). It is sorted in reverse order to display top 10 CPU eating process.

iostat :

It can be use to find out your system's average CPU utilization since the last reboot.

$ iostat

This gives you three outputs every 5 seconds (as previous command gives information since the last reboot):

$ iostat -xtc 5 3

gnome-system-monitor : allows you to view and control the processes

Voir aussi http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html

 

SSH

Revision 722011-12-01 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2016 to 2016
  http://forum.webrankinfo.com/petite-astuce-pour-afficher-simplement-code-html-t32812.html
Added:
>
>
La commande top classe tous les processus par leur consommation de la CPU et de la mémoire

Elle affiche le "top 20" sous forme d'une table

top -n 1 -b > top.txt affiche tous les processus

top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.

 

LINUX

Line: 2024 to 2031
 

Utilisation

Added:
>
>

TOP : Informations sur la charge CPU et la consommation mémoire provoquée par les processus

http://www.loligrub.be/contrib/tlepoint/BASE/node104.html

La commande top classe tous les processus par leur consommation de la CPU et de la mémoire.

Elle affiche le "top 20" sous forme d'une table

top -n 1 -b > top.txt affiche tous les processus

top -n 1 -b -p affiche de l'information à propos d'un processus en désignant ce dernier par son PID.

O N pour trier par occupation mémoire

O K pour trier par charge CPU (par défaut)

 

Informations sur le hardware

  • RAM

Revision 712011-11-26 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2352 to 2352
  2) mapping identité entre les partitions physiques (PP) et virtuelles (PV) : 1 PV = 1 PP
Added:
>
>
Make sure the partition type for the physical volumes is correct. The partition type should be “8e”.

# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       30400   244187968+  8e  Linux LVM
/dev/sdb2           30401       60801   244196032+  8e  Linux LVM

# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created

# pvdisplay
  "/dev/sdb1" is a new physical volume of "232.88 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               232.88 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               j4XKT6-OI2y-cPMK-YpNR-gmgc-es67-ey4CV2

  "/dev/sdb2" is a new physical volume of "232.88 GB"
  --- NEW Physical volume ---
...

Notice that each PV is given a PV UUID

 3) Les PV sont regroupés en 1 à n volume group (VG) (a VG can be seen as a "virtual hd")

ex : le VG primary_vg regroupera /dev/sda1, /dev/sda2 , /dev/sdb1, et /dev/sdb3

Changed:
<
<
4) Chaque VG est redécoupé en m logical group (LG) : 1 VG = m LG (a LG can be seen as a "virtual partition")
>
>
# vgcreate primary_vg /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
  Volume group "primary_vg" successfully created

# vgdisplay
  --- Volume group ---
  VG Name               primary_vg
  System ID
  Format                lvm2
  Metadata Areas        4
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                4
  Act PV                4
  VG Size               931.52 GB
  PE Size               4.00 MB
  Total PE              238468
  Alloc PE / Size       0 / 0
  Free  PE / Size       238468 / 931.52 GB
  VG UUID               oNH6jk-PBE0-mR0c-aaDi-3Fys-y5SQ-0tVaxX

If you don't happen to remember the name of a VG or you happen upon a new system to administer, then you can use a command called "vgscan" that will tell what VG's are on the system.

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "primary_vg" using metadata type lvm2

4) Chaque VG est redécoupé en m logical volume (LV) : 1 VG = m LV (a LV can be seen as a "virtual partition")

  ex : le VG primary_vg est redécoupé en 2 LV : /dev/primary_vg/home_lv et /dev/primary_vg/data_lv
Added:
>
>
# lvcreate --name /dev/primary_vg/home_lv --size 450G
  Logical volume "home_lv" created

lvdisplay...

lvscan...

 5) Sur chaque LG, on monte un système de fichier (FS) :

ex : /home monté en ext3 sur le LV home_lv et /data monté en xfs sur le LV data_lv

Added:
>
>
Comment
# mkfs.ext3 /dev/primary_vg/home_lv
...

Comment faire un snaphot ?

 
Added:
>
>
http://www.linux-mag.com/id/7454/2/
 
Added:
>
>
For example, if the file system says it has 29G used (29 GB), then you should snapshot a little larger – perhaps 30-32 GB (always good to have a cushion). This cushion isn’t strictly necessary, but a little safety never hurts...
 

Revision 702011-11-23 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2338 to 2338
 

Administration

Added:
>
>

LVM (Logical Volume Management)

http://www.linux-mag.com/id/7454

LVM can be used to effectively manage storage to make expansion, snapshots, and other aspects of storage fairly easy.

LVM allows you to abstract various pieces of physical storage into groups that can be carved into chunks that form the basis of file systems (virtual partitions if you like). It also allows you to combine physical partitions into groups, resize these groups (grow or shrink), and effectively manage these groups.

1) h physical hd découpés chacun en p physical partitions (PP) (pas forcément le même nb de partitions pour chaque hd)

ex : sda découpé en /dev/sda1, /dev/sda2 et sdb découpé en /dev/sdb1, /dev/sdb2, /dev/sdb3

2) mapping identité entre les partitions physiques (PP) et virtuelles (PV) : 1 PV = 1 PP

3) Les PV sont regroupés en 1 à n volume group (VG) (a VG can be seen as a "virtual hd")

ex : le VG primary_vg regroupera /dev/sda1, /dev/sda2 , /dev/sdb1, et /dev/sdb3

4) Chaque VG est redécoupé en m logical group (LG) : 1 VG = m LG (a LG can be seen as a "virtual partition")

ex : le VG primary_vg est redécoupé en 2 LV : /dev/primary_vg/home_lv et /dev/primary_vg/data_lv

5) Sur chaque LG, on monte un système de fichier (FS) :

ex : /home monté en ext3 sur le LV home_lv et /data monté en xfs sur le LV data_lv

 

soft RAID (Redundant Array of Inexpensive Disks)

http://smpfr.mesdiscussions.net/smpfr/Software/soft-linux-nuls-sujet_338_1.htm

Revision 692011-11-18 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2088 to 2088
  Par exemple, depuis chez moi, je veux me connecter à hyperion
Changed:
<
<
Il me faut donc passer par fw-in (le firewall cesr)
>
>
Il me faut donc passer par FIREWALL (le firewall du labo)
  1) le plus simple, méthode manuelle (depuis mon pc)
Changed:
<
<
ssh fw-in.cesr.fr (entrer le mot de passe utilisé pour le mail)
>
>
ssh FIREWALL (entrer le mot de passe utilisé pour le mail)
  puis

ssh hyperion.cesr.fr (entrer votre mot de passe hyperion)

Changed:
<
<
(NB : "ssh -X fw-in", puis "ssh -X hyperion" si on veut l'affichage graphique)
>
>
(NB : "ssh -X FIREWALL", puis "ssh -X hyperion" si on veut l'affichage graphique)
  Il faut taper 2 fois "exit" pour revenir à mon pc.
Line: 2109 to 2109
  ssh-keygen -t dsa
Changed:
<
<
Puis, je distribue ensuite la clé publique à la fois sur fw-in ET sur hyperion :
>
>
Puis, je distribue ensuite la clé publique à la fois sur FIREWALL ET sur hyperion :
 
Changed:
<
<
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub fw-in.cesr.fr
>
>
ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub FIREWALL
  ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub hyperion.cesr.fr
Changed:
<
<
Tester maintenant à nouveau la double connexion (fw-in, puis hyperion) :
>
>
Tester maintenant à nouveau la double connexion (FIREWALL, puis hyperion) :
 
Changed:
<
<
ssh fw-in.cesr.fr (sans mot de passe)
>
>
ssh FIREWALL (sans mot de passe)
  puis
Line: 2128 to 2128
 (je tape 2 fois "exit" pour revenir à mon pc)
Changed:
<
<
3) Pour accélérer la connexion : ETAPE 2, automatiser le "rebond" par fw-in
>
>
3) Pour accélérer la connexion : ETAPE 2, automatiser le "rebond" par FIREWALL
 
Changed:
<
<
On va maintenant rendre transparent le passage via fw-in. Il suffit pour cela de créer un fichier de config :
>
>
On va maintenant rendre transparent le passage via FIREWALL. Il suffit pour cela de créer un fichier de config :
  DEPUIS MON PC, j'édite le fichier /home/USERNAME/.ssh/config, et j'y mets le contenu suivant :

Host hyp hyperion hyperion.cesr.fr
        Hostname hyperion.cesr.fr
Changed:
<
<
ProxyCommand ssh fw-in.cesr.fr nc %h %p 2> /dev/null
>
>
ProxyCommand ssh FIREWALL nc %h %p 2> /dev/null
 

(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)

Line: 2150 to 2150
  (ou "ssh hyperion" ou "ssh hyperion.cesr.fr")
Changed:
<
<
On n'a plus besoin de rentrer aucun mot de passe (ni de fw-in, ni de hyperion), c'est direct !
>
>
On n'a plus besoin de rentrer aucun mot de passe (ni de FIREWALL, ni de hyperion), c'est direct !
  (il suffit de taper une seule fois "exit" pour revenir à mon pc)
Line: 3229 to 3229
  Exécuter Putty
Changed:
<
<
Si vous avez déjà une session vers fw-in, inutile d'en recréer une autre, vous pouvez l'utiliser. Sinon, il faut créer une nouvelle session :
>
>
Si vous avez déjà une session vers FIREWALL, inutile d'en recréer une autre, vous pouvez l'utiliser. Sinon, il faut créer une nouvelle session :
 
Changed:
<
<
Host name : fw-in.cesr.fr
>
>
Host name : FIREWALL
  Port : 22
Changed:
<
<
Saved Sessions : fw-in (ou ce que vous voulez, par exemple "le firewall du cesr")
>
>
Saved Sessions : FIREWALL (ou ce que vous voulez, par exemple "le firewall du cesr")
  Dans le panneau de gauche (Category:), cliquer sur l'arbre "Connection", puis "SSH", puis "Tunnels"
Line: 3251 to 3251
  Cliquer sur bouton "Save"
Changed:
<
<
Ouvrir cette session (fw-in) que vous venez de créer, et se connecter sur fw-in (avec votre mot de passe mail).
>
>
Ouvrir cette session (FIREWALL) que vous venez de créer, et se connecter sur FIREWALL (avec votre mot de passe mail).
 

b) Créer une session graphique

Line: 3342 to 3342
 1) "Creuser" un tunnel avec Putty

Créer une nouvelle session que vous appelerez par exemple "tunnel_mail_cesr",

Changed:
<
<
et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail cesr (fw-in.cesr.fr).
>
>
et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail cesr (FIREWALL).
  La procédure est décrite sur la faq informatique du cesr : http://www1.cesr.fr/intranet/informatique/faq/ssh-tunnels/ssh.htm#_Toc150503764

Revision 682011-11-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 69 to 69
 

ECLIPSE

Added:
>
>

SVN avec le plugin Subclipse

http://subclipse.tigris.org

 

JUnit

1) installer Eclipse pour Java (testé avec 3.7 Indigo)

Revision 672011-11-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 79 to 79
  http://www.vogella.de/articles/JUnit/article.html
Changed:
<
<
To write a test with JUnit
>
>
http://junit.sourceforge.net/doc/cookbook/cookbook.htm
 
Changed:
<
<
Annotate a method with @org.JUnit.Test
>
>
When you need to test something, here is what you do:
    Annotate a method with @org.junit.Test
    When you want to check a value, import org.junit.Assert.* statically, call assertTrue() and pass a boolean that is true if the test succeeds
    (Use a method provides by JUnit to check the expected result of the code execution versus the actual result)

For example, to test that the sum of two Moneys with the same currency contains a value which is the sum of the values of the two Moneys, write:

@Test 
public void simpleAdd() {
        Money m12CHF= new Money(12, "CHF"); 
        Money m14CHF= new Money(14, "CHF"); 
        Money expected= new Money(26, "CHF"); 
        Money result= m12CHF.add(m14CHF); 
        assertTrue(expected.equals(result));
}

Fixture :

What if you have two or more tests that operate on the same or similar sets of objects?

Tests need to run against the background of a known set of objects. This set of objects is called a test fixture. When you are writing tests you will often find that you spend more time writing the code to set up the fixture than you do in actually testing values.

To some extent, you can make writing the fixture code easier by paying careful attention to the constructors you write. However, a much bigger savings comes from sharing fixture code. Often, you will be able to use the same fixture for several different tests. Each case will send slightly different messages or parameters to the fixture and will check for different results.

When you have a common fixture, here is what you do:

Add a field for each part of the fixture Annotate a method with @org.junit.Before and initialize the variables in that method Annotate a method with @org.junit.After to release any permanent resources you allocated in setUp

For example, to write several test cases that want to work with different combinations of 12 Swiss Francs, 14 Swiss Francs, and 28 US Dollars, first create a fixture:

public class MoneyTest { private Money f12CHF; private Money f14CHF; private Money f28USD;

@Before public void setUp() { f12CHF= new Money(12, "CHF"); f14CHF= new Money(14, "CHF"); f28USD= new Money(28, "USD"); } }

Once you have the Fixture in place, you can write as many Test Cases as you'd like. Add as many test methods (annotated with @Test) as you'd like.

 
Deleted:
<
<
Use a method provides by JUnit to check the expected result of the code execution versus the actual result
  You use a tool like Eclipse or the class "org.junit.runner.JUnitCore" to run the test.
Line: 198 to 244
 
Annotation 	Description
@Test public void method() 	Annotation @Test identifies that this method is a test method.

Changed:
<
<
@Before public void method() Will perform the method() before each test. This method can prepare the test environment, e.g. read input data, initialize the class)
>
>
@Before public void method() Will perform the method() before each test. This method can prepare the test environment (called a "fixture"), e.g. read input data, initialize the class)
 @After public void method() Test method must start with test @BeforeClass public void method() Will perform the method before the start of all tests. This can be used to perform time intensive activities for example be used to connect to a database @AfterClass public void method() Will perform the method after all tests have finished. This can be used to perform clean-up activities for example be used to disconnect to a database
Line: 226 to 272
 
Added:
>
>
8) Fixture (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)

9) Running Tests FROM JAVA (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)

10) Expected Exceptions (see http://junit.sourceforge.net/doc/cookbook/cookbook.htm)

 

WIKI

Voir aussi InformationAboutThisTwiki

Revision 662011-11-15 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Changed:
<
<
Cette page donne des réponses à diverses questions informatique
>
>
Cette page donne des réponses à diverses questions informatique (Etienne Pallier)
  Voir aussi ComputerScience

Added:
>
>

JAVA

Start a Java program

http://www.vogella.de/articles/JavaIntroduction/article.html#classpath

Run your program outside Eclipse :

Open a command shell, e.g. under Microsoft Windows select Start -> Run and type in cmd. This should open a consle.

Switch to your output directory, e.g. by typing cd path, e.g. if you jar is located in "c:\temp" type "cd c:\temp".

To run this program you need to include the jar file into your classpath.

				
java -classpath myprogram.jar de.vogella.eclipse.ide.first.MyFirstClass

You can use the classpath to run the program from another place in your directory.

Switch to the command line, e.g. under Windows Start-> Run -> cmd. Switch to any directory you want. Type:

java HelloWorld

If you are not in the directory in which the compiled class is stored then the system should result an error message Exception in thread "main" java.lang.NoClassDefFoundError: test/TestClass

To use the class type the following command. Replace "mydirectory" with the directory which contains the test directory. You should again see the "HelloWorld" output.

			
java -classpath "mydirectory" HelloWorld

Create an executable JAR

A JAR file is a Java Archive based on the pkzip file format. A jar files can contain java classes and other resources (icons, property files) and can be executable.

JAR files are the deployment format for Java. You can distribute your program in a jar file or you can use exiting java code via jars by putting them into your classpath.

An executable JAR means the end-user doesn't have to pull the class files out before running the program. This is done via a manifest.txt file which tells the JVM which class has the main() method. The content of the manifest.txt file:

Manifest-Version: 1.0 Main-Class: MyApp Class-Path: . lib/jcommon-1.0.6.jar lib/itext-1.4.6.jar "Empty Line"

An empty line is required otherwise the jar won't be executable. Space after a new line is also required

To create one executable JAR file run on the command line

 jar -cvmf mainfest.txt app1.jar *.class

 

ECLIPSE

JUnit

Line: 131 to 189
 

Added:
>
>
7) Annotations and Assert statements

a) Annotations

The following give an overview of the available annotations in JUnit 4.x

Annotation 	Description
@Test public void method() 	Annotation @Test identifies that this method is a test method.
@Before public void method() 	Will perform the method() before each test. This method can prepare the test environment, e.g. read input data, initialize the class)
@After public void method() 	Test method must start with test
@BeforeClass public void method() 	Will perform the method before the start of all tests. This can be used to perform time intensive activities for example be used to connect to a database
@AfterClass public void method() 	Will perform the method after all tests have finished. This can be used to perform clean-up activities for example be used to disconnect to a database
@Ignore 	Will ignore the test method, e.g. useful if the underlying code has been changed and the test has not yet been adapted or if the runtime of this test is just to long to be included.
@Test(expected=IllegalArgumentException.class) 	Tests if the method throws the named exception
@Test(timeout=100) 	Fails if the method takes longer then 100 milliseconds

b) Assert statements

The following gives an overview of the available test methods:

Statement 	Description
fail(String) 	Let the method fail, might be usable to check that a certain part of the code is not reached.
assertTrue(true); 	True
assertsEquals([String message], expected, actual) 	Test if the values are the same. Note: for arrays the reference is checked not the content of the arrays
assertsEquals([String message], expected, actual, tolerance) 	Usage for float and double; the tolerance are the number of decimals which must be the same
assertNull([message], object) 	Checks if the object is null
assertNotNull([message], object) 	Check if the object is not null
assertSame([String], expected, actual) 	Check if both variables refer to the same object
assertNotSame([String], expected, actual) 	Check that both variables refer not to the same object
assertTrue([message], boolean condition) 	Check if the boolean condition is true.
 

WIKI

Revision 652011-11-14 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 9 to 9
 
Added:
>
>

ECLIPSE

JUnit

1) installer Eclipse pour Java (testé avec 3.7 Indigo)

Download "Eclipse IDE for Java Developers" from http://www.eclipse.org/downloads

2) installer Junit

http://www.vogella.de/articles/JUnit/article.html

To write a test with JUnit

Annotate a method with @org.JUnit.Test

Use a method provides by JUnit to check the expected result of the code execution versus the actual result

You use a tool like Eclipse or the class "org.junit.runner.JUnitCore" to run the test.

Download junit-dep-4.10 from https://github.com/KentBeck/junit/downloads

3) Créer un projet Java

Create a new project "de.vogella.junit.first".

We want to create the unit tests in a separate folder. Create therefore a new source folder "test" via right mouse click on your project, select properties and choose the "Java Build Path". Select the tab source code. Press "Add folder" then then press "Create new folder". Create the folder "test". The creation of an separate folder for the test is not mandatory. But it is good advice to keep the test coding separate from the normal coding.

Create a Java class

Create a package "de.vogella.junit.first" and the following class.

package de.vogella.junit.first; 
public class MyClass { 
public int multiply(int x, int y) { return x / y; } 
}

4) Create a JUnit test

Select your new class, right mouse click and select New ->JUnit Test case, change the source folder to JUnit. Select "New JUnit 4 test". Make sure you change the source folder to test.

Press next and select the methods which you want to test.

If you have not yet JUnit in your classpath, Eclipse will asked you if it should be added to the classpath.

Create a test with the following code.

package de.vogella.junit.first; 
import org.junit.Test; 
import static org.junit.Assert.assertEquals; 

public class MyClassTest {
@Test public void testMultiply() { 
MyClass tester = new MyClass(); 
assertEquals("Result", 50, tester.multiply(10, 5)); 
} 
}

5) Run your test via Eclipse

Right click on your new test class and select Run-As-> Junit Test.

The test should be failing (indicated via a red bar). This is due to the fact that our multiplier class is currently not working correctly (it does a division instead of multiplication). Fix the bug and re-run test to get a green light.

If you have several tests you can combine them into a test suite. All test in this test suite will then be executed if you run the test suite. To create a new test suite, select your test classes, right mouse click-> New-> Other -> JUnit -Test Suite

Select next and select the methods you would like to have test created for.

cela crée une classe AllTests.java :

package de.vogella.junit.first;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ MyClassTest.class, OtherClassTest.class })
public class AllTests {

}

If you later develop another test you can add it to @Suite.SuiteClasses

6) Run your test via code

You can also run your test via your own coding. The class "org.junit.runner.JUnitCore" provides the method runClasses() which allows you to run one or several tests classes. As a return parameter you receive an object of type "org.junit.runner.Result". This object can be used to retrieve information about the tests and provides information about the failed tests.

Create in your "test" folder a new class "MyTestRunner" with the following coding. This class will execute your test class and write potential failures to the console.

			
package de.vogella.junit.first;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class MyTestRunner {
	public static void main(String[] args) {
		Result result = JUnitCore.runClasses(MyClassTest.class);
		for (Failure failure : result.getFailures()) {
			System.out.println(failure.toString());
		}
	}
}

 

WIKI

Revision 642011-06-29 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1816 to 1816
  1) le plus simple, méthode manuelle (depuis mon pc)
Changed:
<
<
ssh fw-in.cesr.fr
>
>
ssh fw-in.cesr.fr (entrer le mot de passe utilisé pour le mail)
  puis
Changed:
<
<
ssh hyperion.cesr.fr
>
>
ssh hyperion.cesr.fr (entrer votre mot de passe hyperion)
  (NB : "ssh -X fw-in", puis "ssh -X hyperion" si on veut l'affichage graphique)
Added:
>
>
Il faut taper 2 fois "exit" pour revenir à mon pc.
 
Deleted:
<
<
2) Pour automatiser le "rebond" par fw-in (depuis mon pc) : c'est un peu long, mais ca vaut le coup
 
Added:
>
>
2) Pour accélérer la connexion : ETAPE 1, générer des clés ssh
 
Changed:
<
<
a) D'abord, créer des Clés ssh

On génère une paire de clés privée et publique :

>
>
DEPUIS MON PC, je génère une paire de clés privée et publique :
  ssh-keygen -t dsa
Changed:
<
<
Puis, on distribue ensuite la clé publique à la fois sur fw-in ET sur hyperion :
>
>
Puis, je distribue ensuite la clé publique à la fois sur fw-in ET sur hyperion :
  ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub fw-in.cesr.fr

ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub hyperion.cesr.fr

Added:
>
>
Tester maintenant à nouveau la double connexion (fw-in, puis hyperion) :

ssh fw-in.cesr.fr (sans mot de passe)

puis

ssh hyperion.cesr.fr (avec mot de passe)

Malheureusement, il faut encore entrer un mot de passe pour se connecter à hyperion, bouh...

(je tape 2 fois "exit" pour revenir à mon pc)

3) Pour accélérer la connexion : ETAPE 2, automatiser le "rebond" par fw-in

 
Changed:
<
<
b) Ensuite, créer un fichier de config
>
>
On va maintenant rendre transparent le passage via fw-in. Il suffit pour cela de créer un fichier de config :
 
Changed:
<
<
Editer le fichier /home/USERNAME/.ssh/config, et y mettre le contenu suivant :
>
>
DEPUIS MON PC, j'édite le fichier /home/USERNAME/.ssh/config, et j'y mets le contenu suivant :
 
Host hyp hyperion hyperion.cesr.fr
Line: 1855 to 1868
  VOILA C FINI, OUF !
Changed:
<
<
Désormais, il suffit de faire un bête ssh :
>
>
Désormais, depuis votre pc, il suffit de faire un bête ssh :
  ssh hyp (avec l'option -X pour l'affichage graphique)

(ou "ssh hyperion" ou "ssh hyperion.cesr.fr")

Changed:
<
<
On n'a même pas besoin de rentrer les mots de passe (ni de fw-in, ni de hyperion), c'est direct !
>
>
On n'a plus besoin de rentrer aucun mot de passe (ni de fw-in, ni de hyperion), c'est direct !
 
Added:
>
>
(il suffit de taper une seule fois "exit" pour revenir à mon pc)
 

SED (substitution de texte)

Revision 632011-06-28 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1779 to 1779
 

SSH

Changed:
<
<
Exécuter une commande sur un serveur distant:
>
>
Exécuter une commande sur un serveur distant
 
  • De manière générale:
Line: 1808 to 1808
 If you believe this is in error, please contact your system administrator.
Added:
>
>
Simplifier une connexion avec rebond

Par exemple, depuis chez moi, je veux me connecter à hyperion

Il me faut donc passer par fw-in (le firewall cesr)

1) le plus simple, méthode manuelle (depuis mon pc)

ssh fw-in.cesr.fr

puis

ssh hyperion.cesr.fr

(NB : "ssh -X fw-in", puis "ssh -X hyperion" si on veut l'affichage graphique)

2) Pour automatiser le "rebond" par fw-in (depuis mon pc) : c'est un peu long, mais ca vaut le coup

a) D'abord, créer des Clés ssh

On génère une paire de clés privée et publique :

ssh-keygen -t dsa

Puis, on distribue ensuite la clé publique à la fois sur fw-in ET sur hyperion :

ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub fw-in.cesr.fr

ssh-copy-id -i /home/USERNAME/.ssh/id_dsa.pub hyperion.cesr.fr

b) Ensuite, créer un fichier de config

Editer le fichier /home/USERNAME/.ssh/config, et y mettre le contenu suivant :

Host hyp hyperion hyperion.cesr.fr
        Hostname hyperion.cesr.fr
        ProxyCommand ssh fw-in.cesr.fr nc %h %p 2> /dev/null

(Pour plus de détails : http://franek.chicour.net/post/2009/10/16/SSH-%3A-simplifier-les-connexions-avec-rebond)

VOILA C FINI, OUF !

Désormais, il suffit de faire un bête ssh :

ssh hyp (avec l'option -X pour l'affichage graphique)

(ou "ssh hyperion" ou "ssh hyperion.cesr.fr")

On n'a même pas besoin de rentrer les mots de passe (ni de fw-in, ni de hyperion), c'est direct !

 

SED (substitution de texte)

Revision 622011-05-31 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 612011-05-27 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2093 to 2093
 http://www.webactus.net/coin-du-geek/linux/2704-linux-augmenter-la-taille-dune-partition-ext3/
Added:
>
>

Redimensionner une partition (avec gparted)

 
Added:
>
>
http://www.oxygenepc.com/forum/cloner-un-disque-dur-t486.html
 

Copie de disque ou partition avec dd (création d'image "ghost")

Added:
>
>
http://www.oxygenepc.com/forum/cloner-un-disque-dur-t486.html
 http://www.linuxquestions.org/linux/answers/Applications_GUI_Multimedia/How_To_Do_Eveything_With_DD
Added:
>
>
http://www.debianhelp.co.uk/ddcommand.htm
 The basic command is structured as follows:

dd if= of= bs=(usually some power of 2, not less than 512 bytes(ie, 512, 1024, 2048, 4096, 8192, 16384, but can be any number.) skip= seek= conv=.

Line: 2107 to 2113
  (http://www.efense.com/helix is a good boot cd : The helix boot environment contains the DoD version of dd called dcfldd. It works the same way, but is has a progress bar)
Added:
>
>
Using dd you can create backups of an entire harddisk or just a parts of it. This is also usefull to quickly copy installations to similar machines. It will only work on disks that are exactly the same in disk geometry, meaning they have to the same model from the same brand.
 Examples:
Added:
>
>
  • full hard disk copy

dd if=/dev/hdx of=/dev/hdy dd if=/dev/hdx of=/path/to/image dd if=/dev/hdx | gzip > /path/to/image.gz

Hdx could be hda, hdb etc. In the second example gzip is used to compress the image if it is really just a backup.

  • Restore Backup of hard disk copy

dd if=/path/to/image of=/dev/hdx

gzip -dc /path/to/image.gz | dd of=/dev/hdx

  • MBR backup

In order to backup only the first few bytes containing the MBR and the partition table you can use dd as well.

dd if=/dev/hdx of=/path/to/image count=1 bs=512

  • MBR restore

dd if=/path/to/image of=/dev/hdx

Add "count=1 bs=446" to exclude the partition table from being written to disk. You can manually restore the table.

 
  • Copy one hard disk partition to another hard disk:

dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror

Line: 2133 to 2168
  this will copy the first 446 bytes of the hard drive to a file. If you haven't already guessed, reversing the objects of if and of, in the dd command line reverses the direction of the write.
Added:
>
>
  • Back up your MBR

dd if=/dev/sda of=mbr.bin count=1

Put this on a floppy you make with

dd if=boot.img of=/dev/fd0

Along with dd. Boot from the floppy and

dd if=mbr.bin of=/dev/sda count=1

Will restore the MBR

 
  • Copy a disk partition to a file on a different partition (Do not copy a partition to the same partition)

dd if=/dev/sdb2 of=/home/sam/partition.image bs=4096 conv=notrunc,noerror

Revision 602011-05-27 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1991 to 1991
 

Administration

Changed:
<
<

Copie de disque (image "ghost")

>
>

soft RAID (Redundant Array of Inexpensive Disks)

http://smpfr.mesdiscussions.net/smpfr/Software/soft-linux-nuls-sujet_338_1.htm

Vous pouvez faire vos tests sur des fichiers ou des clefs USB pour commencer... Remplacez simplement le "device" par un fichier existant. Ex : /dev/sdX par /home/moi/raid-test/disque-1.img.

Pour créer un fichier quelque part avec la bonne taille : dd if=/dev/zero of=/home/moi/raid-test/disque-1.img count=10000 bs=65535. Pour en savoir plus : man dd.

Apres on fait un : mdadm --create /dev/md0 --level=1 --raid-devices=/home/moi/raid-test/disque-1.img,/home/moi/raid-test/disque-2.img

Et voila un RAID 1 créé avec deux fichiers stockés sur le disque dur.

J'ai testé le Raid0 sur 2DD externes de 2,5" en USB, et j'arrive à 45Mo sec avec mon portable...

Avant de mettre un raid sur une machine en production VERIFIEZ les noms des disques et des partitions !!! Préférez les /dev/disk/by-id, vous ferez moins facilement des erreurs qu'en mettant seulement /dev/sde, surtout si vous ajoutez des disques par la suite...

L'outil magique de management du RAID sous Linux : mdadm

Quelques exemples : (vous noterez que l'on utilise la syntaxe /dev/sdX alors que c'est mal.. mais c'est plus lisible que /dev/disk/by-id/ata-ST3250310AS_6RY7R988-part1)

création d'une pile raid :

mdadm --create /dev/mdX --level=[01456] --raid-devices={/dev/sdYZ, missing, ...}

crée un device /dev/mdX (X étant un chiffre) de niveau (--level) 0 (stripping), 1 (mirroring), 4 (comme le 5 mais la parité est toujours sur le même disque), 5 ou 6 (2 disques de parité) à partir des devices /dev/sdYZ (Y est une lettre indiquant un disque physique , Z un chiffre indicant un numéro de partition). On peut également mettre missing dans la liste des devices. C'est très utile lorsque l'on passe son système sur un raid 1 big grin

Mise en échec d'un disque (pour test par ex.) : mdadm --manage /dev/mdX --failed /dev/sdYZ

"Ejection" d'un disque d'une pile : mdadm --manage /dev/mdX --remove /dev/sdYZ

Ajout d'un disque à une pile : mdadm --manage /dev/mdX --add /dev/sdYZ

Liste des périphériques d'une pile : mdadm --misc --detail /dev/mdX

On peux aussi faire :

cat /proc/mdstat

Agrandir une partition

La première étape consiste à repérer quel device correspond aux partitions que tu veux redimensionner. Pour cela tu peux utiliser la commande :

sudo fdisk -l

# fdisk -l

Disque /dev/sda: 250.0 Go, 250059350016 octets
255 heads, 63 sectors/track, 30401 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sda1   *           1          25      200781   83  Linux
/dev/sda2              26         535     4096575   82  Linux swap / Solaris
/dev/sda3             536       30401   239898645   83  Linux

Disque /dev/sdb: 250.0 Go, 250059350016 octets
255 heads, 63 sectors/track, 30401 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sdb1   *           1       30401   244196001   fd  Linux raid autodetect

Disque /dev/sdc: 250.0 Go, 250059350016 octets
255 heads, 63 sectors/track, 30401 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sdc1   *           1       30401   244196001   fd  Linux raid autodetect

Disque /dev/sdd: 250.0 Go, 250059350016 octets
255 heads, 63 sectors/track, 30401 cylinders
Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sdd1   *           1       30401   244196001   fd  Linux raid autodetect

Disque /dev/md0: 500.1 Go, 500113080320 octets
2 heads, 4 sectors/track, 122097920 cylinders
Unités = cylindres de 8 * 512 = 4096 octets

Disque /dev/md0 ne contient pas une table de partition valide

Pour avoir un résultat plus parlant (tailles en octets + système de fichiers) tu peux utiliser cfdisk : sudo cfdisk /dev/sda

L'ext3 c'est en fait de l'ext2 mais avec un "journal" et c'est pour ça qu'il est facile de passer d'ext2 à ext3 et réciproquement.

Les outils de redimensionnement s'appliquent à de l'ext2 ce qui nécessitera de passer d'ext3 à ext2, redimensionner, puis repasser en ext3

http://www.webactus.net/coin-du-geek/linux/2704-linux-augmenter-la-taille-dune-partition-ext3/

Copie de disque ou partition avec dd (création d'image "ghost")

http://www.linuxquestions.org/linux/answers/Applications_GUI_Multimedia/How_To_Do_Eveything_With_DD

The basic command is structured as follows:

dd if= of= bs=(usually some power of 2, not less than 512 bytes(ie, 512, 1024, 2048, 4096, 8192, 16384, but can be any number.) skip= seek= conv=.

Source is the data being read. Target is where the data gets written. If you mess up, and accidentally reverse the source and target, you can wipe out a lot of data.

(http://www.efense.com/helix is a good boot cd : The helix boot environment contains the DoD version of dd called dcfldd. It works the same way, but is has a progress bar)

Examples:

  • Copy one hard disk partition to another hard disk:

dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror

sda2, sdb2 are partitions. You want to copy sda2 to sdb2. If sdb2 doesn't exist, dd will start at the beginning of the disk, and create it. Be careful with order of if and of. You can write a blank disk to a good disk if you get confused.

  • Make an iso image of a CD:

dd if=/dev/hdc of=/home/sam/mycd.iso bs=2048 conv=notrunc

CD sectors are 2048 bytes, so this copies sector for sector. The result will be a hard disk image file of the CD. You can use "chmod a+rwx mycd.iso" to make the image writable. You can mount the image with "mkdir /mnt/mycd", this line in fstab: "/home/sam/mycd.iso /mnt/mycd iso9660 rw,user,noauto 0 0", save fstab, "mount -o loop /mnt/mycd". Then the file system will be viewable as files and directories in the directory /mnt/mycd. You can edit the image as you wish, and the new file will be "/home/sam/mycd.iso" dd does not write to CD's. You need to use a burning utility, or the cdrdao command

  • Cloning an entire hard disk:

dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror

In this example, sda is the source. sdb is the target. Do not reverse the intended source and target. Surprisingly many people do. notrunc means to not truncate. noerror means to keep going if there is an error. Normally dd stops at any error. if you have a question about a hard drive on whether or not it works, you can try to use it as the source drive for the dd command. You should get an error if it is not working. target drives need to be really messed up to give an error in dd.

  • Copy MBR only of a hard drive:

dd if=/dev/sda of=/home/sam/MBR.image bs=446 count=1

this will copy the first 446 bytes of the hard drive to a file. If you haven't already guessed, reversing the objects of if and of, in the dd command line reverses the direction of the write.

  • Copy a disk partition to a file on a different partition (Do not copy a partition to the same partition)

dd if=/dev/sdb2 of=/home/sam/partition.image bs=4096 conv=notrunc,noerror

This will make a file that is an exact duplicate of the sdb2 partition. You can substitue hdb, sda, hda, or whatever the disk is called.

  • Restore a disk partition from an image file.

dd if=/home/sam/partition.image of=/dev/sdb2 bs=4096 conv=notrunc,noerror

This way you can get a bazonga hard drive and partition it so you can back up your root partition. If you mess up your root partition, you just boot from the helix cd and restore the image.

Copie de disque ou partition (image "ghost") avec partimage (SystemRescueCd)

  J'ai un disque qui montre des faiblesses
Line: 2028 to 2184
 ...
Added:
>
>
# fdisk -l

Disque /dev/sda: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce Début Fin Blocs Id Système /dev/sda1 * 1 25 200781 83 Linux /dev/sda2 26 535 4096575 82 Linux swap / Solaris /dev/sda3 536 30401 239898645 83 Linux

Disque /dev/sdb: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce Début Fin Blocs Id Système /dev/sdb1 * 1 30401 244196001 fd Linux raid autodetect

Disque /dev/sdc: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce Début Fin Blocs Id Système /dev/sdc1 * 1 30401 244196001 fd Linux raid autodetect

Disque /dev/sdd: 250.0 Go, 250059350016 octets 255 heads, 63 sectors/track, 30401 cylinders Unités = cylindres de 16065 * 512 = 8225280 octets

Périphérique Amorce Début Fin Blocs Id Système /dev/sdd1 * 1 30401 244196001 fd Linux raid autodetect

Disque /dev/md0: 500.1 Go, 500113080320 octets 2 heads, 4 sectors/track, 122097920 cylinders Unités = cylindres de 8 * 512 = 4096 octets

Disque /dev/md0 ne contient pas une table de partition valide

 # fdisk /dev/sda ...
Line: 2793 to 2988
 
Added:
>
>

HARDWARE

Disques SATA

Les jumper sur les disque sata ne sont pas la pour specifier si le disque est slave, master ou en cable select

mais pour pouvoir brider le disque en sata1 ( dans certain cas ca peut resoudre un probleme de compatibilité)

3178-1.gif

donc pas de jumper = sata2 , le jumper est mis = sata1

Comme il est mis la il est en sata 1 donc bridé à 150Mo/sec Si on l'enlève on passe en sata2 donc 375Mo/sec

Mais comme ton disque ne doit pas dépasser 100Mo/sec tu ne veras pas du tout la difference

 

Revision 592011-05-24 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1991 to 1991
 

Administration

Added:
>
>

Copie de disque (image "ghost")

J'ai un disque qui montre des faiblesses

Je veux le remplacer par un nouveau disque

Je dois donc faire une image du disque et la copier ensuite sur le nouveau disque

1) Télécharger une ISO de SystemRescueCd (x86)

http://www.sysresccd.org/Download

2) Vérifier le checksum de cette ISO

md5sum systemrescuecd-x86-2.1.1.iso

Pour faire ça depuis Windows, télécharger md5deep (http://sourceforge.net/projects/md5deep/files/md5deep/md5deep-1.12/md5deep-1.12.zip/download)

Il contient md5sum, que l'on peut appeler sous Dos : md5sum systemrescuecd-x86-2.1.1.iso

3) Créer un DVD à partir de cette ISO

4) Identifier les partitions du disque à copier (avec df, fdisk, et /proc/partitions)

Dans mon cas, c'était le disque système qui montrait des faiblesses

Il s'appelle /dev/sda et contient 3 partitions

# df -h
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/sda3             222G   18G  193G   9% /
/dev/sda1             190M   18M  163M  10% /boot
...


# fdisk /dev/sda
...

Commande (m pour l'aide): p

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sda1   *           1          25      200781   83  Linux
/dev/sda2              26         535     4096575   82  Linux swap / Solaris
/dev/sda3             536       30401   239898645   83  Linux

# cat /proc/partitions
major minor  #blocks  name

   8     0  244198584 sda
   8     1     200781 sda1
   8     2    4096575 sda2
   8     3  239898645 sda3
   8    16  244198584 sdb
   8    17  244196001 sdb1
   8    32  244198584 sdc
   8    33  244196001 sdc1
   8    48  244198584 sdd
   8    49  244196001 sdd1
   9     0  488391680 md0


# cat /etc/fstab

LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot1            /boot                   ext3    defaults        1 2
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
/dev/md0                /home                   ext3    defaults        1 2
proc                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
LABEL=SWAP-sda2         swap                    swap    defaults        0 0
/dev/cdrom              /media/cdrom            udf,iso9660 user,noauto,exec    0 0

 

Virtualisation

La virtualisation consiste à faire cohabiter plusieurs (VM) machines "virtuelles" (OS) sur une même machine physique

Revision 582011-05-24 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 2223 to 2223
  Outil de visualisation graphique des logs : gnome-system-log
Added:
>
>
Common Linux log files name and usage :
    /var/log/message: General message and system related stuff
    /var/log/auth.log: Authenication logs
    /var/log/kern.log: Kernel logs
    /var/log/cron.log: Crond logs (cron job)
    /var/log/maillog: Mail server logs
    /var/log/qmail/ : Qmail log directory (more files inside this directory)
    /var/log/httpd/: Apache access and error logs directory
    /var/log/lighttpd: Lighttpd access and error logs directory
    /var/log/boot.log : System boot log
    /var/log/mysqld.log: MySQL database server log file
    /var/log/secure: Authentication log
    /var/log/utmp or /var/log/wtmp : Login records file
    /var/log/yum.log: Yum log files

In short /var/log is the location where you should find all Linux logs file. However some applications such as httpd have a directory within /var/log/ for their own log files. You can rotate log file using logrotate software and monitor logs files using logwatch software.

 
logrotate

/etc/logrotate.conf

Revision 572011-05-19 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1114 to 1114
  2) Créer un projet
Added:
>
>
http://blog.aurevec.be/?p=71
 Dans Eclipse, créer un projet PHP nommé "zfquickstart"

Ouvrir une console DOS

Line: 1122 to 1124
  zf create project zfquickstart
Added:
>
>
crée 3 dossiers :

- application/ qui contient Bootstrap.php et configs/application.ini

- public/

- library/

public/ contient 2 fichiers importants :

.htaccess :

RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]

index.php : qui lance $application->bootstrap() et ->run()

 3) The Bootstrap

Your Bootstrap class defines what resources and components to initialize. By default, Zend Framework's Front Controller is initialized, and it uses the application/controllers/ as the default directory in which to look for action controllers

Revision 562011-05-19 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 552011-05-18 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1091 to 1091
  http://framework.zend.com/manual/1.11/en/zend.auth.adapter.dbtable.html
Changed:
<
<
Le contrôleur de Zend Framework réserve une action "index" comme action par défaut. C'est-à-dire que pour l'URI "http://localhost/tutoriel-zf/actualités/", l'action "index" est exécutée. Le framework réserve également un nom de contrôleur si aucun n'est fourni dans l'URI : aucune surprise qu'il soit également appelé "index". Ainsi, l'URI "http://localhost/tutoriel-zf/" appelle le contrôleur "index" avec l'action "index".
>
>
best :
 
Line: 1101 to 1102
  http://framework.zend.com/manual/en/learning.quickstart.create-project.html
Added:
>
>
Le contrôleur de Zend Framework réserve une action "index" comme action par défaut. C'est-à-dire que pour l'URI "http://localhost/tutoriel-zf/actualités/", l'action "index" est exécutée. Le framework réserve également un nom de contrôleur si aucun n'est fourni dans l'URI : aucune surprise qu'il soit également appelé "index". Ainsi, l'URI "http://localhost/tutoriel-zf/" appelle le contrôleur "index" avec l'action "index".
 1) install

Download zf

Revision 542011-05-18 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1091 to 1091
  http://framework.zend.com/manual/1.11/en/zend.auth.adapter.dbtable.html
Added:
>
>
Le contrôleur de Zend Framework réserve une action "index" comme action par défaut. C'est-à-dire que pour l'URI "http://localhost/tutoriel-zf/actualités/", l'action "index" est exécutée. Le framework réserve également un nom de contrôleur si aucun n'est fourni dans l'URI : aucune surprise qu'il soit également appelé "index". Ainsi, l'URI "http://localhost/tutoriel-zf/" appelle le contrôleur "index" avec l'action "index".

 

Créer un projet Zend

Line: 1521 to 1525
  http://framework.zend.com/manual/en/learning.quickstart.create-form.html
Added:
>
>
% zf create form Guestbook

Next, we will add a signAction() to our GuestbookController which will process the form upon submission. To create the action and related view script, execute the following:

 
Added:
>
>
% zf create action sign Guestbook
 
Added:
>
>
Now browse to "http://localhost/guestbook/sign".
 

php.ini

Revision 532011-05-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1455 to 1455
 Note also the use of the headLink() placeholder. This is an easy way to generate the HTML for elements, as well as to keep track of them throughout your application. If you need to add additional CSS sheets to support a single action, you can do so, and be assured it will be present in the final rendered page.
Added:
>
>
9) Create a Model and Database Table

http://framework.zend.com/manual/en/learning.quickstart.create-model.html

Your application bootstrap will by default use the module prefix "Application". As such, our models, forms, and table classes will all begin with the class prefix "Application_".

zf configure db-adapter 'adapter=PDO_SQLITE&dbname=APPLICATION_PATH "/../data/db/guestbook.db"' production

php scripts/load.sqlite.php --withdata

zf create db-table Guestbook guestbook

zf create model GuestbookMapper

zf create model Guestbook

zf create controller Guestbook

This will create a new controller, GuestbookController, in application/controllers/GuestbookController.php, with a single action method, indexAction(). It will also create a view script directory for the controller, application/views/scripts/guestbook/, with a view script for the index action.

We'll use the "index" action as a landing page to view all guestbook entries.

Now, let's flesh out the basic application logic. On a hit to indexAction(), we'll display all guestbook entries. This would look like the following:

    // application/controllers/GuestbookController.php
     
    class GuestbookController extends Zend_Controller_Action
    {
        public function indexAction()
        {
            $guestbook = new Application_Model_GuestbookMapper();
            $this->view->entries = $guestbook->fetchAll();
        }
    }


And, of course, we need a view script to go along with that. Edit application/views/scripts/guestbook/index.phtml to read as follows:

    <!-- application/views/scripts/guestbook/index.phtml -->
     
    <p><a href="<?php echo $this->url(
        array(
            'controller' => 'guestbook',
            'action'     => 'sign'
        ),
        'default',
        true) ?>">Sign Our Guestbook</a></p>
     
    Guestbook Entries: <br />
    <dl>
        <?php foreach ($this->entries as $entry): ?>
        <dt><?php echo $this->escape($entry->email) ?></dt>
        <dd><?php echo $this->escape($entry->comment) ?></dd>
        <?php endforeach ?>
    </dl>

Now browse to "http://localhost/guestbook"

10) Create A Form

http://framework.zend.com/manual/en/learning.quickstart.create-form.html

 

php.ini

Revision 522011-05-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 824 to 824
 

PHP

Added:
>
>

Fonctions anonymes (lambda) et closures (php 5.3)

Fonctions anonymes (lambda)

http://blog.pascal-martin.fr/post/php-5.3-1-closures-et-lambdas

$f1= function () {
    echo "<p>Hello, World!</p>";
};
 
$f2= function ($param) {
    echo "<p>Hello, $param!</p>";
};

call :

$f1();

$f2('there');

call_user_func($f1);

call_user_func($f2, 'You');

call_user_func_array($f1, array());

call_user_func_array($f2, array('You'));

Exemple d'utilisation avec array_map :

$data = array('iron maiden', 'judas priest', 'rammstein');
$output = array_map(function ($item) {
        return ucwords($item);
    },
    $data);
var_dump($output);

Résultat :

array
  0 => string 'Iron Maiden' (length=11)
  1 => string 'Judas Priest' (length=12)
  2 => string 'Rammstein' (length=9)

Un autre exemple, en utilisant cette fois-ci array_walk, qui attend une fonction de callback travaillant avec un paramètre passé par référence :

$data = array('iron maiden', 'judas priest', 'rammstein');
array_walk($data, function (& $item) {
        $item = ucwords($item);
    });
var_dump($data);

Le résultat obtenu sera exactement le même que juste au-dessus, à savoir :

array
  0 => string 'Iron Maiden' (length=11)
  1 => string 'Judas Priest' (length=12)
  2 => string 'Rammstein' (length=9)

Utilisé pour les fonctions anonymes, le mot-clef "use" permet d’importer (en lecture seule) des variables externes, issues de l’espace de noms « global », au sein de la fonction lambda.

$var = 'World';
$f2 = function () use ($var) {
    echo "<p>Hello, $var!</p>";
};

$f2();   // Hello, World!

En quelque sorte, "use" fait penser à l’instruction "global", que nous rencontrions parfois auparavant… Mais global ne répond pas aux besoins des closures

Import de variable par référence :

$var = 0;

$func2 = function () use (& $var) {
    echo "<p>Début 2 : $var</p>";
    $var = 2;
    echo "<p>Fin 2 : $var</p>";
};

et le résultat :

echo "<p>Avant 2 : $var</p>";   // Avant 2 : 0
$func2();                       // Début 2 : 0
                                // Fin 2 : 2
echo "<p>Après 2 : $var</p>";   // Après 2 : 2

Mais, qu'est-ce qu'une fonction anonyme pour php ?

$func = function ($param) {
    echo "<p>Hello, $param!</p>";
};
 
var_dump($func);

Le résultat obtenu est le suivant :

object(Closure)[1]

Pour PHP, une fonction anonyme — une lambda — est un objet : une instance de classe Closure…

Closures

http://blog.pascal-martin.fr/post/php-5.3-2-closures-et-lambdas

Une closure est une fonction qui est évaluée dans un environnement contenant une ou plusieurs variables liées, auxquelles elle peut accéder au moment de son exécution.

Dans certains langages — dont Javascript, et PHP >= 5.3 — une closure peut exister lorsqu’une fonction est définie au sein d’une autre, et que la fonction interne fait référence à des variables de la fonction externe. A l’exécution, une closure est formée : elle est constituée du code de la fonction interne et des références aux variables externes utilisées par celle-ci.

En PHP, une closure se construit de la manière suivante :

  • Une variable locale est créée dans une première fonction "externe",
  • Une seconde fonction "interne" est définie à l’intérieur de la première fonction, sous forme d’une fonction anonyme,
  • Et cette fonction "interne" importe la variable locale de la fonction "externe", à l’aide du mot-clef use.

  • Closure en lecture-seule :

Ex :

$func = function ($arg) {
    $compteur = $arg;  // Copie privée, en lecture seule
    return function () use ($compteur) {
        return ++$compteur;
    };
};

$a1 = $func(10);
$a2 = $func(50);


Nous venons ici de créer deux fonctions anonymes

echo 'a1 : ' . $a1() . "\n";   // 11
echo 'a2 : ' . $a2() . "\n";   // 51
echo 'a1 : ' . $a1() . "\n";   // 11
echo 'a2 : ' . $a2() . "\n";   // 51
echo 'a1 : ' . $a1() . "\n";   // 11
echo 'a2 : ' . $a2() . "\n";   // 51

  • Closure en lecture-écriture

$func = function ($arg) {
    $compteur = $arg;  // Copie privée, en lecture / écriture
    return function () use (& $compteur) {
        return ++$compteur;
    };
};

echo 'a1 : ' . $a1() . "\n";   // 11
echo 'a2 : ' . $a2() . "\n";   // 51
echo 'a1 : ' . $a1() . "\n";   // 12
echo 'a2 : ' . $a2() . "\n";   // 52
echo 'a1 : ' . $a1() . "\n";   // 13
echo 'a2 : ' . $a2() . "\n";   // 53

Le mécanisme de closure permet donc de créer des variables au sein de la fonction "externe", qui conserveront leur valeur aussi longtemps que l’on aura conservé un pointeur sur la fonction "interne". Ces variables seront accessibles par la fonction interne, éventuellement en écriture si nous avons utilisé & lors de leur import, tout en n’étant pas visibles du reste de notre script.

  • Appel de fonction sur un objet

PHP 5.3 ajoute la possibilité d’utiliser la syntaxe d’un appel de fonction sur un objet, en lui appliquant l’opérateur ().

Pour cela, une nouvelle méthode magique a été ajoutée : __invoke :

lors d’un appel de fonction sur une instance de classe comportant une méthode __invoke, c’est cette méthode qui sera appelée.

Voici une classe d’exemple :

class MyString {
    public $str;
    public function __construct($a) {
        $this->str = $a;
    }
 
    // Appelée quand on appelle dynamiquement un 
    // objet instance de cette classe
    public function __invoke($a) {
        var_dump(__METHOD__);
        $this->str = $a;
    }
}
 

Session

Endroit où sont stockés les fichiers (temporaires) de session : session.save_path (php.ini)

Line: 881 to 1097
  http://framework.zend.com/manual/en/learning.quickstart.create-project.html
Added:
>
>
1) install
 Download zf

Copier dans D:\ProgFilesNoInstall\zf

Deleted:
<
<
Dans Eclipse, créer un projet PHP nommé "zfquickstart"
 Ajouter D:\ProgFilesNoInstall\zf\bin dans PATH windows
Changed:
<
<
Ouvrir une console dos
>
>
2) Créer un projet

Dans Eclipse, créer un projet PHP nommé "zfquickstart"

Ouvrir une console DOS

  Aller dans xampp/htdocs

zf create project zfquickstart

Added:
>
>
3) The Bootstrap

Your Bootstrap class defines what resources and components to initialize. By default, Zend Framework's Front Controller is initialized, and it uses the application/controllers/ as the default directory in which to look for action controllers

    // application/Bootstrap.php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }

4) Configuration

While Zend Framework is itself configurationless, you often need to configure your application. The default configuration is placed in application/configs/application.ini, and contains some basic directives for setting your PHP environment (for instance, turning error reporting on and off), indicating the path to your bootstrap class (as well as its class name), and the path to your action controllers.

    ; application/configs/application.ini
     
    [production]
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    includePaths.library = APPLICATION_PATH "/../library"
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    appnamespace = "Application"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
    resources.frontController.params.displayExceptions = 0
     
    [staging : production]
     
    [testing : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
     
    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1

First, when using INI-style configuration, you can reference constants directly and expand them; APPLICATION_PATH is actually a constant.

Additionally note that there are several sections defined: production, staging, testing, and development. The latter three inherit settings from the "production" environment. This is a useful way to organize configuration to ensure that appropriate settings are available in each stage of application development.

5) Action Controllers

Your application's action controllers contain your application workflow, and do the work of mapping your requests to the appropriate models and views.

An action controller should have one or more methods ending in "Action"; these methods may then be requested via the web. By default, Zend Framework URLs follow the schema /controller/action, where "controller" maps to the action controller name (minus the "Controller" suffix) and "action" maps to an action method (minus the "Action" suffix).

Typically, you always need an IndexController, which is a fallback controller and which also serves the home page of the site, and an ErrorController, which is used to indicate things such as HTTP 404 errors (controller or action not found) and HTTP 500 errors (application errors).

    // application/controllers/IndexController.php
     
    class IndexController extends Zend_Controller_Action
    {
     
        public function init()
        {
            /* Initialize action controller here */
        }
     
        public function indexAction()
        {
            // action body
        }
    }

And the default ErrorController is as follows:

    // application/controllers/ErrorController.php
     
    class ErrorController extends Zend_Controller_Action
    {
     
        public function errorAction()
        {
            $errors = $this->_getParam('error_handler');
     
            switch ($errors->type) {
                case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
                case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
                case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
     
                    // 404 error -- controller or action not found
                    $this->getResponse()->setHttpResponseCode(404);
                    $this->view->message = 'Page not found';
                    break;
                default:
                    // application error
                    $this->getResponse()->setHttpResponseCode(500);
                    $this->view->message = 'Application error';
                    break;
            }
     
            $this->view->exception = $errors->exception;
            $this->view->request   = $errors->request;
        }
    }

You'll note that the IndexController contains no real code, and the ErrorController makes reference to a "view" property. That leads nicely into our next subject.

6) Views

Views in Zend Framework are written in plain old PHP. View scripts are placed in application/views/scripts/, where they are further categorized using the controller names. In our case, we have an IndexController and an ErrorController, and thus we have corresponding index/ and error/ subdirectories within our view scripts directory. Within these subdirectories, you will then find and create view scripts that correspond to each controller action exposed; in the default case, we thus have the view scripts index/index.phtml and error/error.phtml.

View scripts may contain any markup you want, and use the closing tag to insert PHP directives.

    <!-- application/views/scripts/index/index.phtml -->
    <style>
     
        a:link,
        a:visited
        {
            color: #0398CA;
        }
     
        span#zf-name
        {
            color: #91BE3F;
        }
     
        div#welcome
        {
            color: #FFFFFF;
            background-image: url(http://framework.zend.com/images/bkg_header.jpg);
            width:  600px;
            height: 400px;
            border: 2px solid #444444;
            overflow: hidden;
            text-align: center;
        }
     
        div#more-information
        {
            background-image: url(http://framework.zend.com/images/bkg_body-bottom.gif);
            height: 100%;
        }
     
    </style>
    <div id="welcome">
        <h1>Welcome to the <span id="zf-name">Zend Framework!</span><h1 />
        <h3>This is your project's main page<h3 />
        <div id="more-information">
            <p>
                <img src="http://framework.zend.com/images/PoweredBy_ZF_4LightBG.png" />
            </p>
     
            <p>
                Helpful Links: <br />
                <a href="http://framework.zend.com/">Zend Framework Website</a> |
                <a href="http://framework.zend.com/manual/en/">Zend Framework
                    Manual</a>
            </p>
        </div>
    </div>
    <="" span="">

The error/error.phtml view script is slightly more interesting as it uses some PHP conditionals:

    <!-- application/views/scripts/error/error.phtml -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN";
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Zend Framework Default Application</title>
    </head>
    <body>
      <h1>An error occurred</h1>
      <h2><?php echo $this->message ?></h2>
     
      <?php if ('development' == $this->env): ?>
     
      <h3>Exception information:</h3>
      <p>
          <b>Message:</b> <?php echo $this->exception->getMessage() ?>
      </p>
     
      <h3>Stack trace:</h3>
      <pre><?php echo $this->exception->getTraceAsString() ?>
      </pre>
     
      <h3>Request Parameters:</h3>
      <pre><?php echo var_export($this->request->getParams(), 1) ?>
      </pre>
      <?php endif ?>
     
    </body>
    </html>

7) Create a virtual host

Dans "D:\xampp\apache\conf\extra\myvhosts", créer un fichier "zfquickstart.conf"

Listen 8087
<VirtualHost *:8087>

   ServerName zfquickstart.local
   ServerAlias zfquickstart.local zfquickstart
   #ServerName .local
   DocumentRoot "D:/xampp/htdocs/zfquickstart/public"

   # This should be omitted in the production environment
   SetEnv APPLICATION_ENV "development"
    
   <Directory "D:/xampp/htdocs/zfquickstart/public">
    DirectoryIndex index.php
       #Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
    
</VirtualHost>

There are several things to note. First, note that the DocumentRoot setting specifies the public subdirectory of our project; this means that only files under that directory can ever be served directly by the server. Second, note the AllowOverride, Order, and Allow directives; these are to allow us to use htacess files within our project. During development, this is a good practice, as it prevents the need to constantly restart the web server as you make changes to your site directives; however, in production, you should likely push the content of your htaccess file into your server configuration and disable this. Third, note the SetEnv directive. What we are doing here is setting an environment variable for your virtual host; this variable will be picked up in the index.php and used to set the APPLICATION_ENV constant for our Zend Framework application. In production, you can omit this directive (in which case it will default to the value "production") or set it explicitly to "production".

Avec un , il faudrait aussi faire ceci :

Finally, you will need to add an entry in your hosts file corresponding to the value you place in your ServerName directive. On *nix-like systems, this is usually /etc/hosts; on Windows, you'll typically find it in C:\WINDOWS\system32\drivers\etc. Regardless of the system, the entry will look like the following:

127.0.0.1 zfquickstart.local

Start your webserver (or restart it), and you should be ready to go.

http://localhost:8087

NB: il faut ajouter le chemin vers ZF ("D:\ProgFilesNoInstall\zf\library") :

  • soit dans php.ini,
  • soit, mieux, dans le fichier index.php du dossier "public/" du projet : chercher la ligne "set_include_path" et insérer en tête de liste, ce qui donne :

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(

   //EP added :
   "D:\ProgFilesNoInstall\zf\library",

    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

8) Create A Layout

http://framework.zend.com/manual/en/learning.quickstart.create-layout.html

To get started using Zend_Layout, first we need to inform our bootstrap to use the Layout resource. This can be done using the zf enable layout command:

    % zf enable layout
    Layouts have been enabled, and a default layout created at
    application/layouts/scripts/layout.phtml
    A layout entry has been added to the application config file.

As noted by the command, application/configs/application.ini is updated, and now contains the following within the production section:

    ; application/configs/application.ini
     
    ; Add to [production] section:
    resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

We also want to ensure we have an XHTML DocType declaration for our application. To enable this, we need to add a resource to our bootstrap.

The simplest way to add a bootstrap resource is to simply create a protected method beginning with the phrase _init. In this case, we want to initialize the doctype, so we'll create an _initDoctype() method within our bootstrap class.

Within that method, we need to hint to the view to use the appropriate doctype. But where will the view object come from? The easy solution is to initialize the View resource; once we have, we can pull the view object from the bootstrap and use it.

To initialize the view resource, add the following line to your application/configs/application.ini file, in the section marked production:

resources.view[] =

This tells us to initialize the view with no options (the '[]' indicates that the "view" key is an array, and we pass nothing to it).

Now that we have a view, let's flesh out our _initDoctype() method. In it, we will first ensure the View resource has run, fetch the view object, and then configure it:

    // application/Bootstrap.php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initDoctype()
        {
            $this->bootstrap('view');
            $view = $this->getResource('view');
            $view->doctype('XHTML1_STRICT');
        }
    }

Now that we've initialized Zend_Layout and set the Doctype, let's create our site-wide layout:

    <!-- application/layouts/scripts/layout.phtml -->
    <?php echo $this->doctype() ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Zend Framework Quickstart Application</title>
      <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
    </head>
    <body>
    <div id="header" style="background-color: #EEEEEE; height: 30px;">
        <div id="header-logo" style="float: left">
            <b>ZF Quickstart Application</b>
        </div>
        <div id="header-navigation" style="float: right">
            <a href="<?php echo $this->url(
                array('controller'=>'guestbook'),
                'default',
                true) ?>">Guestbook</a>
        </div>
    </div>
     
    <?php echo $this->layout()->content ?>
     
    </body>
    </html>

We grab our application content using the layout() view helper, and accessing the "content" key. You may render to other response segments if you wish to, but in most cases, this is all that's necessary.

Note also the use of the headLink() placeholder. This is an easy way to generate the HTML for elements, as well as to keep track of them throughout your application. If you need to add additional CSS sheets to support a single action, you can do so, and be assured it will be present in the final rendered page.

 

Revision 512011-05-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1082 to 1082
 

Utilisation

Added:
>
>

Informations sur le hardware

  • RAM

cat /proc/meminfo

  • CPU(s)

cat /proc/cpuinfo

Plus précisément :

Exact number of available cores, virtual or not (8 pour hyperion, soit 2 proc x 4 cores) : grep -c processor /proc/cpuinfo

Nb de processeurs "physiques" (2 pour hyperion) : grep core\ id /proc/cpuinfo | grep -c \ 0$

The following (clumsy) group of commands will return the number of physical CPUs regardless of if there is only a single core per CPU (2 pour planetoweb et surfasafe) :

grep core\ id /proc/cpuinfo | grep -c \ 0$ | grep ^0$ >> /dev/null && grep -c processor /proc/cpuinfo || grep core\ id /proc/cpuinfo | grep -c \ 0$

Processeur(s) virtualisable(s) ? (cpuinfo doit contenir le flag vmx pour un processeur intel, et svm pour AMD) : egrep '(vmx|svm)' /proc/cpuinfo

Information détaillée : dmidecode

dmidecode --type 4 | grep -c Socket

 

SSH

Exécuter une commande sur un serveur distant:

Line: 1296 to 1325
 

Administration

Added:
>
>

Virtualisation

La virtualisation consiste à faire cohabiter plusieurs (VM) machines "virtuelles" (OS) sur une même machine physique

Prérequis :

  • Les processeurs doivent être virtualisables (cpuinfo doit contenir le flag vmx pour un processeur intel, et svm pour AMD) : egrep '(vmx|svm)' /proc/cpuinfo

  • RAM : au moins 8Go (pour 2 VM)

  • Disques :
    • au moins 2x500Go (en raid1 par exemple)
    • bonne config type :
      • 2 disques raid1 pour le système de base
      • 3 disques raid5 avec un LVM dessus pour stocker les images disques des VM
 

Serveur de gestion de versions (de code source) SUBVERSION

http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN

Revision 502011-05-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 833 to 832
  Sur linux : session.save_path = "/var/lib/php/session" (/etc/php.ini)
Added:
>
>
La façon la plus sécurisée est d'utiliser les cookies

1) Le client (navigateur) demande un identifiant de session (jeton)

2) Le serveur crée l'identifiant et le retourne au client

3) Le client stocke sur son disque dur cet identifiant sous la forme d'un cookie qu'il enverra désormais à chaque requête

Nom du jeton par défaut = PHPSESSID (cf php.ini session.name et fonction session_name())

Sur le serveur, ce jeton aura le nom "sess_" suivi de sa valeur

Valeur du jeton = string générée aléatoirement par php (fonction session_id() retourne cette valeur et permet éventuellement de la fixer, mais déconseilllé)

Paramètres php.ini à positionner (on peut utiliser session_set_cookie_params() pour cela, il y a aussi ini_get() et ini_set()) :

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0 (si cookies pas acceptés, ne pas pour autant transmettre l'id de session dans l'url)
session.cookie_lifetime = 0 (jusqu'au moment de quitter le navigateur)
session.auto_start = 0
session.save_handler = files
session.save_path = ...

La fonction session_start() crée ou restaure une session (à mettre en première ligne du bootstrap)

session_regenerate_id() regénère l'id de session afin d'éviter une fixation de la session

appeler session_destroy() à la déconnexion du user

 

Gestion de l'authentification avec Zend_Auth

http://r-benyacoub.developpez.com/tutoriels/php/zend-framework/zend-auth/

Revision 492011-05-13 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 823 to 823
 

PHP

Added:
>
>

Session

Endroit où sont stockés les fichiers (temporaires) de session : session.save_path (php.ini)

Dans xampp : session.save_path = "D:\xampp\tmp"

Sur linux : session.save_path = "/var/lib/php/session" (/etc/php.ini)

Gestion de l'authentification avec Zend_Auth

http://r-benyacoub.developpez.com/tutoriels/php/zend-framework/zend-auth/

http://framework.zend.com/manual/1.11/en/zend.auth.adapter.dbtable.html

Créer un projet Zend

http://framework.zend.com/manual/en/learning.quickstart.create-project.html

Download zf

Copier dans D:\ProgFilesNoInstall\zf

Dans Eclipse, créer un projet PHP nommé "zfquickstart"

Ajouter D:\ProgFilesNoInstall\zf\bin dans PATH windows

Ouvrir une console dos

Aller dans xampp/htdocs

zf create project zfquickstart

 

php.ini

Depuis v5.3 : http://fr.php.net/manual/fr/migration53.ini.php

Revision 482011-04-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1221 to 1221
 

Administration

Added:
>
>

Serveur de gestion de versions (de code source) SUBVERSION

http://planetoweb.cesr.fr/twiki/bin/view/Team/EuroplanetProject#Serveur_SVN

 

Connexion X11

http://en.wikipedia.org/wiki/X_display_manager

Revision 472011-04-07 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 823 to 823
 

PHP

Changed:
<
<

HereDoc

>
>

php.ini

Depuis v5.3 : http://fr.php.net/manual/fr/migration53.ini.php

Le fichier standard php.ini a été réorganisé, et renommé :

  • php.ini-development contient les options qui sont recommandées pour un environnement de développement.
  • php.ini-production contient les configurations recommandées pour la production.

On les trouve dans /usr/share/doc/php-common-5.3.3

Voici la différence entre les 2 :

[root@planetoweb etc]# diff /usr/share/doc/php-common-5.3.3/php.ini-development /usr/share/doc/php-common-5.3.3/php.ini-production
514c514
< error_reporting = E_ALL | E_STRICT
---
> error_reporting = E_ALL & ~E_DEPRECATED
531c531
< display_errors = On
---
> display_errors = Off
542c542
< display_startup_errors = On
---
> display_startup_errors = Off
586c586
< track_errors = On
---
> track_errors = Off
604c604
< html_errors = On
---
> html_errors = Off
1248a1249,1256
> ; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
> ; http://php.net/mysqli.allow_local_infile
> ;mysqli.allow_local_infile = On
>
> ; Allow or prevent persistent links.
> ; http://php.net/mysqli.allow-persistent
> mysqli.allow_persistent = On
>
1297c1305
< mysqlnd.collect_memory_statistics = On
---
> mysqlnd.collect_memory_statistics = Off
1566c1574
< session.bug_compat_42 = On
---
> session.bug_compat_42 = Off
1575c1583
< session.bug_compat_warn = On
---
> session.bug_compat_warn = Off
1593d1600
< session.entropy_file =

HereDoc

 

La syntaxe Heredoc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela signifie que vous n'avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont remplacées par leur valeur et le même soin doit leur être apporté que dans les chaînes à guillemets doubles.

Line: 1213 to 1274
 4 S gdm 3946 3917 0 75 0 - 56317 - 2010 ? 00:00:02 /usr/libexec/gdmgreeter
Added:
>
>
Log de X : /var/log/Xorg.0.log
 
Added:
>
>
Config de X : /etc/X11/xorg.conf
 

BOOT LINUX

Revision 462011-04-07 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1202 to 1202
  Vérifier /etc/X11/xorg.conf
Added:
>
>
Sur serveur boulot, on voit bien que c'est gdm qui tourne :

[root@hyperion xinit]# ps -efl|grep gdm
4 S root      3815     1  0  76   0 - 41936 429493  2010 ?        00:00:00 /usr/sbin/gdm-binary -nodaemon
5 S root      3917  3815  0  76   0 - 48714 pipe_w  2010 ?        00:00:00 /usr/sbin/gdm-binary -nodaemon
4 S root      3919     1  0  77   0 - 47464 304555  2010 ?        00:00:04 /usr/libexec/gdm-rh-security-token-helper
4 S root      3920  3917  0  75   0 - 22128 -       2010 tty7     00:03:08 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7
4 S gdm       3946  3917  0  75   0 - 56317 -       2010 ?        00:00:02 /usr/libexec/gdmgreeter
 

BOOT LINUX

Line: 1639 to 1651
  (pour info, cette clé provient du fichier /etc/nxserver/client.id_dsa.key dans l'installation du serveur freenx)
Changed:
<
<
-----BEGIN DSA PRIVATE KEY-----
MIIBvAIBAAKBgQDnqnFHFYjqwduTLVvaI30NUexHWPtbU5g57hg0SjSUmkduJa/+
26LP3QtAqdDHlL/oY2LCW32+kryCvGho/fNB4lBsUBJPhcsm886dGP01yPt4lWZm
bKOwKhv3SUZRZx3OrrPcc9UrEPjrTEpd9v/DGOkxkv25/IDfhWLrSGU0SQIVAKnb
q7/Ro8hGvxETreoOpKCxFLXFAoGBAJAI25dmgRDwSM/r+ney5wyfD4aHyfiSRtW8
pBeuU5oe0Jeg+8AD1xpF/umqkJHL64JXtwr35pFR2IsTsxch17WYZ8eVjRSGHQ7r
V7TAL/eVPZ3qioqmFRZZ/IZXC1eT+1PwiZfIFkNiSEjYUxERZIgzX9nF5WzQZpZo
dKdDUp7vAoGBAMqqx3tTycQLFcBH9D+yRuMbEdNfj3OPNo6k0se39vxJTFw/qdBI
3yjRw2fqg9PFYnikoOVIojk7Zqqlg/iYDTuwM5ArtuV3QdxzEpn0DdZA05z+0+0Y
pZqWHJ2uCfHCF6jHkga/5wRg1tAnieW0WyNtaBT9CMmTuaIUGNLb0+JEAhQjlQ0+
OZi8vUF+M4nI942WD+m8FA==
-----END DSA PRIVATE KEY-----
>
>
Par soucis de sécurité, je ne diffuse pas la clé ici (vous l'avez reçue par mail)
 
  • cliquer sur "Save", puis "Ok" pour revenir à la fenêtre de connexion
Line: 1660 to 1659
  Cliquer sur "Login"
Added:
>
>
Et voilà !
 (Lorsque votre bureau hyperion s'affiche, répondre à la question posée en choisissant "GNOME")
Changed:
<
<
Et voilà !
>
>
Si le clavier est qwerty, pour passer à un clavier azerty :

  • aller dans le menu Système / Préférences / Clavier
  • cliquer sur onglet "Agencements"
  • cliquer sur bouton "+ Ajouter"
  • sélectionner France puis cliquer sur Valider
  • sélectionner France puis cliquer sur "Vers le haut"
  • cliquer sur bouton "X Fermer"
  (Plus d'information sur la configuration du client ici : http://www.nomachine.com/documents/configuration/client-guide.php)
Added:
>
>
(pour savoir qui est connecté : ps -efl|grep NX)
  4) C'est très bien tout ça, mais comment je fais depuis chez moi ???
Line: 1677 to 1687
  Exécuter Putty
Added:
>
>
Si vous avez déjà une session vers fw-in, inutile d'en recréer une autre, vous pouvez l'utiliser. Sinon, il faut créer une nouvelle session :
 Host name : fw-in.cesr.fr

Port : 22

Line: 1685 to 1697
  Dans le panneau de gauche (Category:), cliquer sur l'arbre "Connection", puis "SSH", puis "Tunnels"
Added:
>
>
(si vous avez déjà un ou plusieurs tunnels créés, pas de problème, vous pouvez en ajouter un de plus)
 Source Port : 9022

Destination : hyperion.cesr.fr:22

Line: 1695 to 1709
  Cliquer sur bouton "Save"
Added:
>
>
Ouvrir cette session (fw-in) que vous venez de créer, et se connecter sur fw-in (avec votre mot de passe mail).
 b) Créer une session graphique

Suivre toutes les étapes du point 3) mais en remplaçant "hyperion.cesr.fr (port 22)" par "localhost (port 9022)"

Revision 452011-04-06 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1605 to 1605
  (Si nécessaire, voici les instructions d'installation pour le client Windows : http://www.nomachine.com/documents/client/install.html#2)
Changed:
<
<
3) Exemple : Configurer une session graphique vers hyperion
>
>
3) Exemple : Configurer une session graphique vers hyperion (depuis le boulot)
  Démarrer le "NX Connection Wizard" (un des programmes installés avec le client)
Line: 1619 to 1619
 
  • Sélectionner "Unix" et "GNOME"
Added:
>
>
  Cliquer sur Next
Line: 1658 to 1660
  Cliquer sur "Login"
Added:
>
>
(Lorsque votre bureau hyperion s'affiche, répondre à la question posée en choisissant "GNOME")
 Et voilà !

(Plus d'information sur la configuration du client ici : http://www.nomachine.com/documents/configuration/client-guide.php)

Revision 442011-04-06 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1160 to 1160
 

Administration

Added:
>
>

Connexion X11

http://en.wikipedia.org/wiki/X_display_manager

http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture

http://tldp.org/HOWTO/XDMCP-HOWTO/intro.html

Le serveur X tourne localement sur mon pc (win ou lin), c'est à dire le pc avec un écran (output), un clavier et une souris (inputs).

Il se connecte à un display manager (xdm ou gdm ou kdm...) qui peut être local ou distant (sur un autre pc) :

  • Si le DM est local, il démarre un ou plusieurs serveurs X, affiche l'écran de connexion (login) au démarrage et chaque fois qu'un user se délogge.
  • Si le DM est distant, il est utilisé via le protocole XDMCP : un user lance des programmes depuis le pc distant (qui exécute le DM) alors que ses input/output se passent sur son pc local.

Ainsi, le serveur X (local) communique avec différents clients graphiques (qui peuvent être distants) à qui il envoit les inputs et de qui il reçoit les outputs.

Pour CentOS, le DM par défaut est sélectionné dans /etc/X11/prefdm (qui regarde si un DM par défaut est donné dans /etc/sysconfig/desktop)

C'est le fichier /etc/X11/xinit/Xsession qui exécute notre environnement.

xdm : voir /etc/X11/

kdm : voir /etc/kdm/

gdm : voir /etc/gdm/ Il devrait s'y trouver un gdm.conf

gdm appelle /etc/X11/xinit/Xsession avec les bonnes options

http://projects.gnome.org/gdm/docs/gdmtalk.pdf

Attention, X et XDMCP sont tous les 2 non sécurisés !!!

Vérifier /etc/resolv.conf

Vérifier /etc/init.d/xfs (font server)

Vérifier que dans /etc/inittab, le default runlevel est bien 5 :

id:5:initdefault:

Vérifier /etc/X11/xorg.conf

 

BOOT LINUX

Line: 1546 to 1589
 

WINDOWS

Added:
>
>

Se connecter à un serveur linux en mode graphique

Il s'agit ici de récupérer le bureau complet d'un serveur linux distant sur l'écran de mon pc Windows (ou Linux) depuis le boulot (ou la maison).

1) L'administrateur du serveur linux doit y avoir installé freenx (yum install freenx)

C'est fait pour hyperion

2) Installer sur mon pc Windows (ou linux) un client de connexion au serveur freenx

Pour Windows, télécharger et installer "NX client for Windows" ici : http://www.nomachine.com/download.php

(ou NX client for Linux pour un pc linux)

(Si nécessaire, voici les instructions d'installation pour le client Windows : http://www.nomachine.com/documents/client/install.html#2)

3) Exemple : Configurer une session graphique vers hyperion

Démarrer le "NX Connection Wizard" (un des programmes installés avec le client)

Cliquer sur Next

  • Session : donner un nom à votre session graphique (par exemple "connexion à hyperion depuis le boulot")

  • Host : hyperion.cesr.fr (port 22)

Cliquer sur Next

  • Sélectionner "Unix" et "GNOME"

  • Cocher "Disable encryption of all traffic" (pour accélerer la connexion)

Cliquer sur Next

  • Cocher "Create shortcut on desktop"

Cliquer sur Next

Une fenetre de connexion s'affiche (que vous pourrez relancer à loisir en cliquant sur votre raccourci bureau portant le nom de votre session)

Cliquer sur "Configure"

  • Cocher "Remember my password"

  • Cliquer sur le bouton Key et y coller l'intégralité de la clé publique suivante à la place de la clé courante :

(pour info, cette clé provient du fichier /etc/nxserver/client.id_dsa.key dans l'installation du serveur freenx)

-----BEGIN DSA PRIVATE KEY-----
MIIBvAIBAAKBgQDnqnFHFYjqwduTLVvaI30NUexHWPtbU5g57hg0SjSUmkduJa/+
26LP3QtAqdDHlL/oY2LCW32+kryCvGho/fNB4lBsUBJPhcsm886dGP01yPt4lWZm
bKOwKhv3SUZRZx3OrrPcc9UrEPjrTEpd9v/DGOkxkv25/IDfhWLrSGU0SQIVAKnb
q7/Ro8hGvxETreoOpKCxFLXFAoGBAJAI25dmgRDwSM/r+ney5wyfD4aHyfiSRtW8
pBeuU5oe0Jeg+8AD1xpF/umqkJHL64JXtwr35pFR2IsTsxch17WYZ8eVjRSGHQ7r
V7TAL/eVPZ3qioqmFRZZ/IZXC1eT+1PwiZfIFkNiSEjYUxERZIgzX9nF5WzQZpZo
dKdDUp7vAoGBAMqqx3tTycQLFcBH9D+yRuMbEdNfj3OPNo6k0se39vxJTFw/qdBI
3yjRw2fqg9PFYnikoOVIojk7Zqqlg/iYDTuwM5ArtuV3QdxzEpn0DdZA05z+0+0Y
pZqWHJ2uCfHCF6jHkga/5wRg1tAnieW0WyNtaBT9CMmTuaIUGNLb0+JEAhQjlQ0+
OZi8vUF+M4nI942WD+m8FA==
-----END DSA PRIVATE KEY-----

  • cliquer sur "Save", puis "Ok" pour revenir à la fenêtre de connexion

Entrer votre login/pass pour hyperion

Cliquer sur "Login"

Et voilà !

(Plus d'information sur la configuration du client ici : http://www.nomachine.com/documents/configuration/client-guide.php)

4) C'est très bien tout ça, mais comment je fais depuis chez moi ???

C'est un peu plus compliqué car il faut installer un tunnel qui passe par le firewall CESR.

a) Creuser un tunnel

Sur Windows, on crée le tunnel avec le logiciel Putty

Exécuter Putty

Host name : fw-in.cesr.fr

Port : 22

Saved Sessions : fw-in (ou ce que vous voulez, par exemple "le firewall du cesr")

Dans le panneau de gauche (Category:), cliquer sur l'arbre "Connection", puis "SSH", puis "Tunnels"

Source Port : 9022

Destination : hyperion.cesr.fr:22

Cliquer sur bouton "Add"

Dans le panneau de gauche (Category:), cliquer sur l'arbre "Session"

Cliquer sur bouton "Save"

b) Créer une session graphique

Suivre toutes les étapes du point 3) mais en remplaçant "hyperion.cesr.fr (port 22)" par "localhost (port 9022)"

Ya pu ka tester !

 

Visualiser les fichiers Postscript

Installer GhostScript (engine) puis GhostView (frontend)

Revision 432011-04-06 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Revision 422011-03-17 - PyM

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1144 to 1144
  En mode interactif, On peut aussi utiliser display (voir ci-dessus)
Added:
>
>

Réduire la taille d'un fichier PDF

Taper dans un terminal la commande suivante

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=fichier_reduit.pdf fichier_a_reduire.pdf

La commande peut se faire avec l'option suivante (non obligatoire):

-dPDFSETTINGS=/screen (qualité faible - compression forte) -dPDFSETTINGS=/ebook (qualité moyenne - compression moyenne) -dPDFSETTINGS=/printer (qualité élevée - compression faible)

 

Administration

Revision 412011-03-01 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 97 to 97
 

IDL

Added:
>
>

OpenGL Direct Hardware Rendering on Linux

The "Direct Rendering Infrastructure" (DRI) or "Direct hardware rendering" is described here :

http://www.ittvis.com/services/techtip.asp?ttid=3524

As it currently does not work on hyperion, we have to deactivate it and activate "software rendering" instead (slower).

How to set IDL to use "software rendering" (IDL 8 issue) ?

  • From IDLDE

Fenêtre/Préférences/IDL/Graphiques :

Méthode de rendu pour les objets graphiques : sélectionner "Logiciel" au lieu de "Matériel"

  • From the idl console

There are a couple of ways to set IDL to use software rendering, besides from the IDLDE.

If you want to set the entire IDL session to use software rendering, then when you start up IDL, you could use this command:

idl -IDL_GR_WIN_RENDERER 1 (for Windows) or idl -IDL_GR_X_RENDERER 1 (for X Windows)

If you want to switch from the default hardware rendering to software rendering in the middle of an IDL session, you could use this command:

PREF_SET, 'IDL_GR_WIN_RENDERER', '1', /COMMIT (for Windows) or PREF_SET, 'IDL_GR_X_RENDERER', '1', /COMMIT (for X Windows)

 

Conseils pour bien documenter son code

  • Voir conseils généraux (Michael Galloy) "A style guide" : styleguide.pdf
Line: 1115 to 1148
 

Administration

Added:
>
>

BOOT LINUX

I - Le boot : tryptique noyau, arguments, et ramdisk
Synthèse du workflow : bootloader ==> noyau + initramfs + arguments ==> montage de la racine

1) Chargeur de boot (bootloader)
C'est le 1er prog à s'exécuter. Différent selon les architectures (pc x86, station Sun, Mac PPC...) Rôle: mettre en RAM le noyau (kernel), lui passer des arguments, copier un ramdisk en RAM, et passer la main au noyau Ex: lilo, grup, outils syslinux (bien adapté à partifion FAT, clé usb, cd) Etapes : - allumage électrique - POST (Power On Self Test) - BIOS (dans lequel le periph d'amorçage est défini) - lancement bootloader installé sur periph amorcé Ex: noyau grub, /boot/bzImage-2.6 Ex: ramdisk grub, /boot/initrd.img

2) Le noyau
Rôle : monter la racine et lancer /sbin/init situé dessus Au boot, le noyau décourvre son environnement (ram, cpu, disque...). Ces périph sont gérés par des pilotes (drivers), des "modules" qui sont compilés dans le noyau ou dans des fichiers externes (souvent dans /lib/modules/). Les fichiers modules sont situés sur une partition qui n'est pas encore montée, et donc les périph correspondants ne peuvent pas être utilisés. Le noyau monte sa racine avec /bin/mount ex: montage de /dev/sda1 en lecture seule avec sys de fichier ext4 $ mount -t ext4 -o ro /dev/sda1 / Les arguments passés au noyau peuvent être relus après boot : $ cat /proc/cmdline On peut aussi passer l'argument "init=/bin/bash" pour accéder au système au démarrage avec un shell bash.

3) Le ramdisk initial : initramfs
Rôle : permettre une détection plus intelligente de la racine ainsi qu'une facilité de configuration. S'appelait initrd, mais est de plus en plus remplacé par initramfs L'initramsf est un ensemble de fichiers qui vont être directement copiés dans le cache de système de fichiers sous la racine (tous les sys 2.6 utilisent un rootfs, cf "cat /proc/mounts"). Il doit au moins contenir un programme /init exécutable que le noyau va lancer pour qu'il trouve la racine et la monte. C'est un microsystème linux à part entière. Le prog /init est souvent un script shell, simple à lire. Avec un initramfs, il devient possible de conserver un noyau minimal et de mettre les modules essentiels au boot dans l'initramfs (évite de devoir recompiler le noyau). Il contient aussi l'image qui permet un affichage graphique pendant le boot. /init parse donc la ligne /proc/cmdline, cherche la racine, et la monte pour ensuite basculer le noyau dessus, et enfin s'autoremplace par le vrai binaire /sbin/init.

II - init et inittab

Arrivé à ce point, la noyau tourne, la racine de la distrib est montée (souvent en "ro") et le binaire /sbin/init est lancé, premier processus.

Si ce processus meurt (pid=1), le noyau fait un kernel panic. Il est aussi responsable de l'extinction de la machine. Si on passe au noyau l'argument "init=/bin/bash", seul "bash" est lancé (à la place de /sbin/init) et on a ainsi un accès root sur la racine (utile pour réparer une distrib, ou modifier mot passe root dans /etc/shadow)

/sbin/init a pour fichier de conf, /etc/inittab : décrit les processus lancés au démarrage et à surveiller durant le fonctionnement normal du système. Init à 7 runlevels (0=stop, ..., 6=reboot). Runlevel 1 est pour la maintenance (nb minimum de processus et user root only). Chaque ligne est composée de 4 paramètres : référence:runlevel:manière de lancer la commande:commande Runlevel par défaut (ici, le 3): id:3:initdefault: On peut modifier ça avec un argument au noyau, par ex: root=/dev/hda2 ro 1 Runlevel courant ? $ runlevel Changer de runlevel ? $ init n

sysinit est lancé au boot, mais avant les cdes boot: si::sysinit:/etc/rc.d/rc.sysinit

reset: ca::ctrlaltdel:/sbin/shutdown -t3 -r now

wait, lance un process et attend sa fin pour continuer: l5:5:wait:/etc/rc.d/rc 5

respawn, relance le process quand il se termine (ex: les gettys texte, alt-F1... relancés dès qu'on se délogue) 5:2345:respawn:/sbin/mingetty tty5

Relecture de inittab après modif ? kill -HUP 1

inittab lance des script rc (run command) de 2 façons selon les familles de systèmes linux :

  • façon systemV (RedHat et Debian)
  • façon BSD (slackware)

Voyons ici la façon SystemV (plus élaborée que BSD)

en fait, inittab lance le script rc général et lui passe le runlevel en argument: l5:5:wait:/etc/rc.d/rc 5 rc va lancer les scripts du runlevel associé, dans l'ordre alpha. /etc/rc.d/ contient un dossier rcN.d/ par runlevel (N) ex: /etc/rc.d/rc5.d/ Ce dossier contient simplement des liens vers les scripts de /etc/init.d/ (qui doivent accepter au moins les arguments "start" et "stop") Ces liens sont préfixés par S (Start) ou K (Kill). Quand on entre dans un runlevel, tous les liens S* de ce runlevel sont exécutés (dans l'ordre alpha) Quand on sort d'un runlevel, tous les liens K* de ce runlevel sont exécutés Ex: S85httpd lancera "/etc/init.d/httpd start" Un lien /etc/rc.d/rc5.d/S42foobar sera exécuté à l'entrée du runlevel 5, et appellera /etc/init.d/foobar start Il sera exécuté avant l'appel de S95barqux Sur RedHat, seul le runlevel 5 lance X : x:5:respawn:/etc/X11/prefdm -nodaemon

Le dernier script à être lancé est /etc/rc.d/rc.local (on peut y mettre tout ce qu'on veut voir exécuter au boot) Le prog update-rc.d peut être utilisé pour activer/désactiver des scripts au démarrage.

Ubuntu propose Upstart en remplacement du couple init/inittab MacOS propose un "super-daemon" launchd qui regroupe les fonctionnalités de init (lance démon lors du démarrage), crond (lance démon lors de top horaires), et (x)inetd (lance démon lors de requêtes réseaux)

 

FTP

ex: installation ftp pour l'expérience RAMAN (sur ExoMars)

Revision 402011-02-09 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 913 to 913
 

Utilisation

Added:
>
>

SSH

Exécuter une commande sur un serveur distant:

  • De manière générale:

# ssh user@server bash -c "ls -l"

Mode raccourci:

# ssh user@server "ls -l"

  • depuis planetoweb:

# ssh surfasafe "ls -l"

# ssh root@surfasafe "ls -l"

# ssh root@surfasafe bash -c "ls -l"

  • Non autorisé vers sauvcesr2:

# ssh pallier@sauvcesr2 bash -c "ls -l"

This account is restricted by rssh.

Allowed commands: scp sftp rsync

If you believe this is in error, please contact your system administrator.

 

SED (substitution de texte)

Pleins d'exemples ici : http://sed.sourceforge.net/sed1line_fr.html

Line: 1264 to 1296
 /etc/init.d/swatch start ==> créer un pid dans /var/run/swatch.pid et un fichier /root/.swatch_script.xxxx (avec xxxx = pid - 2)
Deleted:
<
<

SSH

Exécuter une commande sur un serveur distant:

De manière générale:

# ssh user@server bash -c "ls -l"

  • En raccourci, depuis planetoweb:

# ssh surfasafe "ls -l"

# ssh root@surfasafe "ls -l"

# ssh root@surfasafe bash -c "ls -l"

  • Non autorisé vers sauvcesr2:

# ssh pallier@sauvcesr2 bash -c "ls -l"

This account is restricted by rssh.

Allowed commands: scp sftp rsync

If you believe this is in error, please contact your system administrator.

 

SSH, config plus stricte


Revision 392011-02-09 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1265 to 1265
 
Added:
>
>

SSH

Exécuter une commande sur un serveur distant:

De manière générale:

# ssh user@server bash -c "ls -l"

  • En raccourci, depuis planetoweb:

# ssh surfasafe "ls -l"

# ssh root@surfasafe "ls -l"

# ssh root@surfasafe bash -c "ls -l"

  • Non autorisé vers sauvcesr2:

# ssh pallier@sauvcesr2 bash -c "ls -l"

This account is restricted by rssh.

Allowed commands: scp sftp rsync

If you believe this is in error, please contact your system administrator.

 

SSH, config plus stricte

Revision 382011-01-25 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 1371 to 1371
 

WINDOWS

Added:
>
>

Visualiser les fichiers Postscript

Installer GhostScript (engine) puis GhostView (frontend)

http://pages.cs.wisc.edu/~ghost/

Convertir un fichier Postscript en JPEG (ou autre) avec GhostScript (en mode batch)

Pour info, sur Linux, c'est très simple, il suffit d'utiliser la commande "convert" (ou plus spécifique "ps2...")

Sous Windows, c'est un peu plus compliqué.

GhostScript converts PS to PNG, JPEG, PNM, TIFF, BMP, PCX, PSD, PDF, EPS, PCL-XL.

1) Télécharger la version Windows de GhostScript et l'installer

http://pages.cs.wisc.edu/~ghost/

ou encore:

http://ghostscript.com/releases/

2) Ajouter le dossier exécutable de GhosScript dans votre PATH windows

set PATH=%PATH%;C:\Program Files\gs\gs9.00\bin

3) Exemple de conversion d'un fichier PS en JPG:

Aller dans le dossier qui contient le fichier PS (somefile.ps) à convertir (cd ...)

L'instruction suivante créera un fichier somefile.jpg dans c:\temp :

gswin32c -sDEVICE=jpeg -o c:\temp\somefile.jpg somefile.ps

Pour plus d'information sur les possibilités de GhostScript : http://pages.cs.wisc.edu/~ghost/doc/cvs/Use.htm

REMARQUE : pour faire la même chose en mode graphique, il existe une interface graphique qui s'installe par-dessus GhostScript (en frontend), c'est GhostView (gsview) :

http://pages.cs.wisc.edu/~ghost/gsview/index.htm

 

Migrer de Windows XP vers Windows 7

Il faut acheter la licence Microsoft. La démarche dépend de la marque du PC.

Revision 372011-01-21 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 796 to 796
 La syntaxe Heredoc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela signifie que vous n'avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont remplacées par leur valeur et le même soin doit leur être apporté que dans les chaînes à guillemets doubles. Exemple de chaîne HereDoc
Added:
>
>
  <?php $str = <<<EOD
Line: 834 to 835
 } ?>
Changed:
<
<
>
>
 

Fonctions anonymes (exemples d'algo de tri et de somme)

Revision 362011-01-21 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 790 to 790
 

PHP

Added:
>
>

HereDoc

La syntaxe Heredoc se comporte exactement comme une chaîne à guillemets doubles, sans les guillemets doubles. Cela signifie que vous n'avez pas à échapper les guillemets (simples ou doubles) dans cette syntaxe. Les variables sont remplacées par leur valeur et le même soin doit leur être apporté que dans les chaînes à guillemets doubles. Exemple de chaîne HereDoc

foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MonNom'; echo <<foo. Maintenant, j'affiche un {$foo->bar[1]}. Ceci se traduit par un 'A' majuscule : \x41 EOT; ?>

 

Fonctions anonymes (exemples d'algo de tri et de somme)

Revision 352010-12-02 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 790 to 790
 

PHP

Changed:
<
<
Afficher un bloc de code html dans php (ou tout autre texte long) :
>
>

Fonctions anonymes (exemples d'algo de tri et de somme)

<?php

    $t = array (2,3,6,7,9,2,43,5,2,54,65,34,23,54,23,654,43);

    print_r ($t);

    uasort ($t, function ($x,$y) { return $x > $y;});

    print_r ($t);

    printf ("somme = %d\n", array_reduce ($t, function ($x,$y) { return $x+$y;}));
?> 

Travail sur les chaînes

- Supprimer une partie de la chaîne : str_replace()

- sous-chaîne : substr()

- tester la présence d'une sous-chaine dans la chaine (et récupérer sa position) : strpos()

- parser une chaine de paramètres html, et les placer dans un tableau : parse_str($chaine, $args)

- remplacer une partie de la chaine : $bodytag = str_replace("%body%", "black", "");

Travail sur les arrays

- merge : $GET = array_merge($GET,$args)

- dispatcher contenu array dans n strings (explode) : $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);

- regrouper contenu array dans 1 string (implode) : $array = array('lastname', 'email', 'phone'); $comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone

Reflection

print FUNCTION." in ".__FILE__." at ".__LINE__."\n";

Ou bien (php5) :

$modelReflector = new ReflectionClass(CLASS);

$method = $modelReflector->getMethod(METHOD);

ATTENTION

- echo "cette variable n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $nimportekoi;

- echo "cette propriété (attribut, variable) n'existe pas mais ca ne génère aucune erreur !!!!!!!" . $this->nimportekoi;

Afficher un bloc de code html dans php (ou tout autre texte long) :

  http://forum.webrankinfo.com/petite-astuce-pour-afficher-simplement-code-html-t32812.html

Revision 342010-11-26 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 991 to 991
  Voir en ligne (Site Officiel d’ExoMars à l’ESA) : http://www.esa.int/esaSC/SEMGB7MJ74G_index_0.html
Added:
>
>
  • Installation ftp

Ajout 2 users ftpread et ftpw (groupe ftpgroup) dans /etc/passwd (et /etc/shadow), et leur donner pour home /projects/raman/ftp/files

Leur attribuer un pass via "password"

Leur donner un accès exclusif a leur home:

chown ftpw:ftpgroup /projects/raman/ftp/files/

Faire en sorte que ftpread n'est qu'un accès en lecture seule (via son groupe ftpgroup) :

chmod 755 /projects/raman/ftp/files/ --> "rwxr-xr-x"

Les autoriser en les ajoutant dans dans /etc/vsftpd/user_list

(chroot doit être activé par défaut pour tous les users internes)

/etc/init.d/vsftpd restart

 

LOGS

Revision 332010-11-23 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 799 to 799
 

LINUX

Changed:
<
<

Niveau Utilisateur

>
>

Utilisation

 

SED (substitution de texte)

Line: 970 to 970
 
Changed:
<
<

Niveau Administrateur

>
>

Administration

FTP

ex: installation ftp pour l'expérience RAMAN (sur ExoMars)

http://www.obs-mip.fr/index.php/fre/recherche/techniques-missions-spatiales/Exomars-RAMAN

  • Mission

La mission ExoMars, de l’Agence Spatiale Européenne (ESA), est une mission du programme Aurora. Son objectif est de caractériser l’environnement biologique martien pour préparer l’exploration humaine de la planète rouge.

  • Instrument CESR

EXLIBRIS serait capable d’effectuer une ablation des roches puis l’analyse de la composition de cette roche à la fois en chimie élémentaire (ultra-violet), en minéraux et composés organiques (Raman). Le CESR serait responsable de la partie LIBS (ultra-violet) et de la calibration de l’instrument. F. Rull Pérez (Centro de Astrobiologia , Espagne) serait en charge de la partie Raman. Contexte de réalisation

Mission ESA : Tir prévu en 2013.

Voir en ligne (Site Officiel d’ExoMars à l’ESA) : http://www.esa.int/esaSC/SEMGB7MJ74G_index_0.html

 

LOGS

Revision 322010-11-23 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 607 to 607
  Pour documenter une fonction ou une procédure :
Changed:
<
<
doc_library, 'DIST'
>
>
  • Fonction "dist":
 
Changed:
<
<
doc_library, 'plot'
>
>
IDL> doc_library, 'DIST'

----- Documentation for C:\Program Files\ITT\IDL\IDL80\lib\dist.pro

 NAME:
	DIST

 PURPOSE:
	Create a rectangular array in which each element is proportional
	to its frequency.  This array may be used for a variety
	of purposes, including frequency-domain filtering and
	making pretty pictures.

 CATEGORY:
	Signal Processing.

 CALLING SEQUENCE:
	Result = DIST(N [, M])

 INPUTS:
	N = number of columns in result.
	M = number of rows in result.  If omitted, N is used to return
		a square array.

 OUTPUTS:
	Returns an (N,M) floating array in which:

	R(i,j) = SQRT(F(i)^2 + G(j)^2)   where:
		 F(i) = i  IF 0 <= i <= n/2
		      = n-i  IF i > n/2
		 G(i) = i  IF 0 <= i <= m/2
		      = m-i  IF i > m/2

 SIDE EFFECTS:
	None.

 RESTRICTIONS:
	None.

 PROCEDURE:
	Straightforward.  The computation is done a row at a time.

 MODIFICATION HISTORY:
	Very Old.
 	SMR, March 27, 1991 - Added the NOZERO keyword to increase efficiency.
				(Recomended by Wayne Landsman)
	DMS, July, 1992.  - Added M parameter to make non-square arrays.
   CT, RSI, March 2000: Changed i^2 to i^2. to avoid overflow.

  • Fonction plot:

IDL> doc_library, 'plot'

----- Documentation for C:\Program Files\ITT\IDL\IDL80\lib\graphics\plot.pro

 :Description:
    Create IDL Plot graphic.

 :Params:
    arg1 : optional generic argument
    arg2 : optional generic argument

 :Keywords:
    _REF_EXTRA
  Dans ce dernier exemple (plot), on se rend compte que depuis idl 8, les nouvelles fonctions/procédures (telles que la fonction plot) ne sont plus commentées au format "idl" mais "rst", qui semble donc être le nouveau format à utiliser pour commenter du code idl.

Revision 312010-11-23 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 101 to 101
 
  • Voir conseils généraux (Michael Galloy) "A style guide" : styleguide.pdf
Deleted:
<
<

 Je livre ici une synthèse des conseils de Michael Galloy pour bien documenter un code IDL (Lire "A style guide" pour la version complète avec justifications) :

1. General principles

Line: 536 to 532
 
Changed:
<
<

9. Tirer profit de IdlDoc

idldoc est un outil qui permet de générer une doc à partir du code idl

Il propose 3 formats différents :

  • rst : le format le plus récent, qui tend à devenir le nouveau standard, il apporte beaucoup de possibilités
  • idldoc : le format historique de idldoc, qui ressemble à celui utilisé par des outils plus génériques, tels que Doxygen
  • idl : le format utilisé par ITT (et proposé dans examples/template.pro)

Ce dernier format ("idl") a juste le "mérite" d'être un standard pour les routines IDL, mais il est peu et mal exploité par IdlDoc qui ne reconnait que très peu de balises de commentaires (seulement 6) parmis celles proposées dans template.pro, et les met mal en valeur dans la doc générée.

Les 6 balises exploitées sont :

; PURPOSE:

; SIDE EFFECTS:

; RESTRICTIONS:

; PROCEDURE:

; EXAMPLE:

; MODIFICATION HISTORY:

Cette dernière balise est affichée en tant que "Author information" dans la doc générée

Quant à la balise suivante...

; CALLING SEQUENCE:

... elle n'est pas reconnue, mais elle semble inutile puisque cette information est automatiquement générée par idldoc.

>
>
Le même bloc de commentaires, mais vide :
 
Deleted:
<
<

8. Exemple possible de commentaires (donné par O Gasnault)

 
;+
; NAME:

Line: 640 to 599
 
Changed:
<
<

IdlDoc : générateur de documentation pour IDL

>
>

OUTILS pour documenter le code

doc_library

doc_library affiche seulement "tel quel" le bloc de commentaires complet compris entre ";+" et ";-", et affiche le chemin du fichier.

Pour documenter une fonction ou une procédure :

doc_library, 'DIST'

doc_library, 'plot'

Dans ce dernier exemple (plot), on se rend compte que depuis idl 8, les nouvelles fonctions/procédures (telles que la fonction plot) ne sont plus commentées au format "idl" mais "rst", qui semble donc être le nouveau format à utiliser pour commenter du code idl.

mk_html_help

Cet outil génère une doc html d'un fichier ou même d'un répertoire complet :

ex: documentation du fichier dist.pro:

MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib\dist.pro', 'help_dist.html' ; La doc générée est help_dist.html

ex: documentation d'une arborescence complète:

MK_HTML_HELP, 'C:\Program Files\ITT\IDL\IDL80\lib', 'help.html' ; La doc générée est help.html

IdlDoc

  home: http://idldoc.idldev.com/
Line: 648 to 639
  tutoriel: http://idldoc.idldev.com/wiki/GettingStarted
Changed:
<
<
Installation: (NB: sur hyperion, c'est déjà installé sous /usr/local/itt/idldoc/idldoc)
>
>
idldoc est un outil qui permet de générer une doc à partir du code idl

Il propose 3 formats différents :

  • rst : le format le plus récent, qui tend à devenir le nouveau standard, il apporte beaucoup de possibilités
  • idldoc : le format historique de idldoc, qui ressemble à celui utilisé par des outils plus génériques, tels que Doxygen
  • idl : le format utilisé par ITT (et proposé dans examples/template.pro)

Ce dernier format ("idl") a juste le "mérite" d'être un standard pour les routines IDL, mais il est peu et mal exploité par IdlDoc qui ne reconnait que très peu de balises de commentaires (seulement 6) parmis celles proposées dans template.pro, et les met mal en valeur dans la doc générée.

Les 6 balises exploitées sont :

; PURPOSE:

; SIDE EFFECTS:

; RESTRICTIONS:

; PROCEDURE:

; EXAMPLE:

; MODIFICATION HISTORY:

Cette dernière balise est affichée en tant que "Author information" dans la doc générée

Quant à la balise suivante...

; CALLING SEQUENCE:

... elle n'est pas reconnue, mais elle semble inutile puisque cette information est automatiquement générée par idldoc.

Voir mes commentaires à l'auteur du logiciel et ses réponses:

http://michaelgalloy.com/2010/10/20/idldoc-3-3-released.html

Installation

(NB: sur hyperion, c'est déjà installé sous /usr/local/itt/idldoc/idldoc)

  1) Download
Line: 656 to 687
  3) Ajouter le chemin vers idldoc dans le IDL_PATH (Fenêtre/Preferences/IDL/Chemins/Insérer (puis Appliquer)
Changed:
<
<
Utilisation:
>
>
Utilisation
  Pour générer la doc avec idldoc :
Changed:
<
<
IDL> idldoc, root='C:\Users\Etienne\IDLWorkspace80\monprojet\trunk\src', output='C:\Users\Etienne\IDLWorkspace80\monprojet\trunk\doc'
>
>
IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc'
  Puis, 2clic sur index.html
Added:
>
>
Exemple plus complet:

IDL> idldoc, root='path_vers_mon_repertoire_source', output='path_vers_mon_repertoire_doc', title='DOC pour mon projet', subtitle='generated with idldoc 3.3', format_style='rst', overview='path_vers_mon_fichier_overview'

Remarque: format_style peut prendre les 3 valeurs "rst", "idl" ou "idldoc"

 

Enregistrer une image dans un fichier

Revision 302010-11-18 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 433 to 433
 contain the secondary parent class as an instance variable.
Added:
>
>

8. Exemple de commentaires proposé par ITT dans examples/template.pro

;+
; NAME:
; ROUTINE_NAME
;
; PURPOSE:
; Tell what your routine does here.  I like to start with the words:
; "This function (or procedure) ..."
; Try to use the active, present tense.
;
; CATEGORY:
; Put a category (or categories) here.  For example:
; Widgets.
;
; CALLING SEQUENCE:
; Write the calling sequence here. Include only positional parameters
; (i.e., NO KEYWORDS). For procedures, use the form:
;
; ROUTINE_NAME, Parameter1, Parameter2, Foobar
;
; Note that the routine name is ALL CAPS and arguments have Initial
; Caps.  For functions, use the form:
; 
; Result = FUNCTION_NAME(Parameter1, Parameter2, Foobar)
;
; Always use the "Result = " part to begin. This makes it super-obvious
; to the user that this routine is a function!
;
; INPUTS:
; Parm1:  Describe the positional input parameters here. Note again
;   that positional parameters are shown with Initial Caps.
;
; OPTIONAL INPUTS:
; Parm2:  Describe optional inputs here. If you don't have any, just
;   delete this section.
; 
; KEYWORD PARAMETERS:
; KEY1: Document keyword parameters like this. Note that the keyword
;   is shown in ALL CAPS!
;
; KEY2: Yet another keyword. Try to use the active, present tense
;   when describing your keywords.  For example, if this keyword
;   is just a set or unset flag, say something like:
;   "Set this keyword to use foobar subfloatation. The default
;    is foobar superfloatation."
;
; OUTPUTS:
; Describe any outputs here.  For example, "This function returns the
; foobar superflimpt version of the input array."  This is where you
; should also document the return value for functions.
;
; OPTIONAL OUTPUTS:
; Describe optional outputs here.  If the routine doesn't have any, 
; just delete this section.
;
; COMMON BLOCKS:
; BLOCK1: Describe any common blocks here. If there are no COMMON
;   blocks, just delete this entry.
;
; SIDE EFFECTS:
; Describe "side effects" here.  There aren't any?  Well, just delete
; this entry.
;
; RESTRICTIONS:
; Describe any "restrictions" here.  Delete this section if there are
; no important restrictions.
;
; PROCEDURE:
; You can describe the foobar superfloatation method being used here.
; You might not need this section for your routine.
;
; EXAMPLE:
; Please provide a simple example here. An example from the
; DIALOG_PICKFILE documentation is shown below. Please try to
; include examples that do not rely on variables or data files
; that are not defined in the example code. Your example should
; execute properly if typed in at the IDL command line with no
; other preparation. 
;
;       Create a DIALOG_PICKFILE dialog that lets users select only
;       files with the extension `pro'. Use the `Select File to Read'
;       title and store the name of the selected file in the variable
;       file. Enter:
;
;       file = DIALOG_PICKFILE(/READ, FILTER = '*.pro') 
;
; MODIFICATION HISTORY:
;   Written by: Your name here, Date.
; July, 1994  Any additional mods get described here.  Remember to
;     change the stuff above if you add a new keyword or
;     something!
;-

PRO TEMPLATE

  PRINT, "This is an example header file for documenting IDL routines"

END

9. Tirer profit de IdlDoc

idldoc est un outil qui permet de générer une doc à partir du code idl

Il propose 3 formats différents :

  • rst : le format le plus récent, qui tend à devenir le nouveau standard, il apporte beaucoup de possibilités
  • idldoc : le format historique de idldoc, qui ressemble à celui utilisé par des outils plus génériques, tels que Doxygen
  • idl : le format utilisé par ITT (et proposé dans examples/template.pro)

Ce dernier format ("idl") a juste le "mérite" d'être un standard pour les routines IDL, mais il est peu et mal exploité par IdlDoc qui ne reconnait que très peu de balises de commentaires (seulement 6) parmis celles proposées dans template.pro, et les met mal en valeur dans la doc générée.

Les 6 balises exploitées sont :

; PURPOSE:

; SIDE EFFECTS:

; RESTRICTIONS:

; PROCEDURE:

; EXAMPLE:

; MODIFICATION HISTORY:

Cette dernière balise est affichée en tant que "Author information" dans la doc générée

Quant à la balise suivante...

; CALLING SEQUENCE:

... elle n'est pas reconnue, mais elle semble inutile puisque cette information est automatiquement générée par idldoc.

 

8. Exemple possible de commentaires (donné par O Gasnault)

;+

Revision 292010-11-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 225 to 225
 

4. Statement formatting

Changed:
<
<
1. Use lowercase for reserved words, operators, and compile_opt option names.
>
>
4.1. Use lowercase for reserved words, operators, and compile_opt option names.
  For example, use:

Line: 233 to 233
 if (not done) then readf, lun, line
Changed:
<
<
2. Use only one statement per line.
>
>
4.2. Use only one statement per line.
  For example, don't write:

a = 1 & b = 2

Changed:
<
<
3. Prefer begin/end blocks unless the entire statements fits on one line.
>
>
4.3. Prefer begin/end blocks unless the entire statements fits on one line.
  For a single, long statement, use:

Line: 254 to 254
  print, i, format='("The index is ", I0, ".")'
Changed:
<
<
5. Define structures one field per line unless the entire definition can fit on one line.
>
>
4.5. Define structures one field per line unless the entire definition can fit on one line.
  For example, use:
Line: 266 to 266
  }
Changed:
<
<
6. Add one space around most operators.
>
>
4.6. Add one space around most operators.
  ex:
Line: 280 to 280
  Also, don't add extra spaces in order to align values.
Changed:
<
<
7. Use single quotes for strings.
>
>
4.7. Use single quotes for strings.
  Use double single quotes if you need a single quote. For example,

sign = 'Eat at Joe''s'

Changed:
<
<
9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers.
>
>
4.9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers.
  Use 0L not 0l because "l" (lowercase letter el) looks like "1" (integer one). Use '5'o and '5'x, not '5'O and '5'X.
Changed:
<
<
10. Use square brackets for array indices.
>
>
4.10. Use square brackets for array indices.
  Use

Revision 282010-11-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 433 to 433
 contain the secondary parent class as an instance variable.
Added:
>
>

8. Exemple possible de commentaires (donné par O Gasnault)

;+
; NAME:
;
;
;
; PURPOSE:
;
;
;
; CATEGORY:
;
;
;
; CALLING SEQUENCE:
;
;
;
; INPUTS:
;
;
;
; OPTIONAL INPUTS:
;
;
;
; KEYWORD PARAMETERS:
;
;
;
; OUTPUTS:
;
;
;
; OPTIONAL OUTPUTS:
;
;
;
; COMMON BLOCKS:
;
;
;
; SIDE EFFECTS:
;
;
;
; RESTRICTIONS:
;
;
;
; PROCEDURE:
;
;
;
; EXAMPLE:
;
;
;
; MODIFICATION HISTORY:
;
;-
 

IdlDoc : générateur de documentation pour IDL

Revision 272010-11-10 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 225 to 225
 

4. Statement formatting

Changed:
<
<
1. Use lowercase for reserved words, operators, and compile_opt option names.
>
>
1. Use lowercase for reserved words, operators, and compile_opt option names.
 For example, use:
Added:
>
>

 compile_opt strictarr if (not done) then readf, lun, line
Changed:
<
<
2. Use only one statement per line. Multiple commands can be entered on one line using the & to separate them. This can be useful on the command line, but don't use it for code in files: routines, batch files, or main-level programs. For example, don't write:
>
>

2. Use only one statement per line.

For example, don't write:

 a = 1 & b = 2
Changed:
<
<
3. Prefer begin/end blocks unless the entire statements fits on one line. For example, for a single short statement in a compound statement, use: for i = 0, 10 do print, i For a multiple statement block, write: for i = 0, 10 do begin j = i^2 print, j endfor
>
>
3. Prefer begin/end blocks unless the entire statements fits on one line.
 For a single, long statement, use:
Added:
>
>

 for i = 0, 10 do begin print, i, format='("The index is ", I0, ".")' end
Added:
>
>
 But never write:
Added:
>
>

 for i = 0, 10 do $ print, i, format='("The index is ", I0, ".")'
Changed:
<
<
The same holds for each case of a case or switch statement:
>
>

5. Define structures one field per line unless the entire definition can fit on one line.
 
Deleted:
<
<
Statement formatting 6 case uname of 'tlb': resize_widget, event.x, event.y 'draw': begin if (event.type ne 2) then return ; type 2 = motion events (*pstate).x = event.x (*pstate).y = event.y end else: endcase 4. Use specific end statements for the ending a block: endif, endwhile, endrep, endcase, and endswitch. Using the appropriate end statement lets the IDL compiler help catch structural errors in the code. There are no specific end statements for each case of a case or switch statement or the end of a routine or mainlevel program, so just use end. 5. Define structures one field per line unless the entire definition can fit on one line.
 For example, use:
Added:
>
>
 point = { x: 0.0, y:0.0 } state = { x: 0.0, $ y: 0.0, $ pdata: ptr_new(), $ ; image data drawId: 0L $ ; window identifier }
Changed:
<
<
Defining each field on its own line allows for individual fields to be found more easily and to be documented on the same line they are defined on. 6. Add one space around most operators. Normal arithmetic operators should have one space before and after them, for example:
>
>

6. Add one space around most operators.

ex:

 slope = (y0 - y1) / (x0 - x1)
Changed:
<
<
There are many exceptions to this rule. Don't put spaces around -> for method invocation or = for keyword use (but do for = for assignment). Don't put extra spaces around ()'s or []'s in any of their uses, but do add an extra space inside {}'s. Examples:
>
>
 tvscl, im, true=1
Added:
>
>
 bin = arr[r[r[i]:r[i + 1] - 1]]
Added:
>
>
 point = { x: 0.0, y: 0.0 }
Changed:
<
<
Don't add extra spaces in order to align values. For example, do: x = 1 y = 2 longer = 3 instead of x = 1 y = 2 longer = 3 7. Use single quotes for strings. Both single and double quoted strings are allowed in IDL. Use only single quoted strings to avoid clashing with the strange octal value notation that uses double quotes,

Statement formatting 7 age = "22 years" is a syntax error because age = "22 defines age to be 22 in octal (18 in decimal). The additional years" in the previous statement is not understood by the IDL parser.

>
>
Also, don't add extra spaces in order to align values.

7. Use single quotes for strings.
 Use double single quotes if you need a single quote. For example,
Added:
>
>
 sign = 'Eat at Joe''s'
Changed:
<
<
8. Don't mix the bitwise operators and, or, and not with the logical operators &&, ||, and ~. Always use and, or, and not for all bitwise operations. For logical operations, either use the bitwise operators or (if using IDL 6.0 or later) use the logical operators &&, ||, and ~ along with the logical_predicate option to compile_opt. 9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers.
>
>
9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers.
 Use 0L not 0l because "l" (lowercase letter el) looks like "1" (integer one). Use '5'o and '5'x, not '5'O and '5'X.
Changed:
<
<
Create constants of the correct type instead of creating a variable of the incorrect type and having IDL convert it. Though IDL will automatically convert it, that adds some overhead and, more importantly, obscures the type of the variable for readers of the code. 10. Use square brackets for array indices.
>
>
10. Use square brackets for array indices.
 Use
Added:
>
>
 compile_opt strictarr
Added:
>
>
 in each routine to prevent issues with IDL confusing arrays and functions calls.
Changed:
<
<
11. Indent continuation lines of routine declarations and calls with the first argument. For example, do: pro mgitopadapthistequal::getProperty, clip=clip, $ nregions=nregions, $ top=top, $ _ref_extra=e 12. Indent continuation lines of assignment statements to the right of the =. For example, self.eyeEccentricity = n_elements(eye_eccentricity) eq 0 $ ? 0.5 $ : eye_eccentricity 13. Indent continuation lines of looping and conditional statements with the condition. For example, if (arg_present(sdev) $ || arg_present(variance) $ || arg_present(skewness) $

Variables 8 || arg_present(kurtosis)) then begin This can often be rewritten more clearly with the use of some variables that hold sections of the full expression. 14. Use labels sparingly for goto and ON_IOERROR statements. Use lowercase short names for labels. Indent labels with surrounding code. Place the label on its own line. For example, on_ioerror, io_problem openr, lun, filename, /get_lun arr = fltarr(100) readu, lun, arr free_lun, lun return, arr io_problem: print, err_string 5. Variables

>
>

5. Variables

 1. Use good variable names.
Changed:
<
<
Think for a while. A thesaurus can be a valuable tool for finding the right name. Shorter names are acceptable if the variable is used only in a small section of code (such as a loop variable). Do use the standard names for common variables: state, pState, event, and tlb.
>
>
 2. Variable names should be in camel case.
Added:
>
>
 Camel case uppercases the first letter of each word in the name except for the first letter.
Changed:
<
<
Uppercase each letter in an abbreviation that appears in a variable name unless it starts the name, i.e.
>
>
Uppercase each letter in an abbreviation that appears in a variable name unless it starts the name:
 noaaWeatherURL.
Changed:
<
<
Prefix a local variable with "my" when it mirrors a parameter, but has possibly been modified with a default value. Prefix the name with "n" for variables that hold counts, "o" for object references, "p" for pointers, "id" for
>
>
Prefix the name with "n" for variables that hold counts, "o" for object references, "p" for pointers, "id" for
 iTools identifiers.
Added:
>
>
 Examples that follow this convention,
Changed:
<
<
myParam
>
>

 nFiles oModel pState idPlot
Added:
>
>
 3. Prefer pointers, objects, and passing local variables over common blocks or system variables.
Added:
>
>
 Occasionally there is a reason to use common blocks or system variables, but you should have a good argument for it.
Added:
>
>
 When using direct graphics, prefer using graphics keywords of the plotting routines over setting system variables directly.

Line: 375 to 331
 When using direct graphics, prefer using graphics keywords of the plotting routines over setting system variables directly.

Deleted:
<
<
Routines 9
 4. Define common blocks and named structures in only one location.
Added:
>
>
 Define the variables in a common block only once in a batch file. Include that file where needed.
Added:
>
>
 map_proj_init_commonblock.pro is an example of this.
Added:
>
>
 Define a named structure using automatic structure definition. For example, define MG_Point in a routine named MG_POINT__DEFINE in a file named mg_point__define.pro.
Changed:
<
<
6. Routines
>
>

6. Routines

 1. For any file containing IDL code, filenames should always be in lower case and use the ".pro" extension.
Changed:
<
<
Lowercase filenames reduce cross-platform issues. IDL will automatically find code that is in files using the ".pro" extension (provided it follows the other conventions listed in below).
>
>
 2. Each file should include only one routine called from outside the file.
Added:
>
>
 Each file should contain only one routine called from outside that file. Add the ".pro" extension to the routine name of the externally called routine to get the filename. For example, the routine MG_LINEAR_FUNCTION should be in a file named mg_linear_function.pro. If there are multiple routines in the file, make sure the
Line: 390 to 350
 Each file should contain only one routine called from outside that file. Add the ".pro" extension to the routine name of the externally called routine to get the filename. For example, the routine MG_LINEAR_FUNCTION should be in a file named mg_linear_function.pro. If there are multiple routines in the file, make sure the
Changed:
<
<
externally called routine is last in the file. Following this rule will insure that IDL automatically finds and compiles all code necessary (provided the files are in the IDL path or current directory). The names of the helper routines in the same file should be prefixed with the entire name of the external routine, such as MG_LINEAR_FUNCTION_HELPER. A prominent exception to this rule is the case of class definition files which should include all the methods of the class, many of which could be called from outside the file. IDL will still find the methods automatically if done following the style rules in the section on object-oriented programming.
>
>
externally called routine is last in the file.
 3. Routine names should be lower case, begin with a short organization prefix, and separate words with underscores.
Added:
>
>
 The prefix indicates the individual or group responsible for the code. It is usually the initials of the individual or orgranization. Limit to two or three letters. Don't use the "IDL", "RSI", "ITT", "cw", "it", or empty prefixes.
Changed:
<
<
For example, here are some names following this style: mg_linear_function mg_itbrowser mg_sample
>
>
 4. Routines should fit on one screen.
Changed:
<
<
It is much easier to understand a routine when it can viewed in its entirety. An exception are routines with case statements where there are many short cases.
>
>
 5. Keywords should always be optional for the caller; positional parameters should generally be required.
Added:
>
>
 Keywords should either be an optional input with a reasonable default value or an extra output (i.e. not the
Changed:
<
<
main purpose of the routine). This allows new users of the routine to focus on the few positional parameters and examine the more numerous keywords as needed when the default values are not appropriate for them.
>
>
main purpose of the routine).
 6. Keyword names should be lowercase and separate words with underscores.

Deleted:
<
<
Object-oriented programming 10
 For example,
Added:
>
>

 filename ntests eye_separation left_image
Added:
>
>
 7. Always use the full keyword name when calling the routine.
Changed:
<
<
The same abbreviations which are so handy when typing at the commandline become quite cryptic when written in a file and examined years later. They may even be ambiguous if new versions of the code they call have been released (with more keywords) in the meantime. Using the full name prevents ambiguity and increases the readability.
>
>
 8. If the purpose of a routine is to return a value, use a function, otherwise use a procedure.
Changed:
<
<
If the main purpose of the routine is to perform some action (besides a query), but incidentally needs to return a value use a procedure with an output keyword. In general, use a function when it would be useful to chain together multiple calls in one expression. Avoid the C-style status as the function return value.
>
>
 9. Status and error codes should be returned via keyword.
Changed:
<
<
Often this means that a function needs to return a null or impossible value if an error occurs during execution. For example, WHERE returns -1 when there are no matching elements of the given array. 10. Setup firewalls for error handling as appropriate to the application. Data that crosses a firewall should be checked carefully for correctness. There should always be a firewall around the entire program for data coming in (from files, network, or user). Other firewalls should be added as appropriate to the application: some may require a firewall around each routine, others between "packages", and others may require no other firewalls besides the outside wall. Use on_error, 2 in simple, short routines when you become confident that the only errors occurring in the routine are from bad inputs. 7. Object-oriented programming In addition to the other rules, there are a few extra guidelines for writing object-oriented code.
>
>

7. Object-oriented programming

 1. Class names should begin with a prefix indicating organization and a code indicating the class' area of use. Each word should be capitalized
Added:
>
>
 Use the same prefix as given to normal routine names; avoid "IDL", "ITT", "RSI", and the empty prefix.
Added:
>
>
 Codes already in use by IDL: an (analysis), com (COM), db (database), ex (example), ff (file format), gr (graphics), it (iTools), sys (system), net (network), and _ (general use). Make use of the existing codes and make up new ones as necessary.
Line: 452 to 393
 (graphics), it (iTools), sys (system), net (network), and _ (general use). Make use of the existing codes and make up new ones as necessary.

Deleted:
<
<
Object-oriented programming 11 The examples, MGgrWindow3D MGffTemplate MGutTestCase use the codes gr and ff already in use by IDL, but creates a new code ut (for unit testing) because none is provided.
 Use all caps for abbreviations in class names, as in IDLnetURL.
Added:
>
>
 2. Put all the methods and the routine defining the instance variables for a class into a single file.
Added:
>
>
 For the definition of MGexClass, the file should be named mgexclass__define.pro. The last routine in this file should be MGEXCLASS__DEFINE and should define the instance variables for the class (i.e. create a named structure with name MGexClass).
Line: 465 to 400
 For the definition of MGexClass, the file should be named mgexclass__define.pro. The last routine in this file should be MGEXCLASS__DEFINE and should define the instance variables for the class (i.e. create a named structure with name MGexClass).
Added:
>
>
 Define only one structure/class name in the __DEFINE routine.
Added:
>
>
 3. Method names should be a verb phrase in camel case.
Added:
>
>
 For example, here are some method names following these conventions:
Added:
>
>

 getProperty setProperty add findTestNames runTest reportTestResult
Added:
>
>
 Use the conventions that are used by the IDL library classes. For example, use the GETPROPERTY and SETPROPERTY scheme of procedures to handle getting and setting properties of a class.
Added:
>
>
 4. Begin "protected" methods' names with a underscore.
Added:
>
>
 For example,
Added:
>
>
 MGexSomeClass::_helperMethod
Added:
>
>
 is a helper method called by other methods in MGexSomeClass, but should not be called from outside of MGexSomeClass.
Changed:
<
<
Because IDL has no mechanism for limiting who can call a method, the underscore merely indicates that only that class and its subclasses should call that method. This gives a visual cue to the caller without enforcing the protection. Outside callers can still call this method, but at least they have been warned.
>
>
 5. Beware of multiple inheritance.
Added:
>
>
 Use multiple inheritance as a last resort. Prefer delegation for one of the parent classes i.e. make the new class contain the secondary parent class as an instance variable.
Deleted:
<
<
Reference Listed below are some references that provided inspiration for the rules included in this style guide. [Custom99] Custom Visuals. “IDL Style Guide”. www.customvisuals.com/IDL_Style.html. 1999.

Object-oriented programming 12 [Fanning03] David Fanning. Coyote's Guide to IDL Programming. www.dfanning.com. “IDL Style Guide”. 2003. [ITTVIS07] ITT Visual Information Solutions. www.ittvis.com. “One Proposal for an IDL Coding Standard”. Tech Tip 4120. 2007. [KernPlauger78] Brian W. Kernighan and P. J. Plauger. The Elements of Programming Style. 2nd edition. 1978. [McConnell04] Steve McConnell. Code Complete. 2nd edition. 2004. [Rossum01] Python Enhancement Proposals. www.python.org/dev/peps. Guido van Rossum and Barry Warsaw. “Python PEP-8: Style Guide for Python”. 2001.

 

Revision 262010-11-09 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 97 to 97
 

IDL

Changed:
<
<

IdlDoc : générateur de documentation pour IDL

>
>

Conseils pour bien documenter son code

  • Voir conseils généraux (Michael Galloy) "A style guide" : styleguide.pdf

Je livre ici une synthèse des conseils de Michael Galloy pour bien documenter un code IDL (Lire "A style guide" pour la version complète avec justifications) :

1. General principles

1. Code is for humans.

2. Do not mix styles.

3. Avoid redundancy.

4. Use an easy to maintain style.

2. Layout

1. Layout should enhance the logical structure of the code.

2. Use two spaces (not tabs) per indentation level.

3. Use a maximum line length of 79 characters.

4. Write code in paragraphs.

Example:

function mg_sample, nValues, nIndices, seed=seed 
  compile_opt strictarr 

  ; get random nIndices by finding the indices of the smallest 
  ; nIndices in an array of random values 
  values = randomu(seed, nValues) 

  ; our random values are uniformly distributed, so ideally 
  ; the nIndices smallest values are in the first bin of the 
  ; below histogram 
  nBins = nValues / nIndices 
  h = histogram(values, nbins=nBins, reverse_indices=ri)

  ; the candidates for being in the first nIndices will live in 
  ; bins 0..bin 
  nCandidates = 0L 
  for bin = 0L, nBins - 1L do begin 
    nCandidates += h[bin] 
    if (nCandidates ge nIndices) then break 
  endfor 

  ; get the candidates and sort them 
  candidates = ri[ri[0] : ri[bin + 1L] - 1L] 
  sortedCandidates = sort(values[candidates]) 

  ; return the first nIndices of them 
  return, (candidates[sortedCandidates])[0:nIndices-1L] 
end 

5. Insert two blank lines between routines.

One blank line separates "paragraphs"; two blank lines separate "sections."

3. Comments

1. Document intent.

2. Keep comments up to date with the code.

3. For a short comment, use a phrase with lowercase first letter and no period. For longer comments, use all normal grammar rules.

5. Write a complete header for each routine.

Use comments between ;+ and ;- before the routine. Document the purpose of the routine, the return value (if a function), and side effects of the routine (which you should strive to eliminate). Each parameter should be documented with whether it is an input and/or output, optional or required, data type expected, default value (if any) and a description of its purpose.

For example, the below is an IDLdoc formatted header for the routine listed above:

;+ 
; Get nIndices random indices for an array of size nValues (do 
; not repeat an index). 
;
; :Returns: lonarr(nIndices) 
;
; :Params: 
;     nValues : in, required, type=long 
;          size of array to choose indices from 
;     nIndices : in, required, type=long 
;         number of indices needed 
;
; :Keywords: 
;     seed : in, out, optional, type=long or lonarr(36) 
;         seed to use for random number generation, a new seed 
;         will be output 
;- 
function mg_sample, nValues, nIndices, seed=seed 

6. Indent a comment along with the code it's documenting.

7. Document paragraph by paragraph.

Each paragraph of code may need a comment to document its purpose, but inside a paragraph use only end-of-line comments to comment particular lines. It can be helpful to write the comments first, providing an outline of the code to write.

ex of end-of-line comment :

if (event.type eq 2) then begin ; type 2 = motion events

9. Don't repeat the code in the comments.

Don't document the obvious.

10. Don't add extra comments for convoluted code; improve the code.

Don't document bad code—rewrite it. (Kernighan and Plauger, The Elements of Programming Style)

4. Statement formatting

1. Use lowercase for reserved words, operators, and compile_opt option names. For example, use: compile_opt strictarr if (not done) then readf, lun, line 2. Use only one statement per line. Multiple commands can be entered on one line using the & to separate them. This can be useful on the command line, but don't use it for code in files: routines, batch files, or main-level programs. For example, don't write: a = 1 & b = 2 3. Prefer begin/end blocks unless the entire statements fits on one line. For example, for a single short statement in a compound statement, use: for i = 0, 10 do print, i For a multiple statement block, write: for i = 0, 10 do begin j = i^2 print, j endfor For a single, long statement, use: for i = 0, 10 do begin print, i, format='("The index is ", I0, ".")' end But never write: for i = 0, 10 do $ print, i, format='("The index is ", I0, ".")' The same holds for each case of a case or switch statement:

Statement formatting 6 case uname of 'tlb': resize_widget, event.x, event.y 'draw': begin if (event.type ne 2) then return ; type 2 = motion events (*pstate).x = event.x (*pstate).y = event.y end else: endcase 4. Use specific end statements for the ending a block: endif, endwhile, endrep, endcase, and endswitch. Using the appropriate end statement lets the IDL compiler help catch structural errors in the code. There are no specific end statements for each case of a case or switch statement or the end of a routine or mainlevel program, so just use end. 5. Define structures one field per line unless the entire definition can fit on one line. For example, use: point = { x: 0.0, y:0.0 } state = { x: 0.0, $ y: 0.0, $ pdata: ptr_new(), $ ; image data drawId: 0L $ ; window identifier } Defining each field on its own line allows for individual fields to be found more easily and to be documented on the same line they are defined on. 6. Add one space around most operators. Normal arithmetic operators should have one space before and after them, for example: slope = (y0 - y1) / (x0 - x1) There are many exceptions to this rule. Don't put spaces around -> for method invocation or = for keyword use (but do for = for assignment). Don't put extra spaces around ()'s or []'s in any of their uses, but do add an extra space inside {}'s. Examples: tvscl, im, true=1 bin = arr[r[r[i]:r[i + 1] - 1]] point = { x: 0.0, y: 0.0 } Don't add extra spaces in order to align values. For example, do: x = 1 y = 2 longer = 3 instead of x = 1 y = 2 longer = 3 7. Use single quotes for strings. Both single and double quoted strings are allowed in IDL. Use only single quoted strings to avoid clashing with the strange octal value notation that uses double quotes,

Statement formatting 7 age = "22 years" is a syntax error because age = "22 defines age to be 22 in octal (18 in decimal). The additional years" in the previous statement is not understood by the IDL parser. Use double single quotes if you need a single quote. For example, sign = 'Eat at Joe''s' 8. Don't mix the bitwise operators and, or, and not with the logical operators &&, ||, and ~. Always use and, or, and not for all bitwise operations. For logical operations, either use the bitwise operators or (if using IDL 6.0 or later) use the logical operators &&, ||, and ~ along with the logical_predicate option to compile_opt. 9. Use capital letters to indicate the type of constant, use lowercase to indicate base of integers. Use 0L not 0l because "l" (lowercase letter el) looks like "1" (integer one). Use '5'o and '5'x, not '5'O and '5'X. Create constants of the correct type instead of creating a variable of the incorrect type and having IDL convert it. Though IDL will automatically convert it, that adds some overhead and, more importantly, obscures the type of the variable for readers of the code. 10. Use square brackets for array indices. Use compile_opt strictarr in each routine to prevent issues with IDL confusing arrays and functions calls. 11. Indent continuation lines of routine declarations and calls with the first argument. For example, do: pro mgitopadapthistequal::getProperty, clip=clip, $ nregions=nregions, $ top=top, $ _ref_extra=e 12. Indent continuation lines of assignment statements to the right of the =. For example, self.eyeEccentricity = n_elements(eye_eccentricity) eq 0 $ ? 0.5 $ : eye_eccentricity 13. Indent continuation lines of looping and conditional statements with the condition. For example, if (arg_present(sdev) $ || arg_present(variance) $ || arg_present(skewness) $

Variables 8 || arg_present(kurtosis)) then begin This can often be rewritten more clearly with the use of some variables that hold sections of the full expression. 14. Use labels sparingly for goto and ON_IOERROR statements. Use lowercase short names for labels. Indent labels with surrounding code. Place the label on its own line. For example, on_ioerror, io_problem openr, lun, filename, /get_lun arr = fltarr(100) readu, lun, arr free_lun, lun return, arr io_problem: print, err_string 5. Variables 1. Use good variable names. Think for a while. A thesaurus can be a valuable tool for finding the right name. Shorter names are acceptable if the variable is used only in a small section of code (such as a loop variable). Do use the standard names for common variables: state, pState, event, and tlb. 2. Variable names should be in camel case. Camel case uppercases the first letter of each word in the name except for the first letter. Uppercase each letter in an abbreviation that appears in a variable name unless it starts the name, i.e. noaaWeatherURL. Prefix a local variable with "my" when it mirrors a parameter, but has possibly been modified with a default value. Prefix the name with "n" for variables that hold counts, "o" for object references, "p" for pointers, "id" for iTools identifiers. Examples that follow this convention, myParam nFiles oModel pState idPlot 3. Prefer pointers, objects, and passing local variables over common blocks or system variables. Occasionally there is a reason to use common blocks or system variables, but you should have a good argument for it. When using direct graphics, prefer using graphics keywords of the plotting routines over setting system variables directly.

Routines 9 4. Define common blocks and named structures in only one location. Define the variables in a common block only once in a batch file. Include that file where needed. map_proj_init_commonblock.pro is an example of this. Define a named structure using automatic structure definition. For example, define MG_Point in a routine named MG_POINT__DEFINE in a file named mg_point__define.pro. 6. Routines 1. For any file containing IDL code, filenames should always be in lower case and use the ".pro" extension. Lowercase filenames reduce cross-platform issues. IDL will automatically find code that is in files using the ".pro" extension (provided it follows the other conventions listed in below). 2. Each file should include only one routine called from outside the file. Each file should contain only one routine called from outside that file. Add the ".pro" extension to the routine name of the externally called routine to get the filename. For example, the routine MG_LINEAR_FUNCTION should be in a file named mg_linear_function.pro. If there are multiple routines in the file, make sure the externally called routine is last in the file. Following this rule will insure that IDL automatically finds and compiles all code necessary (provided the files are in the IDL path or current directory). The names of the helper routines in the same file should be prefixed with the entire name of the external routine, such as MG_LINEAR_FUNCTION_HELPER. A prominent exception to this rule is the case of class definition files which should include all the methods of the class, many of which could be called from outside the file. IDL will still find the methods automatically if done following the style rules in the section on object-oriented programming. 3. Routine names should be lower case, begin with a short organization prefix, and separate words with underscores. The prefix indicates the individual or group responsible for the code. It is usually the initials of the individual or orgranization. Limit to two or three letters. Don't use the "IDL", "RSI", "ITT", "cw", "it", or empty prefixes. For example, here are some names following this style: mg_linear_function mg_itbrowser mg_sample 4. Routines should fit on one screen. It is much easier to understand a routine when it can viewed in its entirety. An exception are routines with case statements where there are many short cases. 5. Keywords should always be optional for the caller; positional parameters should generally be required. Keywords should either be an optional input with a reasonable default value or an extra output (i.e. not the main purpose of the routine). This allows new users of the routine to focus on the few positional parameters and examine the more numerous keywords as needed when the default values are not appropriate for them. 6. Keyword names should be lowercase and separate words with underscores.

Object-oriented programming 10 For example, filename ntests eye_separation left_image 7. Always use the full keyword name when calling the routine. The same abbreviations which are so handy when typing at the commandline become quite cryptic when written in a file and examined years later. They may even be ambiguous if new versions of the code they call have been released (with more keywords) in the meantime. Using the full name prevents ambiguity and increases the readability. 8. If the purpose of a routine is to return a value, use a function, otherwise use a procedure. If the main purpose of the routine is to perform some action (besides a query), but incidentally needs to return a value use a procedure with an output keyword. In general, use a function when it would be useful to chain together multiple calls in one expression. Avoid the C-style status as the function return value. 9. Status and error codes should be returned via keyword. Often this means that a function needs to return a null or impossible value if an error occurs during execution. For example, WHERE returns -1 when there are no matching elements of the given array. 10. Setup firewalls for error handling as appropriate to the application. Data that crosses a firewall should be checked carefully for correctness. There should always be a firewall around the entire program for data coming in (from files, network, or user). Other firewalls should be added as appropriate to the application: some may require a firewall around each routine, others between "packages", and others may require no other firewalls besides the outside wall. Use on_error, 2 in simple, short routines when you become confident that the only errors occurring in the routine are from bad inputs. 7. Object-oriented programming In addition to the other rules, there are a few extra guidelines for writing object-oriented code. 1. Class names should begin with a prefix indicating organization and a code indicating the class' area of use. Each word should be capitalized Use the same prefix as given to normal routine names; avoid "IDL", "ITT", "RSI", and the empty prefix. Codes already in use by IDL: an (analysis), com (COM), db (database), ex (example), ff (file format), gr (graphics), it (iTools), sys (system), net (network), and _ (general use). Make use of the existing codes and make up new ones as necessary.

Object-oriented programming 11 The examples, MGgrWindow3D MGffTemplate MGutTestCase use the codes gr and ff already in use by IDL, but creates a new code ut (for unit testing) because none is provided. Use all caps for abbreviations in class names, as in IDLnetURL. 2. Put all the methods and the routine defining the instance variables for a class into a single file. For the definition of MGexClass, the file should be named mgexclass__define.pro. The last routine in this file should be MGEXCLASS__DEFINE and should define the instance variables for the class (i.e. create a named structure with name MGexClass). Define only one structure/class name in the __DEFINE routine. 3. Method names should be a verb phrase in camel case. For example, here are some method names following these conventions: getProperty setProperty add findTestNames runTest reportTestResult Use the conventions that are used by the IDL library classes. For example, use the GETPROPERTY and SETPROPERTY scheme of procedures to handle getting and setting properties of a class. 4. Begin "protected" methods' names with a underscore. For example, MGexSomeClass::_helperMethod is a helper method called by other methods in MGexSomeClass, but should not be called from outside of MGexSomeClass. Because IDL has no mechanism for limiting who can call a method, the underscore merely indicates that only that class and its subclasses should call that method. This gives a visual cue to the caller without enforcing the protection. Outside callers can still call this method, but at least they have been warned. 5. Beware of multiple inheritance. Use multiple inheritance as a last resort. Prefer delegation for one of the parent classes i.e. make the new class contain the secondary parent class as an instance variable. Reference Listed below are some references that provided inspiration for the rules included in this style guide. [Custom99] Custom Visuals. “IDL Style Guide”. www.customvisuals.com/IDL_Style.html. 1999.

Object-oriented programming 12 [Fanning03] David Fanning. Coyote's Guide to IDL Programming. www.dfanning.com. “IDL Style Guide”. 2003. [ITTVIS07] ITT Visual Information Solutions. www.ittvis.com. “One Proposal for an IDL Coding Standard”. Tech Tip 4120. 2007. [KernPlauger78] Brian W. Kernighan and P. J. Plauger. The Elements of Programming Style. 2nd edition. 1978. [McConnell04] Steve McConnell. Code Complete. 2nd edition. 2004. [Rossum01] Python Enhancement Proposals. www.python.org/dev/peps. Guido van Rossum and Barry Warsaw. “Python PEP-8: Style Guide for Python”. 2001.

IdlDoc : générateur de documentation pour IDL

  home: http://idldoc.idldev.com/
Line: 639 to 1061
 

-- EtiennePallier - 25 Dec 2009

Added:
>
>

META FILEATTACHMENT attachment="styleguide.pdf" attr="" comment="" date="1289338057" name="styleguide.pdf" path="styleguide.pdf" size="58705" stream="styleguide.pdf" user="Main.EtiennePallier" version="1"
META FILEATTACHMENT attachment="idldoc-tutorial.pdf" attr="" comment="" date="1289338074" name="idldoc-tutorial.pdf" path="idldoc-tutorial.pdf" size="112376" stream="idldoc-tutorial.pdf" user="Main.EtiennePallier" version="1"
META FILEATTACHMENT attachment="idldoc-reference.pdf" attr="" comment="" date="1289338100" name="idldoc-reference.pdf" path="idldoc-reference.pdf" size="122915" stream="idldoc-reference.pdf" user="Main.EtiennePallier" version="1"

Revision 252010-11-05 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 97 to 97
 

IDL

Added:
>
>

IdlDoc : générateur de documentation pour IDL

home: http://idldoc.idldev.com/

download: http://idldoc.idldev.com/wiki/Downloads

tutoriel: http://idldoc.idldev.com/wiki/GettingStarted

Installation: (NB: sur hyperion, c'est déjà installé sous /usr/local/itt/idldoc/idldoc)

1) Download

2) Copier et dézipper dans un dossier de mon choix (ex : D:/idldoc/idldoc-3.3)

3) Ajouter le chemin vers idldoc dans le IDL_PATH (Fenêtre/Preferences/IDL/Chemins/Insérer (puis Appliquer)

Utilisation:

Pour générer la doc avec idldoc :

IDL> idldoc, root='C:\Users\Etienne\IDLWorkspace80\monprojet\trunk\src', output='C:\Users\Etienne\IDLWorkspace80\monprojet\trunk\doc'

Puis, 2clic sur index.html

 

Enregistrer une image dans un fichier


Revision 242010-08-19 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 114 to 114
 
Added:
>
>

PHP

Afficher un bloc de code html dans php (ou tout autre texte long) :

http://forum.webrankinfo.com/petite-astuce-pour-afficher-simplement-code-html-t32812.html

 

LINUX

Line: 294 to 302
  /var/log
Added:
>
>
auth.log ou secure (sur Redhat)

Outil de visualisation graphique des logs : gnome-system-log

logrotate
 /etc/logrotate.conf

/etc/logrotate.d/

Line: 304 to 318
  ==> new file "messages", "messages" devient "messages1", "messages1" devient "messages2"...
Added:
>
>
logwatch

by default, runs daily on yesterday's logs (/etc/cron.daily/0logwatch qui pointe sur /usr/share/logwatch/scripts/logwatch.pl), includes all services, and sends a mail to root

Configuration locale :

  • Générale : /usr/share/logwatch/default.conf/logwatch.conf
  • Locale : /etc/logwatch/conf/logwatch.conf

Exemples :

info sur l'activité sshd d'aujourd'hui :

logwatch --service sshd --range=Today

Plus de détails :

logwatch --service sshd --range=Today --detail=Medium (ou High)

Pour créer un fichier au lieu d'un mail : --save=logwatch.today

Bonne config de logwatch.conf :

Range=All (au lieu de "Yesterday") Detail=High Archives=Yes (ajoute les logs des semaines précédentes, pas seulement le log en cours)

Equivalent commande : --range=All --archives

Exemple de config sur planetoweb (aug 2010) :

Création d'une config locale /etc/logwatch/conf/logwatch.conf :

Range = All
Detail = High
Archives = Yes
Output = html
Save = /var/www/html/servers/planetoweb/logwatch.html

Résultat sur http://planetoweb/servers/planetoweb/logwatch.html

swatch

http://www.linux-mag.com/id/7807

yum install swatch

[root@planetoweb planetoweb]# rpm -ql swatch
/usr/bin/swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Threshold.pm
/usr/lib/perl5/vendor_perl/5.8.8/Swatch/Throttle.pm
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions
/usr/lib/perl5/vendor_perl/5.8.8/auto/Swatch/Actions/autosplit.ix
/usr/share/doc/swatch-3.2.1
/usr/share/doc/swatch-3.2.1/CHANGES
/usr/share/doc/swatch-3.2.1/COPYING
/usr/share/doc/swatch-3.2.1/COPYRIGHT
/usr/share/doc/swatch-3.2.1/KNOWN_BUGS
/usr/share/doc/swatch-3.2.1/README
/usr/share/doc/swatch-3.2.1/examples
/usr/share/doc/swatch-3.2.1/examples/SendMail.pm
/usr/share/doc/swatch-3.2.1/tools
/usr/share/doc/swatch-3.2.1/tools/reswatch
/usr/share/doc/swatch-3.2.1/tools/swatch_oldrc2newrc
/usr/share/man/man1/swatch.1.gz
/usr/share/man/man3/Swatch::Actions.3pm.gz
/usr/share/man/man3/Swatch::Threshold.3pm.gz
/usr/share/man/man3/Swatch::Throttle.3pm.gz

/usr/share/doc/swatch

Créer un startup script : vi /etc/init.d/swatch

#!/bin/sh
# Simple Log Watcher Program

case "$1" in
'start')
		/usr/bin/swatch --daemon --config-file=/etc/swatch.conf --tail-file=/var/log/auth.log --pid-file=/var/run/swatch.pid
		;;
'stop')
		PID=`cat /var/run/swatch.pid`
		kill $PID
		;;
*)
		echo "Usage: $0 { start | stop }"
		;;
esac
exit 0

chmod 755 /etc/init.d/swatch

Make sure swatch starts automatically at my runlevels :

# ln -s /etc/init.d/swatch /etc/rc2.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc3.d/S99swatch
# ln -s /etc/init.d/swatch /etc/rc5.d/S99swatch

Créer un fichier de conf /etc/swatch.conf :

watchfor /invalid|repeated|incomplete/
         echo
	 write khess
	 mail addresses=khess@localhost, subject=Authentication Problems

/etc/init.d/swatch start ==> créer un pid dans /var/run/swatch.pid et un fichier /root/.swatch_script.xxxx (avec xxxx = pid - 2)

 

SSH, config plus stricte

Revision 232010-08-19 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 288 to 290
 

Niveau Administrateur

Added:
>
>

LOGS

/var/log

/etc/logrotate.conf

/etc/logrotate.d/

Forcer une rotation :

sudo logrotate -f /etc/logrotate.conf

==> new file "messages", "messages" devient "messages1", "messages1" devient "messages2"...

 

SSH, config plus stricte


Revision 222010-08-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 288 to 288
 

Niveau Administrateur

Added:
>
>

SSH, config plus stricte

vi /etc/ssh/sshd_config

Port 22 : on pourrait mettre ici un autre port, genre 2010, histoire de brouiller les pirates...

PermitRootLogin? no

LoginGraceTime? 2m 
changed to : 
LoginGraceTime? 30

/etc/init.d/sshd restart 
 

Surveiller un serveur

last reboot

Revision 212010-07-29 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 296 to 296
  dmesg
Added:
>
>
lspci
 /var/log/messages

/var/log/boot.log

Revision 202010-07-27 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 288 to 288
 

Niveau Administrateur

Added:
>
>

Surveiller un serveur

last reboot

lastlog

dmesg

/var/log/messages

/var/log/boot.log

Voir aussi section suivante (test des disques)

Tester les disques durs

Occupation disques : df -h

[root@hyperion home]# df -h
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/sda3             178G   63G  106G  38% /
/dev/sdb1             2,7T  1,4T  1,3T  52% /data
/dev/sda1              99M   29M   65M  31% /boot
tmpfs                  24G  4,0K   24G   1% /dev/shm

cat /proc/partitions

cat /etc/mtab

cat /proc/mounts (equivalent de la commande "mount")

cat /proc/scsi/scsi

Voir aussi si messages d'erreur disques dans /var/log/messsages

Tester aussi la commande dmesg (equivalent à /var/log/dmesg)

 

Yum

Annuler l'information sur les updates disponibles :

Revision 192010-07-01 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 173 to 173
 

FIND

Added:
>
>
Supprimer tous les répertoires CVS/ dans toute une arborescence (à partir du répertoire courant) :

find . -name "CVS" -exec \rm -r {} \; > /dev/null 2>&1

  Combien de fichiers dans un répertoire (y-compris les sous-rep) :

Revision 182010-06-17 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 154 to 154
  Sauvegarder (de façon incrémentielle) des répertoires du poste A vers le poste B :
Added:
>
>
1) Depuis A...
 A#> rsync -avz /rep/rep1 /rep/rep2 B:/rep/

option -v = verbose

Line: 164 to 166
  /rep/rep1/ écrit directement le contenu du répertoire rep1 sur B
Added:
>
>
2) ... ou Depuis B

rsync -avz A:/rep/rep1 A:/rep/rep2 ./rep

 

FIND

Revision 172010-06-02 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 118 to 118
 

Niveau Utilisateur

Added:
>
>

SED (substitution de texte)

Pleins d'exemples ici : http://sed.sourceforge.net/sed1line_fr.html

  • remplacer tutu par toto, mais seulement des lignes 3 à 6 :

cat monfichier.txt | sed -e 3,6"s/tutu/toto/" >| monfichiertemp.txt

  • remplacer tutu par toto, mais seulement entre les lignes "titi" et "toto" :

/titi/,/toto/s/tutu/toto/

ou encore :

sed -e "/$debut/,/$fin/"'s#HostId="t3://.*\n#HostId="t3://'"$WLS_ADM_HOST:$PORT\"/" < "$file1" > "$file2"

 

GREP (recherche textuelle)

Afficher uniquement les lignes de commentaire:

Revision 162010-06-01 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 93 to 93
 
Added:
>
>

IDL

Enregistrer une image dans un fichier

; envoi vers fichier postscript
set_plot, 'ps'

; éventuellement donner un nom
device, filename='toto.ps'

plot, findgen(2)

; retour à l'affichage sur écran
device, /close
set_plot, 'x'
 

LINUX

Revision 152010-04-26 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 99 to 99
 

Niveau Utilisateur

Added:
>
>

GREP (recherche textuelle)

Afficher uniquement les lignes de commentaire:

egrep '^#' fichier

Ne pas afficher les lignes de commentaire:

egrep -v '^#' fichier

N'afficher que les lignes utiles (tout sauf commentaires et lignes vides) :

egrep -v '^(#|$)' fichier

 

RSYNC

Sauvegarder (de façon incrémentielle) des répertoires du poste A vers le poste B :

Revision 142010-04-07 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 242 to 242
  Keep in mind that you will no longer be informed that there updates available and as such you will need to check periodically with yum check-update
Added:
>
>
Quels sont les packages commençant par "mesa-" installés + à installer ? --> yum list mesa-*
 

Samba

Revision 132010-04-02 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 228 to 228
 

Niveau Administrateur

Added:
>
>

Yum

Annuler l'information sur les updates disponibles :

/etc/init.d/yum-updatesd stop

su -c 'chkconfig --level 2345 yum-updatesd off'

Every other workaround seems to only kill yum-updatesd for runlevel 5.

Try yum update after that.

Keep in mind that you will no longer be informed that there updates available and as such you will need to check periodically with yum check-update

 

Samba

Revision 122010-03-16 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 99 to 99
 

Niveau Utilisateur

Added:
>
>

RSYNC

Sauvegarder (de façon incrémentielle) des répertoires du poste A vers le poste B :

A#> rsync -avz /rep/rep1 /rep/rep2 B:/rep/

option -v = verbose

attention aux slashes '/' :

/rep/rep1 écrit un répertoire rep1 sur B

/rep/rep1/ écrit directement le contenu du répertoire rep1 sur B

 

FIND

Revision 112010-03-09 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 101 to 101
 

FIND

Added:
>
>
Combien de fichiers dans un répertoire (y-compris les sous-rep) :

find rep | wc -l

 Affecter des droits spécifiques à certains éléments d'un répertoire (tout le contenu, y-compris sous-dossiers) :

dossiers:

Revision 102010-03-08 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 98 to 98
 

Niveau Utilisateur

Added:
>
>

FIND

Affecter des droits spécifiques à certains éléments d'un répertoire (tout le contenu, y-compris sous-dossiers) :

dossiers:

find /home/jsmith/awstats/ -type d | xargs chmod 0755

fichiers:

find /home/jsmith/awstats/ -type f | xargs chmod 0644

fichiers perl:

find /home/jsmith/awstats/ -type f -name *.pl | xargs chmod 0755

 

Forwarder les mails du serveur

Par exemple, je veux forwarder mes mails de pallier@planetoweb.cesr.fr vers ma boite cesr ou encore ma boite perso :

Revision 92010-01-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 203 to 203
  clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"
Added:
>
>
Corriger un bug sur Mac Leopard (pas sur Tiger) : samba ne suit pas les liens qui vont vers un disque différent

Pour corriger ce bug, il suffit d'ajouter cette ligne dans la partie "[global]" du smb.conf :

unix extensions = no

 

Revision 82010-01-12 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Cette page donne des réponses à diverses questions informatique

Changed:
<
<
Voir aussi ComputerScience
>
>
Voir aussi ComputerScience
 
Line: 12 to 12
 

WIKI

Changed:
<
<
Tutoriel : TWikiTutorial
>
>
Voir aussi InformationAboutThisTwiki
 
Added:
>
>
Tutoriel : TWikiTutorial
 
Changed:
<
<

Modifier le style d'affichage

>
>

Niveau Utilisateur

 
Changed:
<
<
S'assurer de bien utiliser le skin "pattern" :
>
>

Créer un raccourci vers une icône :

 
Changed:
<
<
Dans, Main/TWikiPreferences (ou bien dans Main/WebPreferences si on ne veut affecter qu'un seul web, et pas tout le twiki), vérifier qu'on a bien une ligne contenant :
>
>
Par exemple, créer todo.gif comme raccourci de l'icône TODO :
 
Added:
>
>
Editer TWikiPreferences
 

Changed:
<
<
*Set SKIN = pattern
>
>
* Set TD = todo.gif * Set DO = DONE
 
Deleted:
<
<
On peut alors modifier le style du PatternSkin, dans twiki/pub/TWiki/PatternSkin :
 
Changed:
<
<
  • Par exemple, pour modifier l'indentation des titres (h1,h2,...), ajouter ces lignes à la fin de style.css :
>
>

Commentaire

 

Added:
>
>
Html comment =
<-- comment -->
Twiki comment = # comment
 
Changed:
<
<
h2 { /*margin: top, right, bott, left*/ margin-left:0px; font-size:150%; font-weight:normal; } h3 { margin-left:30px; font-weight:normal; } h4 { margin-left:45px; font-weight:normal; } h5 { margin-left:60px; font-weight:normal; } h6 { margin-left:75px; font-weight:normal; }
>
>

Voir ce qui change sur le site

 
Changed:
<
<
/* ---------------------------------------------------------------------- */
>
>
Pour savoir ce qui a changé (en ordre chronologique) sur le web Team, consulter cette page : WebChanges
 
Changed:
<
<
>
>
Changements survenus sur le web "twiki" : WebChanges
 
Changed:
<
<
  • Pour modifier la couleur des titres, ajouter ces lignes à la fin de colors.css (ici les titres h2 sont en bleu sur fond jaune) :
>
>
on peut aussi s'inscrire sur cette page pour recevoir les changements du web Team par email : WebNotify
 
Changed:
<
<
h2 {
        display:block;
        background-color:yellow;
        color:blue;
}
>
>

Contribuer (enrichir le site)

 
Added:
>
>
Vous êtes vivement encouragés à contribuer au contenu de ce site.
 
Added:
>
>
Pour modifier n'importe quelle page du site :
  • cliquez sur bouton "Edit", faites vos modifs, puis cliquez sur le bouton "Save".
  • si vous êtes plus à l'aise avec la souris, cliquez plutot sur le bouton "WYSIWYG"
 
Deleted:
<
<

Récupérer un fichier de la sauvegarde hebdo

Voir l'explication dans la section sauvegarde
 
Added:
>
>

Faire une copie (de sauvegarde) d'un Web (pour consultation offline) :

  • Grace au plugin PublishContrib, on peut obtenir une copie du Web à tout instant (attention, cette copie est READ ONLY, ce n'est plus un wiki, mais juste des pages web).
  • Pour publier la version courante du Web, aller sur le topic PublishWeb, et cliquer sur le bouton "Publish" (en milieu de page). Par défaut, c'est l'option "zip" qui est sélectionnée, ce qui crée un zip du Web.
  • Il suffit maintenant de cliquer en bas de la page générée par la requete, sur le lien "Published To: NomduWeb.zip", pour télécharger ce zip (L'accès à cette adresse est protégé pour que seuls les personnes enregistrées puissent y acceder)
  • Dézipper et cliquer sur la page WebHome.html. Le résultat n'est pas très joli, mais le contenu y est...
  • Un historique de la dernière publication se trouve dans le topic PublishContribHistory (utile pour voir si tout s'est bien passé)
 
Changed:
<
<

Voir ce qui change sur le site

>
>

Mise à jour d'une pièce attachée (remarque) :

 
Changed:
<
<
Pour savoir ce qui a changé (en ordre chronologique), consulter cette page : WebChanges
>
>
Il vaut mieux utiliser des noms de fichier assez génériques (par exemple FDD.pdf au lieu de FF_v1.4.pdf) ainsi on peut mettre à jour un document sans changer son nom et les liens vers ce fichier
 
Changed:
<
<
on peut aussi s'inscrire sur cette page pour recevoir les changements par email : WebNotify
>
>

Insérer une icone:

%Y%
DONE
%TD%
ou
%ICONURL{todo}%
todo.gif
%DO%
ou
%ICONURL{done}%
done.gif
%CL%
ou
%ICONURL{closed}%
closed.gif
Pour en savoir plus: TWikiDocGraphics#Status_flag_LED_tag_icons
 
Changed:
<
<

Contribuer (enrichir le site)

>
>

RACCOURCIS PRATIQUES

 
Changed:
<
<
Vous êtes vivement encouragés à contribuer au contenu de ce site.
>
>
 
Changed:
<
<
Pour modifier n'importe quelle page du site :
  • cliquez sur bouton "Edit", faites vos modifs, puis cliquez sur le bouton "Save".
  • si vous êtes plus à l'aise avec la souris, cliquez plutot sur le bouton "WYSIWYG"
>
>
  • Liste de tous les users twiki enregistrés : UserList

  • Liste plus générale des users twiki : TWikiUsers
 
Changed:
<
<

Accéder au site

>
>

Niveau Administrateur

 
Changed:
<
<
Pour que quelqu'un puisse accéder à ce site, il faut d'abord qu'il s'inscrive (sauf s'il est déjà inscrit sur Chemcam, c'est le même login). Ensuite, il faut ajouter son login dans le groupe autorisé à consulter et modifier ce wiki, c'est à dire TeamGroup.
>
>
Voir aussi InformationAboutThisTwiki
 

Revision 72010-01-08 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 84 to 84
 Ensuite, il faut ajouter son login dans le groupe autorisé à consulter et modifier ce wiki, c'est à dire TeamGroup.
Deleted:
<
<


 

LINUX

Niveau Utilisateur

Added:
>
>

Forwarder les mails du serveur

Par exemple, je veux forwarder mes mails de pallier@planetoweb.cesr.fr vers ma boite cesr ou encore ma boite perso :

cd ~

créer un fichier ".forward" contenant mon adresse cesr ou perso

S'il s'agit de forwarder les mails adressés à root@planetoweb.cesr.fr, on peut utiliser la même solution, mais on peut aussi ajouter cette ligne tout à la fin du fichier /etc/aliases

root: etienne.pallier@cesr.fr

 

Rechercher un fichier (dans une hiérarchie de répertoires)

find . -name filename_searched

Line: 172 to 183
 

Samba

Added:
>
>
Créer un new user "toto" : sbmpasswd -a toto

Mettre à jour le pass de "toto" : smbpasswd toto

Est-ce que samba est à l'écoute ? : service smb status

Redémarrer samba : service smb restart

Depuis le poste client windows :

clic droit sur Poste de Travail / Créer un lecteur réseau / "\\nom_du_serveur\mon_nom"

 

Revision 62010-01-08 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 93 to 93
 

Niveau Utilisateur

Added:
>
>

Rechercher un fichier (dans une hiérarchie de répertoires)

find . -name filename_searched

Rechercher un mot dans un ou plusieurs fichiers

  • rechercher "mot" dans les fichiers idl du répertoire courant

grep "mot" *.pro

  • rechercher "mot" dans tous les fichiers du répertoire courant

grep -i "mot" .

L'option "-i" permet de ne pas tenir compte de la casse

  • rechercher "mot" dans tous les fichiers du répertoire courant ainsi que dans tous les sous-rep (récursif) :

grep -r -i "mot" .

Faire une action sur un ensemble de dossiers et fichiers

Depuis répertoire courant, supprimer tous les dossiers "CVS" (récursivement) :

find . -name CVS -exec rm -rf {} \;

 

Créer un alias

Revision 52010-01-05 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 155 to 155
 

WINDOWS

Added:
>
>

Migrer de Windows XP vers Windows 7

Il faut acheter la licence Microsoft. La démarche dépend de la marque du PC.

Pour un hp : aller sur le site hp et rechercher "windows upgrade"

Modèles éligibles : http://h41112.www4.hp.com/promo/win7web/fr/fr/eligmodels.html

http://welcome.hp.com/country/fr/fr/mda/windows7/upgrade/which_version.html?jumpid=reg_R1002_FRFR

http://h41112.www4.hp.com/promo/win7web/fr/fr/

 

Envoyer des mails avec Outlook quand on n'est pas au CESR

Revision 42010-01-04 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 15 to 15
 Tutoriel : TWikiTutorial
Added:
>
>

Modifier le style d'affichage

S'assurer de bien utiliser le skin "pattern" :

Dans, Main/TWikiPreferences (ou bien dans Main/WebPreferences si on ne veut affecter qu'un seul web, et pas tout le twiki), vérifier qu'on a bien une ligne contenant :

*Set SKIN = pattern

On peut alors modifier le style du PatternSkin, dans twiki/pub/TWiki/PatternSkin :

  • Par exemple, pour modifier l'indentation des titres (h1,h2,...), ajouter ces lignes à la fin de style.css :

h2 {
        /*margin: top, right, bott, left*/
        margin-left:0px;
        font-size:150%; font-weight:normal;
}
h3 { margin-left:30px; font-weight:normal; }
h4 { margin-left:45px; font-weight:normal; }
h5 { margin-left:60px; font-weight:normal; }
h6 { margin-left:75px; font-weight:normal; }

/* ---------------------------------------------------------------------- */

  • Pour modifier la couleur des titres, ajouter ces lignes à la fin de colors.css (ici les titres h2 sont en bleu sur fond jaune) :

h2 {
        display:block;
        background-color:yellow;
        color:blue;
}

 

Récupérer un fichier de la sauvegarde hebdo

Voir l'explication dans la section sauvegarde

Revision 32010-01-04 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Cette page donne des réponses à diverses questions informatique

Added:
>
>
Voir aussi ComputerScience
 
Changed:
<
<

I - Linux

>
>

WIKI

Tutoriel : TWikiTutorial

Récupérer un fichier de la sauvegarde hebdo

Voir l'explication dans la section sauvegarde

Voir ce qui change sur le site

Pour savoir ce qui a changé (en ordre chronologique), consulter cette page : WebChanges

on peut aussi s'inscrire sur cette page pour recevoir les changements par email : WebNotify

Contribuer (enrichir le site)

Vous êtes vivement encouragés à contribuer au contenu de ce site.

Pour modifier n'importe quelle page du site :

  • cliquez sur bouton "Edit", faites vos modifs, puis cliquez sur le bouton "Save".
  • si vous êtes plus à l'aise avec la souris, cliquez plutot sur le bouton "WYSIWYG"

Accéder au site

Pour que quelqu'un puisse accéder à ce site, il faut d'abord qu'il s'inscrive (sauf s'il est déjà inscrit sur Chemcam, c'est le même login). Ensuite, il faut ajouter son login dans le groupe autorisé à consulter et modifier ce wiki, c'est à dire TeamGroup.



LINUX

 

Niveau Utilisateur

Line: 30 to 69
 Ce fichier est automatiquement lu par /etc/profile au démarrage d'une session
Changed:
<
<

Imprimer sous linux

>
>

Imprimer sur linux

  Pour installer l'imprimante "sprinter", voir SprinterPrinter
Line: 41 to 80
 Pour imprimer du texte, on peut utiliser les utilitaires "a2ps" ou "enscript"
Added:
>
>

Visualiser des images (jpeg, ps, ...) en mode console

display

Note : display permet aussi de convertir une image d'un format vers un autre (enregistrer sous...)

Voir aussi "xv" et "gthumb"

Convertir une image d'un format vers un autre

PS to PDF : ps2pdf

Voir aussi l'utilitaire convert

En mode interactif, On peut aussi utiliser display (voir ci-dessus)

 

Niveau Administrateur

Samba

Changed:
<
<

II - Windows

>
>


WINDOWS

Envoyer des mails avec Outlook quand on n'est pas au CESR

1) "Creuser" un tunnel avec Putty

Créer une nouvelle session que vous appelerez par exemple "tunnel_mail_cesr", et qui créera un tunnel entre le port local 9025 et le port SMTP (25) du serveur de mail cesr (fw-in.cesr.fr).

La procédure est décrite sur la faq informatique du cesr : http://www1.cesr.fr/intranet/informatique/faq/ssh-tunnels/ssh.htm#_Toc150503764 (Exemple 1, cas numéro 2)

Il faudra lancer cette session (et la garder ouverte en tâche de fond) avant d'envoyer un mail

2) Configurer votre client mail Outlook

  • Menu Outils/Paramètres du compte
  • Clic sur bouton "Modifier"
  • Dans le champ "Serveur de courrier sortant (SMTP)", remplacer "mailhost.cesr.fr" par "localhost"
  • Clic sur bouton "Paramètres supplémentaires...", clic sur onglet "Options avancées"
  • Dans le champ "Serveur Sortant (SMTP)", remplacer "25" par "9025"

Bien sûr, il faut tout remettre en place quand on revient au cesr (en fait, on pourrait aussi fonctionner en permanence avec le tunnel, même au CESR...)

Synchroniser Outlook 2007 Calendar et Google Calendar

http://content.techrepublic.com.com/2346-10877_11-191016.html

Installer un serveur X sur Windows pour afficher les fenêtres graphiques de linux

On propose d'utiliser Xming qui est un serveur X gratuit pour Windows

Il suffit d'éxécuter Xming avant de lancer une session graphique via putty (ou autre shell)

Installation : http://sourceforge.net/projects/xming

Cliquer sur Download

1) Installer Xming

2) Installer Xming-fonts (surtout nécessaire pour Emacs)

 

-- EtiennePallier - 25 Dec 2009

Revision 22010-01-04 - EtiennePallier

Line: 1 to 1
 

HOWTO INFORMATIQUE

Line: 7 to 7
 
Added:
>
>

I - Linux

 
Deleted:
<
<

Niveau Utilisateur

 
Changed:
<
<

Imprimer sous linux

>
>

Niveau Utilisateur

 
Changed:
<
<

Niveau Administrateur

>
>

Créer un alias

 
Added:
>
>
Exemple : quand on tape "l" ça fera "ls -l"
 
Changed:
<
<

Samba

>
>
alias l="ls -l"

Cette ligne doit être placée dans votre ~/.bashrc

Configurer mon environnement

Pour les configurations perso, les placer dans son ~/.bash_profile (ce script appelle ~/.bashrc qui doit contenir les alias et fonctions)

Mettre les configurations générales dans /etc/profile.d/profile_etienne.sh (elles seront ainsi valables pour TOUS les users du serveur)

Ce fichier est automatiquement lu par /etc/profile au démarrage d'une session

Imprimer sous linux

Pour installer l'imprimante "sprinter", voir SprinterPrinter

Pour faire de cette imprimante l'imprimante par défaut, ajouter cette ligne dans votre ~/.bash_profile :

export PRINTER=sprinter (mettre le nom de votre imprimante à la place de "sprinter")

Pour imprimer du texte, on peut utiliser les utilitaires "a2ps" ou "enscript"

Niveau Administrateur

Samba

II - Windows

 

-- EtiennePallier - 25 Dec 2009

Revision 12009-12-25 - EtiennePallier

Line: 1 to 1
Added:
>
>

HOWTO INFORMATIQUE

Cette page donne des réponses à diverses questions informatique

Niveau Utilisateur

Imprimer sous linux

Niveau Administrateur

Samba

-- EtiennePallier - 25 Dec 2009

 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding PlanetoWiki? Send feedback