nixcon2022

This commit is contained in:
Jade Lovelace 2022-10-23 23:11:00 +02:00 committed by Jade Lovelace
parent d7bab9d001
commit dceda9c790
28 changed files with 26804 additions and 52 deletions

View file

@ -1 +1 @@
node_modules *.mp4

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View 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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 40 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 909 KiB

View file

@ -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" &rightarrow; 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 &gt; python3Closure.svg` <pre><code class="text">nix-closure-graph nixpkgs#python3 &gt; 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>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -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;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -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}};

View file

@ -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}}}));

View file

@ -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;

View file

@ -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,9 +30,15 @@ fnref {
height: 400px; height: 400px;
} }
.meta { .reveal .slide-number {
font-size: 20px !important;
}
@media screen {
.meta {
padding: 0.1em 0.5em; padding: 0.1em 0.5em;
background-color: #3c004d; background-color: #3c004d;
}
} }
.reveal pre { .reveal pre {