From e87fba1b7204ee611dcb5528b8a8a3716588c976 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Wed, 24 Jul 2019 20:25:55 -0400 Subject: Small improvements here and there. --- documentation/research/Internet of Things (IoT).md | 22 ++++ .../research/Optics (eg lenses & prisms).md | 22 ++++ documentation/research/Optimization.md | 24 ++++ .../research/Probabilistic data-structure.md | 31 +++++ documentation/research/Security.md | 54 ++++++++ .../Software Reliability Engineering (SRE).md | 4 + .../research/Type theory/Dependent types.md | 38 ++++++ .../research/back-end/WebAssembly (WASM).md | 30 +++++ documentation/research/cryptography.md | 56 ++++++++ documentation/research/distributed_programming.md | 1 + documentation/research/game_programming.md | 13 ++ documentation/research/machine_learning.md | 1 + documentation/research/math.md | 8 ++ documentation/research/web_framework.md | 1 + stdlib/source/lux/abstract/hash.lux | 13 +- stdlib/source/lux/control/parser/binary.lux | 45 +++---- stdlib/source/lux/data/format/binary.lux | 4 +- stdlib/source/lux/data/maybe.lux | 8 +- stdlib/source/lux/data/number/frac.lux | 8 +- stdlib/source/lux/data/text.lux | 18 +-- stdlib/source/lux/math/random.lux | 8 +- stdlib/source/lux/world/input/keyboard.lux | 145 ++++++++++++--------- stdlib/source/test/lux/data/number/frac.lux | 5 +- 23 files changed, 447 insertions(+), 112 deletions(-) create mode 100644 documentation/research/Internet of Things (IoT).md create mode 100644 documentation/research/Optics (eg lenses & prisms).md create mode 100644 documentation/research/Optimization.md create mode 100644 documentation/research/Probabilistic data-structure.md create mode 100644 documentation/research/Security.md create mode 100644 documentation/research/Software Reliability Engineering (SRE).md create mode 100644 documentation/research/Type theory/Dependent types.md create mode 100644 documentation/research/back-end/WebAssembly (WASM).md create mode 100644 documentation/research/cryptography.md diff --git a/documentation/research/Internet of Things (IoT).md b/documentation/research/Internet of Things (IoT).md new file mode 100644 index 000000000..9d147ee43 --- /dev/null +++ b/documentation/research/Internet of Things (IoT).md @@ -0,0 +1,22 @@ +# Device + +1. https://www.pine64.org/ +1. http://beagleboard.org/ + +# Language + +1. [A Programming Language for the Internet of Things](https://www.duo.uio.no/bitstream/handle/10852/56894/Thesis.pdf) +1. http://www.eclipse.org/mita/ + +# Protocol + +1. http://coap.technology/ +1. https://medium.com/@patburns/a-new-way-to-think-about-the-p2p-iot-5fde27e96833 +1. https://plc4x.apache.org/ +1. [OpenThread](https://openthread.io/) +1. [Thread](https://www.threadgroup.org/) + +# Security + +1. https://www.theregister.co.uk/2019/03/13/congress_iot_security/ + diff --git a/documentation/research/Optics (eg lenses & prisms).md b/documentation/research/Optics (eg lenses & prisms).md new file mode 100644 index 000000000..62667bbfc --- /dev/null +++ b/documentation/research/Optics (eg lenses & prisms).md @@ -0,0 +1,22 @@ +# Reference + +1. https://medium.com/urbint-engineering/haskell-lens-operator-onboarding-a235481e8fac +1. https://fstarlang.github.io/general/2018/01/12/lens-indexed-lenses.html +1. [Jeremy Gibbons - Profunctor Optics Modular Data Accessors](https://www.youtube.com/watch?v=sfWzUMViP0M &&& http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/poptics.pdf) +1. http://hackage.haskell.org/package/profunctors-3.3.0.1/docs/Data-Profunctor.html +1. https://github.com/purescript-contrib/purescript-profunctor-lenses +1. https://hackage.haskell.org/package/lens-4.16/docs/Control-Lens-Indexed.html +1. http://oleg.fi/gists/posts/2017-04-18-glassery.html +1. http://oleg.fi/gists/posts/2017-12-23-functor-optics.html +1. [Edward Kmett - Monad Transformer Lenses](https://www.youtube.com/watch?v=Bxcz23GOJqc) +1. [Brian McKenna - Productionisation of Functional Optics](https://www.youtube.com/watch?v=H01dw-BMmlE) +1. [YOW! Lambda Jam 2017 Ken Scambler - Lenses for the Masses – Introducing Goggles](https://www.youtube.com/watch?v=oIhdOqaKSEg) +1. https://bartoszmilewski.com/2017/07/07/profunctor-optics-the-categorical-view/ +1. [Profunctor Optics: The Categorical Approach - Bartosz Milewski](https://www.youtube.com/watch?v=l1FCXUi6Vlw) +1. https://calmm-js.github.io/partial.lenses/ +1. http://evincarofautumn.blogspot.com/2016/01/thoughts-on-using-fractional-types-to.html +1. https://www.slideshare.net/davidoverton/comonad +1. http://codingismycraft.com/index.php/2017/10/04/adding-descriptors-to-your-python-arsenal/ +1. https://blog.jle.im/entry/lenses-products-prisms-sums.html +1. http://www.philipzucker.com/lens-as-a-divisibility-relation-goofin-off-with-the-algebra-of-types/ + diff --git a/documentation/research/Optimization.md b/documentation/research/Optimization.md new file mode 100644 index 000000000..f46215cdd --- /dev/null +++ b/documentation/research/Optimization.md @@ -0,0 +1,24 @@ +# Reference + +1. https://docs.google.com/presentation/d/1tpeJZFObkeick4CF-mx0L3CeCgvT15B96aJeRpxEPcE/preview?slide=id.p +1. https://www.quora.com/What-is-the-future-of-optimizing-compilers?share=1 +1. https://advancedweb.hu/2016/05/27/jvm_jit_optimization_techniques/ &&& https://advancedweb.hu/2016/06/28/jvm_jit_optimization_techniques_part_2/ +1. http://www.scala-native.org/en/latest/blog/interflow.html +1. https://github.com/roman01la/closure-compiler-handbook +1. http://hubicka.blogspot.com/2018/06/gcc-8-link-time-and-interprocedural.html +1. [CppCon 2017: Matt Godbolt “What Has My Compiler Done for Me Lately? Unbolting the Compiler's Lid”](https://www.youtube.com/watch?v=bSkpMdDe4g4) +1. http://duriansoftware.com/joe/Optimizing-is-multiple-checks-with-modular-arithmetic.html? +1. https://www.ericsson.com/research-blog/outperforming-state-art-compilers-unison/ +1. http://compileroptimizations.com/index.html +1. https://polly.llvm.org/ +1. http://paulcavallaro.com/blog/optimizing-function-placement-with-call-chain-clustering/ +1. http://leto.net/docs/C-optimization.php +1. https://engineering.purdue.edu/~eigenman/ECE663/Handouts/bacon-compiling4hpc.pdf +1. http://venge.net/graydon/talks/CompilerTalk-2019.pdf +1. http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/6620/pdf/imm6620.pdf +1. [Lost in translation: Exposing hidden compiler optimization opportunities](https://arxiv.org/pdf/1903.11397.pdf) +1. https://kristerw.blogspot.com/2019/04/how-llvm-optimizes-geometric-sums.html +1. https://nfrechette.github.io/2019/05/08/sign_flip_optimization/ +1. https://grin-tech.github.io/ +1. [Loop Optimizations in LLVM - Michael Kruse](https://www.youtube.com/watch?v=oAPgGYr8T3Y) + diff --git a/documentation/research/Probabilistic data-structure.md b/documentation/research/Probabilistic data-structure.md new file mode 100644 index 000000000..2b4609c0e --- /dev/null +++ b/documentation/research/Probabilistic data-structure.md @@ -0,0 +1,31 @@ +# Hash function + +1. http://fastcompression.blogspot.com/2019/03/presenting-xxh3.html +1. http://cyan4973.github.io/xxHash/ + +# Reference + +1. [Morton Filters: Faster, Space-Efficient Cuckoo Filters via Biasing, Compression, and Decoupled Logical Sparsity](http://www.vldb.org/pvldb/vol11/p1041-breslow.pdf) +1. https://github.com/efficient/SuRF +1. https://medium.com/orbs-network/constructing-bloom-filters-without-false-positives-7aaf50b92f3b +1. https://welcometotheoryland.wordpress.com/2017/10/19/what-is-a-hash-function-it-depends-on-whos-speaking/ +1. http://docs.pipelinedb.com/probabilistic.html +1. [Probabilistic Data Structures](https://www.youtube.com/watch?v=F7EhDBfsTA8) +1. http://www.i-programmer.info/programming/theory/4641-the-invertible-bloom-filter.html +1. https://github.com/seiflotfy/hyperbitbit +1. https://blog.yld.io/2017/04/19/hyperloglog-a-probabilistic-data-structure/#.WPtT_R_6zCI +1. http://www.partow.net/programming/bloomfilter/idx.html +1. https://github.com/pawandubey/cuckoo_filter +1. https://cloud.google.com/blog/big-data/2017/07/counting-uniques-faster-in-bigquery-with-hyperloglog +1. https://blog.dataweave.com/using-probabilistic-data-structures-to-build-real-time-monitoring-dashboards-25b17c968c08 +1. https://bdupras.github.io/filter-tutorial/ +1. https://sagi.io/2017/07/bloom-filters-for-the-perplexed/ +1. https://www.somethingsimilar.com/2012/05/21/the-opposite-of-a-bloom-filter/ +1. https://github.com/splatlab/cqf +1. [LogLog-Beta and More: A New Algorithm for Cardinality Estimation Based on LogLog Counting](https://arxiv.org/ftp/arxiv/papers/1612/1612.02284.pdf) +1. https://blog.acolyer.org/2017/08/08/a-general-purpose-counting-filter-making-every-bit-count/ +1. [Ode on a Random Urn (Functional Pearl)](https://www.youtube.com/watch?v=O37FMxLxm78) +1. http://smalldatum.blogspot.com/2018/09/bloom-filter-and-cuckoo-filter.html +1. https://hackernoon.com/cuckoo-filter-vs-bloom-filter-from-a-gophers-perspective-94d5e6c53299 +1. https://github.com/axiomhq/hyperminhash + diff --git a/documentation/research/Security.md b/documentation/research/Security.md new file mode 100644 index 000000000..0609f92c0 --- /dev/null +++ b/documentation/research/Security.md @@ -0,0 +1,54 @@ +# Programming language + +1. [Secure Compilation](https://blog.sigplan.org/2019/07/01/secure-compilation/) + +# Cautionary tale + +1. [Thou Shalt Not Depend on Me: A look at JavaScript libraries in the wild](https://queue.acm.org/detail.cfm?id=3205288) +1. https://medium.com/@nodepractices/were-under-attack-23-node-js-security-best-practices-e33c146cb87d + +# Surface area + +1. [Towards Automated Application-Specific Software Stacks](https://arxiv.org/pdf/1907.01933.pdf) + +# Vulnerability + +1. https://medium.com/@shnatsel/how-rusts-standard-library-was-vulnerable-for-years-and-nobody-noticed-aebf0503c3d6 +1. [ACLs don’t](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.406.4684&rep=rep1&type=pdf) +1. https://www.cs.auckland.ac.nz/~pgut001/pubs/book.pdf +1. https://pwnedkeys.com/ +1. [What Spectre Means for Lanugage Implementers - Ben Titzer - PLISS 2019](https://www.youtube.com/watch?v=FGX-KD5Nh2g) +1. https://rambleed.com/ +1. https://browserleaks.com/ + +# Reference + +1. [Secure Socket API](https://securesocketapi.org/) +1. [Mind your Language(s): A discussion about languages and security](https://www.ssi.gouv.fr/uploads/IMG/pdf/Mind_Your_Languages_-_version_longue.pdf) +1. https://www.microsoft.com/en-us/research/blog/scaling-the-everest-of-software-security-with-dr-jonathan-protzenko/ +1. https://www.owasp.org/index.php/Main_Page +1. https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project +1. https://wiki.sei.cmu.edu/confluence/display/seccode/Top+10+Secure+Coding+Practices +1. https://www.archive.ece.cmu.edu/~grey/ +1. http://www.cs.umd.edu/projects/PL/selinks/ +1. http://www.cis.upenn.edu/~stevez/sol/related.html +1. https://www.bsimm.com/ +1. https://www.microsoft.com/en-us/securityengineering/sdl/ +1. https://www.engineeringtrustworthysystems.com/ +1. http://www.ats-lang.org/ +1. http://www.cis.upenn.edu/~stevez/papers/publications.html +1. http://collingreene.com/6_buckets_of_prodsec.html +1. [On Post-Compromise Security](https://eprint.iacr.org/2016/221.pdf) +1. https://messaginglayersecurity.rocks/ +1. https://github.blog/2019-05-23-introducing-new-ways-to-keep-your-code-secure/ +1. [RustBelt](https://plv.mpi-sws.org/rustbelt/popl18/) +1. https://github.com/dckc/awesome-ocap +1. https://projects.csail.mit.edu/jeeves/ +1. https://www.sans.org/top25-software-errors/ +1. https://www.owasp.org/index.php/Top_10_2013-Top_10 +1. https://nvd.nist.gov/cwe.cfm +1. https://en.wikipedia.org/wiki/Software_Development_Security +1. http://gigi.nullneuron.net/gigilabs/the-sorry-state-of-the-web-in-2016/ +1. http://www.ranum.com/security/computer_security/editorials/dumb/index.html +1. [Information Technology — Programming languages — Guidance to avoiding vulnerabilities in programming languages](http://www.open-std.org/jtc1/sc22/wg23/docs/ISO-IECJTC1-SC22-WG23_N0751-tr24772-1-after-pre-meeting-51-webex-20171016.pdf) + diff --git a/documentation/research/Software Reliability Engineering (SRE).md b/documentation/research/Software Reliability Engineering (SRE).md new file mode 100644 index 000000000..bd6a8443b --- /dev/null +++ b/documentation/research/Software Reliability Engineering (SRE).md @@ -0,0 +1,4 @@ +# Reference + +1. [A Case Study in Community-Driven Software Adoption](http://landing.google.com/sre/resources/practicesandprocesses/case-study-community-driven-software-adoption/) + diff --git a/documentation/research/Type theory/Dependent types.md b/documentation/research/Type theory/Dependent types.md new file mode 100644 index 000000000..f8849fcd1 --- /dev/null +++ b/documentation/research/Type theory/Dependent types.md @@ -0,0 +1,38 @@ +# Exemplar + +1. https://cedille.github.io/ + +# Reference + +1. [F# Linear algebra with type-level dimensions and static checks](https://notebooks.azure.com/allisterb/projects/sylvester/html/Sylvester.Tensors.ipynb) +1. [From Scheme to Dependent Types in 100 lines by Gershom Bazerman](https://vimeo.com/134561872 &&& https://vimeo.com/135746080) +1. [A Tutorial Implementation of a Dependently Typed Lambda Calculus](https://www.andres-loeh.de/LambdaPi/) +1. [The calculus of constructions](http://www.sciencedirect.com/science/article/pii/0890540188900053#) +1. https://www.idris-lang.org/ +1. https://www.amazon.com/Type-driven-Development-Idris-Edwin-Brady/dp/1617293024/ +1. http://blog.codersbase.com/posts/2013-12-03-learning-dependent-types.html +1. http://oxij.org/note/BrutalDepTypes/ +1. https://hydraz.club/posts/2017-09-08.html +1. [Hoare Type Theory, Polymorphism and Separation](http://ynot.cs.harvard.edu/papers/jfpsep07.pdf) +1. ["Dependent Types in Haskell" by Stephanie Weirich](https://www.youtube.com/watch?v=wNa3MMbhwS4) +1. [A Little Bit of Dependent Types](https://youtu.be/WI8uA4KjQJk?t=5169) +1. [Type Checking Without Types](https://matthias.benkard.de/typecore/typecore.pdf) +1. [Cubical Type Theory: a constructive interpretation of the univalence axiom](http://www.cse.chalmers.se/~coquand/cubicaltt.pdf) +1. https://github.com/mortberg/cubicaltt +1. https://leanprover.github.io/introduction_to_lean/ +1. [Infinity](https://github.com/groupoid/infinity) +1. https://github.com/groupoid +1. http://groupoid.space/ +1. https://existentialtype.wordpress.com/2016/07/31/cubical-higher-type-theory-as-a-programming-language/ +1. https://github.com/silt-lang/silt +1. [Parametric Quantifiers for Dependent Type Theory](https://people.cs.kuleuven.be/~andreas.nuyts/ParametricQuantifiers.pdf &&& https://www.youtube.com/watch?v=lJB5MhYJ4Js) +1. [A Specification for Dependently-Typed Haskell:](http://www.seas.upenn.edu/~sweirich/papers/systemd-submission.pdf) +1. [A Specification for Dependent Types in Haskell](http://www.seas.upenn.edu/~sweirich/papers/systemd-submission.pdf &&& https://cs.brynmawr.edu/~rae/papers/2017/dep-haskell-spec/dep-haskell-spec.pdf &&& https://www.youtube.com/watch?v=0157rUxC4_8) +1. [Normalization by Evaluation for Sized Dependent Types](http://publications.lib.chalmers.se/records/fulltext/252072/local_252072.pdf &&& https://www.youtube.com/watch?v=uSP91COE_ZA) +1. https://bluishcoder.co.nz/2018/01/03/writing-basic-proofs-in-ats.html +1. [AN INTRODUCTION TO UNIVALENT FOUNDATIONS FOR MATHEMATICIANS](http://www.ams.org/journals/bull/2018-55-04/S0273-0979-2018-01616-9/S0273-0979-2018-01616-9.pdf) +1. https://medium.com/@maiavictor/about-induction-on-the-calculus-of-constructions-581fcfdb89c5 +1. [05 A Dependent Haskell Triptych](https://www.youtube.com/watch?v=soKl1IslU-I) +1. https://cs.ru.nl/~wouters/Publications/ThePowerOfPi.pdf +1. [Algebraic Presentations of Dependent Type Theories](https://arxiv.org/abs/1602.08504v3) + diff --git a/documentation/research/back-end/WebAssembly (WASM).md b/documentation/research/back-end/WebAssembly (WASM).md new file mode 100644 index 000000000..6d9368fbe --- /dev/null +++ b/documentation/research/back-end/WebAssembly (WASM).md @@ -0,0 +1,30 @@ +# Exemplar + +1. https://github.com/vvanders/wasm_lua +1. https://github.com/AppCypher/webassemblylanguages +1. https://medium.com/perlin-network/life-a-secure-blazing-fast-cross-platform-webassembly-vm-in-go-ea3b31fa6e09 + +# Reference + +1. [Faster Fractals with Multi-Threaded WebAssembly](https://blog.scottlogic.com/2019/07/15/multithreaded-webassembly.html) +1. https://blog.scottlogic.com/2018/07/20/wasm-future.html +1. http://fitzgeraldnick.com/2018/04/26/how-does-dynamic-dispatch-work-in-wasm.html +1. https://hacks.mozilla.org/2018/03/making-webassembly-better-for-rust-for-all-languages/ +1. https://webassembly.github.io/ +1. https://github.com/WebAssembly/spec/blob/md-proto/md-proto/WebAssembly.md +1. https://github.com/WebAssembly/binaryen +1. [NYLUG Presents: Luke Wagner -on- WebAssembly: A New Compiler Target For The Web](https://www.youtube.com/watch?v=RByPdCN1RQ4) +1. https://binji.github.io/2017/03/05/webassembly-type-checking.html +1. https://github.com/WebAssembly/spec/tree/master/interpreter +1. https://mbebenita.github.io//WasmExplorer/ +1. http://thecodebarbarian.com/getting-started-with-webassembly-in-node.js.html +1. http://blog.seraum.com/compiling-javascript-to-webassembly-wasm-or-asm-js-with-nectarjs +1. https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/ +1. [Using WebAssembly and Threads (Chrome Dev Summit 2018)](https://www.youtube.com/watch?v=zgOGZgAPUjQ) +1. https://github.com/wasmerio/wasmer +1. https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime +1. https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/ +1. https://cybernetist.com/2019/04/25/wasm-universal-application-runtime/ +1. https://github.com/intel/wasm-micro-runtime +1. https://medium.com/wasmer/running-webassembly-on-the-kernel-8e04761f1d8e + diff --git a/documentation/research/cryptography.md b/documentation/research/cryptography.md new file mode 100644 index 000000000..8176bbcf7 --- /dev/null +++ b/documentation/research/cryptography.md @@ -0,0 +1,56 @@ +# Constant-time programming + +1. [FaCT: A Flexible, Constant-Time Programming Language](https://cseweb.ucsd.edu/~dstefan/pubs/cauligi:2017:fact.pdf) +1. [FaCT: A DSL for Timing-Sensitive Computation](https://ranjitjhala.github.io/static/fact_dsl.pdf) +1. ["FaCT: A New Language for Constant-Time Programming" by Sunjay Cauligi](https://www.youtube.com/watch?v=kbn9UCRK2Qg) + +# Zero-knowledge proof + +1. [Zero-Knowledge Proofs: What are they, how do they work, and are they fast yet?](https://zkp.science/) + +# Hash + +1. [On future-proof cryptographic hashes](https://pascalprecht.github.io/posts/future-proofed-hashes-with-multihash/) + +# Library + +1. [zinc: Introduce minimal cryptography library](https://git.kernel.org/pub/scm/linux/kernel/git/zx2c4/linux.git/commit/?h=zinc) +1. https://joshlf.com/post/2018/11/06/introducing-mundane/ +1. https://github.com/akhawaja/ecc-crypto-helper +1. [Introducing CIRCL: An Advanced Cryptographic Library](https://blog.cloudflare.com/introducing-circl/) + +# Criticism + +1. [Fuck RSA](https://blog.trailofbits.com/2019/07/08/fuck-rsa/) + +# Reference + +1. [Sunjay Cauligi - Constant-time crypto programming with FaCT](https://www.youtube.com/watch?v=SSEHF_u79e4) +1. https://blog.acolyer.org/2018/07/06/oblix-an-efficient-oblivious-search-index/ +1. https://cryptography.pizza/ +1. [HACL∗: A Verified Modern Cryptographic Library](https://eprint.iacr.org/2017/536.pdf) +1. [How to Use Java Cryptography API Securely](https://www.youtube.com/watch?v=3HIdaSgxMlo) +1. [A Graduate Course in Applied Cryptography](http://toc.cryptotextbook.net/home) +1. https://github.com/InstantWebP2P/tweetnacl-java +1. https://github.com/kevinburke/nacl +1. https://github.com/miracl/MIRACL +1. https://github.com/open-quantum-safe/liboqs +1. https://www.bearssl.org/bigint.html +1. https://timtaubert.de/blog/2018/08/bitslicing-an-introduction/ +1. [CT-Wasm: Type-Driven Secure Cryptography for the Web Ecosystem](https://arxiv.org/abs/1808.01348) +1. https://arstechnica.com/information-technology/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/ +1. https://medium.com/@dbkats/a-gentle-introduction-to-attribute-based-encryption-edca31744ac6 +1. https://cryptoswift.io/ + +# Language + +1. https://cryptol.net/ +1. [Formally Verified Cryptographic Web Applicationsin WebAssembly](https://eprint.iacr.org/2019/542.pdf) + +# Randomness extractor + +1. [An introduction to randomness extractors](https://cs.haifa.ac.il/~ronen/online_papers/ICALPinvited.pdf) + +# Homomorphic Encryption + +1. [Practical Homomorphic Encryption Over the Integers](https://arxiv.org/abs/1702.07588) diff --git a/documentation/research/distributed_programming.md b/documentation/research/distributed_programming.md index ae96c46e3..018357958 100644 --- a/documentation/research/distributed_programming.md +++ b/documentation/research/distributed_programming.md @@ -66,6 +66,7 @@ # Logical clock +1. [Distributed Systems: Physical, Logical, and Vector Clocks](https://levelup.gitconnected.com/distributed-systems-physical-logical-and-vector-clocks-7ca989f5f780) 1. [The Bloom Clock](https://arxiv.org/pdf/1905.13064.pdf) 1. [Why Logical Clocks are Easy: Sometimes all you need is the right language.](https://queue.acm.org/detail.cfm?id=2917756) diff --git a/documentation/research/game_programming.md b/documentation/research/game_programming.md index de74e10f2..3ff01be0a 100644 --- a/documentation/research/game_programming.md +++ b/documentation/research/game_programming.md @@ -1,3 +1,14 @@ +# Ethics + +1. [Ethics in Game Design - PAX Prime 2012](https://www.youtube.com/watch?v=sIS5cJzeLGA) + +# Grinding + +1. [When Games Idolize Busywork](https://medium.com/@fischerdesign/when-games-idolize-busywork-8454bfe769ff) +1. [PAX West 2016 - The Grind - Full Panel](https://www.youtube.com/watch?v=32DCEzpcVEY) +1. [A Brief History of Leveling Systems](https://theludite.com/2014/08/03/a-brief-history-of-leveling-systems/) +1. [Leveling Systems Part Two: Where We Could Go From Here](https://theludite.com/2014/08/28/leveling-systems-part-two-where-we-could-go-from-here/) + # Engine 1. https://www.raylib.com/index.html @@ -48,6 +59,8 @@ # Rendering +1. [Lazy Incremental Computation for Efficient Scene Graph Rendering](https://www.cg.tuwien.ac.at/courses/RendEng/2015/RendEng-2015-11-16-paper2.pdf) +1. [3D Wireframes in SVG](https://prideout.net/blog/svg_wireframes/) 1. https://zzz.dog/ 1. https://www.marmoset.co/posts/basic-theory-of-physically-based-rendering/ 1. https://roughjs.com/ diff --git a/documentation/research/machine_learning.md b/documentation/research/machine_learning.md index 018c259c2..04df5bbc1 100644 --- a/documentation/research/machine_learning.md +++ b/documentation/research/machine_learning.md @@ -6,6 +6,7 @@ # Reference +1. [Layer rotation: a surprisingly powerful indicator of generalization in deep networks](https://arxiv.org/abs/1806.01603v2) 1. https://nostalgebraist.tumblr.com/post/185326092369/the-transformer-explained 1. [HyperE: Hyperbolic Embeddings for Entities](https://hazyresearch.github.io/hyperE/) 1. https://www.samcoope.com/posts/playing_around_with_noise_as_targets diff --git a/documentation/research/math.md b/documentation/research/math.md index 89f1cdd39..5c8db787c 100644 --- a/documentation/research/math.md +++ b/documentation/research/math.md @@ -1,3 +1,7 @@ +# Trigonometry + +1. [Approximating the Sine Function](http://datagenetics.com/blog/july12019/index.html) + # Period 1. https://en.wikipedia.org/wiki/Ring_of_periods @@ -39,6 +43,7 @@ # Quaternions +1. [Stepping into a New Dimension: Using Quaternions to See the Invisible](https://medium.com/@vieyrasoftware/stepping-into-a-new-dimension-using-quaternions-to-see-the-invisible-478087c9ebbf) 1. [How Quaternions Produce 3D Rotation](https://penguinmaths.blogspot.com/2019/06/how-quaternions-produce-3d-rotation.html) 1. [APPLICATION OF DUAL QUATERNIONS ON SELECTED PROBLEMS](https://otik.uk.zcu.cz/bitstream/11025/28563/1/phd_Application%20of%20dual%20quaternions%20on%20selected%20problems.pdf) 1. https://www.3dgep.com/understanding-quaternions/ @@ -108,6 +113,7 @@ # Category Theory +1. [Categorical Query Language](https://www.categoricaldata.net/) 1. [Abstract and Concrete Categories: The Joy of Cats](http://katmat.math.uni-bremen.de/acc/acc.pdf) 1. https://bartoszmilewski.com/ 1. [YOW! Lambda Jam 2018 - Mark Hopkins -All of Basic Category Theory](https://www.youtube.com/watch?v=9u1q3lH7VbE) @@ -279,6 +285,8 @@ # **Temp Cache** +1. [Quadratic splines are useful too](https://wordsandbuttons.online/quadric_splines_are_useful_too.html) +1. [Derivations of Applied Mathematics](http://www.derivations.org/) 1. https://www.juliahomotopycontinuation.org/ 1. https://marginalrevolution.com/marginalrevolution/2018/05/one-parameter-equation-can-exactly-fit-scatter-plot.html 1. https://plato.stanford.edu/entries/mathematics-inconsistent/ diff --git a/documentation/research/web_framework.md b/documentation/research/web_framework.md index da37dc68a..c0fc7c9b5 100644 --- a/documentation/research/web_framework.md +++ b/documentation/research/web_framework.md @@ -101,6 +101,7 @@ # Styling +1. [Index fun](https://psuter.net/2019/07/07/z-index) 1. [Constraint layouts](https://blog.gtk.org/2019/07/02/constraint-layouts/) 1. https://every-layout.dev/ 1. https://github.com/diegohaz/reuse diff --git a/stdlib/source/lux/abstract/hash.lux b/stdlib/source/lux/abstract/hash.lux index d2dee3bcb..752227fb7 100644 --- a/stdlib/source/lux/abstract/hash.lux +++ b/stdlib/source/lux/abstract/hash.lux @@ -1,9 +1,8 @@ (.module: lux [// - [equivalence (#+ Equivalence)]]) + ["." equivalence (#+ Equivalence)]]) -## [Signatures] (signature: #export (Hash a) {#.doc (doc "A way to produce hash-codes for a type's instances." "A necessity when working with some data-structures, such as dictionaries or sets.")} @@ -11,3 +10,13 @@ &equivalence) (: (-> a Nat) hash)) + +(def: #export (product leftH rightH) + (All [l r] (-> (Hash l) (Hash r) (Hash [l r]))) + (structure + (def: &equivalence + (equivalence.product (:: leftH &equivalence) + (:: rightH &equivalence))) + (def: (hash [leftV rightV]) + (n/* (:: leftH hash leftV) + (:: rightH hash rightV))))) diff --git a/stdlib/source/lux/control/parser/binary.lux b/stdlib/source/lux/control/parser/binary.lux index 8d01d2d48..2912e0a52 100644 --- a/stdlib/source/lux/control/parser/binary.lux +++ b/stdlib/source/lux/control/parser/binary.lux @@ -48,7 +48,7 @@ (template [ ] [(def: #export - (Parser (I64 Any)) + (Parser I64) (function (_ [offset binary]) (case ( offset binary) (#try.Success data) @@ -63,6 +63,18 @@ [bits/64 ..size/64 binary.read/64] ) +(template [ ] + [(def: #export (Parser ) ..bits/64)] + + [nat Nat] + [int Int] + [rev Rev] + ) + +(def: #export frac + (Parser Frac) + (//@map frac.from-bits ..bits/64)) + (exception: #export (invalid-tag {range Nat} {byte Nat}) (exception.report ["Range" (%.nat range)] @@ -71,11 +83,11 @@ (def: #export (or left right) (All [l r] (-> (Parser l) (Parser r) (Parser (| l r)))) (do //.monad - [flag bits/8] + [flag ..nat] (case flag 0 (:: @ map (|>> #.Left) left) 1 (:: @ map (|>> #.Right) right) - _ (//.lift (exception.throw ..invalid-tag [2 (.nat flag)]))))) + _ (//.lift (exception.throw ..invalid-tag [2 flag]))))) (def: #export (rec body) (All [a] (-> (-> (Parser a) (Parser a)) (Parser a))) @@ -89,28 +101,11 @@ (def: #export bit (Parser Bit) - (function (_ [offset binary]) - (case (binary.read/8 offset binary) - (#try.Success data) - (case (: Nat data) - (^template [ ] - (#try.Success [(inc offset) binary] )) - ([0 #0] - [1 #1]) - - _ - (exception.throw ..invalid-tag [2 data])) - - (#try.Failure error) - (#try.Failure error)))) - -(def: #export nat (Parser Nat) (//@map .nat ..bits/64)) -(def: #export int (Parser Int) (//@map .int ..bits/64)) -(def: #export rev (Parser Rev) (//@map .rev ..bits/64)) - -(def: #export frac - (Parser Frac) - (//@map frac.bits-to-frac ..bits/64)) + (do //.monad + [choice (..or ..any ..any)] + (wrap (case choice + (#.Left _) #0 + (#.Right _) #1)))) (template [ ] [(def: #export diff --git a/stdlib/source/lux/data/format/binary.lux b/stdlib/source/lux/data/format/binary.lux index a947de559..58ea7eb05 100644 --- a/stdlib/source/lux/data/format/binary.lux +++ b/stdlib/source/lux/data/format/binary.lux @@ -127,7 +127,7 @@ try.assume)])])) (template [ ] - [(def: #export (Writer ) (|>> .i64 ..bits/64))] + [(def: #export (Writer ) ..bits/64)] [nat Nat] [int Int] @@ -136,7 +136,7 @@ (def: #export frac (Writer Frac) - (|>> frac.frac-to-bits ..bits/64)) + (|>> frac.to-bits ..bits/64)) (template [ ] [(def: #export diff --git a/stdlib/source/lux/data/maybe.lux b/stdlib/source/lux/data/maybe.lux index b96e014b3..3ba5e87e9 100644 --- a/stdlib/source/lux/data/maybe.lux +++ b/stdlib/source/lux/data/maybe.lux @@ -2,10 +2,10 @@ [lux #* [abstract [monoid (#+ Monoid)] - ["." functor (#+ Functor)] + [equivalence (#+ Equivalence)] [apply (#+ Apply)] - ["." monad (#+ Monad do)] - [equivalence (#+ Equivalence)]]]) + ["." functor (#+ Functor)] + ["." monad (#+ Monad do)]]]) ## (type: (Maybe a) ## #.None @@ -111,4 +111,4 @@ (def: #export assume (All [a] (-> (Maybe a) a)) - (|>> (default (undefined)))) + (|>> (..default (undefined)))) diff --git a/stdlib/source/lux/data/number/frac.lux b/stdlib/source/lux/data/number/frac.lux index a23c5c4e2..6fb8f3831 100644 --- a/stdlib/source/lux/data/number/frac.lux +++ b/stdlib/source/lux/data/number/frac.lux @@ -343,7 +343,7 @@ ["7FF" special-exponent-bits] ) -(def: #export (frac-to-bits input) +(def: #export (to-bits input) (-> Frac I64) (i64 (cond (not-a-number? input) ..not-a-number-bits @@ -392,8 +392,8 @@ [sign sign-mask 1 (n/+ exponent-size mantissa-size)] ) -(def: #export (bits-to-frac input) - (-> (I64 Any) Frac) +(def: #export (from-bits input) + (-> I64 Frac) (let [S (sign input) E (exponent input) M (mantissa input)] @@ -424,4 +424,4 @@ (structure: #export hash (Hash Frac) (def: &equivalence ..equivalence) - (def: hash frac-to-bits)) + (def: hash ..to-bits)) diff --git a/stdlib/source/lux/data/text.lux b/stdlib/source/lux/data/text.lux index ad5d49ae2..8a4b8a02a 100644 --- a/stdlib/source/lux/data/text.lux +++ b/stdlib/source/lux/data/text.lux @@ -27,15 +27,15 @@ [(def: #export (from-code )) (def: #export )] - [00 \0 null] - [07 \a alarm] - [08 \b back-space] - [09 \t tab] - [10 \n new-line] - [11 \v vertical-tab] - [12 \f form-feed] - [13 \r carriage-return] - [34 \' double-quote] + [00 \0 null] + [07 \a alarm] + [08 \b back-space] + [09 \t tab] + [10 \n new-line] + [11 \v vertical-tab] + [12 \f form-feed] + [13 \r carriage-return] + [34 \'' double-quote] ) (def: #export (size x) diff --git a/stdlib/source/lux/math/random.lux b/stdlib/source/lux/math/random.lux index ef1ed3e37..1bdc9931a 100644 --- a/stdlib/source/lux/math/random.lux +++ b/stdlib/source/lux/math/random.lux @@ -111,7 +111,7 @@ (def: #export frac (Random Frac) - (:: ..monad map frac.bits-to-frac ..nat)) + (:: ..monad map (|>> .i64 frac.from-bits) ..nat)) (def: #export safe-frac (Random Frac) @@ -276,14 +276,14 @@ (All [a] (-> PRNG (Random a) [PRNG a])) (calc prng)) -(def: pcg-32-magic-mult Nat 6364136223846793005) +(def: pcg-32-magic Nat 6364136223846793005) -(def: #export (pcg-32 [inc seed]) +(def: #export (pcg-32 [increase seed]) {#.doc (doc "An implementation of the PCG32 algorithm." "For more information, please see: http://www.pcg-random.org/")} (-> [(I64 Any) (I64 Any)] PRNG) (function (_ _) - [(|> seed .nat (n/* pcg-32-magic-mult) ("lux i64 +" inc) [inc] pcg-32) + [(|> seed .nat (n/* ..pcg-32-magic) ("lux i64 +" increase) [increase] pcg-32) (let [rot (|> seed .i64 (i64.logic-right-shift 59))] (|> seed (i64.logic-right-shift 18) diff --git a/stdlib/source/lux/world/input/keyboard.lux b/stdlib/source/lux/world/input/keyboard.lux index a918ba635..b6fdb06ee 100644 --- a/stdlib/source/lux/world/input/keyboard.lux +++ b/stdlib/source/lux/world/input/keyboard.lux @@ -6,73 +6,98 @@ (type: #export Key Nat) -(template [ ] +(template [ ] [(def: #export Key )] - [caps-lock 20] - [num-lock 144] - [scroll-lock 145] - - [back-space 8] - [enter 10] + [00008 back-space] + [00010 enter] + [00016 shift] + [00017 control] + [00018 alt] + [00020 caps-lock] + [00027 escape] + [00032 space] + [00033 page-up] + [00034 page-down] + [00035 end] + [00036 home] - [shift 16] - [control 17] - [alt 18] + [00037 left] + [00038 up] + [00039 right] + [00040 down] - [escape 27] - [page-up 33] - [page-down 34] - [end 35] - [home 36] + [00065 a] + [00066 b] + [00067 c] + [00068 d] + [00069 e] + [00070 f] + [00071 g] + [00072 h] + [00073 i] + [00074 j] + [00075 k] + [00076 l] + [00077 m] + [00078 n] + [00079 o] + [00080 p] + [00081 q] + [00082 r] + [00083 s] + [00084 t] + [00085 u] + [00086 v] + [00087 w] + [00088 x] + [00089 y] + [00090 z] - [left 37] - [up 38] - [right 39] - [down 40] + [00096 num-pad-0] + [00097 num-pad-1] + [00098 num-pad-2] + [00099 num-pad-3] + [00100 num-pad-4] + [00101 num-pad-5] + [00102 num-pad-6] + [00103 num-pad-7] + [00104 num-pad-8] + [00105 num-pad-9] - [delete 127] - [print-screen 154] - [insert 155] - [windows 524] + [00127 delete] + [00144 num-lock] + [00145 scroll-lock] + [00154 print-screen] + [00155 insert] + [00524 windows] - [num-pad-0 96] - [num-pad-1 97] - [num-pad-2 98] - [num-pad-3 99] - [num-pad-4 100] - [num-pad-5 101] - [num-pad-6 102] - [num-pad-7 103] - [num-pad-8 104] - [num-pad-9 105] - - [f1 112] - [f2 113] - [f3 114] - [f4 115] - [f5 116] - [f6 117] - [f7 118] - [f8 119] - [f9 120] - [f10 121] - [f11 122] - [f12 123] - [f13 61440] - [f14 61441] - [f15 61442] - [f16 61443] - [f17 61444] - [f18 61445] - [f19 61446] - [f20 61447] - [f21 61448] - [f22 61449] - [f23 61450] - [f24 61451] + [00112 f1] + [00113 f2] + [00114 f3] + [00115 f4] + [00116 f5] + [00117 f6] + [00118 f7] + [00119 f8] + [00120 f9] + [00121 f10] + [00122 f11] + [00123 f12] + [61440 f13] + [61441 f14] + [61442 f15] + [61443 f16] + [61444 f17] + [61445 f18] + [61446 f19] + [61447 f20] + [61448 f21] + [61449 f22] + [61450 f23] + [61451 f24] ) (type: #export Press - {#input (Either Key Char) - #pressed? Bit}) + {#pressed? Bit + #input Key}) diff --git a/stdlib/source/test/lux/data/number/frac.lux b/stdlib/source/test/lux/data/number/frac.lux index e683fb134..9edc0f921 100644 --- a/stdlib/source/test/lux/data/number/frac.lux +++ b/stdlib/source/test/lux/data/number/frac.lux @@ -48,6 +48,7 @@ (hex "+dead,BE.EF")))) (do r.monad [sample gen-frac] - (_.test (format (%.name (name-of /.frac-to-bits)) " " (%.name (name-of /.bits-to-frac))) - (|> sample /.frac-to-bits /.bits-to-frac (f/= sample)))) + (_.test (format (%.name (name-of /.to-bits)) + " & " (%.name (name-of /.from-bits))) + (|> sample /.to-bits /.from-bits (f/= sample)))) ))))) -- cgit v1.2.3