diff --git a/lecture-impl.html b/lecture-impl.html index 2e78ba5..09948be 100644 --- a/lecture-impl.html +++ b/lecture-impl.html @@ -10,7 +10,7 @@ * @size 4:3 960px 720px */div#p>svg>foreignObject>section{--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-fg-subtle:#6e7781;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-attention-subtle:#fff8c5;--color-danger-fg:#cf222e;color-scheme:light}div#p>svg>foreignObject>section:where(.invert){--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-brackethighlighter-unmatched:#f85149;--color-prettylights-syntax-invalid-illegal-text:#f0f6fc;--color-prettylights-syntax-invalid-illegal-bg:#8e1519;--color-prettylights-syntax-carriage-return-text:#f0f6fc;--color-prettylights-syntax-carriage-return-bg:#b62324;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-markup-list:#f2cc60;--color-prettylights-syntax-markup-heading:#1f6feb;--color-prettylights-syntax-markup-italic:#c9d1d9;--color-prettylights-syntax-markup-bold:#c9d1d9;--color-prettylights-syntax-markup-deleted-text:#ffdcd7;--color-prettylights-syntax-markup-deleted-bg:#67060c;--color-prettylights-syntax-markup-inserted-text:#aff5b4;--color-prettylights-syntax-markup-inserted-bg:#033a16;--color-prettylights-syntax-markup-changed-text:#ffdfb6;--color-prettylights-syntax-markup-changed-bg:#5a1e02;--color-prettylights-syntax-markup-ignored-text:#c9d1d9;--color-prettylights-syntax-markup-ignored-bg:#1158c7;--color-prettylights-syntax-meta-diff-range:#d2a8ff;--color-prettylights-syntax-brackethighlighter-angle:#8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-fg-subtle:#6e7681;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:hsla(215,8%,47%,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-attention-subtle:rgba(187,128,9,.15);--color-danger-fg:#f85149;color-scheme:dark}div#p>svg>foreignObject>section{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-wrap:break-word;background-color:var(--color-canvas-default);color:var(--color-fg-default);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;line-height:1.5;margin:0}div#p>svg>foreignObject>section{--marpit-root-font-size:16px}div#p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor .octicon-link:before{background-color:currentColor;content:" ";display:inline-block;height:16px;-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,');mask-image:url('data:image/svg+xml;charset=utf-8,');width:16px}div#p>svg>foreignObject>section details,div#p>svg>foreignObject>section figcaption,div#p>svg>foreignObject>section figure{display:block}div#p>svg>foreignObject>section summary{display:list-item}div#p>svg>foreignObject>section [hidden]{display:none!important}div#p>svg>foreignObject>section a{background-color:transparent;color:var(--color-accent-fg);text-decoration:none}div#p>svg>foreignObject>section abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}div#p>svg>foreignObject>section b,div#p>svg>foreignObject>section strong{font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section dfn{font-style:italic}div#p>svg>foreignObject>section :is(h1,marp-h1){border-bottom:1px solid var(--color-border-muted);font-size:2em;font-weight:var(--base-text-weight-semibold,600);margin:.67em 0;padding-bottom:.3em}div#p>svg>foreignObject>section mark{background-color:var(--color-attention-subtle);color:var(--color-fg-default)}div#p>svg>foreignObject>section small{font-size:90%}div#p>svg>foreignObject>section sub,div#p>svg>foreignObject>section sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}div#p>svg>foreignObject>section sub{bottom:-.25em}div#p>svg>foreignObject>section sup{top:-.5em}div#p>svg>foreignObject>section img{background-color:var(--color-canvas-default);border-style:none;box-sizing:content-box;max-width:100%}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section kbd,div#p>svg>foreignObject>section samp{font-family:monospace;font-size:1em}div#p>svg>foreignObject>section figure{margin:1em 40px}div#p>svg>foreignObject>section hr{background:transparent;background-color:var(--color-border-default);border:0;box-sizing:content-box;height:.25em;margin:24px 0;overflow:hidden;padding:0}div#p>svg>foreignObject>section input{font:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible}div#p>svg>foreignObject>section [type=button],div#p>svg>foreignObject>section [type=reset],div#p>svg>foreignObject>section [type=submit]{-webkit-appearance:button}div#p>svg>foreignObject>section [type=checkbox],div#p>svg>foreignObject>section [type=radio]{box-sizing:border-box;padding:0}div#p>svg>foreignObject>section [type=number]::-webkit-inner-spin-button,div#p>svg>foreignObject>section [type=number]::-webkit-outer-spin-button{height:auto}div#p>svg>foreignObject>section [type=search]::-webkit-search-cancel-button,div#p>svg>foreignObject>section [type=search]::-webkit-search-decoration{-webkit-appearance:none}div#p>svg>foreignObject>section ::-webkit-input-placeholder{color:inherit;opacity:.54}div#p>svg>foreignObject>section ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}div#p>svg>foreignObject>section a:hover{text-decoration:underline}div#p>svg>foreignObject>section ::-moz-placeholder{color:var(--color-fg-subtle);opacity:1}div#p>svg>foreignObject>section ::placeholder{color:var(--color-fg-subtle);opacity:1}div#p>svg>foreignObject>section hr:after,div#p>svg>foreignObject>section hr:before{content:"";display:table}div#p>svg>foreignObject>section hr:after{clear:both}div#p>svg>foreignObject>section table{border-collapse:collapse;border-spacing:0;display:block;max-width:100%;overflow:auto;width:-moz-max-content;width:max-content}div#p>svg>foreignObject>section td,div#p>svg>foreignObject>section th{padding:0}div#p>svg>foreignObject>section details summary{cursor:pointer}div#p>svg>foreignObject>section details:not([open])>:not(summary){display:none!important}div#p>svg>foreignObject>section [role=button]:focus,div#p>svg>foreignObject>section a:focus,div#p>svg>foreignObject>section input[type=checkbox]:focus,div#p>svg>foreignObject>section input[type=radio]:focus{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:-2px}div#p>svg>foreignObject>section [role=button]:focus:not(:focus-visible),div#p>svg>foreignObject>section a:focus:not(:focus-visible),div#p>svg>foreignObject>section input[type=checkbox]:focus:not(:focus-visible),div#p>svg>foreignObject>section input[type=radio]:focus:not(:focus-visible){outline:1px solid transparent}div#p>svg>foreignObject>section [role=button]:focus-visible,div#p>svg>foreignObject>section a:focus-visible,div#p>svg>foreignObject>section input[type=checkbox]:focus-visible,div#p>svg>foreignObject>section input[type=radio]:focus-visible{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:-2px}div#p>svg>foreignObject>section a:not([class]):focus,div#p>svg>foreignObject>section a:not([class]):focus-visible,div#p>svg>foreignObject>section input[type=checkbox]:focus,div#p>svg>foreignObject>section input[type=checkbox]:focus-visible,div#p>svg>foreignObject>section input[type=radio]:focus,div#p>svg>foreignObject>section input[type=radio]:focus-visible{outline-offset:0}div#p>svg>foreignObject>section kbd{background-color:var(--color-canvas-subtle);border-bottom-color:var(--color-neutral-muted);border:1px solid var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted);color:var(--color-fg-default);display:inline-block;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}div#p>svg>foreignObject>section :is(h1,marp-h1),div#p>svg>foreignObject>section :is(h2,marp-h2),div#p>svg>foreignObject>section :is(h3,marp-h3),div#p>svg>foreignObject>section :is(h4,marp-h4),div#p>svg>foreignObject>section :is(h5,marp-h5),div#p>svg>foreignObject>section :is(h6,marp-h6){font-weight:var(--base-text-weight-semibold,600);line-height:1.25;margin-bottom:16px;margin-top:24px}div#p>svg>foreignObject>section :is(h2,marp-h2){border-bottom:1px solid var(--color-border-muted);font-size:1.5em;padding-bottom:.3em}div#p>svg>foreignObject>section :is(h2,marp-h2),div#p>svg>foreignObject>section :is(h3,marp-h3){font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section :is(h3,marp-h3){font-size:1.25em}div#p>svg>foreignObject>section :is(h4,marp-h4){font-size:1em}div#p>svg>foreignObject>section :is(h4,marp-h4),div#p>svg>foreignObject>section :is(h5,marp-h5){font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section :is(h5,marp-h5){font-size:.875em}div#p>svg>foreignObject>section :is(h6,marp-h6){color:var(--color-fg-muted);font-size:.85em;font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section p{margin-bottom:10px;margin-top:0}div#p>svg>foreignObject>section blockquote{border-left:.25em solid var(--color-border-default);color:var(--color-fg-muted);margin:0;padding:0 1em}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{margin-bottom:0;margin-top:0;padding-left:2em}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ul ol{list-style-type:lower-roman}div#p>svg>foreignObject>section ol ol ol,div#p>svg>foreignObject>section ol ul ol,div#p>svg>foreignObject>section ul ol ol,div#p>svg>foreignObject>section ul ul ol{list-style-type:lower-alpha}div#p>svg>foreignObject>section dd{margin-left:0}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section samp,div#p>svg>foreignObject>section tt{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}div#p>svg>foreignObject>section :is(pre,marp-pre){word-wrap:normal;margin-bottom:0;margin-top:0}div#p>svg>foreignObject>section .octicon{fill:currentColor;display:inline-block;overflow:visible!important;vertical-align:text-bottom}div#p>svg>foreignObject>section input::-webkit-inner-spin-button,div#p>svg>foreignObject>section input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}div#p>svg>foreignObject>section:after,div#p>svg>foreignObject>section:before{ /* content:""; */display:table}div#p>svg>foreignObject>section:after{clear:both}div#p>svg>foreignObject>section>:first-child{margin-top:0!important}div#p>svg>foreignObject>section>:last-child{margin-bottom:0!important}div#p>svg>foreignObject>section a:not([href]){color:inherit;text-decoration:none}div#p>svg>foreignObject>section .absent{color:var(--color-danger-fg)}div#p>svg>foreignObject>section .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}div#p>svg>foreignObject>section .anchor:focus{outline:none}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section details,div#p>svg>foreignObject>section dl,div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section p,div#p>svg>foreignObject>section table,div#p>svg>foreignObject>section ul{margin-bottom:16px;margin-top:0}div#p>svg>foreignObject>section blockquote>:first-child{margin-top:0}div#p>svg>foreignObject>section blockquote>:last-child{margin-bottom:0}div#p>svg>foreignObject>section :is(h1,marp-h1) .octicon-link,div#p>svg>foreignObject>section :is(h2,marp-h2) .octicon-link,div#p>svg>foreignObject>section :is(h3,marp-h3) .octicon-link,div#p>svg>foreignObject>section :is(h4,marp-h4) .octicon-link,div#p>svg>foreignObject>section :is(h5,marp-h5) .octicon-link,div#p>svg>foreignObject>section :is(h6,marp-h6) .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}div#p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor,div#p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor,div#p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor,div#p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor,div#p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor,div#p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor{text-decoration:none}div#p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor .octicon-link{visibility:visible}div#p>svg>foreignObject>section :is(h1,marp-h1) code,div#p>svg>foreignObject>section :is(h1,marp-h1) tt,div#p>svg>foreignObject>section :is(h2,marp-h2) code,div#p>svg>foreignObject>section :is(h2,marp-h2) tt,div#p>svg>foreignObject>section :is(h3,marp-h3) code,div#p>svg>foreignObject>section :is(h3,marp-h3) tt,div#p>svg>foreignObject>section :is(h4,marp-h4) code,div#p>svg>foreignObject>section :is(h4,marp-h4) tt,div#p>svg>foreignObject>section :is(h5,marp-h5) code,div#p>svg>foreignObject>section :is(h5,marp-h5) tt,div#p>svg>foreignObject>section :is(h6,marp-h6) code,div#p>svg>foreignObject>section :is(h6,marp-h6) tt{font-size:inherit;padding:0 .2em}div#p>svg>foreignObject>section summary :is(h1,marp-h1),div#p>svg>foreignObject>section summary :is(h2,marp-h2),div#p>svg>foreignObject>section summary :is(h3,marp-h3),div#p>svg>foreignObject>section summary :is(h4,marp-h4),div#p>svg>foreignObject>section summary :is(h5,marp-h5),div#p>svg>foreignObject>section summary :is(h6,marp-h6){display:inline-block}div#p>svg>foreignObject>section summary :is(h1,marp-h1) .anchor,div#p>svg>foreignObject>section summary :is(h2,marp-h2) .anchor,div#p>svg>foreignObject>section summary :is(h3,marp-h3) .anchor,div#p>svg>foreignObject>section summary :is(h4,marp-h4) .anchor,div#p>svg>foreignObject>section summary :is(h5,marp-h5) .anchor,div#p>svg>foreignObject>section summary :is(h6,marp-h6) .anchor{margin-left:-40px}div#p>svg>foreignObject>section summary :is(h1,marp-h1),div#p>svg>foreignObject>section summary :is(h2,marp-h2){border-bottom:0;padding-bottom:0}div#p>svg>foreignObject>section ol.no-list,div#p>svg>foreignObject>section ul.no-list{list-style-type:none;padding:0}div#p>svg>foreignObject>section ol[type=a]{list-style-type:lower-alpha}div#p>svg>foreignObject>section ol[type=A]{list-style-type:upper-alpha}div#p>svg>foreignObject>section ol[type=i]{list-style-type:lower-roman}div#p>svg>foreignObject>section ol[type=I]{list-style-type:upper-roman}div#p>svg>foreignObject>section div>ol:not([type]),div#p>svg>foreignObject>section ol[type="1"]{list-style-type:decimal}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ol ul,div#p>svg>foreignObject>section ul ol,div#p>svg>foreignObject>section ul ul{margin-bottom:0;margin-top:0}div#p>svg>foreignObject>section li>p{margin-top:16px}div#p>svg>foreignObject>section li+li{margin-top:.25em}div#p>svg>foreignObject>section dl{padding:0}div#p>svg>foreignObject>section dl dt{font-size:1em;font-style:italic;font-weight:var(--base-text-weight-semibold,600);margin-top:16px;padding:0}div#p>svg>foreignObject>section dl dd{margin-bottom:16px;padding:0 16px}div#p>svg>foreignObject>section table th{font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section table td,div#p>svg>foreignObject>section table th{border:1px solid var(--color-border-default);padding:6px 13px}div#p>svg>foreignObject>section table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}div#p>svg>foreignObject>section table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}div#p>svg>foreignObject>section table img{background-color:transparent}div#p>svg>foreignObject>section img[align=right]{padding-left:20px}div#p>svg>foreignObject>section img[align=left]{padding-right:20px}div#p>svg>foreignObject>section .emoji{background-color:transparent;max-width:none;vertical-align:text-top}div#p>svg>foreignObject>section :is(span,marp-span).frame,div#p>svg>foreignObject>section :is(span,marp-span).frame>:is(span,marp-span){display:block;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).frame>:is(span,marp-span){border:1px solid var(--color-border-default);float:left;margin:13px 0 0;padding:7px;width:auto}div#p>svg>foreignObject>section :is(span,marp-span).frame :is(span,marp-span) img{display:block;float:left}div#p>svg>foreignObject>section :is(span,marp-span).frame :is(span,marp-span) :is(span,marp-span){clear:both;color:var(--color-fg-default);display:block;padding:5px 0 0}div#p>svg>foreignObject>section :is(span,marp-span).align-center{clear:both;display:block;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).align-center>:is(span,marp-span){display:block;margin:13px auto 0;overflow:hidden;text-align:center}div#p>svg>foreignObject>section :is(span,marp-span).align-center :is(span,marp-span) img{margin:0 auto;text-align:center}div#p>svg>foreignObject>section :is(span,marp-span).align-right{clear:both;display:block;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).align-right>:is(span,marp-span){display:block;margin:13px 0 0;overflow:hidden;text-align:right}div#p>svg>foreignObject>section :is(span,marp-span).align-right :is(span,marp-span) img{margin:0;text-align:right}div#p>svg>foreignObject>section :is(span,marp-span).float-left{display:block;float:left;margin-right:13px;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).float-left :is(span,marp-span){margin:13px 0 0}div#p>svg>foreignObject>section :is(span,marp-span).float-right{display:block;float:right;margin-left:13px;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).float-right>:is(span,marp-span){display:block;margin:13px auto 0;overflow:hidden;text-align:right}div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section tt{background-color:var(--color-neutral-muted);border-radius:6px;font-size:85%;margin:0;padding:.2em .4em;white-space:break-spaces}div#p>svg>foreignObject>section code br,div#p>svg>foreignObject>section tt br{display:none}div#p>svg>foreignObject>section del code{text-decoration:inherit}div#p>svg>foreignObject>section samp{font-size:85%}div#p>svg>foreignObject>section :is(pre,marp-pre) code{font-size:100%}div#p>svg>foreignObject>section :is(pre,marp-pre)>code{background:transparent;border:0;margin:0;padding:0;white-space:pre;word-break:normal}div#p>svg>foreignObject>section .highlight{margin-bottom:16px}div#p>svg>foreignObject>section .highlight :is(pre,marp-pre){margin-bottom:0;word-break:normal}div#p>svg>foreignObject>section :is(pre,marp-pre){background-color:var(--color-canvas-subtle);border-radius:6px;font-size:85%;line-height:1.45;overflow:auto;padding:16px}div#p>svg>foreignObject>section :is(pre,marp-pre) code,div#p>svg>foreignObject>section :is(pre,marp-pre) tt{word-wrap:normal;background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0}div#p>svg>foreignObject>section .csv-data td,div#p>svg>foreignObject>section .csv-data th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}div#p>svg>foreignObject>section .csv-data .blob-num{background:var(--color-canvas-default);border:0;padding:10px 8px 9px;text-align:right}div#p>svg>foreignObject>section .csv-data tr{border-top:0}div#p>svg>foreignObject>section .csv-data th{background:var(--color-canvas-subtle);border-top:0;font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section [data-footnote-ref]:before{content:"["}div#p>svg>foreignObject>section [data-footnote-ref]:after{content:"]"}div#p>svg>foreignObject>section .footnotes{border-top:1px solid var(--color-border-default);color:var(--color-fg-muted);font-size:12px}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.footnotes{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .footnotes ol{padding-left:16px}div#p>svg>foreignObject>section .footnotes ol ul{display:inline-block;margin-top:16px;padding-left:16px}div#p>svg>foreignObject>section .footnotes li{position:relative}div#p>svg>foreignObject>section .footnotes li:target:before{border:2px solid var(--color-accent-emphasis);border-radius:6px;bottom:-8px;content:"";left:-24px;pointer-events:none;position:absolute;right:-8px;top:-8px}div#p>svg>foreignObject>section .footnotes li:target{color:var(--color-fg-default)}div#p>svg>foreignObject>section .footnotes .data-footnote-backref g-emoji{font-family:monospace}div#p>svg>foreignObject>section .pl-c{color:var(--color-prettylights-syntax-comment)}div#p>svg>foreignObject>section .pl-c1,div#p>svg>foreignObject>section .pl-s .pl-v{color:var(--color-prettylights-syntax-constant)}div#p>svg>foreignObject>section .pl-e,div#p>svg>foreignObject>section .pl-en{color:var(--color-prettylights-syntax-entity)}div#p>svg>foreignObject>section .pl-s .pl-s1,div#p>svg>foreignObject>section .pl-smi{color:var(--color-prettylights-syntax-storage-modifier-import)}div#p>svg>foreignObject>section .pl-ent{color:var(--color-prettylights-syntax-entity-tag)}div#p>svg>foreignObject>section .pl-k{color:var(--color-prettylights-syntax-keyword)}div#p>svg>foreignObject>section .pl-pds,div#p>svg>foreignObject>section .pl-s,div#p>svg>foreignObject>section .pl-s .pl-pse .pl-s1,div#p>svg>foreignObject>section .pl-sr,div#p>svg>foreignObject>section .pl-sr .pl-cce,div#p>svg>foreignObject>section .pl-sr .pl-sra,div#p>svg>foreignObject>section .pl-sr .pl-sre{color:var(--color-prettylights-syntax-string)}div#p>svg>foreignObject>section .pl-smw,div#p>svg>foreignObject>section .pl-v{color:var(--color-prettylights-syntax-variable)}div#p>svg>foreignObject>section .pl-bu{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}div#p>svg>foreignObject>section .pl-ii{background-color:var(--color-prettylights-syntax-invalid-illegal-bg);color:var(--color-prettylights-syntax-invalid-illegal-text)}div#p>svg>foreignObject>section .pl-c2{background-color:var(--color-prettylights-syntax-carriage-return-bg);color:var(--color-prettylights-syntax-carriage-return-text)}div#p>svg>foreignObject>section .pl-sr .pl-cce{color:var(--color-prettylights-syntax-string-regexp);font-weight:700}div#p>svg>foreignObject>section .pl-ml{color:var(--color-prettylights-syntax-markup-list)}div#p>svg>foreignObject>section .pl-mh,div#p>svg>foreignObject>section .pl-mh .pl-en,div#p>svg>foreignObject>section .pl-ms{color:var(--color-prettylights-syntax-markup-heading);font-weight:700}div#p>svg>foreignObject>section .pl-mi{color:var(--color-prettylights-syntax-markup-italic);font-style:italic}div#p>svg>foreignObject>section .pl-mb{color:var(--color-prettylights-syntax-markup-bold);font-weight:700}div#p>svg>foreignObject>section .pl-md{background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}div#p>svg>foreignObject>section .pl-mi1{background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}div#p>svg>foreignObject>section .pl-mc{background-color:var(--color-prettylights-syntax-markup-changed-bg);color:var(--color-prettylights-syntax-markup-changed-text)}div#p>svg>foreignObject>section .pl-mi2{background-color:var(--color-prettylights-syntax-markup-ignored-bg);color:var(--color-prettylights-syntax-markup-ignored-text)}div#p>svg>foreignObject>section .pl-mdr{color:var(--color-prettylights-syntax-meta-diff-range);font-weight:700}div#p>svg>foreignObject>section .pl-ba{color:var(--color-prettylights-syntax-brackethighlighter-angle)}div#p>svg>foreignObject>section .pl-sg{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}div#p>svg>foreignObject>section .pl-corl{color:var(--color-prettylights-syntax-constant-other-reference-link);text-decoration:underline}div#p>svg>foreignObject>section g-emoji{display:inline-block;font-family:Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1em;font-style:normal!important;font-weight:var(--base-text-weight-normal,400);line-height:1;min-width:1ch;vertical-align:-.075em}div#p>svg>foreignObject>section g-emoji img{height:1em;width:1em}div#p>svg>foreignObject>section .task-list-item{list-style-type:none}div#p>svg>foreignObject>section .task-list-item label{font-weight:var(--base-text-weight-normal,400)}div#p>svg>foreignObject>section .task-list-item.enabled label{cursor:pointer}div#p>svg>foreignObject>section .task-list-item+.task-list-item{margin-top:4px}div#p>svg>foreignObject>section .task-list-item .handle{display:none}div#p>svg>foreignObject>section .task-list-item-checkbox{margin:0 .2em .25em -1.4em;vertical-align:middle}div#p>svg>foreignObject>section .contains-task-list:dir(rtl) .task-list-item-checkbox{margin:0 -1.6em .25em .2em}div#p>svg>foreignObject>section .contains-task-list{position:relative}div#p>svg>foreignObject>section .contains-task-list:focus-within .task-list-item-convert-container,div#p>svg>foreignObject>section .contains-task-list:hover .task-list-item-convert-container{clip:auto;display:block;height:24px;overflow:visible;width:auto}div#p>svg>foreignObject>section ::-webkit-calendar-picker-indicator{filter:invert(50%)}div#p>svg>foreignObject>section :is(h1,marp-h1){color:var(--h1-color);font-size:1.6em}div#p>svg>foreignObject>section :is(h1,marp-h1),div#p>svg>foreignObject>section :is(h2,marp-h2){border-bottom:none}div#p>svg>foreignObject>section :is(h2,marp-h2){font-size:1.3em}div#p>svg>foreignObject>section :is(h3,marp-h3){font-size:1.1em}div#p>svg>foreignObject>section :is(h4,marp-h4){font-size:1.05em}div#p>svg>foreignObject>section :is(h5,marp-h5){font-size:1em}div#p>svg>foreignObject>section :is(h6,marp-h6){font-size:.9em}div#p>svg>foreignObject>section :is(h1,marp-h1) strong,div#p>svg>foreignObject>section :is(h2,marp-h2) strong,div#p>svg>foreignObject>section :is(h3,marp-h3) strong,div#p>svg>foreignObject>section :is(h4,marp-h4) strong,div#p>svg>foreignObject>section :is(h5,marp-h5) strong,div#p>svg>foreignObject>section :is(h6,marp-h6) strong{color:var(--heading-strong-color);font-weight:inherit}div#p>svg>foreignObject>section :is(h1,marp-h1)::part(auto-scaling),div#p>svg>foreignObject>section :is(h2,marp-h2)::part(auto-scaling),div#p>svg>foreignObject>section :is(h3,marp-h3)::part(auto-scaling),div#p>svg>foreignObject>section :is(h4,marp-h4)::part(auto-scaling),div#p>svg>foreignObject>section :is(h5,marp-h5)::part(auto-scaling),div#p>svg>foreignObject>section :is(h6,marp-h6)::part(auto-scaling){max-height:563px}div#p>svg>foreignObject>section hr{height:0;padding-top:.25em}div#p>svg>foreignObject>section :is(pre,marp-pre){border:1px solid var(--color-border-default);line-height:1.15;overflow:visible}div#p>svg>foreignObject>section :is(pre,marp-pre)::part(auto-scaling){max-height:529px}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs){color:var(--color-prettylights-syntax-storage-modifier-import)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-doctag),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-keyword),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta .hljs-keyword),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-template-tag),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-template-variable),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-type),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-variable.language_){color:var(--color-prettylights-syntax-keyword)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.class_),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.class_.inherited__),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.function_){color:var(--color-prettylights-syntax-entity)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-attr),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-attribute),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-literal),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-number),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-operator),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-attr),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-class),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-id),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-variable){color:var(--color-prettylights-syntax-constant)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta .hljs-string),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-regexp),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-string){color:var(--color-prettylights-syntax-string)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-built_in),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-symbol){color:var(--color-prettylights-syntax-variable)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-code),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-comment),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-formula){color:var(--color-prettylights-syntax-comment)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-name),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-quote),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-pseudo),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-tag){color:var(--color-prettylights-syntax-entity-tag)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-subst){color:var(--color-prettylights-syntax-storage-modifier-import)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-section){color:var(--color-prettylights-syntax-markup-heading);font-weight:700}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-bullet){color:var(--color-prettylights-syntax-markup-list)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-emphasis){color:var(--color-prettylights-syntax-markup-italic);font-style:italic}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-strong){color:var(--color-prettylights-syntax-markup-bold);font-weight:700}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-addition){background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-deletion){background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}div#p>svg>foreignObject>section footer,div#p>svg>foreignObject>section header{color:var(--header-footer-color);font-size:18px;left:30px;margin:0;position:absolute}div#p>svg>foreignObject>section header{top:21px}div#p>svg>foreignObject>section footer{bottom:21px}div#p>svg>foreignObject>section{--h1-color:#246;--header-footer-color:hsla(0,0%,40%,.75);--heading-strong-color:#48c;--paginate-color:#777;align-items:stretch;display:flex;flex-flow:column nowrap;font-size:29px;height:720px;justify-content:center;padding:78.5px;width:1280px}div#p>svg>foreignObject>section{--marpit-root-font-size:29px}div#p>svg>foreignObject>section:where(.invert){--h1-color:#cee7ff;--header-footer-color:hsla(0,0%,60%,.75);--heading-strong-color:#7bf;--paginate-color:#999}div#p>svg>foreignObject>section>:last-child,div#p>svg>foreignObject>section[data-footer]>:nth-last-child(2){margin-bottom:0}div#p>svg>foreignObject>section>:first-child,div#p>svg>foreignObject>section>header:first-child+*{margin-top:0}div#p>svg>foreignObject>section:after{bottom:21px;color:var(--paginate-color);font-size:24px;padding:0;position:absolute;right:30px}div#p>svg>foreignObject>section:after{--marpit-root-font-size:24px}div#p>svg>foreignObject>section[data-color] :is(h1,marp-h1),div#p>svg>foreignObject>section[data-color] :is(h2,marp-h2),div#p>svg>foreignObject>section[data-color] :is(h3,marp-h3),div#p>svg>foreignObject>section[data-color] :is(h4,marp-h4),div#p>svg>foreignObject>section[data-color] :is(h5,marp-h5),div#p>svg>foreignObject>section[data-color] :is(h6,marp-h6){color:currentcolor}div#p>svg>foreignObject>section img[data-marp-twemoji]{background:transparent;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em;width:1em} -/* @theme shin */div#p>svg>foreignObject>:where(section):not([root]){--color-font-main:#012F4B;--color-font-sub:#0f3b57;--color-font-accent:rgb(201,57,64);--color-background:#EBEEF9}div#p>svg>foreignObject>section{font-family:"Noto Sans","Noto Sans JP";justify-content:start;background-color:var(--color-background);color:var(--color-font-main);padding:30px 70px}div#p>svg>foreignObject>section ::selection{background-color:rgba(255,255,0,0.5)}div#p>svg>foreignObject>section.title{padding-top:400px}div#p>svg>foreignObject>section sub{bottom:0}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section code{font-family:consolas,"Noto Sans JP";color:var(--color-font-sub);background-color:white;font-weight:500;padding:3px 6px;border:1px solid var(--color-font-main)}div#p>svg>foreignObject>section p:has(+marp-pre){margin-bottom:0;padding-bottom:5px}div#p>svg>foreignObject>section code{font-size:70%;vertical-align:middle}div#p>svg>foreignObject>section :is(pre,marp-pre){margin-left:30px}div#p>svg>foreignObject>section :is(h1,marp-h1){padding:0;font-size:200%;font-weight:900;color:var(--color-font-main)}div#p>svg>foreignObject>section :is(h2,marp-h2){margin:0;padding:10px 0 0 0;color:var(--color-font-main);font-weight:900;padding-bottom:5px}div#p>svg>foreignObject>section ul{list-style-type:"- ";margin-top:0;padding-top:0}div#p>svg>foreignObject>section ol{padding-inline-start:45px}div#p>svg>foreignObject>section u,div#p>svg>foreignObject>section u::selection{text-decoration:underline 8pt;text-decoration-color:#ffc3d6;text-underline-offset:-3px}div#p>svg>foreignObject>section li,div#p>svg>foreignObject>section p{color:var(--color-font-sub);margin-left:30px;font-weight:500;font-size:120%;line-height:1.2;margin-top:0}div#p>svg>foreignObject>section li+li{margin-top:0}div#p>svg>foreignObject>section brr{display:block;content:"";margin-top:.5lh}div#p>svg>foreignObject>section.outline .disabled{color:hsl(203,43%,56%,60%)}div#p>svg>foreignObject>section:after{color:#9badbe}div#p>svg>foreignObject>section blockquote{background-color:#dadfec;position:relative;border:none;padding-left:40px}div#p>svg>foreignObject>section blockquote:after{content:"“";font-family:Arial;font-size:500%;color:#8697a7;display:block;position:absolute;left:5px;top:-55px;bottom:0;margin:auto}div#p>svg>foreignObject>section div.corner-triangle{display:block;width:0px;height:0px;border-style:solid;border-width:0 150px 150px 0;border-color:transparent #608A32 transparent transparent;position:fixed;top:0;right:0;color:white}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text{position:relative;top:40px;right:-60px;width:100px;font-family:consolas,"Noto Sans JP";font-weight:600;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text :is(span,marp-span).corner-triangle-firstline{margin-left:29px}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text a{color:white}div#p>svg>foreignObject>section .bespoke-marp-osc{display:hidden}div#p>svg>foreignObject>section.enshu{background-color:hsl(27,54%,95%)}div#p>svg>foreignObject>section.enshu :is(h1,marp-h1),div#p>svg>foreignObject>section.enshu :is(h2,marp-h2),div#p>svg>foreignObject>section.enshu :is(h3,marp-h3),div#p>svg>foreignObject>section.enshu li,div#p>svg>foreignObject>section.enshu p,div#p>svg>foreignObject>section.enshu ul{color:hsl(23,97%,15%)}div#p>svg>foreignObject>section.outline{background-color:var(--color-font-sub)}div#p>svg>foreignObject>section.outline>.corner-triangle{border-color:transparent var(--color-font-accent) transparent transparent}div#p>svg>foreignObject>section.outline p{margin-left:0}div#p>svg>foreignObject>section.outline :is(h1,marp-h1){font-size:160%}div#p>svg>foreignObject>section.outline :is(h1,marp-h1),div#p>svg>foreignObject>section.outline :is(h2,marp-h2),div#p>svg>foreignObject>section.outline :is(h3,marp-h3),div#p>svg>foreignObject>section.outline li,div#p>svg>foreignObject>section.outline p,div#p>svg>foreignObject>section.outline ul{color:#eff3f5}div#p>svg>foreignObject>section p:has(subb){font-size:70%;font-weight:400}div#p>svg>foreignObject>section .logo{position:absolute;font-family:consolas;font-size:120%;font-weight:bold;line-height:200px;left:630px;top:340px;width:200px;height:200px;border-radius:50%;color:var(--color-background);text-align:center;background:var(--color-font-main)}div#p>svg>foreignObject>section section.logo{--marpit-root-font-size:120%}div#p>svg>foreignObject>section{width:960px;height:720px}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+/* @theme shin */div#p>svg>foreignObject>:where(section):not([root]){--color-font-main:#012F4B;--color-font-sub:#0f3b57;--color-font-accent:rgb(201,57,64);--color-background:#EBEEF9}div#p>svg>foreignObject>section{font-family:"Noto Sans","Noto Sans JP";justify-content:start;background-color:var(--color-background);color:var(--color-font-main);padding:30px 70px}div#p>svg>foreignObject>section ::selection{background-color:rgba(255,255,0,0.5)}div#p>svg>foreignObject>section.title{padding-top:400px}div#p>svg>foreignObject>section sub{bottom:0}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section code{font-family:consolas,"Noto Sans JP";color:var(--color-font-sub);background-color:white;font-weight:500;padding:3px 6px;border:1px solid var(--color-font-main)}div#p>svg>foreignObject>section p:has(+marp-pre){margin-bottom:0;padding-bottom:5px}div#p>svg>foreignObject>section code{font-size:70%;vertical-align:middle}div#p>svg>foreignObject>section :is(pre,marp-pre){margin-left:30px}div#p>svg>foreignObject>section :is(h1,marp-h1){padding:0;font-size:200%;font-weight:900;color:var(--color-font-main)}div#p>svg>foreignObject>section :is(h2,marp-h2){margin:0;padding:10px 0 0 0;color:var(--color-font-main);font-weight:900;padding-bottom:5px}div#p>svg>foreignObject>section ul{list-style-type:"- ";margin-top:0;padding-top:0}div#p>svg>foreignObject>section ol{padding-inline-start:45px}div#p>svg>foreignObject>section u,div#p>svg>foreignObject>section u::selection{text-decoration:underline 8pt;text-decoration-color:#ffc3d6;text-underline-offset:-3px}div#p>svg>foreignObject>section li,div#p>svg>foreignObject>section p{color:var(--color-font-sub);margin-left:30px;font-weight:500;font-size:120%;line-height:1.2;margin-top:0}div#p>svg>foreignObject>section li+li{margin-top:0}div#p>svg>foreignObject>section brr{display:block;content:"";margin-top:.5lh}div#p>svg>foreignObject>section.outline .disabled{color:hsl(203,43%,56%,60%)}div#p>svg>foreignObject>section:after{color:#9badbe}div#p>svg>foreignObject>section blockquote{background-color:#dadfec;position:relative;border:none;padding-left:40px}div#p>svg>foreignObject>section blockquote:after{content:"“";font-family:Arial;font-size:500%;color:#8697a7;display:block;position:absolute;left:5px;top:-55px;bottom:0;margin:auto}div#p>svg>foreignObject>section div.corner-triangle{display:block;width:0px;height:0px;border-style:solid;border-width:0 150px 150px 0;border-color:transparent #608A32 transparent transparent;position:fixed;top:0;right:0;color:white}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text{position:relative;top:40px;right:-60px;width:100px;font-family:consolas,"Noto Sans JP";font-weight:600;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text :is(span,marp-span).corner-triangle-firstline{margin-left:29px}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text a{color:white}div#p>svg>foreignObject>section .bespoke-marp-osc{display:hidden}div#p>svg>foreignObject>section.enshu{background-color:hsl(27,54%,95%)}div#p>svg>foreignObject>section.enshu :is(h1,marp-h1),div#p>svg>foreignObject>section.enshu :is(h2,marp-h2),div#p>svg>foreignObject>section.enshu :is(h3,marp-h3),div#p>svg>foreignObject>section.enshu li,div#p>svg>foreignObject>section.enshu p,div#p>svg>foreignObject>section.enshu ul{color:hsl(23,97%,15%)}div#p>svg>foreignObject>section.outline{background-color:var(--color-font-sub)}div#p>svg>foreignObject>section.outline>.corner-triangle{border-color:transparent var(--color-font-accent) transparent transparent}div#p>svg>foreignObject>section.outline p{margin-left:0}div#p>svg>foreignObject>section.outline :is(h1,marp-h1){font-size:160%}div#p>svg>foreignObject>section.outline :is(h1,marp-h1),div#p>svg>foreignObject>section.outline :is(h2,marp-h2),div#p>svg>foreignObject>section.outline :is(h3,marp-h3),div#p>svg>foreignObject>section.outline li,div#p>svg>foreignObject>section.outline p,div#p>svg>foreignObject>section.outline ul{color:#eff3f5}div#p>svg>foreignObject>section p:has(subb){font-size:70%;font-weight:400}div#p>svg>foreignObject>section .logo{position:absolute;font-family:consolas;font-size:120%;font-weight:bold;line-height:200px;left:630px;top:340px;width:200px;height:200px;border-radius:50%;color:var(--color-background);text-align:center;background:var(--color-font-main)}div#p>svg>foreignObject>section section.logo{--marpit-root-font-size:120%}div#p>svg>foreignObject>section.pd30{padding:30px}div#p>svg>foreignObject>section{width:960px;height:720px}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}

ソフトウェア設計論

まつ本

diff --git a/lecture-test.html b/lecture-test.html index af901df..c12060e 100644 --- a/lecture-test.html +++ b/lecture-test.html @@ -10,22 +10,22 @@ * @size 4:3 960px 720px */div#p>svg>foreignObject>section{--color-prettylights-syntax-comment:#6e7781;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#8250df;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069;--color-fg-default:#24292f;--color-fg-muted:#57606a;--color-fg-subtle:#6e7781;--color-canvas-default:#fff;--color-canvas-subtle:#f6f8fa;--color-border-default:#d0d7de;--color-border-muted:#d8dee4;--color-neutral-muted:rgba(175,184,193,.2);--color-accent-fg:#0969da;--color-accent-emphasis:#0969da;--color-attention-subtle:#fff8c5;--color-danger-fg:#cf222e;color-scheme:light}div#p>svg>foreignObject>section:where(.invert){--color-prettylights-syntax-comment:#8b949e;--color-prettylights-syntax-constant:#79c0ff;--color-prettylights-syntax-entity:#d2a8ff;--color-prettylights-syntax-storage-modifier-import:#c9d1d9;--color-prettylights-syntax-entity-tag:#7ee787;--color-prettylights-syntax-keyword:#ff7b72;--color-prettylights-syntax-string:#a5d6ff;--color-prettylights-syntax-variable:#ffa657;--color-prettylights-syntax-brackethighlighter-unmatched:#f85149;--color-prettylights-syntax-invalid-illegal-text:#f0f6fc;--color-prettylights-syntax-invalid-illegal-bg:#8e1519;--color-prettylights-syntax-carriage-return-text:#f0f6fc;--color-prettylights-syntax-carriage-return-bg:#b62324;--color-prettylights-syntax-string-regexp:#7ee787;--color-prettylights-syntax-markup-list:#f2cc60;--color-prettylights-syntax-markup-heading:#1f6feb;--color-prettylights-syntax-markup-italic:#c9d1d9;--color-prettylights-syntax-markup-bold:#c9d1d9;--color-prettylights-syntax-markup-deleted-text:#ffdcd7;--color-prettylights-syntax-markup-deleted-bg:#67060c;--color-prettylights-syntax-markup-inserted-text:#aff5b4;--color-prettylights-syntax-markup-inserted-bg:#033a16;--color-prettylights-syntax-markup-changed-text:#ffdfb6;--color-prettylights-syntax-markup-changed-bg:#5a1e02;--color-prettylights-syntax-markup-ignored-text:#c9d1d9;--color-prettylights-syntax-markup-ignored-bg:#1158c7;--color-prettylights-syntax-meta-diff-range:#d2a8ff;--color-prettylights-syntax-brackethighlighter-angle:#8b949e;--color-prettylights-syntax-sublimelinter-gutter-mark:#484f58;--color-prettylights-syntax-constant-other-reference-link:#a5d6ff;--color-fg-default:#c9d1d9;--color-fg-muted:#8b949e;--color-fg-subtle:#6e7681;--color-canvas-default:#0d1117;--color-canvas-subtle:#161b22;--color-border-default:#30363d;--color-border-muted:#21262d;--color-neutral-muted:hsla(215,8%,47%,.4);--color-accent-fg:#58a6ff;--color-accent-emphasis:#1f6feb;--color-attention-subtle:rgba(187,128,9,.15);--color-danger-fg:#f85149;color-scheme:dark}div#p>svg>foreignObject>section{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;word-wrap:break-word;background-color:var(--color-canvas-default);color:var(--color-fg-default);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;line-height:1.5;margin:0}div#p>svg>foreignObject>section{--marpit-root-font-size:16px}div#p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor .octicon-link:before,div#p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor .octicon-link:before{background-color:currentColor;content:" ";display:inline-block;height:16px;-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,');mask-image:url('data:image/svg+xml;charset=utf-8,');width:16px}div#p>svg>foreignObject>section details,div#p>svg>foreignObject>section figcaption,div#p>svg>foreignObject>section figure{display:block}div#p>svg>foreignObject>section summary{display:list-item}div#p>svg>foreignObject>section [hidden]{display:none!important}div#p>svg>foreignObject>section a{background-color:transparent;color:var(--color-accent-fg);text-decoration:none}div#p>svg>foreignObject>section abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}div#p>svg>foreignObject>section b,div#p>svg>foreignObject>section strong{font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section dfn{font-style:italic}div#p>svg>foreignObject>section :is(h1,marp-h1){border-bottom:1px solid var(--color-border-muted);font-size:2em;font-weight:var(--base-text-weight-semibold,600);margin:.67em 0;padding-bottom:.3em}div#p>svg>foreignObject>section mark{background-color:var(--color-attention-subtle);color:var(--color-fg-default)}div#p>svg>foreignObject>section small{font-size:90%}div#p>svg>foreignObject>section sub,div#p>svg>foreignObject>section sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}div#p>svg>foreignObject>section sub{bottom:-.25em}div#p>svg>foreignObject>section sup{top:-.5em}div#p>svg>foreignObject>section img{background-color:var(--color-canvas-default);border-style:none;box-sizing:content-box;max-width:100%}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section kbd,div#p>svg>foreignObject>section samp{font-family:monospace;font-size:1em}div#p>svg>foreignObject>section figure{margin:1em 40px}div#p>svg>foreignObject>section hr{background:transparent;background-color:var(--color-border-default);border:0;box-sizing:content-box;height:.25em;margin:24px 0;overflow:hidden;padding:0}div#p>svg>foreignObject>section input{font:inherit;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible}div#p>svg>foreignObject>section [type=button],div#p>svg>foreignObject>section [type=reset],div#p>svg>foreignObject>section [type=submit]{-webkit-appearance:button}div#p>svg>foreignObject>section [type=checkbox],div#p>svg>foreignObject>section [type=radio]{box-sizing:border-box;padding:0}div#p>svg>foreignObject>section [type=number]::-webkit-inner-spin-button,div#p>svg>foreignObject>section [type=number]::-webkit-outer-spin-button{height:auto}div#p>svg>foreignObject>section [type=search]::-webkit-search-cancel-button,div#p>svg>foreignObject>section [type=search]::-webkit-search-decoration{-webkit-appearance:none}div#p>svg>foreignObject>section ::-webkit-input-placeholder{color:inherit;opacity:.54}div#p>svg>foreignObject>section ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}div#p>svg>foreignObject>section a:hover{text-decoration:underline}div#p>svg>foreignObject>section ::-moz-placeholder{color:var(--color-fg-subtle);opacity:1}div#p>svg>foreignObject>section ::placeholder{color:var(--color-fg-subtle);opacity:1}div#p>svg>foreignObject>section hr:after,div#p>svg>foreignObject>section hr:before{content:"";display:table}div#p>svg>foreignObject>section hr:after{clear:both}div#p>svg>foreignObject>section table{border-collapse:collapse;border-spacing:0;display:block;max-width:100%;overflow:auto;width:-moz-max-content;width:max-content}div#p>svg>foreignObject>section td,div#p>svg>foreignObject>section th{padding:0}div#p>svg>foreignObject>section details summary{cursor:pointer}div#p>svg>foreignObject>section details:not([open])>:not(summary){display:none!important}div#p>svg>foreignObject>section [role=button]:focus,div#p>svg>foreignObject>section a:focus,div#p>svg>foreignObject>section input[type=checkbox]:focus,div#p>svg>foreignObject>section input[type=radio]:focus{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:-2px}div#p>svg>foreignObject>section [role=button]:focus:not(:focus-visible),div#p>svg>foreignObject>section a:focus:not(:focus-visible),div#p>svg>foreignObject>section input[type=checkbox]:focus:not(:focus-visible),div#p>svg>foreignObject>section input[type=radio]:focus:not(:focus-visible){outline:1px solid transparent}div#p>svg>foreignObject>section [role=button]:focus-visible,div#p>svg>foreignObject>section a:focus-visible,div#p>svg>foreignObject>section input[type=checkbox]:focus-visible,div#p>svg>foreignObject>section input[type=radio]:focus-visible{box-shadow:none;outline:2px solid var(--color-accent-fg);outline-offset:-2px}div#p>svg>foreignObject>section a:not([class]):focus,div#p>svg>foreignObject>section a:not([class]):focus-visible,div#p>svg>foreignObject>section input[type=checkbox]:focus,div#p>svg>foreignObject>section input[type=checkbox]:focus-visible,div#p>svg>foreignObject>section input[type=radio]:focus,div#p>svg>foreignObject>section input[type=radio]:focus-visible{outline-offset:0}div#p>svg>foreignObject>section kbd{background-color:var(--color-canvas-subtle);border-bottom-color:var(--color-neutral-muted);border:1px solid var(--color-neutral-muted);border-radius:6px;box-shadow:inset 0 -1px 0 var(--color-neutral-muted);color:var(--color-fg-default);display:inline-block;font:11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:10px;padding:3px 5px;vertical-align:middle}div#p>svg>foreignObject>section :is(h1,marp-h1),div#p>svg>foreignObject>section :is(h2,marp-h2),div#p>svg>foreignObject>section :is(h3,marp-h3),div#p>svg>foreignObject>section :is(h4,marp-h4),div#p>svg>foreignObject>section :is(h5,marp-h5),div#p>svg>foreignObject>section :is(h6,marp-h6){font-weight:var(--base-text-weight-semibold,600);line-height:1.25;margin-bottom:16px;margin-top:24px}div#p>svg>foreignObject>section :is(h2,marp-h2){border-bottom:1px solid var(--color-border-muted);font-size:1.5em;padding-bottom:.3em}div#p>svg>foreignObject>section :is(h2,marp-h2),div#p>svg>foreignObject>section :is(h3,marp-h3){font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section :is(h3,marp-h3){font-size:1.25em}div#p>svg>foreignObject>section :is(h4,marp-h4){font-size:1em}div#p>svg>foreignObject>section :is(h4,marp-h4),div#p>svg>foreignObject>section :is(h5,marp-h5){font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section :is(h5,marp-h5){font-size:.875em}div#p>svg>foreignObject>section :is(h6,marp-h6){color:var(--color-fg-muted);font-size:.85em;font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section p{margin-bottom:10px;margin-top:0}div#p>svg>foreignObject>section blockquote{border-left:.25em solid var(--color-border-default);color:var(--color-fg-muted);margin:0;padding:0 1em}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{margin-bottom:0;margin-top:0;padding-left:2em}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ul ol{list-style-type:lower-roman}div#p>svg>foreignObject>section ol ol ol,div#p>svg>foreignObject>section ol ul ol,div#p>svg>foreignObject>section ul ol ol,div#p>svg>foreignObject>section ul ul ol{list-style-type:lower-alpha}div#p>svg>foreignObject>section dd{margin-left:0}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section samp,div#p>svg>foreignObject>section tt{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:12px}div#p>svg>foreignObject>section :is(pre,marp-pre){word-wrap:normal;margin-bottom:0;margin-top:0}div#p>svg>foreignObject>section .octicon{fill:currentColor;display:inline-block;overflow:visible!important;vertical-align:text-bottom}div#p>svg>foreignObject>section input::-webkit-inner-spin-button,div#p>svg>foreignObject>section input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}div#p>svg>foreignObject>section:after,div#p>svg>foreignObject>section:before{ /* content:""; */display:table}div#p>svg>foreignObject>section:after{clear:both}div#p>svg>foreignObject>section>:first-child{margin-top:0!important}div#p>svg>foreignObject>section>:last-child{margin-bottom:0!important}div#p>svg>foreignObject>section a:not([href]){color:inherit;text-decoration:none}div#p>svg>foreignObject>section .absent{color:var(--color-danger-fg)}div#p>svg>foreignObject>section .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}div#p>svg>foreignObject>section .anchor:focus{outline:none}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section details,div#p>svg>foreignObject>section dl,div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section p,div#p>svg>foreignObject>section table,div#p>svg>foreignObject>section ul{margin-bottom:16px;margin-top:0}div#p>svg>foreignObject>section blockquote>:first-child{margin-top:0}div#p>svg>foreignObject>section blockquote>:last-child{margin-bottom:0}div#p>svg>foreignObject>section :is(h1,marp-h1) .octicon-link,div#p>svg>foreignObject>section :is(h2,marp-h2) .octicon-link,div#p>svg>foreignObject>section :is(h3,marp-h3) .octicon-link,div#p>svg>foreignObject>section :is(h4,marp-h4) .octicon-link,div#p>svg>foreignObject>section :is(h5,marp-h5) .octicon-link,div#p>svg>foreignObject>section :is(h6,marp-h6) .octicon-link{color:var(--color-fg-default);vertical-align:middle;visibility:hidden}div#p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor,div#p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor,div#p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor,div#p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor,div#p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor,div#p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor{text-decoration:none}div#p>svg>foreignObject>section :is(h1,marp-h1):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h2,marp-h2):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h3,marp-h3):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h4,marp-h4):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h5,marp-h5):hover .anchor .octicon-link,div#p>svg>foreignObject>section :is(h6,marp-h6):hover .anchor .octicon-link{visibility:visible}div#p>svg>foreignObject>section :is(h1,marp-h1) code,div#p>svg>foreignObject>section :is(h1,marp-h1) tt,div#p>svg>foreignObject>section :is(h2,marp-h2) code,div#p>svg>foreignObject>section :is(h2,marp-h2) tt,div#p>svg>foreignObject>section :is(h3,marp-h3) code,div#p>svg>foreignObject>section :is(h3,marp-h3) tt,div#p>svg>foreignObject>section :is(h4,marp-h4) code,div#p>svg>foreignObject>section :is(h4,marp-h4) tt,div#p>svg>foreignObject>section :is(h5,marp-h5) code,div#p>svg>foreignObject>section :is(h5,marp-h5) tt,div#p>svg>foreignObject>section :is(h6,marp-h6) code,div#p>svg>foreignObject>section :is(h6,marp-h6) tt{font-size:inherit;padding:0 .2em}div#p>svg>foreignObject>section summary :is(h1,marp-h1),div#p>svg>foreignObject>section summary :is(h2,marp-h2),div#p>svg>foreignObject>section summary :is(h3,marp-h3),div#p>svg>foreignObject>section summary :is(h4,marp-h4),div#p>svg>foreignObject>section summary :is(h5,marp-h5),div#p>svg>foreignObject>section summary :is(h6,marp-h6){display:inline-block}div#p>svg>foreignObject>section summary :is(h1,marp-h1) .anchor,div#p>svg>foreignObject>section summary :is(h2,marp-h2) .anchor,div#p>svg>foreignObject>section summary :is(h3,marp-h3) .anchor,div#p>svg>foreignObject>section summary :is(h4,marp-h4) .anchor,div#p>svg>foreignObject>section summary :is(h5,marp-h5) .anchor,div#p>svg>foreignObject>section summary :is(h6,marp-h6) .anchor{margin-left:-40px}div#p>svg>foreignObject>section summary :is(h1,marp-h1),div#p>svg>foreignObject>section summary :is(h2,marp-h2){border-bottom:0;padding-bottom:0}div#p>svg>foreignObject>section ol.no-list,div#p>svg>foreignObject>section ul.no-list{list-style-type:none;padding:0}div#p>svg>foreignObject>section ol[type=a]{list-style-type:lower-alpha}div#p>svg>foreignObject>section ol[type=A]{list-style-type:upper-alpha}div#p>svg>foreignObject>section ol[type=i]{list-style-type:lower-roman}div#p>svg>foreignObject>section ol[type=I]{list-style-type:upper-roman}div#p>svg>foreignObject>section div>ol:not([type]),div#p>svg>foreignObject>section ol[type="1"]{list-style-type:decimal}div#p>svg>foreignObject>section ol ol,div#p>svg>foreignObject>section ol ul,div#p>svg>foreignObject>section ul ol,div#p>svg>foreignObject>section ul ul{margin-bottom:0;margin-top:0}div#p>svg>foreignObject>section li>p{margin-top:16px}div#p>svg>foreignObject>section li+li{margin-top:.25em}div#p>svg>foreignObject>section dl{padding:0}div#p>svg>foreignObject>section dl dt{font-size:1em;font-style:italic;font-weight:var(--base-text-weight-semibold,600);margin-top:16px;padding:0}div#p>svg>foreignObject>section dl dd{margin-bottom:16px;padding:0 16px}div#p>svg>foreignObject>section table th{font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section table td,div#p>svg>foreignObject>section table th{border:1px solid var(--color-border-default);padding:6px 13px}div#p>svg>foreignObject>section table tr{background-color:var(--color-canvas-default);border-top:1px solid var(--color-border-muted)}div#p>svg>foreignObject>section table tr:nth-child(2n){background-color:var(--color-canvas-subtle)}div#p>svg>foreignObject>section table img{background-color:transparent}div#p>svg>foreignObject>section img[align=right]{padding-left:20px}div#p>svg>foreignObject>section img[align=left]{padding-right:20px}div#p>svg>foreignObject>section .emoji{background-color:transparent;max-width:none;vertical-align:text-top}div#p>svg>foreignObject>section :is(span,marp-span).frame,div#p>svg>foreignObject>section :is(span,marp-span).frame>:is(span,marp-span){display:block;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).frame>:is(span,marp-span){border:1px solid var(--color-border-default);float:left;margin:13px 0 0;padding:7px;width:auto}div#p>svg>foreignObject>section :is(span,marp-span).frame :is(span,marp-span) img{display:block;float:left}div#p>svg>foreignObject>section :is(span,marp-span).frame :is(span,marp-span) :is(span,marp-span){clear:both;color:var(--color-fg-default);display:block;padding:5px 0 0}div#p>svg>foreignObject>section :is(span,marp-span).align-center{clear:both;display:block;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).align-center>:is(span,marp-span){display:block;margin:13px auto 0;overflow:hidden;text-align:center}div#p>svg>foreignObject>section :is(span,marp-span).align-center :is(span,marp-span) img{margin:0 auto;text-align:center}div#p>svg>foreignObject>section :is(span,marp-span).align-right{clear:both;display:block;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).align-right>:is(span,marp-span){display:block;margin:13px 0 0;overflow:hidden;text-align:right}div#p>svg>foreignObject>section :is(span,marp-span).align-right :is(span,marp-span) img{margin:0;text-align:right}div#p>svg>foreignObject>section :is(span,marp-span).float-left{display:block;float:left;margin-right:13px;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).float-left :is(span,marp-span){margin:13px 0 0}div#p>svg>foreignObject>section :is(span,marp-span).float-right{display:block;float:right;margin-left:13px;overflow:hidden}div#p>svg>foreignObject>section :is(span,marp-span).float-right>:is(span,marp-span){display:block;margin:13px auto 0;overflow:hidden;text-align:right}div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section tt{background-color:var(--color-neutral-muted);border-radius:6px;font-size:85%;margin:0;padding:.2em .4em;white-space:break-spaces}div#p>svg>foreignObject>section code br,div#p>svg>foreignObject>section tt br{display:none}div#p>svg>foreignObject>section del code{text-decoration:inherit}div#p>svg>foreignObject>section samp{font-size:85%}div#p>svg>foreignObject>section :is(pre,marp-pre) code{font-size:100%}div#p>svg>foreignObject>section :is(pre,marp-pre)>code{background:transparent;border:0;margin:0;padding:0;white-space:pre;word-break:normal}div#p>svg>foreignObject>section .highlight{margin-bottom:16px}div#p>svg>foreignObject>section .highlight :is(pre,marp-pre){margin-bottom:0;word-break:normal}div#p>svg>foreignObject>section :is(pre,marp-pre){background-color:var(--color-canvas-subtle);border-radius:6px;font-size:85%;line-height:1.45;overflow:auto;padding:16px}div#p>svg>foreignObject>section :is(pre,marp-pre) code,div#p>svg>foreignObject>section :is(pre,marp-pre) tt{word-wrap:normal;background-color:transparent;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0}div#p>svg>foreignObject>section .csv-data td,div#p>svg>foreignObject>section .csv-data th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}div#p>svg>foreignObject>section .csv-data .blob-num{background:var(--color-canvas-default);border:0;padding:10px 8px 9px;text-align:right}div#p>svg>foreignObject>section .csv-data tr{border-top:0}div#p>svg>foreignObject>section .csv-data th{background:var(--color-canvas-subtle);border-top:0;font-weight:var(--base-text-weight-semibold,600)}div#p>svg>foreignObject>section [data-footnote-ref]:before{content:"["}div#p>svg>foreignObject>section [data-footnote-ref]:after{content:"]"}div#p>svg>foreignObject>section .footnotes{border-top:1px solid var(--color-border-default);color:var(--color-fg-muted);font-size:12px}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.footnotes{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .footnotes ol{padding-left:16px}div#p>svg>foreignObject>section .footnotes ol ul{display:inline-block;margin-top:16px;padding-left:16px}div#p>svg>foreignObject>section .footnotes li{position:relative}div#p>svg>foreignObject>section .footnotes li:target:before{border:2px solid var(--color-accent-emphasis);border-radius:6px;bottom:-8px;content:"";left:-24px;pointer-events:none;position:absolute;right:-8px;top:-8px}div#p>svg>foreignObject>section .footnotes li:target{color:var(--color-fg-default)}div#p>svg>foreignObject>section .footnotes .data-footnote-backref g-emoji{font-family:monospace}div#p>svg>foreignObject>section .pl-c{color:var(--color-prettylights-syntax-comment)}div#p>svg>foreignObject>section .pl-c1,div#p>svg>foreignObject>section .pl-s .pl-v{color:var(--color-prettylights-syntax-constant)}div#p>svg>foreignObject>section .pl-e,div#p>svg>foreignObject>section .pl-en{color:var(--color-prettylights-syntax-entity)}div#p>svg>foreignObject>section .pl-s .pl-s1,div#p>svg>foreignObject>section .pl-smi{color:var(--color-prettylights-syntax-storage-modifier-import)}div#p>svg>foreignObject>section .pl-ent{color:var(--color-prettylights-syntax-entity-tag)}div#p>svg>foreignObject>section .pl-k{color:var(--color-prettylights-syntax-keyword)}div#p>svg>foreignObject>section .pl-pds,div#p>svg>foreignObject>section .pl-s,div#p>svg>foreignObject>section .pl-s .pl-pse .pl-s1,div#p>svg>foreignObject>section .pl-sr,div#p>svg>foreignObject>section .pl-sr .pl-cce,div#p>svg>foreignObject>section .pl-sr .pl-sra,div#p>svg>foreignObject>section .pl-sr .pl-sre{color:var(--color-prettylights-syntax-string)}div#p>svg>foreignObject>section .pl-smw,div#p>svg>foreignObject>section .pl-v{color:var(--color-prettylights-syntax-variable)}div#p>svg>foreignObject>section .pl-bu{color:var(--color-prettylights-syntax-brackethighlighter-unmatched)}div#p>svg>foreignObject>section .pl-ii{background-color:var(--color-prettylights-syntax-invalid-illegal-bg);color:var(--color-prettylights-syntax-invalid-illegal-text)}div#p>svg>foreignObject>section .pl-c2{background-color:var(--color-prettylights-syntax-carriage-return-bg);color:var(--color-prettylights-syntax-carriage-return-text)}div#p>svg>foreignObject>section .pl-sr .pl-cce{color:var(--color-prettylights-syntax-string-regexp);font-weight:700}div#p>svg>foreignObject>section .pl-ml{color:var(--color-prettylights-syntax-markup-list)}div#p>svg>foreignObject>section .pl-mh,div#p>svg>foreignObject>section .pl-mh .pl-en,div#p>svg>foreignObject>section .pl-ms{color:var(--color-prettylights-syntax-markup-heading);font-weight:700}div#p>svg>foreignObject>section .pl-mi{color:var(--color-prettylights-syntax-markup-italic);font-style:italic}div#p>svg>foreignObject>section .pl-mb{color:var(--color-prettylights-syntax-markup-bold);font-weight:700}div#p>svg>foreignObject>section .pl-md{background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}div#p>svg>foreignObject>section .pl-mi1{background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}div#p>svg>foreignObject>section .pl-mc{background-color:var(--color-prettylights-syntax-markup-changed-bg);color:var(--color-prettylights-syntax-markup-changed-text)}div#p>svg>foreignObject>section .pl-mi2{background-color:var(--color-prettylights-syntax-markup-ignored-bg);color:var(--color-prettylights-syntax-markup-ignored-text)}div#p>svg>foreignObject>section .pl-mdr{color:var(--color-prettylights-syntax-meta-diff-range);font-weight:700}div#p>svg>foreignObject>section .pl-ba{color:var(--color-prettylights-syntax-brackethighlighter-angle)}div#p>svg>foreignObject>section .pl-sg{color:var(--color-prettylights-syntax-sublimelinter-gutter-mark)}div#p>svg>foreignObject>section .pl-corl{color:var(--color-prettylights-syntax-constant-other-reference-link);text-decoration:underline}div#p>svg>foreignObject>section g-emoji{display:inline-block;font-family:Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:1em;font-style:normal!important;font-weight:var(--base-text-weight-normal,400);line-height:1;min-width:1ch;vertical-align:-.075em}div#p>svg>foreignObject>section g-emoji img{height:1em;width:1em}div#p>svg>foreignObject>section .task-list-item{list-style-type:none}div#p>svg>foreignObject>section .task-list-item label{font-weight:var(--base-text-weight-normal,400)}div#p>svg>foreignObject>section .task-list-item.enabled label{cursor:pointer}div#p>svg>foreignObject>section .task-list-item+.task-list-item{margin-top:4px}div#p>svg>foreignObject>section .task-list-item .handle{display:none}div#p>svg>foreignObject>section .task-list-item-checkbox{margin:0 .2em .25em -1.4em;vertical-align:middle}div#p>svg>foreignObject>section .contains-task-list:dir(rtl) .task-list-item-checkbox{margin:0 -1.6em .25em .2em}div#p>svg>foreignObject>section .contains-task-list{position:relative}div#p>svg>foreignObject>section .contains-task-list:focus-within .task-list-item-convert-container,div#p>svg>foreignObject>section .contains-task-list:hover .task-list-item-convert-container{clip:auto;display:block;height:24px;overflow:visible;width:auto}div#p>svg>foreignObject>section ::-webkit-calendar-picker-indicator{filter:invert(50%)}div#p>svg>foreignObject>section :is(h1,marp-h1){color:var(--h1-color);font-size:1.6em}div#p>svg>foreignObject>section :is(h1,marp-h1),div#p>svg>foreignObject>section :is(h2,marp-h2){border-bottom:none}div#p>svg>foreignObject>section :is(h2,marp-h2){font-size:1.3em}div#p>svg>foreignObject>section :is(h3,marp-h3){font-size:1.1em}div#p>svg>foreignObject>section :is(h4,marp-h4){font-size:1.05em}div#p>svg>foreignObject>section :is(h5,marp-h5){font-size:1em}div#p>svg>foreignObject>section :is(h6,marp-h6){font-size:.9em}div#p>svg>foreignObject>section :is(h1,marp-h1) strong,div#p>svg>foreignObject>section :is(h2,marp-h2) strong,div#p>svg>foreignObject>section :is(h3,marp-h3) strong,div#p>svg>foreignObject>section :is(h4,marp-h4) strong,div#p>svg>foreignObject>section :is(h5,marp-h5) strong,div#p>svg>foreignObject>section :is(h6,marp-h6) strong{color:var(--heading-strong-color);font-weight:inherit}div#p>svg>foreignObject>section :is(h1,marp-h1)::part(auto-scaling),div#p>svg>foreignObject>section :is(h2,marp-h2)::part(auto-scaling),div#p>svg>foreignObject>section :is(h3,marp-h3)::part(auto-scaling),div#p>svg>foreignObject>section :is(h4,marp-h4)::part(auto-scaling),div#p>svg>foreignObject>section :is(h5,marp-h5)::part(auto-scaling),div#p>svg>foreignObject>section :is(h6,marp-h6)::part(auto-scaling){max-height:563px}div#p>svg>foreignObject>section hr{height:0;padding-top:.25em}div#p>svg>foreignObject>section :is(pre,marp-pre){border:1px solid var(--color-border-default);line-height:1.15;overflow:visible}div#p>svg>foreignObject>section :is(pre,marp-pre)::part(auto-scaling){max-height:529px}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs){color:var(--color-prettylights-syntax-storage-modifier-import)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-doctag),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-keyword),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta .hljs-keyword),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-template-tag),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-template-variable),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-type),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-variable.language_){color:var(--color-prettylights-syntax-keyword)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.class_),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.class_.inherited__),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-title.function_){color:var(--color-prettylights-syntax-entity)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-attr),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-attribute),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-literal),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-number),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-operator),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-attr),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-class),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-id),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-variable){color:var(--color-prettylights-syntax-constant)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-meta .hljs-string),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-regexp),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-string){color:var(--color-prettylights-syntax-string)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-built_in),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-symbol){color:var(--color-prettylights-syntax-variable)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-code),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-comment),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-formula){color:var(--color-prettylights-syntax-comment)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-name),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-quote),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-pseudo),div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-selector-tag){color:var(--color-prettylights-syntax-entity-tag)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-subst){color:var(--color-prettylights-syntax-storage-modifier-import)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-section){color:var(--color-prettylights-syntax-markup-heading);font-weight:700}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-bullet){color:var(--color-prettylights-syntax-markup-list)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-emphasis){color:var(--color-prettylights-syntax-markup-italic);font-style:italic}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-strong){color:var(--color-prettylights-syntax-markup-bold);font-weight:700}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-addition){background-color:var(--color-prettylights-syntax-markup-inserted-bg);color:var(--color-prettylights-syntax-markup-inserted-text)}div#p>svg>foreignObject>section :is(pre,marp-pre) :where(.hljs-deletion){background-color:var(--color-prettylights-syntax-markup-deleted-bg);color:var(--color-prettylights-syntax-markup-deleted-text)}div#p>svg>foreignObject>section footer,div#p>svg>foreignObject>section header{color:var(--header-footer-color);font-size:18px;left:30px;margin:0;position:absolute}div#p>svg>foreignObject>section header{top:21px}div#p>svg>foreignObject>section footer{bottom:21px}div#p>svg>foreignObject>section{--h1-color:#246;--header-footer-color:hsla(0,0%,40%,.75);--heading-strong-color:#48c;--paginate-color:#777;align-items:stretch;display:flex;flex-flow:column nowrap;font-size:29px;height:720px;justify-content:center;padding:78.5px;width:1280px}div#p>svg>foreignObject>section{--marpit-root-font-size:29px}div#p>svg>foreignObject>section:where(.invert){--h1-color:#cee7ff;--header-footer-color:hsla(0,0%,60%,.75);--heading-strong-color:#7bf;--paginate-color:#999}div#p>svg>foreignObject>section>:last-child,div#p>svg>foreignObject>section[data-footer]>:nth-last-child(2){margin-bottom:0}div#p>svg>foreignObject>section>:first-child,div#p>svg>foreignObject>section>header:first-child+*{margin-top:0}div#p>svg>foreignObject>section:after{bottom:21px;color:var(--paginate-color);font-size:24px;padding:0;position:absolute;right:30px}div#p>svg>foreignObject>section:after{--marpit-root-font-size:24px}div#p>svg>foreignObject>section[data-color] :is(h1,marp-h1),div#p>svg>foreignObject>section[data-color] :is(h2,marp-h2),div#p>svg>foreignObject>section[data-color] :is(h3,marp-h3),div#p>svg>foreignObject>section[data-color] :is(h4,marp-h4),div#p>svg>foreignObject>section[data-color] :is(h5,marp-h5),div#p>svg>foreignObject>section[data-color] :is(h6,marp-h6){color:currentcolor}div#p>svg>foreignObject>section img[data-marp-twemoji]{background:transparent;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em;width:1em} -/* @theme shin */div#p>svg>foreignObject>:where(section):not([root]){--color-font-main:#012F4B;--color-font-sub:#0f3b57;--color-font-accent:rgb(201,57,64);--color-background:#EBEEF9}div#p>svg>foreignObject>section{font-family:"Noto Sans","Noto Sans JP";justify-content:start;background-color:var(--color-background);color:var(--color-font-main);padding:30px 70px}div#p>svg>foreignObject>section ::selection{background-color:rgba(255,255,0,0.5)}div#p>svg>foreignObject>section.title{padding-top:400px}div#p>svg>foreignObject>section sub{bottom:0}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section code{font-family:consolas,"Noto Sans JP";color:var(--color-font-sub);background-color:white;font-weight:500;padding:3px 6px;border:1px solid var(--color-font-main)}div#p>svg>foreignObject>section p:has(+marp-pre){margin-bottom:0;padding-bottom:5px}div#p>svg>foreignObject>section code{font-size:70%;vertical-align:middle}div#p>svg>foreignObject>section :is(pre,marp-pre){margin-left:30px}div#p>svg>foreignObject>section :is(h1,marp-h1){padding:0;font-size:200%;font-weight:900;color:var(--color-font-main)}div#p>svg>foreignObject>section :is(h2,marp-h2){margin:0;padding:10px 0 0 0;color:var(--color-font-main);font-weight:900;padding-bottom:5px}div#p>svg>foreignObject>section ul{list-style-type:"- ";margin-top:0;padding-top:0}div#p>svg>foreignObject>section ol{padding-inline-start:45px}div#p>svg>foreignObject>section u,div#p>svg>foreignObject>section u::selection{text-decoration:underline 8pt;text-decoration-color:#ffc3d6;text-underline-offset:-3px}div#p>svg>foreignObject>section li,div#p>svg>foreignObject>section p{color:var(--color-font-sub);margin-left:30px;font-weight:500;font-size:120%;line-height:1.2;margin-top:0}div#p>svg>foreignObject>section li+li{margin-top:0}div#p>svg>foreignObject>section brr{display:block;content:"";margin-top:.5lh}div#p>svg>foreignObject>section.outline .disabled{color:hsl(203,43%,56%,60%)}div#p>svg>foreignObject>section:after{color:#9badbe}div#p>svg>foreignObject>section blockquote{background-color:#dadfec;position:relative;border:none;padding-left:40px}div#p>svg>foreignObject>section blockquote:after{content:"“";font-family:Arial;font-size:500%;color:#8697a7;display:block;position:absolute;left:5px;top:-55px;bottom:0;margin:auto}div#p>svg>foreignObject>section div.corner-triangle{display:block;width:0px;height:0px;border-style:solid;border-width:0 150px 150px 0;border-color:transparent #608A32 transparent transparent;position:fixed;top:0;right:0;color:white}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text{position:relative;top:40px;right:-60px;width:100px;font-family:consolas,"Noto Sans JP";font-weight:600;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text :is(span,marp-span).corner-triangle-firstline{margin-left:29px}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text a{color:white}div#p>svg>foreignObject>section .bespoke-marp-osc{display:hidden}div#p>svg>foreignObject>section.enshu{background-color:hsl(27,54%,95%)}div#p>svg>foreignObject>section.enshu :is(h1,marp-h1),div#p>svg>foreignObject>section.enshu :is(h2,marp-h2),div#p>svg>foreignObject>section.enshu :is(h3,marp-h3),div#p>svg>foreignObject>section.enshu li,div#p>svg>foreignObject>section.enshu p,div#p>svg>foreignObject>section.enshu ul{color:hsl(23,97%,15%)}div#p>svg>foreignObject>section.outline{background-color:var(--color-font-sub)}div#p>svg>foreignObject>section.outline>.corner-triangle{border-color:transparent var(--color-font-accent) transparent transparent}div#p>svg>foreignObject>section.outline p{margin-left:0}div#p>svg>foreignObject>section.outline :is(h1,marp-h1){font-size:160%}div#p>svg>foreignObject>section.outline :is(h1,marp-h1),div#p>svg>foreignObject>section.outline :is(h2,marp-h2),div#p>svg>foreignObject>section.outline :is(h3,marp-h3),div#p>svg>foreignObject>section.outline li,div#p>svg>foreignObject>section.outline p,div#p>svg>foreignObject>section.outline ul{color:#eff3f5}div#p>svg>foreignObject>section p:has(subb){font-size:70%;font-weight:400}div#p>svg>foreignObject>section .logo{position:absolute;font-family:consolas;font-size:120%;font-weight:bold;line-height:200px;left:630px;top:340px;width:200px;height:200px;border-radius:50%;color:var(--color-background);text-align:center;background:var(--color-font-main)}div#p>svg>foreignObject>section section.logo{--marpit-root-font-size:120%}div#p>svg>foreignObject>section{width:960px;height:720px}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+/* @theme shin */div#p>svg>foreignObject>:where(section):not([root]){--color-font-main:#012F4B;--color-font-sub:#0f3b57;--color-font-accent:rgb(201,57,64);--color-background:#EBEEF9}div#p>svg>foreignObject>section{font-family:"Noto Sans","Noto Sans JP";justify-content:start;background-color:var(--color-background);color:var(--color-font-main);padding:30px 70px}div#p>svg>foreignObject>section ::selection{background-color:rgba(255,255,0,0.5)}div#p>svg>foreignObject>section.title{padding-top:400px}div#p>svg>foreignObject>section sub{bottom:0}div#p>svg>foreignObject>section :is(pre,marp-pre),div#p>svg>foreignObject>section blockquote,div#p>svg>foreignObject>section code{font-family:consolas,"Noto Sans JP";color:var(--color-font-sub);background-color:white;font-weight:500;padding:3px 6px;border:1px solid var(--color-font-main)}div#p>svg>foreignObject>section p:has(+marp-pre){margin-bottom:0;padding-bottom:5px}div#p>svg>foreignObject>section code{font-size:70%;vertical-align:middle}div#p>svg>foreignObject>section :is(pre,marp-pre){margin-left:30px}div#p>svg>foreignObject>section :is(h1,marp-h1){padding:0;font-size:200%;font-weight:900;color:var(--color-font-main)}div#p>svg>foreignObject>section :is(h2,marp-h2){margin:0;padding:10px 0 0 0;color:var(--color-font-main);font-weight:900;padding-bottom:5px}div#p>svg>foreignObject>section ul{list-style-type:"- ";margin-top:0;padding-top:0}div#p>svg>foreignObject>section ol{padding-inline-start:45px}div#p>svg>foreignObject>section u,div#p>svg>foreignObject>section u::selection{text-decoration:underline 8pt;text-decoration-color:#ffc3d6;text-underline-offset:-3px}div#p>svg>foreignObject>section li,div#p>svg>foreignObject>section p{color:var(--color-font-sub);margin-left:30px;font-weight:500;font-size:120%;line-height:1.2;margin-top:0}div#p>svg>foreignObject>section li+li{margin-top:0}div#p>svg>foreignObject>section brr{display:block;content:"";margin-top:.5lh}div#p>svg>foreignObject>section.outline .disabled{color:hsl(203,43%,56%,60%)}div#p>svg>foreignObject>section:after{color:#9badbe}div#p>svg>foreignObject>section blockquote{background-color:#dadfec;position:relative;border:none;padding-left:40px}div#p>svg>foreignObject>section blockquote:after{content:"“";font-family:Arial;font-size:500%;color:#8697a7;display:block;position:absolute;left:5px;top:-55px;bottom:0;margin:auto}div#p>svg>foreignObject>section div.corner-triangle{display:block;width:0px;height:0px;border-style:solid;border-width:0 150px 150px 0;border-color:transparent #608A32 transparent transparent;position:fixed;top:0;right:0;color:white}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text{position:relative;top:40px;right:-60px;width:100px;font-family:consolas,"Noto Sans JP";font-weight:600;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text :is(span,marp-span).corner-triangle-firstline{margin-left:29px}div#p>svg>foreignObject>section div.corner-triangle .corner-triangle-text a{color:white}div#p>svg>foreignObject>section .bespoke-marp-osc{display:hidden}div#p>svg>foreignObject>section.enshu{background-color:hsl(27,54%,95%)}div#p>svg>foreignObject>section.enshu :is(h1,marp-h1),div#p>svg>foreignObject>section.enshu :is(h2,marp-h2),div#p>svg>foreignObject>section.enshu :is(h3,marp-h3),div#p>svg>foreignObject>section.enshu li,div#p>svg>foreignObject>section.enshu p,div#p>svg>foreignObject>section.enshu ul{color:hsl(23,97%,15%)}div#p>svg>foreignObject>section.outline{background-color:var(--color-font-sub)}div#p>svg>foreignObject>section.outline>.corner-triangle{border-color:transparent var(--color-font-accent) transparent transparent}div#p>svg>foreignObject>section.outline p{margin-left:0}div#p>svg>foreignObject>section.outline :is(h1,marp-h1){font-size:160%}div#p>svg>foreignObject>section.outline :is(h1,marp-h1),div#p>svg>foreignObject>section.outline :is(h2,marp-h2),div#p>svg>foreignObject>section.outline :is(h3,marp-h3),div#p>svg>foreignObject>section.outline li,div#p>svg>foreignObject>section.outline p,div#p>svg>foreignObject>section.outline ul{color:#eff3f5}div#p>svg>foreignObject>section p:has(subb){font-size:70%;font-weight:400}div#p>svg>foreignObject>section .logo{position:absolute;font-family:consolas;font-size:120%;font-weight:bold;line-height:200px;left:630px;top:340px;width:200px;height:200px;border-radius:50%;color:var(--color-background);text-align:center;background:var(--color-font-main)}div#p>svg>foreignObject>section section.logo{--marpit-root-font-size:120%}div#p>svg>foreignObject>section.pd30{padding:30px}div#p>svg>foreignObject>section{width:960px;height:720px}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{columns:initial!important;display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}

ソフトウェア設計論

まつ本

開発者が知っておくべきトピック集
-実装編-

前回
-

・SWEBOK
-・良い名前をつける
-・コメントはない方が良い
-・動くの先にある良いプログラム
-・良いプログラムとは?
-Don't call us, we'll call you
+

・SWEBOK

+

・良い名前をつける
+・コメントはない方が良い

+

・動くの先にある良いプログラム
+・良いプログラムとは?

+

Don't call us, we'll call you
・goto不要論からの学び
-・できないことを増やす
-・Complex vs Complicated
+・できないことを増やす

+

・Complex vs Complicated
・分割統治
・DRY・KISS・YAGNI

@@ -54,29 +54,28 @@

テストは面白い

プログラミングと似た面白さ

パズル的な面白さ
自動化の気持ちよさ
-実装ほど難しくはないがやはり奥深い

+導入が簡単で奥深い

ものすごく役立つ

プログラミングを助ける・楽にする技術
実践的で応用の幅が広い
実装ほど難しくない点もプラス

-

理論と実践の境界

+

理論的側面と実践的側面が共存

様々なセオリーが存在する
勉強するほどうまくなる

開発者が知っておくべきトピック集
-テスト編-

-

・SWテストの基本
-・手動テストは危険

-

・リファクタリングのためのテスト
-・バグ修正のためのテスト
-・回帰バグ対策としてのテスト

-

・演習

-

・テストを先に書く開発スタイル
-・"Clean code that works"

-

・良いテスト
-・テストは証明ではない

-

・SWEBOK

+

・SWテストの基本

+

・リファクタリングのためのテスト
+・バグ修正のためのテスト
+・回帰バグ対策としてのテスト

+

・演習

+

・テストを先に書く
+"Clean code that works"

+

・良いテスト
+・テストは証明ではない

+

・テストのテクニック

SWテスト

@@ -173,8 +172,8 @@

無茶な自動テスト

else: print("ng") -

ここまでやるならテストFWを使おう
-テストの共通処理をFWに任す
+

ここまでやるならテストFWを使おう

+

テストの共通処理をFWに任す
 - テストケースの回収
 - 検証 assert()
 - ok ngの回収
@@ -274,7 +273,7 @@

予期せぬバグが起きた場合:

  • バグが発生する条件・状況を探す
  • sort([3,1,2,-5]);
    -   → [1,2,3,-5]
    +   → [1,2,3,-5]  // bug!!
     
    1. その条件・状況をテストに起こす
      @@ -326,7 +325,7 @@

      インフラ環境のコード化 (IaC)

      回帰バグ対策としてのテスト

      回帰バグ

      昔のバグが再度現れる現象

      -

      プログラム変更時に発生した意図せぬ別の問題
      +

      プログラム変更時に発生した予期せぬ別の問題
      バグを直したら別のバグが出てくる

      「レグレッションがおきた」
      「デグレした」

      @@ -342,7 +341,7 @@

      開発者が知っておくべきトピック集
      -テスト編

      演習 (10m)

      以下のプログラムのテストを作成せよ

      -
      bool isSemVer(s):
      +
      def isSemVer(s: str) -> bool:
         """文字列sがsemverの書式に従っているかを確認する
         semver = majorVer.minorVer.patchVer
         """
      @@ -360,33 +359,28 @@ 

      提出方法

      そもそも正しいsemverとは?

      -
      # Backus–Naur Form Grammar for Valid SemVer Versions
      -
      +
      # Backus–Naur Form Grammar for Valid SemVer Versions
       <valid semver> ::= <version core>
      -                 | <version core> "-" <pre-release>
      -                 | <version core> "+" <build>
      -                 | <version core> "-" <pre-release> "+" <build>
      +          | <version core> "-" <pre-release>
      +          | <version core> "+" <build>
      +          | <version core> "-" <pre-release> "+" <build>
       
      -<version core> ::= <major> "." <minor> "." <patch>
      +<version core> ::= <major> "." <minor> "." <patch>
       
       <major> ::= <numeric identifier>
      -
       <minor> ::= <numeric identifier>
      -
       <patch> ::= <numeric identifier>
       
      -<numeric identifier> ::= "0"
      -                       | <positive digit>
      -                       | <positive digit> <digits>
      -
      -<positive digit> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
      -
      -<digit> ::= "0" | <positive digit>
      +<numeric identifier> ::= "0"
      +          | <positive digit>
      +          | <positive digit> <digits>
      +<positive digit> ::= "1" | "2" | "3" | .. | "9"
      +<digit> ::= "0" | <positive digit>
       

      https://semver.org/

      -

      テストケースの一例

      +

      模範解答例

      valid

      1.2.3
       1.2.99
      @@ -412,8 +406,6 @@ 

      テストケースの一例

      もっと真面目なテストケース

      valid

      1.1.2-prerelease+meta
      -1.1.2+meta
      -1.1.2+meta-valid
       1.0.0-alpha
       1.0.0-beta
       1.0.0-alpha.beta
      @@ -427,8 +419,10 @@ 

      もっと真面目なテストケース

      1.2.3-beta 10.2.3-DEV-SNAPSHOT 1.2.3-SNAPSHOT-123 +2.0.0+build.1848 +2.0.1-alpha.1227
      -

      https://github.com/semver/semver/issues/833

      +

      https://github.com/semver/semver/issues/833#issuecomment-1186845563

      テスト ≒ 仕様

      @@ -439,12 +433,12 @@

      仕様が決まらないとテストは作れない

      IF = bool isSemVer(s) 仕様 = EBNF

      テストは自動検証可能な仕様である

      コード化された仕様

      -

      テストがあると実装が楽 (ゴールがある)

      -
      実装前の状態: -----------------------
      -まず軽く実装: oooooooo------oo-------
      -少し修正する: oooooooooooo--oo-----oo
      -もう少し修正: oooooooooooooooooooo-oo
      -完成!!!!: ooooooooooooooooooooooo
      +

      テストがあると実装が楽

      +

      テストがゴールになる

      +
      実装前の状態: -----------------------    0%
      +まず軽く実装: oooooooo------oo-------   50%
      +少し修正する: oooooooooooooooooooo-oo   98%
      +完成!!!!: ooooooooooooooooooooooo  100%
       
      @@ -452,13 +446,8 @@

      開発者が知っておくべきトピック集
      -テスト編

      DUMMY

      -
      -

      開発者が知っておくべきトピック集
      -テスト編-

      -
      -

      DUMMY

      -
      -
      -

      テストを先に書く開発スタイル

      +
      +

      テストを先に書く

      TDD - Test driven development, テスト駆動開発

      1. まずはテストを書く
      2. @@ -477,7 +466,7 @@

        ステップ1終了の時点

        return None
      -
      +

      "Clean code that works"

      TDDのキモ

      動くコードと良いコードを分けて考える
      @@ -495,12 +484,12 @@

      TDDのキモ

      Doesn't work Work
      -
      +

      論文でも同じことが言える

      雑談

      -
      +

      Test Driven Class

      雑談

      テスト駆動の演習 (演習D)

      @@ -515,12 +504,12 @@

      Pros

       - リファクタリング支援

      教員の手間が減る

      -
      +

      開発者が知っておくべきトピック集
      -テスト編-

      DUMMY

      -
      +

      良いテスト

      良いテストとは?

      バグの検出能力が高い (≒ 網羅率が高い)
      @@ -534,7 +523,7 @@

      1テストケース=1シナリオ

      仕様や利用方法という側面もある
      たくさんのことをしない

      -
      +

      良いプログラムとは?

      再掲

      信頼性・効率性 (実行的側面の良さ)

      @@ -547,7 +536,7 @@

      拡張性

      テスタビリティ

      main() vs main()+sub1()+sub2()+sub3()

      -
      +

      Complex vs Complicated

      再掲

      @@ -555,7 +544,7 @@

      Complex vs Complicated

      https://www.gilkisongroup.com/investing-complicated-or-complex/

      -
      +

      良いプログラムと良いテスト

      テストが楽なプログラムを作ろう

      うまく分割統治すればするほどテストが楽
      @@ -571,22 +560,16 @@

      良いプログラム ≒ テストしやすいプログラム

      副作用がない, 状態を持たない, 決定的である

      関数型言語はテストしやすい

      -
      -





      -
      -

      Program testing can be used to show the presence of bugs, but never to show their absence

      -
      -
      -

      テストはバグが存在することを示せるが
      -バグがないことは示せない

      -
      +
      +







      +

      +

      Program testing can be used to show the presence of bugs, but never to show their absence

      E.W. Dijkstra

      -
      +

      テストは証明ではない

      全組み合わせのテストは不可能

      -

      sort(arr) のパラメタの組み合わせは無限
      -isPrime(int n)でもINT_MAX (42億) の可能性がある

      +

      isSemVer(s) のパラメタの組み合わせは無限

      テストは無料ではない

      大きなシステムの全テストは1日かかる

      テストの経済学と心理学

      @@ -596,7 +579,7 @@

      テストの経済学と心理学

       - 開発者がミスしやすそうな部分を考える
       - 開発経験があるほど良いテストを作りやすい

      -
      +

      プログラムの正しさの証明?

      形式手法

      雑談
      @@ -608,8 +591,29 @@

      形式手法

      航空システム・医療等

      形式手法と比べるとテストは手軽で安価

      +
      +

      パラメタ化テスト

      +

      テストをDRYにする手法

      +

      non-DRYなテスト

      +
      def test_semver_valid1():
      +    assert isSemVer('1.2.3') == True
      +def test_semver_valid2():
      +    assert isSemVer('1.2.99') == True
      +def test_semver_valid3():
      +    assert isSemVer('1.2.0') == True
      +
      +

      パラメタ化テスト

      +
      @pytest.mark.parametrize('semver', [
      +    '1.2.3'
      +    '1.2.99'
      +    '1.2.0'
      +])
      +def test_semver_valid(semver):
      +    assert isSemVer(semver) == True
      +
      +
      -

      parametrized test

      +

      モック

      テストスメル

      diff --git a/lecture-test.md b/lecture-test.md index d238b29..8dd1956 100644 --- a/lecture-test.md +++ b/lecture-test.md @@ -15,13 +15,17 @@ title: SW設計論 #15
      前回
      ・SWEBOK + ・良い名前をつける ・コメントはない方が良い + ・動くの先にある良いプログラム ・良いプログラムとは? + ・_Don't call us, we'll call you_ ・goto不要論からの学び ・できないことを増やす + ・Complex vs Complicated ・分割統治 ・DRY・KISS・YAGNI @@ -54,14 +58,14 @@ title: SW設計論 #15 ## プログラミングと似た面白さ パズル的な面白さ 自動化の気持ちよさ -実装ほど難しくはないがやはり奥深い +導入が簡単で奥深い ## ものすごく役立つ プログラミングを助ける・楽にする技術 実践的で応用の幅が広い 実装ほど難しくない点もプラス -## 理論と実践の境界 +## 理論的側面と実践的側面が共存 様々なセオリーが存在する 勉強するほどうまくなる @@ -70,22 +74,21 @@ title: SW設計論 #15 # 開発者が知っておくべきトピック集
      -テスト編-
      -・SWテストの基本 -・手動テストは危険 +・SWテストの基本 -・リファクタリングのためのテスト -・バグ修正のためのテスト -・回帰バグ対策としてのテスト +・リファクタリングのためのテスト +・バグ修正のためのテスト +・回帰バグ対策としてのテスト -・演習 +・演習 -・テストを先に書く開発スタイル -・_"Clean code that works"_ +・テストを先に書く +・_"Clean code that works"_ -・良いテスト -・テストは証明ではない +・良いテスト +・テストは証明ではない -・SWEBOK +・テストのテクニック --- # SWテスト @@ -210,7 +213,7 @@ if __name__ == '__main__': print("ng") ``` -ここまでやるならテストFWを使おう +## ここまでやるならテストFWを使おう テストの共通処理をFWに任す  - テストケースの回収  - 検証 `assert()` @@ -337,7 +340,7 @@ def sort(arr): ```java sort([3,1,2,-5]); - → [1,2,3,-5] + → [1,2,3,-5] // bug!! ``` @@ -401,7 +404,7 @@ Chef, Puppet, Pulumi ## 回帰バグ 昔のバグが再度現れる現象 -プログラム変更時に発生した意図せぬ別の問題 +プログラム変更時に発生した予期せぬ別の問題 バグを直したら別のバグが出てくる 「レグレッションがおきた」 @@ -424,7 +427,7 @@ DUMMY # 演習 (10m) ## 以下のプログラムのテストを作成せよ ```py -bool isSemVer(s): +def isSemVer(s: str) -> bool: """文字列sがsemverの書式に従っているかを確認する semver = majorVer.minorVer.patchVer """ @@ -447,35 +450,30 @@ assert isSemVer('1.2.a') == False # そもそも正しいsemverとは? -``` +```python # Backus–Naur Form Grammar for Valid SemVer Versions - ::= - | "-" - | "+" - | "-" "+" + | "-" + | "+" + | "-" "+" ::= "." "." ::= - ::= - ::= ::= "0" - | - | - - ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" - + | + | + ::= "1" | "2" | "3" | .. | "9" ::= "0" | ``` https://semver.org/ --- -## テストケースの一例 +## 模範解答例 valid ``` 1.2.3 @@ -506,8 +504,6 @@ aaa valid ``` 1.1.2-prerelease+meta -1.1.2+meta -1.1.2+meta-valid 1.0.0-alpha 1.0.0-beta 1.0.0-alpha.beta @@ -521,8 +517,10 @@ valid 1.2.3-beta 10.2.3-DEV-SNAPSHOT 1.2.3-SNAPSHOT-123 +2.0.0+build.1848 +2.0.1-alpha.1227 ``` -https://github.com/semver/semver/issues/833 +https://github.com/semver/semver/issues/833#issuecomment-1186845563 --- @@ -538,21 +536,15 @@ IF = `bool isSemVer(s)` 仕様 = `EBNF` ## テストは自動検証可能な仕様である コード化された仕様 -## テストがあると実装が楽 (ゴールがある) +## テストがあると実装が楽 +テストがゴールになる ``` -実装前の状態: ----------------------- -まず軽く実装: oooooooo------oo------- -少し修正する: oooooooooooo--oo-----oo -もう少し修正: oooooooooooooooooooo-oo -完成!!!!: ooooooooooooooooooooooo +実装前の状態: ----------------------- 0% +まず軽く実装: oooooooo------oo------- 50% +少し修正する: oooooooooooooooooooo-oo 98% +完成!!!!: ooooooooooooooooooooooo 100% ``` ---- - -# 開発者が知っておくべきトピック集
      -テスト編- -
      - -DUMMY --- @@ -562,7 +554,7 @@ DUMMY DUMMY --- -# テストを先に書く開発スタイル +# テストを先に書く ## TDD - Test driven development, テスト駆動開発 1. まずはテストを書く 2. テストが通るようにプログラムを作る @@ -708,20 +700,21 @@ TinyObject doTinyThing(param1) { --- -



      + -> Program testing can be used to show the presence of bugs, but never to show their absence +




      + -> テストはバグが存在することを示せるが -バグがないことは示せない +_Program testing can be used to show the presence of bugs, but never to show their absence_ E.W. Dijkstra +![bg left:45%](https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Edsger_Wybe_Dijkstra.jpg/450px-Edsger_Wybe_Dijkstra.jpg) + --- # テストは証明ではない ## 全組み合わせのテストは不可能 -`sort(arr)` のパラメタの組み合わせは無限 -`isPrime(int n)`でも`INT_MAX` (42億) の可能性がある +`isSemVer(s)` のパラメタの組み合わせは無限 ## テストは無料ではない 大きなシステムの全テストは1日かかる @@ -753,7 +746,33 @@ TinyObject doTinyThing(param1) { --- -parametrized test +# パラメタ化テスト +テストをDRYにする手法 + +non-DRYなテスト +```py +def test_semver_valid1(): + assert isSemVer('1.2.3') == True +def test_semver_valid2(): + assert isSemVer('1.2.99') == True +def test_semver_valid3(): + assert isSemVer('1.2.0') == True +``` + +パラメタ化テスト +```py +@pytest.mark.parametrize('semver', [ + '1.2.3' + '1.2.99' + '1.2.0' +]) +def test_semver_valid(semver): + assert isSemVer(semver) == True +``` + +--- +# モック + --- diff --git a/style.css b/style.css index 431539f..6824d8c 100644 --- a/style.css +++ b/style.css @@ -230,3 +230,6 @@ p:has(subb) { text-align: center; background: var(--color-font-main); } +section.pd30 { + padding: 30px; +} \ No newline at end of file