moved files
This commit is contained in:
parent
cf5dd888c8
commit
d641cd04d9
633 changed files with 14435 additions and 3 deletions
2
.orgids
2
.orgids
File diff suppressed because one or more lines are too long
14
notes/2020-04-27T22:26:19-starting_with_org_roam.org
Normal file
14
notes/2020-04-27T22:26:19-starting_with_org_roam.org
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 4527ef88-68b4-4aef-882f-498ffc42e221
|
||||||
|
:END:
|
||||||
|
#+TITLE: Starting with org roam
|
||||||
|
#+AUTHOR: Yann Esposito
|
||||||
|
|
||||||
|
- tags :: [[id:a2225047-7563-4e4e-a031-7f69e060de6b][learning]] [[id:5579f7b0-3b00-4751-9211-9b9381481954][org-mode]] [[id:1a12a62f-f96f-48de-b634-bd548654c238][roam]]
|
||||||
|
- source :: [[https://blog.jethro.dev/posts/how_to_take_smart_notes_org/][How To Take Smart Notes With Org-mode (14 Feb 2020)]]
|
||||||
|
|
||||||
|
The workflow looks like.
|
||||||
|
|
||||||
|
1. Toggle show org-roam backlinks (SPC orr)
|
||||||
|
2. org-roam-find-file (SPC orf)
|
||||||
|
3. org-roam-insert (SPC ori)
|
22
notes/2020-05-11--08-48-25Z--test_org_roam_template.org
Normal file
22
notes/2020-05-11--08-48-25Z--test_org_roam_template.org
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 4d57b529-9ca8-4c6e-82e0-9f9c987ce2e8
|
||||||
|
:END:
|
||||||
|
#+TITLE: Test org-roam-templates
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:1a12a62f-f96f-48de-b634-bd548654c238][roam]] [[id:5579f7b0-3b00-4751-9211-9b9381481954][org-mode]] [[id:e0d4b962-b16e-499e-9c69-bdb196793e68][org-roam]] [[id:5e257538-beca-40de-8b8f-0733d241c96a][zettelkasten]]
|
||||||
|
|
||||||
|
https://github.com/org-roam/org-roam/blob/master/org-roam-capture.el#L82
|
||||||
|
|
||||||
|
I've been wondering how to make =org-roam= use the templates.
|
||||||
|
|
||||||
|
Just needed to do that.
|
||||||
|
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq org-roam-capture-templates
|
||||||
|
'(("d" "default" plain (function org-roam--capture-get-point)
|
||||||
|
"%?"
|
||||||
|
:file-name "%(format-time-string \"%Y-%m-%d--%H-%M-%SZ--${slug}\" (current-time) t)"
|
||||||
|
:head "#+TITLE: ${title}\n#+Author: Yann Esposito\n\ntags ::\nsource ::\n"
|
||||||
|
:unnarrowed t)))
|
||||||
|
#+end_src
|
9
notes/2020-05-11--22-17-32Z--sens_de_vie.org
Normal file
9
notes/2020-05-11--22-17-32Z--sens_de_vie.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: c861572c-ae30-427c-b366-5ecd0a1e3b6c
|
||||||
|
:END:
|
||||||
|
#+TITLE: sens-de-vie
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-12--06-05-57Z--ai.org
Normal file
9
notes/2020-05-12--06-05-57Z--ai.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 94844c4b-c906-47e6-abaf-91f6685ef4f6
|
||||||
|
:END:
|
||||||
|
#+TITLE: AI
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-12--06-06-14Z--agi.org
Normal file
9
notes/2020-05-12--06-06-14Z--agi.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 98c5f781-ba88-4eb6-a9d3-332abceca325
|
||||||
|
:END:
|
||||||
|
#+TITLE: AGI
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:94844c4b-c906-47e6-abaf-91f6685ef4f6][AI]]
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-12--06-34-07Z--emacs.org
Normal file
9
notes/2020-05-12--06-34-07Z--emacs.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e459f88b-5f6d-4547-b6b2-08d4815c1ede
|
||||||
|
:END:
|
||||||
|
#+TITLE: emacs
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-15--06-12-22Z--tidal.org
Normal file
9
notes/2020-05-15--06-12-22Z--tidal.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: d248036c-4117-4406-a230-030b4d2b0085
|
||||||
|
:END:
|
||||||
|
#+TITLE: tidal
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source :: https://tidalcycles.org/index.php/Tutorial
|
||||||
|
|
9
notes/2020-05-16--15-08-05Z--discoverability.org
Normal file
9
notes/2020-05-16--15-08-05Z--discoverability.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e4875af3-946f-4d3e-a263-3cda0851ba1b
|
||||||
|
:END:
|
||||||
|
#+TITLE: discoverability
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
70
notes/2020-05-17--09-11-13Z--impots_2019.org
Normal file
70
notes/2020-05-17--09-11-13Z--impots_2019.org
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: cde86e16-0c19-4537-b430-829d5eff9dcf
|
||||||
|
:END:
|
||||||
|
#+TITLE: Impots 2019
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:7051b4a2-b42b-4d6f-abf6-2396b68dc5ed][impots]] [[id:36b59945-0f45-40fe-8ade-56d2f1a287db][2019]] [[id:cae62687-f643-4ca5-9ea0-a0fc7560ee6d][appartements]] [[id:075fb95e-8fe7-41a4-85d6-c63d432f6afc][actions]]
|
||||||
|
source :: https://www.impots.gouv.fr/portail/
|
||||||
|
|
||||||
|
* Déclaration
|
||||||
|
|
||||||
|
- numero fiscal: 1208764994115
|
||||||
|
|
||||||
|
** Revenus
|
||||||
|
|
||||||
|
- Y: 94853 (retenu 14673€)
|
||||||
|
- K: 15677 (retenu 68€)
|
||||||
|
|
||||||
|
|
||||||
|
** Foncier 2044
|
||||||
|
|
||||||
|
Etape 3; Selectionner:
|
||||||
|
|
||||||
|
- Revenus: Micro foncier
|
||||||
|
- Charges: Investissement locatif (...,Duflot,...)
|
||||||
|
|
||||||
|
C.f.:
|
||||||
|
|
||||||
|
[[./assets/declaration-2019-helper.png]]
|
||||||
|
|
||||||
|
- [[file:assets/esposito.pdf][Revenus Fonciers 2019]]
|
||||||
|
- [227]: Taxe Foncière (612) - Taxe ordure ménagères (122) = 490
|
||||||
|
|
||||||
|
*** DUFLOT (7FK)
|
||||||
|
|
||||||
|
- 3060€ dans la case 7FK (investissement Duflot 2014)
|
||||||
|
|
||||||
|
** DONE Dons [7UD] - 260
|
||||||
|
CLOSED: [2020-06-01 Mon 15:58]
|
||||||
|
|
||||||
|
| assoc | don |
|
||||||
|
|-------------------------------+-----|
|
||||||
|
| [[file:assets/Unicef_2019.HEIC][Unicef 2019]] | 140 |
|
||||||
|
| [[file:assets/Medecins_sans_frontieres_2019.pdf][Medecins Sans Frontieres 2019]] | 120 |
|
||||||
|
|-------------------------------+-----|
|
||||||
|
*** DONE [6RS] AXA Declaration Epargne Retraite: 0970808057
|
||||||
|
CLOSED: [2020-06-01 Mon 15:58] SCHEDULED: <2020-05-18 Mon>
|
||||||
|
|
||||||
|
- Case 6RS
|
||||||
|
- Via l'outil ESS Access *EN FRANCAIS*
|
||||||
|
|
||||||
|
#+DOWNLOADED: file:///Users/yaesposi/Library/Mobile%20Documents/iCloud~com~appsonthemove~beorg/Documents/org/journal/assets/impots2019/article-83-PreRetraite.pdf @ 2020-06-01 15:57:56
|
||||||
|
[[file:assets/Déclaration/2020-06-01_15-57-56_article-83-PreRetraite.pdf][article-83-pre-retraite]]
|
||||||
|
|
||||||
|
|
||||||
|
- AXA reinit mot de passe 0970808057
|
||||||
|
|
||||||
|
- https://ere.axa.fr
|
||||||
|
- Identifiant Internet: 70475738
|
||||||
|
- Votre entreprise : CISCO SYSTEMS France
|
||||||
|
- Votre numéro d'adhésion : 2722501130200/00888
|
||||||
|
- email: yann.esposito@gmail.com
|
||||||
|
|
||||||
|
|
||||||
|
*** DONE Actions ESPP/RSU
|
||||||
|
CLOSED: [2020-06-01 Mon 15:58] SCHEDULED: <2020-05-18 Mon>
|
||||||
|
|
||||||
|
#+DOWNLOADED: file:///Users/yaesposi/Library/Mobile%20Documents/iCloud~com~appsonthemove~beorg/Documents/org/journal/assets/2020-05-19_13-37-48_cisco_systems_france__-_pre__sentation_rsu-so_-_v.13.05.19.pdf @ 2020-05-30 10:32:44
|
||||||
|
[[file:assets/Déclaration/2020-05-30_10-32-44_2020-05-19_13-37-48_cisco_systems_france__-_pre__sentation_rsu-so_-_v.13.05.19.pdf][Presentation Actions Cisco]]
|
||||||
|
|
9
notes/2020-05-17--09-11-34Z--impots.org
Normal file
9
notes/2020-05-17--09-11-34Z--impots.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 7051b4a2-b42b-4d6f-abf6-2396b68dc5ed
|
||||||
|
:END:
|
||||||
|
#+TITLE: impots
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
41
notes/2020-05-17--09-13-02Z--tidal_resources.org
Normal file
41
notes/2020-05-17--09-13-02Z--tidal_resources.org
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 088d51ce-bf1e-4717-b3a6-f2dd6d445836
|
||||||
|
:END:
|
||||||
|
#+TITLE: Tidalcycles Resources
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:d248036c-4117-4406-a230-030b4d2b0085][tidal]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
* MIDI
|
||||||
|
|
||||||
|
Video: [[file:assets/Tidal Acid Jam (MIDI test)--fpSKvxOA0k.mkv][Tidal Acid Jam (MIDI test)]] ; https://www.youtube.com/watch?v=-fpSKvxOA0k
|
||||||
|
|
||||||
|
Init MIDI
|
||||||
|
|
||||||
|
- https://www.youtube.com/watch?v=cdB0dBGiar4
|
||||||
|
- https://tidalcycles.org/index.php/SuperDirt_MIDI_Tutorial
|
||||||
|
|
||||||
|
* Chiptune like
|
||||||
|
|
||||||
|
https://www.youtube.com/watch?v=MbCNdB3hfpc&feature=youtu.be
|
||||||
|
|
||||||
|
#+begin_src tidal
|
||||||
|
import qualified Sound.Tidal.Chords as Chords
|
||||||
|
|
||||||
|
let mute = const silence
|
||||||
|
|
||||||
|
do
|
||||||
|
let arp = "[0 0 2 4]*2"
|
||||||
|
pat = "<0 2 5 4>"
|
||||||
|
oct = -2
|
||||||
|
d1 $ fast 2 $ stack [
|
||||||
|
n (toScale Chords.major (arp + pat) + 2*oct) # s "superchip" # release 0.075,
|
||||||
|
n ("0*8" + (slow 4 pat) - 14) # s "superchip" # release 0.3 # cut 2
|
||||||
|
] # orbit 1 # room 0.15 # size 0.93 # gain 0.9
|
||||||
|
d2 $ fast 2 $ stack [
|
||||||
|
"bd:10(3,8)",
|
||||||
|
s "~ sn" # n 3,
|
||||||
|
s "[~ cp:1]*2"
|
||||||
|
] # orbit 2 # room 0.05 # size 0.2
|
||||||
|
#+end_src
|
9
notes/2020-05-17--09-25-08Z--2019.org
Normal file
9
notes/2020-05-17--09-25-08Z--2019.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 36b59945-0f45-40fe-8ade-56d2f1a287db
|
||||||
|
:END:
|
||||||
|
#+TITLE: 2019
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-17--09-40-31Z--appartements.org
Normal file
9
notes/2020-05-17--09-40-31Z--appartements.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: cae62687-f643-4ca5-9ea0-a0fc7560ee6d
|
||||||
|
:END:
|
||||||
|
#+TITLE: appartements
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-17--11-34-48Z--actions.org
Normal file
9
notes/2020-05-17--11-34-48Z--actions.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 075fb95e-8fe7-41a4-85d6-c63d432f6afc
|
||||||
|
:END:
|
||||||
|
#+TITLE: actions
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-24--06-48-59Z--fp.org
Normal file
9
notes/2020-05-24--06-48-59Z--fp.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 6889af65-5d2e-4ad7-9008-50e067580f68
|
||||||
|
:END:
|
||||||
|
#+TITLE: fp
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
38
notes/2020-05-24--08-31-28Z--marketin_for_engineers.org
Normal file
38
notes/2020-05-24--08-31-28Z--marketin_for_engineers.org
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: fb82e84c-955c-4602-86f9-cbd40f5953db
|
||||||
|
:END:
|
||||||
|
#+TITLE: Marketin For Engineers
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:47fcfc15-ce20-423d-ae07-1d5f89ae4fdc][startup]] [[id:6ed543d2-59f4-4f06-8728-a5763af5843d][marketing]]
|
||||||
|
source :: https://github.com/LisaDziuba/Marketing-for-Engineers
|
||||||
|
|
||||||
|
* Plan
|
||||||
|
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers/blob/master/README.md#-user-research][User Research]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers/blob/master/README.md#mag_right-market-research][Market Research]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#triumph-marketing-without-budget][Marketing without Budget]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#-content-marketing][Content Marketing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#sunglasses-personal-blog][Personal blog]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#green_book-medium-marketing][Medium Marketing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#mega-promotion-of-your-content][Promotion of your content]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#influencer-marketing][Influencer Marketing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#cat-marketing-for-product-hunt-launch][Marketing for Product Hunt Launch]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#-social-media-marketing][Social Media Marketing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#-twitter][Twitter]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#facebook][Facebook]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#reddit][Reddit]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#-linkedin][LinkedIn]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#quora][Quora]]
|
||||||
|
- Instagram (coming soon)
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#love_letter-lifecycle-email-marketing][Lifecycle Email Marketing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#fearful-cold-email-marketing][Cold Emails Marketing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#bowtie-building-partnerships][Building Partnerships]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#%EF%B8%8F-psychology-in-marketing][Psychology in Marketing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers/blob/master/README.md#moneybag-business-model-and-pricing][Business Model and Pricing]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers/blob/master/README.md#-marketing-automation][Marketing Automation]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers/blob/master/README.md#moving-to-saas-model][Moving to SaaS model]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#other-useful-materials][Other Useful Materials]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#-authors][Authors]]
|
||||||
|
- [[https://github.com/LisaDziuba/Marketing-for-Engineers#future-plans][Future Plans]]
|
||||||
|
|
9
notes/2020-05-24--08-32-15Z--startup.org
Normal file
9
notes/2020-05-24--08-32-15Z--startup.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 47fcfc15-ce20-423d-ae07-1d5f89ae4fdc
|
||||||
|
:END:
|
||||||
|
#+TITLE: startup
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-24--08-32-33Z--marketing.org
Normal file
9
notes/2020-05-24--08-32-33Z--marketing.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 6ed543d2-59f4-4f06-8728-a5763af5843d
|
||||||
|
:END:
|
||||||
|
#+TITLE: marketing
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:47fcfc15-ce20-423d-ae07-1d5f89ae4fdc][startup]]
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-25--08-24-23Z--politic.org
Normal file
9
notes/2020-05-25--08-24-23Z--politic.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 6bcf15bd-0c37-4394-a0c0-3ba601332d22
|
||||||
|
:END:
|
||||||
|
#+TITLE: politic
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-25--19-54-12Z--shake.org
Normal file
9
notes/2020-05-25--19-54-12Z--shake.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e5676f7e-eb22-4ec5-ac6d-b73eee7a4996
|
||||||
|
:END:
|
||||||
|
#+TITLE: shake
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:1243ac34-78e3-421a-968d-af8a0bbc01d3][build-system]]
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-25--19-54-25Z--build_system.org
Normal file
9
notes/2020-05-25--19-54-25Z--build_system.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 1243ac34-78e3-421a-968d-af8a0bbc01d3
|
||||||
|
:END:
|
||||||
|
#+TITLE: build-system
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:e5676f7e-eb22-4ec5-ac6d-b73eee7a4996][shake]]
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-26--06-13-13Z--idris.org
Normal file
9
notes/2020-05-26--06-13-13Z--idris.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: a6f5e6db-b44d-4715-afc2-58599a070b81
|
||||||
|
:END:
|
||||||
|
#+TITLE: idris
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:155859f9-3f3c-4cea-bce4-70f24fca05fa][functional programming]]
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-26--06-13-41Z--functional_programming.org
Normal file
9
notes/2020-05-26--06-13-41Z--functional_programming.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 155859f9-3f3c-4cea-bce4-70f24fca05fa
|
||||||
|
:END:
|
||||||
|
#+TITLE: functional programming
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:a6f5e6db-b44d-4715-afc2-58599a070b81][idris]] [[id:debfbdb6-03a6-478e-8316-bce0119c0dd7][clojure]] [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]]
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-26--06-16-14Z--clojure.org
Normal file
9
notes/2020-05-26--06-16-14Z--clojure.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: debfbdb6-03a6-478e-8316-bce0119c0dd7
|
||||||
|
:END:
|
||||||
|
#+TITLE: clojure
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:155859f9-3f3c-4cea-bce4-70f24fca05fa][functional programming]]
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-05-26--06-19-53Z--haskell.org
Normal file
9
notes/2020-05-26--06-19-53Z--haskell.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 28b1b988-b2de-46aa-9a47-78a94aa5e2ce
|
||||||
|
:END:
|
||||||
|
#+TITLE: haskell
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:155859f9-3f3c-4cea-bce4-70f24fca05fa][functional programming]]
|
||||||
|
source ::
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 0ffa6c7e-87c3-4cbc-8896-7208462f9268
|
||||||
|
:END:
|
||||||
|
#+TITLE: Idiomatic Clojure: Mixing Side Effects and Iteration
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:debfbdb6-03a6-478e-8316-bce0119c0dd7][clojure]]
|
||||||
|
source :: [[https://bsless.github.io/side-effects/][Idiomatic Clojure: Mixing Side Effects and Iteration]]
|
||||||
|
|
||||||
|
Main lessons:
|
||||||
|
|
||||||
|
- Never use ~doall~
|
||||||
|
- use ~mapv~ or ~(into [] (map f) coll)~ if you want to retrieve the elements
|
||||||
|
- use ~(run! f coll)~ or ~doseq~
|
||||||
|
|
10
notes/2020-05-27--07-49-35Z--evolving_non_determinism.org
Normal file
10
notes/2020-05-27--07-49-35Z--evolving_non_determinism.org
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 986259da-53b4-4d02-a5fd-c19428bda5c2
|
||||||
|
:END:
|
||||||
|
#+TITLE: Evolving non-determinism
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]] [[id:155859f9-3f3c-4cea-bce4-70f24fca05fa][functional programming]]
|
||||||
|
source :: https://oleg.fi/gists/posts/2020-05-26-evolving-non-determinism.html
|
||||||
|
|
||||||
|
A nice article about evolving algorithms.
|
|
@ -0,0 +1,13 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: f78519b0-3e95-448e-821c-06ab969b5e26
|
||||||
|
:END:
|
||||||
|
#+TITLE: org-clone-subtree-with-time-shift
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:5579f7b0-3b00-4751-9211-9b9381481954][org-mode]]
|
||||||
|
source :: https://karl-voit.at/2017/01/15/org-clone-subtree-with-time-shift/
|
||||||
|
|
||||||
|
Main lesson, use ~org-clone-subtree-with-time-shift~.
|
||||||
|
This will ask number of copies and the recurring date.
|
||||||
|
|
||||||
|
Just did that for drugs I need to take for only 6 days.
|
17
notes/2020-05-29--21-36-26Z--mail.org
Normal file
17
notes/2020-05-29--21-36-26Z--mail.org
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: eece595d-9089-47bd-9393-08cd843826c4
|
||||||
|
:END:
|
||||||
|
#+TITLE: mail
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
||||||
|
Use gmi (gmailieer).
|
||||||
|
|
||||||
|
#+begin_src
|
||||||
|
cd ~/mail
|
||||||
|
mkdir yann.esposito.gmail
|
||||||
|
gmi pull
|
||||||
|
gmi sync
|
||||||
|
#+end_src
|
33
notes/2020-05-31--00-07-38Z--haskell_criticisms.org
Normal file
33
notes/2020-05-31--00-07-38Z--haskell_criticisms.org
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 87b3b7b5-abd0-4efc-9a70-6420a88c3cd5
|
||||||
|
:END:
|
||||||
|
#+TITLE: Haskell criticisms
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]]
|
||||||
|
source :: https://news.ycombinator.com/item?id=23364485
|
||||||
|
|
||||||
|
We dance around this issue in the comments to every Haskell story, but the
|
||||||
|
reason Haskell is hard to market is that it's bad.
|
||||||
|
It's a research language being shoehorned into production by a few people
|
||||||
|
who really love it.
|
||||||
|
Some details of this have been given in this thread; let me suggest the
|
||||||
|
following threads for more:
|
||||||
|
|
||||||
|
1) https://www.reddit.com/r/ocaml/comments/3ifwe9/what_are_ocamlers_critiques_of_haskell/cugohyn/
|
||||||
|
2) https://www.reddit.com/r/ocaml/comments/e7g4nb/haskell_vs_ocaml/fa4bnsw/
|
||||||
|
|
||||||
|
Yes, the Haskell community hates that guy and considers him a troll.
|
||||||
|
But he does functional programming professionally as part of a private
|
||||||
|
consultancy and wrote a book on OCaml.
|
||||||
|
If anyone's equipped to understand what's wrong with Haskell, it's him.
|
||||||
|
Haskell has had 30 years to get its act together.
|
||||||
|
Any benefits it has are drowned out by a sea of buggy tooling and
|
||||||
|
accidental complexity (monads, etc.).
|
||||||
|
Ask yourself this: if there are literally billions of dollars in industry
|
||||||
|
riding on writing efficient and correct software, and Haskell is such an
|
||||||
|
obvious productivity win, why does it have a market share that rounds to
|
||||||
|
zero?
|
||||||
|
Time to move on.
|
||||||
|
|
||||||
|
|
17
notes/2020-05-31--15-45-39Z--krystelle.org
Normal file
17
notes/2020-05-31--15-45-39Z--krystelle.org
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 02fadd2f-42db-41a5-b3c9-b60eb1c5928c
|
||||||
|
:END:
|
||||||
|
#+TITLE: Krystelle idées cadeaux
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-05-31 Sun]
|
||||||
|
|
||||||
|
tags :: [[id:c194cbc4-d92e-4b68-a371-1cb91803ab8f][family]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
Juste un endroit pour centraliser les idées potentielles.
|
||||||
|
Les thèmes:
|
||||||
|
|
||||||
|
- produits naturel
|
||||||
|
- zen
|
||||||
|
- jardinage, plantes
|
||||||
|
- thé
|
9
notes/2020-05-31--15-48-11Z--family.org
Normal file
9
notes/2020-05-31--15-48-11Z--family.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: c194cbc4-d92e-4b68-a371-1cb91803ab8f
|
||||||
|
:END:
|
||||||
|
#+TITLE: family
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-06-02--11-31-33Z--nix.org
Normal file
9
notes/2020-06-02--11-31-33Z--nix.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 6e4c4d62-215d-4e0d-9361-0ff64af6f4a9
|
||||||
|
:END:
|
||||||
|
#+TITLE: nix
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-02]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-06-02--11-31-55Z--geek.org
Normal file
9
notes/2020-06-02--11-31-55Z--geek.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: b052c72a-806f-44a6-ac5f-0b47eb216640
|
||||||
|
:END:
|
||||||
|
#+TITLE: geek
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-02]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-06-03--19-49-18Z--testing.org
Normal file
9
notes/2020-06-03--19-49-18Z--testing.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: c7184c4b-9573-497b-a215-ba7e75a6326e
|
||||||
|
:END:
|
||||||
|
#+TITLE: testing
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-03]
|
||||||
|
|
||||||
|
tags :: [[id:bec11f07-ffed-487b-9059-bdf6696548ab][programming]]
|
||||||
|
source ::
|
9
notes/2020-06-03--19-49-30Z--programming.org
Normal file
9
notes/2020-06-03--19-49-30Z--programming.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: bec11f07-ffed-487b-9059-bdf6696548ab
|
||||||
|
:END:
|
||||||
|
#+TITLE: programming
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-03]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
|
@ -0,0 +1,70 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 6b88927e-90ab-44c3-ae86-169e7704c480
|
||||||
|
:END:
|
||||||
|
#+TITLE: Zettelkasten -- How One German Scholar Was So Freakishly Productive
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-05]
|
||||||
|
|
||||||
|
tags :: [[id:5579f7b0-3b00-4751-9211-9b9381481954][org-mode]] [[id:af26ee30-6392-40e3-bc26-a7e887947293][note taking]] [[id:e0d4b962-b16e-499e-9c69-bdb196793e68][org-roam]] [[id:5e257538-beca-40de-8b8f-0733d241c96a][zettelkasten]]
|
||||||
|
source :: https://writingcooperative.com/zettelkasten-how-one-german-scholar-was-so-freakishly-productive-997e4e0ca125
|
||||||
|
|
||||||
|
* The Zettelkasten principles
|
||||||
|
|
||||||
|
|
||||||
|
1. *The principle of atomicity*: The term was coined by Christian Tietze.
|
||||||
|
It means that each note should contain one idea and one idea only.
|
||||||
|
This makes it possible to link ideas with a laser focus.
|
||||||
|
2. *The principle of autonomy*: Each note should be autonomous, meaning it
|
||||||
|
should be self-contained and comprehensible on its own.
|
||||||
|
This allows notes to be moved, processed, separated, and concatenated
|
||||||
|
independently of its neighbors.
|
||||||
|
It also ensures that notes remain useful even if the original source of
|
||||||
|
information disappears.
|
||||||
|
3. *Always link your notes*: Whenever you add a note, make sure to link it to
|
||||||
|
already existing notes.
|
||||||
|
Avoid notes that are disconnected from other notes.
|
||||||
|
As Luhmann himself put it, “each note is just an element that derives its
|
||||||
|
quality from the network of links in the system.
|
||||||
|
A note that is not connected to the network will be lost, will be forgotten
|
||||||
|
by the Zettelkasten” (original in German).
|
||||||
|
4. *Explain why you’re linking notes*: Whenever you are connecting two notes by
|
||||||
|
a link, make sure to briefly explain why you are linking them.
|
||||||
|
Otherwise, years down the road when you revisit your notes, you may have no
|
||||||
|
idea why you connected them.
|
||||||
|
5. *Use your own words*: Don’t copy and paste.
|
||||||
|
If you come across an interesting idea and want to add it to your
|
||||||
|
Zettelkasten, you must express that idea with your own words, in a way that
|
||||||
|
you’ll be sure to understand years later.
|
||||||
|
Don’t turn your Zettelkasten into a dump of copy-and-pasted information.
|
||||||
|
6. *Keep references*: Always add references to your notes so that you know where
|
||||||
|
you got an idea from.
|
||||||
|
This prevents plagiarism and makes it easy for you to revisit the original
|
||||||
|
source later on.
|
||||||
|
7. *Add your own thoughts to the Zettelkasten*: If you have thoughts of your
|
||||||
|
own, add them to the Zettelkasten as notes while keeping in mind the
|
||||||
|
principle of atomicity, autonomy, and the need for linking.
|
||||||
|
8. *Don’t worry about structure*: Don’t worry about putting notes in neat
|
||||||
|
folders or into unique preconceived categories.
|
||||||
|
As Schmidt put it, in a Zettelkasten “there are no privileged positions”
|
||||||
|
and “there is no top and no bottom.”
|
||||||
|
The organization develops organically.
|
||||||
|
9. *Add connection notes*: As you begin to see connections among seemingly
|
||||||
|
random notes, create connection notes, that is, specific notes whose
|
||||||
|
purpose is to link together other notes and explain their relationship.
|
||||||
|
10. *Add outline notes*: As ideas begin to coalesce into themes, create outline
|
||||||
|
notes.
|
||||||
|
An outline note is a note that simply contains a sequence of links to other
|
||||||
|
notes, putting those other notes into a particular order to create a story,
|
||||||
|
narrative, or argument.
|
||||||
|
11. *Never delete*: Don’t delete old notes.
|
||||||
|
Instead, link to new notes that explain what’s wrong with the old ones.
|
||||||
|
In that way, your Zettelkasten will reflect how your thinking has evolved
|
||||||
|
over time, which will prevent hindsight bias.
|
||||||
|
Moreover, if you don’t delete, you might revisit old ideas that may turn
|
||||||
|
out to be correct after all.
|
||||||
|
12. *Add notes without fear*: You can never have too much information in your
|
||||||
|
Zettelkasten.
|
||||||
|
At worst, you’ll add notes that won’t be of immediate use.
|
||||||
|
But adding more notes will never break your Zettelkasten or interfere with
|
||||||
|
its proper operation.
|
||||||
|
Remember, Luhmann had 90,000 notes in his Zettelkasten!
|
9
notes/2020-06-05--08-52-23Z--note_taking.org
Normal file
9
notes/2020-06-05--08-52-23Z--note_taking.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: af26ee30-6392-40e3-bc26-a7e887947293
|
||||||
|
:END:
|
||||||
|
#+TITLE: note taking
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-05]
|
||||||
|
|
||||||
|
tags :: [[id:5579f7b0-3b00-4751-9211-9b9381481954][org-mode]]
|
||||||
|
source ::
|
9
notes/2020-06-05--09-01-34Z--org_roam.org
Normal file
9
notes/2020-06-05--09-01-34Z--org_roam.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e0d4b962-b16e-499e-9c69-bdb196793e68
|
||||||
|
:END:
|
||||||
|
#+TITLE: org-roam
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-05]
|
||||||
|
|
||||||
|
tags :: [[id:5579f7b0-3b00-4751-9211-9b9381481954][org-mode]] [[id:af26ee30-6392-40e3-bc26-a7e887947293][note taking]] [[id:5e257538-beca-40de-8b8f-0733d241c96a][zettelkasten]] [[id:1a12a62f-f96f-48de-b634-bd548654c238][roam]]
|
||||||
|
source :: https://github.com/org-roam/org-roam
|
9
notes/2020-06-05--09-02-50Z--zettelkasten.org
Normal file
9
notes/2020-06-05--09-02-50Z--zettelkasten.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 5e257538-beca-40de-8b8f-0733d241c96a
|
||||||
|
:END:
|
||||||
|
#+TITLE: zettelkasten
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-05]
|
||||||
|
|
||||||
|
tags :: [[id:af26ee30-6392-40e3-bc26-a7e887947293][note taking]]
|
||||||
|
source :: https://writingcooperative.com/zettelkasten-how-one-german-scholar-was-so-freakishly-productive-997e4e0ca125
|
9
notes/2020-06-11--10-02-25Z--opinion.org
Normal file
9
notes/2020-06-11--10-02-25Z--opinion.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 474d7fcb-1ed6-4e89-91cc-bf9273b7f1bd
|
||||||
|
:END:
|
||||||
|
#+TITLE: opinion
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-11]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-06-11--10-02-48Z--social_media.org
Normal file
9
notes/2020-06-11--10-02-48Z--social_media.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 92d5ea2a-7604-4fe0-81b5-ac019a0b350e
|
||||||
|
:END:
|
||||||
|
#+TITLE: social-media
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-11]
|
||||||
|
|
||||||
|
tags :: [[id:fee88808-d9a1-4a80-abfc-3222bf0d3bd8][internet]]
|
||||||
|
source ::
|
9
notes/2020-06-11--10-03-12Z--internet.org
Normal file
9
notes/2020-06-11--10-03-12Z--internet.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: fee88808-d9a1-4a80-abfc-3222bf0d3bd8
|
||||||
|
:END:
|
||||||
|
#+TITLE: internet
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-11]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
46
notes/2020-06-12--09-32-26Z--why_no_defmethod.org
Normal file
46
notes/2020-06-12--09-32-26Z--why_no_defmethod.org
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 4a838201-9b9c-44e6-aec8-017663363627
|
||||||
|
:END:
|
||||||
|
#+TITLE: Why no defmethod?
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-12]
|
||||||
|
|
||||||
|
tags :: [[id:debfbdb6-03a6-478e-8316-bce0119c0dd7][clojure]] [[id:155859f9-3f3c-4cea-bce4-70f24fca05fa][functional programming]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
The main reason is that it is harder to reason about in our environment.
|
||||||
|
~defmethod~ is exactly like a ~cond~ or ~case~ but potentially distributed
|
||||||
|
between multiple files.
|
||||||
|
So:
|
||||||
|
|
||||||
|
#+begin_src clojure
|
||||||
|
(ns foo.bar
|
||||||
|
(:require [baz]))
|
||||||
|
|
||||||
|
...300 lines of code...
|
||||||
|
|
||||||
|
(foo :x) => "NICE X"
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
And after a few weeks someone add a require:
|
||||||
|
|
||||||
|
#+begin_src clojure
|
||||||
|
(ns foo.bar
|
||||||
|
(:require [[baz]
|
||||||
|
[pownd.core]]))
|
||||||
|
|
||||||
|
...300 lines of code...
|
||||||
|
|
||||||
|
(foo :x) => "PWND!!!!"
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
So ~defmethod~ is harder to reason about because the logic is distributed.
|
||||||
|
And as a developer it is harder to reason statically about the code.
|
||||||
|
|
||||||
|
Still, this could totally be fine for clojure libraries doing "magic" stuff.
|
||||||
|
There is a big difference between the code aimed for a production
|
||||||
|
environment /application/ written by a team and a codebase for a /library/.
|
||||||
|
|
||||||
|
So "never use defmethod" is a way of saying that it is only allowed if you
|
||||||
|
really tried your best not to use it but this does not make sense, and you
|
||||||
|
can show why to the rest of the team.
|
|
@ -0,0 +1,18 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 450946b7-8a6b-43d1-b330-95f3a6735bba
|
||||||
|
:END:
|
||||||
|
#+TITLE: The performance of ghcied 0.2.0
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-13]
|
||||||
|
|
||||||
|
tags :: [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]] [[id:03a8f444-b907-447c-9554-fc97d49336df][benchmarks]]
|
||||||
|
source :: https://mpickering.github.io/ide/posts/2020-06-12-performance-of-ghcide-020.html
|
||||||
|
|
||||||
|
* Benchmarks
|
||||||
|
|
||||||
|
Benchmarks should focus on both performance and space usage to prevent
|
||||||
|
introducing space leaks.
|
||||||
|
|
||||||
|
Benchmarks made using a shake script: https://github.com/digital-asset/ghcide/pull/629
|
||||||
|
|
||||||
|
Before the benchmarks some improvement weren't obvious.
|
9
notes/2020-06-13--17-25-54Z--benchmarks.org
Normal file
9
notes/2020-06-13--17-25-54Z--benchmarks.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 03a8f444-b907-447c-9554-fc97d49336df
|
||||||
|
:END:
|
||||||
|
#+TITLE: benchmarks
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-13]
|
||||||
|
|
||||||
|
tags :: [[id:bec11f07-ffed-487b-9059-bdf6696548ab][programming]]
|
||||||
|
source ::
|
|
@ -0,0 +1,13 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 8d0da915-6bf2-45e7-9c44-a3f9e6ad9288
|
||||||
|
:END:
|
||||||
|
#+TITLE: Gabriel Gonzalez - A bare-bones Twitter clone implemented with Haskell + Nix @ ZuriHac 2020
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-13]
|
||||||
|
|
||||||
|
tags :: [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]] [[id:da7e2db9-fa16-436b-a99a-c5b020acfc85][zurihac]]
|
||||||
|
source :: https://www.youtube.com/watch?v=Q3qjTVcU9cg&list=PLiU7KJ5_df6aZbNfh_TUJt-6w9N3rYkTX&index=2&t=0s
|
||||||
|
|
||||||
|
Introduction by Jasper to Gabriel (dhall, etc...)
|
||||||
|
|
||||||
|
The implementaiton is here: https://github.com/Gabriel439/simple-twitter
|
11
notes/2020-06-13--17-47-28Z--zurihac.org
Normal file
11
notes/2020-06-13--17-47-28Z--zurihac.org
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: da7e2db9-fa16-436b-a99a-c5b020acfc85
|
||||||
|
:END:
|
||||||
|
#+TITLE: zurihac
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-13]
|
||||||
|
|
||||||
|
tags :: [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]] [[id:155859f9-3f3c-4cea-bce4-70f24fca05fa][functional programming]]
|
||||||
|
source :: https://zfoh.ch/zurihac2020/
|
||||||
|
|
||||||
|
- https://www.youtube.com/playlist?list=PLiU7KJ5_df6aZbNfh_TUJt-6w9N3rYkTX
|
|
@ -0,0 +1,13 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 38d2b532-6453-49b6-b668-36ca38a376b0
|
||||||
|
:END:
|
||||||
|
#+TITLE: Datatype-Generic Programming - Andre Loh @Zurihac 2020
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-13]
|
||||||
|
|
||||||
|
tags :: [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]] [[id:da7e2db9-fa16-436b-a99a-c5b020acfc85][zurihac]]
|
||||||
|
source :: https://www.youtube.com/watch?v=pwnrfREbhWY
|
||||||
|
|
||||||
|
Inlining Trees via subset of template haskell.
|
||||||
|
|
||||||
|
https://github.com/well-typed/gp-zurihac-2020
|
9
notes/2020-06-18--15-24-25Z--philo.org
Normal file
9
notes/2020-06-18--15-24-25Z--philo.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 1b212806-1cc4-4881-ab7c-688568474e20
|
||||||
|
:END:
|
||||||
|
#+TITLE: philo
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-18]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-06-18--15-24-45Z--philo.org
Normal file
9
notes/2020-06-18--15-24-45Z--philo.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 42ebaac6-b37b-4680-a06b-dc7e0b7ad066
|
||||||
|
:END:
|
||||||
|
#+TITLE: philo
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-06-18]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-07-01--07-16-54Z--stress.org
Normal file
9
notes/2020-07-01--07-16-54Z--stress.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 6abfc7b7-2bef-45bc-a35e-b0b43e45492d
|
||||||
|
:END:
|
||||||
|
#+TITLE: stress
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-07-01]
|
||||||
|
|
||||||
|
tags :: [[id:ddb5dbe8-64cb-44d6-9149-6740d30635a3][psychology]]
|
||||||
|
source ::
|
9
notes/2020-07-01--07-25-51Z--psychology.org
Normal file
9
notes/2020-07-01--07-25-51Z--psychology.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: ddb5dbe8-64cb-44d6-9149-6740d30635a3
|
||||||
|
:END:
|
||||||
|
#+TITLE: psychology
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-07-01]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-07-02--22-27-35Z--macos.org
Normal file
9
notes/2020-07-02--22-27-35Z--macos.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 1ea3c870-142b-4289-bb56-5c7f5b14ea75
|
||||||
|
:END:
|
||||||
|
#+TITLE: macos
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-07-02]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
|
@ -0,0 +1,11 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 7a8d9311-592d-4c20-a841-82fc72a032c6
|
||||||
|
:END:
|
||||||
|
#+TITLE: David Lynch explains Transcendantal Meditation
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-08-16]
|
||||||
|
|
||||||
|
tags :: [[id:083bf71c-44d0-465a-b74d-6bb3691f9c81][meditation]]
|
||||||
|
source :: https://youtu.be/Em3XplqnoF4
|
||||||
|
|
||||||
|
|
9
notes/2020-08-16--19-59-35Z--meditation.org
Normal file
9
notes/2020-08-16--19-59-35Z--meditation.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 083bf71c-44d0-465a-b74d-6bb3691f9c81
|
||||||
|
:END:
|
||||||
|
#+TITLE: meditation
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-08-16]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
144
notes/2020-08-24--18-14-53Z--cistercien.org
Normal file
144
notes/2020-08-24--18-14-53Z--cistercien.org
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: ba399c55-5ea5-4b58-a605-574fd2f2f18d
|
||||||
|
:END:
|
||||||
|
#+TITLE: cistercien
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-08-24]
|
||||||
|
|
||||||
|
tags :: [[id:c245de18-fbc3-40c8-88c7-21e7636768fc][histoire]]
|
||||||
|
source :: https://fr.wikipedia.org/wiki/Ordre_cistercien
|
||||||
|
|
||||||
|
en latin: Ordo cisterciensis
|
||||||
|
|
||||||
|
Restauration de la règle bénédictine.
|
||||||
|
|
||||||
|
- ascétisme
|
||||||
|
- rigueur liturgique
|
||||||
|
- travail comme valeur cardinale
|
||||||
|
|
||||||
|
* Naissance et expansion de l'ordre
|
||||||
|
|
||||||
|
Poussé par Bernard de Clairvaux (1090-1153).
|
||||||
|
Il est le maître spirituel des cisterciens.
|
||||||
|
Inclination pour la solitude et la méditation.
|
||||||
|
Formé au combat, il préfère devenir moine.
|
||||||
|
Persuasif et charismatique.
|
||||||
|
|
||||||
|
Il accable les autres ordres et les clercs et prélats qui succombent aux
|
||||||
|
richesses.
|
||||||
|
Il n'hésite pas de ruse, mauvaise foi ou injure pour abatre son adversaire.
|
||||||
|
Cependant il ne s'est jamais mis Rome à dos.
|
||||||
|
|
||||||
|
Il accélère les fondations de nouvelles abbayes durant sa vie.
|
||||||
|
- 762 monastères.
|
||||||
|
- 341 maisons dont 80 "filles" directes.
|
||||||
|
|
||||||
|
* Règle bénédictine
|
||||||
|
|
||||||
|
Syntèse entre exigences contraires:
|
||||||
|
|
||||||
|
- indépendance économique
|
||||||
|
- activité liturgique
|
||||||
|
- activité apostolique
|
||||||
|
- refus du monde
|
||||||
|
|
||||||
|
La règle:
|
||||||
|
|
||||||
|
- stricte observance de la règle bénédictine
|
||||||
|
- recherche de l'isolement
|
||||||
|
- pauvreté intégrale
|
||||||
|
- refus des bénéfices ecclésiastiques
|
||||||
|
- travail manuel
|
||||||
|
- autarcie
|
||||||
|
|
||||||
|
Équilibre: ascèse et goût de la culture.
|
||||||
|
|
||||||
|
Exemption de juridiction épiscopale permet de mettre deux institutions:
|
||||||
|
|
||||||
|
- visites des abbés-pères
|
||||||
|
- chapitre général annuel
|
||||||
|
|
||||||
|
Le père de l'abbaye mère descend et controle ce que fait l'abbaye fille.
|
||||||
|
Pouvoir de révoquer le responsable et de le remplacer.
|
||||||
|
Une fois par an.
|
||||||
|
|
||||||
|
* Les Abbayes
|
||||||
|
|
||||||
|
Une abbaye mère qui fait des filles.
|
||||||
|
L'abbaye envoie des moines qui vont faire une autre abbaye.
|
||||||
|
|
||||||
|
Chaque abbaye est autonome, cachée, et concentrée sur leur mission.
|
||||||
|
|
||||||
|
Les abbayes sont cachées et pas faites pour être des lieux d'accueil ou des
|
||||||
|
lieux de cultes publics.
|
||||||
|
Ce sont des lieux reclus, isolés, pour laisser les moines se concentrer sur
|
||||||
|
leur mission.
|
||||||
|
|
||||||
|
Charte de charité postérieure (leur constitution)
|
||||||
|
Cîteau reste l'autorité spirituelle gardienne de l'observance de la sainte règle.
|
||||||
|
|
||||||
|
Chaque monastère doit secours aux fondations les plus démunies.
|
||||||
|
Les abbayes mères assurant le contrôle et l'élection des abbés au sein des
|
||||||
|
abbayes filles.
|
||||||
|
|
||||||
|
Chaque abbé doit se rendre à Citeau opur le Chapitre général.
|
||||||
|
|
||||||
|
* Difficultés de l'ordre
|
||||||
|
|
||||||
|
L'ordre devient populaire et reçoit des dons.
|
||||||
|
Le dévelopement économmique est peu compatible avec la vocation initialie
|
||||||
|
de pauvreté qui a fait le succès de l'ordre.
|
||||||
|
|
||||||
|
Guerres, changements des temps, immision de la papauté.
|
||||||
|
En 1422, reforme de l'ordre pour retrouver les principes fondamentaux.
|
||||||
|
Réafirmation des exigences et de la discipline.
|
||||||
|
|
||||||
|
* Vie dans le monastère
|
||||||
|
|
||||||
|
- Silence, obéissance, frugalité
|
||||||
|
- communication non verbales, un langage par signes.
|
||||||
|
|
||||||
|
Règle du silence pour ne pas être détourné de Dieu, mais les travaux
|
||||||
|
quotidiens exigent qu'ils puissent communiquer.
|
||||||
|
|
||||||
|
** Groupes
|
||||||
|
|
||||||
|
- les moines (frères clercs) qui savent lire le latin.
|
||||||
|
- les moins "laïcs", qui ne savent pas lire
|
||||||
|
- les convers, ne font pas vœux religieux, portent la barbe (travailleurs)
|
||||||
|
- les novices
|
||||||
|
- les infirmes (un des 4 groupes, mais ne participent pas à tout)
|
||||||
|
- familiers attachés au monastère
|
||||||
|
|
||||||
|
1 an de noviciat, les novices sont initiés.
|
||||||
|
S'ils le demandent et que la commmunauté accepte, ils sont admis à la "profession".
|
||||||
|
|
||||||
|
Certains frères avec des responsabilités particulières:
|
||||||
|
- tenue du chapitre, administration
|
||||||
|
|
||||||
|
** Prières
|
||||||
|
|
||||||
|
durées en fonction de l'heure du lever du soleil et du coucher du soleil
|
||||||
|
(pas d'horloge classique).
|
||||||
|
- 2h du matin (1h le dimanche)
|
||||||
|
- 5h30
|
||||||
|
- 7h00
|
||||||
|
- dimanche 9h30
|
||||||
|
- 13h30
|
||||||
|
- 15h00
|
||||||
|
- 19h00
|
||||||
|
|
||||||
|
** Repas
|
||||||
|
- 2 repas de pâques au 13 septembre (11h30, 19h)
|
||||||
|
- 1 repas sinon (15h, ou 17/18h carême)
|
||||||
|
|
||||||
|
** Travail
|
||||||
|
|
||||||
|
- travail dans les champs dans la mesure ou celà n'entrave pas les prières.
|
||||||
|
7h de travail par jour.
|
||||||
|
|
||||||
|
* Ordre moteur des évolutions techniques
|
||||||
|
|
||||||
|
- techniques de culture
|
||||||
|
- techniques de constructions
|
||||||
|
- génie hydraulique, eau courante, moulin hydrolique
|
9
notes/2020-08-24--20-22-44Z--histoire.org
Normal file
9
notes/2020-08-24--20-22-44Z--histoire.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: c245de18-fbc3-40c8-88c7-21e7636768fc
|
||||||
|
:END:
|
||||||
|
#+TITLE: histoire
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-08-24]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
815
notes/2020-08-29--14-08-40Z--ordre_des_informaticiens.org
Normal file
815
notes/2020-08-29--14-08-40Z--ordre_des_informaticiens.org
Normal file
|
@ -0,0 +1,815 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 19f81781-c1e1-47bc-9d07-62f84e0b0b6a
|
||||||
|
:END:
|
||||||
|
#+TITLE: Ordre des Informaticiens
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-08-29]
|
||||||
|
|
||||||
|
- tags :: [[id:ba399c55-5ea5-4b58-a605-574fd2f2f18d][cistercien]] [[id:62c57354-72ed-4465-91b4-67c53defbd10][ordre]] [[id:1b212806-1cc4-4881-ab7c-688568474e20][philo]] [[id:eb806d6a-57ca-4aab-8987-820b139b2be6][society]]
|
||||||
|
- source ::
|
||||||
|
|
||||||
|
Bonjour,
|
||||||
|
|
||||||
|
Avant de commencer à entrer sur le vif du sujet.
|
||||||
|
Quelques précisions sur cet email.
|
||||||
|
|
||||||
|
J'ai envoyé ce mail à quelques destinataires choisi.
|
||||||
|
Seulement des personnes que j'apprécie et qui j'estime pourront en retour
|
||||||
|
apprécier cet email.
|
||||||
|
|
||||||
|
Il s'agit d'une longue lettre.
|
||||||
|
C'est un format inhabituel qui s'est perdu avec nos nouvelles habitudes de
|
||||||
|
consommations immédiates et courtes.
|
||||||
|
Je pense qu'il est grand temps de faire renaître ce type de communication
|
||||||
|
de fond.
|
||||||
|
Cette forme permet d'aborder des sujets de fond.
|
||||||
|
|
||||||
|
* Introduction
|
||||||
|
|
||||||
|
Bonjour à tous.
|
||||||
|
|
||||||
|
Cette année fût forte en rebondissements et nouvelles de toutes sortes.
|
||||||
|
Ce sont certainement les signes d'un changement profond de notre façon de
|
||||||
|
vivre qui se dessinent.
|
||||||
|
|
||||||
|
Personnellement, cette année m'a demandé un engagement dans mon travail
|
||||||
|
inhabituel.
|
||||||
|
Et donc pour la plupart d'entre vous je n'ai pas pu discuter autant que je
|
||||||
|
l'aurais aimé.
|
||||||
|
J'ai eu la chance de pouvoir prendre quatres semaines entières de congés.
|
||||||
|
Malgré ces vacances, je n'ai pas totalement pu récupérer de l'effet de ce
|
||||||
|
surplus de pression et de travail intense.
|
||||||
|
|
||||||
|
Par contre les vacances et le repos sont propices à la réflexion et c'est
|
||||||
|
pourquoi j'aimerai partager avec vous le fruit de mes quelques réflexions
|
||||||
|
d'été.
|
||||||
|
Comme je l'ai dis, j'étais assez épuisé nerveusement.
|
||||||
|
Je n'ai donc pas pu lire de livre de fond, ou « geeker » en explorant de
|
||||||
|
nouveaux outils, languages informatiques, etc...
|
||||||
|
Mais, je pense avoir une idée qui pourrait s'avérer intéressante.
|
||||||
|
|
||||||
|
Si on reste dans le milieu des « geeks », on voit toujours les mêmes
|
||||||
|
questions revenir.
|
||||||
|
Souvent un individu ou un groupe d'individus essaye de résoudre ces
|
||||||
|
problèmes d'une manière ou d'une autre.
|
||||||
|
Généralement avec une réponse technique.
|
||||||
|
Dans notre milieux c'est une erreur classique de répondre à un problème
|
||||||
|
humain par une solution technique.
|
||||||
|
|
||||||
|
Jusqu'ici, j'ai l'impression que les arguments tournent en rond.
|
||||||
|
Et que les solutions aussi reprennent de veilles idées qui ont échouées.
|
||||||
|
|
||||||
|
Alors quels sont ces problèmes:
|
||||||
|
|
||||||
|
** Reconnaissance de l'Informatique
|
||||||
|
|
||||||
|
Notre métier n'est pas reconnu à sa juste valeur.
|
||||||
|
Du moins en Europe.
|
||||||
|
Pour moi, l'informatique devrait être une /profession/ au sens
|
||||||
|
sociologique.
|
||||||
|
Aujourd'hui nous sommes de vulgaires ouvriers spécialisés.
|
||||||
|
La raison principale je pense c'est qu'on laisse l'informatique se réduire
|
||||||
|
à la programmation.
|
||||||
|
Hors l'informatique va beaucoup plus loin.
|
||||||
|
Elle s'immmisce dans énormément d'activités modernes.
|
||||||
|
Et cet état de fait n'est pas reconnu, ni visible par la culture Française
|
||||||
|
et par la classe politique.
|
||||||
|
Je dis Française, mais je pense c'est le cas dans le monde entier à
|
||||||
|
l'exception des USA où Barak Obama lors de son discours d'inoguration avait
|
||||||
|
un mot relatif à l'informatique et nouvelles techno pour tous les domaines
|
||||||
|
de l'État.
|
||||||
|
L'armée, la finance, la santé, l'éducation, etc...
|
||||||
|
|
||||||
|
De mon point de vue l'Informatique mérite une meilleure place dans nos
|
||||||
|
sociétés.
|
||||||
|
Un nouveau domaine de spécialité Humaine qui devient de plus en plus
|
||||||
|
indispensable à tous comme l'accès à l'eau potable ou à l'éducation.
|
||||||
|
|
||||||
|
** Mise à mal du progrès
|
||||||
|
|
||||||
|
C'est une réflexion que je partage souvent.
|
||||||
|
La différence fondamentale entre progrès et innovation.
|
||||||
|
|
||||||
|
Le progrès profite à toute l'humanité.
|
||||||
|
Comme la découvert d'un vaccin, d'un nouveau soin.
|
||||||
|
|
||||||
|
L'innovation se restreint à avoir de la plus value financière.
|
||||||
|
Et récemment il y a beaucoup d'innovations qui se soldent par une
|
||||||
|
régression au lieu d'un progrès pour le reste de l'Humanité.
|
||||||
|
|
||||||
|
J'espère encore que l'équilibre global reste positif.
|
||||||
|
Mais il est difficile d'en juger à cours terme.
|
||||||
|
|
||||||
|
Le fond de ce problème c'est qu'une très grande partie des cerveaux passe
|
||||||
|
sont temps sur du travail régressif.
|
||||||
|
Je pense à Google, FB, mais aussi une majorité des applis web, etc...
|
||||||
|
Il existe aussi un philosophe qui a évalué à plus de 80% la part des
|
||||||
|
informaticiens qui travaillent sur des "bullshit jobs".
|
||||||
|
Donc des domaine avec progrès nul ou négatif.
|
||||||
|
|
||||||
|
** Brigading
|
||||||
|
|
||||||
|
Par brigading j'entends les nouveaux mouvements de foules sur les réseaux
|
||||||
|
sociaux.
|
||||||
|
Parfois ses effets sont positifs, parfois négatifs mais assez souvent assez
|
||||||
|
hératiques avec un peu des deux cotés.
|
||||||
|
|
||||||
|
Précédemment il me semblait qu'il s'agissait d'un problème mineur.
|
||||||
|
Un problème aussi plutôt restreint au web.
|
||||||
|
Aujourd'hui le problème se répand tel un cancer social dans la vie réelle.
|
||||||
|
Il est presque impossible de parler de certains sujet sans voir apparaître
|
||||||
|
des intervenants contres productif à toute discussion appaisée sur le web.
|
||||||
|
Mais de plus en plus d'idées saugrenues font leur apparition lors des
|
||||||
|
diners de famille.
|
||||||
|
|
||||||
|
De plus il semble de plus en plus évident que l'influence sur les réseaux
|
||||||
|
sociaux est devenu plus qu'un business mais une arme internationale.
|
||||||
|
Même les petites communautés spécialisées comme Hacker News, Lobsters, ont
|
||||||
|
des agents qui perturbent les discussions.
|
||||||
|
|
||||||
|
Ces attaques d'argumentation ont un effet mécanique et efficace.
|
||||||
|
Le niveau d'intelligence semble diminuer avec chaque nouvelle réponse dans
|
||||||
|
un fil de discussion.
|
||||||
|
|
||||||
|
Ces problèmes ont toujours existé auparavant.
|
||||||
|
Mais je trouve que l'ampleur récente est nouvelle et inquiétante.
|
||||||
|
|
||||||
|
Il est aussi très important de remarquer que l'intelligence n'est en rien
|
||||||
|
un bouclier aussi efficace que l'on pourrait l'imaginer contre cest attaques.
|
||||||
|
Il faut faire preuve d'un apprentissage constant pour faire face aux
|
||||||
|
nouvelles techniques d'influences.
|
||||||
|
Beaucoup de nos proches et une grande partie de la population n'est
|
||||||
|
simplement pas armée pour faire face à ces attaques.
|
||||||
|
|
||||||
|
Le "brigading" renforce l'effet de stagnation en empêchant les idées de
|
||||||
|
s'élever.
|
||||||
|
|
||||||
|
** L'open source n'est pas rétribué à sa juste valeur
|
||||||
|
|
||||||
|
Les fondations de tous les systèmes informatiques mondiaux ne progressent
|
||||||
|
presque plus.
|
||||||
|
Les créateurs de logiciels libres ne sont pas rétribués pour le bien qu'il
|
||||||
|
produise.
|
||||||
|
|
||||||
|
C'est un problème qui me semble classique.
|
||||||
|
Le salaire ne correspond pas à l'utilité sociale des individus.
|
||||||
|
Je pense même que dans beaucoup de cas, et pour les informaticiens c'est
|
||||||
|
presque l'inverse.
|
||||||
|
|
||||||
|
* Ma petite expérience lors de mes vacances; les Cisterciens
|
||||||
|
|
||||||
|
Nous sommes allé avec Krystelle visiter l'Abbaye cistercienne du Thoronet.
|
||||||
|
|
||||||
|
La visite fut vraiment très agréable mais aussi inspirante.
|
||||||
|
Je vous la conseille.
|
||||||
|
Ce n'est pas relié avec le reste de ce mail mais le son de la chapelle est
|
||||||
|
unique.
|
||||||
|
Le seul autre batiment mondial qui le dépasse en terme de durée de
|
||||||
|
raisonnance est le Taj Mahal.
|
||||||
|
|
||||||
|
Tout d'abord, je n'étais pas familier des Cisterciens.
|
||||||
|
En quelques mots il s'agit d'un ordre catholique créé au début du XIIe
|
||||||
|
siècle qui voulait revenir à l'essentiel de la chrétienté.
|
||||||
|
L'ordre estime que les chrétiens se sont perdus avec l'accumulation de
|
||||||
|
richesses.
|
||||||
|
|
||||||
|
Très vite à l'aide de la force d'influence d'un seul moine de nombreuses
|
||||||
|
abbaye Cisctersciennes sont créées.
|
||||||
|
Attention, très vite ne signifie pas la même chose que pour nous.
|
||||||
|
Il faut aussi imaginer les différences de la relation au temps de l'époque.
|
||||||
|
Trois moines sont envoyés d'une autre abbaye « mère » dans la région du
|
||||||
|
Thoronet pour demander des terres au seigneur local.
|
||||||
|
Ces moines étaient des nobles avec de l'argent.
|
||||||
|
Le temps d'obtenir les terres, de trouver le meilleur lieu de construction
|
||||||
|
il faudra 20 ans avant de poser la première pierre de l'Abbaye.
|
||||||
|
Il faudra encore 20 ans pour finir la chappelle et encore 60 ans pour finir
|
||||||
|
l'Abbaye dans son entier.
|
||||||
|
Environ un siècle.
|
||||||
|
|
||||||
|
Pour son époque l'Abbaye est très en avance technologique.
|
||||||
|
Il y avait une fontaine avec l'eau courante au XIIe siècle.
|
||||||
|
Tout au long de son existence l'ordre à toujours été à la pointe de la
|
||||||
|
technologie.
|
||||||
|
Les moines étaient très instruits et ouverts d'esprit contrairemment à ce
|
||||||
|
que pourrait laissé penser leur mode de vie.
|
||||||
|
|
||||||
|
Les règles bénédictines sont très strictes.
|
||||||
|
Recherche de l'isolement, pauvreté intégrale, refus des bénéfices
|
||||||
|
ecclésiastiques, travail manuel, autarcie.
|
||||||
|
Ça ne rigolait pas.
|
||||||
|
|
||||||
|
Les cisterciens se méfient de la parole.
|
||||||
|
Tous les jours, ils se réunissent pour lire les règles bénédictines.
|
||||||
|
C'est le seul moment où la parole peut-être émise.
|
||||||
|
Avant de rentrer dans la sale, il y a des symboles qui rapellent que la
|
||||||
|
parole peut à la fois être utilisée pour le bien ou pour le mal.
|
||||||
|
Il convient donc de ne pas parler sans y avoir préalablement bien réfléchi.
|
||||||
|
|
||||||
|
Autre détail intéressant sur l'organisation sociale.
|
||||||
|
Tout devait être fait pour la méditation et le recueillement tout en ne
|
||||||
|
négligeant pas le travail manuel.
|
||||||
|
Mais certains métier étaient nécessaires.
|
||||||
|
Il y avait donc d'autres groupes d'individus qui sans être moines devaient
|
||||||
|
aussi respecter des règles de vie très strictes.
|
||||||
|
Il fallait un an de mise à l'épreuve avant d'être admis.
|
||||||
|
|
||||||
|
L'organisation de l'ordre est interressante aussi.
|
||||||
|
Pour éviter des prises de pouvoir qui iraient contre la vision de l'ordre.
|
||||||
|
Chaque année le moine principal d'une abbaye mère descend pour vérifier les
|
||||||
|
comptes, ainsi que l'état et l'organisation de l'abbaye.
|
||||||
|
Et pour la 1ere maison mère ce sont les filles qui faisaient aussi son
|
||||||
|
inspection.
|
||||||
|
Pas de culte de la personalité chez les Cisterciens.
|
||||||
|
Même les moines avec des responsabilités n'était pas au dessus des autres.
|
||||||
|
|
||||||
|
Il s'agit des charactéristiques principales que j'ai retenu.
|
||||||
|
Évidemment on a envie de faire le lien avec l'informatique.
|
||||||
|
Nombre d'informaticien ont perdu leur voie pour gagner leur vie.
|
||||||
|
Il est aujourd'hui très difficile de gagner un salaire honnête en faisant
|
||||||
|
de l'open source/free software.
|
||||||
|
|
||||||
|
Nous ne sommes plus à une époque où nous voudrions sacrifier nos vies pour
|
||||||
|
nous consacrer à un but transcendental comme un super projet open source.
|
||||||
|
|
||||||
|
Cependant il y a je pense dans cette histoire cistercienne de quoi nous
|
||||||
|
inspirer pour la création d'un ordre des informaticiens.
|
||||||
|
Mais à condition de le penser sur le long terme et de bien préparer sa
|
||||||
|
place.
|
||||||
|
Même si la création d'une telle communauté échoue à devenir influente elle
|
||||||
|
pourra participer à un effort dans la bonne direction dont en étant une
|
||||||
|
expérience agréable et enrichissante pour ses participants.
|
||||||
|
|
||||||
|
* La solution que je propose de faire ensemble
|
||||||
|
|
||||||
|
Il est temps d'esquisser une première proposition sur ce que nous pourrions
|
||||||
|
faire pour être moteur de progrès.
|
||||||
|
Et si nous le sommes déjà comme certains d'entre vous, comment peut-être
|
||||||
|
faire encore mieux.
|
||||||
|
|
||||||
|
Tout d'abord, je pense que le premier point important à garder à l'esprit
|
||||||
|
c'est que je propose de faire quelque chose sur du temps long.
|
||||||
|
Pas de précipitation, même si rien n'empêche, bien au contraire de
|
||||||
|
commencer à faire des choses.
|
||||||
|
|
||||||
|
** l'Ordre
|
||||||
|
|
||||||
|
Mon idée serait de former un « ordre des informaticiens ».
|
||||||
|
Je n'aime pas trop ce nom, mais c'est tout ce que j'ai trouvé pour l'instant.
|
||||||
|
Même si on le traduit, je pense que j'utiliserait quand même
|
||||||
|
"Informatician" qui reprensent plus ce que nous sommes.
|
||||||
|
On est pas des "Computer Scientist".
|
||||||
|
L'ordinateur pourrait disparaitre, notre métier serait toujours utile.
|
||||||
|
|
||||||
|
Je pense qu'on peut se donner quelques années avant de vraiment sortir et
|
||||||
|
s'appeler « ordre des informaticiens ».
|
||||||
|
De plus je pense que tous les informaticiens de métier ne pourraient pas
|
||||||
|
faire parti de cet ordre.
|
||||||
|
Il devrait y avoir des critères plus restrictif que juste savoir utiliser
|
||||||
|
quelques outils et savoir programmer.
|
||||||
|
|
||||||
|
Le but premier de cet « Ordre » serait donc promouvoir le progrès.
|
||||||
|
Comme le but de l'ordre des médecins et de promouvoir la bonne santé.
|
||||||
|
|
||||||
|
Mais un « ordre » pourrait aussi avoir des avantages évidents avec l'extérieur.
|
||||||
|
|
||||||
|
Gagner une autonomie et sa place au sein de la société.
|
||||||
|
Autonomie de la formation.
|
||||||
|
L'« ordre » décide de comment former ses membre et des règles internes.
|
||||||
|
Promouvoir ses intérêt et celui de ses membres.
|
||||||
|
Entre-aide.
|
||||||
|
Etre une voix pour promouvoir les différences fondamentales entre les
|
||||||
|
informaticiens et d'autres groupes d'ingénieurs ou scientifiques qui
|
||||||
|
justifient que les informaticiens deviennent une profession (toujours au
|
||||||
|
sens sociologique).
|
||||||
|
|
||||||
|
À l'intérieur de l'ordre par contre les sujets abordés seraient très différents.
|
||||||
|
Forum de question sur comment se rendre utile et moteur de progrès ?
|
||||||
|
Quelle serait la méthode la plus efficace ?
|
||||||
|
|
||||||
|
Et évidemment dans une environnement adapté à nos vie modernes.
|
||||||
|
Je n'imagine pas nous retrouver dans une Abbaye cachée pour coder du matin
|
||||||
|
au soir.
|
||||||
|
|
||||||
|
Même si ça fait un peu sectaire, je parlerai de l'Ordre sans les guillemets
|
||||||
|
pour la suite.
|
||||||
|
|
||||||
|
** Pour vivre heureux vivont cachés
|
||||||
|
|
||||||
|
Comme les moines cisterciens il me semble important d'avoir un lieu protégé
|
||||||
|
de l'extérieur.
|
||||||
|
Lors de mon arrivée sur le parking de la visite de l'Abbaye du Thoronet, on
|
||||||
|
ne voyait rien.
|
||||||
|
Pas de bâtiment visible.
|
||||||
|
L'abbaye était cachés.
|
||||||
|
|
||||||
|
Il me semble que c'est une bonne solution pour éviter d'être vu et ensuite
|
||||||
|
attaqué par des systèmes d'influences court-termistes.
|
||||||
|
Pas de forum ouvert.
|
||||||
|
Je pense même qu'on peut aller plus loin.
|
||||||
|
J'ai vu des communauté comme le tildeverse.
|
||||||
|
Il s'agit d'ouvrir un compte ssh sur une machine à des individus.
|
||||||
|
Et celà devient une sorte de réseau social clos.
|
||||||
|
Réservé aux personnes qui savent utiliser ~ssh~ et qui ont donc une
|
||||||
|
connaissance technique non nulle.
|
||||||
|
|
||||||
|
Je pense aussi que même si on est entre nous.
|
||||||
|
Nous baignons dans une environnement très bruyants.
|
||||||
|
Nous ne pouvons pas toujours nous faire confiance pour être dans un état
|
||||||
|
d'esprit calme et raisonnable nécessaire à ce type de lieu de rencontre.
|
||||||
|
|
||||||
|
C'est pourquoi je pense que l'entrée devrait imposer une sorte de temps de
|
||||||
|
pause à chacun.
|
||||||
|
Le temps de reprendre ses esprits loin de toute notification ou imperatif
|
||||||
|
extérieur.
|
||||||
|
Il faudrait arriver à communiquer lorsque l'on sait que l'on va avoir un
|
||||||
|
temps isolé et calme prompt à la réflexion.
|
||||||
|
S'imposer de couper toutes les sources potentielles de notification.
|
||||||
|
Retrouver en quelque sorte un lieu où on se sente bien entre individus de
|
||||||
|
confiances.
|
||||||
|
|
||||||
|
Dans un premier temps communiquer par mail encrypté avec GPG est déjà un
|
||||||
|
moyen de restreindre le groupe.
|
||||||
|
Mais je pense qu'il faudrait conserver des archives visible par tous ceux
|
||||||
|
qui pourraient le rejoindre à l'avenir.
|
||||||
|
|
||||||
|
** Constitution
|
||||||
|
|
||||||
|
Concernant les règles des groupes.
|
||||||
|
Il est clair si l'on regarde tous les forums et réseaux sociaux, il existe
|
||||||
|
une taille critique qui fait que l'on passe d'une expérience agréable à un
|
||||||
|
système qui va privilégier la réaction plutot que la réflexion.
|
||||||
|
Voici donc une proposition pour gérer la scalabilité de l'Ordre.
|
||||||
|
Bien entendu inspirée par des propositions connues d'organisations
|
||||||
|
décentralisées.
|
||||||
|
|
||||||
|
Pour éviter l'effet "Eternal September" je pense qu'il faudrait une
|
||||||
|
constellation de réseaux sociaux mais très limités en nombre de
|
||||||
|
participants.
|
||||||
|
De plus imposer une stabilité des participants; on reste dans le même
|
||||||
|
groupe et on ne participe pas à plusieurs groupes sauf exception.
|
||||||
|
Et ce pour rendre quasi totalement impossible l'effet "buzz".
|
||||||
|
|
||||||
|
Il me semble avoir lu qu'un individu ne peut pas vraiment connaitre plus de
|
||||||
|
120 personnes.
|
||||||
|
Donc si nous limitons la taille du groupe à 120 (peut-être même juste 60)
|
||||||
|
on peut faire un groupe où chacun de nous pourra en quelque sorte connaître
|
||||||
|
assez bien tous les autres individus.
|
||||||
|
Evidemment un tel système devrait être sur invitation seulement.
|
||||||
|
J'irai même plus loin.
|
||||||
|
Il faudrait dans une première phase n'inviter que des gens assez proches.
|
||||||
|
|
||||||
|
Lorsque le groupe atteint un seuil, il est alors nécessaire d'établir un
|
||||||
|
autre groupe séparé du premier.
|
||||||
|
Je pense qu'il faudrait des volontaires du groupe pour monter le suivant.
|
||||||
|
Ces volontaires seraient ensuite garrant de conserver le même esprit
|
||||||
|
progressiste et amical dans le groupe « fille ».
|
||||||
|
|
||||||
|
Et comme les Abbayes qui se surveillaient les unes les autres.
|
||||||
|
Il serait très intéressant d'entretenir une relation similaire.
|
||||||
|
Comparer les réflexions des groupes.
|
||||||
|
Vérifier si un groupe se spécialise.
|
||||||
|
Si differents groupes convergent ou divergent.
|
||||||
|
Avoir de façon régulières mais peu fréquentes des "synchronisations".
|
||||||
|
|
||||||
|
Prendre les meilleures idées, discussions, productions de chaque groupes et
|
||||||
|
le promouvoir aux autres groupes.
|
||||||
|
Pour éviter un effet "overflow" et "buzz" la synchronisation sera limité
|
||||||
|
aur relation directe mère fille (dans les deux sens je pense) et aussi
|
||||||
|
prendre gare à désynchroniser les dates de ces synchronisations.
|
||||||
|
Et bien entendu imposer un nombre maximal de « filles » d'un groupe.
|
||||||
|
|
||||||
|
** Détail des Principes
|
||||||
|
|
||||||
|
Je pense qu'il faut lier un ordre à un ensemble de grands principes.
|
||||||
|
De plus il faut non seulement énoncer les principes mais leur hiérarchies.
|
||||||
|
Car si toutes les sociétés prônent les même principes c'est leur hiérarchie
|
||||||
|
qui diffère.
|
||||||
|
|
||||||
|
Pour moi le principe fondateur c'est la promotion du progrès.
|
||||||
|
Et le plus difficile se mettre d'accord sur une définition suffisamment
|
||||||
|
précise du progrès pour pouvoir le distinguer.
|
||||||
|
Progrès individuel, social, technique, etc...
|
||||||
|
Souvent différents points de vus s'opposent.
|
||||||
|
|
||||||
|
Comme la parole était suspicieuse pour les cistercien certains détail de
|
||||||
|
nos communication devraient aussi être regardé d'un œil suspicieux et si
|
||||||
|
possible être évité.
|
||||||
|
|
||||||
|
*** Le contenu
|
||||||
|
**** Pas de news
|
||||||
|
|
||||||
|
Si on voit quelque chose sur Hacker News, reddit, etc...
|
||||||
|
|
||||||
|
Une mise à jour, une dernière nouveauté, un nouveau service en ligne, un
|
||||||
|
nouveau PC, téléphone, gadget.
|
||||||
|
|
||||||
|
De la politique.
|
||||||
|
|
||||||
|
À 99% ce ne devrait pas avoir sa place dans les discussions sur ce groupe.
|
||||||
|
|
||||||
|
La plupart des discussions politiques devraient être exclues.
|
||||||
|
La plupart des informations qui datent de moins de 6 mois.
|
||||||
|
|
||||||
|
Je pense qu'il pourrait y avoir certaines exceptions; les décès de
|
||||||
|
personnes proches de la communauté.
|
||||||
|
Les news touchant directement un des membres du groupe ou de l'Ordre,
|
||||||
|
etc...
|
||||||
|
Peut-être des discussions de fond sur des mouvements politiques mais rien
|
||||||
|
de récent.
|
||||||
|
|
||||||
|
Il faut à tout prix éviter de s'embourber dans les discussions
|
||||||
|
emotionnelles.
|
||||||
|
Typiquement, pendant le COVID, il faudrait éviter d'en parler complètement
|
||||||
|
à l'exception des détails techniques.
|
||||||
|
Le but de ces groupes de discussions sont la recherche du progrès à long
|
||||||
|
terme.
|
||||||
|
Le temps passé à discuter de ses peurs, émotions, dernières nouvelles
|
||||||
|
reviennent à regarder sidéré BFM TV pendant des attentats ou n'importe quel
|
||||||
|
autre évênement stupéfiant.
|
||||||
|
|
||||||
|
Au contraire, cet espace devrait être préservé du quotidiens et de
|
||||||
|
l'évênementiel pour se tourner vers du méditatif à très long terme.
|
||||||
|
|
||||||
|
**** Presque pas d'humour
|
||||||
|
|
||||||
|
Sans vouloir l'interdire totalement certaines des formes de l'humour devraient être
|
||||||
|
prohibés dans les communications.
|
||||||
|
|
||||||
|
C'est la malheureuse conclusion à laquelle je suis arrivé.
|
||||||
|
|
||||||
|
Pour plusieurs raisons mais qui se rejoignent par le fait que l'humour se
|
||||||
|
partage mal hors d'un groupe d'amis.
|
||||||
|
|
||||||
|
Les sensibilités de chacun sont différentes.
|
||||||
|
Une remarque humoristique qui nous semble innocente sera perçue comme
|
||||||
|
offensante par une personne ayant une histoire et une sensibilité
|
||||||
|
différente.
|
||||||
|
|
||||||
|
Si les communications du groupe sont publiés il ne faudrait pas qu'elles
|
||||||
|
soient mal interprétés ou puissent être utilisé pour attaquer le groupe via
|
||||||
|
des canaux extérieurs.
|
||||||
|
|
||||||
|
J'ai bien peur que pour le bien du groupe il faille refuser un humour de
|
||||||
|
détente pour se contenter d'un humour politiquement correct ou d'un humour
|
||||||
|
subtil plus difficile d'accès.
|
||||||
|
Par humour subtil j'entend un humour qui passerait par des critiques de
|
||||||
|
raisonnements un peu avancé.
|
||||||
|
|
||||||
|
***** Pas d'humour de détente
|
||||||
|
|
||||||
|
Je pense toutes les formes d'humour relatives à la distraction; les mèmes
|
||||||
|
Internet, les petits chatons, les blagues.
|
||||||
|
|
||||||
|
***** Pas de sarcasme
|
||||||
|
|
||||||
|
Je suis le premier à utiliser le sarcasme sur le chat, les forums dans la
|
||||||
|
vie courante.
|
||||||
|
Cependant, dans un système avec archive impossible à supprimer une phrase
|
||||||
|
peut simplement être utilisée hors de son contexte.
|
||||||
|
Plus que ça, il n'est pas toujours compris et c'est ce qui fait le drôle de
|
||||||
|
la situation.
|
||||||
|
Le petit moment de flottement où les individues ne savent pas si l'on est
|
||||||
|
sérieux ou pas.
|
||||||
|
|
||||||
|
Je pense que dans les communications sur les groupes, ce ne peut être acceptable.
|
||||||
|
|
||||||
|
***** Pas d'exagérations
|
||||||
|
|
||||||
|
Pas d'exagération non plus, de tournure déplaisante, etc...
|
||||||
|
Si on dit "c'est carrément fasciste" il faut que vous pensier vraiment que
|
||||||
|
l'acte décrit soit au niveau historique du fascisme.
|
||||||
|
Evidemment il faudrait absolument éviter le point Godwin.
|
||||||
|
De cette manière les règles seront aussi très strictes.
|
||||||
|
|
||||||
|
**** Pas d'anecdotes
|
||||||
|
Encore une remarque pour garder son sérieux et éviter des débats inutiles.
|
||||||
|
En gros il s'agit d'éviter les "Logical falacies" et autres erreurs de
|
||||||
|
raisonnements.
|
||||||
|
|
||||||
|
La plupart du temps, les anecdotes font partie de ces informations qui
|
||||||
|
n'ont que très peu de valeur de fond.
|
||||||
|
Elles peuvent par contre être utilisées en contre argument d'une fausse
|
||||||
|
généralité.
|
||||||
|
|
||||||
|
*** Asynchronicité
|
||||||
|
|
||||||
|
À peut-être quelques exceptions près.
|
||||||
|
Les communications au sein du groupe devraient être asynchrones.
|
||||||
|
Chaque individu devrait avoir le temps de penser la réponse à un texte, un commentaire.
|
||||||
|
Les communications mêmes anciennes ne devraient pas disparaître comme on le
|
||||||
|
voit sur les sites comme HN, reddit.
|
||||||
|
Au contraire, on peut prolonger une discussion sans fin ou très longtemps.
|
||||||
|
Et la discussion, l'activité doit encore être visible.
|
||||||
|
|
||||||
|
De même les discussions les plus importantes relatives à la prise de
|
||||||
|
certaines décisions de groupes devraient faire parti des productions
|
||||||
|
publiques du groupe.
|
||||||
|
|
||||||
|
*** Privé vs Read-only
|
||||||
|
|
||||||
|
Je pense qu'il serait bénéfique que les productions du groupe soient
|
||||||
|
publiques.
|
||||||
|
Mais je pense que les discussions internes ne devraient pas nécessairement
|
||||||
|
l'être.
|
||||||
|
Celà permettrait d'avoir des discussions dans une bulle où nous pourrions
|
||||||
|
avoir confiance en la bonne foi de chacun des participants.
|
||||||
|
Tout en sachant que les détails de la discussion ne fuiteront pas vers le
|
||||||
|
domaine public pour éviter un brigading possible.
|
||||||
|
|
||||||
|
En ce qui concerne les productions, je pense aussi que dans la plupart des
|
||||||
|
cas il faudrait qu'elles soient read-only pour l'extérieur du groupe.
|
||||||
|
|
||||||
|
Si c'est du code, le repository reste read-only.
|
||||||
|
On autorise les forks, mais on autorise pas les non-membres à participer.
|
||||||
|
C'est un peu dur, mais sinon, celà ouvrirait une brêche où pourrait
|
||||||
|
s'engouffrer les trolls, le brigading...
|
||||||
|
J'imagine qu'on pourrait trouver un système intermédiaire mais, je ne vois
|
||||||
|
pas quelque chose qui me parraisse correct pour l'instant.
|
||||||
|
|
||||||
|
*** Pseudonyme pour l'extérieur pas d'anonymat pour l'intérieur
|
||||||
|
|
||||||
|
Il me semble difficile d'intégrer de l'anonymat au sein du système.
|
||||||
|
Il faudrait éviter à tout prix qu'un individu triche en se faisant inscrire
|
||||||
|
dans plusieurs groupes en même temps.
|
||||||
|
J'imagine que l'on pourrait trouver un moyen technique qui obligerait tous
|
||||||
|
les membres de tous les groupes à se connecter en même temps dans certaines
|
||||||
|
conditions pour éviter les duplicata de compte.
|
||||||
|
|
||||||
|
Mais il faut connaître le vrai nom des gens au moins entre membres du
|
||||||
|
groupe.
|
||||||
|
Pour les archives publiques, il me semble au contraire préférable d'avoir
|
||||||
|
le maximum d'anonymat pour éviter toute possibilité de pression extérieure.
|
||||||
|
|
||||||
|
Il me semble donc cohérent d'avoir un nickname différent de celui que l'on
|
||||||
|
utilise ailleurs.
|
||||||
|
|
||||||
|
** Règles
|
||||||
|
|
||||||
|
Les cisterciens ont des règles très strictes d'hygiène de vie à respecter
|
||||||
|
tous les jours.
|
||||||
|
Je pense que c'est totalement hors de propos pour le type de communauté à
|
||||||
|
laquelle je pense.
|
||||||
|
Au contraire, je pense qu'au delà des principes et d'une forme de recueil
|
||||||
|
technique pour éviter les prises de pouvoir.
|
||||||
|
Il ne faut pas de loi, pas de règle, pas de process qui ne soit modifiable
|
||||||
|
par le jugement de bonne foi.
|
||||||
|
|
||||||
|
Si on part sur du progrès et que la communauté se constitue de personnes
|
||||||
|
de confiance.
|
||||||
|
La communauté doit avoir le droit de changer radicalement toutes les règles.
|
||||||
|
|
||||||
|
nb: c'est l'exact inverse de ce que propose les cryptos avec des
|
||||||
|
constitutions dans le marbre.
|
||||||
|
|
||||||
|
Donc il y a une tension ici.
|
||||||
|
D'une part j'ai énoncé des règles constitutionnelles pour éviter des prises
|
||||||
|
de pouvoir.
|
||||||
|
De l'autre je considère qu'il faut un moyen de réforme absolue basé sur la
|
||||||
|
bonne foi des participants.
|
||||||
|
La fondation immuable devrait être cette idée de progrès qui ne doit jamais
|
||||||
|
être confondu avec une idée d'innovation ou autres stratagèmes.
|
||||||
|
|
||||||
|
** Banissement
|
||||||
|
|
||||||
|
Si une personne emet un avis totalement en désaccord avec l'esprit
|
||||||
|
progressiste du groupe il devrait être banni.
|
||||||
|
Il pourra utiliser twitter pour faire valoir son opinion.
|
||||||
|
|
||||||
|
Dans ce cas, je propose que le bannissement demande au moins l'accord de 3
|
||||||
|
membres du groupe.
|
||||||
|
Dont probablement un membre considéré comme modérateur.
|
||||||
|
Je pense qu'il faut quelques membres qui soient considérés modérateurs,
|
||||||
|
opérateurs.
|
||||||
|
Celà ne devrait pas particulièrement leur conféré des privilèges mais
|
||||||
|
plutôt des devoirs de maintenance.
|
||||||
|
|
||||||
|
** Arrivée dans le groupe
|
||||||
|
|
||||||
|
Il fallait un an pour passer de novice à moine.
|
||||||
|
Il me semble que c'est une bonne façon de faire.
|
||||||
|
Avoir une période d'essai qui ne serait pas nécessairement un an.
|
||||||
|
Après un vote si possible secret à l'hunanimité un membre pourra soit
|
||||||
|
devenir membre définitif, soit reconduire sa période d'essai, soit être
|
||||||
|
rejeté par la communauté.
|
||||||
|
|
||||||
|
** Financement
|
||||||
|
|
||||||
|
De même que les cisterciens commencèrent à accumuler de l'argent avec
|
||||||
|
beaucoup de dons mais aussi beaucoup d'innovations et découvertes
|
||||||
|
techniques.
|
||||||
|
Il me semble que l'idéal serait que la compétence de chacun des membre
|
||||||
|
puisse favoriser le progrès mais aussi les innovations qui en
|
||||||
|
découleraient.
|
||||||
|
Et pouvoir utiliser celà pour financer le mouvement.
|
||||||
|
Pour moi il faut un plan à la SpaceX mais pour l'open source.
|
||||||
|
|
||||||
|
Avoir un objectif lointain de fonder un Ordre comme les Bene Geserit de
|
||||||
|
Dune et jalonner des étapes qui pourrait à chaque étape devenir rentable et
|
||||||
|
renforcer le mouvement.
|
||||||
|
|
||||||
|
Evidemment, il est hors de question que cet argent soit jeté par les
|
||||||
|
fenêtre ou utilisé pour s'acheter des yatchs.
|
||||||
|
Sans parler de pauvreté, il me semble qu'une certaine décence des dépenses
|
||||||
|
est nécessaire pour un mouvement humaniste et progressiste.
|
||||||
|
Mais si un groupe pouvait obtenir une indépendance financière pour payer à
|
||||||
|
temps plein des codeurs sur de l'open source je pense que celà constituerai
|
||||||
|
un immense pas en avant.
|
||||||
|
|
||||||
|
* Digression
|
||||||
|
|
||||||
|
Attention cette idée est peut-être saugrenue.
|
||||||
|
Mais elle raisonne depuis un moment il doit donc y avoir quelque chose a en
|
||||||
|
tirer.
|
||||||
|
|
||||||
|
Une autre idée relative à cet « Ordre » serait de produire un « super
|
||||||
|
software ».
|
||||||
|
C'est un nom que j'ai inventé, je ne sais pas trop coment appeler ça.
|
||||||
|
|
||||||
|
L'idée serait de produire un ressource gigantesque et publique de code
|
||||||
|
source.
|
||||||
|
Une sorte de super repository potentiellement décentralisé mais 100%
|
||||||
|
autonome et cohérent.
|
||||||
|
Un peu comme tous les paquets Linux/BSD.
|
||||||
|
|
||||||
|
En fait j'aimerai aller encore plus loin.
|
||||||
|
Dans l'idéal nous trouverions en tant que groupe un consensus sur un seul
|
||||||
|
language de programmation qui possèderait toutes les propriété que nous
|
||||||
|
pourrions vouloir.
|
||||||
|
Ou au moins réduire les langages de programmation d'intérêt.
|
||||||
|
Tout en prenant en compte l'évolution scientifique des languages de
|
||||||
|
programmation.
|
||||||
|
|
||||||
|
Il faudrait que ce « super software » contienne des libs pour tout, mais
|
||||||
|
tout en conservant les autres version (potentiellement fausses) des
|
||||||
|
anciennes implémentation de fonction pour avoir une retro-compatibilité
|
||||||
|
parfaite.
|
||||||
|
|
||||||
|
Ajouter du nouveau code ne pourrait ainsi jamais casser du vieux code.
|
||||||
|
La modification de code serait interdite ainsi que la suppression de code
|
||||||
|
(sauf peut-être exception de Garbage collect).
|
||||||
|
Ainsi si il y a un bug dans une fonction, plutot que la modifier.
|
||||||
|
Il faut réécrire une autre fonction, avec un autre nom (qui contiendrait
|
||||||
|
probablement un numero de version).
|
||||||
|
|
||||||
|
Celà fabriquerait petit à petit une sorte de gigantesque « boule
|
||||||
|
d'accretion code » (un peu comme le soleil).
|
||||||
|
|
||||||
|
De plus, d'expérience une petite équipe code mieux sur du code qu'une
|
||||||
|
grande équipe.
|
||||||
|
Ce qui rejoins l'idée de conserver un nombre de membre du groupe faible.
|
||||||
|
|
||||||
|
Merger serait trivial avec une simple convention de nommage.
|
||||||
|
Le premier groupe s'appelerait ~0x~.
|
||||||
|
Ses filles ~0x0~, ~0x1~, ~0x2~, ...
|
||||||
|
~0xf~ (on pourrait limiter le nombre de filles à 16).
|
||||||
|
Les filles de ~0x3~ seraient alors (~0x30~ ... ~0x3f~).
|
||||||
|
Ainsi si la convention de nomage des fonctions serait:
|
||||||
|
~[function-name]-[groupe]-version~.
|
||||||
|
Et il n'y aurait jamais de conflit possible entre groupe puis que chaque
|
||||||
|
commit serait uniquement additif avec des noms différents.
|
||||||
|
Rien ne serait modifié ni supprimé.
|
||||||
|
Evidemment j'imagine qu'une telle convention sera proposé nativement via
|
||||||
|
des IDE, ou un système qui automatise le nommage.
|
||||||
|
Ansi tous les merges seraient triviaux.
|
||||||
|
|
||||||
|
Après de longues années il n'est pas impossible que nous puissions avoir un
|
||||||
|
code qui s'oriente uniquement vers des résolutions de problèmes utiles.
|
||||||
|
Vers du progrès.
|
||||||
|
Et pourquoi pas, même imaginer la fabrication de hardware dédié compatible
|
||||||
|
avec ce système.
|
||||||
|
|
||||||
|
Avec un tel système de convention de nommage on pourrait même totalement
|
||||||
|
décentraliser les codes sources et chaque « objet » connecté pourrait ne
|
||||||
|
réclamer que les codes qu'ils souhaite de façon transitive.
|
||||||
|
|
||||||
|
Les mises à jours seraient aussi simplifiées et triviales.
|
||||||
|
|
||||||
|
* Comment Techniquement?
|
||||||
|
|
||||||
|
Je n'ai pas parlé de l'implémentation techniques.
|
||||||
|
L'hébergement ? Web, ssh, gpg, mails ?
|
||||||
|
Pour l'instant c'est secondaire.
|
||||||
|
|
||||||
|
Cependant j'ai quelques petites idées:
|
||||||
|
|
||||||
|
J'imagine une interface qui ressemblerait à un forum de discussion un peu
|
||||||
|
comme Reddit ou les newsgroups.
|
||||||
|
Peut-être pas sur le web mais directement dans un terminal via ssh.
|
||||||
|
Ce serait une première pour moi.
|
||||||
|
Certains choix de l'interface de l'IETF sont intéressants aussi.
|
||||||
|
|
||||||
|
Quoi qu'il en soit, il faudrait que l'on « entre » dans la communauté.
|
||||||
|
Avoir un petit temps d'attente qui permette de respirer avant d'entrer pour
|
||||||
|
retrouver ses esprits et se mettre en condition.
|
||||||
|
Avoir des messages de rappel des règles pour éviter les débordements, les erreurs.
|
||||||
|
|
||||||
|
Checker le contenu des commentaires pour potentiellement ajouter un rappel
|
||||||
|
des règles.
|
||||||
|
Typiquement si le message contient certains mots clés.
|
||||||
|
Que le message est trop court, etc...
|
||||||
|
|
||||||
|
Uploader les clés GPG publiques de tous les membres pour discuter en privé
|
||||||
|
via mail (ou autre).
|
||||||
|
Si c'est le cas, il faudra que ce trousseau soit encrypté pour éviter les
|
||||||
|
fuites publiques des emails des membres.
|
||||||
|
Ou simplement demander à tout le monde d'envoyer les clés.
|
||||||
|
L'idéal serait d'avoir de l'e2e et plus généralement de chiffrer toutes les
|
||||||
|
communications internes.
|
||||||
|
|
||||||
|
Le volume des converstations devrait rester assez faible pour que l'on
|
||||||
|
puisse tout lire à chaque fois.
|
||||||
|
Et donc pas besoin d'un algorithme intelligent qui positionnerait des
|
||||||
|
priorités de certaines discussions.
|
||||||
|
|
||||||
|
Peut-être avoir une notion de discussion amenée à son terme.
|
||||||
|
On pourrait donc par consensus fermer une discussion lorsque l'on arrive à
|
||||||
|
une conclusion.
|
||||||
|
Et si c'est le cas pouvoir potentiellement publier une « production » qui
|
||||||
|
retrace la conclusion de la discussion avec une explication des différents arguments.
|
||||||
|
La discussion en elle même pouvant ou non rester cachée et archivée.
|
||||||
|
|
||||||
|
Peut-être décider d'un nombre maximal de sujet à traiter jusqu'à obtention
|
||||||
|
de consensus.
|
||||||
|
Si le consensus ne peut pas être atteint et que plus personne ne peut
|
||||||
|
ajouter de commentaire sur la discussion.
|
||||||
|
On pourrait mettre une discussion en « couveuse » pour un certain temps.
|
||||||
|
Elle serait alors dépriorisée et réapparaitrait de nouveau au premier plan
|
||||||
|
après le temps d'attente.
|
||||||
|
|
||||||
|
L'objectif final étant de produire des conclusions consensuelles et
|
||||||
|
d'essayer d'avancer.
|
||||||
|
|
||||||
|
De même il me semble qu'il faudra un ou plusieurs repository git.
|
||||||
|
Pour aider à la production de code.
|
||||||
|
|
||||||
|
* Qui ?
|
||||||
|
|
||||||
|
Jusqu'ici je n'ai pas dit qui inclure et comment.
|
||||||
|
|
||||||
|
Mais je considère qu'il doit y avoir un certain nombre de qualités que nous
|
||||||
|
devons rechercher chez les membres.
|
||||||
|
|
||||||
|
1. *Compétent techniquement*; pas de nul.
|
||||||
|
2. *Éthiquement compatible*; qui partage les valeurs du groupe.
|
||||||
|
3. *Socialement compatible*; une personne ouverte d'esprit qui sera
|
||||||
|
bienveillante envers les autres membres.
|
||||||
|
4. *Techniquement compatible*; qui partage les opinions fortes du groupe sur
|
||||||
|
le plan technique.
|
||||||
|
5. *Productif*; il serait triste d'avoir des membres brillants incapables
|
||||||
|
d'accepter des solutions temporaires imperfectes mais utiles.
|
||||||
|
Il faut une personne qui aide à la production et qui ne s'arrête pas à la
|
||||||
|
discussion théorique.
|
||||||
|
Même si l'objectif est sur du temps long et qu'il n'y a pas de
|
||||||
|
précipitation.
|
||||||
|
6. *Impliqués*; nos vies modernes sont remplies et nous laissent peu de temps.
|
||||||
|
Mais il faudrait que les membres puissent s'engager à participer pendant
|
||||||
|
un temps régulier suffisant.
|
||||||
|
|
||||||
|
J'imagine pour que les choses se fasse bien il faudrait procéder un peu
|
||||||
|
comme un recrutement.
|
||||||
|
|
||||||
|
Pour aussi montrer que joindre ce groupe c'est différent de juste d'abonner
|
||||||
|
à reddit ou HN.
|
||||||
|
|
||||||
|
* Conclusion
|
||||||
|
|
||||||
|
Merci d'avoir lu jusqu'ici.
|
||||||
|
|
||||||
|
Si ce n'est pas clair je voudrais simplement lancer une discussion sur le
|
||||||
|
sujet.
|
||||||
|
|
||||||
|
Et je tiens à ajouter que je n'ai aucune compétence ni en science sociale,
|
||||||
|
ni en science politique.
|
||||||
|
J'ai très probablement émis une énorme quantité d'erreurs et d'idées naives
|
||||||
|
sur ces sujets.
|
||||||
|
|
||||||
|
Cependant j'espère que cette idée pourrait contribuer à créer une bulle
|
||||||
|
protectrice pour un environnement positif.
|
||||||
|
Positif pour nous mais aussi pour les autres.
|
||||||
|
Avec un petit espoir qu'une telle communauté puisse naître et avoir une
|
||||||
|
influence positive.
|
||||||
|
|
||||||
|
À bien y regarder, il s'agit simplement de faire des communautés comme ce
|
||||||
|
qui existe déjà pour la plupart des projets open sources.
|
||||||
|
Mais au lieu de se focaliser sur un outil technique ici il s'agit d'aller
|
||||||
|
plus sur le terrain de la politique et de la philosophie tout en ne
|
||||||
|
négligeant pas le coté « travail productif » pour qu'il en découle du
|
||||||
|
concret.
|
||||||
|
|
||||||
|
J'attends vos commentaires avec impatience.
|
||||||
|
Bien entendu, si vous pensez que je me trompe complètement, je préfère une
|
||||||
|
honnêté brutale à un compatissement bienveillant.
|
||||||
|
N'hésitez pas à émettres vos critiques et vos idées.
|
||||||
|
|
||||||
|
Si suffisamment d'entre vous me répondent et que vous acceptez de partager
|
||||||
|
ces discussions entre vous.
|
||||||
|
Je trouverai un moyen de tous nous mettre en relation.
|
||||||
|
Bien que je pense cet aspect de communication direct est aussi intéressant.
|
||||||
|
|
||||||
|
Et si vous êtes même partiellement convaincu.
|
||||||
|
Dans ce cas, nous pourrons commencer à discuter des détails d'organisation
|
||||||
|
et des détails techniques.
|
||||||
|
Et probablement ainsi construire ensemble une communauté de confiance qui
|
||||||
|
nous convient.
|
||||||
|
|
||||||
|
Y.
|
10
notes/2020-08-29--14-09-05Z--ordre.org
Normal file
10
notes/2020-08-29--14-09-05Z--ordre.org
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 62c57354-72ed-4465-91b4-67c53defbd10
|
||||||
|
:END:
|
||||||
|
#+TITLE: ordre
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-08-29]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
9
notes/2020-09-01--10-01-49Z--society.org
Normal file
9
notes/2020-09-01--10-01-49Z--society.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: eb806d6a-57ca-4aab-8987-820b139b2be6
|
||||||
|
:END:
|
||||||
|
#+TITLE: society
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-09-01]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
12
notes/2020-09-06--22-02-36Z--cours_universite_en_ligne.org
Normal file
12
notes/2020-09-06--22-02-36Z--cours_universite_en_ligne.org
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 749c6c1d-781d-4362-a04a-2d8da46dfc1a
|
||||||
|
:END:
|
||||||
|
#+TITLE: cours universite en ligne
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-09-06]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
||||||
|
|
||||||
|
|
||||||
|
http://r.news1.fun-mooc.fr/mk/mr/TtObuvCBFz4rW3fNKQrCSjJ4Qk4neqQyOG0VFDm5Zr1vtg-Ei1uDV-Co1B506BJliEhSUhbD95V9NaiHA_YBawdrpwiFmpMKd7VxexWR_Yts9Q
|
13
notes/2020-09-06--22-04-11Z--cours_universite_en_ligne.org
Normal file
13
notes/2020-09-06--22-04-11Z--cours_universite_en_ligne.org
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 0a9e476b-3119-4f1a-9b52-39ca5cde4d45
|
||||||
|
:END:
|
||||||
|
#+TITLE: Cours université en ligne
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-09-06]
|
||||||
|
|
||||||
|
tags :: [[id:a2225047-7563-4e4e-a031-7f69e060de6b][learning]]
|
||||||
|
source :: [[notmuch:id:202028082220.nrnx041tgg9qvbj@news1.fun-mooc.fr][Email from France Université Numérique: Vos prochains MOOC sur FUN pour la première quinzaine de septembre]]
|
||||||
|
|
||||||
|
Exemple
|
||||||
|
|
||||||
|
http://r.news1.fun-mooc.fr/mk/mr/TtObuvCBFz4rW3fNKQrCSjJ4Qk4neqQyOG0VFDm5Zr1vtg-Ei1uDV-Co1B506BJliEhSUhbD95V9NaiHA_YBawdrpwiFmpMKd7VxexWR_Yts9Q
|
9
notes/2020-09-20--07-56-04Z--vie.org
Normal file
9
notes/2020-09-20--07-56-04Z--vie.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 504a4da0-9a11-4b7d-8055-92546880b7d0
|
||||||
|
:END:
|
||||||
|
#+TITLE: vie
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-09-20]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
218
notes/2020-10-04--10-29-45Z--luc_follow_sh_review.org
Normal file
218
notes/2020-10-04--10-29-45Z--luc_follow_sh_review.org
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: c5641d26-40dc-4473-afc9-4c6d70918f14
|
||||||
|
:END:
|
||||||
|
#+TITLE: Luc follow.sh review
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-10-04]
|
||||||
|
|
||||||
|
tags :: [[id:bec11f07-ffed-487b-9059-bdf6696548ab][programming]] [[id:a2f79c86-51a4-4313-a1af-b9e27a36712e][product]] [[id:89f9402f-0d70-4477-a4ae-34ad4da22868][app]] [[id:9b0a1aa0-5374-41e3-bf65-2ae9e0d03eeb][review]]
|
||||||
|
source :: https://www.follow.sh/en/
|
||||||
|
|
||||||
|
* Review
|
||||||
|
|
||||||
|
J'ai testé pas mal de choses.
|
||||||
|
C'est cool, ça marche j'ai fait pas mal de remarque.
|
||||||
|
Good luck! :)
|
||||||
|
|
||||||
|
** Site web
|
||||||
|
|
||||||
|
Très bonne première impression très propre.
|
||||||
|
Bemol, les couleurs ne sont pas alignées entre le logo et le thème du site.
|
||||||
|
C'est un détail mais c'est important puis que ça montre quasi immédiatement
|
||||||
|
que le branding n'est pas parfaitement aligné.
|
||||||
|
|
||||||
|
Le violet est assez sympa, donc je pense ça serait pas d'utiliser le violet
|
||||||
|
plutot que le bleu du logo partout.
|
||||||
|
Ça me semble plus facile dans ce sens.
|
||||||
|
|
||||||
|
*** Conseils
|
||||||
|
|
||||||
|
Sur la page d'accueil FR: je pense j'ajouterai "local" quelque part dans la
|
||||||
|
phrase d'accroche.
|
||||||
|
Peut-être même que j'utiliserai une formulation pour rassurrer
|
||||||
|
psychologiquement.
|
||||||
|
Du genre « Restez en contact avec vos commerçants de proximité », à
|
||||||
|
améliorer, mais tu vois.
|
||||||
|
|
||||||
|
Aussi, contrairement à ce que j'ai dit juste avant, s'il faut appuyer sur
|
||||||
|
le coté rassurant, local, etc...
|
||||||
|
Malheureusement le thème du site n'est pas super adapté.
|
||||||
|
Il faudrait un truc qui fasse plus chaud les couleurs choisies ici sont
|
||||||
|
froides et technologiques.
|
||||||
|
Typiquement y aller à fond genre un theme comme =gruvbox= par exemple.
|
||||||
|
Un truc qui rapelle les affiches genre biscuit lu des années 20.
|
||||||
|
Donc plutôt du jaune, du marron, du bleu doux, etc...
|
||||||
|
En gros, j'irai vair des couleurs vintage plutôt chaudes
|
||||||
|
|
||||||
|
Ma préfée serait: https://www.schemecolor.com/yellow-vintage-color-palette.php
|
||||||
|
Mais qui irait aussi:
|
||||||
|
- https://www.schemecolor.com/vintage-by-choice.php
|
||||||
|
- https://www.schemecolor.com/vintage-brown-look.php
|
||||||
|
- https://www.schemecolor.com/vintage-tirp.php le plus doux, rassurant mais féminin
|
||||||
|
|
||||||
|
Et assez important pour donner cette impression de chaleur, ne pas utiliser
|
||||||
|
de background blanc. Probablement utiliser une fonte qui fasse un peu vintage.
|
||||||
|
Exemples:
|
||||||
|
- https://ourstoriesin.com
|
||||||
|
- https://themeforest.net/item/retro-portfolio-one-page-vintage-wordpress-theme/1708109?s_rank=8&_ga=2.52183969.96619734.1601802127-201122956.1575809459
|
||||||
|
|
||||||
|
*** Problèmes
|
||||||
|
|
||||||
|
1. En allant sur =follow.sh= je suis tombé sur le site anglais, pas moyen de
|
||||||
|
trouver comment aller sur le site en FR.
|
||||||
|
C'est en allant sur =confidentialité= et en cliquant sur la petite maison
|
||||||
|
que je suis arrivé sur le site en FR (mon env est en Anglais).
|
||||||
|
2. [EN] Typo: Feature au lieu de Features dans le titre.
|
||||||
|
3. Le texte anglais ne semble pas adapté à ce que fait l'app. Cette partie
|
||||||
|
est assez difficile, il faudrait d'abord savoir qui arrive sur ce site
|
||||||
|
et adapter le discours et le vocabulaire pour le public visé.
|
||||||
|
4. En allant sur https://www.follow.sh/confidentialite j'ai cru qu'il n'y
|
||||||
|
avait pas de bouton retour. En fait j'ai pris le triangle en background
|
||||||
|
pour un bouton retour et je n'ai pas vue la petite maison.
|
||||||
|
Je pense qu'il faudrait mettre un top menu ou avoir la maison dans un
|
||||||
|
cercle coloré ou noir pour que l'icône se voit.
|
||||||
|
5. Le mail dans Contactez nous n'est pas cliquable. Vous pouvez à minima
|
||||||
|
obfusquer le `mailto:contact@follow.sh` en utilisant un mix de `&#xxx;`
|
||||||
|
genre http://www.wbwip.com/wbw/emailencoder.html.
|
||||||
|
** App
|
||||||
|
|
||||||
|
J'ai désinstallé et réinstallé l'app pour reproduire les conditions d'un
|
||||||
|
nouvel utilisateur.
|
||||||
|
|
||||||
|
*** Première expérience utilisateur non commerçant
|
||||||
|
|
||||||
|
1. permiere expérience, l'app lance une page de load avec le logo au
|
||||||
|
centre.
|
||||||
|
Directement après on se prend une notification, "follow would like to
|
||||||
|
send you notifications".
|
||||||
|
En général c'est plus simpa d'arriver directement dans un "wizard" qui
|
||||||
|
fait le tour du propriétaire avec un petit message explicatif.
|
||||||
|
« Pour ne rien râter des news locales merci d'autoriser follow à vous
|
||||||
|
envoyer des notifications; le niveau des notifications est configurable
|
||||||
|
dans l'applications ». Par exemple, on appuis sur "suivant" et hop on se
|
||||||
|
prend la demande. Sans ce premier message la plupart des gens refusent
|
||||||
|
systématiquement.
|
||||||
|
Avec le message je pense ça augmente sensiblement l'engagement.
|
||||||
|
2. Après avoir accepté, on arrive sur "Actualités et bon plans"
|
||||||
|
avec un bouton "Mes abonnements".
|
||||||
|
On clique dessus on arrive sur l'onglet "Abonnements", c'est sympa, je
|
||||||
|
pense qu'en premier usage il serait plus cool d'arriver sur une plage
|
||||||
|
explicative (toujours type wizard) et quand on fait "suivant" hop on
|
||||||
|
arrive sur l'onglet "Abonnements".
|
||||||
|
3. Je clique sur scanner QR code, la page affiche une page avec le top bleu
|
||||||
|
"Scan" et el contenu est du texte non designé (top left petit)
|
||||||
|
"Requesting for camera permission".
|
||||||
|
Là encore pour premier usage, je pense ça serait bien un texte
|
||||||
|
explicatif avant de demander la permission d'accès à la caméra.
|
||||||
|
Plein de gens ne savent pas scanner un QR code.
|
||||||
|
Juste une page du genre « Les QR codes sont ces images que l'on voit un
|
||||||
|
peu partout "exemple de QR code" il suffit de les filmer avec la caméra
|
||||||
|
de votre iPhone pour les scanner, c'est pour celà que nous vous
|
||||||
|
demandons l'accès à votre caméra. ». Et hop suivant, demande d'accès.
|
||||||
|
4. Si on choisit "Rechercher" l'interface est naturelle, par contre les
|
||||||
|
commerces ne semblent pas ordonnés. J'imagine qu'ils sont ordonnés par
|
||||||
|
date d'ajout. Si une personne veut chercher en scrollant (parce que des
|
||||||
|
gens peuvent être masochistes) il devient très difficile de trouver son commerce.
|
||||||
|
Je pense qu'il serait plus naturel de les ordonner par ordre
|
||||||
|
alphabetique et si possible d'avoir comme dans "Contact" la liste des
|
||||||
|
premières lettres sur la droite et d'ailleurs pour les tests, il serait
|
||||||
|
pas mal d'engendrer quelques dizaines de faux commerces. Et pourquoi pas
|
||||||
|
plusieurs milliers pour voir comment cela se comporterait.
|
||||||
|
A mon avis si l'app commence à être utilisé beaucoup cette interface
|
||||||
|
avec liste n'est absolument pas gérable, il faudra un prefiltre par
|
||||||
|
geoloc pour minimiser la liste à moins de 50 ou moins de 100 commerces.
|
||||||
|
5. Dans la liste "Rechercher" il y a un commerce avec un tick bleu.
|
||||||
|
Aucune idée de quelle est la signification.
|
||||||
|
6. Lorsqu'on clique pour s'abonner on revient sur l'onglet "Mes abonnements".
|
||||||
|
Mais du coups il ne reste que le bouton + et QR-code en haut.
|
||||||
|
Et il n'est pas tout de suite évident qu'il faudra cliquer là pour
|
||||||
|
ajouter un nouvel abonnement.
|
||||||
|
Souvent on s'attend à avoir un bouton + en bas de la liste en plus.
|
||||||
|
Sans ajouter le bouton, je pense il serait pas mal pour le tout premier
|
||||||
|
retour après le premier abonnement d'avoir un wizard qui fasse le focus
|
||||||
|
sur les deux boutons pour expliquer comment ajouter de nouveaux abonnements.
|
||||||
|
À la limite je laisserais deux gros bouton en haut plutôt que ces deux
|
||||||
|
petits icônes qui font plus jolis mais sont plus difficile à détecter.
|
||||||
|
Et de même j'agrandirais ces boutons pour rendre plus évident leur présence.
|
||||||
|
7. En retournant sur l'onglet "Actu" il y a un bug (iPhone 11), le bas de
|
||||||
|
la page est grisé, la taille de la liste n'est pas égale à la taille de
|
||||||
|
l'espace disponible.
|
||||||
|
8. L'onglet "A propos" le texte manque de contraste et est trop petit. La
|
||||||
|
moitié de la page est vide. Autant en profiter.
|
||||||
|
Le "Contactez-nous à info@follow.sh" n'est pas actionnable (cliquable).
|
||||||
|
|
||||||
|
*** Onglet commerçant
|
||||||
|
|
||||||
|
Je clique sur le bouton "Connexion".
|
||||||
|
|
||||||
|
Je vois le nombre de followers et le nombre de publications restantes.
|
||||||
|
C'est très bien.
|
||||||
|
Si je clique sur "nouvelle publication" immédiatement demande d'accès à mes
|
||||||
|
photos.
|
||||||
|
Je refuse de donner l'accès message [missing
|
||||||
|
"fr.send_notification.image.permissions_required" translation] Je pense
|
||||||
|
qu'il vaut mieux se passer de cette erreur visible par l'utilisateur final.
|
||||||
|
J'essaye d'écrire malgré tout, à chaque nouvelle lettre, je me prend le
|
||||||
|
meme message d'erreur.
|
||||||
|
Donc oui, il faut vraiment supprimer cette notificaiton d'erreur.
|
||||||
|
Surtout que même en image, ça marche.
|
||||||
|
|
||||||
|
**** Onglet packs de publications
|
||||||
|
|
||||||
|
Connaissant les commerçants, ils en ont marre de payer pour tout et rien.
|
||||||
|
Je pense qu'il ne serait pas trop mal plutôt que limiter leurs
|
||||||
|
"publication".
|
||||||
|
De faire une distinction entre "publication donnant lieu à des
|
||||||
|
notifications" et "publication silencieuses" qui seraient donc moins chère
|
||||||
|
ou avec des packs du genre 1 ou 2 pub silencieuses par semaine offerte
|
||||||
|
etc...
|
||||||
|
Mais ça risque de changer un peu le backend, mais d'un point de vue
|
||||||
|
marketing je pense que l'idée sera mieux reçue des commerçants.
|
||||||
|
|
||||||
|
Un autre aspect à considérer et peut-être de ne pas montrer directement le
|
||||||
|
nombre d'abonnés surtout pendant la période de lancement.
|
||||||
|
Histoire de laisser une sorte de croyance se mettre en place.
|
||||||
|
Avec certain qui feront des erreurs de corrélations entre l'utilisation de
|
||||||
|
l'app et une meilleure affluence.
|
||||||
|
|
||||||
|
Et aussi en terme de vente, peut-être plutot que compter le "nombre de notification"
|
||||||
|
considerer de limiter la fréquence des publications.
|
||||||
|
Du genre, pas plus que 1/semaine, 1/jour, 3/jour, etc...
|
||||||
|
Sinon vous risquez de vous retrouver avec des anti-joueurs assez vite
|
||||||
|
surtout que ce n'est pas très cher de faire l'anti-joueur.
|
||||||
|
De la même manière, je pense que coté utilisateur il faut un option qui
|
||||||
|
permette de limiter le nombre de notifications par jour et peut-être meme
|
||||||
|
aider les utilisateurs à configurer les notifications via l'app pour éviter
|
||||||
|
que les gens la désinstalle parce qu'au lieu d'être utile l'app devienne
|
||||||
|
une source de nuisance.
|
||||||
|
|
||||||
|
Après tout c'est une demande de recevoir de la pub.
|
||||||
|
Dans notre monde moderne, les gens essayent plutôt de limiter leur
|
||||||
|
exposition aux pubs.
|
||||||
|
Une autre piste potentielle serait d'augmenter une forme d'engagement des
|
||||||
|
utilisateurs en les rémunérant avec quelque chose, pas juste en recevant la
|
||||||
|
promo. Typiquement des promos exclusives via l'app, etc...
|
||||||
|
|
||||||
|
Détail technique, il y a une poubelle en haut à droite de "Nouvelle
|
||||||
|
publication" Aucune idée de comment utiliser ça.
|
||||||
|
|
||||||
|
De même un problème bien plus grave, je ne vois pas comment
|
||||||
|
supprimer/editer une publication.
|
||||||
|
Je pense ça risque d'amener des pb du genre, typo dans la promo, genre,
|
||||||
|
mauvais prix, à cause d'une typo pouvant causer des pertes financières à un
|
||||||
|
commerçant avec potentiellement des conséquences juridiques.
|
||||||
|
|
||||||
|
Si j'essaye d'éditer mon compte, je reprend le message d'erreur à cause de
|
||||||
|
mon refus de donner l'accès à mes photos.
|
||||||
|
La même erreur trigger à chaque fois que j'appuis sur une lettre pour
|
||||||
|
éditer. Il me semble que c'est aussi un pb de code, la demande d'accès ne
|
||||||
|
devrait se faire que lorsqu'on change une image pas à chaque fois que l'on
|
||||||
|
edite du texte.
|
||||||
|
|
||||||
|
*** Problèmes/bug/remarques
|
||||||
|
|
||||||
|
1. Comportement inattendu, si on fait scanner QR code et qu'on ne scanne rien, qu'on
|
||||||
|
change d'onglet et qu'on revient sur l'onglet "Abonnement" l'appli reste
|
||||||
|
toujours en mode scan de QR code et on voit toujours la vue caméra.
|
||||||
|
Je pense que lorsqu'on change d'onglet, il faudrait revenir à la page
|
||||||
|
d'acceuil de l'onglet "Abonnements".
|
9
notes/2020-10-04--10-30-25Z--product.org
Normal file
9
notes/2020-10-04--10-30-25Z--product.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: a2f79c86-51a4-4313-a1af-b9e27a36712e
|
||||||
|
:END:
|
||||||
|
#+TITLE: product
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-10-04]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-10-04--10-30-41Z--app.org
Normal file
9
notes/2020-10-04--10-30-41Z--app.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 89f9402f-0d70-4477-a4ae-34ad4da22868
|
||||||
|
:END:
|
||||||
|
#+TITLE: app
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-10-04]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-10-04--10-30-54Z--review.org
Normal file
9
notes/2020-10-04--10-30-54Z--review.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 9b0a1aa0-5374-41e3-bf65-2ae9e0d03eeb
|
||||||
|
:END:
|
||||||
|
#+TITLE: review
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-10-04]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
76
notes/2020-10-09--14-52-57Z--clojure_job_discussion.org
Normal file
76
notes/2020-10-09--14-52-57Z--clojure_job_discussion.org
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: fe7731fd-315e-4560-ace2-2deb397ffa00
|
||||||
|
:END:
|
||||||
|
#+TITLE: clojure job discussion
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-10-09]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source :: [[notmuch:id:1053023735.5165546.1602236330261.JavaMail.app@lor1-app45372.prod.linkedin.com][Email from Remi Thandi: Clojure Development - Europe]]
|
||||||
|
|
||||||
|
|
||||||
|
#+BEGIN_QUOTE
|
||||||
|
Clojure Development - Europe
|
||||||
|
|
||||||
|
Hi yann,
|
||||||
|
|
||||||
|
Hope you're well,
|
||||||
|
|
||||||
|
I came across your profile as I see that you've got some great skills in
|
||||||
|
Clojure!
|
||||||
|
|
||||||
|
As a specialist software development recruiter I'm building a desk around
|
||||||
|
Clojure specifically.
|
||||||
|
|
||||||
|
I'm working with a few organisations around Europe (now branching out to
|
||||||
|
the rest of the world) with some very strong conversations happening with
|
||||||
|
more vacancies soon to be on my desk!
|
||||||
|
|
||||||
|
Right now I'm looking for skilled Engineers who are looking for new roles.
|
||||||
|
|
||||||
|
Please let me know your situation and what you're looking for.
|
||||||
|
|
||||||
|
Role type
|
||||||
|
Role location (Please confirm remote if this is what you are looking for)
|
||||||
|
Salary/Pay - (Per day/Month/Year)
|
||||||
|
|
||||||
|
Kind Regards,
|
||||||
|
Remi Singh | Delivery Manager - Europe
|
||||||
|
Web, Mobile & Desktop (WMD)
|
||||||
|
UK: 0044 (0)208 0047784
|
||||||
|
#+END_QUOTE
|
||||||
|
|
||||||
|
|
||||||
|
Hi Remi,
|
||||||
|
|
||||||
|
Thanks a lot for your interest.
|
||||||
|
While I love my current position I've been there for quite a time now.
|
||||||
|
So I'm glad that you could give me the occasion to take a look elsewhere.
|
||||||
|
While I am not actively looking for a new role, that could change soon.
|
||||||
|
|
||||||
|
I have mostly worked on web applications.
|
||||||
|
Even though I have a full stack experience I am a lot more often focused on
|
||||||
|
the backend.
|
||||||
|
Recently I specialized around the Authentication and User identities
|
||||||
|
technologies and protocols.
|
||||||
|
I was the main developer to write a full OAuth2 Service Provider that also
|
||||||
|
support OpenID Connect.
|
||||||
|
Knowing that, I think my profile fit with backend engineer positions.
|
||||||
|
|
||||||
|
Regarding the location, I would prefer to remain in the South of France and
|
||||||
|
continue to work as a full remote employee.
|
||||||
|
|
||||||
|
Regarding the Salary, this is a bit tricky, currently my salary is about
|
||||||
|
90k€/month before advantages.
|
||||||
|
I often performed very well so I've got a lot of bonuses typically 80k of
|
||||||
|
RSU (on a 4 year period) and every year a ~20k bonus to add on top that.
|
||||||
|
So everything combined I am close to a 120k€/year salary.
|
||||||
|
|
||||||
|
So, to resume:
|
||||||
|
|
||||||
|
Role type: Senior Software Engineer
|
||||||
|
Role location: full remote
|
||||||
|
Salary: 120k€
|
||||||
|
|
||||||
|
Thanks,
|
||||||
|
Yann.
|
|
@ -0,0 +1,46 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 358588f2-436a-4ff8-a8a2-02e6d29647c1
|
||||||
|
:END:
|
||||||
|
#+TITLE: I'm Thinking of Ending Things (2020)
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-10-25]
|
||||||
|
|
||||||
|
tags :: [[id:fb7eff33-f47e-49af-b087-24fcc47dc62b][film]]
|
||||||
|
source :: https://www.imdb.com/title/tt7939766/
|
||||||
|
|
||||||
|
Un film qui m'a fait beaucoup pensé aux films de David Lynch.
|
||||||
|
Les personnages parraissent vivant mais des choses « impossible » leur arrive.
|
||||||
|
Des pertes de mémoire, des inconsistences dans leur mémoire, leur vie, etc...
|
||||||
|
|
||||||
|
Parfois un personne se retourne au milieu d'une discussion pour se
|
||||||
|
retrouver au milieu d'un pièce vide.
|
||||||
|
|
||||||
|
Et c'est ce dont il s'agit dans "I'm Thinking of Ending Things".
|
||||||
|
Mais comme je suis un fan de David Lynch et que j'analyse ce genre de
|
||||||
|
chose.
|
||||||
|
Et bien, j'étais un peu « à la maison » en regardant ce film.
|
||||||
|
|
||||||
|
Les personnages sont tous des personnages inventés dans l'esprit du
|
||||||
|
personnage principal qui fantasme d'un scénario.
|
||||||
|
Le personnage principal est un "janitor" de lycée.
|
||||||
|
Il est la cible des ricanneries des jeunes filles qui lui trouve un air
|
||||||
|
bizarre.
|
||||||
|
Il aurait aimé être un scientifique, un poète, ou tout un tas d'autres
|
||||||
|
choses.
|
||||||
|
Mais il n'a toujours été bon qu'à s'occuper de nettoyer le lycée le soir.
|
||||||
|
Dans le scénario qu'il imagine, il s'imagine de nouveau jeune.
|
||||||
|
Avec une jeune fille qui lui ressemble et qui le trouve super.
|
||||||
|
Il s'imagine lui faire découvrir sa vie.
|
||||||
|
Sa famille, là où il a vécu.
|
||||||
|
Ses moments difficiles, lorsque ses parents tombent malades et meurent.
|
||||||
|
|
||||||
|
Et finalement il l'amène au lieu qui a fini sa vie.
|
||||||
|
Le lycée qu'il n'a jamais quitté et qu'il soccupe de nettoyer.
|
||||||
|
|
||||||
|
Dans ce film il y avait beaucoup de choses bien faites.
|
||||||
|
Mais aussi certains ratés.
|
||||||
|
Les acteurs sont vraiment très bon à mon goût.
|
||||||
|
Je trouve la fin un peu ratée.
|
||||||
|
Et il est trop long, certaines scènes sont ennuyeuses.
|
||||||
|
Pourtant j'aime bien les films avec des longeurs en général, mais là les
|
||||||
|
longeurs manquaient de profondeur.
|
9
notes/2020-10-25--15-47-30Z--film.org
Normal file
9
notes/2020-10-25--15-47-30Z--film.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: fb7eff33-f47e-49af-b087-24fcc47dc62b
|
||||||
|
:END:
|
||||||
|
#+TITLE: film
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-10-25]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
87
notes/2020-11-19--10-36-42Z--personal_plan.org
Normal file
87
notes/2020-11-19--10-36-42Z--personal_plan.org
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: cbe19b95-6274-4565-8d25-4ad35e41feb9
|
||||||
|
:END:
|
||||||
|
#+TITLE: Personal Plan
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-11-19]
|
||||||
|
|
||||||
|
- tags :: [[file:../../../../../../.org/journal/2020-12-01--10-41-19Z--plan.org][plan]] [[file:../../../../../../.org/journal/2020-12-01--10-39-44Z--y_project.org][y-project]]
|
||||||
|
- source ::
|
||||||
|
|
||||||
|
Bon je vais écrire en Français puisque c'est pour moi et que je suis bien
|
||||||
|
entendu bien plus à l'aise en français.
|
||||||
|
|
||||||
|
OK, holà, on est le 1er décembre.
|
||||||
|
|
||||||
|
* Plans
|
||||||
|
|
||||||
|
Les plans possibles sont:
|
||||||
|
|
||||||
|
1. Progresser chez Cisco
|
||||||
|
2. Aller dans une autre boite
|
||||||
|
3. Faire du freelance
|
||||||
|
4. Créer sa propre boite
|
||||||
|
|
||||||
|
** Plan 1: Cisco
|
||||||
|
|
||||||
|
Tout étant possible de faire plusieurs choses à la fois.
|
||||||
|
Donc il ne faut pas négliger l'option 1.
|
||||||
|
Il suffit de continuer.
|
||||||
|
La difficulté est de dégager du temps et de l'énergie pour le reste.
|
||||||
|
|
||||||
|
Important, améliorer son Anglais.
|
||||||
|
J'ai vu à quel point ça donne une mauvaise impression un accent fort.
|
||||||
|
Même sur moi qui suis Français.
|
||||||
|
|
||||||
|
*** TODO Améliorer son Anglais
|
||||||
|
|
||||||
|
** Plan 2: Employé autre boite
|
||||||
|
|
||||||
|
Il convient de mettre à jour son CV.
|
||||||
|
Savoir ce qu'on veut, savoir se vendre.
|
||||||
|
Donc la solution 2, revient à trouver une boite comme Cisco.
|
||||||
|
Mais maintenant que j'ai fait mon trou, j'espère pouvoir avoir plus de
|
||||||
|
temps libre et monter avec beaucoup moins d'efforts.
|
||||||
|
|
||||||
|
Cependant il faut répondre et postuler de temps en temps.
|
||||||
|
|
||||||
|
*** TODO Améliorer son Anglais (bis)
|
||||||
|
*** TODO Garder son CV à jour
|
||||||
|
*** TODO Postuler fréquemment
|
||||||
|
|
||||||
|
** Plan 3: Freelance
|
||||||
|
|
||||||
|
Via le Plan 2, je pense que celà pourra créer des relations.
|
||||||
|
Certaines ne pourront, voudront pas m'embaucher.
|
||||||
|
Ou moi aussi je ne voudrais pas.
|
||||||
|
|
||||||
|
Mais il pourrait être suffisant de convenir de travail à temps partiel de
|
||||||
|
consulting.
|
||||||
|
|
||||||
|
Ce n'est pas nécessairement le plus intéressant.
|
||||||
|
Cependant, on peut créer une entreprise de consulting.
|
||||||
|
Typiquement pour toute la gestion de l'Auth.
|
||||||
|
Je suis un expert après tout.
|
||||||
|
*** TODO Creation site freelance anonyme
|
||||||
|
|
||||||
|
** Plan 4: Création de Produit
|
||||||
|
|
||||||
|
Pour créer un produit il faut des idées.
|
||||||
|
Il y a plusieurs stratégies ici.
|
||||||
|
Il faut le bon équilibre entre production et approfondissement.
|
||||||
|
L'idée pour que ça fonctionne est d'avoir une système où rien ne se perd.
|
||||||
|
Donc si le but est de faire un gros produit, il faut découper en beaucoup
|
||||||
|
de micro-produit, chacun pouvant être utilise et pouvant se vendre.
|
||||||
|
|
||||||
|
C'est la partie la plus intéressante.
|
||||||
|
Mais il faut trouver de l'énergie pour le temps libre.
|
||||||
|
Des idées, un stack, etc...
|
||||||
|
|
||||||
|
Une idée de fond, serait de créer quelque chose qui me dépasse.
|
||||||
|
Avoir un plan, visible, établi, et avoir un groupe de personne, pas
|
||||||
|
seulement moi travailler pour arriver à un but ultime.
|
||||||
|
Peut-être sur des dizaines, centaines d'années.
|
||||||
|
Peut importe.
|
||||||
|
Il faut voir grand.
|
||||||
|
|
||||||
|
*** TODO Etablir un plan, produit final, chemin, création.
|
58
notes/2020-11-21--16-26-23Z--org_present_test.org
Normal file
58
notes/2020-11-21--16-26-23Z--org_present_test.org
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: c7091bd9-68d7-494b-9538-b09e54cc1d2d
|
||||||
|
:END:
|
||||||
|
#+TITLE: Org present test
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-11-21]
|
||||||
|
|
||||||
|
tags :: [[id:5579f7b0-3b00-4751-9211-9b9381481954][org-mode]]
|
||||||
|
source :: https://github.com/rlister/org-present
|
||||||
|
|
||||||
|
* Presentation 1
|
||||||
|
** Title
|
||||||
|
|
||||||
|
Yann Esposito
|
||||||
|
** First slide
|
||||||
|
yolo
|
||||||
|
** Second slide
|
||||||
|
|
||||||
|
#+BEGIN_SRC clojure
|
||||||
|
(defn foo [x] (:something x))
|
||||||
|
#+END_SRC
|
||||||
|
** Conclusion
|
||||||
|
|
||||||
|
the end.
|
||||||
|
* Presentations 2
|
||||||
|
** First slide
|
||||||
|
|
||||||
|
- This is the first slide.
|
||||||
|
- With an item list.
|
||||||
|
|
||||||
|
*** Sub 1.1
|
||||||
|
Hello
|
||||||
|
*** Sub 1.2
|
||||||
|
Sub
|
||||||
|
**** Sub 1.2.1
|
||||||
|
My
|
||||||
|
**** Sub 1.2.2
|
||||||
|
Old
|
||||||
|
*** Sub 1.3
|
||||||
|
Friend
|
||||||
|
|
||||||
|
** Slide 2
|
||||||
|
|
||||||
|
This is slide 1.2
|
||||||
|
|
||||||
|
#+BEGIN_SRC elisp
|
||||||
|
(defun foo () "foo")
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
** Slide 3
|
||||||
|
|
||||||
|
Slide
|
||||||
|
|
||||||
|
** Slide 4
|
||||||
|
|
||||||
|
With some text.
|
||||||
|
|
||||||
|
** The End
|
122
notes/2020-11-26--10-11-23Z--meta_rfc_for_dev_team.org
Normal file
122
notes/2020-11-26--10-11-23Z--meta_rfc_for_dev_team.org
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: a7c653a8-0b90-43bc-85ea-71bbb28cf1dd
|
||||||
|
:END:
|
||||||
|
#+TITLE: [Meta RFC] RFC template
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-11-26]
|
||||||
|
|
||||||
|
tags :: [[file:../../../../../../.org/journal/2020-11-26--10-12-21Z--work.org][work]] [[file:../../../../../../.org/journal/2020-11-26--10-12-42Z--organisation.org][organisation]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
/Abstract/: Yesterday in our weekly meeting I discussed about how I would
|
||||||
|
like us to work with RFCs.
|
||||||
|
I would like to add this document to talk about RFCs.
|
||||||
|
So this is a meta document.
|
||||||
|
I hope not to trigger the need for a meta-meta-document ;).
|
||||||
|
I will try to keep it self-referencing by using its own description.
|
||||||
|
Closer to the quine :).
|
||||||
|
|
||||||
|
*Audience*: (Who's impacted?)
|
||||||
|
+ iroh team
|
||||||
|
+ managers
|
||||||
|
|
||||||
|
*RFC kind*:
|
||||||
|
+ team organisation
|
||||||
|
|
||||||
|
** Objective
|
||||||
|
|
||||||
|
*Improvement*: Write a proper RFC template.
|
||||||
|
|
||||||
|
* Proposed Solutions
|
||||||
|
|
||||||
|
** Template
|
||||||
|
|
||||||
|
This is the template I would like us to provide.
|
||||||
|
We should probably add that as a github template for issue.
|
||||||
|
So if you declare you want to create a new RFC issue you will be presented
|
||||||
|
this template.
|
||||||
|
|
||||||
|
The author will only need to fill the blanks and remove parts that are not
|
||||||
|
relevant.
|
||||||
|
|
||||||
|
*** [Title] <- name of the issue in github
|
||||||
|
|
||||||
|
/Abstract/: A little bit more than in the title
|
||||||
|
|
||||||
|
*Audience*: (Who's impacted?)
|
||||||
|
+ iroh team
|
||||||
|
+ ops
|
||||||
|
+ ui team
|
||||||
|
+ managers
|
||||||
|
+ customers
|
||||||
|
|
||||||
|
*RFC kind*: (remove non relevant part)
|
||||||
|
+ code convention (=> Audience; iroh-team only)
|
||||||
|
- ns naming convention
|
||||||
|
- position of args
|
||||||
|
- naming of args
|
||||||
|
- etc..
|
||||||
|
+ dev tooling (=> Audience; iroh-team, maybe ops)
|
||||||
|
- emacs mode
|
||||||
|
- cider
|
||||||
|
- clj-refactor
|
||||||
|
- CI
|
||||||
|
- scripts
|
||||||
|
- git commit message
|
||||||
|
- docker
|
||||||
|
- etc...
|
||||||
|
+ team organisation (=> Audience; iroh-team, managers)
|
||||||
|
- github dashboard, issue templates, github labels, etc...
|
||||||
|
+ technical specification (Audience not constrained);
|
||||||
|
The goal of a technical specification RFC is is to produce a
|
||||||
|
document containing:
|
||||||
|
- a functional specification
|
||||||
|
- a technical specification for our team
|
||||||
|
- technical specification(s) for other team if necessary (ops, UI, etc...)
|
||||||
|
- an execution plan
|
||||||
|
|
||||||
|
**** Objectives
|
||||||
|
|
||||||
|
- *Problems*:
|
||||||
|
- *New Features*:
|
||||||
|
- *Improve the current situation*:
|
||||||
|
|
||||||
|
**** Proposed Solutions
|
||||||
|
|
||||||
|
***** [Solution 1]
|
||||||
|
|
||||||
|
Describe one possible solution
|
||||||
|
|
||||||
|
+ pros
|
||||||
|
+ cons
|
||||||
|
|
||||||
|
***** [Solution 2]
|
||||||
|
|
||||||
|
Describe another possible solution
|
||||||
|
|
||||||
|
+ pros
|
||||||
|
+ cons
|
||||||
|
|
||||||
|
**** Furter Considerations and Remarks
|
||||||
|
|
||||||
|
Generic place to put comment not suitable in any other subsection.
|
||||||
|
Typically, we could add
|
||||||
|
|
||||||
|
+ Security
|
||||||
|
+ Communication
|
||||||
|
**** Plan
|
||||||
|
|
||||||
|
Optional, complete once a consensus has been reached.
|
||||||
|
Should contain a plan to achieve the solution.
|
||||||
|
|
||||||
|
** Further Considerations and Remarks
|
||||||
|
|
||||||
|
*** =dev= label
|
||||||
|
|
||||||
|
We already have a =dev= label we should probably use for RFC whose audience
|
||||||
|
is just the iroh team.
|
||||||
|
|
||||||
|
*** =Epic= label
|
||||||
|
|
||||||
|
We should continu to use the =Epic= label for issues whose goal is to
|
||||||
|
produce a specification document along with an execution plan.
|
9
notes/2020-11-26--10-12-21Z--work.org
Normal file
9
notes/2020-11-26--10-12-21Z--work.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 1be19813-6fb0-453a-8e4f-24fc47e10b3b
|
||||||
|
:END:
|
||||||
|
#+TITLE: work
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-11-26]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-11-26--10-12-42Z--organisation.org
Normal file
9
notes/2020-11-26--10-12-42Z--organisation.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 01c1b082-4795-4c75-aa32-10795ab3b4e9
|
||||||
|
:END:
|
||||||
|
#+TITLE: organisation
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-11-26]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
9
notes/2020-12-01--10-39-44Z--y_project.org
Normal file
9
notes/2020-12-01--10-39-44Z--y_project.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: d009643c-24d9-445a-886b-21c2bb7f5bf4
|
||||||
|
:END:
|
||||||
|
#+TITLE: y-project
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-01]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
34
notes/2020-12-01--10-40-06Z--the_huge_y_project.org
Normal file
34
notes/2020-12-01--10-40-06Z--the_huge_y_project.org
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 9c39a4bf-34fd-4788-92be-fab18a109410
|
||||||
|
:END:
|
||||||
|
#+TITLE: The Huge Y Project
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-01]
|
||||||
|
|
||||||
|
- tags :: [[id:d009643c-24d9-445a-886b-21c2bb7f5bf4][y-project]] [[id:e63bb3e0-4598-42e5-ae29-a4e2466383c1][plan]]
|
||||||
|
- source :: [[file:../../../../../../.org/journal/2020-11-19--10-36-42Z--personal_plan.org][Personal Plan]]
|
||||||
|
|
||||||
|
* Quel projet?
|
||||||
|
|
||||||
|
- General AI?
|
||||||
|
- Space exploration?
|
||||||
|
- Infinite Energy?
|
||||||
|
- Huge code network?
|
||||||
|
- Eternal Life?
|
||||||
|
- Super Education and Learning? Make human smarts.
|
||||||
|
- Toward Utopia?
|
||||||
|
|
||||||
|
De tout ceci on peut déduire un projet qui dépasse de loin une vie humaine.
|
||||||
|
Et elles sont toutes reliées.
|
||||||
|
Tous ces objectifs ont le point commun d'être des idées classiques de SF.
|
||||||
|
La seule un peu originale et la plus risquée est celle de la gestion de
|
||||||
|
l'Humain via un environnement social positif.
|
||||||
|
Mais celà pose un problème éthique de décider à priori ce que serait de bon
|
||||||
|
ou de mauvais comportements humains.
|
||||||
|
|
||||||
|
Si nous devions faire un plan pour arriver au plus vite à une utopie.
|
||||||
|
Il y a plusieurs chemins possible.
|
||||||
|
L'un d'entre eux est de de se fabriquer notre propre Dieu.
|
||||||
|
Une être à la fois supérieur aux Hommes en tout point et bienveillant.
|
||||||
|
Et il semblerait donc naturel de se tourner vers la résolution de General
|
||||||
|
IA en premier.
|
9
notes/2020-12-01--10-41-19Z--plan.org
Normal file
9
notes/2020-12-01--10-41-19Z--plan.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e63bb3e0-4598-42e5-ae29-a4e2466383c1
|
||||||
|
:END:
|
||||||
|
#+TITLE: plan
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-01]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
24
notes/2020-12-04--13-19-56Z--english_lesson.org
Normal file
24
notes/2020-12-04--13-19-56Z--english_lesson.org
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 39c34896-dfcb-4cb7-89c3-4d25a3509b5d
|
||||||
|
:END:
|
||||||
|
#+TITLE: English Lesson
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-04]
|
||||||
|
|
||||||
|
tags :: [[id:9c215186-e64a-400d-a507-b888e4c9ada1][english]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
* Ted
|
||||||
|
|
||||||
|
https://www.italki.com/teacher/4869805
|
||||||
|
|
||||||
|
** Lesson 1 (30 min)
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 1a758996-2bb0-4753-8365-34ca3ef0f940
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Pronounciation,
|
||||||
|
French accent,
|
||||||
|
Grammatical errors,
|
||||||
|
Maybe a bit of vocabulary, but more about local expressions.
|
||||||
|
Tyipcally, Austin, Texas.
|
9
notes/2020-12-04--13-20-08Z--english.org
Normal file
9
notes/2020-12-04--13-20-08Z--english.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 9c215186-e64a-400d-a507-b888e4c9ada1
|
||||||
|
:END:
|
||||||
|
#+TITLE: english
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-04]
|
||||||
|
|
||||||
|
tags ::
|
||||||
|
source ::
|
|
@ -0,0 +1,16 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 9146a858-cf08-4d5c-aff1-6c9a8a3db8ed
|
||||||
|
:END:
|
||||||
|
#+TITLE: CRUX Past Present and Future!
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-04]
|
||||||
|
|
||||||
|
tags :: [[file:../../../../../../.org/journal/2020-05-26--06-16-14Z--clojure.org][clojure]] [[file:../../../../../../.org/journal/2020-12-04--15-33-28Z--re_clojure_2020.org][re:clojure 2020]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
CRUX DB, with SQL-like querying with time index.
|
||||||
|
|
||||||
|
- =seek= find the first event after a date. Index by date.
|
||||||
|
- trick to reverse the timeline to lookup in reverse.
|
||||||
|
|
||||||
|
Query Indices
|
9
notes/2020-12-04--15-33-28Z--re_clojure_2020.org
Normal file
9
notes/2020-12-04--15-33-28Z--re_clojure_2020.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 1f9f0299-3d45-4724-83b5-6cb6df8e92f7
|
||||||
|
:END:
|
||||||
|
#+TITLE: re:clojure 2020
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-04]
|
||||||
|
|
||||||
|
tags :: [[file:../../../../../../.org/journal/2020-05-26--06-16-14Z--clojure.org][clojure]]
|
||||||
|
source :: https://reclojure.org
|
|
@ -0,0 +1,11 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: ce2ba4c0-6d58-4445-9c90-ed4a5f7a4125
|
||||||
|
:END:
|
||||||
|
#+TITLE: Ketu the Kafka Client we deserve
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-04]
|
||||||
|
|
||||||
|
tags :: [[file:../../../../../../.org/journal/2020-05-26--06-16-14Z--clojure.org][clojure]] [[file:../../../../../../.org/journal/2020-12-04--15-33-28Z--re_clojure_2020.org][re:clojure 2020]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
Presentation by Yonatan Elhanan
|
115
notes/2020-12-23--16-50-17Z--effects_system_in_clojure.org
Normal file
115
notes/2020-12-23--16-50-17Z--effects_system_in_clojure.org
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 9df0dad0-11e9-4c1a-ab27-ff2af21a8f78
|
||||||
|
:END:
|
||||||
|
#+TITLE: Effects system in Clojure
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2020-12-23]
|
||||||
|
|
||||||
|
tags :: [[id:debfbdb6-03a6-478e-8316-bce0119c0dd7][clojure]]
|
||||||
|
source ::
|
||||||
|
|
||||||
|
|
||||||
|
Warning foreword. The Effect system (see type à la carte) from the Freer
|
||||||
|
Monad article takes in root in a precise definition.
|
||||||
|
Here the notion of Effect system will probably feel totally skewed from the
|
||||||
|
perspective of this article.
|
||||||
|
But I will talk about how to use the same ideas in a dynamicly typed
|
||||||
|
programming language. And in particular Clojure.
|
||||||
|
|
||||||
|
On a high level perspective the end goal of an Effect system is to be able
|
||||||
|
to write program such that the semantic of the program will depend on the
|
||||||
|
context the program is executed in.
|
||||||
|
|
||||||
|
So for example, let's say you write a program like this:
|
||||||
|
|
||||||
|
#+begin_src clojure
|
||||||
|
(defn user-logged-in [user-id]
|
||||||
|
(if-let [user (get-user user-id)]
|
||||||
|
(do
|
||||||
|
(log "user found!")
|
||||||
|
(update-last-time-logged user))
|
||||||
|
(throw {:error :user-not-found
|
||||||
|
:user-id user-id})))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Generally you expect every =*-action= to be a well defined function.
|
||||||
|
You can take a look at that function and see what code will be execute.
|
||||||
|
|
||||||
|
Within an effect system, you would be able to write something like this:
|
||||||
|
|
||||||
|
#+begin_src clojure
|
||||||
|
(with-effects
|
||||||
|
[logs-eff
|
||||||
|
db-eff]
|
||||||
|
(my-action))
|
||||||
|
|
||||||
|
(with-effects
|
||||||
|
[test-logs-eff
|
||||||
|
test-db-eff]
|
||||||
|
(my-action))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
You can imagine that =logs-eff= and =db-eff= to be /Effects/ the first
|
||||||
|
could be used to write logs and the second one will be able to access a DB.
|
||||||
|
And in the second bloc =test-logs-eff= would be a completely pure
|
||||||
|
implementation of the =logs= and a fake =db= implementation.
|
||||||
|
|
||||||
|
So that way of writting your code is extremely appealing because it will
|
||||||
|
help a lot to test it.
|
||||||
|
Mainly you only need to change the list of effects used in your main
|
||||||
|
function and you will have the same code you will use in production to only
|
||||||
|
use pure effect. And thus will be completely reproductible and easy to test.
|
||||||
|
|
||||||
|
Effects systems while used in some languages (like Purescript, and some
|
||||||
|
libs exists in Haskell) does not really appear to be a very hot subject in
|
||||||
|
the Clojure community.
|
||||||
|
One of the reason might be because in Clojure the concepts and design space
|
||||||
|
is occupied with different existing solutions to a similar solution.
|
||||||
|
Mainly, compononent and trapperkeeper libraries for example.
|
||||||
|
Unlike effects, component and trapperkeeper have a few advantages.
|
||||||
|
I will not talk too much about component as I never used it.
|
||||||
|
So I will use trapperkeeper to explain myself.
|
||||||
|
One major advantage is the ability to describe dependecies between
|
||||||
|
different Effects in trapperkeeper.
|
||||||
|
Typically, one can simply imagine you would like to create an Effect to
|
||||||
|
handle the persistence of your Users.
|
||||||
|
It would seems natural that to provide an API to manipulate Users it will
|
||||||
|
need a DB related effect.
|
||||||
|
And thus you will also probably need to describe the fact that you need the
|
||||||
|
DB effect to be "ready" before being able to provide the User Effect.
|
||||||
|
|
||||||
|
So instead of talking about "Effects" we are talking about "Services".
|
||||||
|
They start, they stop and you can use functions they provide and the
|
||||||
|
services will take care about their internal state.
|
||||||
|
This has similarities with object oriented programming, but it sounds a lot
|
||||||
|
better to use this system in a functional programming context.
|
||||||
|
|
||||||
|
The generic pattern will be something like:
|
||||||
|
|
||||||
|
#+begin_src clojure
|
||||||
|
(defprotocol Protocol
|
||||||
|
(fn-of-protocol [this params]))
|
||||||
|
|
||||||
|
(defservice ServiceName
|
||||||
|
Protocol
|
||||||
|
[OtherService1
|
||||||
|
OtherService2]
|
||||||
|
(init [this context])
|
||||||
|
(start [this context])
|
||||||
|
(stop [this context])
|
||||||
|
(fn-of-protocol [this params]))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
To start an application you just need to provide a list of instances of
|
||||||
|
services to start.
|
||||||
|
So in order to test with subbed services you can write the code of pure
|
||||||
|
fake services that expose an identical Protocol than the service you wish
|
||||||
|
to stub.
|
||||||
|
|
||||||
|
That's nice. But this is not 100% a positive outcome.
|
||||||
|
One issue is that as this is a completely dynamic language you will lose
|
||||||
|
all the static analysis tools you are used to.
|
||||||
|
Typically you pass the method of the services to your methods.
|
||||||
|
And thus you end up only using higher level functions in your code.
|
||||||
|
You are no more able to discover which function will be really used.
|
||||||
|
This is a feature of that effect system.
|
|
@ -0,0 +1,227 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 2f14e39a-3a0c-4ced-a04b-bacfec159b7e
|
||||||
|
:END:
|
||||||
|
#+TITLE: We've got depression all wrong. It's trying to save us.
|
||||||
|
#+Author: Dr Escalante
|
||||||
|
#+Date: [2020-12-27]
|
||||||
|
|
||||||
|
- tags :: [[id:ddb5dbe8-64cb-44d6-9149-6740d30635a3][psychology]]
|
||||||
|
- source :: https://www.psychologytoday.com/us/blog/shouldstorm/202012/we-ve-got-depression-all-wrong-it-s-trying-save-us
|
||||||
|
- ref :: https://news.ycombinator.com/item?id=25546043
|
||||||
|
|
||||||
|
|
||||||
|
* We’ve Got Depression All Wrong. It’s Trying to Save Us.
|
||||||
|
|
||||||
|
New theories recognize depression as part of a biological survival
|
||||||
|
strategy.
|
||||||
|
|
||||||
|
Posted Dec 22, 2020
|
||||||
|
|
||||||
|
For generations, we have seen depression as an illness, an unnecessary
|
||||||
|
deviation from normal functioning.
|
||||||
|
It’s an idea that makes sense because depression causes suffering and even
|
||||||
|
death.
|
||||||
|
But what if we’ve got it all wrong?
|
||||||
|
What if depression is not an aberration at all, but an important part of
|
||||||
|
our biological defense system?
|
||||||
|
|
||||||
|
Depression is a courageous biological strategy to help us survive.
|
||||||
|
Source: ActionVance/Unsplash More and more researchers across specialties
|
||||||
|
are questioning our current definitions of depression.
|
||||||
|
Biological anthropologists have argued that depression is an adaptive
|
||||||
|
response to adversity and not a mental disorder.
|
||||||
|
In October, the British Psychological Society published a new report on
|
||||||
|
depression, stating that “depression is best thought of as an experience,
|
||||||
|
or set of experiences, rather than as a disease.”
|
||||||
|
And neuroscientists are focusing on the role of the autonomic nervous
|
||||||
|
system (ANS) in depression.
|
||||||
|
According to the Polyvagal Theory of the ANS, depression is part of a
|
||||||
|
biological defense strategy meant to help us survive.
|
||||||
|
|
||||||
|
The common wisdom is that depression starts in the mind with distorted
|
||||||
|
thinking.
|
||||||
|
That leads to "psychosomatic" symptoms like headaches, stomachaches, or
|
||||||
|
fatigue.
|
||||||
|
Now, models like the Polyvagal Theory suggest that we’ve got it backward.
|
||||||
|
It’s the body that detects danger and initiates a defense strategy meant to
|
||||||
|
help us survive.
|
||||||
|
That biological strategy is called immobilization, and it manifests in the
|
||||||
|
mind and the body with a set of symptoms we call depression.
|
||||||
|
|
||||||
|
When we think of depression as irrational and unnecessary suffering, we
|
||||||
|
stigmatize people and rob them of hope.
|
||||||
|
But when we begin to understand that depression, at least initially,
|
||||||
|
happens for a good reason we lift the shame.
|
||||||
|
People with depression are courageous survivors, not damaged invalids.
|
||||||
|
|
||||||
|
Laura believes that depression saved her life.
|
||||||
|
Most of the time her father only hurt her with words, but it was when she
|
||||||
|
stood up to him that Laura’s dad got dangerous.
|
||||||
|
That’s when he’d get that vicious look in his eyes.
|
||||||
|
More than once his violence had put Laura’s life at risk.
|
||||||
|
|
||||||
|
Laura’s father was so perceptive, that he could tell when she felt
|
||||||
|
rebellious on the inside even when she was hiding it.
|
||||||
|
And he punished her for those feelings.
|
||||||
|
|
||||||
|
It was the depression that helped Laura survive.
|
||||||
|
Depression kept her head down, kept her from resisting, helped her accept
|
||||||
|
the unacceptable.
|
||||||
|
Depression numbed her rebellious feelings.
|
||||||
|
Laura grew up at a time where there was no one to tell, nowhere for her to
|
||||||
|
get help outside her home.
|
||||||
|
Her only strategy was to survive in place.
|
||||||
|
And she did.
|
||||||
|
|
||||||
|
article continues after advertisement Looking back, Laura does not regret
|
||||||
|
her childhood depression.
|
||||||
|
She values it.
|
||||||
|
Going through her own healing process and working with her therapist helped
|
||||||
|
her see how depression served her.
|
||||||
|
|
||||||
|
Laura’s story is stark.
|
||||||
|
It’s ugly.
|
||||||
|
And it helps us understand that even though depression may happen for a
|
||||||
|
good reason, that does not make it a good thing.
|
||||||
|
Laura suffered deeply and describes the pain of her hopelessness vividly.
|
||||||
|
Her depression was a bad experience that started as the last resort of a
|
||||||
|
good biological system.
|
||||||
|
|
||||||
|
* Depression starts with immobilization
|
||||||
|
|
||||||
|
According to the Polyvagal Theory, discovered and articulated by
|
||||||
|
neuroscientist Stephen Porges, our daily experience is based on a hierarchy
|
||||||
|
of states in the autonomic nervous system.
|
||||||
|
When the ANS feels safe, we experience a sense of well-being and social
|
||||||
|
connection.
|
||||||
|
That’s when we feel like ourselves.
|
||||||
|
|
||||||
|
But the autonomic nervous system is also constantly scanning our internal
|
||||||
|
and external environment for signs of danger.
|
||||||
|
If our ANS detects a threat or even a simple lack of safety, its next
|
||||||
|
strategy is the fight or flight response which we often feel as anxiety.
|
||||||
|
|
||||||
|
Sometimes the threat is so bad or goes on for so long, that the nervous
|
||||||
|
system decides there is no way to fight or to flee.
|
||||||
|
At that point, there is only one option left: immobilization.
|
||||||
|
|
||||||
|
The immobilization response is the original biological defense in higher
|
||||||
|
animals.
|
||||||
|
This is the shutdown response we see in reptiles.
|
||||||
|
Also known as the freeze or faint response, immobilization is mediated by
|
||||||
|
the dorsal vagus nerve.
|
||||||
|
It turns down the metabolism to a resting state, which often makes people
|
||||||
|
feel faint or sluggish.
|
||||||
|
|
||||||
|
Owlie Harring/Unsplash
|
||||||
|
|
||||||
|
The immobilization response dulls pain.
|
||||||
|
Source: Owlie Harring/Unsplash Immobilization has an important role.
|
||||||
|
It dulls pain and makes us feel disconnected.
|
||||||
|
Think of a rabbit hanging limply in the fox’s mouth: that rabbit is
|
||||||
|
shutting down so it won’t suffer too badly when the fox eats it.
|
||||||
|
And the immobilization response also has a metabolic effect, slowing the
|
||||||
|
metabolism and switching the body to ketosis.
|
||||||
|
Some doctors speculate that this metabolic state could help healing in
|
||||||
|
severe illness.
|
||||||
|
|
||||||
|
In humans, people often describe feeling "out of their bodies" during
|
||||||
|
traumatic events, which has a defensive effect of cushioning the emotional
|
||||||
|
shock.
|
||||||
|
This is important because some things are so terrible, we don’t want people
|
||||||
|
to be fully present when they happen.
|
||||||
|
|
||||||
|
So the immobilization response is a key part of the biological defense, but
|
||||||
|
it is ideally designed to be short term.
|
||||||
|
Either the metabolic shut down preserves the organism, i.e.
|
||||||
|
the rabbit gets away, or the organism dies and the fox eats the rabbit.
|
||||||
|
|
||||||
|
But if the threat continues indefinitely and there is no way to fight or
|
||||||
|
flee, the immobilization response continues.
|
||||||
|
And since the response also changes brain activity, it impacts how people’s
|
||||||
|
emotions and their ability to solve problems.
|
||||||
|
People feel like they can’t get moving physically or mentally, they feel
|
||||||
|
hopeless and helpless.
|
||||||
|
That’s depression.
|
||||||
|
|
||||||
|
* Does depression have value?
|
||||||
|
|
||||||
|
It’s easy to see why Laura's childhood circumstances would set off the
|
||||||
|
immobilization response, and even how it might have helped her survive.
|
||||||
|
But why does it happen in people with less obvious adversity?
|
||||||
|
Our culture tends to think of depression in the person who finds work too
|
||||||
|
stressful as a sign of weakness.
|
||||||
|
Self-help articles imply that they just need more mental toughness and they
|
||||||
|
could lean in and solve it.
|
||||||
|
Even some therapists tell them that their depression is a distorted
|
||||||
|
perception of circumstances that aren’t so bad.
|
||||||
|
|
||||||
|
But that is not how the body sees it.
|
||||||
|
The defense responses in the autonomic nervous system, whether fight/flight
|
||||||
|
or immobilization are not about the actual nature of the trigger.
|
||||||
|
They are about whether this body decides there is a threat.
|
||||||
|
And that happens at a pre-conscious point.
|
||||||
|
The biological threat response starts before we think about it, and then
|
||||||
|
our higher-level brain makes up a story to explain it.
|
||||||
|
We don’t get to choose this response; it happens before we even know it.
|
||||||
|
|
||||||
|
Studying anxiety has revealed that many modern circumstances can set off
|
||||||
|
the fight or flight response.
|
||||||
|
For instance, low rumbling noises from construction equipment sound to the
|
||||||
|
nervous system like the growl of a large predator.
|
||||||
|
Better run.
|
||||||
|
Or feeling like they are being evaluated at school removes kids' sense of
|
||||||
|
safety and triggers fight or flight.
|
||||||
|
Better give the teacher attitude or avoid homework.
|
||||||
|
And to most of us, fight or flight feels like anxiety.
|
||||||
|
|
||||||
|
Eventually, if these modern triggers last long enough, the body decides it
|
||||||
|
can’t get away.
|
||||||
|
Next comes immobilization which the body triggers to defend us.
|
||||||
|
According to Porges, what we call depression is the cluster of emotional
|
||||||
|
and cognitive symptoms that sits on top of a physiological platform in the
|
||||||
|
immobilization response.
|
||||||
|
It’s a strategy meant to help us survive; the body is trying to save us.
|
||||||
|
Depression happens for a fundamentally good reason.
|
||||||
|
|
||||||
|
And that changes everything.
|
||||||
|
When people who are depressed learn that they are not damaged, but have a
|
||||||
|
good biological system that is trying to help them survive, they begin to
|
||||||
|
see themselves differently.
|
||||||
|
After all, depression is notorious for the feelings of hopelessness and
|
||||||
|
helplessness.
|
||||||
|
But if depression is an active defense strategy, people may recognize they
|
||||||
|
are not quite so helpless as they thought.
|
||||||
|
|
||||||
|
* Shifting out of immobilization
|
||||||
|
|
||||||
|
If depression is the emotional expression of the immobilization response,
|
||||||
|
then the solution is to move out of that state of defense.
|
||||||
|
Porges believes it is not enough to simply remove the threat.
|
||||||
|
Rather, the nervous system has to detect robust signals of safety to bring
|
||||||
|
the social state back online.
|
||||||
|
The best way to do that?
|
||||||
|
Social connection.
|
||||||
|
|
||||||
|
One of the symptoms of depression is shame, a sense of having let other
|
||||||
|
people down or being unworthy to be with them.
|
||||||
|
When people are told that depression is an aberration, we are telling them
|
||||||
|
that they are not part of the tribe.
|
||||||
|
They are not right, they don’t belong.
|
||||||
|
That’s when their shame deepens and they avoid social connection.
|
||||||
|
We have cut them off from the path that leads them out of depression.
|
||||||
|
|
||||||
|
It is time that we start honoring the courage and strength of depressed
|
||||||
|
people.
|
||||||
|
It is time we start valuing the incredible capacity of our biology to find
|
||||||
|
a way in hard times.
|
||||||
|
And it is time that we stop pretending depressed people are any different
|
||||||
|
than anyone else.
|
||||||
|
|
||||||
|
* References
|
||||||
|
|
||||||
|
- Porges, Stephen. (Apr 2009) The polyvagal theory:
|
||||||
|
New insights into adaptive reactions of the autonomic nervous system.
|
||||||
|
Cleve Clin J Med.
|
||||||
|
- Porges, Stephen. (Feb 2007) The polyvagal perspective
|
||||||
|
Biol Psychology.
|
4
notes/20200428100933-journal.org
Normal file
4
notes/20200428100933-journal.org
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: ad2aac23-4550-4f9a-acf3-3bd2c5d0cb5e
|
||||||
|
:END:
|
||||||
|
#+TITLE: journal
|
5
notes/20200428130640-learning.org
Normal file
5
notes/20200428130640-learning.org
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: a2225047-7563-4e4e-a031-7f69e060de6b
|
||||||
|
:END:
|
||||||
|
#+TITLE: learning
|
||||||
|
|
388
notes/20200428130658-org_mode.org
Normal file
388
notes/20200428130658-org_mode.org
Normal file
|
@ -0,0 +1,388 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 5579f7b0-3b00-4751-9211-9b9381481954
|
||||||
|
:END:
|
||||||
|
#+TITLE: org-mode
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
|
||||||
|
tags :: [[id:e459f88b-5f6d-4547-b6b2-08d4815c1ede][emacs]]
|
||||||
|
|
||||||
|
|
||||||
|
* tips
|
||||||
|
- ~(org-num-mode)~ to show numbers
|
||||||
|
* org-agenda
|
||||||
|
|
||||||
|
To display the list of clocked tasks in agenda, type =L= to pass in =org-agenda-log-mode=.
|
||||||
|
|
||||||
|
* configuration
|
||||||
|
|
||||||
|
#+begin_src elisp
|
||||||
|
;; function needed to have nice name displayed by helm
|
||||||
|
(defun org-capture-todo ()
|
||||||
|
"Capture a todo."
|
||||||
|
(interactive)
|
||||||
|
(org-capture nil "t"))
|
||||||
|
|
||||||
|
(defun org-capture-pause ()
|
||||||
|
"Capture a pause."
|
||||||
|
(interactive)
|
||||||
|
(org-capture nil "p"))
|
||||||
|
|
||||||
|
(defun org-capture-review ()
|
||||||
|
"Capture a review."
|
||||||
|
(interactive)
|
||||||
|
(org-capture nil "r"))
|
||||||
|
|
||||||
|
(defun org-capture-work ()
|
||||||
|
"Capture a work."
|
||||||
|
(interactive)
|
||||||
|
(org-capture nil "w"))
|
||||||
|
|
||||||
|
(defun org-capture-meeting ()
|
||||||
|
"Capture time spend during meeting."
|
||||||
|
(interactive)
|
||||||
|
(org-capture nil "m"))
|
||||||
|
|
||||||
|
(defun org-capture-email ()
|
||||||
|
"Capture time spend in email."
|
||||||
|
(interactive)
|
||||||
|
(org-capture nil "e"))
|
||||||
|
|
||||||
|
(defun org-capture-chat ()
|
||||||
|
"Capture time spend in chat."
|
||||||
|
(interactive)
|
||||||
|
(org-capture nil "c"))
|
||||||
|
|
||||||
|
(defun fci-mode-override-advice (&rest args)
|
||||||
|
"https://github.com/alpaker/fill-column-indicator/issues/45.")
|
||||||
|
|
||||||
|
(defun org-publish-force ()
|
||||||
|
"Force publish blog by deleting the cache."
|
||||||
|
(interactive)
|
||||||
|
(save-excursion
|
||||||
|
(delete-directory org-publish-timestamp-directory t)
|
||||||
|
(org-publish "blog" t)))
|
||||||
|
|
||||||
|
(defun org-publish-current-file-keep-position ()
|
||||||
|
"Force publish blog by deleting the cache."
|
||||||
|
(interactive)
|
||||||
|
(save-excursion
|
||||||
|
(org-publish-current-file)))
|
||||||
|
|
||||||
|
(defun org-publish-current-project-keep-position ()
|
||||||
|
"Force publish blog by deleting the cache."
|
||||||
|
(interactive)
|
||||||
|
(save-excursion
|
||||||
|
(org-publish-current-project)))
|
||||||
|
|
||||||
|
(defun org-publish-assets ()
|
||||||
|
"Force publish assets."
|
||||||
|
(interactive)
|
||||||
|
(save-excursion
|
||||||
|
(org-publish "assets" t)))
|
||||||
|
|
||||||
|
(defun org-publish-draft ()
|
||||||
|
"Force publish assets."
|
||||||
|
(interactive)
|
||||||
|
(save-excursion
|
||||||
|
(org-publish "draft" t)))
|
||||||
|
(defun org-mode-config ()
|
||||||
|
"Org-mode."
|
||||||
|
|
||||||
|
;; EXPERIMENTAL
|
||||||
|
(setq helm-org-rifle-org-directories "~/.org/")
|
||||||
|
(setq helm-org-rifle-org-directories-filename-regex "\.org(\.gpg)?$")
|
||||||
|
(setq helm-org-rifle-directories-recursive t)
|
||||||
|
;; EXPERIMENTAL
|
||||||
|
|
||||||
|
(setq org-todo-keywords
|
||||||
|
'((sequence "TODO(t)"
|
||||||
|
"IN-PROGRESS(p)"
|
||||||
|
"|"
|
||||||
|
"DONE(d)"
|
||||||
|
"HOLD(h@/!)"
|
||||||
|
"CANCELED(c@/!)")
|
||||||
|
(sequence "|" "PAUSE(p)" "CHAT(c)" "EMAIL(e)" "MEETING(m)" "REVIEW(r)")))
|
||||||
|
|
||||||
|
(require 'org-download)
|
||||||
|
(setq-default org-download-image-dir "~/.org/img")
|
||||||
|
|
||||||
|
;; generate stable ids for headers, human readable, github-like
|
||||||
|
(require 'org-auto-id)
|
||||||
|
|
||||||
|
;; Align tags
|
||||||
|
(add-hook 'focus-in-hook
|
||||||
|
(lambda () (progn
|
||||||
|
(setq org-tags-column 60))
|
||||||
|
(org-align-all-tags)))
|
||||||
|
|
||||||
|
(add-hook 'focus-out-hook
|
||||||
|
(lambda () (progn
|
||||||
|
(setq org-tags-column 60))
|
||||||
|
(org-align-all-tags)))
|
||||||
|
|
||||||
|
|
||||||
|
;; org-sticky-full-path
|
||||||
|
(setq org-sticky-header-full-path 'full)
|
||||||
|
(setq org-sticky-header-heading-star ">")
|
||||||
|
(setq org-sticky-header-outline-path-separator "/")
|
||||||
|
|
||||||
|
;; src block indentation / editing / syntax highlighting
|
||||||
|
(setq org-src-fontify-natively t
|
||||||
|
org-src-window-setup 'current-window ;; edit in current window
|
||||||
|
org-src-strip-leading-and-trailing-blank-lines t
|
||||||
|
org-src-preserve-indentation t ;; do not put two spaces on the left
|
||||||
|
org-src-tab-acts-natively t)
|
||||||
|
|
||||||
|
;; Org Journal
|
||||||
|
|
||||||
|
(setq org-journal-dir "~/.org/journal/")
|
||||||
|
(setq org-journal-file-type "daily")
|
||||||
|
(setq org-journal-file-format "%Y-%m-%d.org")
|
||||||
|
(evil-leader/set-key "ooj" 'org-journal-new-entry)
|
||||||
|
(defvar birth-date "1977-03-05")
|
||||||
|
|
||||||
|
(defun str-time-to-year-float (date-str)
|
||||||
|
(/ (float-time
|
||||||
|
(apply 'encode-time
|
||||||
|
(mapcar (lambda (x) (if (null x) 0 x))
|
||||||
|
(parse-time-string date-str))))
|
||||||
|
(* 365.25 24 60 60)))
|
||||||
|
|
||||||
|
(defun y-date ()
|
||||||
|
"Number of year since my birth"
|
||||||
|
(let ((y (- (str-time-to-year-float (format-time-string "%Y-%m-%d" (current-time)))
|
||||||
|
(str-time-to-year-float birth-date))))
|
||||||
|
(format "∆y=%.2f (%d)" y (floor (* 365.25 y)))))
|
||||||
|
|
||||||
|
(defun my/journal-template ()
|
||||||
|
(mapconcat 'identity
|
||||||
|
`(,(format "#+Title: Journal (%s - %s)"
|
||||||
|
(format-time-string "%Y-%m-%d" (current-time))
|
||||||
|
(y-date))
|
||||||
|
"#+Author: Yann Esposito"
|
||||||
|
,(format "#+Date: [%s]" (format-time-string "%Y-%m-%d" (current-time)))
|
||||||
|
"#+STARTUP: showeverything"
|
||||||
|
""
|
||||||
|
"- tags :: [[id:ad2aac23-4550-4f9a-acf3-3bd2c5d0cb5e][journal]] "
|
||||||
|
""
|
||||||
|
"* Resumé Journée"
|
||||||
|
""
|
||||||
|
" | sommeil | ?/5 | horrible -> comme un bébé |"
|
||||||
|
" | activité φ | ?/5 | au lit -> activité sportive |"
|
||||||
|
" | nourriture | ?/5 | malbouffe -> saine |"
|
||||||
|
" | humeur | ?/5 | exécrable -> excellente |"
|
||||||
|
" | interêt | ?/5 | habituel -> exceptionel |"
|
||||||
|
""
|
||||||
|
"- Faits positifs"
|
||||||
|
"- Faits marquants"
|
||||||
|
"- Résumé des discussions intéressantes"
|
||||||
|
"- Réflexions/Éssais")
|
||||||
|
"\n"))
|
||||||
|
|
||||||
|
(setq org-journal-date-format "%Y-%m-%d %A")
|
||||||
|
(setq org-journal-file-header 'my/journal-template)
|
||||||
|
|
||||||
|
;; Org Roam
|
||||||
|
(setq org-roam-directory "~/.org/journal")
|
||||||
|
(setq org-roam-graph-viewer "/System/Applications/Preview.app/Contents/MacOS/Preview")
|
||||||
|
(setq org-roam-buffer-position 'left)
|
||||||
|
;; (setq org-roam-buffer "*my-buffer-name*")
|
||||||
|
(setq org-roam-buffer-width 0.4)
|
||||||
|
;; (setq org-roam-link-title-format "R:%s")
|
||||||
|
(setq org-roam-capture-templates
|
||||||
|
'(("d" "default" plain (function org-roam--capture-get-point)
|
||||||
|
"%?"
|
||||||
|
:file-name "%(format-time-string \"%Y-%m-%d--%H-%M-%SZ--${slug}\" (current-time) t)"
|
||||||
|
:head "#+TITLE: ${title}\n#+Author: Yann Esposito\n\ntags ::\nsource ::\n"
|
||||||
|
:unnarrowed t)))
|
||||||
|
|
||||||
|
(evil-leader/set-key "orr" 'org-roam)
|
||||||
|
(evil-leader/set-key "orf" 'org-roam-find-file)
|
||||||
|
(evil-leader/set-key "ori" 'org-roam-insert)
|
||||||
|
(evil-leader/set-key "orb" 'org-roam-switch-to-buffer)
|
||||||
|
(evil-leader/set-key "org" 'org-roam-graph)
|
||||||
|
(org-roam-mode +1)
|
||||||
|
|
||||||
|
;; Org Capture
|
||||||
|
|
||||||
|
|
||||||
|
;; Org capture is really neat. So for now I use these infos.
|
||||||
|
;; *** Templates
|
||||||
|
;; You can specify your own properties in the property list for the template, and then you can access those properties with plist-get and org-capture-plist. Here's a brief example:
|
||||||
|
;;
|
||||||
|
;; (defun my/expense-template ()
|
||||||
|
;; (format "Hello world %s" (plist-get org-capture-plist :account)))
|
||||||
|
;; (setq org-capture-templates '(("x" "Test entry 1" plain
|
||||||
|
;; (file "~/tmp/test.txt")
|
||||||
|
;; (function my/expense-template)
|
||||||
|
;; :account "Account:Bank")
|
||||||
|
;; ("y" "Test entry 2" plain
|
||||||
|
;; (file "~/tmp/test.txt")
|
||||||
|
;; (function my/expense-template)
|
||||||
|
;; :account "Account:AnotherBank")))
|
||||||
|
(setq org-capture-templates
|
||||||
|
'(("t" "todo" entry (file "~/.org/TODO.org")
|
||||||
|
"** TODO %?\n %U\n %a\n")
|
||||||
|
;; time tracker
|
||||||
|
("c" "chat" entry (file "~/.org/tracker.org")
|
||||||
|
"** CHAT %?\n %U\n %a\n" :clock-in t :clock-resume t)
|
||||||
|
("e" "email" entry (file "~/.org/tracker.org")
|
||||||
|
"** EMAIL %?\n %U\n %a\n" :clock-in t :clock-resume t)
|
||||||
|
("m" "meeting" entry (file "~/.org/tracker.org")
|
||||||
|
"** MEETING %? :meeting:\n %U\n %a\n" :clock-in t :clock-resume t)
|
||||||
|
("p" "pause" entry (file "~/.org/tracker.org")
|
||||||
|
"* PAUSE pause %?\n %U\n" :clock-in t :clock-resume t)
|
||||||
|
("r" "review" entry (file "~/.org/tracker.org")
|
||||||
|
"* REVIEW %?\n %U\n %a\n" :clock-in t :clock-resume t)
|
||||||
|
("w" "work" entry (file "~/.org/tracker.org")
|
||||||
|
"** IN-PROGRESS %?\n %U\n %a\n" :clock-in t :clock-resume t)))
|
||||||
|
|
||||||
|
(evil-leader/set-key "oc." 'org-capture)
|
||||||
|
(evil-leader/set-key "oct" 'org-capture-todo)
|
||||||
|
(evil-leader/set-key "occ" 'org-capture-chat)
|
||||||
|
(evil-leader/set-key "oce" 'org-capture-email)
|
||||||
|
(evil-leader/set-key "ocm" 'org-capture-meeting)
|
||||||
|
(evil-leader/set-key "ocp" 'org-capture-pause)
|
||||||
|
(evil-leader/set-key "ocr" 'org-capture-review)
|
||||||
|
(evil-leader/set-key "ocw" 'org-capture-work)
|
||||||
|
|
||||||
|
(evil-leader/set-key "ocof" 'org-capture-refile)
|
||||||
|
(evil-leader/set-key "ocol" 'org-capture-goto-last-stored)
|
||||||
|
|
||||||
|
(evil-leader/set-key "oxF" 'org-publish-force)
|
||||||
|
(evil-leader/set-key "oxf" 'org-publish-current-file-keep-position)
|
||||||
|
(evil-leader/set-key "oxp" 'org-publish-current-project-keep-position)
|
||||||
|
(evil-leader/set-key "oxa" 'org-publish-assets)
|
||||||
|
(evil-leader/set-key "oxd" 'org-publish-draft)
|
||||||
|
|
||||||
|
|
||||||
|
;; *** Projectile
|
||||||
|
(setq org-projectile-file "TODO.org")
|
||||||
|
|
||||||
|
;; *** Refile
|
||||||
|
|
||||||
|
;; to sync with beorg on iCloud
|
||||||
|
;; create a symlink named "~/.org" to iCloud dir for beorg
|
||||||
|
(when (not (file-symlink-p "~/.org"))
|
||||||
|
(if (not (file-exists-p "~/.org"))
|
||||||
|
(let ((icloudpath
|
||||||
|
(concat (getenv "HOME")
|
||||||
|
"/Library/Mobile Documents/iCloud~com~appsonthemove~beorg/Documents/org")))
|
||||||
|
(f-symlink icloudpath "~/.org"))
|
||||||
|
(message "%" "~/.org exists and is not a symlink to iCloud for beorg")))
|
||||||
|
|
||||||
|
;; Refile to either the =refile.org= file or to =agenda.org= org =standup.org=
|
||||||
|
(setq org-refile-target-files '("~/.org/tracker.org"))
|
||||||
|
|
||||||
|
(setq org-refile-targets
|
||||||
|
'((nil :maxlevel . 5)
|
||||||
|
(org-refile-target-files :maxlevel . 5)))
|
||||||
|
|
||||||
|
;; *** Agenda
|
||||||
|
(setq org-agenda-files '("~/.org/TODO.org" "~/.org/tracker.org"))
|
||||||
|
|
||||||
|
;; ** Org Annotate
|
||||||
|
|
||||||
|
;; Ability to take annotate some files, can of double usage with org-capture.
|
||||||
|
;; Still, I keep that keyboard shortcut here.
|
||||||
|
|
||||||
|
(defun my-org-settings ()
|
||||||
|
(org-display-inline-images)
|
||||||
|
(spacemacs/toggle-auto-fill-mode-on)
|
||||||
|
(setq fill-column 75)
|
||||||
|
(abbrev-mode)
|
||||||
|
(org-indent-mode))
|
||||||
|
|
||||||
|
(add-hook 'org-mode-hook #'my-org-settings)
|
||||||
|
(evil-leader/set-key "oa" 'org-annotate-file)
|
||||||
|
(setq org-annotate-file-storage-file "~/.org/annotations.org")
|
||||||
|
|
||||||
|
|
||||||
|
;; ** Org colums
|
||||||
|
;; I can pass in org-column view mode with SPC-o-v-c
|
||||||
|
|
||||||
|
(evil-leader/set-key "ovc" 'org-columns)
|
||||||
|
|
||||||
|
(setq org-columns-default-format
|
||||||
|
"%TODO %3PRIORITY %40ITEM(Task) %17Effort(Estimated Effort){:} %CLOCKSUM %8TAGS(TAG)")
|
||||||
|
|
||||||
|
;; ** Deft
|
||||||
|
|
||||||
|
(setq deft-extensions '("org" "gpg" "md" "txt"))
|
||||||
|
(setq deft-recursive t)
|
||||||
|
(setq deft-use-filter-string-for-filename t)
|
||||||
|
(setq deft-default-extension "org")
|
||||||
|
(setq deft-directory "~/.org")
|
||||||
|
|
||||||
|
;; ** Look and Feel
|
||||||
|
|
||||||
|
;; I like to have something different than ellipsis because I often use them
|
||||||
|
;; myself.
|
||||||
|
|
||||||
|
(setq org-ellipsis "⤵")
|
||||||
|
|
||||||
|
;; *** Colors
|
||||||
|
|
||||||
|
(setq solaryzed-yellow "#b58900")
|
||||||
|
(setq solaryzed-orange "#cb4b16")
|
||||||
|
(setq solaryzed-red "#d30102")
|
||||||
|
(setq solaryzed-magenta "#d33682")
|
||||||
|
(setq solaryzed-violet "#6c71c4")
|
||||||
|
(setq solaryzed-blue "#268bd2")
|
||||||
|
(setq solaryzed-cyan "#2aa198")
|
||||||
|
(setq solaryzed-green "#859900")
|
||||||
|
|
||||||
|
;; **** Spacemacs bug workaround
|
||||||
|
;; To handle a colorization bug; see https://github.com/syl20bnr/spacemacs/issues/9950
|
||||||
|
|
||||||
|
(add-hook 'org-mode-hook (lambda () (hl-todo-mode -1) nil))
|
||||||
|
|
||||||
|
;; **** Rainbow colors
|
||||||
|
|
||||||
|
(custom-theme-set-faces 'user `(org-level-1 ((t (:foreground ,solaryzed-green)))))
|
||||||
|
(custom-theme-set-faces 'user `(org-level-2 ((t (:foreground ,solaryzed-cyan)))))
|
||||||
|
(custom-theme-set-faces 'user `(org-level-3 ((t (:foreground ,solaryzed-blue)))))
|
||||||
|
(custom-theme-set-faces 'user `(org-level-4 ((t (:foreground ,solaryzed-violet)))))
|
||||||
|
(custom-theme-set-faces 'user `(org-level-5 ((t (:foreground ,solaryzed-magenta)))))
|
||||||
|
(custom-theme-set-faces 'user `(org-level-6 ((t (:foreground ,solaryzed-red)))))
|
||||||
|
(custom-theme-set-faces 'user `(org-level-7 ((t (:foreground ,solaryzed-orange)))))
|
||||||
|
(custom-theme-set-faces 'user `(org-level-8 ((t (:foreground ,solaryzed-yellow)))))
|
||||||
|
|
||||||
|
(setq org-priority-faces `((?A . (:background ,solaryzed-red :foreground "white" :weight bold))
|
||||||
|
(?B . (:foreground ,solaryzed-yellow))
|
||||||
|
(?C . (:foreground ,solaryzed-cyan))))
|
||||||
|
|
||||||
|
;; **** Keywords colors
|
||||||
|
|
||||||
|
(setq org-todo-keyword-faces
|
||||||
|
`(("TODO" . (:foreground ,solaryzed-orange :weight bold))
|
||||||
|
("IN-PROGRESS" . (:foreground ,solaryzed-yellow :weight bold))
|
||||||
|
("HOLD" . (:foreground ,solaryzed-violet :weight bold))
|
||||||
|
("DONE" . (:foreground ,solaryzed-green :weight bold))
|
||||||
|
("CANCELED" . (:foreground ,solaryzed-green :weight bold))
|
||||||
|
("CHAT" . (:foreground ,solaryzed-blue :weight bold))
|
||||||
|
("EMAIL" . (:foreground ,solaryzed-blue :weight bold))
|
||||||
|
("MEETING" . (:foreground ,solaryzed-blue :weight bold))
|
||||||
|
("PAUSE" . (:foreground ,solaryzed-cyan :weight bold))
|
||||||
|
("REVIEW" . (:foreground ,solaryzed-blue :weight bold))))
|
||||||
|
|
||||||
|
;; Org Babel
|
||||||
|
(org-babel-do-load-languages
|
||||||
|
'org-babel-load-languages
|
||||||
|
'(;; other Babel languages
|
||||||
|
(shell . t)
|
||||||
|
(haskell . t)
|
||||||
|
(plantuml . t)))
|
||||||
|
(setq org-plantuml-jar-path "~/bin/plantuml.jar")
|
||||||
|
;; https://github.com/alpaker/fill-column-indicator/issues/45
|
||||||
|
(advice-add 'org-html-fontify-code :around
|
||||||
|
(lambda (fun &rest args)
|
||||||
|
(advice-add 'fci-mode :override #'fci-mode-override-advice)
|
||||||
|
(let ((result (apply fun args)))
|
||||||
|
(advice-remove 'fci-mode #'fci-mode-override-advice)
|
||||||
|
result)))
|
||||||
|
;; FIX easytemplates issue
|
||||||
|
;; https://github.com/syl20bnr/spacemacs/issues/11798
|
||||||
|
(when (version<= "9.2" (org-version))
|
||||||
|
(require 'org-tempo)))
|
||||||
|
#+end_src
|
5
notes/20200428130708-roam.org
Normal file
5
notes/20200428130708-roam.org
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 1a12a62f-f96f-48de-b634-bd548654c238
|
||||||
|
:END:
|
||||||
|
#+TITLE: roam
|
||||||
|
|
181
notes/2021-01-03--12-08-46Z--voeux_2021_alexandre.org
Normal file
181
notes/2021-01-03--12-08-46Z--voeux_2021_alexandre.org
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 0a550da5-55e8-4cf4-ae29-1aa0240ed27d
|
||||||
|
:END:
|
||||||
|
#+TITLE: voeux 2021 alexandre
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-01-03]
|
||||||
|
|
||||||
|
- tags ::
|
||||||
|
- source ::
|
||||||
|
|
||||||
|
|
||||||
|
Bonjour Alexandre, je te souhaite à toi et toute ta famille une très bonne
|
||||||
|
année 2021 !
|
||||||
|
|
||||||
|
Je vous souhaite à tous et à votre famille une très bonne santé surtout
|
||||||
|
dans le climat actuel.
|
||||||
|
De trouver un bon équilibre entre la vie familiale, les passions et le
|
||||||
|
travail.
|
||||||
|
|
||||||
|
Et je me permet d'ajouter à ce mail une réflexion technique entre Haskell
|
||||||
|
et Clojure qui je l'espère t'inspirera.
|
||||||
|
|
||||||
|
Bien que je n'écrive plus vraiment de nouvel article sur
|
||||||
|
Haskell/Purescript, j'ai passé pas mal de temps à réfléchir à comment
|
||||||
|
architecturer du code dans ces langages et Clojure.
|
||||||
|
J'ai l'impression qu'une solution qu'on utilise actuellement en Clojure
|
||||||
|
bien qu'à première vue très inférieure aux solutions proposées par
|
||||||
|
Haskell/Purescript sont en fait supérieure lorsqu'on les regardes selon le
|
||||||
|
bon angle.
|
||||||
|
|
||||||
|
L'idée de fond c'est que les systèmes d'effets/Free Monad (et les
|
||||||
|
sous-systèmes, style MTL, handler pattern) sont des cas particuliers
|
||||||
|
restreints de ce que l'on peut obtenir avec un système de "Services".
|
||||||
|
|
||||||
|
Si on regarde l'intérêt de ces systèmes d'organisation de code --
|
||||||
|
le plus évolué étant les Free Monads et les systèmes d'effets --
|
||||||
|
leur objectif est toujours plus ou moins le même.
|
||||||
|
|
||||||
|
Changer le comportement du même bloc de code en fonction du contexte
|
||||||
|
d'exécution.
|
||||||
|
En gros si on prend une function qui ressemble à:
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
my_function arg1 ... argn = do
|
||||||
|
x1 <- action1 arg1 .. argn
|
||||||
|
x2 <- action2 arg1 .. argn x1
|
||||||
|
...
|
||||||
|
z <- actionK arg1 .. argn x1 .. x<K-1>
|
||||||
|
return z
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
les =action1= à =actionK= auront des comportement différents en fonction du
|
||||||
|
contexte dans lequel il va être initialisé.
|
||||||
|
Dans le cas de Haskell, on fait au mieux pour déterminer le contexte à
|
||||||
|
compile time en utilisant les types.
|
||||||
|
Du genre:
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
main = do
|
||||||
|
effect1 <- initEffect1
|
||||||
|
effect2 <- initEffect2 effect1
|
||||||
|
...
|
||||||
|
effectM <- initEffectM effect1 ... effect<M-1>
|
||||||
|
runWithEffects [effect1,effect2,...,effectM] my_function
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Ce système présente ainsi beaucoup d'avantanges:
|
||||||
|
|
||||||
|
1. mettre toute la "business logic" dans la fonction =my_function= en se
|
||||||
|
débarrassant des détails techniques au mieu en les envoyant dans les
|
||||||
|
"Effets".
|
||||||
|
2. Pouvoir facilement changer les Effects par des Effects purs et pouvoir
|
||||||
|
ainsi écrire des tests déterministes et reproductibles aisément.
|
||||||
|
3. Controller "par le haut" les sous-effets disponibles dans certaines
|
||||||
|
branches du code. On peut du coups facilement contraindre et voir que
|
||||||
|
certaines fonction ne pourront jamais accéder à la DB par exemple.
|
||||||
|
|
||||||
|
Par contre ce système à un coût sur les performances.
|
||||||
|
Je pense que le coût est négligeable dans la majorité des cas et qu'il
|
||||||
|
s'agit d'"Haskell circle jerking" lorsque les gens refusent d'utiliser
|
||||||
|
des systèmes d'effects pour cette raison.
|
||||||
|
|
||||||
|
Si on va au bout de l'utilisation de tel système en réalité on voit qu'il
|
||||||
|
faut, plutôt qu'utiliser des systèmes tout prêt à l'emploi, se créer
|
||||||
|
beaucoup d'effects maison pour en tirer le meilleur parti.
|
||||||
|
|
||||||
|
Typiquement on va avoir des effects avec leur pendant pur qui devraient
|
||||||
|
probablement être standards comme un effect de Log, d'accès complet à une
|
||||||
|
DB peut-être ?
|
||||||
|
Mais assez vite, on a envie de se fabriquer des Effets spécialisé au
|
||||||
|
domaine de son application.
|
||||||
|
Typiquement, si on fait de la gestion d'utilisateur on va créer un effet
|
||||||
|
pour la gestion d'utilisateurs plutôt que filer un Effet complet d'accès à
|
||||||
|
la DB.
|
||||||
|
Ce qui permet de s'assurer que des fonctions n'auront accès qu'aux tables
|
||||||
|
de la DB utilisées pour les utilisateurs et pas pour les tables destinées à
|
||||||
|
d'autres buts etc...
|
||||||
|
|
||||||
|
Et c'est là qu'apparaît la première limitation des systèmes d'Effets.
|
||||||
|
Les effets ont des dépendances entre eux.
|
||||||
|
L'effet =UserEffect= doit dépendre de l'effect =DBEffect=.
|
||||||
|
Mais probablement aussi de l'effet qui permet d'écrire des logs, et de pas
|
||||||
|
mal d'autres.
|
||||||
|
Et c'est à la lumière de voir ces effects comme des outils d'applications
|
||||||
|
pragmatiques et pas juste des "Effect algébriques" que l'on voit apparaître
|
||||||
|
un besoin de gestion de ces dépendances.
|
||||||
|
Un aspect important devient donc la gestion de l'ordre d'init et de stop de
|
||||||
|
tous ces effets.
|
||||||
|
En effet, pour faire =initUserEffect= il faudra lui passer en paramètre des
|
||||||
|
effets dejè instanciés (et donc initialisés) pour les logs et la DB.
|
||||||
|
|
||||||
|
Un premier problème est donc que changer/modifier des dépendances entre
|
||||||
|
effet dans un point du système revient à imposer une modification manuelle
|
||||||
|
du code dans tous les effets dépendants.
|
||||||
|
Mais aussi en particulier le code de l'init du système devient lourd à
|
||||||
|
gerrer alors qu'il existe une solution simple.
|
||||||
|
Je pense que Tardis pourrait être utile dans ce cas, mais, ça ne me semble
|
||||||
|
pas encore assez facile.
|
||||||
|
Même avec tardis, il me semble qu'il faut savoir si un effet doit arriver
|
||||||
|
avant ou après.
|
||||||
|
Là on souhaiterai pouvoir utiliser la lazyness pour une gestion
|
||||||
|
automatique des dépendances.
|
||||||
|
|
||||||
|
En réalité l'API la plus souhaitable serait de laisser la gestion de
|
||||||
|
l'ordre des dépendance et leur appel laissé à un système automatique.
|
||||||
|
Ainsi au lieu d'avoir
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
main = do
|
||||||
|
confEffect <- initConfEffect "config.dhall"
|
||||||
|
dbEffect <- initDBEffect confEffect
|
||||||
|
userEffect <- initUserEffect dbEffect confEffect
|
||||||
|
runWithEffects [confEffect,dbEffect,userEffect] myFunction
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Il semble préférable d'écrire:
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
main = do
|
||||||
|
let effects = [ ConfEff, DBEff, UserEff ]
|
||||||
|
runWithEffects effects myFunction
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Sans avoir à se poser la question de quel effet doit utiliser quel autre.
|
||||||
|
Ce sont des détails qui doivent être dans les Effets eux-même et pas donné
|
||||||
|
à une gestion manuelle par l'utilisateur.
|
||||||
|
|
||||||
|
Et c'est exactement ce que les systèmes de services font en clojure.
|
||||||
|
Il en existe plusieurs.
|
||||||
|
Component [fn:1] et Trapperkeeper [fn:2].
|
||||||
|
Je travaille avec le second.
|
||||||
|
|
||||||
|
Evidement en Clojure tout se gère en runtime.
|
||||||
|
Mais si j'ai bien lu et compris la présentation sur les différents systèmes
|
||||||
|
d'Effets il semble difficile de faire beaucoup mieux en Haskell.
|
||||||
|
Il est en effet très difficile de faire descendre dans le code le détail
|
||||||
|
qui permet de savoir dans quel contexte il sera exécuté et changer le code
|
||||||
|
pour utiliser seulement le bon contexte et l'optimiser en conséquence.
|
||||||
|
|
||||||
|
Finalement, j'ai vu des essais pour exploiter ces idées en Haskell.
|
||||||
|
Mais elles sont toutes faiblardes et échouent.
|
||||||
|
J'ai moi-même essayé.
|
||||||
|
Le probléme de fond vient du fait qu'il est quasi impossible de trouver un
|
||||||
|
type qui soit à la fois assez generique pour matcher ce que doit faire un
|
||||||
|
Service et assez précis pour être utile lors du typage du code.
|
||||||
|
|
||||||
|
Voici donc un point qui m'agace au plus haut point.
|
||||||
|
D'habitude je préfère défendre les approches à la Haskell.
|
||||||
|
Mais pour le coups, impossible de faire aussi bien que Clojure et de plus
|
||||||
|
sur un des sujets les plus chauds actuellement dans la communauté.
|
||||||
|
|
||||||
|
Peut-être que l'écriture de cet email me donnera l'élan nécessaire pour
|
||||||
|
communiquer cette constation et le publier sur r/haskell :).
|
||||||
|
|
||||||
|
Quoi qu'il en soit.
|
||||||
|
Je te souhaite encore une très bonne année 2021 !
|
||||||
|
|
||||||
|
Yann.
|
||||||
|
|
||||||
|
[fn:1] https://github.com/stuartsierra/component
|
||||||
|
[fn:2] https://github.com/puppetlabs/trapperkeeper
|
196
notes/2021-03-14--13-00-04Z--the_service_pattern.org
Normal file
196
notes/2021-03-14--13-00-04Z--the_service_pattern.org
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 9af1dcc8-08d5-4f30-a7cb-6395302771dc
|
||||||
|
:END:
|
||||||
|
#+TITLE: The Service Pattern
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-03-14]
|
||||||
|
|
||||||
|
- tags :: [[id:bec11f07-ffed-487b-9059-bdf6696548ab][programming]] [[id:155859f9-3f3c-4cea-bce4-70f24fca05fa][functional programming]] [[id:debfbdb6-03a6-478e-8316-bce0119c0dd7][clojure]] [[id:28b1b988-b2de-46aa-9a47-78a94aa5e2ce][haskell]] [[id:d2a59fd6-947a-4ce5-9673-1494268678c0][architecture]]
|
||||||
|
- source ::
|
||||||
|
- related :: [[id:9df0dad0-11e9-4c1a-ab27-ff2af21a8f78][Effects system in Clojure]]
|
||||||
|
|
||||||
|
* Introduction
|
||||||
|
|
||||||
|
|
||||||
|
The question about code structure and organization is one of the most
|
||||||
|
prolific one.
|
||||||
|
|
||||||
|
In this article I describe one possible solution in this huge design space.
|
||||||
|
|
||||||
|
First of all, I will focus on a functional programming pattern.
|
||||||
|
But I think the lessons could be extended to any generic programming
|
||||||
|
language.
|
||||||
|
|
||||||
|
** Design Patterns
|
||||||
|
|
||||||
|
Before explaining the pattern I would like to take the time to provide a
|
||||||
|
few distinctions between different programming language patterns.
|
||||||
|
Quite often, one fundamental question very important when choosing a
|
||||||
|
pattern for your code is about find the correct level of the pattern.
|
||||||
|
|
||||||
|
There are a tower of patterns and meta-patterns.
|
||||||
|
For example in imperative programming not using =goto= statement was
|
||||||
|
considered as a programming pattern.
|
||||||
|
Once that idea was accepted there were work done on /Object Oriented
|
||||||
|
Programming/.
|
||||||
|
And OOP was considered as a programming language pattern.
|
||||||
|
But OOP while already providing quite a constraint on your code
|
||||||
|
architecture was enough not sufficient.
|
||||||
|
OOP alone leave a lot of room in the design space.
|
||||||
|
Thus we've seen numerous "OOP Design Pattern".
|
||||||
|
That used the underlying OOP paradigm as a base and constructed
|
||||||
|
abstractions over it.
|
||||||
|
|
||||||
|
Even with all those Design Pattern it was up to the programmer to decide
|
||||||
|
which one applies or not.
|
||||||
|
Quite often there is not a single path easy to detect correct design
|
||||||
|
pattern.
|
||||||
|
Mainly the very hard part in programming is choosing the right abstraction.
|
||||||
|
|
||||||
|
There are other code structures to choose from.
|
||||||
|
In functional programming there are FRP.
|
||||||
|
Here also there are stories about how design pattern once chosen make a
|
||||||
|
natural evolution toward meta-design-patterns.
|
||||||
|
Mainly design pattern that rely on a lower level design pattern.
|
||||||
|
|
||||||
|
If you take the story behind Elm Architecture you can see it.
|
||||||
|
At first there were FRP.
|
||||||
|
Elm removed the behavior from FRP to only deal with events to simplify the
|
||||||
|
model.
|
||||||
|
But with FRP the author clearly though it was a good-enough design pattern.
|
||||||
|
But the design space was a bit too big.
|
||||||
|
So it was difficult to take the right decision.
|
||||||
|
So a natural meta-pattern appeared.
|
||||||
|
It is [[https://guide.elm-lang.org/architecture/][/Elm Architecture/]].
|
||||||
|
So while Elm imposed so structure of your program using static types to
|
||||||
|
prevent common coding mistakes and enforce a specific code structure.
|
||||||
|
Elm did not constrain the file organization, the number of buffers to
|
||||||
|
send/receive events, the way they should talk/listen between each other.
|
||||||
|
|
||||||
|
So Elm Architecture is a non enforced meta structure for your code
|
||||||
|
application.
|
||||||
|
Unlike the underlying layer of architecture.
|
||||||
|
But what Elm Architecture provide is a higher level architecture that will
|
||||||
|
help your program to "scale" and whose natural organization is easy to
|
||||||
|
understand.
|
||||||
|
|
||||||
|
So Elm Architecture is more of a proposal that will potentially have
|
||||||
|
drawback.
|
||||||
|
Typically, if you change the organization of your views, it could cost a
|
||||||
|
lot of change in your code.
|
||||||
|
But most of the time this is acceptable and preferable.
|
||||||
|
Because, the Elm Architecture is simple to understand and quite often this
|
||||||
|
is not such a big deal.
|
||||||
|
Not using the Elm Architecture paradigm put you at risk to end up in a
|
||||||
|
spaghetti code hell.
|
||||||
|
But of course there is a tension between code size/DRYness and easy to
|
||||||
|
understand code organization/architecture.
|
||||||
|
|
||||||
|
If you have a short code base, DRYness could probably be preferable.
|
||||||
|
Because a bit of disorganization and shortcuts will not be unbearable.
|
||||||
|
But as the size of your code grow, it will become more and more prevalent
|
||||||
|
that a strict code organization with perhaps more repetitions and a bit
|
||||||
|
more conventions implying more lines of code become preferable because it
|
||||||
|
minimize the risk of surprise between different part of the code.
|
||||||
|
Clearly, Elm Architecture is selling compactness of your code for an easier to
|
||||||
|
read, discover and understand overall code architecture.
|
||||||
|
|
||||||
|
So we could probably say the same for multiple proposed code architecture
|
||||||
|
mechanism in the Haskell world.
|
||||||
|
Typically we had:
|
||||||
|
|
||||||
|
- no org => spaghetti code
|
||||||
|
- big Monad => lack of composability, leak of abstraction everywhere
|
||||||
|
- Handler Pattern
|
||||||
|
- MTL
|
||||||
|
- RIO
|
||||||
|
- Free Monads (Effects)
|
||||||
|
|
||||||
|
After this first short introduction I hope it is clear that, it will be
|
||||||
|
quite impossible to discover a "best code architecture".
|
||||||
|
There are multiple code architecture and the bigger your code the more
|
||||||
|
constraint you must probably put in your code which will make a lot of code
|
||||||
|
look cumbersome from people used to smaller code size.
|
||||||
|
|
||||||
|
That being said, there are code architecture that could be probably be
|
||||||
|
considered fully superior to other ones.
|
||||||
|
Imagine a code architecture with the same properties but better in some
|
||||||
|
dimensions without worse evaluation in some dimension.
|
||||||
|
Typically, a code architecture is preferable to no code architecture as
|
||||||
|
soon as your code become big enough and you need to not work alone.
|
||||||
|
|
||||||
|
For example I would argue that the Purescript Halogen architecture is
|
||||||
|
probably strictly superior to the Elm Architecture.
|
||||||
|
Because it contains Elm Architecture but also contains a shortcut mechanism
|
||||||
|
which is entirely enforced via static types..
|
||||||
|
The "cost" of these shortcuts are quite limited because you are helped with
|
||||||
|
the types provided by the Halogen framework.
|
||||||
|
One big advantage is the ability to not pay the full price of the Elm
|
||||||
|
Architecture while moving a component.
|
||||||
|
* The Service Pattern-level 1
|
||||||
|
|
||||||
|
The service pattern should be easy to grasp with a few concrete examples.
|
||||||
|
|
||||||
|
So the Service Pattern you split your application in components with
|
||||||
|
internal state and a clear interface.
|
||||||
|
It looks a lot like OOP but it isn't.
|
||||||
|
The inner state is global unlike in OOP where every object has an internal
|
||||||
|
state.
|
||||||
|
So the number of isolated state should not grow dynamically but should be
|
||||||
|
mostly static after the runtime init.
|
||||||
|
|
||||||
|
*Important* Every component has a set of direct sub-service dependencies.
|
||||||
|
Every component have an inner state.
|
||||||
|
|
||||||
|
So you write components like this:
|
||||||
|
|
||||||
|
1. declare a component interface that could access the internal state
|
||||||
|
2. declare a set of sub-component your component need
|
||||||
|
3. declare an init function that could consider every sub-component has
|
||||||
|
already been initialized
|
||||||
|
4. declare a stop function that will be called in case your component is no
|
||||||
|
more needed to cleanup the state.
|
||||||
|
|
||||||
|
Generally a service should be a long-running system like a server.
|
||||||
|
Using this design you could declare an unordered list of components that
|
||||||
|
your application need to launch and you could potentially only enable part
|
||||||
|
of them you just need to take care that every enabled component also have
|
||||||
|
every of its sub-component enabled.
|
||||||
|
|
||||||
|
This look easy, but I dare you to achive this in Haskell.
|
||||||
|
Because it relies a lot on runtime properties.
|
||||||
|
This is frustrating as we feel we could put a lot of static informations.
|
||||||
|
|
||||||
|
What does this buy us?
|
||||||
|
|
||||||
|
This description might not provide the full view about the feature we could
|
||||||
|
get from this design.
|
||||||
|
|
||||||
|
1. easy testing. Exactly like an effect system you could switch the
|
||||||
|
implementation of sub-modules to use pure (and thus reproducible)
|
||||||
|
functions during your tests.
|
||||||
|
|
||||||
|
#+begin_src clojure
|
||||||
|
(defprotocol UserService
|
||||||
|
(get-user [user-id] "returns a user entity from its id"))
|
||||||
|
|
||||||
|
(defservice user-service
|
||||||
|
[[:ConfigService get-in-config]
|
||||||
|
[:StoreService read-entity]]
|
||||||
|
(init [this context]
|
||||||
|
(into context
|
||||||
|
{:raw-db-get-user
|
||||||
|
(fn [user-id]
|
||||||
|
(read-entity db-conf user-id))}))
|
||||||
|
(get-user [this user-id]
|
||||||
|
((:raw-db-get-user (get-context this)) user-id)))
|
||||||
|
|
||||||
|
(defservice stub-user-service
|
||||||
|
(init [_ context] context)
|
||||||
|
(get-user [user-id] {:id "fake-user-id" ,,,}))
|
||||||
|
|
||||||
|
(def test
|
||||||
|
(start-app [config-service store-service stub-user-service
|
||||||
|
my-service]
|
||||||
|
(test-my-service)))
|
||||||
|
#+end_src
|
9
notes/2021-03-20--17-27-46Z--architecture.org
Normal file
9
notes/2021-03-20--17-27-46Z--architecture.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: d2a59fd6-947a-4ce5-9673-1494268678c0
|
||||||
|
:END:
|
||||||
|
#+TITLE: architecture
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-03-20]
|
||||||
|
|
||||||
|
- tags :: [[id:bec11f07-ffed-487b-9059-bdf6696548ab][programming]]
|
||||||
|
- source ::
|
70
notes/2021-03-30--10-11-31Z--cross_domain_sessions.org
Normal file
70
notes/2021-03-30--10-11-31Z--cross_domain_sessions.org
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: f220f537-574c-4545-8727-6a18efcac8a0
|
||||||
|
:END:
|
||||||
|
#+TITLE: Cross Domain Sessions
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-03-30]
|
||||||
|
|
||||||
|
- tags :: [[id:299643a7-00e5-47fb-a987-3b9278e89da3][Auth]]
|
||||||
|
- source :: https://www.quora.com/How-does-Google-achieve-single-sign-on-between-different-domains-such-as-YouTube-and-Gmail
|
||||||
|
|
||||||
|
|
||||||
|
Q: How does Google achieve single sign-on between different domains such as
|
||||||
|
YouTube and Gmail?
|
||||||
|
|
||||||
|
I assume your question refers to SSO on browser
|
||||||
|
|
||||||
|
Short Version:
|
||||||
|
|
||||||
|
Single Sign On between various google apps is achieved via cookies.
|
||||||
|
If you check the cookies that are transmitted/received when you visit one
|
||||||
|
of the google domains, you will see that it adds cookies for multiple
|
||||||
|
domains like accounts.google.com, accounts.youtube.com/accounts/, etc.
|
||||||
|
These cookies contain your current login session information and hence you
|
||||||
|
get SSO
|
||||||
|
|
||||||
|
If you try to login to any app with cookies blocked, you won’t be able to
|
||||||
|
login even when your username and password are correct.
|
||||||
|
Google usually shows a help page about troubleshooting login issues.
|
||||||
|
Specifically, it will open up the page about enabling cookies in your
|
||||||
|
browser
|
||||||
|
|
||||||
|
Detailed Version:
|
||||||
|
|
||||||
|
- open https://mail.google.com/mail/ in a browser tab
|
||||||
|
- since you are not logged on (no session cookies sent during request) you are redirected to https://accounts.google.com
|
||||||
|
- you provide username and password and click on login
|
||||||
|
- posts a request to accounts.google.com/password
|
||||||
|
- the response contains cookies for the domain “.google.com” which contain
|
||||||
|
the session information
|
||||||
|
- it also contains identifier which is sent to accounts.youtube.com.
|
||||||
|
request is sent to accounts.youtube.com/SetSID URL
|
||||||
|
- there can be more requests similar to this for domains which are owned by
|
||||||
|
google but do not end with “.google.com”
|
||||||
|
- e.g. accounts.google.com.au , accounts.google.co.in
|
||||||
|
- for all such other domain requests, the current session identifier is sent
|
||||||
|
- this session identifier is different from the cookie value that is sent
|
||||||
|
- the required URLs are generated on the server and the browser simply
|
||||||
|
makes requests to these URLs
|
||||||
|
- the above activities happen in background when you are looking at “Please
|
||||||
|
Wait…” screen. When you sent your credentials at password URL, you are
|
||||||
|
redirected to the please wait screen which sets required cookies for
|
||||||
|
other domains
|
||||||
|
- once cookies are set, you are redirected to your gmail inbox
|
||||||
|
- since a request to accounts.youtube.com was already sent with current
|
||||||
|
session identifier, the server at accounts.youtube.com generates cookies
|
||||||
|
for “.youtube.com” which are present in the browser
|
||||||
|
- Google would maintain a central database of login sessions which can be
|
||||||
|
queried with the session identifier by all the other domain servers. That
|
||||||
|
is how they can generate cookies for the same user. I don’t know the
|
||||||
|
exact implementation but this is the general idea of maintaining cross
|
||||||
|
domain SSO
|
||||||
|
- now when you try to open www.youtube.com in another tab, those cookies
|
||||||
|
are sent along with the requests which auto logs you into youtube
|
||||||
|
- Similar set of events happen when you click logout on gmail tab
|
||||||
|
|
||||||
|
you see a please wait screen that sends requests to accounts.google.com,
|
||||||
|
account.youtube.com and any other domain that doesn’t end with
|
||||||
|
“.google.com” but is owned by google the response would clear the session
|
||||||
|
cookies now navigating to any link on youtube tab would suddenly show you
|
||||||
|
logged out
|
9
notes/2021-03-30--10-12-23Z--auth.org
Normal file
9
notes/2021-03-30--10-12-23Z--auth.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 299643a7-00e5-47fb-a987-3b9278e89da3
|
||||||
|
:END:
|
||||||
|
#+TITLE: Auth
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-03-30]
|
||||||
|
|
||||||
|
- tags ::
|
||||||
|
- source ::
|
|
@ -0,0 +1,90 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e61b485f-6cfb-49c4-8bb6-f724f1b73495
|
||||||
|
:END:
|
||||||
|
#+TITLE: Software Design for Flexibility
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-04-03]
|
||||||
|
|
||||||
|
- tags :: [[id:bec11f07-ffed-487b-9059-bdf6696548ab][programming]]
|
||||||
|
- source ::
|
||||||
|
|
||||||
|
My notes on the book.
|
||||||
|
|
||||||
|
Title: Software Design for Flexibility
|
||||||
|
Subtitle: How to Avoid Programming Yourself into a Corner
|
||||||
|
Authors: Chris Hanson & Gerald Jay Sussman
|
||||||
|
|
||||||
|
* Chapter 1
|
||||||
|
|
||||||
|
Page 19
|
||||||
|
|
||||||
|
In computer science we are taught that the "correctness" of software is
|
||||||
|
paramount, and that correctness is to be achieved by establishing formal
|
||||||
|
specification of components and systems of componenents and by providing
|
||||||
|
proofs that the specifications of a combination of components are met by
|
||||||
|
the specification of the components and the pattern by which they are
|
||||||
|
combined[^19].
|
||||||
|
We assert that this discipline makes systems more brittle.
|
||||||
|
In fact to make truly robust systems we must discard such a tight
|
||||||
|
discipline.
|
||||||
|
|
||||||
|
[^19]: It is hard, and perhaps impossible, to specify a commplex system. As
|
||||||
|
noted on page 7, it is easy to specify that a chess player must play legal
|
||||||
|
chess, but how would we specify that it plays well? And unlike chess, whose
|
||||||
|
rules do not change, the specifications of mmost system are dynamically
|
||||||
|
changing as the conditions of their usage change. How do we specify an
|
||||||
|
accounting system in the light of rapidly changing tax codes?
|
||||||
|
|
||||||
|
* Chapter 2
|
||||||
|
|
||||||
|
This chapter introduce a notion of code organisation it is name DSL.
|
||||||
|
Domain Specific Language.
|
||||||
|
|
||||||
|
The first part was quite difficult to dig into.
|
||||||
|
It uses someting that looks like lost discussion on function arity.
|
||||||
|
While the subjet is quite important to me "combinators" them made it
|
||||||
|
shallow and not that interesting.
|
||||||
|
I was not happy.
|
||||||
|
They lost a lot of energy tacklink the tedious problem of function arities.
|
||||||
|
Coming from Haskell every function only has a single argument and thus
|
||||||
|
makes this issue trivially fixed.
|
||||||
|
|
||||||
|
Here they used a quite terrible approach to anotate the arities on a global
|
||||||
|
set hash-map.
|
||||||
|
They also use advanced Scheme functions that can provide the min and max
|
||||||
|
nunber of argument of a function.
|
||||||
|
Let just say, i wasn't really impressed.
|
||||||
|
|
||||||
|
They just declared =comp= and some parallel combinators.
|
||||||
|
I think they should have probably left the arities details in the appendice.
|
||||||
|
|
||||||
|
The second part of this chapter is about generating a composable language
|
||||||
|
to generate clean regular expressions.
|
||||||
|
This one was a lot better.
|
||||||
|
They show how the current implementation of regular expression was
|
||||||
|
generally terrible and provide a nice composable DSL for it.
|
||||||
|
Not something totally new, but it was better than a SQL DSL while similar
|
||||||
|
in spirit.
|
||||||
|
|
||||||
|
The third part of this chapter discuss about writing a system for a board
|
||||||
|
game rules.
|
||||||
|
As a non-native English speaker I haven't understood that /referee/ is the
|
||||||
|
English name of the game "les dames".
|
||||||
|
So as they also mention a "generic board game" and mention chess, I was
|
||||||
|
quite confused by the code and choices I saw.
|
||||||
|
So once I understood it.
|
||||||
|
It was a nice example about what not to do while designing a system.
|
||||||
|
They give two pass of the same code.
|
||||||
|
In the first pass, the rules and the executions are mixed together.
|
||||||
|
They explain how to fix this shortcoming and made another pass where they
|
||||||
|
split the system in three parts.
|
||||||
|
A generic "board-game" system, that could be used by most board games.
|
||||||
|
An execution system that would take care of applying rules using the board
|
||||||
|
game system API.
|
||||||
|
And lastly a system to only expres rules that could be used by the previous
|
||||||
|
system.
|
||||||
|
The interesting part being that you can adapt the rules from referee to
|
||||||
|
chess by only changing the rules and not the rest of the code.
|
||||||
|
There are still visible problem with this architecture.
|
||||||
|
But it was a pretty nice introduction to show how composability is kind of
|
||||||
|
preferable than a specialized system.
|
441
notes/2021-04-16--12-27-13Z--iroh_auth_presentation.org
Normal file
441
notes/2021-04-16--12-27-13Z--iroh_auth_presentation.org
Normal file
|
@ -0,0 +1,441 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: a92ff371-3ece-489c-a6cc-34810458f660
|
||||||
|
:END:
|
||||||
|
#+TITLE: IROH Auth Presentation
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-04-16]
|
||||||
|
|
||||||
|
- tags :: [[id:91f33b35-6e4e-4213-b214-972ee20722df][Cisco]]
|
||||||
|
|
||||||
|
* IROH Auth :ATTACH:
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: dc5070c0-9040-4175-9a67-c85a21f65f35
|
||||||
|
:END:
|
||||||
|
|
||||||
|
|
||||||
|
[[attachment:_20210416_150439Screenshot%202021-04-16%20at%2015.04.30.png]]
|
||||||
|
|
||||||
|
Yann Esposito <yaesposi@cisco.com>
|
||||||
|
|
||||||
|
* Plan
|
||||||
|
|
||||||
|
1. Introduction, History
|
||||||
|
2. Login
|
||||||
|
3. OAuth2/OIDC Provider
|
||||||
|
4. Specific Usages Cisco
|
||||||
|
|
||||||
|
* 1 - Introduction
|
||||||
|
* When did you interacted with IROH-Auth?
|
||||||
|
|
||||||
|
- *Login* in SecureX
|
||||||
|
- *Login* in CTR
|
||||||
|
- *Login* in Orbital
|
||||||
|
- *Authorized* the Ribbon
|
||||||
|
- *Invited* someone to your Org
|
||||||
|
- *Cross Launch* with SSE
|
||||||
|
- Dealing with JWT
|
||||||
|
- Changed the role of some user
|
||||||
|
- When you investigate in CTR (via CTIA's module)
|
||||||
|
- Created an OAuth2 client
|
||||||
|
|
||||||
|
* What is IROH-Auth? (overview)
|
||||||
|
|
||||||
|
This is a software subcomponent of /IROH/[fn:iroh] taking care of:
|
||||||
|
|
||||||
|
+ *Authentication*
|
||||||
|
- provide a user unique identifier
|
||||||
|
+ *Authorization*
|
||||||
|
- decide what user can or cannot do
|
||||||
|
+ *User Data Model*
|
||||||
|
+ *Tenancy (Org) Management*
|
||||||
|
+ *API Clients Management*
|
||||||
|
+ *OAuth2*, *OpenID Connect* provider (half of IROH-Auth dedicated to this)
|
||||||
|
|
||||||
|
[fn:iroh]: *IROH* The software serving the API behind SecureX, CTR, Ribbons, integrations...
|
||||||
|
* What is IROH-Auth? (technical)
|
||||||
|
|
||||||
|
/IROH-Auth/ is a set of /Services/ within /IROH/ some of them exposing
|
||||||
|
HTTP APIs.
|
||||||
|
|
||||||
|
- Login
|
||||||
|
+ Login (core service + web API)
|
||||||
|
+ Org (service)
|
||||||
|
+ User (service + web API)
|
||||||
|
+ Scopes (service)
|
||||||
|
+ Auth Management (core service)
|
||||||
|
+ Invite (core service + web API)
|
||||||
|
+ Session (web API)
|
||||||
|
+ Profile (web API, =/whoami=)
|
||||||
|
+ SCIM Client (service)
|
||||||
|
+ IdP Migrate (core service + web API) /deprecated a few months ago/
|
||||||
|
+ Provision (service + web API) /used instead of IdP Migrate/
|
||||||
|
|
||||||
|
- OAuth2
|
||||||
|
+ OAuth2 (core service + web API)
|
||||||
|
+ OAuth2 Clients (core service + web API)
|
||||||
|
+ OAuth2 Clients Presets (service)
|
||||||
|
+ Grant Service (User's client authorizations)
|
||||||
|
|
||||||
|
- Admin
|
||||||
|
+ Auth Management (web API)
|
||||||
|
+ OAuth2 Clients Management (web API)
|
||||||
|
|
||||||
|
* History: IROH/Visibility (1/?) :ATTACH:
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: dab23b61-a766-4eda-a1e9-1d39258ef5c0
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Login using AMP SAML (generate JWT)
|
||||||
|
Worked with Guillaume.
|
||||||
|
|
||||||
|
Use AMP as an *IdP*[fn:idp]
|
||||||
|
|
||||||
|
After the dance of their people AMP provides:
|
||||||
|
- user-id
|
||||||
|
- org-id
|
||||||
|
- role (admin/user)
|
||||||
|
|
||||||
|
*No DB of users!*
|
||||||
|
|
||||||
|
[fn:idp] Idp: Identity Provider
|
||||||
|
|
||||||
|
* History: IROH/Visibility - SAML (2/?) :ATTACH:
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 07dabe43-9563-430c-a729-87b5154d6d18
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Doc & Libs
|
||||||
|
|
||||||
|
> It's bad.
|
||||||
|
> It's really bad.
|
||||||
|
> It's like eating a hot circle of garbage...
|
||||||
|
> Kevin
|
||||||
|
|
||||||
|
[[attachment:_20210416_152516.jpeg]]
|
||||||
|
|
||||||
|
* History: IROH/Visibility (3/?)
|
||||||
|
|
||||||
|
2nd goal: Support OAuth2 (become an OAuth2 provider)
|
||||||
|
3rd goal: Support AMP and Threatgrid login (OpenID Connect)
|
||||||
|
|
||||||
|
Become both an OAuth2 client and provider.
|
||||||
|
|
||||||
|
Need Clients/Users/Orgs in DB!!!
|
||||||
|
|
||||||
|
OAuth2 RFC => OAuth2 GRANTS
|
||||||
|
|
||||||
|
- Authorization Code Grant (the classic)
|
||||||
|
- Client Grant (for scripts)
|
||||||
|
- Implicit Grant (for Single Page Applications, now deprecated)
|
||||||
|
|
||||||
|
* History: IROH/Visibility (4/?)
|
||||||
|
|
||||||
|
4rd goal: Support Account Activation => SCIM[fn:scim] Client
|
||||||
|
|
||||||
|
Call a SCIM server.
|
||||||
|
Check if the account is part from an activated Org inside AMP.
|
||||||
|
|
||||||
|
- Become an OpenID Connect provider, made before the start of SecureX.
|
||||||
|
- OpenID Connect with SSE (we are the IdP now)
|
||||||
|
|
||||||
|
[fn:scim] *SCIM*: System for Cross-domain Identity Management
|
||||||
|
* History: CTR (IDB SSE) :ATTACH:
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 83c6d508-003a-4c81-8385-b9fa13137b92
|
||||||
|
:END:
|
||||||
|
To integrate with SSE (devices) we have to use an SSE hosted IdP provider:
|
||||||
|
the *IDB*
|
||||||
|
|
||||||
|
The *IDB* stand for *Identity Broker*.
|
||||||
|
This is a *Ping Federate Identity Provider*.
|
||||||
|
*Ping Federate* is a server from PingIdentity a company specialized in
|
||||||
|
Identity Providers and Management.
|
||||||
|
|
||||||
|
Since then we only use OpenID Connect
|
||||||
|
=> IROH-Auth SAML support start to rot and is now probably completely deprecated
|
||||||
|
|
||||||
|
[[attachment:_20210416_155119Yesssss--meme-40935.jpg]]
|
||||||
|
|
||||||
|
* History: SecureX (5/?)
|
||||||
|
|
||||||
|
From =idp-mapping= to =idp-mappings=
|
||||||
|
|
||||||
|
From Idp managing Orgs to IdP providing only a User Identity Id.
|
||||||
|
=> generate random user-id/org-id and stop using the the one given by the IdP.
|
||||||
|
|
||||||
|
Lot of DB migrations ensues.
|
||||||
|
|
||||||
|
* 2 - Login
|
||||||
|
|
||||||
|
Lot of IROH-Auth services dedicated just for *Login*
|
||||||
|
|
||||||
|
* IROH-Auth Login
|
||||||
|
|
||||||
|
Generally: enter your username & password => set a cookie with an id of the
|
||||||
|
user of the user
|
||||||
|
|
||||||
|
Not in IROH-Auth.
|
||||||
|
The first goal was (and still is) not to take care of user's credentials.
|
||||||
|
|
||||||
|
*There are no user password in IROH Auth.*
|
||||||
|
|
||||||
|
The password security is handled by external *IdPs*.
|
||||||
|
Currently SXSO, CSA & TG.
|
||||||
|
|
||||||
|
* IROH-Auth Login Dance (1/?) :ATTACH:
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: e12ca021-c030-47f8-a9e5-4fb815a88735
|
||||||
|
:END:
|
||||||
|
|
||||||
|
So the dance of login via IROH-Auth
|
||||||
|
|
||||||
|
[[attachment:_20210416_154054Screenshot%202021-04-16%20at%2015.38.37.png]]
|
||||||
|
|
||||||
|
1. Login page => Select an IdP (all buttons are just links)
|
||||||
|
2. When a user click on the link:
|
||||||
|
- generate and save an unique Id
|
||||||
|
- redirect the user to the IdP with that unique Id as parameter
|
||||||
|
3. Wait for the user to come back to =/iroh/iroh-auth/:idp/answer= with
|
||||||
|
- =code= query parameter
|
||||||
|
- =state= query paramter that should be equal to the generate unique Id
|
||||||
|
4. We check our DB for that unique Id
|
||||||
|
then call the IdP with the =code= and a secret shared between IROH-Auth
|
||||||
|
and the IdP only.
|
||||||
|
5. The IdP returns an =id_token= with all user's information.
|
||||||
|
|
||||||
|
|
||||||
|
After this first dance, we have:
|
||||||
|
|
||||||
|
1. A Users's Identity Id (the id of the user in the IdP)
|
||||||
|
2. The user email
|
||||||
|
* IROH-Auth Login Dance (2/?)
|
||||||
|
|
||||||
|
After the "Login Workflow" we know:
|
||||||
|
|
||||||
|
- The user IdP
|
||||||
|
- /User Identity id/
|
||||||
|
- the user's email
|
||||||
|
|
||||||
|
Depending on the IdP we can also have an associated Org-id.
|
||||||
|
|
||||||
|
So login now? no.
|
||||||
|
|
||||||
|
* IROH-Auth Login Dance: Check the IdP configuration (3/?)
|
||||||
|
|
||||||
|
#+begin_example clojure
|
||||||
|
{:id "idb-amp" <- idp-id
|
||||||
|
:name "Cisco Security Account" <- to display on the login page
|
||||||
|
:msg "For existing Threat Response & AMP users." <- ???
|
||||||
|
:position 1 <- position on the login page
|
||||||
|
:legacy true <- old?
|
||||||
|
:auth-kind :oidc <- SAML or OpenId Connect?
|
||||||
|
:user-namespace "idb-amp" <- if legacy, user-id will be (str user-namespace "-" user-identity-id)
|
||||||
|
:authorize-uri "https://staging-sse.cisco.com/providers/sse/services/ident/as/authorization.oauth2"
|
||||||
|
:token-uri "https://staging-sse.cisco.com/providers/sse/services/ident/as/token.oauth2"
|
||||||
|
:idp-account-url "https://console.qa1.immunet.com/users/current"
|
||||||
|
:idp-logout-url "https://console.qa1.immunet.com/logout"
|
||||||
|
:grant-type :code <- OAuth2 detail
|
||||||
|
;; Correlation table how to transform the `id_token` claims
|
||||||
|
:correlation-table {:org-id [:companyId]
|
||||||
|
:org-name [:companyName]
|
||||||
|
:user-name [:user_name]
|
||||||
|
:user-email [:email]
|
||||||
|
:role [:role]}
|
||||||
|
:scopes ["profile" "email"] <- asked to the IdP OIDC provider
|
||||||
|
:client-id "mylocalamp" <- client-id on the IdP provider
|
||||||
|
:allow-all-role-to-login false <- default allow non-admin to login
|
||||||
|
:client-secret "******"
|
||||||
|
:additional-authorize-query-params {:selector "amp"} <- ping fed magic
|
||||||
|
:scim-id :qa1} <- SCIM server id (refer to another part in the conf)
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
* IROH-Auth Login Dance: For Legacy IdPs
|
||||||
|
|
||||||
|
We consider the IdP will manage the org (give an org-id, provide an user
|
||||||
|
role, etc...)
|
||||||
|
If that's the case we update our users inside IROH-Auth everytime the
|
||||||
|
user login.
|
||||||
|
There is no mechanism to push user's change from IdP directly in
|
||||||
|
IROH-Auth.
|
||||||
|
With CSA Migraiton should be deprecated.
|
||||||
|
|
||||||
|
* IROH-Auth Login Dance: For SXSO
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: dc5070c0-9040-4175-9a67-c85a21f65f36
|
||||||
|
:END:
|
||||||
|
|
||||||
|
We generate the =idp-mapping= out of the =id_token=.
|
||||||
|
The =idp-mapping= contain:
|
||||||
|
|
||||||
|
- The idp-id
|
||||||
|
- The /User Identity Id/ (the user id in the IdP not in IROH)
|
||||||
|
|
||||||
|
We search for the user's email.
|
||||||
|
If we find multiple users with the same email, we add (if not already exists)
|
||||||
|
the idp-mapping to all thoses users.
|
||||||
|
|
||||||
|
Then we search the DB for matches of the idp-mappings:
|
||||||
|
|
||||||
|
1. 0 occurence, this is a new unknown user => Present Org's creation page
|
||||||
|
=> create the org and the user.
|
||||||
|
2. 1 occurence, directly login the user to it's single known account
|
||||||
|
3. >1 occurence, display the account selection page
|
||||||
|
|
||||||
|
[[attachment:_20210416_150439Screenshot%202021-04-16%20at%2015.04.30.png]]
|
||||||
|
|
||||||
|
* 3 - OAuth2 / OpendID Connect Provider
|
||||||
|
* OAuth2 Provider
|
||||||
|
|
||||||
|
From the RFC:
|
||||||
|
|
||||||
|
> The OAuth 2.0 authorization framework enables a third-party
|
||||||
|
> application to obtain limited access to an HTTP service, either on
|
||||||
|
> behalf of a resource owner by orchestrating an approval interaction
|
||||||
|
> between the resource owner and the HTTP service, or by allowing the
|
||||||
|
> third-party application to obtain access on its own behalf.
|
||||||
|
|
||||||
|
3 involved entities:
|
||||||
|
|
||||||
|
- an API (Service Provider, IROH)
|
||||||
|
- an IROH-Auth user
|
||||||
|
- an Application that would like to access the API on behalf of the user (Ribbon)
|
||||||
|
|
||||||
|
* OAuth2 Provider: Supported Grants
|
||||||
|
|
||||||
|
RFC Grants
|
||||||
|
|
||||||
|
*Authorization Code Grant*
|
||||||
|
secrets:
|
||||||
|
- 1 secret between IROH-Auth/Application (client secret)
|
||||||
|
- 1 secret between Application/User and IROH-Auth/User (refresh token)
|
||||||
|
=> involve user-agent workflow
|
||||||
|
|
||||||
|
*Client Credential Grant*
|
||||||
|
- 1 shared secret between IROH-Auth/Application/User (client secret)
|
||||||
|
=> involve copy/paste
|
||||||
|
|
||||||
|
* Authorization Code Grant
|
||||||
|
|
||||||
|
#+begin_quote
|
||||||
|
4.1. Authorization Code Grant
|
||||||
|
|
||||||
|
The authorization code grant type is used to obtain both access
|
||||||
|
tokens and refresh tokens and is optimized for confidential clients.
|
||||||
|
Since this is a redirection-based flow, the client must be capable of
|
||||||
|
interacting with the resource owner's user-agent (typically a web
|
||||||
|
browser) and capable of receiving incoming requests (via redirection)
|
||||||
|
from the authorization server.
|
||||||
|
|
||||||
|
+----------+
|
||||||
|
| Resource |
|
||||||
|
| Owner |
|
||||||
|
| |
|
||||||
|
+----------+
|
||||||
|
^
|
||||||
|
|
|
||||||
|
(B)
|
||||||
|
+----|-----+ Client Identifier +---------------+
|
||||||
|
| -+----(A)-- & Redirection URI ---->| |
|
||||||
|
| User- | | Authorization |
|
||||||
|
| Agent -+----(B)-- User authenticates --->| Server |
|
||||||
|
| | | |
|
||||||
|
| -+----(C)-- Authorization Code ---<| |
|
||||||
|
+-|----|---+ +---------------+
|
||||||
|
| | ^ v
|
||||||
|
(A) (C) | |
|
||||||
|
| | | |
|
||||||
|
^ v | |
|
||||||
|
+---------+ | |
|
||||||
|
| |>---(D)-- Authorization Code ---------' |
|
||||||
|
| Client | & Redirection URI |
|
||||||
|
| | |
|
||||||
|
| |<---(E)----- Access Token -------------------'
|
||||||
|
+---------+ (w/ Optional Refresh Token)
|
||||||
|
|
||||||
|
Note: The lines illustrating steps (A), (B), and (C) are broken into
|
||||||
|
two parts as they pass through the user-agent.
|
||||||
|
|
||||||
|
Figure 3: Authorization Code Flow
|
||||||
|
#+end_quote
|
||||||
|
|
||||||
|
* Client Credential Grant
|
||||||
|
|
||||||
|
#+begin_quote
|
||||||
|
4.4. Client Credentials Grant
|
||||||
|
|
||||||
|
The client can request an access token using only its client
|
||||||
|
credentials (or other supported means of authentication) when the
|
||||||
|
client is requesting access to the protected resources under its
|
||||||
|
control, or those of another resource owner that have been previously
|
||||||
|
arranged with the authorization server (the method of which is beyond
|
||||||
|
the scope of this specification).
|
||||||
|
The client credentials grant type MUST only be used by confidential
|
||||||
|
clients.
|
||||||
|
|
||||||
|
+---------+ +---------------+
|
||||||
|
| | | |
|
||||||
|
| |>--(A)- Client Authentication --->| Authorization |
|
||||||
|
| Client | | Server |
|
||||||
|
| |<--(B)---- Access Token ---------<| |
|
||||||
|
| | | |
|
||||||
|
+---------+ +---------------+
|
||||||
|
|
||||||
|
Figure 6: Client Credentials Flow
|
||||||
|
|
||||||
|
The flow illustrated in Figure 6 includes the following steps:
|
||||||
|
|
||||||
|
(A) The client authenticates with the authorization server and
|
||||||
|
requests an access token from the token endpoint.
|
||||||
|
|
||||||
|
(B) The authorization server authenticates the client, and if valid,
|
||||||
|
issues an access token.
|
||||||
|
#+end_quote
|
||||||
|
|
||||||
|
* Clients
|
||||||
|
|
||||||
|
Client mandatory fields:
|
||||||
|
|
||||||
|
- =id= the unique id of the client accross all Threat Response,
|
||||||
|
- =name= a name for the client that will be user facing,
|
||||||
|
- =client-type= can be either =confidential= or =public=,
|
||||||
|
- =grants= a list that could contain =auth-code= or =client-creds=,
|
||||||
|
- =redirects= a set of URIs,
|
||||||
|
- =scopes= a set of scopes,
|
||||||
|
- =enabled?= a boolean, this field is editable by admin users,
|
||||||
|
- =approved?= a boolean, editable only by Threat Response admins.
|
||||||
|
|
||||||
|
Client optional fields:
|
||||||
|
|
||||||
|
- =description=, a long description of the client that could be presented to the
|
||||||
|
users during client authorization,
|
||||||
|
- =owner-id=, the user id of the client's owner,
|
||||||
|
- =org-id=, the org id of the client's owner,
|
||||||
|
- =enabled-by=, the user id of the admin that enabled the client,
|
||||||
|
- =disabled-by=, the user id of the admin that disabled the client,
|
||||||
|
- =password=, also known as the "client's secret", public clients don't
|
||||||
|
have a password,
|
||||||
|
- =access-token-lifetime-in-sec=, access token lifetime this client provides,
|
||||||
|
- =refresh-token-lifetime-in-sec=, refresh token lifetime this client provides,
|
||||||
|
- =availability=, can be =user=, =org= or =everyone=. This filters the user that
|
||||||
|
can grant access to this client:
|
||||||
|
+ =user= only the owner
|
||||||
|
+ =org= only org's members
|
||||||
|
+ =everyone= any Threat Response user
|
||||||
|
- =approval-status=, possible values are =waiting= =rejected= =approved=. During
|
||||||
|
client creation some criteria will need an Threat Response Admin's approval,
|
||||||
|
- =approver-id=, the user id of the user (a Threat Response admin) that approved the client
|
||||||
|
- =approval-message=, a message left for the user.
|
||||||
|
- =client-preset-id=, a Client Preset ID. Client Presets are explained in [[#client-presets]].
|
||||||
|
|
||||||
|
+ advanced fields
|
||||||
|
|
||||||
|
- =allow-partial-user-scopes?= If true, a user without all the requested
|
||||||
|
scopes from the Client can still authorize the client. The refresh and
|
||||||
|
access tokens will only have the intersection of both scopes.
|
||||||
|
- =audiences=
|
||||||
|
|
||||||
|
* 4 - Specifc Cisco Usage
|
||||||
|
|
||||||
|
- Orbital
|
||||||
|
- AMP
|
||||||
|
- SSE
|
9
notes/2021-04-16--13-35-21Z--cisco.org
Normal file
9
notes/2021-04-16--13-35-21Z--cisco.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 91f33b35-6e4e-4213-b214-972ee20722df
|
||||||
|
:END:
|
||||||
|
#+TITLE: Cisco
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-04-16]
|
||||||
|
|
||||||
|
- tags ::
|
||||||
|
- source ::
|
140
notes/2021-05-01--11-03-58Z--impots_2020.org
Normal file
140
notes/2021-05-01--11-03-58Z--impots_2020.org
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 9efea780-399a-45e8-9e20-a0974f6bccf6
|
||||||
|
:END:
|
||||||
|
#+TITLE: Impots 2020
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2021-05-01]
|
||||||
|
|
||||||
|
- tags ::
|
||||||
|
- source ::
|
||||||
|
|
||||||
|
|
||||||
|
* Declaration
|
||||||
|
** General
|
||||||
|
- numero fiscal: 1208764994115
|
||||||
|
|
||||||
|
Etape 3; Selectionner:
|
||||||
|
|
||||||
|
- Revenus: Micro foncier
|
||||||
|
- Charges: Investissement locatif (...,Duflot,...)
|
||||||
|
|
||||||
|
C.f.:
|
||||||
|
|
||||||
|
[[./assets/declaration-2019-helper.png]]
|
||||||
|
|
||||||
|
*** page 1
|
||||||
|
|
||||||
|
- Y: 102081 (retenue source 16282)
|
||||||
|
- K: 15203 (retenue source 89)
|
||||||
|
|
||||||
|
*** page 2
|
||||||
|
|
||||||
|
Détail des revenus connus de l'administration
|
||||||
|
Il vous appartient d'en vérifier l'exactitude :
|
||||||
|
|
||||||
|
Revenus ligne 2DC :
|
||||||
|
|
||||||
|
CASDEN BANQUE POPULAIRE
|
||||||
|
BANQUE POPULAIRE MEDITERRANEE
|
||||||
|
|
||||||
|
|
||||||
|
14 €
|
||||||
|
2 €
|
||||||
|
|
||||||
|
Total : 16 €
|
||||||
|
Revenus ligne 2CG :
|
||||||
|
|
||||||
|
CASDEN BANQUE POPULAIRE
|
||||||
|
|
||||||
|
|
||||||
|
14 €
|
||||||
|
|
||||||
|
Total : 14 €
|
||||||
|
Revenus ligne 2BH :
|
||||||
|
|
||||||
|
BANQUE POPULAIRE MEDITERRANEE
|
||||||
|
|
||||||
|
|
||||||
|
2 €
|
||||||
|
|
||||||
|
Total : 2 €
|
||||||
|
Revenus ligne 2CK :
|
||||||
|
|
||||||
|
CASDEN BANQUE POPULAIRE
|
||||||
|
|
||||||
|
|
||||||
|
2 €
|
||||||
|
|
||||||
|
Total : 2 €
|
||||||
|
*** Page 3
|
||||||
|
*** Foncier (page 4)
|
||||||
|
|
||||||
|
- Micro foncier: [4BE] 4656 + 2330 = 6986 (en utilisant [[file:assets/impots2020/revenus-fonciers-2020.pdf][Revenus Fonciers 2020]])
|
||||||
|
z
|
||||||
|
*** page 5
|
||||||
|
|
||||||
|
**** Pre retraite (6RS)
|
||||||
|
|
||||||
|
[6RS]: 5080
|
||||||
|
|
||||||
|
En utilisant [[file:assets/impots2020/fiche-fiscale-cisco.pdf][Fiche Fiscale Cisco]]
|
||||||
|
|
||||||
|
- https://ere.axa.fr
|
||||||
|
- Identifiant Internet: 70475738
|
||||||
|
- Votre entreprise : CISCO SYSTEMS France
|
||||||
|
- Votre numéro d'adhésion : 2722501130200/00888
|
||||||
|
- email: yann.esposito@gmail.com
|
||||||
|
*** page 6
|
||||||
|
**** Dons 7UD
|
||||||
|
|
||||||
|
| assoc | don |
|
||||||
|
|-------------------------------+-----|
|
||||||
|
| [[file:assets/Unicef_2019.HEIC][Unicef 2019]] | 276 |
|
||||||
|
| [[file:assets/Medecins_sans_frontieres_2019.pdf][Medecins Sans Frontieres 2019]] | 120 |
|
||||||
|
|-------------------------------+-----|
|
||||||
|
**** Loi Duflot (7FK)
|
||||||
|
|
||||||
|
- 3060€ dans la case 7FK (investissement Duflot 2014)
|
||||||
|
|
||||||
|
**** Comptes Morgan Stanley (Annexe)
|
||||||
|
|
||||||
|
num compte: 233 074973 126
|
||||||
|
date ouverture: 01/04/2016
|
||||||
|
** RSU/ESPP :ATTACH:
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 4591374a-9183-4698-bae4-38193e88bb8b
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Presentation déclaration:
|
||||||
|
|
||||||
|
[[attachment:_20210519_150647Cisco%20France%20%20-%20Pre%CC%81sentation%20RSU-SO-ESPP%20-%2018.05.2021.pdf]]
|
||||||
|
|
||||||
|
|
||||||
|
*** RSU 2020
|
||||||
|
|
||||||
|
2020-07-15: moins value -$19
|
||||||
|
2020-07-15: moins value -$74
|
||||||
|
2020-07-15: plus value $98
|
||||||
|
2020-01-02: moins value -$20.70
|
||||||
|
2020-01-02: plus value $45.38
|
||||||
|
|
||||||
|
*** ESPP 2020
|
||||||
|
|
||||||
|
30/06/2020 => Prix d'achat FMV (Aquisition Fair Market Value): $46.6400
|
||||||
|
Prix de vente: 05/08/2020 => $47.4918
|
||||||
|
Nombre d'actions: 70
|
||||||
|
Conversion EUR: 0.84
|
||||||
|
|
||||||
|
Plus value en €: 70x(47.4918 - 46.6400)*0.84 => 50.08€
|
||||||
|
|
||||||
|
=> Sale - 002873 - 01/02/2020
|
||||||
|
|
||||||
|
FMV: $47.9600
|
||||||
|
Sale Price: $47.9850
|
||||||
|
Conversion EUR: 0.88
|
||||||
|
NB Actions: 85
|
||||||
|
|
||||||
|
Plus value en €: 85 * (47.9850 - 47.9600) * 0.88 => 1.87€
|
||||||
|
*** Resultat
|
||||||
|
|
||||||
|
Moins value de 158€ a reporter en 3VH annexe 2042C
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue