hwechtla-tl:
Nettipäiväkirja 14.09.2018
ClojuTre-muistiinpanot.
Ethereum & ClojureScript
- district0x: clojure-pohjaisia online-karttoja?
- tarkoitus rakentaa kartta, josta pystyy alueen perusteella etsimään
tarjoajat, jotka tarjoavat syntymäpäivänä ilmaisia juttuja
- tietokantana Ethereumin lohkoketju, webbiserverinä
clojurescript-pömpeli
- Webbiserveri on käytännössä Node.js:n GraphQL-serveri joka kutsuu
clojurescriptillä kirjoitettuja resolvereita.
- Ganache on paikallinen Ethereum-ketju; jos ajaa todellisessa
Ethereum-ketjussa, joutuu maksamaan suorituksesta
- Solidity: EVM:n edustakieli, "saa Javascriptin näyttämään kivalta"
- Olennaisesti yksi virheilmoitus: "Tapahtui poikkeus, perutaan"
- lein-solc: tuottaa ilmeisesti soliditya Clojuresta
- cljs-web3: district.server.smart-contracts/contract-call,
district.ui.smart-contracts.queries
- Metamask: pystyy allekirjoittamaan Ethereum-viestejä suoraan
selaimesta (Javascriptin välityksellä)
- lohkoketjuun menee freebien hash, IPFS (interplanetary file system)
sisältää loput tiedot: cljs-ipfs-api.files/fget
- Huomio: GraphQL on hyvin keskeisessä asemassa monissa näissä
- https://github.com/DomDM/ethereum-free-lunch
- "tähän liittyy suhteettomasti innokkuutta mutta myös kyynisyyttä"
Concurrency in ClojureScript revisited
- Pinarello Dogma F10: "tosi insinööröity pyörä"
- Kumpi pyörä on parempi: tosi insinööröity superpyörä, vai
superyksinkertainen custom-fiksi?
- github.com/pesterhazy/cljs-corpus : "joka cljs-projektia kohden joka
käyttää Promiseja, on 10 jotka käyttävät core.asyncia"
- Promiset ovat ihan hyviä
- Koodaustyyli: (-> task (.next #(println "Result: " %)) (.catch #(...)))
- Mutta voisi ehkä tehdä (then->> task (println "Result: "))
- Core.async "voittaa virtakäsittelyssä"
- mutta suurin osa selaimen toiminnasta ei ole sellaista
- ... vaikka FRP-kannattajat ehkä haluaisivat niin sanoa?
- Core.async lisää 2 sekuntia käännösaikaa
- Promesa: async/await cljs:lle
Documenting Clojure/Script ecosystem
- cljdoc: tavoitteena docs.rs, hexdocs (Elixir)
- https://github.com/cljdoc/cljdoc
- vaikeudet dokumentoinnissa: tarpeen tiedostus, työkalun löytäminen,
julkisen hostauspaikan löytäminen, päivityksen automatisointi
- se, että automaattisesti hakee dokumentaation Clojure-funktioista,
vaatii sandboxausta :)
- cljdoc: tuottaa dokumentaation halutusta kirjastosta lennossa
CircleCI:ssä
- eli: automatisoitu, hajautettu CI-putki dokumentaatiolle, ja saitti
johon artefaktit kerätään
- markdown on docstringien syntaksi, mutta sitä ei ole koskaan päätetty
- mahdollisuuksia: muutosten havaitseminen, APIt, spec-luonti, graphql,
tärkeiden kohtien korostaminen, koodin metriikat
- mitä kaikkien pitää tehdä: varmistaa, että dokumentaation voi tehdä;
lisätä badge githubiin; parantaa docstringejä, linkata artikkelit
(muut kuin Changelog ja README.md).
- onko mielivaltaisia hookeja?
- call graphit?
- esimerkkiarvot?
- specien automaattigenerointi?
Carp - a language for 21th century
- Lisp + vahva, automaattinen tyypitys, käännettävä kieli
- borrow-checked? -> Rust
- mutta: pitää tehdä eksplisiittinen kopio aina joskus
- eli: ei mitään osien jakamista tietorakenteiden välillä
- eli: niin lisp-mäinen kieli kuin mitä Rustin semantiikalla voi saada
- eli: ei oikeastaan ollenkaan Lisp
- eli: Lispin tietorakenteet ovat *kommunismia*
GraalVM with Clojure applications
- keskitytään clojuren kääntämiseen natiivikoodiksi
- ensin (:gen-class).
- Kätevä: -XX:TieredStopAtLevel=1
- native-image -jar
- heap / 10, startup / 1000!
- käyttökohteita: komentorivityökalut
- spec-provider.provider/infer-specs
- samples to schema, json2edn
- zprint: prettyprint
- tämä tekee oikeasti clojuresta käyttökelpoisen! Wohoo!
- käyttökohteita: webbisofta
- docker-container jossa voi buildata graalvm-juttuja
- FROM scratch (?)
- "Miten tää voi olla näin hyvä?"
- Vihdoinkin muuttujien ja nimiavaruuksien alustus saadaan oikeasti
käännösaikaan
- Ongelmia: paljon substrateVM:n ongelmia jotka _eivät_ haittaa
Clojurea
- Clojure on yllättävän vähän reflektiota
- Dynaaminen luokkien lataaminen: reload ei toimi enää replissä
- lein-native-image
- ajonaikainen suoritusteho on ~0.5*JVM
- käännösaika voi olla... minuutteja!
- jos graal-käännettyyn Clojureen käännetään Graal mukaan, niin sitten
(eval):n voi toteuttaa.
- (Mutta se voi olla hidas, jos kerran käännösaika on niin pitkä)
- Vain httpkit toimi tarjolla olevista webbiservereistä, Jetty ja XXX
eivät
Philosophy of functional programming
- se, mitä tapahtuu, kun näkee koodia, on se, että suorittaa koodia
päässään
- Miten ihmiset mallintavat funktionaalisia ohjelmia päässään?
Korvauksilla = uudelleenkirjoituksilla
- kokoelmien mallintaminen hedelmäjoukkojen prosessoinnilla
- mutta settien truthy-falsy-kikkailu ei ole kovin luontevaa ymmärtää
- popbook, kannattaa käydä katsomassa
kommentoi
(viimeksi muutettu 14.09.2018 17:33)