diff --git a/Cisco.org.gpg b/Cisco.org.gpg index d471c943..d513fb10 100644 Binary files a/Cisco.org.gpg and b/Cisco.org.gpg differ diff --git a/TODO.org b/TODO.org index 7c113a2a..4f3458ef 100644 --- a/TODO.org +++ b/TODO.org @@ -3,20 +3,27 @@ #+ARCHIVE: archives/TODO.archive.org:: #+TODO: TODO(t) IN-PROGRESS(p) HOLD(h@/!) WAITING(w@/!) | DONE(d) CANCELED(c@/!) #+COLUMNS: %TODO %3PRIORITY %40ITEM(Task) %17Effort(Estimated Effort){:} %CLOCKSUM %8TAGS(TAG) - * COLUMNS is SPC o c ** Agenda -*** DONE Appeler RDV dentaire - CLOSED: [2019-07-15 Mon 16:15] DEADLINE: <2019-06-10 Mon> -*** DONE Create self private emacs package/spacemacs layer - CLOSED: [2019-07-31 Wed 14:27] DEADLINE: <2019-08-10 Sat> -** Personal Projects :dev: +*** DONE finir le dyndns https://www.davd.io/build-your-own-dynamic-dns-in-5-minutes/ +CLOSED: [2019-09-03 Tue 12:54] DEADLINE: <2019-09-03 Tue> +Le port 8080 est utilisé dans docker apparemment. +*** DONE Amadeus :film: +CLOSED: [2019-09-04 Wed 07:42] DEADLINE: <2019-09-03 Tue> +[2019-09-03 Tue 12:55] +*** DONE Coraline :film: +CLOSED: [2019-09-04 Wed 07:42] DEADLINE: <2019-09-03 Tue> +[2019-09-03 Tue 12:57] +*** DONE Evil Dead :film: +CLOSED: [2019-09-04 Wed 07:42] DEADLINE: <2019-09-03 Tue> +[2019-09-03 Tue 12:58] +** Personal Projects :dev: *** Redbot [0%] -**** TODO [#B] User Management :hs: +**** TODO [#B] User Management :hs: ***** TODO [#B] Invitations, send mail notifications ***** TODO [#C] Rate Limiting ***** TODO Complexity Limit (max nb of bots, responders, nb of matches by responders, etc...) -**** TODO [#C] Basic stats (nb msg/s, etc...) :hs: +**** TODO [#C] Basic stats (nb msg/s, etc...) :hs: **** TODO [#C] Enhance matching ***** HOLD [#C] Use a split and Index on n-grams to match for all bots fast ***** HOLD [#C] User regex? @@ -26,7 +33,7 @@ ***** TODO Improve reproducible build; check https://github.com/cprussin/nixjs ***** TODO Improve easier safer and more robust deployment ***** TODO Make it possible to handle parallelism using F5Bot technique with parity for example. -*** Enhance Hosting / Privacy / DWeb :dweb: +*** Enhance Hosting / Privacy / DWeb :dweb: **** DONE Self Hosted Mails CLOSED: [2019-07-23 Tue 00:54] **** TODO Enhance quality of hosting, switch to NixOS @@ -34,7 +41,7 @@ - Remove gitlab and switch to something else (certainly: http://sr.ht see https://man.sr.ht/installation.md) - Something rawer like gpm? -*** HOLD Write a comments system :dweb: +*** HOLD Write a comments system :dweb: - State "HOLD" from "IN-PROGRESS" [2019-04-22 Mon 22:27] \\ Maybe not the best solution after all. Still the code learnt me a lot. diff --git a/archives/Cisco.archive.org.gpg b/archives/Cisco.archive.org.gpg index 3dea6207..40fb241f 100644 Binary files a/archives/Cisco.archive.org.gpg and b/archives/Cisco.archive.org.gpg differ diff --git a/archives/Lambda-Riviera-000-Intro-FP.org b/archives/Lambda-Riviera-000-Intro-FP.org deleted file mode 100644 index 656eafa3..00000000 --- a/archives/Lambda-Riviera-000-Intro-FP.org +++ /dev/null @@ -1,890 +0,0 @@ -#+Title: Introduction à la Programmation Fonctionnelle avec Haskell -#+Author: Yann Esposito -#+Date: <2018-03-15 Thu> - -*** main :: IO () - -#+BEGIN_SRC -████████████████████████████████████████████████████████████████████████████████████ -█ █ -█ Initialiser l'env de dev █ -█ █ -████████████████████████████████████████████████████████████████████████████████████ -#+END_SRC - -Install **stack**: - -#+BEGIN_SRC bash -curl -sSL https://get.haskellstack.org/ | sh -#+END_SRC - -Install **nix**: - -#+BEGIN_SRC bash -curl https://nixos.org/nix/install | sh -#+END_SRC - -** Programmation Fonctionnelle? -*** Von Neumann Architecture (1945) - -#+BEGIN_SRC - +--------------------------------+ - | +----------------------------+ | - | | central processing unit | | - | | +------------------------+ | | - | | | Control Unit | | | -+------+ | | +------------------------+ | | +--------+ -|input +---> | +------------------------+ | +--> output | -+------+ | | | Arithmetic/Logic Unit | | | +--------+ - | | +------------------------+ | | - | +-------+---^----------------+ | - | | | | - | +-------v---+----------------+ | - | | Memory Unit | | - | +----------------------------+ | - +--------------------------------+ -#+END_SRC - -made with http://asciiflow.com - -*** Von Neumann vs Church - -- programmer à partir de la machine (Von Neumann) - + tire vers l'optimisation - + mots de bits, caches, détails de bas niveau - + actions séquentielles - + *1 siècle d'expérience* - -. . . - -- programmer comme manipulation de symbole (Alonzo Church) - + tire vers l'abstraction - + plus proche des représentations mathématiques - + ordre d'évaluation non imposé - + *4000 ans d'expérience* - -*** Histoire - -- λ-Calculus, Alonzo Church & Rosser 1936 - - Foundation, explicit side effect no implicit state - -. . . - -- LISP (McCarthy 1960) - - Garbage collection, higher order functions, dynamic typing - -. . . - -- ML (1969-80) - - Static typing, Algebraic Datatypes, Pattern matching - -. . . - -- Miranda (1986) → Haskell (1992‥) - - Lazy evaluation, pure - -** Pourquoi Haskell? -*** Simplicité par l'abstraction - - *=/!\= SIMPLICITÉ ≠ FACILITÉ =/!\=* - -- mémoire (garbage collection) -- ordre d'évaluation (non strict / lazy) -- effets de bords (pur) -- manipulation de code (referential transparency) - -. . . - -Simplicité: Probablement le meilleur indicateur de réussite de projet. - -*** Production Ready™ - -- rapide - - équivalent à Java (~ x2 du C) - - parfois plus rapide que C - - bien plus rapide que python et ruby -. . . -- communauté solide - - 3k comptes sur Haskellers - - >30k sur reddit /(35k rust, 45k go, 50k nodejs, 4k ocaml, 13k clojure)/ - - libs >12k sur hackage -. . . -- entreprises - - Facebook (fighting spam, HAXL, ...) - - beaucoup de startups, finance en général -. . . -- milieu académique - - fondations mathématiques - - fortes influences des chercheurs - - tire le langage vers le haut - -*** Tooling - -- compilateur (GHC) -- gestion de projets ; cabal, stack, hpack, etc... -- IDE / hlint ; rapidité des erreurs en cours de frappe -- frameworks hors catégorie (servant, yesod) -- ecosystèmes très matures et inovant - - Elm (⇒ frontend) - - Purescript (⇒ frontend) - - GHCJS (⇒ frontend) - - Idris (types dépendants) - - Hackett (typed LISP avec macros) - - Eta (⇒ JVM) - -*** Qualité - -#+BEGIN_QUOTE -/Si ça compile alors il probable que ça marche/ -#+END_QUOTE -. . . -- tests unitaires : - chercher quelques erreurs manuellements -. . . -- /test génératifs/ : - chercher des erreurs sur beaucoups de cas générés aléatoirements - & aide pour trouver l'erreur sur l'objet le plus simple -. . . -- /finite state machine generative testing/ : - chercher des erreurs sur le déroulement des actions - entre différents agents indépendants -. . . -- *preuves*: - chercher des erreur sur *TOUTES* les entrées possibles - possible à l'aide du système de typage - -* Premiers Pas en Haskell -*** DON'T PANIC - -#+BEGIN_SRC -██████╗ ██████╗ ███╗ ██╗████████╗ ██████╗ █████╗ ███╗ ██╗██╗ ██████╗██╗ -██╔══██╗██╔═══██╗████╗ ██║╚══██╔══╝ ██╔══██╗██╔══██╗████╗ ██║██║██╔════╝██║ -██║ ██║██║ ██║██╔██╗ ██║ ██║ ██████╔╝███████║██╔██╗ ██║██║██║ ██║ -██║ ██║██║ ██║██║╚██╗██║ ██║ ██╔═══╝ ██╔══██║██║╚██╗██║██║██║ ╚═╝ -██████╔╝╚██████╔╝██║ ╚████║ ██║ ██║ ██║ ██║██║ ╚████║██║╚██████╗██╗ -╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═════╝╚═╝ -#+END_SRC - -- Haskell peut être difficile à vraiment maîtriser -- Trois languages en un: - - Fonctionnel - - Imperatif - - Types -- Polymorphisme: - - contexte souvent semi-implicite change le comportement du code. - -*** Fichier de script isolé - -Avec Stack: https://haskellstack.org - -#+BEGIN_SRC haskell -#!/usr/bin/env stack -{- stack script - --resolver lts-12.10 - --install-ghc - --package protolude --} -#+END_SRC - -Avec Nix: https://nixos.org/nix/ - -#+BEGIN_SRC shell -#! /usr/bin/env nix-shell -#! nix-shell -i runghc -#! nix-shell -p "ghc.withPackages (ps: [ ps.protolude ])" -#! nix-shell -I nixpkgs="https://github.com/NixOS/nixpkgs/archive/18.09-beta.tar.gz" -#+END_SRC - -*** Hello World! (1/3) - -#+BEGIN_SRC haskell --- hello.hs -main :: IO () -main = putStrLn "Hello World!" -#+END_SRC - -#+BEGIN_SRC -> chmod +x hello.hs -> ./hello.hs -Hello World! -#+END_SRC - -#+BEGIN_SRC -> stack ghc -- hello.hs -> ./hello -Hello World! -#+END_SRC - -*** Hello World! (2/3) - -#+BEGIN_SRC haskell -main :: IO () -main = putStrLn "Hello World!" -#+END_SRC - -- ~::~ de type ; -- le type de ~main~ est ~IO ()~. -- ~=~ égalité (la vrai, on peut interchanger ce qu'il y a des deux cotés) ; -- le type de ~putStrLn~ est ~String -> IO ()~ ; -- application de fonction =f x= pas =f(x)=, pas de parenthèse nécessaire ; - -*** Hello World! (3/3) - -#+BEGIN_SRC haskell -main :: IO () -main = putStrLn "Hello World!" -#+END_SRC - -- Le type ~IO a~ signifie: C'est une description d'une procédure qui quand elle - est évaluée peut faire des actions d'IO qui retournera une valeur de type ~a~ ; -- ~main~ est le nom du point d'entrée du programme ; -- Haskell runtime va chercher pour ~main~ et l'exécute. - -** What is your name? -*** What is your name? (1/2) - -#+BEGIN_SRC haskell -main :: IO () -main = do - putStrLn "Hello! What is your name?" - name <- getLine - let output = "Nice to meet you, " ++ name ++ "!" - putStrLn output -#+END_SRC - -. . . - -- l'indentation est importante ! -- ~do~ commence une syntaxe spéciale qui permet de séquencer des actions ~IO~ ; -- le type de ~getLine~ est ~IO String~ ; -- ~IO String~ signifie: Ceci est la description d'une procédure qui lorsqu'elle - est évaluée peut faire des actions IO et retourne une valeur de type ~String~. - -*** What is your name? (2/2) - -#+BEGIN_SRC haskell -main :: IO () -main = do - putStrLn "Hello! What is your name?" - name <- getLine - let output = "Nice to meet you, " ++ name ++ "!" - putStrLn output -#+END_SRC - -- le type de ~getLine~ est ~IO String~ -- le type de ~name~ est ~String~ -- ~<-~ est une syntaxe spéciale qui n'apparait que dans la notation ~do~ -- ~<-~ signifie: évalue la procédure et attache la valeur renvoyée dans le nom - à gauche de ~<-~ -- ~let = ~ signifie que ~name~ est interchangeable avec ~expr~ pour - le reste du bloc ~do~. -- dans un bloc ~do~, ~let~ n'a pas besoin d'être accompagné par ~in~ à la fin. - -** Erreurs classiques -*** Erreur classique #1 - -#+BEGIN_SRC haskell -main :: IO () -main = do - putStrLn "Hello! What is your name?" - let output = "Nice to meet you, " ++ getLine ++ "!" - putStrLn output -#+END_SRC - -#+BEGIN_SRC -/Users/yaesposi/.deft/pres-haskell/name.hs:6:40: warning: [-Wdeferred-type-errors] - • Couldn't match expected type ‘[Char]’ - with actual type ‘IO String’ - • In the first argument of ‘(++)’, namely ‘getLine’ - In the second argument of ‘(++)’, namely ‘getLine ++ "!"’ - In the expression: "Nice to meet you, " ++ getLine ++ "!" - | -6 | let output = "Nice to meet you, " ++ getLine ++ "!" - | ^^^^^^^ -Ok, one module loaded. -#+END_SRC - -*** Erreur classique #1 - -- ~String~ est ~[Char]~ -- Haskell n'arrive pas à faire matcher le type ~String~ avec ~IO String~. -- ~IO a~ et ~a~ sont différents - -*** Erreur classique #2 - -#+BEGIN_SRC haskell -main :: IO () -main = do - putStrLn "Hello! What is your name?" - name <- getLine - putStrLn "Nice to meet you, " ++ name ++ "!" -#+END_SRC - -#+BEGIN_SRC -/Users/yaesposi/.deft/pres-haskell/name.hs:7:3: warning: [-Wdeferred-type-errors] - • Couldn't match expected type ‘[Char]’ with actual type ‘IO ()’ - • In the first argument of ‘(++)’, namely - ‘putStrLn "Nice to meet you, "’ - In a stmt of a 'do' block: - putStrLn "Nice to meet you, " ++ name ++ "!" - In the expression: - do putStrLn "Hello! What is your name?" - name <- getLine - putStrLn "Nice to meet you, " ++ name ++ "!" - | -7 | putStrLn "Nice to meet you, " ++ name ++ "!" -#+END_SRC - -*** Erreur classique #2 (fix) - -- Des parenthèses sont nécessaires -- L'application de fonction se fait de gauche à droite - -#+BEGIN_SRC haskell -main :: IO () -main = do - putStrLn "Hello! What is your name?" - name <- getLine - putStrLn ("Nice to meet you, " ++ name ++ "!") -#+END_SRC - -* Concepts avec exemples -*** Concepts -- /style déclaratif & récursif/ -- /immutabilité/ -- /pureté/ (par défaut) -- /evaluation paraisseuse/ (par défaut) -- /ADT & typage polymorphique/ - -*** /Style déclaratif & récursif/ - -#+BEGIN_SRC python ->>> x=0 -... for i in range(1,11): -... tmp = i*i -... if tmp%2 == 0: -... x += tmp ->>> x -220 -#+END_SRC - -#+BEGIN_SRC haskell --- (.) composition (de droite à gauche) -Prelude> sum . filter even . map (^2) $ [1..10] -220 -Prelude> :set -XNoImplicitPrelude -Prelude> import Protolude --- (&) flipped fn application (de gauche à droite) -Protolude> [1..10] & map (^2) & filter even & sum -220 -#+END_SRC - -*** /Style déclaratif & récursif/ - -#+BEGIN_SRC python ->>> x=0 -... for i in range(1,11): -... j = i*3 -... tmp = j*j -... if tmp%2 == 0: -... x += tmp -#+END_SRC - -#+BEGIN_SRC haskell -Prelude> sum . filter even . map (^2) . map (*3) $ [1..10] -Protolude> [1..10] & map (*3) & map (^2) & filter even & sum -#+END_SRC - -*** /Style déclaratif & récursif/ - -- Contrairement aux languages impératifs la récursion n'est généralement pas chère. -- tail recursive function, mais aussi à l'aide de la lazyness - -*** /Imutabilité/ - -#+BEGIN_SRC haskell --- | explicit recursivity -incrementAllEvenNumbers :: [Int] -> [Int] -incrementAllEvenNumbers (x:xs) = y:incrementAllEvenNumbers xs - where y = if even x then x+1 else x - --- | better with use of higher order functions -incrementAllEvenNumbers' :: [Int] -> [Int] -incrementAllEvenNumbers' ls = map incrementIfEven ls - where - incrementIfEven :: Int -> Int - incrementIfEven x = if even x then x+1 else x -#+END_SRC - -*** /Pureté/: Function vs Procedure/Subroutines - -- Une /fonction/ n'a pas d'effet de bord -- Une /Procedure/ ou /subroutine/ but engendrer des effets de bords lors de son - évaluation - -*** /Pureté/: Function vs Procedure/Subroutines (exemple) - -#+BEGIN_SRC haskell -dist :: Double -> Double -> Double -dist x y = sqrt (x**2 + y**2) -#+END_SRC - - -#+BEGIN_SRC haskell -getName :: IO String -getName = readLine -#+END_SRC - -- *IO a* ⇒ *IMPUR* ; effets de bords hors evaluation : - - lire un fichier ; - - écrire sur le terminal ; - - changer la valeur d'une variable en RAM est impur. - -*** /Pureté/: Gain, paralellisation gratuite - -#+BEGIN_SRC haskell -import Foreign.Lib (f) --- f :: Int -> Int --- f = ??? - -foo = sum results - where results = map f [1..100] -#+END_SRC - -. . . - -*~pmap~ FTW!!!!! Assurance d'avoir le même résultat avec 32 cœurs* - -#+BEGIN_SRC haskell -import Foreign.Lib (f) --- f :: Int -> Int --- f = ??? - -foo = sum results - where results = pmap f [1..100] -#+END_SRC - -*** /Pureté/: Structures de données immuable - -Purely functional data structures, -/Chris Okasaki/ - -Thèse en 1996, et un livre. - -Opérations sur les listes, tableaux, arbres -de complexité amortie equivalent ou proche -(pire des cas facteur log(n)) -de celle des structures de données muables. - -*** /Évaluation parraisseuse/: Stratégies d'évaluations - -=(h (f a) (g b))= peut s'évaluer: - -- =a= → =(f a)= → =b= → =(g b)= → =(h (f a) (g b))= -- =b= → =a= → =(g b)= → =(f a)= → =(h (f a) (g b))= -- =a= et =b= en parallèle puis =(f a)= et =(g b)= en parallèle et finallement - =(h (f a) (g b))= -- =h= → =(f a)= seulement si nécessaire et puis =(g b)= seulement si nécessaire - -Par exemple: =(def h (λx.λy.(+ x x)))= il n'est pas nécessaire d'évaluer =y=, -dans notre cas =(g b)= - -*** /Évaluation parraisseuse/: Exemple - -#+BEGIN_SRC haskell -quickSort [] = [] -quickSort (x:xs) = quickSort (filter (=x) xs) - -minimum list = head (quickSort list) -#+END_SRC - -Un appel à ~minimum longList~ ne vas pas ordonner toute la liste. -Le travail s'arrêtera dès que le premier élément de la liste ordonnée sera trouvé. - -~take k (quickSort list)~ est en ~O(n + k log k)~ où ~n = length list~. -Alors qu'avec une évaluation stricte: ~O(n log n)~. - -*** /Évaluation parraisseuse/: Structures de données infinies (zip) - -#+BEGIN_SRC haskell -zip :: [a] -> [b] -> [(a,b)] -zip [] _ = [] -zip _ [] = [] -zip (x:xs) (y:ys) = (x,y):zip xs ys -#+END_SRC - -#+BEGIN_SRC haskell -zip [1..] ['a','b','c'] -#+END_SRC - -s'arrête et renvoie : - -#+BEGIN_SRC haskell -[(1,'a'), (2,'b'), (3, 'c')] -#+END_SRC - -*** /Évaluation parraisseuse/: Structures de données infinies (2) - -#+BEGIN_SRC haskell -Prelude> zipWith (+) [0,1,2,3] [10,100,1000] -[10,101,1002] -Prelude> take 3 [1,2,3,4,5,6,7,8,9] -[1,2,3] -#+END_SRC - -#+BEGIN_SRC haskell -Prelude> fib = 0:1:(zipWith (+) fib (tail fib)) -Prelude> take 10 fib -[0,1,1,2,3,5,8,13,21,34] -#+END_SRC - -*** /ADT & Typage polymorphique/ - -Algebraic Data Types. - -#+BEGIN_SRC haskell -data Void = Void Void -- 0 valeur possible! -data Unit = () -- 1 seule valeur possible - -data Product x y = P x y -data Sum x y = S1 x | S2 y -#+END_SRC - -Soit ~#x~ le nombre de valeurs possibles pour le type ~x~ -alors: - -- ~#(Product x y) = #x * #y~ -- ~#(Sum x y) = #x + #y~ - -*** /ADT & Typage polymorphique/: Inférence de type - -À partir de : - -#+BEGIN_SRC haskell -zip [] _ = [] -zip _ [] = [] -zip (x:xs) (y:ys) = (x,y):zip xs ys -#+END_SRC - -le compilateur peut déduire: - -#+BEGIN_SRC haskell -zip :: [a] -> [b] -> [(a,b)] -#+END_SRC - -** Composabilité -*** Composabilité vs Modularité - -Modularité: soit un ~a~ et un ~b~, je peux faire un ~c~. - ex: x un graphique, y une barre de menu => une page - ~let page = mkPage ( graphique, menu )~ - -Composabilité: soit deux ~a~ je peux faire un autre ~a~. - ex: x un widget, y un widget => un widget - ~let page = x <+> y~ - -Gain d'abstraction, moindre coût. - -*Hypothèses fortes sur les ~a~* - -*** Exemples - -- *Semi-groupes* 〈+〉 -- *Monoides* 〈0,+〉 - -- *Catégories* 〈obj(C),hom(C),∘〉 -- Foncteurs ~fmap~ (~(<$>)~) -- Foncteurs Applicatifs ~ap~ (~(<*>)~) -- Monades ~join~ -- Traversables ~map~ -- Foldables ~reduce~ - -* Catégories de bugs évités avec Haskell - -*** Real Productions Bugs™ - -Bug vu des dizaines de fois en prod malgré: - - 1. specifications fonctionnelles - 2. spécifications techniques - 3. tests unitaires - 4. 3 envs, dev, recette/staging/pre-prod, prod - 5. Équipe de QA qui teste en recette - -Solutions simples. - -*** **Null Pointer Exception**: Erreur classique (1) - -Au début du projet : - -#+BEGIN_SRC javascript -int foo( x ) { - return x + 1; -} -#+END_SRC - -*** **Null Pointer Exception**: Erreur classique (2) - -Après quelques semaines/mois/années : - -#+BEGIN_SRC javascript -import do_shit_1 from "foreign-module"; -int foo( x ) { - ... - var y = do_shit_1(x); - ... - return do_shit_20(y) -} -... -var val = foo(26/2334 - Math.sqrt(2)); -#+END_SRC - -. . . - -#+BEGIN_SRC -███████ █████ ███ ███ ███ ███ ███ ███ ███ ███ ███ -███ ██ ███ ███ ███ ███ ████ ████ ███ ███ ███ ███ ███ -███ ██ ███ ███ ███ ███ █████ █████ ███ ███ ███ ███ ███ -███████ ███ ███ ███ ███ ███ █████ ███ ███ ███ ███ ███ ███ -███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ -███ ███ ███ ███ ███ ███ ███ █ ███ █ █ █ █ █ -███ ███ ███ ███ ███ ███ ███ ███ -███████ █████ █████ ███ ███ ███ ███ ███ ███ ███ -#+END_SRC - -| *Null Pointer Exception* - -*** Null Pointer Exception: Data type ~Maybe~ - -#+BEGIN_SRC haskell -data Maybe a = Just a | Nothing -... -foo :: Maybe a -... -myFunc x = let t = foo x in - case t of - Just someValue -> doThingsWith someValue - Nothing -> doThingWhenNothingIsReturned -#+END_SRC - -Le compilateur oblige à tenir compte des cas particuliers! -Impossible d'oublier. - -*** Null Pointer Exception: Etat - -- Rendre impossibe de fabriquer un état qui devrait être impossible d'avoir. -- Pour aller plus loin voir, FRP, CQRS/ES, Elm-architecture, etc... - -*** Erreur due à une typo - -#+BEGIN_SRC haskell -data Foo x = LongNameWithPossibleError x -... -foo (LongNameWithPosibleError x) = ... -#+END_SRC - -*Erreur à la compilation*: -Le nom d'un champ n'est pas une string -(voir les objets JSON). - -*** Echange de parameters - -#+BEGIN_SRC haskell -data Personne = Personne { uid :: Int, age :: Int } -foo :: Int -> Int -> Personne -- ??? uid ou age? -#+END_SRC - -#+BEGIN_SRC haskell -newtype UID = UID Int deriving (Eq) -data Personne = Personne { uid :: UID, age :: Int } -foo :: UDI -> Int -> Personne -- Impossible de confondre -#+END_SRC - -*** Changement intempestif d'un Etat Global - -#+BEGIN_SRC haskell -foo :: GlobalState -> x -#+END_SRC - -*~foo~ ne peut pas changer =GlobalState=* - -* Organisation du Code -*** Grands Concepts - -Procedure vs Functions: - -| Gestion d'une configuration globale | -| Gestion d'un état global | -| Gestion des Erreurs | -| Gestion des IO | - -*** Monades - -Pour chacun de ces /problèmes/ il existe une monade: - -| Gestion d'une configuration globale | ~Reader~ | -| Gestion d'un état global | ~State~ | -| Gestion des Erreurs | ~Either~ | -| Gestion des IO | ~IO~ | - -*** Effets - -Gestion de plusieurs Effets dans la même fonction: - -- MTL -- Free Monad -- Freer Monad - -Idée: donner à certaines sous-fonction accès à une partie des effets seulement. - -Par exemple: -- limiter une fonction à la lecture de la DB mais pas l'écriture. -- limiter l'écriture à une seule table -- interdire l'écriture de logs -- interdire l'écriture sur le disque dur -- etc... - -*** Exemple dans un code réel (1) - -#+BEGIN_SRC haskell --- | ConsumerBot type, the main monad in which the bot code is written with. --- Provide config, state, logs and IO -type ConsumerBot m a = - ( MonadState ConsumerState m - , MonadReader ConsumerConf m - , MonadLog (WithSeverity Doc) m - , MonadBaseControl IO m - , MonadSleep m - , MonadPubSub m - , MonadIO m - ) => m a -#+END_SRC - -*** Exemple dans un code réel (2) - -#+BEGIN_SRC haskell -bot :: Manager - -> RotatingLog - -> Chan RedditComment - -> TVar RedbotConfs - -> Severity - -> IO () -bot manager rotLog pubsub redbots minSeverity = do - TC.setDefaultPersist TC.filePersist - let conf = ConsumerConf - { rhconf = RedditHttpConf { _connMgr = manager } - , commentStream = pubsub - } - void $ autobot - & flip runReaderT conf - & flip runStateT (initState redbots) - & flip runLoggingT (renderLog minSeverity rotLog) -#+END_SRC - - -** Règles *pragmatiques* - -*** Organisation en fonction de la complexité - -#+BEGIN_QUOTE -Make it work, make it right, make it fast -#+END_QUOTE - -- Simple: directement IO (YOLO!) -- Medium: Haskell Design Patterns: The Handle Pattern: - https://jaspervdj.be/posts/2018-03-08-handle-pattern.html -- Medium (bis): MTL / Free / Freeer / Effects... -- Gros: Three Layer Haskell Cake: - http://www.parsonsmatt.org/2018/03/22/three_layer_haskell_cake.html - + Layer 1: Imperatif - + Orienté Objet (Level 2 / 2') - + Fonctionnel - -*** 3 couches - -- *Imperatif*: - ReaderT IO - + Insérer l'état dans une ~TVar~, ~MVar~ ou ~IORef~ (concurrence) -- *Orienté Objet*: - + Handle / MTL / Free... - + donner des access ~UserDB~, ~AccessTime~, ~APIHTTP~... -- *Fonctionnel*: Business Logic ~f : Handlers -> Inputs -> Command~ - -*** Services / Lib - -Service: ~init~ / ~start~ / ~close~ + methodes... -Lib: methodes sans état interne. - -* Conclusion -*** Pourquoi Haskell? - -- avantage compétitif: qualité & productivité hors norme -- change son approche de la programmation -- les concepts appris sont utilisables dans tous les languages -- permet d'aller là où aucun autre langage ne peut vous amener -- Approfondissement sans fin: - - Théorie: théorie des catégories, théorie des types homotopiques, etc... - - Optim: compilateur - - Qualité: tests, preuves - - Organisation: capacité de contraindre de très haut vers très bas - -*** Avantage compétitif - -- France, Europe du sud & Functional Programming -- Coût Maintenance >> production d'un nouveau produit -- Coût de la refactorisation -- "Make it work, Make it right, Make it fast" moins cher. - -*** Pour la suite - -A chacun de choisir, livres, tutoriels, videos, chat, etc... - -- Voici une liste de resources : https://www.haskell.org/documentation -- Mon tuto rapide : [[http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/][Haskell the Hard Way]] -- Moteurs de recherche par type : [[http://hayoo.fh-wedel.de][hayoo]] & [[http://haskell.org/hoogle][hoogle]] -- Communauté & News : http://haskell.org/news & ~#haskell-fr~ sur freenode -- Libs: https://hackage.haskell.org & https://stackage.org - -* Appendix -*** STM: Exemple (Concurrence) (1/2) - -#+BEGIN_SRC java -class Account { - float balance; - synchronized void deposit(float amount){ - balance += amount; } - synchronized void withdraw(float amount){ - if (balance < amount) throw new OutOfMoneyError(); - balance -= amount; } - synchronized void transfert(Account other, float amount){ - other.withdraw(amount); - this.deposit(amount); } -} -#+END_SRC - -Situation d'interblocage typique. (A transfert vers B et B vers A). - -*** STM: Exemple (Concurrence) (2/2) - -#+BEGIN_SRC haskell -deposit :: TVar Int -> Int -> STM () -deposit acc n = do - bal <- readTVar acc - writeTVar acc (bal + n) -withdraw :: TVar Int -> Int -> STM () -withdraw acc n = do - bal <- readTVar acc - if bal < n then retry - writeTVar acc (bal - n) -transfer :: TVar Int -> TVar Int -> Int -> STM () -transfer from to n = do - withdraw from n - deposit to n -#+END_SRC - -- pas de lock explicite, composition naturelle dans ~transfer~. -- si une des deux opération échoue toute la transaction échoue -- le système de type force cette opération a être atomique: - ~atomically :: STM a -> IO a~ diff --git a/archives/Lambda-Riviera-000-Intro-FP/005_purete_par b/archives/Lambda-Riviera-000-Intro-FP/005_purete_par deleted file mode 100755 index 2952b597..00000000 Binary files a/archives/Lambda-Riviera-000-Intro-FP/005_purete_par and /dev/null differ diff --git a/archives/Lambda-Riviera-000-Intro-FP/Makefile b/archives/Lambda-Riviera-000-Intro-FP/Makefile deleted file mode 100644 index fc4b31d9..00000000 --- a/archives/Lambda-Riviera-000-Intro-FP/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -clean: *.hi *.o - rm -f *.hi *.o diff --git a/archives/Lambda-Riviera-000-Intro-FP/compile-purete.sh b/archives/Lambda-Riviera-000-Intro-FP/compile-purete.sh deleted file mode 100755 index 20ce593a..00000000 --- a/archives/Lambda-Riviera-000-Intro-FP/compile-purete.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -stack ghc --package parallel -- -threaded -O2 005_purete_par.hs diff --git a/elfeed.org b/elfeed.org index d757c4da..89c67651 100644 --- a/elfeed.org +++ b/elfeed.org @@ -1,11 +1,15 @@ * Imported Feeds :elfeed: ** self *** [[http://feeds.feedburner.com/yannespositocomen][yannesposito.com]] +*** [[https://her.esy.fun/posts/rss.xml][her.esy.fun posts]] +*** [[https://her.esy.fun/micro/rss.xml][her.esy.fun micro]] ** news :news: -*** [[https://hnrss.org/newest?points=500][HN]] +*** [[https://hnrss.org/newest?points=700][HN]] *** [[https://www.laarc.io/rss][laarc]] -*** [[https://lobste.rs/rss][lobsters]] :ignore: -** haskell :haskell:fp: +*** [[https://lobste.rs/rss][lobsters]] :ignore: +*** +*** [[https://nesslabs.com/feed][nesslabs]] :life: +** haskell :haskell:fp: *** [[http://feeds.feedburner.com/ezyang][Inside 206-105]] *** [[http://blog.jle.im/rss][in Code — Entries]] *** [[http://5outh.blogspot.com/feeds/posts/default][Abstract Nonsense]] diff --git a/famille.org b/famille.org new file mode 100644 index 00000000..e27ef674 --- /dev/null +++ b/famille.org @@ -0,0 +1,260 @@ +#+Title: Vers l'autonomie +#+Author: Yann Esposito +#+ARCHIVE: archives/famille.archive.org:: +#+TODO: TODO(t) VU(v) IN-PROGRESS(p) HOLD(h@/!) WAITING(w@/!) | DONE(d) CANCELED(c@/!) +#+COLUMNS: %TODO %3PRIORITY %40ITEM(Task) %17Effort(Estimated Effort){:} %CLOCKSUM %8TAGS(TAG) +* TODO Être autonome [0/6] +** TODO Quotidien [0/3] +*** TODO Rangement, propreté [0/3] +**** TODO Faire sa chambre le matin [0/6] +***** TODO Faire le lit +***** TODO mettre ses habits sales au sale +***** TODO ramasser les décher et les mettre à la poubelle +***** TODO ne pas laisser de vaisselle dans la chambre +***** TODO ne pas laisser de bouteille d'eau dans la chambre +***** TODO ne pas laisser de nourriture dans la chambre +**** TODO Repas [0/8] +***** TODO Participer à mettre la table [0/6] +****** TODO Assiettes +****** TODO Couverts +****** TODO Verres +****** TODO Plat principal +****** TODO Eau +****** TODO Condiments (sel, poivre, vinaigrette, etc...) +***** TODO Nettoyer après avoir manger [0/2] +****** TODO ranger sa table [0/3] +******* TODO son assiette / bols / etc... +******* TODO ses couverts +******* TODO son verre +****** TODO débarrasser la table [0/6] +******* TODO l'eau à re-remplir, remettre au frais pour le lendemain +******* TODO débarrasser le plat principal +- si il reste beaucoup remettre le plat au frigo (le laisser refroidir) +- si il en reste peu, ou qu'on n'en remangera pas, vider le reste du plat + principal dans un autre récipient plus petit et le mettre soi au frigo, + soit au congélateur pour le manger plus tard. Et nettoyer, à la main, le + grand récipient (plat à gratin, saladier, marmite, etc...) +******* TODO débarrasser le pain et le remettre à sa place +******* TODO débarrasser les condiments (sel, moutarde, etc...) +******* TODO essuyer la table +- vérifier qu'il ne reste plus rien +- essuyer sur les rebords de la table +- nettoyer les miettes par terre ou essuyer si c'est vraiment sale +- après avoir passer l'éponge, essuyer avec une serviette pour ne pas + laisser des traces d'humidité +******* TODO Mettre au recyclage vs poubelle +***** TODO Savoir mettre correctement la vaisselle dans le lave vaisselle +- les verres jamais dans le mauvais sens +- les bols et les assiettes creusent ne doivent pas être obstruées +- il vaut mieux nettoyer une gros élément à la main que lancer le lave + vaisselle inutilement 2x +***** TODO Savoir si on doit lancer le lave vaisselle +***** TODO Savoir lancer le lave vaisselle si nécessaire +***** TODO Savoir si on doit débarrasser le lave vaisselle +***** TODO Débarrasser le lave vaisselle +**** TODO Zones communes [0/5] +***** TODO Salon/cuisine [0/6] +****** TODO Si le sol est sale lancer le robot +****** TODO Savoir vider et nettoyer le robot +****** TODO Si la poubelle est pleine, jeter la poubelle, savoir la remplacer +****** TODO Si la poubelle coule et salit le sol, savoir nettoyer le sol +****** TODO Savoir nettoyer la poubelle si elle est sale +****** TODO Savoir passer l'aspirateur et la pièce +***** TODO Savoir s'il faut arroser les plantes et les arroser si nécessaire +***** TODO Salle de bain [0/7] +****** TODO Savoir ranger sa sale de bain +****** TODO Savoir plier et ranger sa serviette +****** TODO Nettoyer le sol après la douche +****** TODO Nettoyer le siphon de la douche si nécessaire +****** TODO Nettoyer le lavabo +****** TODO Savoir ranger les produit d'hygiène, jeter et prévoir +****** TODO Savoir utiliser les produits d'entretiens +***** TODO Toilettes [0/4] +****** TODO Jeter les rouleau usagés +****** TODO Nettoyer le sol sale des toilettes si besoin +****** TODO Vérifier et nettoyer les traces sous l'abattant +****** TODO Savoir acheter du papier toilette (ne pas attendre qu'il soit trop tard) +***** TODO Entrée [0/4] +****** TODO ranger ses chaussures dès l'entrée dans l'appartement +****** TODO pendre ses manteaux/gilets dans la penderie +****** TODO ranger ses bonnets / gants / accessoires dans la penderie +****** TODO ramasser et ranger ce qui traîne +*** TODO Hygiène [0/4] +**** TODO Se brosser les dents +**** TODO Se doucher +**** TODO Dîner si possible en famille +**** TODO Se laver les mains avant de manger et de mettre la table +*** TODO Travail scolaire / permis / obligations diverses [0/2] +**** TODO Se lever à l'heure pour [0/7] +***** TODO prendre le petit déjeuner +***** TODO nettoyer le petit déjeuner +***** TODO faire son lit +***** TODO ranger sa chambre +***** TODO mettre ses affaires sales au sale +***** TODO avoir ses affaires scolaires prêtes +***** TODO préparer sa gamelle/ses en cas +**** TODO Après les cours [0/4] +***** TODO réviser le code +***** TODO réviser le travail scolaire +***** TODO ranger ses livres et cahier +***** TODO ranger ses affaires de sport +** TODO Hebdomadaire [0/2] +*** TODO Linge [0/7] +**** TODO Changer ses draps +**** TODO mettre une machine +**** TODO Nettoyer ses habits +**** TODO Étendre le linge juste apres que la machine soit terminée +**** TODO Ramasser le linge +**** TODO Repasser ses habits +**** TODO Plier et ranger ses habits +** TODO Nourriture [0/2] +*** TODO Organiser ses repas à l'avance [0/1] +**** TODO connaître et prévoir ses 3 prochains repas [0/2] +***** TODO avoir le budget des repas +***** TODO avoir prévu le moment et le temps de préparation +*** TODO Préparer ses repas [0/2] +**** TODO choisir des repas équilibrés [0/6] +***** TODO préparer un repas équilibre légumes / feculents / fruits +***** TODO préparer des pâtes [0/4] +****** TODO faire des pâtes natures +****** TODO faire des pâtes à la sauce tomate +****** TODO faire des pâtes au thon +****** TODO faire des pâtes pesto +***** TODO préparer du riz +***** TODO cuire de la viande hachée +***** TODO des des œufs +***** TODO un dessert +**** TODO nettoyer la cuisine [0/5] +***** TODO remettre au frigo / congélateur aussi vite que possible pendant la cuisine +***** TODO ranger la nourriture, à sa place dans les placards +***** TODO mettre les petits ustensiles au lave-vaisselle +***** TODO nettoyer à la main la grosse vaisselle (casseroles, saladier, passoire, etc...), l'essuyer et la ranger +***** TODO nettoyer et essuyer le plan de travail +** TODO Vie en commun, politesse [0/5] +*** TODO Ne pas rentrer dans une chambre sans taper et attendre la réponse +*** TODO Respecter les horaires communs +- pas de bruit après 23h +- ne plus aller manger/boire/lancer le micro-ondes etc... après 23h, un + verre d'eau c'est une chose, manger un repas complet n'est pas acceptable +*** TODO Entraide [0/3] +**** TODO On offre son aide +**** TODO Si on a besoin, on le demande +**** TODO Ranger pour les autres sans attendre d'y être invité +Malgré les règles, il arrive que d'autre personnes ne rangent pas. +Parfois une personne est plus fatiguée, malade, fragile. +On peut ranger pour eux, ils nous rendront la pareille en cas de besoin. +*** TODO Chacun à droit à la parole, les opinions doivent être respectées +- pas d'attaque ad hominem ; +- pas de moquerie ; +- pas d'insulte ; +- on laisse terminer la parole et le raisonnement de chacun autour de la + table ; +- on n'accapare pas la parole pendant trop longtemps ; +*** TODO Respecter les normes de comportement +- pas de confrontation physique +- pas d'intimidation, pas de plaisanterie d'intimidation +- pas de geste sans un accord préalable, etc... +- on ne rie pas des faiblesses des autres +*** TODO Vie de famille +- on peut exprimer un désaccord et exprimer pourquoi, mais les consignes ne + sont pas ouvertes à discussion +- on demande la permission avant de prendre ce qui n'est pas à nous +- lorsqu'on à terminé, on range +** TODO Gestion des problèmes fréquents [0/3] +*** TODO Bricolage [0/5] +**** TODO Savoir changer une ampoule +**** TODO Savoir réparer une porte qui s'abîme +**** TODO Savoir déboucher un évier +**** TODO Savoir nettoyer le siphon de la douche +**** TODO Savoir nettoyer et déboucher des toilettes +*** TODO Santé [0/3] +**** TODO Connaître les médicaments pour [0/7] +***** TODO Mal de gorge +***** TODO Fièvre +***** TODO Rhume +***** TODO Vomissements +***** TODO Diarrhées +***** TODO Mal de tête +***** TODO Blessure légère +**** TODO Savoir faire une trousse de premier soins +**** TODO Savoir acheter des médicaments +*** TODO Linge [0/1] +**** TODO Savoir traiter des taches +** TODO Budget [0/3] +*** TODO Repartir le budget loisir / nourriture / habits / coûts de la vie [0/4] +**** TODO Savoir tous les matins combien il reste +**** TODO Savoir tous les matins savoir combien va partir avant la prochaine entrée d'argent +**** TODO Savoir combien et quand auront lieu les prochaines dépenses +**** TODO Conserver 10% des revenus de coté tous les mois +*** TODO Savoir choisir des produits pour les courses +*** TODO Savoir consommer/acheter dans le monde moderne +- Ne jamais acheter d'assurance sur les produits que les vendeurs proposent +- Toujours préférer un achat complet qu'un abonnement, c'est par les + services et abonnements que l'argent s'échappe le plus. +- Presque toujours préférer un bien à un service +** TODO Administratif [0/6] +*** TODO Savoir organiser des documents +*** TODO Ne pas oublier de rendez-vous +*** TODO Savoir où trouver ses documents +*** TODO Savoir écrire une lettre +*** TODO savoir comment envoyer une lettre en recommandé avec accusé de réception +*** TODO Savoir comment récupérer des documents [0/7] +**** TODO justificatif de domicile +**** TODO mettre a jour sa carte de sécurité sociale +**** TODO savoir récupérer un RIB (Relevé d'identité Bancaire) +**** TODO savoir comment mettre fin à un contrat +**** TODO comment réagir en cas d'accident +**** TODO savoir faire opposition sur sa carte bleue +* TODO Objectifs Sportifs [0/2] +** TODO Régime [0/4] +*** Recommandations +https://www.insep.fr/fr/actualites/dossier-nutrition-et-performance-sportive +**** Besoins +***** Énergie (hypothèse 65kg) +****** Calories +en plus des efforts: 30kcal/kg/j soit pour 65kg => 1950kcal +****** Glucides => 200 à 650g/j +Très dépendant des efforts de 3 a 10g/kg/j -> de 200 a 650g de glucides par jour +****** Protéines => entre 78 et 97g/j, prise muscu: aller jusqu'à 130g/j; ne JAMAIS DÉPASSER 160g/j +******* période normale => 78 à 91g/j, max si force 97g/j +1,2 à 1.4g/kg/j, si exercices de force, 1,3 à 1.5g/kg/j +******* prise de masse => max 130g/j, ne JAMAIS DÉPASSER 160g/j +Période prise masse musculaire: aller jusqu'à max 2g/kg/j, jamais dépasser +2.5g/kg/j. +******* Recommandations: +- Attention pas de prise de quantité pour prise masse plus de 6 mois dans l'année. +- pas plus de 1/3 via des suppléments. +****** Lipides => 65 à 78g/j +- lipides: minimum 25% de lipides, soit minimum (1 à 1.2g/kg/j) +***** Idée prix par semaine +- 1kg de blanc poulet ~= 11€, 1 semaine prise de masse = 910g max, soit ~= 10€. +- 1kg de cote de boeuf ~= 40€, soit pour 910g ~= 36€ +- 1kg de poisson ~= 40€, soit pour 910g ~= 36€ +**** Chaque repas midi et soir: +- au moins une part de légume par repas, midi et soir. Préférer les choux + (rouge, brocolis, chou vert, chou-fleur, chou de Bruxelle) +- un aliment protéique: viande, volaille, poisson, œuf +- féculents: pain, pain complet, riz, riz complet, pâtes, légumes sec + (lentilles, pois-chiche, haricot rouges, haricot blancs, etc...) +- au moins une cuillère a soupe d'huile de colza +**** Courant de la journée: +- 3 produits laitiers, privilégiant laitages (yaourts, fromage blanc) +- 2 fruits, de préférence frais. Privilégier les fruits rouges. +- rester bien hydraté +**** Généralités +- minimiser les apports de nourritures transformer, un steak vaut mieux + qu'un cordon bleu. +- essayer de suivre les recommandations au moins 80% du temps +*** TODO étape 1 +- budget 50€/semaine (>200€/mois, a comparer sur un SMIC). +- les parents font les courses +- apprentissage des recettes, prévoir les horaires (dégager quelques heures). +*** TODO étape 2 +- les parents font les courses +- Bastien cuisine +*** TODO étape 3 +- Bastien et les parents font les courses, aide vérification des achats +- Bastien cuisine +*** TODO étape 4 +- Bastien fait les courses (avec ou sans les parents) +- Bastien cuisine diff --git a/journal.org.gpg b/journal.org.gpg index c7eff81b..4153c7f7 100644 Binary files a/journal.org.gpg and b/journal.org.gpg differ diff --git a/notes.org.gpg b/notes.org.gpg index bc06cb5e..f2716498 100644 Binary files a/notes.org.gpg and b/notes.org.gpg differ diff --git a/org-mode-cheat-sheet.org b/org-mode-cheat-sheet.org index 00c0379b..afe3824d 100644 --- a/org-mode-cheat-sheet.org +++ b/org-mode-cheat-sheet.org @@ -2,7 +2,6 @@ #+TODO: TODO IN-PROGRESS WAIT | DONE CANCELED M = Command - * Style ** *bold* ** /italic/ @@ -30,14 +29,13 @@ M = Command * work with todos ** type =t= or =S-RIGHT= / =S-LEFT= to cycle from todo, done, nothing ** =, T= show todo tree -** TODO [#B] Full Task Example :tag1:tag2: -DEADLINE: <2019-03-10> +** DONE [#B] Full Task Example :tag1:tag2: +CLOSED: [2019-08-08 Thu 15:13] DEADLINE: <2019-03-10> :PROPERTIES: [] :Effort: 2h :Cost: $200 :END: - * Tables #+PLOT: title:"example" ind:1 type:2d with:lines diff --git a/refile.org b/refile.org index 60fd4da5..6c39ee17 100644 --- a/refile.org +++ b/refile.org @@ -2,4 +2,3 @@ * Tasks * Notes * Agenda -* TODO Create self private emacs package/spacemacs layer diff --git a/standup.org b/standup.org index 1e3072fb..6f5ec4a5 100644 --- a/standup.org +++ b/standup.org @@ -7,36 +7,22 @@ #+TAGS: doc meeting * Matthieu Sprunck -** DONE Review of Stealthwatch Enterprise Reference Module #2719 -** DONE Review of Upgraded lein-monolith + cleanup #2726 -** DONE Umbrella: timeframe settings for the most recent dns requests call #2717 -** DONE SMA Module developer documentation -** DONE SMA Web Integration -** REVIEW Fix the test of the response time in events that was failing randomly #2729 -* Guillaume Érétéo -** REVIEW improve textual search https://github.com/threatgrid/ctia/pull/820 -** DONE reviewed Matthieu's PR https://github.com/threatgrid/iroh/pull/2725 -** IN-PROGRESS investigating rollover API in ES to manage quickly growing indices like `event` https://www.elastic.co/guide/en/elasticsearch/reference/5.6/indices-rollover-index.html +** DONE Fix reverted PR #2853 (IROH-INT: module loading with Trapperkeeper) + CLOSED: [2019-08-27 Tue 08:40] +** IN-PROGRESS Bump ring-swagger-ui to v3 #2894 +** DONE Support for SWE * Yann Esposito -** HOLD IROH-INT API Improvements - - State "HOLD" from "IN-PROGRESS" [2019-06-07 Fri 17:02] \\ - Orbital scopes and user-management to make it all work - - State "IN-PROGRESS" from "HOLD" [2019-06-05 Wed 15:10] - - State "HOLD" from "IN-PROGRESS" [2019-05-14 Tue] \\ - worked on error format normalisation - https://github.com/threatgrid/iroh/issues/2096 - - separation of settings related code from enrichment code -** WAITING Tenzin config to change the JWT keys - - State "WAITING" from "IN-REVIEW" [2019-07-17 Wed 17:13] - - https://github.com/threatgrid/tenzin-config/pull/40 -** DONE Serve JWT public key/OAuth2 Metadata - - https://github.com/threatgrid/iroh/pull/2837 - - https://github.com/threatgrid/iroh/issues/2052 - - https://github.com/threatgrid/iroh/issues/2531 - - https://github.com/threatgrid/iroh/issues/2708 -** DONE Fixed Many Public Developer Doc typos/errors - - https://github.com/threatgrid/iroh/issues/2708 -** IN-PROGRESS Stack overflow in inspect -** DONE Parallelise tests - CLOSED: [2019-07-30 Tue 11:47] -** IN-PROGRESS Generate new clients for Cognitive, wrong copy/past on my part +** Monday +*** DONE refresh-jti in access/session tokens to be able to revoke them +*** DONE Voltron Bug org-id mismatch in PROD: https://jira-eng-rtp3.cisco.com/jira/browse/VOL-2051 +*** IN-REVIEW make scope an optional parameter for OAuth2 /authorize endpoint +https://github.com/threatgrid/iroh/pull/2912 +** Tuesday +*** DONE make scope an optional parameter for OAuth2 /authorize endpoint +https://github.com/threatgrid/iroh/pull/2912 +*** IN-PROGRESS Review Swagger UI 3 +https://github.com/threatgrid/iroh/pull/2911 +**** DONE CSS Enhancements +*** IN-PROGRESS Plan for using refresh-token also for CTR-UI +https://github.com/threatgrid/iroh/issues/2913 +