Git : comment l’apprendre facilement ?
Voici un site extrêmement bien fait qui aide à apprendre les branches et le fonctionnement de ces dernières : learngitbranching
Voici un site extrêmement bien fait qui aide à apprendre les branches et le fonctionnement de ces dernières : learngitbranching
Gitlab CI (Continuous Integration) |
|
| Layer | A set of read-only files or commands that describe how to set up the underlying system beneath the container. Layers are built on top of each other, and each one represents a change to the filesystem. |
| Image | An immutable layer that forms the base of the container. |
| Container | An instance of the image that can be executed as an independent application. The container has a mutable layer that lies on top of the image and that is separate from the underlying layers. |
| Registry | A storage and content delivery system used for distributing Docker images. |
| Repository | A collection of related Docker images, often different versions of the same application. |
Docker memo |
|
docker images
|
List all images present on host. |
docker rmi
|
To remove an image you no longer plan to use. |
docker run [image]
|
Start a container of the image [image]. If the image is not present on the host, it will go out to docker hub and pull the image down, it's only done the first time. For the subsequent executions, the same image will be re-used.
|
docker run [image] -d
|
Start a container of the image docker run [image] in detached mode = in the background.
|
docker run -p [src]:[dst] [image] -d
|
Like rStart a container of the image docker run [image] in detached mode = in the background.
|
docker pull [image]
|
Like docker run but only pull the [image], not run it.
|
docker exec [container name] [command]
|
Runs the command [command] on a running container.
|
docker ps
|
List all running containers with informations such as container id, the image used for it. |
docker ps -a
|
To see all containers running or not. |
docker ps
|
A collection of related Docker images, often different versions of the same application. |
docker stop [name]
|
To stop a running container. |
docker rm [name]
|
rm = remove container. To remove a stopped or exited container permanently = stop using space.
|
docker rmi
|
rmi = "remove images". To remove an image you no longer plan to use.
|
docker rmi
|
To remove an image you no longer plan to use. |
Voici un exemple de fichier de configuration qui ignore la plupart des fichiers qui posent problème :
# --------------------------------------
# git cleanup if too many files / or / problems:
# git reflog expire --expire=now --all && git repack -ad && git prune
# --------------------------------------
# PyCharm
.idea/
# --------------------------------------
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# --------------------------------------
# C extensions
*.so
# Distribution / packaging
bin/
build/
develop-eggs/
dist/
eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# --------------------------------------
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# --------------------------------------
# Unit test / coverage reports
.tox/
.coverage
.cache
nosetests.xml
coverage.xml
# --------------------------------------
# Translations
*.mo
# --------------------------------------
# Mr Developer
.mr.developer.cfg
.project
.pydevproject
# --------------------------------------
# Rope
.ropeproject
# --------------------------------------
# Django stuff:
*.log
*.pot
# --------------------------------------
# Sphinx documentation
docs/_build/
# --------------------------------------
# git
objects/
# --------------------------------------
# swap files
*.swp
*.swo
Mon objectif était :
/ à la fin, il redirige en ajoutant le / à la fin/ à la fin, tout doit fonctionnerindex.html et index.htmJ’en suis donc arrivé à ces règles, plus « proches » de la configuration possible dans Nginx :
/ à la fin. Si oui, n’accepter que index.html ou index.htm/ à la fin. Si oui, le nom, qui doit être forcément un fichier, sinon, rediriger en ajoutant un / pour qu’il reboucle au début location ~* ^/unity/(?<p>.+)/$ {
root /web/htdocs/unity;
try_files /$p/index.html /$p/index.htm /$p =403;
access_log off;
expires 1h;
}
location ~* ^/unity/(?<p>.+) {
root /web/htdocs/unity;
try_files /$p $p @redirect_with_slash_at_the_end;
access_log off;
expires 1h;
}
location @redirect_with_slash_at_the_end {
return 301 $scheme://www.mywebsite.com$request_uri/;
}
Le code est simple, il fautt avoir paplay d’installé (je ne sais pas si c’est installé par défaut dans Debian).
A partir de là voici un exemple de code qui joue un fichier ogg :
# python3
>>> import subprocess
>>> subprocess.Popen([
... "paplay",
... "/home/olivier/.local/blah/Mission_Failed.ogg"
... ]).poll()
>>>
Oui.
TAX INVOICE? One image:
![]()
Je l’ai fait. OUI.![]()
J’ai même choisi toutes les catégories dans lesquelles il peut entrer :
Je lutte activement contre la mentalité Française latine : j’essaie d’expliquer à tout le monde qu’il faut arrêter de scier la branche sur laquelle on (= les développeurs) est assise : si vous pouvez avoir quelque chose de gratuit, mais que vous vous en servez souvent, faites le calcul : s’il vous fait économiser du temps, donc de l’argent, bah la conclusion est simple : il faut que cela continue. Pour que cela continue, payez (moins que ce qu’il vous a fait économiser, sinon c’est pas intéressant) mais payez, bon sang !
J’ai évolué de ce côté et je fais tout pour que les personnes que je fréquente – et étudiants – aillent dans ce sens.
Donc oui, Sublime Text me fait gagner du temps tous les jours depuis plusieurs années, et aujourd’hui, la conclusion est évidente : il m’a fait gagner bien plus que 80 €.
Donc… je résume, une image vaut mille mots. Et même si pour certains c’est vieux, le principe reste éternel :
PS : pour ceux qui ne savent pas ce que « OMFG » signifie, ne le dites à personne, et allez vite chercher sur Internet. Promis on ne le dira à personne. C’est comme « RTFM ». Promis.
Côté utilisateur |
|
| La souris |
Quand on aimerait cliquer :/mouse disablePour la remettre : /mouse enable
|
| Documentation |
Raccourci : cliquer sur le lien : – Message privé – Raccourcis clavier |
Configuration |
|
| Toujours installer v2+ et pas moins | https://weechat.org/download/ |
Fichier de conf :~/.weechat/
|
Weechat = une seule instance. Conf. chargée en entier ici : ~/.weechat/Pour plusieurs instances, copier tout le dossier, ex : cp -R ~/.weechat ~/.weechat2Puis lancez en précisant weechat -d ~/.weechat2
|
| Lancement + connexion auto |
Exemple de code :weechat -r '/server add freenode irc.freenode.net; /connect freenode -nicks=Olivier; /set irc.server.freenode.username "Olivier2"; /set irc.server.freenode.realname "Olivier Pons"; /set irc.server.freenode.autojoin "#prognosis-dev"'
|
Plugins |
|
Situés dans :~/.weechat/
|
Plugins Python ici :~/.weechat/python
|
| Chargement manuel |
Exemple Python / plugin arespond.py :/script load arespond.py
|
| Chargement automatique |
Exemple Python / plugin arespond.py :Faire un lien symbolique : cd ~/.weechat/python/autoload
|
| Options / switches |
Définir une option manuellement :/set plugins.var.python.[SCRIPT_NAME].[option]="[valeur]Appuyer sur TAB pour autocompléterAu pire lire les options dans le code même. Exemple Python / plugin arespond.py :Les options sont en « camelCase », mais elles sont toutes transformées en minuscules dans weechat. Il y a trois options marquée dans le code: "muted""respondAfterMinutes""responderText"Donc pour y accéder, il suffit de taper : /set plugins.var.python.arespond.[tab]Et les trois options seront affichées sur la ligne du dessus, il suffit d’autocompléter. |
Fichiers |
|
| Chemin de base |
Application.persistentDataPath
|
|
Encrypter les données. Trouvé ici. |
...
|
GameObjects dans l’éditeur : mémo |
|
|
Faire une liste déroulante avec des items sur mesure. Trouvé ici. |
public enum IngredientUnit {
Puis, dans n’importe quelle page, on peut ajouter une property de type
|
GameObjects : mémo |
|
| Taille Mesh |
Mesh m = obj.GetComponent<MeshFilter>().sharedMesh;
|
| Taille Sprites |
var m = transform.GetComponent<Renderer>();
|
Assets et Objets |
|
|
Pour comprendre comment gérer correctement les données dans Unity, il faut impérativement comprendre comment Unity identifie et sérialise les données. Le premier point-clé est de faire la distinction entre les Assets et UnityEngine.Objects.
Un Alors que la plupart des types
Il y a une relation one-to-many entre |
|
– Créer l’URL de logout :url(r'^logout/$', LogoutView.as_view(), name='logout'),
– Créer la vue class LogoutView(views.LogoutView): def __init__(self):
|
Références entre
|
|
Tous les UnityEngine.Objects peuvent avoir des références vers d’autres UnityEngine.Objects. Ces derniers peuvent résider dans le même fichier Asset, ou peuvent être importé à partir d’autres fichiers Asset. Par exemple, un Object matériau a habituellement une ou plusieurs références vers des Object texture. Ces Object texture sont généralement importés à partir d’un ou plusieurs autres fichiers Asset (tels que des PNG‘s ou JPG‘s).Lorsqu’elles sont sérialisées, ces références sont constituées en deux blocs de données : un File GUID et un Local ID. Le File GUID identifie le fichier Asset. Un Local ID identifie chaque objet à l’intérieur d’un fichier Asset, car un fichier Asset peut contenir plusieurs objets. L’identification et le système de référence peut être visualisé dans un éditeur de texte : créez un nouveau projet Unity et changez Editor Settings en cochant Visible Meta Files et Serialiaze Assets as text. Créez un nouveau matérieau, puis importez une texture dans le projet. Assignez le matériau à un cube dans la scène et sauvez cette dernière.Avec un éditeur de texte, ouvrez le fichier .meta associé au matériau. Une ligne guid sera présente parmi les première lignes. Cette ligne définit le GUID du matériau. Pour trouver l’id local, ouvrez le fichier matériau dans un éditeur de texte. La première ligne qui ressemble à ‘--- !u! &2100000‘ correspond à l’id local.
|
Pourquoi des «
|
|
Pourquoi le principe des « File GUIDs » et des Local ID‘s est-il important ? La réponse est : dans la stabilité et la possibilité d’avoir un workflow indépendant de la plateforme.
|
Comment faire un affichage 100% proportionnel quelle que soit la résolution de l’écran ? |
|
|
En fait, d’après ce que j’ai compris, il faut comprendre qu’on ne « devrait » pas toucher à la taille de la fenêtre de l’application : c’est l’utilisateur qui la fixe : téléphone mobile, portrait ou paysage, ou écran 4k voire 8k, l’application doit s’adapter et devrait même être redimensionnable. L’idée que j’ai retirée de mon expérience, qui est peut-être un peu différente de la réalité « Unity », est la suivante :
Pourquoi ne pas faire ces deux opérations dans le |
Une « cheatsheet » est une page dans laquelle je mets touts les petites astuces que j’ai récoltées ici ou là, et qui m’ont permises de gagner du temps (ou, à l’inverse, qui m’éviteront d’en reperdre beaucoup, car j’en ai perdu beaucoup et que je ne veux plus en perdre…).
Et les astuces qui suivent, je ne sais pas où les mettre :
C’est l’Ergodox Infinity, mais en plus petit.
mkdir keyboards && cd keyboards && mkdir preonic && cd preonicgit clone https://github.com/qmk/qmk_firmwarecp -R ./keyboards/preonic/keymaps/default ./keyboards/preonic/keymaps/azertymake preonic:azerty:dfuVous pourrez ainsi éditer le dossier qui est maintenant votre dossier custom azerty
vim ./keyboards/preonic/keymaps/azerty