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 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.
Si on tape l’URL sans le /à la fin, il redirige en ajoutant le /à la fin
Si on tape l’URL avec le /à la fin, tout doit fonctionner
Tout ne doit être que statique et les fichiers doivent obligatoirement exister, sauf index.html et index.htm
J’en suis donc arrivé à ces règles, plus « proches » de la configuration possible dans Nginx :
Filtre « custom » avec /à la fin. Si oui, n’accepter que index.html ou index.htm
Filtre « custom » en ignorant le /à 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
J’ai même choisi toutes les catégories dans lesquelles il peut entrer :
développement
développement divers
développement Internet
développement Django
Php
programmation C
programmation JavaScript
Python
geek
gestion de projet
euh j’arrête, il peut entrer… partout ! (aucune digression, merci !)
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.
Weechat = une seule instance.
Conf. chargée en entier ici : ~/.weechat/
Pour plusieurs instances, copier tout le dossier, ex : cp -R ~/.weechat ~/.weechat2
Puis lancez en précisant weechat -d ~/.weechat2
Exemple Python / plugin arespond.py : /script load arespond.py
Chargement automatique
Exemple Python / plugin arespond.py :
Faire un lien symbolique : cd ~/.weechat/python/autoload
ln -s ../arespond.py arespond.py
Options / switches
Définir une option manuellement : /set plugins.var.python.[SCRIPT_NAME].[option]="[valeur]
Appuyer sur TAB pour autocompléter
Au 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.
Faire une liste déroulante avec des items sur mesure.
Trouvé ici.
public enum IngredientUnit {
Spoon, Cup, Bowl, Piece
}
// Custom serializable class
[Serializable]
public class Ingredient
{
public string name;
public int amount = 1;
public IngredientUnit unit;
}
Puis, dans n’importe quelle page, on peut ajouter une property de type Ingredient, et même un tableau d’Ingredient ainsi :
public Ingredient potionResult;
public Ingredient[] potionIngredients;
GameObjects : mémo
Taille Mesh
Mesh m = obj.GetComponent<MeshFilter>().sharedMesh;
Debug.Log(m.bounds.size);
Taille Sprites
var m = transform.GetComponent<Renderer>();
Debug.Log(m.bounds.size);
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 Asset est un fichier sur le disque, stocké dans le dossier Assets d’un projet Unity. Les textures, modèles 3D, ou encore clips audio sont des types d’Assets très courants. Quelques Assets contiennent des données au format natif de Unity, tels que les materiaux. D’autres Assets doivent être convertis en format natif, comme par exemple les fichiers FBX.
UnityEngine.Object, ou bien Object avec un ‘O‘majuscule, est un ensemble de données sérialisées qui décrivent une instance spécifique d’une ressource. Cela peut être n’importe quelle ressource utilisée par le Unity Engine, telle qu’un mesh, sprite, AudioClip ou AnimationClip. Tous les objets sont des sous-classes de la classe de base UnityEngine.Object.
Alors que la plupart des types Object sont built-in (= natifs), il y a deux types spéciaux.
Un ScriptableObject fournit un système pratique pour les développeurs qui désirent définir leurs propre types de données. Ces types peuvent être nativement sérialisés et dé-sérialisés par Unity, et manipulés dans la fenêtre « inspecteur » de l’éditeur de Unity
Un MonoBehaviour fournit un wrapper qui est lié à un MonoScript. Un MonoScript est un type de données interne que Unity utilise pour garder une référence à une class spécifique de script à l’intérieur d’un namespace et assembly spécifique. Un MonoScript ne contient pas réellement de code exécutable.
Il y a une relation one-to-many entre Asset et Object. Dit autrement, un fichier Asset peut contenir un ou plusieurs Object.
– Créer l’URL de logout : url(r'^logout/$', LogoutView.as_view(), name='logout'),
– Créer la vue LogoutView from django.contrib.auth import views
class LogoutView(views.LogoutView):
def __init__(self):
self.next_page = '/'
<form action="{% url 'login' %}" method="post" accept-charset="utf-8">
{% csrf_token %}
{% for field in form %}
<label>{{ field.label }}</label>
{% if field.errors %}
{{ field.errors }}
{% endif %}
{{ field }}
{% endfor %}
<input type="hidden" name="next" value="{{ next }}" />
<input class="button small" type="submit" value="Submit"/>
</form>
Références entre Object‘s
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 « File GUIDs » et des Local ID‘s ?
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 :
Il faut créer un Canvas et lui dire de rester proportionnel à l’écran. Comme cela, même sur les écrans géants, il s’adaptera ;
Dans ce Canvas, il faut créer un « référent » qui servira de conteneur à tout le reste. Ce conteneur, il faut lui dire de « remplir » son parent (donc de remplir le Canvas) selon une échelle à
Pourquoi ne pas faire ces deux opérations dans le Canvas ? (1) dire de rester proportionnel + (2) dire de « remplir » le parent Parce que le Canvas connaît et gère le composant Canvas Scaler, et le « référent » (qui sera un Pourquoi ne pas faire ces deux opérations dans le Canvas ? Parce que le Canvas connaît et gère le composant Canvas Scaler et que le « référent », ou « conteneur », connaît et gère le composant Aspect Ratio Fitter)
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 :
Comment imprimer une image sur plusieurs feuilles (facilement) ?
Lancez Paint et ouvrez l’image concernée
Choisissez : Impression »» Mise en page
Sous « échelle », changez le nombre de page en X et en Y
Cliquez sur « ok »
CTRL-P pour imprimer (assurez-vous bien que « toutes les pages » soit coché)