This the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Wiki du GRPS

Bienvenue sur le wiki du GRPS!

Ce wiki est destiné aux étudiants de Paul Charbonneau et a pour but de communiquer de l’information d’usage général relativement aux outils de recherche du Groupe, et plus généralement de fournir certains renseignements utiles pour la recherche en simulation numérique. Des ressources, applications et informations sont présentées sur la recherche et les langages de programmation, ainsi plusieurs outils d’ordre plus général. Diverses information concernant plus spécifiquement l’UdeM sont aussi présentes.

La plupart des procédures décrites dans ces pages présument que vous travaillez dans un environnement *nix (linux, macOS).

Cette documentation n’a évidemment pas pour but de décrire de manière exhaustive chaque langage de programmation et chaque application, mais plutôt d’offrir une recension des différentes solutions qui peuvent s’appliquer à un problème donné, et de fournir un point de départ minimal à l’installation et au fonctionnement de ces dernières.

Gestion du contenu

Ce wiki est basé sur le thème Docsy du générateur de sites Hugo, et est hébergé gratuitement sur Netlify. Le code source est maintenu dans un dépôt Github et il est possible de modifier les pages directement à partir des liens dans la barre latérale de droite. Il est également possible de modifier le dépôt localement et de pousser les modifications sur Github, auquel cas Netlify détecte automatiquement les changements et met à jour le site.

Chaque page comporte une en-tête YAML et supporte la syntaxe Markdown. Voir la documentation de Docsy pour plus de détails.

Questions

Pour toute question ou commentaire, vous pouvez contacter Alexandre Champagne.

1 - Recherche

Ressources pour obtenir articles et livres, suivre la nouvelle recherche, gérer références et notes.

1.1 - Articles et livres

Ressources concernant la littérature scientifique.

On présente ici diverses ressources web pour obtenir les livres et articles, et pour évaluer la réputation des revues scientifiques.

Obtenir des articles & livres

Comme ce site est pour l’instant public, seules les ressources légales y sont présentées.

Internet Archive
Accès à plusieurs livres libres de droits

PretNumerique
Accès à plusieurs livres québécois en format électronique

Bibliothèques - UdeM
Accès au site de la bibliothèque de l’UdeM

BAnQ
Accès à plusieurs livres québécois en format électronique

BAnQ numérique
Accès à plusieurs livres québécois en format électronique

Scribd
Gros foutoir de pdf où se retrouvent parfois quelques uns utiles

Évaluer la réputation d’une revue

Ce type de métrique est à prendre avec un grain de sel ; varie en fonction des disciplines, imperfections, etc.

Journal Citation Report
La référence pour comparer différents journaux entre eux.

Journal Citation Report.

1.2 - Veille

Outils pour effectuer la veille de publications.

On présente ci-dessous quelques outils pour se tenir au courant de la sortie de nouveaux articles dans un champ de recherche donné, et des annonces de colloques/conférences, postes disponibles, etc.

ResearchGate

Réseau “social” où on peut suivre des chercheurs individuels, si ceux-ci y ajoutent leurs publications.

Le site ResearchGate est un réseau social où on peut suivre des chercheurs, se créer un profil académique, et y entrer nos publications. Ce ne sont pas tous les chercheurs qui y ont un compte mais le site est néanmoins relativement populaire (du moins, dans mon domaine). Cela dit, ce ne sont pas tous les chercheurs qui y déposent leurs articles, et l’interface n’est pas tellement efficace pour faire une veille de la recherche de manière générale. Solution complémentaire dans mon cas.

ResearchGate.

Feedly

Lecteur RSS qui permet d’être mis à jour en temps réel de la sortie de nouvelles publications (de manière générale, pas seulement scientifiques).

Feedly est une application web qui agit comme aggrégateur/lecteur RSS. Le RSS est un (vieux!) protocole web basé sur le langage XML qui permet d’entrer des sources dans un lecteur, et à chaque fois que notre source publie un nouvel article/blog/etc. notre lecteur affichera une mise à jour. Par exemple, on peut créer une nouvelle entrée dans Feedly pour l’un des fils RSS de la revue Scientific American, et au fur et à mesure que S.A. publie de nouveaux articles, une nouvelle entrée apparaît dans notre lecteur RSS avec un court résumé ainsi qu’un lien vers l’article.

Un lecteur RSS est un moyen extrêmement efficace de passer en revue une grande quantité d’articles sans avoir nécessairement à visiter les pages web individuelles de chaque publication. La grande majorité des revues scientifiques et blogues possèdent des fils RSS auxquels il est possible de souscrire.

Feedly.

Twitter

Ressource parfois utile pour suivre des chercheurs et groupes de recherche précis.

Le réseau social Twitter est particulièrement populaire auprès de la communauté scientifique. Le désavantage, c’est que vous allez autant y voir passer des memes de chats que des publications scientifiques. Cela étant dit, peut être pratique pour découvrir de nouveaux chercheurs, publiciser votre recherche et interagir directement avec les auteurs de publications de manière informelle. Plusieurs autres contenus pertinents y sont publiés également – tutoriels, références à de nouveaux outils, etc.

Listes de courriel

Beaucoup de journaux, groupes ou instituts de recherche offrent des listes de courriel.

Plusieurs université, départements, groupes de recherche et autres regroupements/organismes déploient des listes de diffusions courriel. Utile pour se garder informé des conférences à venir, nouveaux articles publiés, actualités scientifiques et offres d’emploi.

1.3 - Autres sites utiles

Autres ressources.

Ce-dessous on présente les autres ressources qui peuvent être utiles à la recherche.

ORCID

Service d’identification unique.

ORCID est un service qui permet de s’attribuer un identifiant personnel unique (IRCOD iD) pouvant être utilisé pour distinguer plusieurs auteurs homonymes dans des publications scientifiques.

Formations bibliothèques UdeM

Canal youtube des bibliothèques de l’UdeM.

Les bibliothèques de l’UdeM ont un canal youtube qui recense plusieurs enregistrements vidéos des formations offertes par la bibliothèque.

1.4 - Gestion bibliographique

Présentation d’outils de gestion bibliographique.

Il existe une grande variété d’outils de gestion bibliographique – on présente ci-dessous trois des plus populaires.

Zotero

Application multi-plateformes et gratuite de gestion bibliographique.

Zotero est un logiciel de gestion bibliographique Open Source et gratuit qui jouit d’une grande popularité et d’une équipe de développement dynamique. Disponible sur plusieurs plateformes (incluant e.g. iOS), le logiciel est extrêmement fiable et possède toute une panoplie de “plug-ins” développés par la communauté.

Il est également possible de payer pour la synchronisation de notre bibliographie entre appareils, et de stocker les fichiers PDFs sur leur serveur. Une interface web est également disponible.

Plug-ins utiles

  • Better BibTex : permet d’exporter des références sous format BibTex pour utilisation avec LaTeX
  • PubPeer : permet de voir si un article comporte des commentaires sur PubPeer
  • scite : comptabilise les références à un article
  • zotxt : utilisé notamment par Hook
  • Zutilo : permet toute une gamme de fonctions avancées, comme copier des liens URIs, etc.
Zotero.

JabRef

Application multi-plateformes et gratuite de gestion bibliographique.

JabRef est un autre logiciel de gestion bibliographique qui possède de nombreuses fonctionnalités. Malheureusement, je n’ai jamais réussi à le faire fonctionner correctement sous macOS donc difficile d’en parler davantage!

Jabref.

Mendeley

Application multi-plateformes de gestion bibliographique propriétaire de l’éditeur Elsevier.

Mendeley est un logiciel de gestion bibliographique propriétaire de la compagnie d’édition Elsevier. Également disponible sur plusieurs plateformes. Je ne l’ai que très peu utilisé, donc je ne peux pas trop m’étendre à son sujet!

Mendeley.

1.5 - Gestion de l’information

Présentation de logiciels de gestion d’information.

On présente ici des outils de gestion de l’information, utiles pour la prise de notes de lecture, de notes de rencontre, etc.

Obsidian

Implémentation numérique du concept de Zettelkasten, notamment popularisé par le sociologue Niklas Luhmann au XXième siècle, qui consiste à structurer l’information en “cartes” afin d’optimiser l’apprentissage et la recherche.

Obsidian est un logiciel de gestion de l’information basé sur l’utilisation de fichiers Markdown. Il permet de créer des “vaults”, qui sont des entités hiérarchiques de dossiers contenant des fichiers markdown qui peuvent être reliés entre eux. Obsidian permet autant d’éditer que de visualiser les fichiers markdown, et possède un grand nombre de “plug-ins” permettant de personnaliser sa configuration.

Un tel logiciel peut être utile pour y déposer e.g.

  • des notes de lecture
  • des notes de cours
  • des notes de rencontre
  • des liens vers des sites web
  • des aides-mémoires

L’utilisation de fichiers markdown rend facile l’écriture d’équations et l’inclusion d’images ou de tableaux dans ces notes. On peut aussi facilement créer des liens entre les notes, et la mise en forme des documents est plus rapide qu’avec un logiciel conventionnel d’édition (e.g. Word), tout en gardant le “look” des documents LaTeX (mais sans la complexité d’un tel document). Il est également possible, via Hook, de créer des liens vers des courriels, des dossiers, des items dans Zotero, etc.

Obsidian.

2 - Langages de programmation

Langages de programmation, d’analyse, de création de documents et de scripting.

2.1 - Bash

Présentation des rudiments du langage de scripts bash.

On présente dans cette page les rudiments du langage de scripts bash – création d’un script, syntaxe de base, etc. [Reférences: Alexandre Lemerle, Alexandre Champagne-Ruel]

L’utilisation de scripts bash (ou son alternative, zsh) est un moyen pratique d’automatiser une foule de tâches dans un environnement *nix (linux, macOS, etc.) – du lancement automatique de codes de calcul à l’exécution de tâches de maintenance.

Creation d’un script

Création d’un script minimal et syntaxe de base.

Un script bash est simplement un fichier texte exécutable qui comporte optionnellement une extension .sh. Pour créer le script test.sh et le rendre exécutable, on peut faire:

touch test.sh
chmod 700 test.sh

On doit ensuite inscrire la ligne suivante au début du fichier:

#/usr/bin/env bash

Usage de base

Chaque ligne d’un script bash est ensuite simplement exécutée comme si elle était entrée manuellement à l’invite de commande.

On peut également se servir de tests conditionnels pour diriger l’exécution de script,

if [[ -z "$string" ]]; then
  echo "String is empty"
elif [[ -n "$string" ]]; then
  echo "String is not empty"
fi

de variables,

NAME="John"
echo $NAME
echo "$NAME"
echo "${NAME}!"

Il possible d’effectuer certaines opérations mathématiques de base en bash, qui pourraient être utiles pour nommer des fichiers de façon séquentielle, par exemple, mais la syntaxe n’est pas très sexy:

NCYC=2
NREP=8
NT=$((100*NCYC*NREP))
SIMNAME='simcool_'$NT

etc.

2.2 - Makefile

Présentation des rudiments du langage de scripts Makefile.

On présente dans cette page quelques exemples de fichiers Makefile pouvant être utiles pour la compilation de documents latex, codes C, etc.

Un script Makefile est à bien des égards similaire à un script Bash, mais possède une syntaxe parfois légèrement différente. Les scripts Makefile sont exécutés non pas par bash mais par make, et servent de manière générale à compiler des objets.

Exemple: compilation d’un document LaTeX

On peut se servir d’un Makefile pour compiler automatiquement et rapidement un document latex.

Par exemple, on peut se servir d’un script de ce genre pour compiler un document latex:

.IGNORE:

default:
    pdflatex <document-name>
    chflags -R hidden *.aux *.bbl *.blg *.log *.out *.lof *.lot *.toc 
bib:
    pdflatex <document-name>
    bibtex <document-name>
    pdflatex <document-name>
    pdflatex <document-name>
    chflags -R hidden *.aux *.bbl *.blg *.log *.out *.lof *.lot *.toc 

clean:
    rm -r *.aux *.bbl *.blg *.log *.out *.lof *.lot *.toc

En copiant le texte ci-dessus dans un fichier sans extension nommé Makefile (notez le M majuscule), on peut alors taper les commandes suivantes dans le répertoire où se trouve le fichier pour exécuter les commandes associées du Makefile:

  • make : exécute la section default (compile le fichier latex)
  • make bib : exécute la section bib (compile le fichier latex et la bibliographie)
  • make clean : exécute la section clean (nettoie le répertoire des fichiers temporaires)

Exemple: compilation d’un code C

Un exemple un peu plus élaboré: conception d’un Makefile pour compiler un code C à l’aide de gcc.

On peut aussi se servir d’un Makefile pour compiler un code C. Par exemple, le script suivant compile mon code de calcul selon le système d’exploitation (la procédure de compilation diffère de l’un à l’autre):

CXX		:= g++
RM		:= rm -f
CPPFLAGS	:=
LDFLAGS		:= -O2 -fmax-errors=5 -fcompare-debug-second
LDLIBS-MACOS	:= -I/usr/local/include -L/usr/local/lib -lgsl
LDLIBS-CENTOS	:= -I/home/alexandre/lib/gsl/include -L/home/alexandre/lib/gsl/lib -lgsl -lgslcblas

SRC_DIR		:= src
SRCS		:= $(wildcard $(SRC_DIR)/*.cpp)
BUILD		:=build/clipd
LATEST_VERSION	:=3

all:
	@echo MacOS or CentOS?
	@exit 1
version_check:
ifdef v
else
	$(eval v=$(LATEST_VERSION))
	@echo No version specified, making version $(v)
endif
macos: version_check
	@echo Building for MacOS...; echo ""
	$(CXX) $(LDFLAGS) $(LDLIBS-MACOS) $(SRC_DIR)$(v)/*.cpp -o $(BUILD)$(v)

centos: version_check
	@echo Building for CentOS...; echo ""
	$(CXX) $(LDFLAGS) $(LDLIBS-CENTOS) $(SRC_DIR)$(v)/*.cpp -o $(BUILD)$(v)

clean:
	$(RM) $(BUILD)*

On peut alors se servir soit de make macos ou de make centos afin de compiler le code.

2.3 - Python

Présentation des rudiments du langage Python.

Cette page présente quelques informations sur les divers environnements Python, sur les packages pouvant être utiles en modélisation numérique, et sur les moyens d’interfacer Python avec d’autres langages de programmation compilés (Fortran, C).

Vous êtes probablement déjà relativement familier avec Python, donc je ne m’étendrai pas sur le détail de la syntaxe. Toutefois, quelques informations pertinentes peuvent être mentionnées ici.

Environnements

Présentation des divers environnements (interpréteurs, gestionnaires de packages et outils) supportant Python.

Anaconda

Anaconda est probablement la distribution la plus populaire du langage Python, disponible sur plusieurs plateformes.

On peut y créer des environnements virtuels qui comportent une configuration précise (packages présents, etc.) en faisant:

conda create -n my-env
conda activate my-env

Pour installer un module:

conda install <module>

Pour ajouter un répertoire au PYTHONPATH, ce qui permet de créer soi-même des modules:

conda develop <dir>

Packages utiles

Quelques packages utiles pour la modélisation numérique.

  • numpy : se passe de présentation.
  • matplotlib : idem.
  • scipy : idem.
  • click : permet de créer facilement des interfaces de ligne de commande.
  • pickle : lecture/écriture disque d’objets en mode binaire.
  • tqdm : création de barres d’avancement en ligne de commande.
  • numba : permet de précompiler du code Python, ce qui accélère énormément sa vitesse d’exécution1.

Interface avec d’autres langages

Packages permettant de créer des codes hybrides comportant des modules compilés en C ou en Fortran, d’exécution beaucoup plus rapide que le Python de manière générale.

On peut interfacer du code Python avec des routines écrites en C ou en Fortran, avec Cython et F2PY respectivement.


  1. Dans la réalité, numba peut être très efficace pour accélérer des algorithmes très simples qui nécessitent peu de lignes de code et le moins de packages possible, mais son utilisation devient très difficile pour des codes plus longs, qui font appel à des packages externes ou du code orienté objet. De plus, les messages d’erreur de numba sont des plus cryptiques, donc bonne chance pour débugger votre code. ↩︎

2.4 - C/C++

Présentation des rudiments du langage C/C++.

On présente ci-dessous une brève introduction au langage C avec quelques exemples de codes, et une recension des librairies scientifiques utiles en modélisation numérique.

Un des attraits importants des langages compilés (tels C et C++) par rapport aux langages interprétés (tel Python) vient de leur vitesse d’exécution.

Voici un bref comparatif:

Vitesse d’exécution de quelques langages de programmation.

Le principal désavantage de ce type de langage est toutefois l’offre beaucoup moins importante de librairies scientifiques (pas de numpy ici) et la syntaxe parfois plus complexe que celle des langages plus “haut niveau”.

Le langage C possède par ailleurs plusieurs versions (C11, C17) et une extension orientée-objet – le C++.

Finalement, on peut interfacer du code C et du code Python via Cython.

Exemple introductif

Syntaxe et compilation d’un exemple minimal de type “hello world”.

Un code C de type “hello world” pourrait ressembler à:

#include <stdio.h>
int main() {
   // printf() displays the string inside quotation
   printf("Hello, World!");
   return 0;
}

En plaçant ce code dans le fichier hello.c, on peut compiler avec

gcc hello.c -o hello

ce qui produit l’exécutable hello.

Librairies scientifiques

Recersion des librairies de calcul scientifique en C/C++.

GNU Scientific Library (GSL)

La GSL est l’une des principales libraires de calcul scientifique en C. Bref aperçu des fonctionnalités:

  • Complex Numbers
  • Roots of Polynomials
  • Special Functions
  • Vectors and Matrices
  • Permutations
  • Sorting
  • BLAS Support
  • Linear Algebra
  • Eigensystems
  • Fast Fourier Transforms
  • Quadrature
  • Random Numbers
  • Quasi-Random Sequences
  • Random Distributions
  • Statistics
  • Histograms
  • N-Tuples
  • Monte Carlo Integration
  • Simulated Annealing
  • Differential Equations
  • Interpolation
  • Numerical Differentiation
  • Chebyshev Approximation
  • Series Acceleration
  • Discrete Hankel Transforms
  • Root-Finding
  • Minimization
  • Least-Squares Fitting
  • Physical Constants
  • IEEE Floating-Point
  • Discrete Wavelet Transforms
  • Basis splines
  • Running Statistics
  • Sparse Matrices and Linear Algebra

2.5 - Fortran

Présentation des rudiments du langage Fortran.

On présente dans cette page quelques informations concernant le langage de programmation Fortran, les moyens de l’interfacer avec Python, et un bref exemple introductif.

Le principal attrait du Fortran est qu’il est, comme le C, un langage compilé. Ceci signifie que sa vitesse d’exécution est bien supérieure à votre Python habituel.

La syntaxe générale de Fortran est relativement simple, et il est encore beaucoup utilisé dans plusieurs groupe de recherche vu sa popularité dans les années 80-90.

On peut notamment utiliser F2PY pour interfacer du code Python avec du code Fortran – donc “inclure” des routines Fortran dans un code d’analyse Python plus large, par exemple.

Exemple introductif

Syntaxe et compilation d’un exemple minimal de type “hello world”.

Un code Fortran de type “hello world” pourrait ressembler à:

program hello
  ! This is a comment line; it is ignored by the compiler
  print *, 'Hello, World!'
end program hello

On peut le compiler à l’aide de

gfortran -o hello hello.f90

ce qui produit l’exécutable hello.

2.6 - Julia

Présentation des rudiments du langage Julia.

On présente ici une brève introduction au langage de programmation Julia.

Julia est un langage de haut niveau récent qui peut approcher la vitesse d’exécution de certains codes compilés traditionnels (C, Fortran). Il est couramment utilisé dans les groupes de recherche de biologie.

2.7 - R

Présentation des rudiments du langage R.

On va éventuellement présenter dans cette page une introduction au langage R.

2.8 - latex

Présentation des rudiments du langage latex.

On présente dans cette page quelques informations utiles pour le langage latex – notamment les packages de gestion bibliographique, et quelques éditeurs utiles.

J’imagine que rendu ici vous êtes tout à fait familiers avec le langage latex, donc je ne vais y consigner que des éléments plus avancés.

Gestion bibliographique

Quelques formats/packages de gestion bibliographique pour latex.

bibtex

Bibtex est l’un des plus vieux format de gestion bibliographique sous latex. On l’utilise avec le package natbib. Plusieurs journaux nécessitent l’entrée de citations avec natbib.

biblatex

Plus récent que bibtex, le format BibLatex (et le package du même nom) possèdent de nombreuses fonctionnalités avancées que bibtex ne fournit pas, par exemple imprimer (facilement…) des entrées bibliographiques dans le texte, etc.

Éditeurs

Quelques éditeurs, tant spécifiques au latex que généraux.

texpad

Texpad est un éditeur macOS relativement bien conçu qui a deux avantages plutôt pratiques selon moi:

  • complétion automatique (ou suggestions) lorsqu’on cite, car il lit les fichiers de bibliographie
  • prévisualisation en temps réel du document – ce qui en fait un outil bien pratique pour rédiger rapidement de petits documents (e.g. lettres, etc.)1
Texpad.

Overleaf

Overleaf est un service en ligne qui permet de créer des documents latex et de les visualiser directement dans le fureteur. Se connecte optionnellement avec d’autres services (e.g. Github) ce qui peut être pratique. Possède également des fonctionnalités de collaboration entre auteurs.

Overleaf.

emacs

emacs peut évidemment servir à éditer des documents latex, et possède par ailleurs certaines extensions destinées précisément à ça (auctex, par exemple).


  1. À noter que Texpad utilise son outil de compilation interne qui peut ne pas être compatible avec tous les packages latex, et qui peut devenir moins pratique pour les documents plus lourds. ↩︎

2.9 - Markdown

Présentation des rudiments du langage Markdown.

On présente ci-dessous une brève introduction au langage Markdown, incluant quelques éditeurs et la syntaxe de base du langage.

Le langage Markdown est une sorte de version très très simplifiée de latex, qui permet de créer des documents simples comportant certains éléments de mise en forme. Le site web que vous lisez présentement utilise une variation du langage Markdown.

Il est très utile pour prendre des notes de manière plus informelle qu’avec latex, mais peut également être utilisé pour produire des documents PDF. On peut aussi y entrer des équations, ajouter des images, etc.

Éditeurs

Quelques éditeurs pouvant être utilisés pour le Markdown.

MacDown

MacDown est un éditeur open source sous macOS qui permet de créer rapidement des documents Markdown et de les prévisualiser.

Macdown.

emacs

Comme pour l’édition de documents latex, emacs est un autre éditeur très pratique pour l’édition de documents Markdown – à ceci près qu’il ne possède pas de fonction de prévisualisation comme e.g. MacDown.

Obsidian

Obsidian est basé sur une certaine variation du langage Markdown, et peut être tout à fait utile pour entrer des notes dans ce langage. Moins pratique pour l’édition de fichiers individuels toutefois.

Syntaxe de base

Syntaxe de base commune à virtuellement toutes les implémentations de Markdown.

On insère les titres en sous-titres via

# Titre
## Sous-titre
### Sous-sous-titre

Le texte peut être formatté selon:

Syntaxe Résultat
**bonjour** gras
*bonjour* bonjour
~~bonjour~~ bonjour
[un lien](www.google.com) un lien
$$x^2$$ $$x^2$$

Blocs de code

On peut insérer des blocs de code via

```bonjour```

ce qui donne

bonjour

Citations

On peut également insérer des citations via

> bonjour

ce qui donne

bonjour

Images

On insère des images en utilisant du code HTML, qui est plus pratique que le code Markdown pour inclure les images (et ne permet pas de les redimensionner):

<img src="cutecat.jpg" style="width:20%">

Résultat:

3 - Outils

Commandes et programmes au terminal, description et fonctionnement de la grappe de calcul, logiciels d’édition graphique et autres, et formations diverses.

3.1 - Terminal

Aperçu de quelques commandes utiles au terminal.

On donne ici une description de quelques outils utiles au terminal. Beaucoup de ces outils sont propres à un environnement *nix (macOS, linux, etc.)

ssh

Utilitaire de connexion sécurisée au terminal d’une machine distante.

SSH est un protocole qui permet de se connecter de manière sécurisée à distance au terminal d’une autre machine, par exemple celles de la grappe de calcul. La plupart des systèmes d’exploitation disposent d’emblée d’une application (normalement appelée ssh elle aussi) qui permet la connexion.

Pour se connecter:

ssh <adresse>

On peut aussi enregistrer ses informations de connexion dans la machine distante afin de ne pas avoir à entrer son nom d’utilisateur/mot de passe à chaque fois. Sur sa propre machine, si l’exécution de

ls -al ~/.ssh/id_*.pub

retourne No such file or directory ou similaire, on se génère une clé RSA avec

ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

puis on copie ses informations de connexion sur la machine distante via

ssh-copy-id remote_username@server_ip_address

git

Utilitaire de contrôle de version pour codes & documents.

Git est un système de contrôle de version qui permet de gérer les différentes versions (passées, ou alternatives) d’un code, et qui peut agir en même temps comme copie de sauvegarde1. On l’utilise fréquemment avec des services comme Github ou Bitbucket, qui agissent comme serveur distant sur lesquels les dépôts locaux sont sauvegardés. La plupart des systèmes d’exploitation possèdent d’entrée de jeu une version de git.

Un “dépôt” git est simplement un répertoire qui contient un sous-répertoire nommé .git contenant la configuration du dépôt et les méta-données (historique, etc.) On peut créer un dépôt dans un dossier en faisant:

git init

puis en ajoutant des fichiers au dépôt via

git add <fichiers>
git commit -m '<message de mise à jour>'
git branch -M main
git remote add origin <repo-url>
git push -u origin main

<repo-url> correspond à l’adresse d’un dépôt distant (Github, etc.) que l’on aura précédemment créé.

Chaque fois qu’une modification substantielle doit être sauvegardée (e.g.: vous avez terminé de programmer une fonction importante d’un code), il suffit de git add les fichiers, entrer un message de mise à jour via git commit puis de pousser les changements sur le serveur via git push.

À l’inverse, pour créer une copie locale d’un dépôt distant, on fait

git clone <adresse du dépôt>

Pour voir l’historique de mise à jour d’un dépôt, on peut faire

git log

On peut se servir de git pour suivre les mises à jour d’un code (peu importe le langage de programmation), et même pour sauvegarder/suivre les changements d’un document latex. Un dépôt peut comporter n’importe quel type de fichier, dans la mesure où celui-ci respecte les limites de stockage du serveur.

git.

parallel

Utilitaire de parallélisation de processus, tant en local que sur une machine distante.

GNU Parallel est une application qui permet de lancer des processus simultanément sur une machine (local ou distante, via SSH), de manière automatisée, et en permettant une grande flexibilité.

Un exemple de situation où parallel est très utile: lancer une série de processus de calcul sur la grappe du groupe de recherche.

Par exemple, on peut se servir d’une commande telle

parallel --env PATH --workdir . --sshloginfile ~/cluster_hosts.txt --sshdelay 0.1 --bar $@

pour lancer une série de processus sur la liste de serveurs contenue dans le fichier cluster_hosts.txt.

GNU Parallel.

curl et wget

Utilitaires de requêtes web.

curl et wget permettent respectivement d’afficher dans le terminal et de télécharger des pages web (ou fichiers) présents sur un serveur. Ils sont normalement présents sur une machine *nix sans besoin d’être installés.

Par exemple,

curl www.google.com

affiche le contenu de la page dans le terminal, tandis que

wget www.google.com

télécharge le fichier index.html du serveur.

curl.

imgcat

Utilitaire d’affichage d’images dans le terminal.

imgcat est un package Python qui peut aussi être directement appelé via la ligne de commande. Il sert à afficher des images (png, etc. mais aussi pdf) via le terminal. Très pratique e.g. lorsqu’on se connecte à distance sur une machine.

Par exemple,

imgcat test.png
imgcat test.pdf

affiche les fichiers test.png et test.pdf.

imgcat.

tar, gzip et (un)zip

Utilitaire d’archivage et de compression de fichiers.

Présents d’emblée sur les systèmes *nix, tar et (un)zip permettent de créer des archives (de dossiers, fichiers) ou d’extraire les fichiers y étant contenus. La commande zip crée un fichier compressé “zip”, tandis que la commande tar ne crée qu’une archive (qui n’est pas compressée). On peut aussi compresser une archive tar avec la commande gzip afin de créer une archive .tar.gz compressée.

Pour créer un fichier zip,

zip -r <file.zip> <folder> -x <exclude>

et pour le décompresser,

unzip <file.zip>

Pour créer une archive tar,

tar cf <file.tar> <files>

et pour en extraire les fichiers,

tar xf <file.tar>

Finalement, pour compresser une archive tar avec gzip,

gzip <file>

et pour la décompresser,

gzip -d <file.gz>
tar.

brew

Gestionnaire d’applications sous macOS.

Brew est un gestionnaire d’applications pour macOS (similaire à yum et autres sous linux) qui contient une grande quantité d’outils.

Par exemple, pour installer emacs on peut faire

brew install emacs
Brew.

emacs

Éditeur texte.

Emacs est l’un des grand-pères du “Notepad” traditionnel en fonctionne dans le terminal. Normalement présent d’emblée sur les postes *nix, il peut aussi être mis à jour (puisqu’il est toujours activement développé).

Deux avantages importants de emacs:

  • il s’exécute via le terminal, donc possible de travailler à distance (e.g. via ssh) facilement
  • il possède d’innombrables raccourcis clavier (qui sont personnalisables), ce qui permet d’accélérer beaucoup l’édition de fichiers
emacs.

vi

Éditeur texte.

vi est le frère d’emacs, et permet également d’éditer rapidement des fichiers textes. Choisir entre emacs et vi est une question de préférence personnelle (mais emacs est définitivement supérieur).

Présent également d’emblée sur les postes *nix.

vi.

time

Utilitaire de calcul du temps d’exécution d’une commande.

Permet de mesurer le temps d’exécution d’une commande.

e.g.

time ls -R . > /dev/null

retourne quelque chose comme

ls -R . > /dev/null  4.44s user 5.10s system 62% cpu 15.152 total

Le temps total est le temps “réel” pris par la commande pour être utilisée (ici, 15.152 sec)

time.

  1. Généralement pour des fichiers texte (e.g. code source). Git ne prend pas en charge les fichiers volumineux, donc ce n’est pas à proprement parler une application de sauvegarde. ↩︎

3.2 - Édition graphique

Aperçu de logiciels d’édition graphique.

On présente ici quelques options d’applications pour l’édition vectorielle. L’édition vectorielle agit sur des fichiers vectoriels (tels les PDFs et SVGs) et non sur des images matricielles (PNGs, JPGs, etc.) Permet d’obtenir des images – dans la mesure où ceux-ci peuvent être vectorisées – de bien meilleure qualité visuelle, et qui demeurent facilement modifiables en tout temps.

Adobe Illustrator

Logiciel d’édition vectorielle propriétaire.

Adobe Illustrator est le nec plus ultra de l’édition vectorielle.

Adobe Illustrator.

Inkscape

Logiciel d’édition vectorielle gratuit.

Inkscape est le petit frère gratuit d’Adobe Illustrator. Possède pas mal de fonctionnalités, mais à mon expérience peu stable et assez lent sous macOS malheureusement.

Inkscape.

tikz

Package latex de conception vectorielle.

Tikz n’est pas un programme à proprement parler mais plutôt un package latex. Permet de programmer des diagrammes.

Tikz.

3.3 - Autres outils

Autres programmes utiles d’usage général.

On présente ici des outils qui ne sont pas conçus spécifiquement pour la recherche (ou l’académique) mais qui sont tout de même très pratiques côté productivité/usage.

Hook

Application utile pour créer des liens URIs entre applications sous macOS.

Hook est une application macOS qui permet de créer des URIs pour à peu près n’importe quel objet (virtuel) sur votre poste. Une URI est la version “locale” d’une URL (adresse web). Certaines applications supportent nativement les URIs, tandis que d’autres non. Hook vient centraliser tout ça et permettre de créer des liens facilement autant vers des fichiers que des courriels (dans l’application macOS Mail ou Outlook), des notes dans Obsidian, des références dans Zotero, etc.

Par exemple, une URI associée à un item bibliographique dans Zotero (et créée avec Hook) ressemble à

zotero://select/items/1_QCBWBUWP

On peut insérer ce lien dans un autre programme qui supporte les URIs (e.g. macOS TextEdit, Obsidian, Todoist, etc.) et cliquer sur ce lien nous amène vers la référence dans Zotero.

Hook.

BetterTouchTools

Application de personnalisation de raccourcis clavier et trackpad sous macOS.

BetterTouchTools est une application macOS qui permet de reconfigurer n’importe quelle combinaison de touches ou de geste du trackpad et de l’associer à toute une gamme d’actions prédéfinies (gestion des fenêtres, démarrage d’une application, etc.)

BetterTouchTools.

MountainDuck

Utilitaire de création de disques virtuels.

MountainDuck est une application disponible sur plusieurs plateformes qui permet de créer un disque local virtuel (mount point) associé à un serveur SSH distant, un serveur d’infonuagique (e.g. Google Drive, etc.)

Peut être utilisé pour accéder de manière distante aux fichiers présents sur la grappe de calcul.

MountainDuck.

Toggl

Utilitaire de comptabilisation du temps.

Toggl permet de comptabiliser le temps passé sur des projets.

Toggl.

Todoist

Gestionnaire de tâches.

Todoist est une application de gestion de tâches disponible sur plusieurs plateformes, et qui est assez bien conçue de manière générale.

Todoist.

Focus

Application pour bloquer les distractions.

Focus est une application macOS qui permet de bloquer les distractions (applications/sites web inutiles).

whenisgood

Application web pour planifier des rencontres.

whenisgood est une application web qui permet de comparer les disponibilités afin de planifier des rencontres.

Whenisgood.

Alfred

Ligne de commande en mode graphique sous macOS.

Alfred est une application qui permet d’invoquer une ligne de commande graphique permettant de lancer des applications, chercher des fichiers, appeler des fonctions personnalisables, etc.

Alfred.

4 - Informations UdeM

Ressources propres au département de physique de l’UdeM, informations sur les diverses offres de financement et sur l’organisation de conférences à l’UdeM.

4.1 - Grappe de calcul

Description de la grappe de calcul du groupe de recherche.

On présente ici des informations sur la connexion à la grappe de calcul du Groupe, les sépcifications matérielles et logicielles des serveurs, ainsi que quelques scripts utiles.

Connexion

Connexion aux serveurs de grappe de calcul. La procédure détaillée n’est pas présentée puisque ce site est public.

On peut se connecter en ssh aux serveurs de la grappe de calcul.

De l’extérieur du campus, on doit passer par la machine de proxy ou par le VPN de l’Université de Montréal.

Spécifications matérielles

Spécifications matérielles des serveurs de calcul de la grappe.

La grappe de calcul consiste en une vingtaine de machines possédant chacune entre 8 et 24 coeurs de processeur, et entre 8 et 32GB de mémoire vive. Votre répertoire de travail est situé sur un disque partagé, donc peu importe la machine où vous vous connectez vous avez accès aux mêmes fichiers, en temps réel.

Environnement logiciel

Description de l’environnement logiciel des serveurs de la grappe.

Les serveurs opèrent sous CentOS Linux et possèdent des versions relativement à jour des interpréteurs (Python, etc.) et compilateurs (Fortran, C, etc.)

Les machines n’ont pas d’accès direct à internet.

Vous pouvez y installer des applications dans la mesure où celles-ci ne nécessitent pas d’accès administrateur pour être installées.

Scripts utiles

Quelques scripts utiles lors de l’utilisation de la grappe.

Liste de serveurs

On peut créer une liste de serveurs de la grappe pour e.g. utilisation avec parallel avec un script du style:

#!/bin/bash

for i in $(seq -f "%02g" 0 23)
do
  ssh -o ConnectTimeout=5 -q sol$i-ib exit > /dev/null
  if [ $? -eq 0 ]
  then
      echo sol$i-ib
  fi

done

echo taranis

Usage des machines

On peut vérifier quel est le pourcentage d’utilisation des processeurs de chacune des machines en exécutant un script tel que:

#!/usr/bin/env bash

while read -u10 HOST
# do ssh $HOST 'printf "$(hostname): " ; top -n 1 -b | grep %Cpu' &
   do ssh $HOST 'top -n1 -b | grep %Cpu | xargs -d "\n" printf "$(hostname) %s\n"' &
done 10< ~/cluster_hosts.txt

wait

4.2 - Ressources UdeM

Ressources diverses reliées au département de physique de l’UdeM.

Voici différentes ressources qui sont reliées proprement au département de physique et à l’Université de Montréal – comme les différents formulaires, plans et logos pouvant être utilisés pour des publications/présentations.

Formulaires de dépenses

Formulaire de remboursement de dépenses pour e.g. dépenses de voyage lors de conférences, etc.

Voir la page Ressources et formulaires du département.

Plan secteur MIL

Plan visuel du secteur MIL et des bâtiments adjacents.

Voici un plan du secteur MIL sur le site de la Ville de Montréal.

Logos

Différents logos haute résolution pouvant être utilisés pour les documents officiels et les présentations.

Logos de l’UdeM

Logos du CRAQ

Logos du CRSNG

4.3 - Financement

Offres de financement d’étude et pour des projets étudiants de l’UdeM.

On détaille ci-dessous les différentes offres de bourses d’études et de déplacement, et offres de financement pour des projets étudiants provenant des instances gouvernementales, des associations étudiantes et de l’UdeM.

Bourses gouvernementales

Offres de financement des organismes gouvernementaux provinciaux et fédéraux.

CRSNG

Le CRSNG offre des bourses de maîtrise et de doctorat.

FRQNT

Le FRQNT offre aussi des bourses de maîtrise et de doctorat.

Bourses de l’ASEQ

Offres de financement de l’Alliance pour la santé étudiante au Québec.

Bourse de la fondation ASEQ

La bourse de la fondation ASEQ permet de récolter jusqu’à 5000$ pour des projets étudiants.

Bourses de la FAECUM

Offres de financement de la Fédération des Associations Étudiantes du Campus de l’Université de Montréal.

PIÉ

La bourse pour Projets d’initiatives étudiantes (PIÉ) permet de récolter jusqu’à 2000$ pour des initiatives étudiantes.

SIÉ

La Subvention aux initiatives étudiantes (SIÉ) permet d’obtenir jusqu’à 600$ pour des projets d’initiative étudiante.

PARSEC

Le Programme d’aide au rayonnement du savoir étudiant des cycles supérieurs (PARSECS) permet de récolter jusqu’à 500$ pour assister (et/ou présenter) à des conférences à l’extérieur.

Bourses de l’UdeM

Offres de financement de l’Université de Montréal.

FAVE

Le Fonds d’amélioration de la vie étudiante (FAVE) permet d’obtenir des montants variables (qui peuvent être relativement élevés) pour des projets d’initiative étudiante.

Offres de financement du CRAQ

Offres de financement du Centre de Recherche en Astrophysique du Québec.

Financement de conférences

Le CRAQ finance à hauteur de 2000$ les évènements organisés par les membres du CRAQ.

4.4 - Organisation de conférences

Ressources utiles pour l’organisation de conférences à l’UdeM.

On présente ici quelques ressources utiles lors de l’organisation de colloques/conférences à l’UdeM – notamment en ce qui a trait à l’hébergement, service de traiteur, couverture audiovisuelle/informatique et matérielle. Quelques fournisseurs externes sont également mentionnés.

Hébergement

Quelques ressources d’hébergement pour loger des conférenciers/étudiants participants aux conférences de l’UdeM.

ZUM résidences

Les résidences ZUM sont les résidences de l’Université de Montréal. Peuvent héberger des conférenciers en visite à Montréal. Peuvent également héberger des groupes durant l’été, de mai à août. Prix très compétitifs comparé aux hôtels.

Traiteur

Ressources de traiteur pour l’organisation de conférences/évènements.

locallocal

Le traiteur locallocal est le traiteur…local de l’Université de Montréal. Prix compétitifs.

Ressources évènements UdeM

Ressources humaines et matérielles pour l’organisation d’évènements à l’UdeM.

Technologies de l’information

Les TI de l’UdeM ont un Groupe couverture d’évènements qui peut fournir ressources matérielles & humaines lors d’évènements (e.g. colloques).

Direction des immeubles

La Direction des Immeubles de l’UdeM peut fournir du matériel (tables, chaises, mobilier, etc.) lors de l’organisation d’évènements. Ils s’occupent également de l’entretient ménager (coûts associés lors d’évènements).

Fournisseurs

Fournisseurs externes de matériel pour l’organisation d’évènements.

Articles promotionnels & identification