nixcon2022
2
content/pages/nixcon2022/.gitignore
vendored
|
|
@ -1 +1 @@
|
||||||
node_modules
|
*.mp4
|
||||||
|
|
|
||||||
2
content/pages/nixcon2022/dist/reveal.js.map
vendored
25546
content/pages/nixcon2022/graphs/nixos.json
Normal file
652
content/pages/nixcon2022/graphs/step0.json
Normal file
|
|
@ -0,0 +1,652 @@
|
||||||
|
{
|
||||||
|
"title": "Initial actual budget graph",
|
||||||
|
"nodes": {
|
||||||
|
"/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib": {
|
||||||
|
"label": "p458if-gcc-9.3.0-lib",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib",
|
||||||
|
"narSize": "5.5 MiB",
|
||||||
|
"closureSize": "35.1 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 2.4194162869038793
|
||||||
|
},
|
||||||
|
"/nix/store/27s76aizysg70j74fvxcmw26qb1a75hg-tzdata-2022a": {
|
||||||
|
"label": "1a75hg-tzdata-2022a",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/27s76aizysg70j74fvxcmw26qb1a75hg-tzdata-2022a",
|
||||||
|
"narSize": "2 MiB",
|
||||||
|
"closureSize": "2 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 1.416603791763608
|
||||||
|
},
|
||||||
|
"/nix/store/5m75p4p6iwqc1kxsp27v21cxmf8l8smb-bzip2-1.0.6.0.2": {
|
||||||
|
"label": "8l8smb-bzip2-1.0.6.0.2",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/5m75p4p6iwqc1kxsp27v21cxmf8l8smb-bzip2-1.0.6.0.2",
|
||||||
|
"narSize": "75.9 KiB",
|
||||||
|
"closureSize": "29.7 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/5rn0s6gja3v2kg1n9rdsqvl4fwncx4ph-libidn2-2.3.2": {
|
||||||
|
"label": "ncx4ph-libidn2-2.3.2",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/5rn0s6gja3v2kg1n9rdsqvl4fwncx4ph-libidn2-2.3.2",
|
||||||
|
"narSize": "252.2 KiB",
|
||||||
|
"closureSize": "2 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/9cks58i6jn1hlggxa406121asgn6nyra-readline-6.3p08": {
|
||||||
|
"label": "n6nyra-readline-6.3p08",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/9cks58i6jn1hlggxa406121asgn6nyra-readline-6.3p08",
|
||||||
|
"narSize": "395.5 KiB",
|
||||||
|
"closureSize": "33.5 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/a3zvjvbipm7brkxiq601kys1ql9rk2i0-xz-5.2.5": {
|
||||||
|
"label": "9rk2i0-xz-5.2.5",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/a3zvjvbipm7brkxiq601kys1ql9rk2i0-xz-5.2.5",
|
||||||
|
"narSize": "466.1 KiB",
|
||||||
|
"closureSize": "30.1 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev": {
|
||||||
|
"label": "p95fhq-icu4c-71.1-dev",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev",
|
||||||
|
"narSize": "5.3 MiB",
|
||||||
|
"closureSize": "79.3 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 2.385025884503138
|
||||||
|
},
|
||||||
|
"/nix/store/b24qnq024bv5yxr679gswckivg7042gb-gdbm-1.23": {
|
||||||
|
"label": "7042gb-gdbm-1.23",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/b24qnq024bv5yxr679gswckivg7042gb-gdbm-1.23",
|
||||||
|
"narSize": "796.5 KiB",
|
||||||
|
"closureSize": "30.4 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0.46561903092791146
|
||||||
|
},
|
||||||
|
"/nix/store/cc6lbnrx5imqj1cbbpybws50b2002r8p-openssl-1.1.1o": {
|
||||||
|
"label": "002r8p-openssl-1.1.1o",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/cc6lbnrx5imqj1cbbpybws50b2002r8p-openssl-1.1.1o",
|
||||||
|
"narSize": "3.7 MiB",
|
||||||
|
"closureSize": "33.3 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 2.0201786631684238
|
||||||
|
},
|
||||||
|
"/nix/store/ccj83yygy31ir1wscwrapxljdfpjcbjb-acl-2.3.1": {
|
||||||
|
"label": "pjcbjb-acl-2.3.1",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/ccj83yygy31ir1wscwrapxljdfpjcbjb-acl-2.3.1",
|
||||||
|
"narSize": "108.1 KiB",
|
||||||
|
"closureSize": "29.8 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12": {
|
||||||
|
"label": "c4mba5-zlib-1.2.12",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12",
|
||||||
|
"narSize": "119.1 KiB",
|
||||||
|
"closureSize": "29.8 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/hj3i68avd4dq3m4h21fn00a04pb1fm4a-coreutils-9.0": {
|
||||||
|
"label": "b1fm4a-coreutils-9.0",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/hj3i68avd4dq3m4h21fn00a04pb1fm4a-coreutils-9.0",
|
||||||
|
"narSize": "1.6 MiB",
|
||||||
|
"closureSize": "31.4 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 1.1863369528745844
|
||||||
|
},
|
||||||
|
"/nix/store/hj5cjjxxg9dlg4f66ic3x9xqsmscqfmy-attr-2.5.1": {
|
||||||
|
"label": "scqfmy-attr-2.5.1",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/hj5cjjxxg9dlg4f66ic3x9xqsmscqfmy-attr-2.5.1",
|
||||||
|
"narSize": "75.4 KiB",
|
||||||
|
"closureSize": "29.7 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1": {
|
||||||
|
"label": "9m8hzl-actual-sync-modules-1.0.1",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1",
|
||||||
|
"narSize": "143.1 MiB",
|
||||||
|
"closureSize": "425 MiB",
|
||||||
|
"registered": "2022-10-17 19:29:19 UTC",
|
||||||
|
"deriver": "/nix/store/8q8bv2a11523avq50bp91sw8g5pbirhn-actual-sync-modules-1.0.1.drv"
|
||||||
|
},
|
||||||
|
"weight": 5.680189727044614
|
||||||
|
},
|
||||||
|
"/nix/store/jbq46aqlwcwb51f17gi97az59js3mj2q-perl-5.34.1": {
|
||||||
|
"label": "s3mj2q-perl-5.34.1",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/jbq46aqlwcwb51f17gi97az59js3mj2q-perl-5.34.1",
|
||||||
|
"narSize": "52.7 MiB",
|
||||||
|
"closureSize": "84.2 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 4.680812070382395
|
||||||
|
},
|
||||||
|
"/nix/store/l0mwmzjk0a14a72441alshj8k23i5n2p-libunistring-1.0": {
|
||||||
|
"label": "3i5n2p-libunistring-1.0",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/l0mwmzjk0a14a72441alshj8k23i5n2p-libunistring-1.0",
|
||||||
|
"narSize": "1.7 MiB",
|
||||||
|
"closureSize": "1.7 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 1.265661565627411
|
||||||
|
},
|
||||||
|
"/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12": {
|
||||||
|
"label": "yaf7qh-python3-3.9.12",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"narSize": "84.6 MiB",
|
||||||
|
"closureSize": "128.2 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 5.154659877624505
|
||||||
|
},
|
||||||
|
"/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115": {
|
||||||
|
"label": "i4v50a-glibc-2.34-115",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115",
|
||||||
|
"narSize": "27.7 MiB",
|
||||||
|
"closureSize": "29.7 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 4.037506317710718
|
||||||
|
},
|
||||||
|
"/nix/store/nc4krnv23q5c69n43gmdbsffgd2i797m-zlib-1.2.12-dev": {
|
||||||
|
"label": "2i797m-zlib-1.2.12-dev",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/nc4krnv23q5c69n43gmdbsffgd2i797m-zlib-1.2.12-dev",
|
||||||
|
"narSize": "112.8 KiB",
|
||||||
|
"closureSize": "29.9 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/qd3g8rk5hx5zkb70idjh6fa12sh6bipg-mailcap-2.1.53": {
|
||||||
|
"label": "h6bipg-mailcap-2.1.53",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/qd3g8rk5hx5zkb70idjh6fa12sh6bipg-mailcap-2.1.53",
|
||||||
|
"narSize": "109.4 KiB",
|
||||||
|
"closureSize": "109.4 KiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/qh1yf30niykshpc5dfi7m668ch2p7x6c-ncurses-6.3": {
|
||||||
|
"label": "2p7x6c-ncurses-6.3",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/qh1yf30niykshpc5dfi7m668ch2p7x6c-ncurses-6.3",
|
||||||
|
"narSize": "3.5 MiB",
|
||||||
|
"closureSize": "33.1 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 1.9575695913880296
|
||||||
|
},
|
||||||
|
"/nix/store/qhx1x8lwnx5i0r7gc1k6qqn23l4y8y6y-openssl-1.1.1o-bin": {
|
||||||
|
"label": "4y8y6y-openssl-1.1.1o-bin",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/qhx1x8lwnx5i0r7gc1k6qqn23l4y8y6y-openssl-1.1.1o-bin",
|
||||||
|
"narSize": "739.9 KiB",
|
||||||
|
"closureSize": "88.6 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0.3918625953168647
|
||||||
|
},
|
||||||
|
"/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server": {
|
||||||
|
"label": "ihcidf-actual-server",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server",
|
||||||
|
"narSize": "143.2 MiB",
|
||||||
|
"closureSize": "568.2 MiB",
|
||||||
|
"registered": "2022-10-17 22:45:15 UTC",
|
||||||
|
"deriver": "/nix/store/47ynggi13xy7lnyqyy66izs0bbj4i1kj-actual-server.drv"
|
||||||
|
},
|
||||||
|
"weight": 5.681352373571962
|
||||||
|
},
|
||||||
|
"/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16": {
|
||||||
|
"label": "ld79z4-bash-5.1-p16",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16",
|
||||||
|
"narSize": "1.3 MiB",
|
||||||
|
"closureSize": "31 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 1.0129012022977377
|
||||||
|
},
|
||||||
|
"/nix/store/r1jhzslypr1pmjls2mh22i1d3h04a1rk-icu4c-71.1": {
|
||||||
|
"label": "04a1rk-icu4c-71.1",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/r1jhzslypr1pmjls2mh22i1d3h04a1rk-icu4c-71.1",
|
||||||
|
"narSize": "35.7 MiB",
|
||||||
|
"closureSize": "72.2 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 4.292424119492384
|
||||||
|
},
|
||||||
|
"/nix/store/s355yx68hzb0fy55pc417kq8hy744fbc-libuv-1.44.1": {
|
||||||
|
"label": "744fbc-libuv-1.44.1",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/s355yx68hzb0fy55pc417kq8hy744fbc-libuv-1.44.1",
|
||||||
|
"narSize": "331.7 KiB",
|
||||||
|
"closureSize": "30 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/sscxlfcpd2cjwb9jm1v3y54q40j46v6x-expat-2.4.8": {
|
||||||
|
"label": "j46v6x-expat-2.4.8",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/sscxlfcpd2cjwb9jm1v3y54q40j46v6x-expat-2.4.8",
|
||||||
|
"narSize": "247.2 KiB",
|
||||||
|
"closureSize": "29.9 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/vmf9jqsb9zx9nlqlwpvy4gwcs5zq7y1v-sqlite-3.38.3": {
|
||||||
|
"label": "zq7y1v-sqlite-3.38.3",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/vmf9jqsb9zx9nlqlwpvy4gwcs5zq7y1v-sqlite-3.38.3",
|
||||||
|
"narSize": "1.3 MiB",
|
||||||
|
"closureSize": "31.1 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0.9667580602456716
|
||||||
|
},
|
||||||
|
"/nix/store/vvapsd09jq70w3hmpdd5rlrd8iv3fi2f-libffi-3.4.2": {
|
||||||
|
"label": "v3fi2f-libffi-3.4.2",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/vvapsd09jq70w3hmpdd5rlrd8iv3fi2f-libffi-3.4.2",
|
||||||
|
"narSize": "48.2 KiB",
|
||||||
|
"closureSize": "29.7 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 0
|
||||||
|
},
|
||||||
|
"/nix/store/wl64yp8q7m2s9dc3awdj4yfkviw52fpi-openssl-1.1.1o-dev": {
|
||||||
|
"label": "w52fpi-openssl-1.1.1o-dev",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/wl64yp8q7m2s9dc3awdj4yfkviw52fpi-openssl-1.1.1o-dev",
|
||||||
|
"narSize": "1.3 MiB",
|
||||||
|
"closureSize": "89.9 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 1.0021185962889871
|
||||||
|
},
|
||||||
|
"/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0": {
|
||||||
|
"label": "4xf821-nodejs-16.15.0",
|
||||||
|
"props": {
|
||||||
|
"path": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"narSize": "50.2 MiB",
|
||||||
|
"closureSize": "281.9 MiB",
|
||||||
|
"registered": "2022-06-21 19:41:37 UTC",
|
||||||
|
"deriver": null
|
||||||
|
},
|
||||||
|
"weight": 4.6336771609814065
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"edges": [
|
||||||
|
{
|
||||||
|
"from": "/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/5m75p4p6iwqc1kxsp27v21cxmf8l8smb-bzip2-1.0.6.0.2",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/5rn0s6gja3v2kg1n9rdsqvl4fwncx4ph-libidn2-2.3.2",
|
||||||
|
"to": "/nix/store/l0mwmzjk0a14a72441alshj8k23i5n2p-libunistring-1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/9cks58i6jn1hlggxa406121asgn6nyra-readline-6.3p08",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/9cks58i6jn1hlggxa406121asgn6nyra-readline-6.3p08",
|
||||||
|
"to": "/nix/store/qh1yf30niykshpc5dfi7m668ch2p7x6c-ncurses-6.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/a3zvjvbipm7brkxiq601kys1ql9rk2i0-xz-5.2.5",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev",
|
||||||
|
"to": "/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev",
|
||||||
|
"to": "/nix/store/hj3i68avd4dq3m4h21fn00a04pb1fm4a-coreutils-9.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev",
|
||||||
|
"to": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev",
|
||||||
|
"to": "/nix/store/r1jhzslypr1pmjls2mh22i1d3h04a1rk-icu4c-71.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/b24qnq024bv5yxr679gswckivg7042gb-gdbm-1.23",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/cc6lbnrx5imqj1cbbpybws50b2002r8p-openssl-1.1.1o",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ccj83yygy31ir1wscwrapxljdfpjcbjb-acl-2.3.1",
|
||||||
|
"to": "/nix/store/hj5cjjxxg9dlg4f66ic3x9xqsmscqfmy-attr-2.5.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ccj83yygy31ir1wscwrapxljdfpjcbjb-acl-2.3.1",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/hj3i68avd4dq3m4h21fn00a04pb1fm4a-coreutils-9.0",
|
||||||
|
"to": "/nix/store/ccj83yygy31ir1wscwrapxljdfpjcbjb-acl-2.3.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/hj3i68avd4dq3m4h21fn00a04pb1fm4a-coreutils-9.0",
|
||||||
|
"to": "/nix/store/hj5cjjxxg9dlg4f66ic3x9xqsmscqfmy-attr-2.5.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/hj3i68avd4dq3m4h21fn00a04pb1fm4a-coreutils-9.0",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/hj5cjjxxg9dlg4f66ic3x9xqsmscqfmy-attr-2.5.1",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1",
|
||||||
|
"to": "/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1",
|
||||||
|
"to": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1",
|
||||||
|
"to": "/nix/store/vmf9jqsb9zx9nlqlwpvy4gwcs5zq7y1v-sqlite-3.38.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1",
|
||||||
|
"to": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/jbq46aqlwcwb51f17gi97az59js3mj2q-perl-5.34.1",
|
||||||
|
"to": "/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/jbq46aqlwcwb51f17gi97az59js3mj2q-perl-5.34.1",
|
||||||
|
"to": "/nix/store/hj3i68avd4dq3m4h21fn00a04pb1fm4a-coreutils-9.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/jbq46aqlwcwb51f17gi97az59js3mj2q-perl-5.34.1",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/27s76aizysg70j74fvxcmw26qb1a75hg-tzdata-2022a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/5m75p4p6iwqc1kxsp27v21cxmf8l8smb-bzip2-1.0.6.0.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/9cks58i6jn1hlggxa406121asgn6nyra-readline-6.3p08"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/a3zvjvbipm7brkxiq601kys1ql9rk2i0-xz-5.2.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/b24qnq024bv5yxr679gswckivg7042gb-gdbm-1.23"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/cc6lbnrx5imqj1cbbpybws50b2002r8p-openssl-1.1.1o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/qd3g8rk5hx5zkb70idjh6fa12sh6bipg-mailcap-2.1.53"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/qh1yf30niykshpc5dfi7m668ch2p7x6c-ncurses-6.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/sscxlfcpd2cjwb9jm1v3y54q40j46v6x-expat-2.4.8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/vmf9jqsb9zx9nlqlwpvy4gwcs5zq7y1v-sqlite-3.38.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12",
|
||||||
|
"to": "/nix/store/vvapsd09jq70w3hmpdd5rlrd8iv3fi2f-libffi-3.4.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115",
|
||||||
|
"to": "/nix/store/5rn0s6gja3v2kg1n9rdsqvl4fwncx4ph-libidn2-2.3.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/nc4krnv23q5c69n43gmdbsffgd2i797m-zlib-1.2.12-dev",
|
||||||
|
"to": "/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qh1yf30niykshpc5dfi7m668ch2p7x6c-ncurses-6.3",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qhx1x8lwnx5i0r7gc1k6qqn23l4y8y6y-openssl-1.1.1o-bin",
|
||||||
|
"to": "/nix/store/cc6lbnrx5imqj1cbbpybws50b2002r8p-openssl-1.1.1o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qhx1x8lwnx5i0r7gc1k6qqn23l4y8y6y-openssl-1.1.1o-bin",
|
||||||
|
"to": "/nix/store/jbq46aqlwcwb51f17gi97az59js3mj2q-perl-5.34.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qhx1x8lwnx5i0r7gc1k6qqn23l4y8y6y-openssl-1.1.1o-bin",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server",
|
||||||
|
"to": "/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server",
|
||||||
|
"to": "/nix/store/i778ag8s7jf8bxy9ihv0gsba3h9m8hzl-actual-sync-modules-1.0.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server",
|
||||||
|
"to": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server",
|
||||||
|
"to": "/nix/store/vmf9jqsb9zx9nlqlwpvy4gwcs5zq7y1v-sqlite-3.38.3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server",
|
||||||
|
"to": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/r1jhzslypr1pmjls2mh22i1d3h04a1rk-icu4c-71.1",
|
||||||
|
"to": "/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/r1jhzslypr1pmjls2mh22i1d3h04a1rk-icu4c-71.1",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/r1jhzslypr1pmjls2mh22i1d3h04a1rk-icu4c-71.1",
|
||||||
|
"to": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/s355yx68hzb0fy55pc417kq8hy744fbc-libuv-1.44.1",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/sscxlfcpd2cjwb9jm1v3y54q40j46v6x-expat-2.4.8",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/vmf9jqsb9zx9nlqlwpvy4gwcs5zq7y1v-sqlite-3.38.3",
|
||||||
|
"to": "/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/vmf9jqsb9zx9nlqlwpvy4gwcs5zq7y1v-sqlite-3.38.3",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/vvapsd09jq70w3hmpdd5rlrd8iv3fi2f-libffi-3.4.2",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/wl64yp8q7m2s9dc3awdj4yfkviw52fpi-openssl-1.1.1o-dev",
|
||||||
|
"to": "/nix/store/cc6lbnrx5imqj1cbbpybws50b2002r8p-openssl-1.1.1o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/wl64yp8q7m2s9dc3awdj4yfkviw52fpi-openssl-1.1.1o-dev",
|
||||||
|
"to": "/nix/store/qhx1x8lwnx5i0r7gc1k6qqn23l4y8y6y-openssl-1.1.1o-bin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/073qf3vf5sq7yaxspbhbl5njy5p458if-gcc-9.3.0-lib"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/aiglvl958l2c2cd7dipf22ibxip95fhq-icu4c-71.1-dev"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/cc6lbnrx5imqj1cbbpybws50b2002r8p-openssl-1.1.1o"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/d4fv57g9cq82zgysim42g5hqp1c4mba5-zlib-1.2.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/l71cy8azqms8m4b97qpszjbywkyaf7qh-python3-3.9.12"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/lyirwifzfwjxsqal7dzcx6dbn1i4v50a-glibc-2.34-115"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/nc4krnv23q5c69n43gmdbsffgd2i797m-zlib-1.2.12-dev"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/qrw4ldkpsgbk1gzwf45qz40l43ld79z4-bash-5.1-p16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/r1jhzslypr1pmjls2mh22i1d3h04a1rk-icu4c-71.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/s355yx68hzb0fy55pc417kq8hy744fbc-libuv-1.44.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "/nix/store/ykvg94hiqihi5hh7jb8bi4vk354xf821-nodejs-16.15.0",
|
||||||
|
"to": "/nix/store/wl64yp8q7m2s9dc3awdj4yfkviw52fpi-openssl-1.1.1o-dev"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
content/pages/nixcon2022/img/actual-stage0-python.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
content/pages/nixcon2022/img/actual-stage0.png
Normal file
|
After Width: | Height: | Size: 228 KiB |
90
content/pages/nixcon2022/img/fsm-docker.svg
Normal file
|
After Width: | Height: | Size: 26 KiB |
103
content/pages/nixcon2022/img/fsm-drv-1.svg
Normal file
|
After Width: | Height: | Size: 40 KiB |
95
content/pages/nixcon2022/img/fsm-drv-2.svg
Normal file
|
After Width: | Height: | Size: 37 KiB |
67
content/pages/nixcon2022/img/fsm-runtime-dep.svg
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
content/pages/nixcon2022/img/github-issues.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
content/pages/nixcon2022/img/lets-see-who-this-really-is.png
Normal file
|
After Width: | Height: | Size: 493 KiB |
BIN
content/pages/nixcon2022/img/lets-see-who-this-really-is.xcf
Normal file
BIN
content/pages/nixcon2022/img/nixos-closure.png
Normal file
|
After Width: | Height: | Size: 390 KiB |
BIN
content/pages/nixcon2022/img/nixosClosure.png
Normal file
|
After Width: | Height: | Size: 909 KiB |
|
|
@ -28,6 +28,9 @@ NixCon 2022<br>
|
||||||
October 20, 2022<br>
|
October 20, 2022<br>
|
||||||
https://jade.fyi
|
https://jade.fyi
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
Slides here: <a href="https://jade.fyi/nixcon2022/slides">https://jade.fyi/nixcon2022/slides</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
@ -35,7 +38,7 @@ https://jade.fyi
|
||||||
# who am I?
|
# who am I?
|
||||||
* Computer Engineering student at UBC in Vancouver, BC, Canada
|
* Computer Engineering student at UBC in Vancouver, BC, Canada
|
||||||
* Presently interning in backend dev for Mercury, a company offering banking<fnref>1</fnref> designed for the unique needs of startups
|
* Presently interning in backend dev for Mercury, a company offering banking<fnref>1</fnref> designed for the unique needs of startups
|
||||||
* Haskell + TypeScript + Nix stack
|
* Haskell + PostgreSQL + TypeScript + Nix stack
|
||||||
* Working on internal tools for risk management
|
* Working on internal tools for risk management
|
||||||
|
|
||||||
<div class="footnotes">
|
<div class="footnotes">
|
||||||
|
|
@ -45,42 +48,49 @@ https://jade.fyi
|
||||||
</div>
|
</div>
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# disclaimer
|
||||||
|
|
||||||
|
Views represented in this talk are my own and do not necessarily represent the views of Mercury.
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# what's closure size?
|
# what's closure size?
|
||||||
|
|
||||||
* Size of some derivation and everything it depends on
|
* Size of some derivation and everything it depends on
|
||||||
* Accidental dependencies are the major contributor
|
* Accidental dependencies are the major contributor
|
||||||
* Other systems don't have this problem: forgetting about runtime dependencies may silently fail (or work if you have them installed!) at runtime
|
* Other systems don't have this problem: forgetting about runtime dependencies may silently fail (or work if you have them installed!) at runtime
|
||||||
* "Closure" → like a function referencing values outside it
|
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# how do I create a dependency?
|
# how do I create a dependency?
|
||||||
|
|
||||||
* Only what goes in may go out: inputs may become runtime dependencies if they appear in the output
|
|
||||||
* Follows from Nix's hermetic design: outputs are a strict subset of inputs
|
|
||||||
* It's easy to cause accidental dependencies
|
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# ok, but what does "appear" mean?
|
<img src="./img/fsm-drv-1.svg" alt="silly drawing of mkDerivation with a build input of a drawing of a spaghetti monster">
|
||||||
|
|
||||||
```
|
|
||||||
grep -r '[0-9abcdfghijklmnpqrsvwxyz]{32}' $out
|
|
||||||
```
|
|
||||||
|
|
||||||
Seriously.
|
|
||||||
|
|
||||||
Nix looks for 32 character strings forming the hash part of any of the store paths of the closure of the inputs to the derivation
|
|
||||||
|
|
||||||
See Figure 5.12 in the Nix thesis
|
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
<img src="./img/fsm-drv-2.svg" alt="continuation of the previous slide, with a buildPhase echoing spaghetti monster into $out">
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
<img src="./img/fsm-runtime-dep.svg" alt="little graph showing myapp-0.0.0 depending on spaghetti monster">
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# issues with excess closure size
|
||||||
|
<img src="./img/fsm-docker.svg" alt="little container ship with a container mostly containing spaghetti monster and insignificantly containing myapp">
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<!--
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# digression: "what went in?"
|
# digression: "what went in?"
|
||||||
|
|
||||||
Nix strings are magic: they keep track of the derivations that they've referenced as "string context", and propagate that information into any derivations they land in.
|
Nix strings are magic: they keep track of the derivations that they've referenced as "string context", and propagate that information into any derivations they land in.
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
-->
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# what does my stuff depend on?
|
# what does my stuff depend on?
|
||||||
|
|
@ -96,7 +106,8 @@ Nix strings are magic: they keep track of the derivations that they've reference
|
||||||
# that's a graph though
|
# that's a graph though
|
||||||
|
|
||||||
Yeah. I can't tell what the relationship is between these.
|
Yeah. I can't tell what the relationship is between these.
|
||||||
No tree or graph mode for nix path-info unlike nix-store --query (the latter is not stellar anyway)
|
|
||||||
|
No tree or graph mode for `nix path-info` unlike `nix-store --query`
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
|
|
@ -104,9 +115,9 @@ No tree or graph mode for nix path-info unlike nix-store --query (the latter is
|
||||||
|
|
||||||
There is a JSON output mode, what if we just used that? and then did some stuff to it
|
There is a JSON output mode, what if we just used that? and then did some stuff to it
|
||||||
|
|
||||||
Some purely functional programming in jq later:
|
So I wrote a program in jq:
|
||||||
|
|
||||||
`nix-closure-graph nixpkgs#python3 > python3Closure.svg`
|
<pre><code class="text">nix-closure-graph nixpkgs#python3 > python3Closure.svg</code></pre>
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
|
|
@ -121,10 +132,10 @@ Some purely functional programming in jq later:
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# what about a nixos image
|
# what about a nixos image
|
||||||
|
|
||||||
whoops
|
maybe not
|
||||||
|
|
||||||
<div class="img-container">
|
<div class="img-container">
|
||||||
<img src="./img/nixosClosure.svg" style="object-fit: cover; object-position: center;" width="100%" height="100%" alt="incomprehensible graphviz graph absolutely covered in lines for a nixos image">
|
<img src="./img/nixosClosure.png" style="object-fit: cover; object-position: center;" width="700px" height="400px" alt="incomprehensible graphviz graph absolutely covered in lines for a nixos image">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
@ -134,26 +145,206 @@ whoops
|
||||||
|
|
||||||
I built this graph viewer prototype at work, I wonder if I could stick a NixOS closure into it
|
I built this graph viewer prototype at work, I wonder if I could stick a NixOS closure into it
|
||||||
|
|
||||||
FIXME!!!
|
https://mercurytechnologies.github.io/looking-glass-viewer/
|
||||||
|
|
||||||
|
<pre><code class="text"><script type="text/template"> » nix-closure-graph --lg .#nixosConfigurations.micro.config.system.build.toplevel | goo copy
|
||||||
|
</script></code></pre>
|
||||||
|
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# other projects from me
|
# it doesn't fall over?
|
||||||
|
|
||||||
https://docs.jade.fyi - Single page HTML docs for GNU, postgres, and zsh
|
The rendering has some room for improvement but it is usable!
|
||||||
|
|
||||||
https://github.com/LF-/nix-doc - Interactive function documentation for Nix
|
<img class="r-stretch" src="img/nixos-closure.png" alt="Looking glass showing an extremely busy, perhaps unusable view on a NixOS closure">
|
||||||
|
|
||||||
https://github.com/LF-/nix-otel - Trace Nix builds with OpenTelemetry
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# incidentally, why is half of hackage on there?
|
||||||
|
|
||||||
|
GHC puts dependency paths into executables for fun sometimes.<fnref>1</fnref>
|
||||||
|
|
||||||
|
<pre><code class="text"><script type="text/template"> » nix why-depends --precise /nix/store/abcde-hsutils-0.0.0 /nix/store/defgh-semigroupoids-5.3.7
|
||||||
|
|
||||||
|
/nix/store/abcde-hsutils-0.0.0
|
||||||
|
└───lib/ghc-9.2.4/x86_64-linux-ghc-9.2.4/libHShsutils-0.0.0-aaaa-ghc9.2.4.so: …6_64-linux-ghc-9.2.4:/nix/store/defgh-semigroupoids-5.3.7/lib/ghc-9.2…
|
||||||
|
→ /nix/store/defgh-semigroupoids-5.3.7
|
||||||
|
</script></code></pre>
|
||||||
|
|
||||||
|
<div class="footnotes">
|
||||||
|
<ol>
|
||||||
|
<li>I've <a href="https://github.com/Carnap/Carnap/blob/5e82366fd7d8804566558de189d59f40a704b1a8/server.nix#L86-L98">fixed this before</a></li>
|
||||||
|
</ol>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# why would haskell put that path in there?!
|
||||||
|
|
||||||
|
Unfortunately a known issue; help wanted.
|
||||||
|
|
||||||
|
<img src="img/github-issues.png" alt="screenshot of the github issues page for nixpkgs, showing a bug about large closures">
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# practical closure size problems
|
||||||
|
|
||||||
|
I was packaging [actual-budget], a budgeting program, to run it on fly.io. So I
|
||||||
|
figured out how to build a docker image for it with Nix.
|
||||||
|
|
||||||
|
[actual-budget]: https://actualbudget.com/
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# and then it's way too big
|
||||||
|
|
||||||
|
<pre><code class="text"><script type="text/template"> » nix build .#dockerImage.aarch64-linux
|
||||||
|
» ls -lah $(readlink result)
|
||||||
|
-r--r--r-- 1 root root 219M Dec 31 1969 /nix/store/6r0nslg23w2sa6a2zril3g0fvd6mnp1q-actual-server.tar.gz
|
||||||
|
</script></code></pre>
|
||||||
|
|
||||||
|
200MB compressed is not good. It's just some JavaScript, what happened there?
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# let's bring out the big guns
|
||||||
|
|
||||||
|
```text
|
||||||
|
nix-closure-graph --lg .# | goo copy
|
||||||
|
```
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# what went wrong here?
|
||||||
|
|
||||||
|
<img class="r-stretch" src="./img/actual-stage0.png" alt="screenshot of the graph viewer showing that actual-server depends on actual-server-modules, a derivation of suspiciously similar size">
|
||||||
|
|
||||||
|
<!-- FIXME: embed the graph viewer -->
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# python?
|
||||||
|
|
||||||
|
<img class="r-stretch" src="./img/actual-stage0-python.png" alt="screenshot of the graph viewer showing that nodejs depends on python">
|
||||||
|
|
||||||
|
<!-- FIXME: embed the graph viewer -->
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# what went wrong here?
|
||||||
|
|
||||||
|
* Python
|
||||||
|
* Mysteriously includes the app twice
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# python?!
|
||||||
|
|
||||||
|
* Node has an obsolescent build system "Generate Your Projects" for
|
||||||
|
C++ extensions that generates makefiles
|
||||||
|
* Originally inherited from Chromium
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# Generaten't My Projects
|
||||||
|
|
||||||
|
nodejs-slim to the rescue!
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# why is the app there twice?
|
||||||
|
|
||||||
|
<pre><code class="text"><script type="text/template">» nix why-depends -a --precise \
|
||||||
|
/nix/store/qq1zblyp6ysx-actual-server \
|
||||||
|
/nix/store/i778ag8s7jf8-actual-sync-modules-1.0.1
|
||||||
|
|
||||||
|
/nix/store/qq1zblyp6ysx96vd8havhw0wcsihcidf-actual-server
|
||||||
|
└───libexec/actual-sync/deps/actual-sync/node_modules
|
||||||
|
-> /nix/store/i778ag8s7jf8b-actual-sync-mo>
|
||||||
|
→ /nix/store/i778ag8s7jf8-actual-sync-modules-1.0.1
|
||||||
|
</script>
|
||||||
|
</code></pre>
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# what's in there anyway?
|
||||||
|
|
||||||
|
<pre><code class="text"><script type="text/template"> » ls -a result/libexec/actual-sync/deps/actual-sync/node_modules
|
||||||
|
. .. .bin
|
||||||
|
» ls -a result/libexec/actual-sync/deps/actual-sync/node_modules/.bin
|
||||||
|
. .. eslint prettier tsc tsserver uuid
|
||||||
|
</script>
|
||||||
|
</code></pre>
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# yeah I don't know why the builder did that
|
||||||
|
|
||||||
|
<img class="r-stretch" src="img/lets-see-who-this-really-is.png" alt="Scooby Doo 'let's see who this is anyway' meme, unmasking 'closure size' to be 'totally pointless stuff'">
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# actually fixing it
|
||||||
|
|
||||||
|
To recap, our goals are:
|
||||||
|
1. Getting rid of Python via nodejs-slim
|
||||||
|
2. Fixing the app being included twice
|
||||||
|
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
<video class="r-stretch" src="img/livedemo.mp4" controls>
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# summary
|
||||||
|
|
||||||
|
* Accidental dependencies cause closure size bloat
|
||||||
|
* Shipping suspiciously sentient spaghetti slurps time and bandwidth
|
||||||
|
* Fix closure size issues by deleting references
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
<section data-markdown><textarea data-template>
|
<section data-markdown><textarea data-template>
|
||||||
# Mercury is hiring!
|
# Mercury is hiring!
|
||||||
|
|
||||||
Front-end, back-end, management, design, data
|
* Frontend
|
||||||
|
* Backend<fnref>1</fnref>
|
||||||
|
* Full stack
|
||||||
|
* Design
|
||||||
|
* Data engineering
|
||||||
|
* Data science
|
||||||
|
* Engineering management
|
||||||
|
|
||||||
https://mercury.com/jobs
|
See open positions at https://mercury.com/jobs
|
||||||
|
<div class="footnotes">
|
||||||
|
<ol><li>No Haskell experience required or expected; training is provided!</li></ol>
|
||||||
|
</div>
|
||||||
|
</textarea></section>
|
||||||
|
|
||||||
|
<section data-markdown><textarea data-template>
|
||||||
|
# fin
|
||||||
|
|
||||||
|
Tools:
|
||||||
|
- nix-closure-graph: https://github.com/lf-/dotfiles/tree/main/programs/nix-closure-graph
|
||||||
|
- Graph viewer: https://mercurytechnologies.github.io/looking-glass-viewer/
|
||||||
|
|
||||||
|
[@leftpaddotpy on Twitter](https://twitter.com/leftpaddotpy)
|
||||||
|
|
||||||
|
<https://jade.fyi>
|
||||||
|
|
||||||
|
my name [at] jade [dot] fyi
|
||||||
</textarea></section>
|
</textarea></section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -174,6 +365,7 @@ https://mercury.com/jobs
|
||||||
plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ],
|
plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ],
|
||||||
transitionSpeed: 'fast',
|
transitionSpeed: 'fast',
|
||||||
transition: 'none',
|
transition: 'none',
|
||||||
|
slideNumber: true,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,4 @@ const t=()=>{let t,e={messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(",
|
||||||
* This plugin is a wrapper for the MathJax2,
|
* This plugin is a wrapper for the MathJax2,
|
||||||
* MathJax3 and KaTeX typesetter plugins.
|
* MathJax3 and KaTeX typesetter plugins.
|
||||||
*/
|
*/
|
||||||
var a=Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const a=t=>new Promise(((e,a)=>{const n=document.createElement("script");n.type="text/javascript",n.onload=e,n.onerror=a,n.src=t,document.head.append(n)}));return{id:"katex",init:function(n){t=n;let i=t.getConfig().katex||{},s={...e,...i};const{local:l,version:o,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",p=s.local?"":"@"+s.version,u=d+p+"/dist/katex.min.css",h=d+p+"/dist/contrib/mhchem.min.js",x=d+p+"/dist/contrib/auto-render.min.js",m=[d+p+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(n.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(u),async function(t){for(const e of t)await a(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{Reveal.layout()}))}}};return{id:"mathjax3",init:function(a){t=a;let n=t.getConfig().mathjax3||{},i={...e,...n};i.tex={...e.tex,...n.tex},i.options={...e.options,...n.options},i.startup={...e.startup,...n.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let a=document.createElement("script");a.type="text/javascript",a.id="MathJax-script",a.src=t,a.async=!0,a.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(a)}(s,(function(){Reveal.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}});export{a as default};
|
var a=Plugin=Object.assign(e(),{KaTeX:()=>{let t,e={version:"latest",delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}],ignoredTags:["script","noscript","style","textarea","pre"]};const a=t=>new Promise(((e,a)=>{const n=document.createElement("script");n.type="text/javascript",n.onload=e,n.onerror=a,n.src=t,document.head.append(n)}));return{id:"katex",init:function(n){t=n;let i=t.getConfig().katex||{},s={...e,...i};const{local:l,version:o,extensions:r,...c}=s;let d=s.local||"https://cdn.jsdelivr.net/npm/katex",p=s.local?"":"@"+s.version,u=d+p+"/dist/katex.min.css",h=d+p+"/dist/contrib/mhchem.min.js",x=d+p+"/dist/contrib/auto-render.min.js",m=[d+p+"/dist/katex.min.js"];s.extensions&&s.extensions.includes("mhchem")&&m.push(h),m.push(x);const f=()=>{renderMathInElement(n.getSlidesElement(),c),t.layout()};(t=>{let e=document.createElement("link");e.rel="stylesheet",e.href=t,document.head.appendChild(e)})(u),async function(t){for(const e of t)await a(e)}(m).then((()=>{t.isReady()?f():t.on("ready",f.bind(this))}))}}},MathJax2:t,MathJax3:()=>{let t,e={tex:{inlineMath:[["$","$"],["\\(","\\)"]]},options:{skipHtmlTags:["script","noscript","style","textarea","pre"]},startup:{ready:()=>{MathJax.startup.defaultReady(),MathJax.startup.promise.then((()=>{Reveal.layout()}))}}};return{id:"mathjax3",init:function(a){t=a;let n=t.getConfig().mathjax3||{},i={...e,...n};i.tex={...e.tex,...n.tex},i.options={...e.options,...n.options},i.startup={...e.startup,...n.startup};let s=i.mathjax||"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";i.mathjax=null,window.MathJax=i,function(t,e){let a=document.createElement("script");a.type="text/javascript",a.id="MathJax-script",a.src=t,a.async=!0,a.onload=()=>{"function"==typeof e&&(e.call(),e=null)},document.head.appendChild(a)}(s,(function(){Reveal.addEventListener("slidechanged",(function(t){MathJax.typeset()}))}))}}}});export default a;
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,4 @@
|
||||||
*
|
*
|
||||||
* @author Jon Snyder <snyder.jon@gmail.com>, February 2013
|
* @author Jon Snyder <snyder.jon@gmail.com>, February 2013
|
||||||
*/
|
*/
|
||||||
const e=()=>{let e,t,n,l,o,i,r;function s(){t=document.createElement("div"),t.classList.add("searchbox"),t.style.position="absolute",t.style.top="10px",t.style.right="10px",t.style.zIndex=10,t.innerHTML='<input type="search" class="searchinput" placeholder="Search..." style="vertical-align: top;"/>\n\t\t</span>',n=t.querySelector(".searchinput"),n.style.width="240px",n.style.fontSize="14px",n.style.padding="4px 6px",n.style.color="#000",n.style.background="#fff",n.style.borderRadius="2px",n.style.border="0",n.style.outline="0",n.style.boxShadow="0 2px 18px rgba(0, 0, 0, 0.2)",n.style["-webkit-appearance"]="none",e.getRevealElement().appendChild(t),n.addEventListener("keyup",(function(t){if(13===t.keyCode)t.preventDefault(),function(){if(i){var t=n.value;""===t?(r&&r.remove(),l=null):(r=new c("slidecontent"),l=r.apply(t),o=0)}l&&(l.length&&l.length<=o&&(o=0),l.length>o&&(e.slide(l[o].h,l[o].v),o++))}(),i=!1;else i=!0}),!1),d()}function a(){t||s(),t.style.display="inline",n.focus(),n.select()}function d(){t||s(),t.style.display="none",r&&r.remove()}function c(t,n){var l=document.getElementById(t)||document.body,o=n||"EM",i=new RegExp("^(?:"+o+"|SCRIPT|FORM)$"),r=["#ff6","#a0ffff","#9f9","#f99","#f6f"],s=[],a=0,d="",c=[];this.setRegex=function(e){e=e.replace(/^[^\w]+|[^\w]+$/g,"").replace(/[^\w'-]+/g,"|"),d=new RegExp("("+e+")","i")},this.getRegex=function(){return d.toString().replace(/^\/\\b\(|\)\\b\/i$/g,"").replace(/\|/g," ")},this.hiliteWords=function(t){if(null!=t&&t&&d&&!i.test(t.nodeName)){if(t.hasChildNodes())for(var n=0;n<t.childNodes.length;n++)this.hiliteWords(t.childNodes[n]);var l,p;if(3==t.nodeType)if((l=t.nodeValue)&&(p=d.exec(l))){for(var u=t;null!=u&&"SECTION"!=u.nodeName;)u=u.parentNode;var h=e.getIndices(u),f=c.length,y=!1;for(n=0;n<f;n++)c[n].h===h.h&&c[n].v===h.v&&(y=!0);y||c.push(h),s[p[0].toLowerCase()]||(s[p[0].toLowerCase()]=r[a++%r.length]);var g=document.createElement(o);g.appendChild(document.createTextNode(p[0])),g.style.backgroundColor=s[p[0].toLowerCase()],g.style.fontStyle="inherit",g.style.color="#000";var v=t.splitText(p.index);v.nodeValue=v.nodeValue.substring(p[0].length),t.parentNode.insertBefore(g,v)}}},this.remove=function(){for(var e,t=document.getElementsByTagName(o);t.length&&(e=t[0]);)e.parentNode.replaceChild(e.firstChild,e)},this.apply=function(e){if(null!=e&&e)return this.remove(),this.setRegex(e),this.hiliteWords(l),c}}return{id:"search",init:n=>{e=n,e.registerKeyboardShortcut("CTRL + Shift + F","Search"),document.addEventListener("keydown",(function(e){"F"==e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),t||s(),"inline"!==t.style.display?a():d())}),!1)},open:a}};export{e as default};
|
export default()=>{let e,t,n,l,i,o,r;function s(){t=document.createElement("div"),t.classList.add("searchbox"),t.style.position="absolute",t.style.top="10px",t.style.right="10px",t.style.zIndex=10,t.innerHTML='<input type="search" class="searchinput" placeholder="Search..." style="vertical-align: top;"/>\n\t\t</span>',n=t.querySelector(".searchinput"),n.style.width="240px",n.style.fontSize="14px",n.style.padding="4px 6px",n.style.color="#000",n.style.background="#fff",n.style.borderRadius="2px",n.style.border="0",n.style.outline="0",n.style.boxShadow="0 2px 18px rgba(0, 0, 0, 0.2)",n.style["-webkit-appearance"]="none",e.getRevealElement().appendChild(t),n.addEventListener("keyup",(function(t){switch(t.keyCode){case 13:t.preventDefault(),function(){if(o){var t=n.value;""===t?(r&&r.remove(),l=null):(r=new c("slidecontent"),l=r.apply(t),i=0)}l&&(l.length&&l.length<=i&&(i=0),l.length>i&&(e.slide(l[i].h,l[i].v),i++))}(),o=!1;break;default:o=!0}}),!1),d()}function a(){t||s(),t.style.display="inline",n.focus(),n.select()}function d(){t||s(),t.style.display="none",r&&r.remove()}function c(t,n){var l=document.getElementById(t)||document.body,i=n||"EM",o=new RegExp("^(?:"+i+"|SCRIPT|FORM)$"),r=["#ff6","#a0ffff","#9f9","#f99","#f6f"],s=[],a=0,d="",c=[];this.setRegex=function(e){e=e.replace(/^[^\w]+|[^\w]+$/g,"").replace(/[^\w'-]+/g,"|"),d=new RegExp("("+e+")","i")},this.getRegex=function(){return d.toString().replace(/^\/\\b\(|\)\\b\/i$/g,"").replace(/\|/g," ")},this.hiliteWords=function(t){if(null!=t&&t&&d&&!o.test(t.nodeName)){if(t.hasChildNodes())for(var n=0;n<t.childNodes.length;n++)this.hiliteWords(t.childNodes[n]);var l,p;if(3==t.nodeType)if((l=t.nodeValue)&&(p=d.exec(l))){for(var u=t;null!=u&&"SECTION"!=u.nodeName;)u=u.parentNode;var h=e.getIndices(u),f=c.length,y=!1;for(n=0;n<f;n++)c[n].h===h.h&&c[n].v===h.v&&(y=!0);y||c.push(h),s[p[0].toLowerCase()]||(s[p[0].toLowerCase()]=r[a++%r.length]);var g=document.createElement(i);g.appendChild(document.createTextNode(p[0])),g.style.backgroundColor=s[p[0].toLowerCase()],g.style.fontStyle="inherit",g.style.color="#000";var v=t.splitText(p.index);v.nodeValue=v.nodeValue.substring(p[0].length),t.parentNode.insertBefore(g,v)}}},this.remove=function(){for(var e,t=document.getElementsByTagName(i);t.length&&(e=t[0]);)e.parentNode.replaceChild(e.firstChild,e)},this.apply=function(e){if(null!=e&&e)return this.remove(),this.setRegex(e),this.hiliteWords(l),c}}return{id:"search",init:n=>{e=n,e.registerKeyboardShortcut("CTRL + Shift + F","Search"),document.addEventListener("keydown",(function(e){"F"==e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),t||s(),"inline"!==t.style.display?a():d())}),!1)},open:a}};
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,4 @@
|
||||||
* by navigatating to that slide and highlighting it.
|
* by navigatating to that slide and highlighting it.
|
||||||
*
|
*
|
||||||
* @author Jon Snyder <snyder.jon@gmail.com>, February 2013
|
* @author Jon Snyder <snyder.jon@gmail.com>, February 2013
|
||||||
*/return()=>{let e,t,n,l,o,i,r;function s(){t=document.createElement("div"),t.classList.add("searchbox"),t.style.position="absolute",t.style.top="10px",t.style.right="10px",t.style.zIndex=10,t.innerHTML='<input type="search" class="searchinput" placeholder="Search..." style="vertical-align: top;"/>\n\t\t</span>',n=t.querySelector(".searchinput"),n.style.width="240px",n.style.fontSize="14px",n.style.padding="4px 6px",n.style.color="#000",n.style.background="#fff",n.style.borderRadius="2px",n.style.border="0",n.style.outline="0",n.style.boxShadow="0 2px 18px rgba(0, 0, 0, 0.2)",n.style["-webkit-appearance"]="none",e.getRevealElement().appendChild(t),n.addEventListener("keyup",(function(t){if(13===t.keyCode)t.preventDefault(),function(){if(i){var t=n.value;""===t?(r&&r.remove(),l=null):(r=new c("slidecontent"),l=r.apply(t),o=0)}l&&(l.length&&l.length<=o&&(o=0),l.length>o&&(e.slide(l[o].h,l[o].v),o++))}(),i=!1;else i=!0}),!1),d()}function a(){t||s(),t.style.display="inline",n.focus(),n.select()}function d(){t||s(),t.style.display="none",r&&r.remove()}function c(t,n){var l=document.getElementById(t)||document.body,o=n||"EM",i=new RegExp("^(?:"+o+"|SCRIPT|FORM)$"),r=["#ff6","#a0ffff","#9f9","#f99","#f6f"],s=[],a=0,d="",c=[];this.setRegex=function(e){e=e.replace(/^[^\w]+|[^\w]+$/g,"").replace(/[^\w'-]+/g,"|"),d=new RegExp("("+e+")","i")},this.getRegex=function(){return d.toString().replace(/^\/\\b\(|\)\\b\/i$/g,"").replace(/\|/g," ")},this.hiliteWords=function(t){if(null!=t&&t&&d&&!i.test(t.nodeName)){if(t.hasChildNodes())for(var n=0;n<t.childNodes.length;n++)this.hiliteWords(t.childNodes[n]);var l,f;if(3==t.nodeType)if((l=t.nodeValue)&&(f=d.exec(l))){for(var p=t;null!=p&&"SECTION"!=p.nodeName;)p=p.parentNode;var u=e.getIndices(p),h=c.length,y=!1;for(n=0;n<h;n++)c[n].h===u.h&&c[n].v===u.v&&(y=!0);y||c.push(u),s[f[0].toLowerCase()]||(s[f[0].toLowerCase()]=r[a++%r.length]);var g=document.createElement(o);g.appendChild(document.createTextNode(f[0])),g.style.backgroundColor=s[f[0].toLowerCase()],g.style.fontStyle="inherit",g.style.color="#000";var v=t.splitText(f.index);v.nodeValue=v.nodeValue.substring(f[0].length),t.parentNode.insertBefore(g,v)}}},this.remove=function(){for(var e,t=document.getElementsByTagName(o);t.length&&(e=t[0]);)e.parentNode.replaceChild(e.firstChild,e)},this.apply=function(e){if(null!=e&&e)return this.remove(),this.setRegex(e),this.hiliteWords(l),c}}return{id:"search",init:n=>{e=n,e.registerKeyboardShortcut("CTRL + Shift + F","Search"),document.addEventListener("keydown",(function(e){"F"==e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),t||s(),"inline"!==t.style.display?a():d())}),!1)},open:a}}}));
|
*/return()=>{let e,t,n,l,o,i,r;function s(){t=document.createElement("div"),t.classList.add("searchbox"),t.style.position="absolute",t.style.top="10px",t.style.right="10px",t.style.zIndex=10,t.innerHTML='<input type="search" class="searchinput" placeholder="Search..." style="vertical-align: top;"/>\n\t\t</span>',n=t.querySelector(".searchinput"),n.style.width="240px",n.style.fontSize="14px",n.style.padding="4px 6px",n.style.color="#000",n.style.background="#fff",n.style.borderRadius="2px",n.style.border="0",n.style.outline="0",n.style.boxShadow="0 2px 18px rgba(0, 0, 0, 0.2)",n.style["-webkit-appearance"]="none",e.getRevealElement().appendChild(t),n.addEventListener("keyup",(function(t){switch(t.keyCode){case 13:t.preventDefault(),function(){if(i){var t=n.value;""===t?(r&&r.remove(),l=null):(r=new c("slidecontent"),l=r.apply(t),o=0)}l&&(l.length&&l.length<=o&&(o=0),l.length>o&&(e.slide(l[o].h,l[o].v),o++))}(),i=!1;break;default:i=!0}}),!1),d()}function a(){t||s(),t.style.display="inline",n.focus(),n.select()}function d(){t||s(),t.style.display="none",r&&r.remove()}function c(t,n){var l=document.getElementById(t)||document.body,o=n||"EM",i=new RegExp("^(?:"+o+"|SCRIPT|FORM)$"),r=["#ff6","#a0ffff","#9f9","#f99","#f6f"],s=[],a=0,d="",c=[];this.setRegex=function(e){e=e.replace(/^[^\w]+|[^\w]+$/g,"").replace(/[^\w'-]+/g,"|"),d=new RegExp("("+e+")","i")},this.getRegex=function(){return d.toString().replace(/^\/\\b\(|\)\\b\/i$/g,"").replace(/\|/g," ")},this.hiliteWords=function(t){if(null!=t&&t&&d&&!i.test(t.nodeName)){if(t.hasChildNodes())for(var n=0;n<t.childNodes.length;n++)this.hiliteWords(t.childNodes[n]);var l,f;if(3==t.nodeType)if((l=t.nodeValue)&&(f=d.exec(l))){for(var u=t;null!=u&&"SECTION"!=u.nodeName;)u=u.parentNode;var p=e.getIndices(u),h=c.length,y=!1;for(n=0;n<h;n++)c[n].h===p.h&&c[n].v===p.v&&(y=!0);y||c.push(p),s[f[0].toLowerCase()]||(s[f[0].toLowerCase()]=r[a++%r.length]);var g=document.createElement(o);g.appendChild(document.createTextNode(f[0])),g.style.backgroundColor=s[f[0].toLowerCase()],g.style.fontStyle="inherit",g.style.color="#000";var v=t.splitText(f.index);v.nodeValue=v.nodeValue.substring(f[0].length),t.parentNode.insertBefore(g,v)}}},this.remove=function(){for(var e,t=document.getElementsByTagName(o);t.length&&(e=t[0]);)e.parentNode.replaceChild(e.firstChild,e)},this.apply=function(e){if(null!=e&&e)return this.remove(),this.setRegex(e),this.hiliteWords(l),c}}return{id:"search",init:n=>{e=n,e.registerKeyboardShortcut("CTRL + Shift + F","Search"),document.addEventListener("keydown",(function(e){"F"==e.key&&(e.ctrlKey||e.metaKey)&&(e.preventDefault(),t||s(),"inline"!==t.style.display?a():d())}),!1)},open:a}}}));
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
/*!
|
/*!
|
||||||
* reveal.js Zoom plugin
|
* reveal.js Zoom plugin
|
||||||
*/
|
*/
|
||||||
const e={id:"zoom",init:function(e){e.getRevealElement().addEventListener("mousedown",(function(t){var n=/Linux/.test(window.navigator.platform)?"ctrl":"alt",i=(e.getConfig().zoomKey?e.getConfig().zoomKey:n)+"Key",d=e.getConfig().zoomLevel?e.getConfig().zoomLevel:2;t[i]&&!e.isOverview()&&(t.preventDefault(),o.to({x:t.clientX,y:t.clientY,scale:d,pan:!1}))}))},destroy:()=>{o.reset()}};var t=()=>e,o=function(){var e=1,t=0,n=0,i=-1,d=-1,l="transform"in document.body.style;function s(t,o){var n=r();if(t.width=t.width||1,t.height=t.height||1,t.x-=(window.innerWidth-t.width*o)/2,t.y-=(window.innerHeight-t.height*o)/2,l)if(1===o)document.body.style.transform="";else{var i=n.x+"px "+n.y+"px",d="translate("+-t.x+"px,"+-t.y+"px) scale("+o+")";document.body.style.transformOrigin=i,document.body.style.transform=d}else 1===o?(document.body.style.position="",document.body.style.left="",document.body.style.top="",document.body.style.width="",document.body.style.height="",document.body.style.zoom=""):(document.body.style.position="relative",document.body.style.left=-(n.x+t.x)/o+"px",document.body.style.top=-(n.y+t.y)/o+"px",document.body.style.width=100*o+"%",document.body.style.height=100*o+"%",document.body.style.zoom=o);e=o,document.documentElement.classList&&(1!==e?document.documentElement.classList.add("zoomed"):document.documentElement.classList.remove("zoomed"))}function c(){var o=.12*window.innerWidth,i=.12*window.innerHeight,d=r();n<i?window.scroll(d.x,d.y-14/e*(1-n/i)):n>window.innerHeight-i&&window.scroll(d.x,d.y+(1-(window.innerHeight-n)/i)*(14/e)),t<o?window.scroll(d.x-14/e*(1-t/o),d.y):t>window.innerWidth-o&&window.scroll(d.x+(1-(window.innerWidth-t)/o)*(14/e),d.y)}function r(){return{x:void 0!==window.scrollX?window.scrollX:window.pageXOffset,y:void 0!==window.scrollY?window.scrollY:window.pageYOffset}}return l&&(document.body.style.transition="transform 0.8s ease"),document.addEventListener("keyup",(function(t){1!==e&&27===t.keyCode&&o.out()})),document.addEventListener("mousemove",(function(o){1!==e&&(t=o.clientX,n=o.clientY)})),{to:function(t){if(1!==e)o.out();else{if(t.x=t.x||0,t.y=t.y||0,t.element){var n=t.element.getBoundingClientRect();t.x=n.left-20,t.y=n.top-20,t.width=n.width+40,t.height=n.height+40}void 0!==t.width&&void 0!==t.height&&(t.scale=Math.max(Math.min(window.innerWidth/t.width,window.innerHeight/t.height),1)),t.scale>1&&(t.x*=t.scale,t.y*=t.scale,s(t,t.scale),!1!==t.pan&&(i=setTimeout((function(){d=setInterval(c,1e3/60)}),800)))}},out:function(){clearTimeout(i),clearInterval(d),s({x:0,y:0},1),e=1},magnify:function(e){this.to(e)},reset:function(){this.out()},zoomLevel:function(){return e}}}();
|
const e={id:"zoom",init:function(e){e.getRevealElement().addEventListener("mousedown",(function(o){var n=/Linux/.test(window.navigator.platform)?"ctrl":"alt",i=(e.getConfig().zoomKey?e.getConfig().zoomKey:n)+"Key",d=e.getConfig().zoomLevel?e.getConfig().zoomLevel:2;o[i]&&!e.isOverview()&&(o.preventDefault(),t.to({x:o.clientX,y:o.clientY,scale:d,pan:!1}))}))},destroy:()=>{t.reset()}};var t=function(){var e=1,o=0,n=0,i=-1,d=-1,l="transform"in document.body.style;function s(t,o){var n=r();if(t.width=t.width||1,t.height=t.height||1,t.x-=(window.innerWidth-t.width*o)/2,t.y-=(window.innerHeight-t.height*o)/2,l)if(1===o)document.body.style.transform="";else{var i=n.x+"px "+n.y+"px",d="translate("+-t.x+"px,"+-t.y+"px) scale("+o+")";document.body.style.transformOrigin=i,document.body.style.transform=d}else 1===o?(document.body.style.position="",document.body.style.left="",document.body.style.top="",document.body.style.width="",document.body.style.height="",document.body.style.zoom=""):(document.body.style.position="relative",document.body.style.left=-(n.x+t.x)/o+"px",document.body.style.top=-(n.y+t.y)/o+"px",document.body.style.width=100*o+"%",document.body.style.height=100*o+"%",document.body.style.zoom=o);e=o,document.documentElement.classList&&(1!==e?document.documentElement.classList.add("zoomed"):document.documentElement.classList.remove("zoomed"))}function c(){var t=.12*window.innerWidth,i=.12*window.innerHeight,d=r();n<i?window.scroll(d.x,d.y-14/e*(1-n/i)):n>window.innerHeight-i&&window.scroll(d.x,d.y+(1-(window.innerHeight-n)/i)*(14/e)),o<t?window.scroll(d.x-14/e*(1-o/t),d.y):o>window.innerWidth-t&&window.scroll(d.x+(1-(window.innerWidth-o)/t)*(14/e),d.y)}function r(){return{x:void 0!==window.scrollX?window.scrollX:window.pageXOffset,y:void 0!==window.scrollY?window.scrollY:window.pageYOffset}}return l&&(document.body.style.transition="transform 0.8s ease"),document.addEventListener("keyup",(function(o){1!==e&&27===o.keyCode&&t.out()})),document.addEventListener("mousemove",(function(t){1!==e&&(o=t.clientX,n=t.clientY)})),{to:function(o){if(1!==e)t.out();else{if(o.x=o.x||0,o.y=o.y||0,o.element){var n=o.element.getBoundingClientRect();o.x=n.left-20,o.y=n.top-20,o.width=n.width+40,o.height=n.height+40}void 0!==o.width&&void 0!==o.height&&(o.scale=Math.max(Math.min(window.innerWidth/o.width,window.innerHeight/o.height),1)),o.scale>1&&(o.x*=o.scale,o.y*=o.scale,s(o,o.scale),!1!==o.pan&&(i=setTimeout((function(){d=setInterval(c,1e3/60)}),800)))}},out:function(){clearTimeout(i),clearInterval(d),s({x:0,y:0},1),e=1},magnify:function(e){this.to(e)},reset:function(){this.out()},zoomLevel:function(){return e}}}();
|
||||||
/*!
|
/*!
|
||||||
* zoom.js 0.3 (modified for use with reveal.js)
|
* zoom.js 0.3 (modified for use with reveal.js)
|
||||||
* http://lab.hakim.se/zoom-js
|
* http://lab.hakim.se/zoom-js
|
||||||
* MIT licensed
|
* MIT licensed
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se
|
* Copyright (C) 2011-2014 Hakim El Hattab, http://hakim.se
|
||||||
*/export{t as default};
|
*/export default()=>e;
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@
|
||||||
--r-heading1-size: 1.5em;
|
--r-heading1-size: 1.5em;
|
||||||
}
|
}
|
||||||
.footnotes {
|
.footnotes {
|
||||||
font-size: 0.8rem;
|
margin-top: 1em;
|
||||||
|
font-size: 0.6em;
|
||||||
}
|
}
|
||||||
fnref {
|
fnref {
|
||||||
font-size: 0.9rem;
|
font-size: 0.7em;
|
||||||
vertical-align: super;
|
vertical-align: super;
|
||||||
}
|
}
|
||||||
.footnotes li {
|
.footnotes li {
|
||||||
|
|
@ -29,10 +30,16 @@ fnref {
|
||||||
height: 400px;
|
height: 400px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.reveal .slide-number {
|
||||||
|
font-size: 20px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen {
|
||||||
.meta {
|
.meta {
|
||||||
padding: 0.1em 0.5em;
|
padding: 0.1em 0.5em;
|
||||||
background-color: #3c004d;
|
background-color: #3c004d;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.reveal pre {
|
.reveal pre {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
|
||||||