From c14526f2ed196884b51d026df555e15496ae8ddc Mon Sep 17 00:00:00 2001 From: Adrien Date: Tue, 4 Jan 2022 14:37:13 +0100 Subject: [PATCH] first commit --- 20211230101331-software.org | 11 ++++ 20211230101535-python.org | 20 ++++++ ..._frequence_d_un_element_dans_une_liste.org | 40 ++++++++++++ 20211230160741-outils.org | 10 +++ 20211230160756-emacs.org | 13 ++++ 20211230161032-org_mode.org | 11 ++++ 20211230161118-org_roam_timestamps.org | 27 ++++++++ 20211230181842-todo.org | 11 ++++ 20211230182200-domotique.org | 8 +++ 20211230182225-homeassistant.org | 8 +++ 20211230192608-list_vs_deque.org | 47 ++++++++++++++ 20211230205739-flask_admin.org | 10 +++ 20211230210035-flask.org | 15 +++++ 20211230210400-flask_security.org | 11 ++++ 20220101172208-la_methode___missing__.org | 58 ++++++++++++++++++ ...q2m41oivizbdltb6p9_2021-12-30_19-50-53.png | Bin 0 -> 11772 bytes ...qm1fk0kmm6waj0wvgi_2021-12-30_19-54-42.png | Bin 0 -> 16398 bytes 17 files changed, 300 insertions(+) create mode 100644 20211230101331-software.org create mode 100644 20211230101535-python.org create mode 100644 20211230141219-compter_la_frequence_d_un_element_dans_une_liste.org create mode 100644 20211230160741-outils.org create mode 100644 20211230160756-emacs.org create mode 100644 20211230161032-org_mode.org create mode 100644 20211230161118-org_roam_timestamps.org create mode 100644 20211230181842-todo.org create mode 100644 20211230182200-domotique.org create mode 100644 20211230182225-homeassistant.org create mode 100644 20211230192608-list_vs_deque.org create mode 100644 20211230205739-flask_admin.org create mode 100644 20211230210035-flask.org create mode 100644 20211230210400-flask_security.org create mode 100644 20220101172208-la_methode___missing__.org create mode 100644 Deque/8oq2m41oivizbdltb6p9_2021-12-30_19-50-53.png create mode 100644 Deque/ygqm1fk0kmm6waj0wvgi_2021-12-30_19-54-42.png diff --git a/20211230101331-software.org b/20211230101331-software.org new file mode 100644 index 0000000..18f3486 --- /dev/null +++ b/20211230101331-software.org @@ -0,0 +1,11 @@ +:PROPERTIES: +:ID: ca50d517-3e8a-4d03-ba38-7ff411e87408 +:mtime: 20211230160701 +:ctime: 20211230101331 +:END: +#+title: Software + +* Langages +** [[id:4fabfe6a-b104-464f-8a87-dfd7d761dbcc][Python]] + +* Design pattern diff --git a/20211230101535-python.org b/20211230101535-python.org new file mode 100644 index 0000000..b2e6e26 --- /dev/null +++ b/20211230101535-python.org @@ -0,0 +1,20 @@ +:PROPERTIES: +:ID: 4fabfe6a-b104-464f-8a87-dfd7d761dbcc +:mtime: 20220101184446 +:ctime: 20211230101535 +:END: +#+title: Python +#+filetags: :Python: + +* Language +** Classe +*** Méthodes dunder (Double UNDERscore method) + * [[id:dc2a8693-7158-4155-8eff-fc35a21a077d][La méthode dunder __missing__]] + +* Frameworks +** Web + * [[id:26b04294-75e8-4043-a9a6-a20acd952963][Flask]] + +* Tips +** [[id:4ef76164-0e67-410a-8d26-b03071a0cc41][Compter la fréquence des éléments d'une liste]] +** [[id:cb3c63b9-6452-4016-9b2f-a25784941d5d][List vs deque]] diff --git a/20211230141219-compter_la_frequence_d_un_element_dans_une_liste.org b/20211230141219-compter_la_frequence_d_un_element_dans_une_liste.org new file mode 100644 index 0000000..0352c64 --- /dev/null +++ b/20211230141219-compter_la_frequence_d_un_element_dans_une_liste.org @@ -0,0 +1,40 @@ +:PROPERTIES: +:ID: 4ef76164-0e67-410a-8d26-b03071a0cc41 +:mtime: 20211230160701 +:ctime: 20211230141219 +:END: +#+title: Compter la fréquence des éléments d'une liste +#+filetags: :Python: + +* Méthode sans dépendance +#+BEGIN_SRC python :results output +elements = [1, 2, 3, 4, 1, 3, 46, 7, 2, 3, 5, 6, 10] +freqs = {} +visiteds = set() +for element in elements: + if element in visiteds: + freqs[element] = freqs[element] + 1 + else: + freqs[element] = 1 + visiteds.add(element) + +print(f"Input list is: {elements}") +print(f"Frequency of elements is: {freqs}") +#+END_SRC +#+RESULTS: +: Input list is: [1, 2, 3, 4, 1, 3, 46, 7, 2, 3, 5, 6, 10] +: Frequency of elements is: {1: 2, 2: 2, 3: 3, 4: 1, 46: 1, 7: 1, 5: 1, 6: 1, 10: 1} + +* Methode basée sur le package /collections/ +#+BEGIN_SRC python :results output +import collections + +elements = [1, 2, 3, 4, 1, 3, 46, 7, 2, 3, 5, 6, 10] +counter = collections.Counter(elements) + +print(f"Input list is: {elements}") +print(f"Frequency of elements is: {dict(counter)}") +#+END_SRC +#+RESULTS: +: Input list is: [1, 2, 3, 4, 1, 3, 46, 7, 2, 3, 5, 6, 10] +: Frequency of elements is: {1: 2, 2: 2, 3: 3, 4: 1, 46: 1, 7: 1, 5: 1, 6: 1, 10: 1} diff --git a/20211230160741-outils.org b/20211230160741-outils.org new file mode 100644 index 0000000..728c38a --- /dev/null +++ b/20211230160741-outils.org @@ -0,0 +1,10 @@ +:PROPERTIES: +:ID: 2f47e53e-2b54-4360-9ac0-dfc6eba8ef26 +:mtime: 20211230160915 +:END: +#+title: Outils + +* IDE +** [[id:7bae5645-d19d-41c3-aafe-7c80c2a90789][Emacs]] + +* Administration diff --git a/20211230160756-emacs.org b/20211230160756-emacs.org new file mode 100644 index 0000000..c8079c4 --- /dev/null +++ b/20211230160756-emacs.org @@ -0,0 +1,13 @@ +:PROPERTIES: +:ID: 7bae5645-d19d-41c3-aafe-7c80c2a90789 +:mtime: 20211230161355 +:ctime: 20211230160756 +:END: +#+title: Emacs + +* Raccourcis + +* Elisp + +* Modes +** [[id:59e3160b-39bc-4e2e-ab0a-79d58ac11804][Org]] diff --git a/20211230161032-org_mode.org b/20211230161032-org_mode.org new file mode 100644 index 0000000..993314b --- /dev/null +++ b/20211230161032-org_mode.org @@ -0,0 +1,11 @@ +:PROPERTIES: +:ID: 59e3160b-39bc-4e2e-ab0a-79d58ac11804 +:mtime: 20211230161346 +:ctime: 20211230161032 +:END: +#+title: Org + +* Description + +* Packages associés +** [[id:a84eb967-dc1b-4563-9433-cefd3f4bc6e9][org-roam-timestamps]] diff --git a/20211230161118-org_roam_timestamps.org b/20211230161118-org_roam_timestamps.org new file mode 100644 index 0000000..de155d4 --- /dev/null +++ b/20211230161118-org_roam_timestamps.org @@ -0,0 +1,27 @@ +:PROPERTIES: +:ID: a84eb967-dc1b-4563-9433-cefd3f4bc6e9 +:mtime: 20211230172628 +:ctime: 20211230161118 +:END: +#+title: org-roam-timestamps + +* Description +Package permettant d'ajouter l'heure de modification des noeuds d'/org-roam/. + +* Configuration +** Propagation des modifications aux noeuds parents +La modification d'un noeud entrainera la modification de son timestamp, ainsi que de celui des noeuds y faisant +référence (valeur t). +#+BEGIN_SRC emacs-lisp +;; Timestamp propagation to the parents nodes +(setq org-roam-timestamps-parent-file t) +#+END_SRC +** Sauvegarde des timestamps +Sauvegarde des différents timestamps auxquels le noeud a été modifié (valeur t), sinon uniquement celui de la dernière modification. +#+BEGIN_SRC emacs-lisp +;; Keep only the last edit timestamp +(setq org-roam-timestamps-remember-timestamps nil) +#+END_SRC + +* Références + * [[https://github.com/ThomasFKJorna/org-roam-timestamps][org-roam-timestamps github]] diff --git a/20211230181842-todo.org b/20211230181842-todo.org new file mode 100644 index 0000000..c754eb4 --- /dev/null +++ b/20211230181842-todo.org @@ -0,0 +1,11 @@ +:PROPERTIES: +:ID: 297a69bf-eec9-47c6-a64e-388affcc9068 +:mtime: 20211230210637 +:ctime: 20211230181842 +:END: +#+title: TODO + +* A compléter + * [[id:3ff17578-cc46-4b9e-9bcb-e621d59588c5][HomeAssistant]] + * [[id:0eaaef80-51f9-4670-96c8-6a911efe152e][flask-admin]] + * [[id:5f41e674-eb59-4d69-981b-46a18cf28452][Flask-security]] diff --git a/20211230182200-domotique.org b/20211230182200-domotique.org new file mode 100644 index 0000000..e2eeeae --- /dev/null +++ b/20211230182200-domotique.org @@ -0,0 +1,8 @@ +:PROPERTIES: +:ID: 9c072d26-2ca9-4354-9858-36ff2049dc7a +:mtime: 20211230182321 +:END: +#+title: Domotique + +* Projets +** [[id:3ff17578-cc46-4b9e-9bcb-e621d59588c5][HomeAssistant]] diff --git a/20211230182225-homeassistant.org b/20211230182225-homeassistant.org new file mode 100644 index 0000000..cb77058 --- /dev/null +++ b/20211230182225-homeassistant.org @@ -0,0 +1,8 @@ +:PROPERTIES: +:ID: 3ff17578-cc46-4b9e-9bcb-e621d59588c5 +:mtime: 20211230182504 +:ctime: 20211230182225 +:END: +#+title: HomeAssistant +#+filetags: :TODO: + diff --git a/20211230192608-list_vs_deque.org b/20211230192608-list_vs_deque.org new file mode 100644 index 0000000..ff816fb --- /dev/null +++ b/20211230192608-list_vs_deque.org @@ -0,0 +1,47 @@ +:PROPERTIES: +:ID: cb3c63b9-6452-4016-9b2f-a25784941d5d +:mtime: 20211230202924 +:ctime: 20211230192608 +:END: +#+title: List vs deque +#+filetags: :Optimisation:Python: + +* /Deque/ +Classe du module /collections/ écrite afin de réaliser une queue plus efficace que la /list/. + +Caractéristiques principales : + * Ecrite en C (.cf [[https://github.com/python/cpython/blob/main/Modules/_collectionsmodule.c][Github)]], + * Liste doublement chainée et avec une double queue (contrairement à /list/ ayant une simple queue, à droite), + * Peut contenir des objets de types différents, + * Les méthodes /pop/, /append/, /appendleft/ et /popleft/ sont /thread-safe/, + * Object mutable, + * Supporte les /membership operations/ (opérateur /in/), + * Supporte l'indexation (par exemple, d[2]), + * Supporte les fonctions fonctionnant avec les /sequences/ et /iterables/ (par exemple, /len()/, /sorted()/), + * Supporte l'itération et l'itération inversée, + * Supporte le /picking/ (/pickle/), + * Ne supporte pas le /slicing/ (par exemple, d[0:2]) et le rangement (/sorting/) /in-place/ (par exemple: //[3, 1, 2].sort()//), + +Illustration de la liste doublement chainées (/deque/) : +#+DOWNLOADED: https://res.cloudinary.com/practicaldev/image/fetch/s--qPBdx2qm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8oq2m41oivizbdltb6p9.png @ 2021-12-30 19:50:53 +#+ATTR_ORG: :width 500 +[[file:Deque/8oq2m41oivizbdltb6p9_2021-12-30_19-50-53.png]] + +Figure illustrant l'intérêt d'une chaine doublement chainée afin de réaliser une /queue/: +#+DOWNLOADED: https://res.cloudinary.com/practicaldev/image/fetch/s--lB01CsB4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ygqm1fk0kmm6waj0wvgi.png @ 2021-12-30 19:54:42 +#+ATTR_ORG: :width 500 +[[file:Deque/ygqm1fk0kmm6waj0wvgi_2021-12-30_19-54-42.png]] + +* /Deque/ vs /list/ +Based on Big-O notation: +| | Deque | List | +| Access by an index | O(n) | O(1) | +| Append/pop at the beginning | O(1) | O(n) | +| Append/pop at the end | O(1) | O(1) + reallocation time | +| Insert in the middle | O(n) | O(n) | + +La /deque/ est plus performante que la /list/, hormis pour l'accès par index. + +* Références + * [[https://realpython.com/python-deque/][RealPython]] + * [[https://dev.to/v_it_aly/python-deque-vs-listwh-25i9][Python deque vs list (Vitaly Shchurov)]] diff --git a/20211230205739-flask_admin.org b/20211230205739-flask_admin.org new file mode 100644 index 0000000..b391e26 --- /dev/null +++ b/20211230205739-flask_admin.org @@ -0,0 +1,10 @@ +:PROPERTIES: +:ID: 0eaaef80-51f9-4670-96c8-6a911efe152e +:mtime: 20211230210709 +:ctime: 20211230205739 +:END: +#+title: Flask-admin +#+filetags: :Flask:Python:TODO: + +* Références + * [[https://flask-admin.readthedocs.io/en/latest/][Flask-admin]] diff --git a/20211230210035-flask.org b/20211230210035-flask.org new file mode 100644 index 0000000..6f561d6 --- /dev/null +++ b/20211230210035-flask.org @@ -0,0 +1,15 @@ +:PROPERTIES: +:ID: 26b04294-75e8-4043-a9a6-a20acd952963 +:mtime: 20211230210701 +:ctime: 20211230210035 +:END: +#+title: Flask +#+filetags: :TODO:Python:Flask: + +TODO + +* Modules + * [[id:0eaaef80-51f9-4670-96c8-6a911efe152e][Flask-admin]] + * [[id:5f41e674-eb59-4d69-981b-46a18cf28452][Flask-security]] + +* Référence diff --git a/20211230210400-flask_security.org b/20211230210400-flask_security.org new file mode 100644 index 0000000..a4b29b8 --- /dev/null +++ b/20211230210400-flask_security.org @@ -0,0 +1,11 @@ +:PROPERTIES: +:ID: 5f41e674-eb59-4d69-981b-46a18cf28452 +:mtime: 20211230210451 +:END: +#+title: Flask-security +#+filetags: :Cyber:Python:Flask:TODO: + +TODO + +* Références + * [[https://pythonhosted.org/Flask-Security/][Flask-security]] diff --git a/20220101172208-la_methode___missing__.org b/20220101172208-la_methode___missing__.org new file mode 100644 index 0000000..02ef996 --- /dev/null +++ b/20220101172208-la_methode___missing__.org @@ -0,0 +1,58 @@ +:PROPERTIES: +:ID: dc2a8693-7158-4155-8eff-fc35a21a077d +:mtime: 20220101184431 +:ctime: 20220101172208 +:END: +#+title: La méthode __missing__ + +* Synthaxe +#+BEGIN_SRC python +object.__missing__(self, key) +#+END_SRC +La méthode ~object.__missing__~ définit le comportement à adopter par une classe fille de ~dict~ lors de l'accès à une clé non +présente. Cette méthode est appelée par la méthode ~dict.__getitem__~ lorsque la clé demandée n'est pas présente dans le +dictionnaire. La valeur de retour de la méthode ~object.__missing__~ permet de spécifier la valeur à retourner lorsque +la méthode ~dict.__getitem__~ est appelée lorsque la clé n'est pas présente. + +* Exemples +** Comportement par défaut +#+BEGIN_SRC python :result output +d = {} +key = "toto" +dummy_key = f'{key}_' +d[key] = [1, 2, 3] + +print(f'd[{key}]={d[key]}') +print(f'd[{dummy_key}]={d[dummy_key]}') +#+END_SRC +#+BEGIN_SRC python +~Traceback (most recent call last): + File "", line 11, in + File "", line 9, in main +KeyError: 'toto_'~ +#+END_SRC + +** Exemple de la création d'une entrée dans le dictionnaire en cas d'absence de la clé +#+BEGIN_SRC python :results output +class DictSubclass(dict): + def __missing__(self, key): + ret = [] + self[key] = ret + return ret + +d = DictSubclass() +key = "toto" +dummy_key = f'{key}_' +d[key] = [1, 2, 3] + +print(f'd[{key}]={d[key]}') +print(f'd[{dummy_key}]={d[dummy_key]}') +#+END_SRC +#+RESULTS: +: d[toto]=[1, 2, 3] +: d[toto_]=[] +#+RESULT: + +* Références + * [[https://blog.finxter.com/python-__missing__-magic-method/][Python __missing__() Magic Method (finxter)]] + diff --git a/Deque/8oq2m41oivizbdltb6p9_2021-12-30_19-50-53.png b/Deque/8oq2m41oivizbdltb6p9_2021-12-30_19-50-53.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cfb6209495c1c7899b2e4a64b3cef76becfdce GIT binary patch literal 11772 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 literal 0 HcmV?d00001