46
|
1 <!DOCTYPE html><html lang="ja-JP"><head><title>コンテナ技術を用いた教育情報システムの構築</title><meta property="og:title" content="コンテナ技術を用いた教育情報システムの構築"><meta charset="UTF-8"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0"><meta name="apple-mobile-web-app-capable" content="yes"><meta http-equiv="X-UA-Compatible" content="ie=edge"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><style>.bespoke-marp-note,.bespoke-marp-osc,.bespoke-progress-parent{display:none;transition:none}@media screen{body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;color:inherit;cursor:pointer;font-size:inherit;opacity:.8;outline:none;padding:0;transition:opacity .2s linear;-webkit-tap-highlight-color:transparent}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:disabled,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:disabled,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:disabled{cursor:not-allowed;opacity:.15!important}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover{opacity:1}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:active,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:active,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover:active{opacity:.6}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:not(:disabled),body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button:hover:not(:disabled),body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button:hover:not(:disabled){transition:none}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button.bespoke-marp-presenter-info-page-prev{background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNNjggOTBMMjggNTBsNDAtNDAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button.bespoke-marp-presenter-info-page-next{background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSI1IiBkPSJNMzIgOTBsNDAtNDAtNDAtNDAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen]{background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48ZGVmcz48c3R5bGU+LmF7ZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NXB4fTwvc3R5bGU+PC9kZWZzPjxyZWN0IGNsYXNzPSJhIiB4PSIxMCIgeT0iMjAiIHdpZHRoPSI4MCIgaGVpZ2h0PSI2MCIgcng9IjUuNjciLz48cGF0aCBjbGFzcz0iYSIgZD0iTTQwIDcwSDIwVjUwbTIwIDBMMjAgNzBtNDAtNDBoMjB2MjBtLTIwIDBsMjAtMjAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button.exit[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button.exit[data-bespoke-marp-osc=fullscreen]{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48ZGVmcz48c3R5bGU+LmF7ZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NXB4fTwvc3R5bGU+PC9kZWZzPjxyZWN0IGNsYXNzPSJhIiB4PSIxMCIgeT0iMjAiIHdpZHRoPSI4MCIgaGVpZ2h0PSI2MCIgcng9IjUuNjciLz48cGF0aCBjbGFzcz0iYSIgZD0iTTIwIDUwaDIwdjIwbS0yMCAwbDIwLTIwbTQwIDBINjBWMzBtMjAgMEw2MCA1MCIvPjwvc3ZnPg==")}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter]{background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48ZGVmcz48c3R5bGU+LmF7ZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS13aWR0aDo1cHh9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9ImEiIGQ9Ik0yMCA2MGgtNWE1IDUgMCAwMS01LTVWMjBhNSA1IDAgMDE1LTVoNjBhNSA1IDAgMDE1IDV2NU0zMCA4NWg2MCIvPjxyZWN0IHg9IjMwIiB5PSIzNSIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQwIiByeD0iNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIi8+PHJlY3QgY2xhc3M9ImEiIHg9IjMwIiB5PSIzNSIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQwIiByeD0iNSIvPjxwYXRoIGNsYXNzPSJhIiBkPSJNNDAgNTBoNDBNNDAgNjBoMzAiLz48L3N2Zz4=") no-repeat 50%;background-size:contain;overflow:hidden;text-indent:100%;white-space:nowrap}body,html{height:100%;margin:0}body{background:#000;overflow:hidden}svg.bespoke-marp-slide{content-visibility:hidden;z-index:-1;pointer-events:none;opacity:0}svg.bespoke-marp-slide.bespoke-marp-active{content-visibility:visible;z-index:0;pointer-events:auto;opacity:1}svg.bespoke-marp-slide.bespoke-marp-active.bespoke-marp-active-ready *{-webkit-animation-name:__bespoke_marp__!important;animation-name:__bespoke_marp__!important}@supports not (content-visibility:hidden){svg.bespoke-marp-slide[data-bespoke-marp-load=hideable]{display:none}svg.bespoke-marp-slide[data-bespoke-marp-load=hideable].bespoke-marp-active{display:block}}[data-bespoke-marp-fragment=inactive]{visibility:hidden}body[data-bespoke-view=""] .bespoke-marp-parent,body[data-bespoke-view=next] .bespoke-marp-parent{bottom:0;left:0;position:absolute;right:0;top:0}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc{background:rgba(0,0,0,.65);border-radius:7px;bottom:50px;color:#fff;display:block;font-family:Helvetica,Arial,sans-serif;font-size:16px;left:50%;line-height:0;opacity:1;padding:12px;position:absolute;touch-action:manipulation;transform:translateX(-50%);transition:opacity .2s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1;will-change:transform}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>*,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>*{margin-left:6px}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>:first-child,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>:first-child{margin-left:0}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>span,body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>span{opacity:.8}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>span[data-bespoke-marp-osc=page],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>span[data-bespoke-marp-osc=page]{display:inline-block;min-width:140px;text-align:center}body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter],body[data-bespoke-view=""] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=fullscreen],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=next],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=presenter],body[data-bespoke-view=next] .bespoke-marp-parent>.bespoke-marp-osc>button[data-bespoke-marp-osc=prev]{height:32px;line-height:32px;width:32px}body[data-bespoke-view=""] .bespoke-marp-parent.bespoke-marp-inactive,body[data-bespoke-view=next] .bespoke-marp-parent.bespoke-marp-inactive{cursor:none}body[data-bespoke-view=""] .bespoke-marp-parent.bespoke-marp-inactive>.bespoke-marp-osc,body[data-bespoke-view=next] .bespoke-marp-parent.bespoke-marp-inactive>.bespoke-marp-osc{opacity:0;pointer-events:none}body[data-bespoke-view=""] svg.bespoke-marp-slide,body[data-bespoke-view=next] svg.bespoke-marp-slide{height:100%;left:0;position:absolute;top:0;width:100%}body[data-bespoke-view=""] .bespoke-progress-parent{background:#222;display:flex;height:5px;width:100%}body[data-bespoke-view=""] .bespoke-progress-parent+.bespoke-marp-parent{top:5px}body[data-bespoke-view=""] .bespoke-progress-parent .bespoke-progress-bar{flex:0 0 0;background:#0288d1;transition:flex-basis .2s cubic-bezier(0,1,1,1)}body[data-bespoke-view=next]{background:transparent}body[data-bespoke-view=presenter]{background:#161616}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container{font-family:Helvetica,Arial,sans-serif;height:100%;left:0;position:absolute;top:0;width:100%;display:grid;grid-template-columns:2fr 1fr;grid-template-rows:minmax(140px,1fr) 2fr 3em;grid-template-areas:"current next" "current note" "info note"}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-parent{grid-area:current;position:relative;overflow:hidden}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-parent svg.bespoke-marp-slide{height:calc(100% - 40px);left:20px;position:absolute;pointer-events:none;top:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:calc(100% - 40px)}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-parent svg.bespoke-marp-slide.bespoke-marp-active{filter:drop-shadow(0 3px 10px rgba(0,0,0,.5))}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-next-container{background:#222;cursor:pointer;display:none;grid-area:next;overflow:hidden;position:relative}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-next-container.active{display:block}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-next-container iframe.bespoke-marp-presenter-next{background:transparent;border:0;display:block;filter:drop-shadow(0 3px 10px rgba(0,0,0,.5));height:calc(100% - 40px);left:20px;position:absolute;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;top:20px;width:calc(100% - 40px)}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container{background:#222;color:#eee;grid-area:note}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note{margin:20px;width:calc(100% - 40px);height:calc(100% - 40px);box-sizing:border-box;font-size:1.1em;overflow:auto;padding-right:3px;white-space:pre-wrap;word-wrap:break-word;scrollbar-width:thin;scrollbar-color:hsla(0,0%,93.3%,.5) transparent}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note::-webkit-scrollbar{width:6px}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note::-webkit-scrollbar-track{background:transparent}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note::-webkit-scrollbar-thumb{background:hsla(0,0%,93.3%,.5);border-radius:6px}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note:empty{pointer-events:none}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note.active{display:block}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note p:first-child{margin-top:0}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-note-container .bespoke-marp-note p:last-child{margin-bottom:0}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container{align-items:center;box-sizing:border-box;color:#eee;display:flex;flex-wrap:nowrap;grid-area:info;justify-content:center;padding:0 10px}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-page,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-time,body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-timer{display:block;box-sizing:border-box;padding:0 10px;white-space:nowrap;width:100%}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container button{height:1.5em;line-height:1.5em;width:1.5em}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-page{order:2;text-align:center}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-page .bespoke-marp-presenter-info-page-text{display:inline-block;min-width:120px;text-align:center}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-time{color:#999;order:1;text-align:left}body[data-bespoke-view=presenter] .bespoke-marp-presenter-container .bespoke-marp-presenter-info-container .bespoke-marp-presenter-info-timer{color:#999;order:3;text-align:right}}@media print{.bespoke-marp-presenter-info-container,.bespoke-marp-presenter-next-container,.bespoke-marp-presenter-note-container{display:none}}</style><style>div#p>svg>foreignObject>section{width:1280px;height:720px;box-sizing:border-box;overflow:hidden;position:relative;scroll-snap-align:center center}div#p>svg>foreignObject>section:after{bottom:0;content:attr(data-marpit-pagination);padding:inherit;pointer-events:none;position:absolute;right:0}div#p>svg>foreignObject>section:not([data-marpit-pagination]):after{display:none}/* Normalization */div#p>svg>foreignObject>section h1{font-size:2em;margin:0.67em 0}div#p>svg>foreignObject>section video::-webkit-media-controls{will-change:transform}@page{size:1280px 720px;margin:0}@media print{body,html{background-color:#fff;margin:0;page-break-inside:avoid;break-inside:avoid-page}div#p>svg>foreignObject>section{page-break-before:always;break-before:page}div#p>svg>foreignObject>section,div#p>svg>foreignObject>section *{-webkit-print-color-adjust:exact!important;animation-delay:0s!important;animation-duration:0s!important;color-adjust:exact!important;transition:none!important}div#p>svg[data-marpit-svg]{display:block;height:100vh;width:100vw}}div#p>svg>foreignObject>section svg[data-marp-fitting=svg]{display:block;height:auto;width:100%}@supports (-ms-ime-align:auto){div#p>svg>foreignObject>section svg[data-marp-fitting=svg]{position:static}}div#p>svg>foreignObject>section svg[data-marp-fitting=svg].__reflow__{content:""}@supports (-ms-ime-align:auto){div#p>svg>foreignObject>section svg[data-marp-fitting=svg].__reflow__{position:relative}}div#p>svg>foreignObject>section [data-marp-fitting-svg-content]{display:table;white-space:nowrap}div#p>svg>foreignObject>section [data-marp-fitting-svg-content-wrap]{white-space:pre}div#p>svg>foreignObject>section img[data-marp-twemoji]{background:transparent;height:1em;margin:0 .05em 0 .1em;vertical-align:-.1em;width:1em}
|
|
2 /*!
|
|
3 * Marp default theme.
|
|
4 *
|
|
5 * @theme default
|
|
6 * @author Yuki Hattori
|
|
7 *
|
|
8 * @auto-scaling true
|
|
9 * @size 4:3 960px 720px
|
|
10 */div#p>svg>foreignObject>section .octicon{display:inline-block;fill:currentColor;vertical-align:text-bottom}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 h1 .octicon-link,div#p>svg>foreignObject>section h2 .octicon-link,div#p>svg>foreignObject>section h3 .octicon-link,div#p>svg>foreignObject>section h4 .octicon-link,div#p>svg>foreignObject>section h5 .octicon-link,div#p>svg>foreignObject>section h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}div#p>svg>foreignObject>section h1:hover .anchor,div#p>svg>foreignObject>section h2:hover .anchor,div#p>svg>foreignObject>section h3:hover .anchor,div#p>svg>foreignObject>section h4:hover .anchor,div#p>svg>foreignObject>section h5:hover .anchor,div#p>svg>foreignObject>section h6:hover .anchor{text-decoration:none}div#p>svg>foreignObject>section h1:hover .anchor .octicon-link,div#p>svg>foreignObject>section h2:hover .anchor .octicon-link,div#p>svg>foreignObject>section h3:hover .anchor .octicon-link,div#p>svg>foreignObject>section h4:hover .anchor .octicon-link,div#p>svg>foreignObject>section h5:hover .anchor .octicon-link,div#p>svg>foreignObject>section h6:hover .anchor .octicon-link{visibility:visible}div#p>svg>foreignObject>section h1:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h2:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h3:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h4:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h5:hover .anchor .octicon-link:before,div#p>svg>foreignObject>section h6:hover .anchor .octicon-link:before{width:16px;height:16px;content:" ";display:inline-block;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' aria-hidden='true'%3E%3Cpath fill-rule='evenodd' d='M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z'/%3E%3C/svg%3E")}div#p>svg>foreignObject>section{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#24292e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:16px;line-height:1.5;word-wrap:break-word}div#p>svg>foreignObject>section{--marpit-root-font-size:16px}div#p>svg>foreignObject>section details{display:block}div#p>svg>foreignObject>section summary{display:list-item}div#p>svg>foreignObject>section a{background-color:initial}div#p>svg>foreignObject>section a:active,div#p>svg>foreignObject>section a:hover{outline-width:0}div#p>svg>foreignObject>section strong{font-weight:inherit;font-weight:bolder}div#p>svg>foreignObject>section h1{margin:.67em 0}div#p>svg>foreignObject>section img{border-style:none}div#p>svg>foreignObject>section code,div#p>svg>foreignObject>section kbd,div#p>svg>foreignObject>section pre{font-family:monospace,monospace;font-size:1em}div#p>svg>foreignObject>section hr{box-sizing:initial;overflow:visible}div#p>svg>foreignObject>section input{font:inherit;margin:0;overflow:visible}div#p>svg>foreignObject>section [type=checkbox]{padding:0}div#p>svg>foreignObject>section *,div#p>svg>foreignObject>section [type=checkbox]{box-sizing:border-box}div#p>svg>foreignObject>section input{font-family:inherit;font-size:inherit;line-height:inherit}div#p>svg>foreignObject>section a{color:#0366d6;text-decoration:none}div#p>svg>foreignObject>section a:hover{text-decoration:underline}div#p>svg>foreignObject>section strong{font-weight:600}div#p>svg>foreignObject>section hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom:1px solid #dfe2e5}div#p>svg>foreignObject>section hr:after,div#p>svg>foreignObject>section hr:before{display:table;content:""}div#p>svg>foreignObject>section hr:after{clear:both}div#p>svg>foreignObject>section table{border-spacing:0;border-collapse:collapse}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 h1,div#p>svg>foreignObject>section h2,div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4,div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{margin-top:0;margin-bottom:0}div#p>svg>foreignObject>section h1{font-size:32px}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{font-weight:600}div#p>svg>foreignObject>section h2{font-size:24px}div#p>svg>foreignObject>section h3{font-size:20px}div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4{font-weight:600}div#p>svg>foreignObject>section h4{font-size:16px}div#p>svg>foreignObject>section h5{font-size:14px}div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{font-weight:600}div#p>svg>foreignObject>section h6{font-size:12px}div#p>svg>foreignObject>section p{margin-top:0;margin-bottom:10px}div#p>svg>foreignObject>section blockquote{margin:0}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{padding-left:0;margin-top:0;margin-bottom:0}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 code,div#p>svg>foreignObject>section pre{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px}div#p>svg>foreignObject>section pre{margin-top:0;margin-bottom:0}div#p>svg>foreignObject>section input::-webkit-inner-spin-button,div#p>svg>foreignObject>section input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;appearance:none}div#p>svg>foreignObject>section :checked+.radio-label{position:relative;z-index:1;border-color:#0366d6}div#p>svg>foreignObject>section .border{border:1px solid #e1e4e8!important}div#p>svg>foreignObject>section .border-0{border:0!important}div#p>svg>foreignObject>section .border-bottom{border-bottom:1px solid #e1e4e8!important}div#p>svg>foreignObject>section .rounded-1{border-radius:3px!important}div#p>svg>foreignObject>section .bg-white{background-color:#fff!important}div#p>svg>foreignObject>section .bg-gray-light{background-color:#fafbfc!important}div#p>svg>foreignObject>section .text-gray-light{color:#6a737d!important}div#p>svg>foreignObject>section .pl-3,div#p>svg>foreignObject>section .px-3{padding-left:16px!important}div#p>svg>foreignObject>section .px-3{padding-right:16px!important}div#p>svg>foreignObject>section .f6{font-size:12px!important}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.f6{--marpit-root-font-size:12px!important}div#p>svg>foreignObject>section .lh-condensed{line-height:1.25!important}div#p>svg>foreignObject>section .text-bold{font-weight:600!important}div#p>svg>foreignObject>section .pl-c{color:#6a737d}div#p>svg>foreignObject>section .pl-c1,div#p>svg>foreignObject>section .pl-s .pl-v{color:#005cc5}div#p>svg>foreignObject>section .pl-e,div#p>svg>foreignObject>section .pl-en{color:#6f42c1}div#p>svg>foreignObject>section .pl-s .pl-s1,div#p>svg>foreignObject>section .pl-smi{color:#24292e}div#p>svg>foreignObject>section .pl-ent{color:#22863a}div#p>svg>foreignObject>section .pl-k{color:#d73a49}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:#032f62}div#p>svg>foreignObject>section .pl-smw,div#p>svg>foreignObject>section .pl-v{color:#e36209}div#p>svg>foreignObject>section .pl-bu{color:#b31d28}div#p>svg>foreignObject>section .pl-ii{color:#fafbfc;background-color:#b31d28}div#p>svg>foreignObject>section .pl-c2{color:#fafbfc;background-color:#d73a49}div#p>svg>foreignObject>section .pl-c2:before{content:"^M"}div#p>svg>foreignObject>section .pl-sr .pl-cce{font-weight:700;color:#22863a}div#p>svg>foreignObject>section .pl-ml{color:#735c0f}div#p>svg>foreignObject>section .pl-mh,div#p>svg>foreignObject>section .pl-mh .pl-en,div#p>svg>foreignObject>section .pl-ms{font-weight:700;color:#005cc5}div#p>svg>foreignObject>section .pl-mi{font-style:italic;color:#24292e}div#p>svg>foreignObject>section .pl-mb{font-weight:700;color:#24292e}div#p>svg>foreignObject>section .pl-md{color:#b31d28;background-color:#ffeef0}div#p>svg>foreignObject>section .pl-mi1{color:#22863a;background-color:#f0fff4}div#p>svg>foreignObject>section .pl-mc{color:#e36209;background-color:#ffebda}div#p>svg>foreignObject>section .pl-mi2{color:#f6f8fa;background-color:#005cc5}div#p>svg>foreignObject>section .pl-mdr{font-weight:700;color:#6f42c1}div#p>svg>foreignObject>section .pl-ba{color:#586069}div#p>svg>foreignObject>section .pl-sg{color:#959da5}div#p>svg>foreignObject>section .pl-corl{text-decoration:underline;color:#032f62}div#p>svg>foreignObject>section .mb-0{margin-bottom:0!important}div#p>svg>foreignObject>section .my-2{margin-bottom:8px!important;margin-top:8px!important}div#p>svg>foreignObject>section .pl-0{padding-left:0!important}div#p>svg>foreignObject>section .py-0{padding-top:0!important;padding-bottom:0!important}div#p>svg>foreignObject>section .pl-1{padding-left:4px!important}div#p>svg>foreignObject>section .pl-2{padding-left:8px!important}div#p>svg>foreignObject>section .py-2{padding-top:8px!important;padding-bottom:8px!important}div#p>svg>foreignObject>section .pl-3{padding-left:16px!important}div#p>svg>foreignObject>section .pl-4{padding-left:24px!important}div#p>svg>foreignObject>section .pl-5{padding-left:32px!important}div#p>svg>foreignObject>section .pl-6{padding-left:40px!important}div#p>svg>foreignObject>section .pl-7{padding-left:48px!important}div#p>svg>foreignObject>section .pl-8{padding-left:64px!important}div#p>svg>foreignObject>section .pl-9{padding-left:80px!important}div#p>svg>foreignObject>section .pl-10{padding-left:96px!important}div#p>svg>foreignObject>section .pl-11{padding-left:112px!important}div#p>svg>foreignObject>section .pl-12{padding-left:128px!important}div#p>svg>foreignObject>section hr{border-bottom-color:#eee}div#p>svg>foreignObject>section kbd{display:inline-block;padding:3px 5px;font:11px SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:1px solid #d1d5da;border-radius:3px;box-shadow:inset 0 -1px 0 #d1d5da}div#p>svg>foreignObject>section:after,div#p>svg>foreignObject>section:before{display:table
|
|
11 /* content:""; */}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 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 pre,div#p>svg>foreignObject>section table,div#p>svg>foreignObject>section ul{margin-top:0;margin-bottom:16px}div#p>svg>foreignObject>section hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}div#p>svg>foreignObject>section blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}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 h1,div#p>svg>foreignObject>section h2,div#p>svg>foreignObject>section h3,div#p>svg>foreignObject>section h4,div#p>svg>foreignObject>section h5,div#p>svg>foreignObject>section h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}div#p>svg>foreignObject>section h1{font-size:2em}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{padding-bottom:.3em;border-bottom:1px solid #eaecef}div#p>svg>foreignObject>section h2{font-size:1.5em}div#p>svg>foreignObject>section h3{font-size:1.25em}div#p>svg>foreignObject>section h4{font-size:1em}div#p>svg>foreignObject>section h5{font-size:.875em}div#p>svg>foreignObject>section h6{font-size:.85em;color:#6a737d}div#p>svg>foreignObject>section ol,div#p>svg>foreignObject>section ul{padding-left:2em}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-top:0;margin-bottom:0}div#p>svg>foreignObject>section li{word-wrap:break-all}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{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}div#p>svg>foreignObject>section dl dd{padding:0 16px;margin-bottom:16px}div#p>svg>foreignObject>section table{display:block;width:100%;overflow:auto}div#p>svg>foreignObject>section table th{font-weight:600}div#p>svg>foreignObject>section table td,div#p>svg>foreignObject>section table th{padding:6px 13px;border:1px solid #dfe2e5}div#p>svg>foreignObject>section table tr{background-color:#fff;border-top:1px solid #c6cbd1}div#p>svg>foreignObject>section table tr:nth-child(2n){background-color:#f6f8fa}div#p>svg>foreignObject>section img{max-width:100%;box-sizing:initial;background-color:#fff}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 code{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px}div#p>svg>foreignObject>section pre{word-wrap:normal}div#p>svg>foreignObject>section pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}div#p>svg>foreignObject>section .highlight{margin-bottom:16px}div#p>svg>foreignObject>section .highlight pre{margin-bottom:0;word-break:normal}div#p>svg>foreignObject>section pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}div#p>svg>foreignObject>section pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:initial;border:0}div#p>svg>foreignObject>section .commit-tease-sha{display:inline-block;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:90%;color:#444d56}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.commit-tease-sha{--marpit-root-font-size:90%}div#p>svg>foreignObject>section .full-commit .btn-outline:not(:disabled):hover{color:#005cc5;border-color:#005cc5}div#p>svg>foreignObject>section .blob-wrapper{overflow-x:auto;overflow-y:hidden}div#p>svg>foreignObject>section .blob-wrapper-embedded{max-height:240px;overflow-y:auto}div#p>svg>foreignObject>section .blob-num{width:1%;min-width:50px;padding-right:10px;padding-left:10px;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:20px;color:rgba(27,31,35,.3);text-align:right;white-space:nowrap;vertical-align:top;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.blob-num{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .blob-num:hover{color:rgba(27,31,35,.6)}div#p>svg>foreignObject>section .blob-num:before{content:attr(data-line-number)}div#p>svg>foreignObject>section .blob-code{position:relative;padding-right:10px;padding-left:10px;line-height:20px;vertical-align:top}div#p>svg>foreignObject>section .blob-code-inner{overflow:visible;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;color:#24292e;word-wrap:normal;white-space:pre}div#p>svg>foreignObject>section div#p>svg>foreignObject>section section.blob-code-inner{--marpit-root-font-size:12px}div#p>svg>foreignObject>section .pl-token.active,div#p>svg>foreignObject>section .pl-token:hover{cursor:pointer;background:#ffea7f}div#p>svg>foreignObject>section .tab-size[data-tab-size="1"]{-moz-tab-size:1;-o-tab-size:1;tab-size:1}div#p>svg>foreignObject>section .tab-size[data-tab-size="2"]{-moz-tab-size:2;-o-tab-size:2;tab-size:2}div#p>svg>foreignObject>section .tab-size[data-tab-size="3"]{-moz-tab-size:3;-o-tab-size:3;tab-size:3}div#p>svg>foreignObject>section .tab-size[data-tab-size="4"]{-moz-tab-size:4;-o-tab-size:4;tab-size:4}div#p>svg>foreignObject>section .tab-size[data-tab-size="5"]{-moz-tab-size:5;-o-tab-size:5;tab-size:5}div#p>svg>foreignObject>section .tab-size[data-tab-size="6"]{-moz-tab-size:6;-o-tab-size:6;tab-size:6}div#p>svg>foreignObject>section .tab-size[data-tab-size="7"]{-moz-tab-size:7;-o-tab-size:7;tab-size:7}div#p>svg>foreignObject>section .tab-size[data-tab-size="8"]{-moz-tab-size:8;-o-tab-size:8;tab-size:8}div#p>svg>foreignObject>section .tab-size[data-tab-size="9"]{-moz-tab-size:9;-o-tab-size:9;tab-size:9}div#p>svg>foreignObject>section .tab-size[data-tab-size="10"]{-moz-tab-size:10;-o-tab-size:10;tab-size:10}div#p>svg>foreignObject>section .tab-size[data-tab-size="11"]{-moz-tab-size:11;-o-tab-size:11;tab-size:11}div#p>svg>foreignObject>section .tab-size[data-tab-size="12"]{-moz-tab-size:12;-o-tab-size:12;tab-size:12}div#p>svg>foreignObject>section .task-list-item{list-style-type:none}div#p>svg>foreignObject>section .task-list-item+.task-list-item{margin-top:3px}div#p>svg>foreignObject>section .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}div#p>svg>foreignObject>section .hljs{display:block;background:#fff;padding:.5em;color:#333;overflow-x:auto}div#p>svg>foreignObject>section .hljs-comment,div#p>svg>foreignObject>section .hljs-meta{color:#969896}div#p>svg>foreignObject>section .hljs-emphasis,div#p>svg>foreignObject>section .hljs-quote,div#p>svg>foreignObject>section .hljs-strong,div#p>svg>foreignObject>section .hljs-template-variable,div#p>svg>foreignObject>section .hljs-variable{color:#df5000}div#p>svg>foreignObject>section .hljs-keyword,div#p>svg>foreignObject>section .hljs-selector-tag,div#p>svg>foreignObject>section .hljs-type{color:#d73a49}div#p>svg>foreignObject>section .hljs-attribute,div#p>svg>foreignObject>section .hljs-bullet,div#p>svg>foreignObject>section .hljs-literal,div#p>svg>foreignObject>section .hljs-symbol{color:#0086b3}div#p>svg>foreignObject>section .hljs-name,div#p>svg>foreignObject>section .hljs-section{color:#63a35c}div#p>svg>foreignObject>section .hljs-tag{color:#333}div#p>svg>foreignObject>section .hljs-attr,div#p>svg>foreignObject>section .hljs-selector-attr,div#p>svg>foreignObject>section .hljs-selector-class,div#p>svg>foreignObject>section .hljs-selector-id,div#p>svg>foreignObject>section .hljs-selector-pseudo,div#p>svg>foreignObject>section .hljs-title{color:#6f42c1}div#p>svg>foreignObject>section .hljs-addition{color:#55a532;background-color:#eaffea}div#p>svg>foreignObject>section .hljs-deletion{color:#bd2c00;background-color:#ffecec}div#p>svg>foreignObject>section .hljs-link{text-decoration:underline}div#p>svg>foreignObject>section .hljs-number{color:#005cc5}div#p>svg>foreignObject>section .hljs-string{color:#032f62}div#p>svg>foreignObject>section svg[data-marp-fitting=svg]{max-height:563px}div#p>svg>foreignObject>section h1{color:#246;font-size:1.6em}div#p>svg>foreignObject>section h1,div#p>svg>foreignObject>section h2{border-bottom:none}div#p>svg>foreignObject>section h2{font-size:1.3em}div#p>svg>foreignObject>section h3{font-size:1.1em}div#p>svg>foreignObject>section h4{font-size:1.05em}div#p>svg>foreignObject>section h5{font-size:1em}div#p>svg>foreignObject>section h6{font-size:.9em}div#p>svg>foreignObject>section h1 strong,div#p>svg>foreignObject>section h2 strong,div#p>svg>foreignObject>section h3 strong,div#p>svg>foreignObject>section h4 strong,div#p>svg>foreignObject>section h5 strong,div#p>svg>foreignObject>section h6 strong{font-weight:inherit;color:#48c}div#p>svg>foreignObject>section hr{height:0;padding-top:.25em}div#p>svg>foreignObject>section pre{border:1px solid #999;line-height:1.15;overflow:visible}div#p>svg>foreignObject>section pre code svg[data-marp-fitting=svg]{max-height:529px}div#p>svg>foreignObject>section footer,div#p>svg>foreignObject>section header{margin:0;position:absolute;left:30px;color:hsla(0,0%,40%,.75);font-size:18px}div#p>svg>foreignObject>section header{top:21px}div#p>svg>foreignObject>section footer{bottom:21px}div#p>svg>foreignObject>section{align-items:stretch;background:#fff;display:flex;flex-direction:column;flex-wrap: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>: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{position:absolute;padding:0;right:30px;bottom:21px;font-size:24px;color:#777}div#p>svg>foreignObject>section:after{--marpit-root-font-size:24px}div#p>svg>foreignObject>section.invert{background-color:#222;color:#e6eaf0}div#p>svg>foreignObject>section.invert:after{color:#999}div#p>svg>foreignObject>section.invert img{background-color:transparent}div#p>svg>foreignObject>section.invert a{color:#50b3ff}div#p>svg>foreignObject>section.invert h1{color:#a3c5e7}div#p>svg>foreignObject>section.invert h2,div#p>svg>foreignObject>section.invert h3,div#p>svg>foreignObject>section.invert h4,div#p>svg>foreignObject>section.invert h5{color:#ebeff5}div#p>svg>foreignObject>section.invert blockquote,div#p>svg>foreignObject>section.invert h6{border-color:#3d3f43;color:#939699}div#p>svg>foreignObject>section.invert h1 strong,div#p>svg>foreignObject>section.invert h2 strong,div#p>svg>foreignObject>section.invert h3 strong,div#p>svg>foreignObject>section.invert h4 strong,div#p>svg>foreignObject>section.invert h5 strong,div#p>svg>foreignObject>section.invert h6 strong{color:#7bf}div#p>svg>foreignObject>section.invert hr{background-color:#3d3f43}div#p>svg>foreignObject>section.invert footer,div#p>svg>foreignObject>section.invert header{color:hsla(0,0%,60%,.75)}div#p>svg>foreignObject>section.invert code,div#p>svg>foreignObject>section.invert kbd{background-color:#111}div#p>svg>foreignObject>section.invert kbd{border-color:#666;box-shadow:inset 0 -1px 0 #555;color:#e6eaf0}div#p>svg>foreignObject>section.invert table tr{background-color:#12181d;border-color:#60657b}div#p>svg>foreignObject>section.invert table tr:nth-child(2n){background-color:#1b2024}div#p>svg>foreignObject>section.invert table td,div#p>svg>foreignObject>section.invert table th{border-color:#5b5e61}div#p>svg>foreignObject>section.invert pre{background-color:#0a0e12;border-color:#777}div#p>svg>foreignObject>section.invert pre code{background-color:transparent}div#p>svg>foreignObject>section[data-color] h1,div#p>svg>foreignObject>section[data-color] h2,div#p>svg>foreignObject>section[data-color] h3,div#p>svg>foreignObject>section[data-color] h4,div#p>svg>foreignObject>section[data-color] h5,div#p>svg>foreignObject>section[data-color] h6{color:currentColor}div#p>svg>foreignObject>section{background-color:#FFFFFF;font-size:28px;color:#4b4b4b;font-family:"Arial","Hiragino Maru Gothic ProN"}div#p>svg>foreignObject>section{--marpit-root-font-size:28px}div#p>svg>foreignObject>section.title{font-size:40px;padding:40px}div#p>svg>foreignObject>section.title{--marpit-root-font-size:40px}div#p>svg>foreignObject>section.title h1{text-align:center}div#p>svg>foreignObject>section.slide h1{position:absolute;left:50px;top:35px}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{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%}</style></head><body><div class="bespoke-marp-osc"><button data-bespoke-marp-osc="prev" tabindex="-1" title="Previous slide">Previous slide</button><span data-bespoke-marp-osc="page"></span><button data-bespoke-marp-osc="next" tabindex="-1" title="Next slide">Next slide</button><button data-bespoke-marp-osc="fullscreen" tabindex="-1" title="Toggle fullscreen (f)">Toggle fullscreen</button><button data-bespoke-marp-osc="presenter" tabindex="-1" title="Open presenter view (p)">Open presenter view</button></div><div id="p"><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="1" data-paginate="true" data-class="title" data-theme="default" data-style="section {
|
|
12 background-color: #FFFFFF;
|
|
13 font-size: 28px;
|
|
14 color: #4b4b4b;
|
|
15 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
16 }
|
|
17
|
|
18 section.title {
|
|
19 font-size: 40px;
|
|
20 padding: 40px;
|
|
21 }
|
|
22 section.title h1 {
|
|
23 text-align: center;
|
|
24 }
|
|
25
|
|
26 section.slide h1 {
|
|
27 position: absolute;
|
|
28 left: 50px; top: 35px;
|
|
29 }
|
52
|
30 " class="title" data-marpit-pagination="1" data-marpit-pagination-total="28" style="--paginate:true;--class:title;--theme:default;
|
46
|
31 ;">
|
|
32 <h1><svg data-marp-fitting="svg"><foreignObject><span data-marp-fitting-svg-content> コンテナ技術を用いた教育情報システムの構築</span></foreignObject></svg></h1>
|
|
33 <ul>
|
|
34 <li>宮平 賢
|
|
35 <ul>
|
|
36 <li>琉球大学工学部工学科知能情報コース</li>
|
|
37 </ul>
|
|
38 </li>
|
|
39 <li>河野 真治
|
|
40 <ul>
|
|
41 <li>琉球大学工学部</li>
|
|
42 </ul>
|
|
43 </li>
|
|
44 </ul>
|
|
45 </section>
|
|
46 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="2" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
47 background-color: #FFFFFF;
|
|
48 font-size: 28px;
|
|
49 color: #4b4b4b;
|
|
50 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
51 }
|
|
52
|
|
53 section.title {
|
|
54 font-size: 40px;
|
|
55 padding: 40px;
|
|
56 }
|
|
57 section.title h1 {
|
|
58 text-align: center;
|
|
59 }
|
|
60
|
|
61 section.slide h1 {
|
|
62 position: absolute;
|
|
63 left: 50px; top: 35px;
|
|
64 }
|
52
|
65 " class="slide" data-marpit-pagination="2" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
66 ;">
|
52
|
67 <h1>学生が自由に利用できる教育情報システムの構築</h1>
|
46
|
68 <ul>
|
|
69 <li>情報通信技術の普及に伴い学ぶことが増えている</li>
|
|
70 <li>その学習環境として、Virtual MachineやContainerがある
|
|
71 <ul>
|
49
|
72 <li>実行には高性能なPCが必要な場合がある</li>
|
|
73 <li>クラウドサービスもあるが、無料だと制限がある</li>
|
46
|
74 </ul>
|
|
75 </li>
|
49
|
76 <li>学生の学習環境として、コストを支払う必要のない環境を提供したい</li>
|
|
77 <li>今年度はシステム更新があり、新しくSSDとGPUが搭載される
|
|
78 <ul>
|
|
79 <li>リソースを最大限利用できる教育情報システムが必要となる</li>
|
46
|
80 </ul>
|
|
81 </li>
|
|
82 </ul>
|
|
83 </section>
|
47
|
84 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="3" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
85 background-color: #FFFFFF;
|
|
86 font-size: 28px;
|
|
87 color: #4b4b4b;
|
|
88 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
89 }
|
|
90
|
|
91 section.title {
|
|
92 font-size: 40px;
|
|
93 padding: 40px;
|
|
94 }
|
|
95 section.title h1 {
|
|
96 text-align: center;
|
|
97 }
|
|
98
|
|
99 section.slide h1 {
|
|
100 position: absolute;
|
|
101 left: 50px; top: 35px;
|
|
102 }
|
52
|
103 " class="slide" data-marpit-pagination="3" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
104 ;">
|
47
|
105 <h1>これまでの学生向け学習環境</h1>
|
|
106 <ul>
|
|
107 <li>
|
|
108 <p>VM貸出サービス</p>
|
|
109 <ul>
|
|
110 <li>Akatsuki
|
|
111 <ul>
|
|
112 <li>申請を行い、Webコントロールパネルから作成</li>
|
|
113 </ul>
|
|
114 </li>
|
|
115 <li>ie-virsh
|
|
116 <ul>
|
|
117 <li>手元のPCで作成したVMイメージのデプロイ</li>
|
|
118 </ul>
|
|
119 </li>
|
|
120 </ul>
|
|
121 </li>
|
|
122 <li>
|
|
123 <p>VM貸出サービスのデフォルトスペック</p>
|
|
124 <ul>
|
|
125 <li>CPU 1コア</li>
|
|
126 <li>メモリ 1GB</li>
|
|
127 <li>ディスク容量 10GB</li>
|
|
128 </ul>
|
|
129 </li>
|
|
130 </ul>
|
46
|
131 </section>
|
|
132 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="4" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
133 background-color: #FFFFFF;
|
|
134 font-size: 28px;
|
|
135 color: #4b4b4b;
|
|
136 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
137 }
|
|
138
|
|
139 section.title {
|
|
140 font-size: 40px;
|
|
141 padding: 40px;
|
|
142 }
|
|
143 section.title h1 {
|
|
144 text-align: center;
|
|
145 }
|
|
146
|
|
147 section.slide h1 {
|
|
148 position: absolute;
|
|
149 left: 50px; top: 35px;
|
|
150 }
|
52
|
151 " class="slide" data-marpit-pagination="4" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
152 ;">
|
47
|
153 <h1>これまでの学習環境の問題点</h1>
|
|
154 <ul>
|
|
155 <li>VM貸出サービスの一部学生は申請の方法が分からなかったり、貸出サービスがあることが周知されていなかったため、旧システムのリソースが余っていた</li>
|
|
156 </ul>
|
|
157 <br />
|
46
|
158 <ul>
|
47
|
159 <li>VMのスペックの変更にはシステム管理チームへの申請が必要であり、利用者と管理者とのやり取りなどの手間があった</li>
|
|
160 </ul>
|
|
161 <br />
|
|
162 <ul>
|
|
163 <li>旧システムにはGPUが搭載されていないため、貸出サービスではなく研究室ごとの機器、クラウドサービスが多く利用された</li>
|
46
|
164 </ul>
|
52
|
165 <br />
|
|
166 <ul>
|
|
167 <li>ファイルシステムに使用していたGFS2はロックマネージャの影響が大きく、サーバ1台がクラスタに参加できないとGFS2上にアクセスできなくなった</li>
|
|
168 </ul>
|
46
|
169 </section>
|
|
170 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="5" data-paginate="true" data-class="title" data-theme="default" data-style="section {
|
|
171 background-color: #FFFFFF;
|
|
172 font-size: 28px;
|
|
173 color: #4b4b4b;
|
|
174 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
175 }
|
|
176
|
|
177 section.title {
|
|
178 font-size: 40px;
|
|
179 padding: 40px;
|
|
180 }
|
|
181 section.title h1 {
|
|
182 text-align: center;
|
|
183 }
|
|
184
|
|
185 section.slide h1 {
|
|
186 position: absolute;
|
|
187 left: 50px; top: 35px;
|
|
188 }
|
52
|
189 " class="title" data-marpit-pagination="5" data-marpit-pagination-total="28" style="--paginate:true;--class:title;--theme:default;
|
46
|
190 ;">
|
|
191 <h1>教育情報システムの構築</h1>
|
|
192 </section>
|
|
193 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="6" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
194 background-color: #FFFFFF;
|
|
195 font-size: 28px;
|
|
196 color: #4b4b4b;
|
|
197 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
198 }
|
|
199
|
|
200 section.title {
|
|
201 font-size: 40px;
|
|
202 padding: 40px;
|
|
203 }
|
|
204 section.title h1 {
|
|
205 text-align: center;
|
|
206 }
|
|
207
|
|
208 section.slide h1 {
|
|
209 position: absolute;
|
|
210 left: 50px; top: 35px;
|
|
211 }
|
52
|
212 " class="slide" data-marpit-pagination="6" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
213 ;">
|
52
|
214 <h1>VMベースからコンテナベースへ移行</h1>
|
46
|
215 <ul>
|
52
|
216 <li>旧システムはVMベースでシステムが構築されていた</li>
|
|
217 <li>サービスごとにVMがあり、管理に手間が掛かる</li>
|
|
218 <li>VMベースでは搭載されるGPUを有効活用できない
|
49
|
219 <ul>
|
52
|
220 <li>1つのVMに1台のGPUが必要</li>
|
46
|
221 </ul>
|
49
|
222 </li>
|
52
|
223 <li>VM貸出サービスをやめるわけではない</li>
|
49
|
224 </ul>
|
46
|
225 </section>
|
|
226 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
227 background-color: #FFFFFF;
|
|
228 font-size: 28px;
|
|
229 color: #4b4b4b;
|
|
230 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
231 }
|
|
232
|
|
233 section.title {
|
|
234 font-size: 40px;
|
|
235 padding: 40px;
|
|
236 }
|
|
237 section.title h1 {
|
|
238 text-align: center;
|
|
239 }
|
|
240
|
|
241 section.slide h1 {
|
|
242 position: absolute;
|
|
243 left: 50px; top: 35px;
|
|
244 }
|
52
|
245 " class="slide" data-marpit-pagination="7" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
246 ;">
|
52
|
247 <h1>コンテナ環境の導入</h1>
|
47
|
248 <ul>
|
52
|
249 <li>マルチユーザで利用できるPodman、Singularityを導入する</li>
|
|
250 <li>Podman
|
46
|
251 <ul>
|
52
|
252 <li>rootlessで利用できる</li>
|
|
253 <li>nvidia-dockerの設定を行えばGPUを利用できる</li>
|
47
|
254 </ul>
|
|
255 </li>
|
52
|
256 <li>Singularity
|
46
|
257 <ul>
|
52
|
258 <li>rootlessで利用できる</li>
|
|
259 <li>GPUの利用が容易
|
47
|
260 <ul>
|
52
|
261 <li>GPUドライバーのインストールのみ</li>
|
|
262 </ul>
|
|
263 </li>
|
46
|
264 </ul>
|
|
265 </li>
|
|
266 </ul>
|
|
267 </section>
|
|
268 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="8" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
269 background-color: #FFFFFF;
|
|
270 font-size: 28px;
|
|
271 color: #4b4b4b;
|
|
272 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
273 }
|
|
274
|
|
275 section.title {
|
|
276 font-size: 40px;
|
|
277 padding: 40px;
|
|
278 }
|
|
279 section.title h1 {
|
|
280 text-align: center;
|
|
281 }
|
|
282
|
|
283 section.slide h1 {
|
|
284 position: absolute;
|
|
285 left: 50px; top: 35px;
|
|
286 }
|
52
|
287 " class="slide" data-marpit-pagination="8" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
47
|
288 ;">
|
|
289 <h1>コンテナエンジンの補い</h1>
|
|
290 <ul>
|
|
291 <li>
|
|
292 <p>Podman</p>
|
|
293 <ul>
|
49
|
294 <li>イメージの作成やコンテナの作成が遅い</li>
|
47
|
295 <li>rootlessでは実行できない機能がある
|
|
296 <ul>
|
|
297 <li>IPアドレスの割り当て</li>
|
|
298 </ul>
|
|
299 </li>
|
|
300 </ul>
|
|
301 </li>
|
|
302 <li>
|
|
303 <p>Singularity</p>
|
|
304 <ul>
|
|
305 <li>イメージの作成に時間がかかる
|
|
306 <ul>
|
|
307 <li>ビルド中にエラーが発生すると、一から再開する必要がある</li>
|
|
308 </ul>
|
|
309 </li>
|
|
310 </ul>
|
|
311 </li>
|
|
312 <li>
|
|
313 <p>そこでPodmanのwrapperであるie-podmanを作成した</p>
|
|
314 </li>
|
|
315 </ul>
|
|
316 </section>
|
52
|
317 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="9" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
318 background-color: #FFFFFF;
|
|
319 font-size: 28px;
|
|
320 color: #4b4b4b;
|
|
321 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
322 }
|
|
323
|
|
324 section.title {
|
|
325 font-size: 40px;
|
|
326 padding: 40px;
|
|
327 }
|
|
328 section.title h1 {
|
|
329 text-align: center;
|
|
330 }
|
|
331
|
|
332 section.slide h1 {
|
|
333 position: absolute;
|
|
334 left: 50px; top: 35px;
|
|
335 }
|
|
336 " class="slide" data-marpit-pagination="9" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
|
337 ;">
|
|
338 <h1>ie-podmanの作成</h1>
|
|
339 <ul>
|
|
340 <li>ユーザのUID、GIDを取得し管理を行う
|
|
341 <ul>
|
|
342 <li>他のユーザのリソースを操作できない</li>
|
|
343 </ul>
|
|
344 </li>
|
|
345 <li>SSD上にイメージ等を保存し、高速を図る</li>
|
|
346 </ul>
|
|
347 </section>
|
47
|
348 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="10" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
349 background-color: #FFFFFF;
|
|
350 font-size: 28px;
|
|
351 color: #4b4b4b;
|
|
352 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
353 }
|
|
354
|
|
355 section.title {
|
|
356 font-size: 40px;
|
|
357 padding: 40px;
|
|
358 }
|
|
359 section.title h1 {
|
|
360 text-align: center;
|
|
361 }
|
|
362
|
|
363 section.slide h1 {
|
|
364 position: absolute;
|
|
365 left: 50px; top: 35px;
|
|
366 }
|
52
|
367 " class="slide" data-marpit-pagination="10" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
368 ;">
|
|
369 <h1>ie-podmanの機能 1/2</h1>
|
47
|
370 <ul>
|
|
371 <li>Podmanのすべての機能をwrappするのではなく、一部機能のみを提供する</li>
|
|
372 </ul>
|
46
|
373 <table>
|
|
374 <thead>
|
|
375 <tr>
|
|
376 <th>コマンド</th>
|
|
377 <th>機能</th>
|
|
378 </tr>
|
|
379 </thead>
|
|
380 <tbody>
|
|
381 <tr>
|
|
382 <td>build</td>
|
|
383 <td>Containerfileの指示に従いイメージを作成する</td>
|
|
384 </tr>
|
|
385 <tr>
|
|
386 <td>cp</td>
|
|
387 <td>コンテナにファイルを送信する</td>
|
|
388 </tr>
|
|
389 <tr>
|
|
390 <td>exec</td>
|
|
391 <td>起動中のコンテナでプロセスを実行する</td>
|
|
392 </tr>
|
|
393 <tr>
|
|
394 <td>images</td>
|
|
395 <td>コンテナイメージの一覧を表示する</td>
|
|
396 </tr>
|
|
397 <tr>
|
|
398 <td>info</td>
|
|
399 <td>コンテナの情報を表示する</td>
|
|
400 </tr>
|
|
401 <tr>
|
|
402 <td>logs</td>
|
|
403 <td>コンテナのlogを表示する</td>
|
|
404 </tr>
|
|
405 <tr>
|
|
406 <td>ps</td>
|
|
407 <td>起動中のコンテナの一覧を表示する</td>
|
|
408 </tr>
|
|
409 </tbody>
|
|
410 </table>
|
|
411 </section>
|
52
|
412 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
413 background-color: #FFFFFF;
|
|
414 font-size: 28px;
|
|
415 color: #4b4b4b;
|
|
416 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
417 }
|
|
418
|
|
419 section.title {
|
|
420 font-size: 40px;
|
|
421 padding: 40px;
|
|
422 }
|
|
423 section.title h1 {
|
|
424 text-align: center;
|
|
425 }
|
|
426
|
|
427 section.slide h1 {
|
|
428 position: absolute;
|
|
429 left: 50px; top: 35px;
|
|
430 }
|
52
|
431 " class="slide" data-marpit-pagination="11" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
432 ;">
|
|
433 <h1>ie-podmanの機能 2/2</h1>
|
47
|
434 <ul>
|
|
435 <li>registryやsifなど独自機能を提供する</li>
|
|
436 </ul>
|
46
|
437 <table>
|
|
438 <thead>
|
|
439 <tr>
|
|
440 <th>コマンド</th>
|
|
441 <th>機能</th>
|
|
442 </tr>
|
|
443 </thead>
|
|
444 <tbody>
|
|
445 <tr>
|
|
446 <td>registry</td>
|
|
447 <td>学科のレジストリの操作を行う</td>
|
|
448 </tr>
|
|
449 <tr>
|
|
450 <td>rm</td>
|
|
451 <td>コンテナを削除する</td>
|
|
452 </tr>
|
|
453 <tr>
|
|
454 <td>run</td>
|
|
455 <td>コンテナを作成する</td>
|
|
456 </tr>
|
|
457 <tr>
|
|
458 <td>sif</td>
|
|
459 <td>イメージをsifファイルに変換する</td>
|
|
460 </tr>
|
|
461 <tr>
|
|
462 <td>start</td>
|
|
463 <td>コンテナを起動する</td>
|
|
464 </tr>
|
|
465 <tr>
|
|
466 <td>stop</td>
|
|
467 <td>コンテナを停止する</td>
|
|
468 </tr>
|
|
469 </tbody>
|
|
470 </table>
|
|
471 </section>
|
52
|
472 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="12" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
473 background-color: #FFFFFF;
|
|
474 font-size: 28px;
|
|
475 color: #4b4b4b;
|
|
476 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
477 }
|
|
478
|
|
479 section.title {
|
|
480 font-size: 40px;
|
|
481 padding: 40px;
|
|
482 }
|
|
483 section.title h1 {
|
|
484 text-align: center;
|
|
485 }
|
|
486
|
|
487 section.slide h1 {
|
|
488 position: absolute;
|
|
489 left: 50px; top: 35px;
|
|
490 }
|
|
491 " class="slide" data-marpit-pagination="12" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
|
492 ;">
|
|
493 <h1>ジョブスケジューラの導入</h1>
|
|
494 <ul>
|
|
495 <li>多くのリソースを必要とするプログラムは管理が必要である</li>
|
|
496 <li>4台のサーバのリソースを利用できるようにする必要がある</li>
|
|
497 <li>そこで、ジョブスケジューラのSlurmを採用する
|
|
498 <ul>
|
|
499 <li>フォールトトレラントで拡張性が高い</li>
|
|
500 </ul>
|
|
501 </li>
|
|
502 </ul>
|
|
503 </section>
|
47
|
504 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="13" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
505 background-color: #FFFFFF;
|
|
506 font-size: 28px;
|
|
507 color: #4b4b4b;
|
|
508 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
509 }
|
|
510
|
|
511 section.title {
|
|
512 font-size: 40px;
|
|
513 padding: 40px;
|
|
514 }
|
|
515 section.title h1 {
|
|
516 text-align: center;
|
|
517 }
|
|
518
|
|
519 section.slide h1 {
|
|
520 position: absolute;
|
|
521 left: 50px; top: 35px;
|
|
522 }
|
52
|
523 " class="slide" data-marpit-pagination="13" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
524 ;">
|
|
525 <h1>ジョブスケジューラの構築</h1>
|
47
|
526 <p>利用方針 <strong>「計算リソースの利用効率を上げる」</strong></p>
|
46
|
527 <ul>
|
|
528 <li>Jobの優先順位
|
|
529 <ul>
|
|
530 <li>要求するリソースの少ないJobの優先度を高くする</li>
|
|
531 <li>実行時間が短いJobの優先度を高くする</li>
|
|
532 <li>これまでのJobの実行履歴で優先度は変化しない</li>
|
|
533 </ul>
|
|
534 </li>
|
|
535 </ul>
|
|
536 <p>これでは多くのリソースを要求するJobが実行されない可能性がある。</p>
|
|
537 <ul>
|
|
538 <li>Jobの実行時間
|
|
539 <ul>
|
|
540 <li>Jobの実行時間の記載がない場合は<strong>1日で強制終了</strong>させる</li>
|
|
541 <li>管理者からJobの優先度を上げる</li>
|
|
542 </ul>
|
|
543 </li>
|
|
544 </ul>
|
|
545 <p>また、Jobのスケジュールにはバックフィルを採用する。</p>
|
|
546 </section>
|
52
|
547 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="14" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
548 background-color: #FFFFFF;
|
|
549 font-size: 28px;
|
|
550 color: #4b4b4b;
|
|
551 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
552 }
|
|
553
|
|
554 section.title {
|
|
555 font-size: 40px;
|
|
556 padding: 40px;
|
|
557 }
|
|
558 section.title h1 {
|
|
559 text-align: center;
|
|
560 }
|
|
561
|
|
562 section.slide h1 {
|
|
563 position: absolute;
|
|
564 left: 50px; top: 35px;
|
|
565 }
|
|
566 " class="slide" data-marpit-pagination="14" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
|
567 ;">
|
|
568 <h1>ファイルシステムの導入</h1>
|
|
569 <ul>
|
|
570 <li>Cephを採用
|
|
571 <ul>
|
|
572 <li>自己修復、自己管理機能を搭載するため信頼性が高い</li>
|
|
573 <li>柔軟なアクセス方法の提供
|
|
574 <ul>
|
|
575 <li>Object Gateway</li>
|
|
576 <li>ブロックデバイス</li>
|
|
577 <li>POSIX互換のファイルシステム</li>
|
|
578 </ul>
|
|
579 </li>
|
|
580 </ul>
|
|
581 </li>
|
|
582 </ul>
|
|
583 </section>
|
46
|
584 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
585 background-color: #FFFFFF;
|
|
586 font-size: 28px;
|
|
587 color: #4b4b4b;
|
|
588 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
589 }
|
|
590
|
|
591 section.title {
|
|
592 font-size: 40px;
|
|
593 padding: 40px;
|
|
594 }
|
|
595 section.title h1 {
|
|
596 text-align: center;
|
|
597 }
|
|
598
|
|
599 section.slide h1 {
|
|
600 position: absolute;
|
|
601 left: 50px; top: 35px;
|
|
602 }
|
52
|
603 " class="slide" data-marpit-pagination="15" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
604 ;">
|
|
605 <h1>教育情報システムの構成</h1>
|
|
606 <ul>
|
47
|
607 <li>汎用サーバ全てにKVM、Podman、Singularityをインストール</li>
|
46
|
608 <li>Slurm
|
|
609 <ul>
|
|
610 <li>汎用サーバ1台をコントローラ/計算ノード</li>
|
|
611 <li>残りを計算ノード</li>
|
|
612 </ul>
|
|
613 </li>
|
|
614 <li>Ceph
|
|
615 <ul>
|
|
616 <li>ディスクサーバをOSD</li>
|
|
617 <li>汎用サーバ3台をMON, MDS, MGR</li>
|
|
618 </ul>
|
|
619 </li>
|
|
620 </ul>
|
|
621 </section>
|
|
622 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
623 background-color: #FFFFFF;
|
|
624 font-size: 28px;
|
|
625 color: #4b4b4b;
|
|
626 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
627 }
|
|
628
|
|
629 section.title {
|
|
630 font-size: 40px;
|
|
631 padding: 40px;
|
|
632 }
|
|
633 section.title h1 {
|
|
634 text-align: center;
|
|
635 }
|
|
636
|
|
637 section.slide h1 {
|
|
638 position: absolute;
|
|
639 left: 50px; top: 35px;
|
|
640 }
|
52
|
641 " class="slide" data-marpit-pagination="16" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
|
642 ;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("images/system.png");background-size:80%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="16" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
643 background-color: #FFFFFF;
|
|
644 font-size: 28px;
|
|
645 color: #4b4b4b;
|
|
646 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
647 }
|
|
648
|
|
649 section.title {
|
|
650 font-size: 40px;
|
|
651 padding: 40px;
|
|
652 }
|
|
653 section.title h1 {
|
|
654 text-align: center;
|
|
655 }
|
|
656
|
|
657 section.slide h1 {
|
|
658 position: absolute;
|
|
659 left: 50px; top: 35px;
|
|
660 }
|
52
|
661 " class="slide" data-marpit-pagination="16" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
47
|
662 ;" data-marpit-advanced-background="content"></section>
|
52
|
663 </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section class="slide" style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="16" data-marpit-pagination-total="28"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="17" data-paginate="true" data-class="title" data-theme="default" data-style="section {
|
46
|
664 background-color: #FFFFFF;
|
|
665 font-size: 28px;
|
|
666 color: #4b4b4b;
|
|
667 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
668 }
|
|
669
|
|
670 section.title {
|
|
671 font-size: 40px;
|
|
672 padding: 40px;
|
|
673 }
|
|
674 section.title h1 {
|
|
675 text-align: center;
|
|
676 }
|
|
677
|
|
678 section.slide h1 {
|
|
679 position: absolute;
|
|
680 left: 50px; top: 35px;
|
|
681 }
|
52
|
682 " class="title" data-marpit-pagination="17" data-marpit-pagination-total="28" style="--paginate:true;--class:title;--theme:default;
|
46
|
683 ;">
|
52
|
684 <h1>教育情報システムの利用と管理</h1>
|
46
|
685 </section>
|
52
|
686 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="18" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
687 background-color: #FFFFFF;
|
|
688 font-size: 28px;
|
|
689 color: #4b4b4b;
|
|
690 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
691 }
|
|
692
|
|
693 section.title {
|
|
694 font-size: 40px;
|
|
695 padding: 40px;
|
|
696 }
|
|
697 section.title h1 {
|
|
698 text-align: center;
|
|
699 }
|
|
700
|
|
701 section.slide h1 {
|
|
702 position: absolute;
|
|
703 left: 50px; top: 35px;
|
|
704 }
|
52
|
705 " class="slide" data-marpit-pagination="18" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
706 ;">
|
48
|
707 <h1>ie-podmanの使用方法</h1>
|
|
708 <ul>
|
|
709 <li>PodmanはDockerと同じCLIを提供している</li>
|
|
710 <li>IPアドレス、GPUをコンテナへ割り当てられる
|
|
711 <ul>
|
|
712 <li><code>ie-podman run --ip --gpu [IMAGE_NAME]</code></li>
|
|
713 </ul>
|
|
714 </li>
|
|
715 <li>作成したイメージをsifファイルへの変換に対応
|
|
716 <ul>
|
|
717 <li><code>ie-podman sif [IMAGE_NAME]</code></li>
|
|
718 </ul>
|
|
719 </li>
|
|
720 </ul>
|
46
|
721 </section>
|
52
|
722 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="19" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
723 background-color: #FFFFFF;
|
|
724 font-size: 28px;
|
|
725 color: #4b4b4b;
|
|
726 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
727 }
|
|
728
|
|
729 section.title {
|
|
730 font-size: 40px;
|
|
731 padding: 40px;
|
|
732 }
|
|
733 section.title h1 {
|
|
734 text-align: center;
|
|
735 }
|
|
736
|
|
737 section.slide h1 {
|
|
738 position: absolute;
|
|
739 left: 50px; top: 35px;
|
|
740 }
|
52
|
741 " class="slide" data-marpit-pagination="19" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
47
|
742 ;">
|
|
743 <h1>GPUの利用方法</h1>
|
48
|
744 <ul>
|
|
745 <li>Singularityでは容易にGPUを利用できる
|
|
746 <ul>
|
|
747 <li><code>singularity run --nv [SIF_NAME]</code></li>
|
|
748 </ul>
|
|
749 </li>
|
|
750 <li>ホームディレクトリ、/tmpなどがコンテナにマウントされる
|
|
751 <ul>
|
|
752 <li>プログラムの実行に便利</li>
|
|
753 </ul>
|
|
754 </li>
|
|
755 <li>SlurmによるJob管理
|
|
756 <ul>
|
|
757 <li>必要なリソースを記述し投下する</li>
|
|
758 <li>CPU数、GPU数</li>
|
|
759 </ul>
|
|
760 </li>
|
|
761 </ul>
|
47
|
762 </section>
|
52
|
763 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="20" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
47
|
764 background-color: #FFFFFF;
|
|
765 font-size: 28px;
|
|
766 color: #4b4b4b;
|
|
767 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
768 }
|
|
769
|
|
770 section.title {
|
|
771 font-size: 40px;
|
|
772 padding: 40px;
|
|
773 }
|
|
774 section.title h1 {
|
|
775 text-align: center;
|
|
776 }
|
|
777
|
|
778 section.slide h1 {
|
|
779 position: absolute;
|
|
780 left: 50px; top: 35px;
|
|
781 }
|
52
|
782 " class="slide" data-marpit-pagination="20" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
47
|
783 ;">
|
48
|
784 <h1>batchファイルの例</h1>
|
|
785 <ul>
|
|
786 <li>Jobに必要とするリソース
|
|
787 <ul>
|
|
788 <li>CPU 8コア、GPU 1つ</li>
|
|
789 </ul>
|
|
790 </li>
|
|
791 <li>Jobの実行時間
|
|
792 <ul>
|
|
793 <li>1分</li>
|
|
794 </ul>
|
|
795 </li>
|
|
796 </ul>
|
|
797 <pre><code class="language-bash"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-meta">#!/bin/bash</span>
|
|
798 <span class="hljs-comment">#SBATCH --job-name sample</span>
|
|
799 <span class="hljs-comment">#SBATCH --output logs/%x-%j.log</span>
|
|
800 <span class="hljs-comment">#SBATCH --error logs/%x-%j.err</span>
|
|
801 <span class="hljs-comment">#SBATCH --nodes 1</span>
|
|
802 <span class="hljs-comment">#SBATCH --cpus-per-task 8</span>
|
|
803 <span class="hljs-comment">#SBATCH --gpus tesla:1</span>
|
|
804 <span class="hljs-comment">#SBATCH --time 01:00</span>
|
|
805
|
|
806 singularity <span class="hljs-built_in">exec</span> --nv [SIF_NAME] [COMMANDS]
|
|
807 </span></span></foreignObject></svg></code></pre>
|
47
|
808 </section>
|
52
|
809 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-class="title" data-theme="default" data-style="section {
|
47
|
810 background-color: #FFFFFF;
|
|
811 font-size: 28px;
|
|
812 color: #4b4b4b;
|
|
813 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
814 }
|
|
815
|
|
816 section.title {
|
|
817 font-size: 40px;
|
|
818 padding: 40px;
|
|
819 }
|
|
820 section.title h1 {
|
|
821 text-align: center;
|
|
822 }
|
|
823
|
|
824 section.slide h1 {
|
|
825 position: absolute;
|
|
826 left: 50px; top: 35px;
|
|
827 }
|
52
|
828 " class="title" data-marpit-pagination="21" data-marpit-pagination-total="28" style="--paginate:true;--class:title;--theme:default;
|
48
|
829 ;">
|
|
830 <h1>教育情報システムの評価</h1>
|
|
831 </section>
|
52
|
832 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="22" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
48
|
833 background-color: #FFFFFF;
|
|
834 font-size: 28px;
|
|
835 color: #4b4b4b;
|
|
836 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
837 }
|
|
838
|
|
839 section.title {
|
|
840 font-size: 40px;
|
|
841 padding: 40px;
|
|
842 }
|
|
843 section.title h1 {
|
|
844 text-align: center;
|
|
845 }
|
|
846
|
|
847 section.slide h1 {
|
|
848 position: absolute;
|
|
849 left: 50px; top: 35px;
|
|
850 }
|
52
|
851 " class="slide" data-marpit-pagination="22" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
852 ;">
|
|
853 <h1>ファイルシステムの評価 1/2</h1>
|
|
854 <ul>
|
48
|
855 <li>
|
|
856 <p>実験概要</p>
|
46
|
857 <ul>
|
48
|
858 <li><code>dd</code>コマンドを使用し書き込み速度を比較する</li>
|
46
|
859 </ul>
|
|
860 </li>
|
48
|
861 <li>
|
|
862 <p>書き込み速度の比較</p>
|
46
|
863 <ul>
|
48
|
864 <li>GFS2</li>
|
|
865 <li>NFS</li>
|
|
866 <li>CephFS</li>
|
|
867 <li>CephRBD</li>
|
46
|
868 </ul>
|
|
869 </li>
|
|
870 </ul>
|
|
871 </section>
|
|
872 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
873 background-color: #FFFFFF;
|
|
874 font-size: 28px;
|
|
875 color: #4b4b4b;
|
|
876 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
877 }
|
|
878
|
|
879 section.title {
|
|
880 font-size: 40px;
|
|
881 padding: 40px;
|
|
882 }
|
|
883 section.title h1 {
|
|
884 text-align: center;
|
|
885 }
|
|
886
|
|
887 section.slide h1 {
|
|
888 position: absolute;
|
|
889 left: 50px; top: 35px;
|
|
890 }
|
52
|
891 " class="slide" data-marpit-pagination="23" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
|
892 ;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("images/fswrite.png");background-size:70%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="23" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
48
|
893 background-color: #FFFFFF;
|
|
894 font-size: 28px;
|
|
895 color: #4b4b4b;
|
|
896 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
897 }
|
|
898
|
|
899 section.title {
|
|
900 font-size: 40px;
|
|
901 padding: 40px;
|
|
902 }
|
|
903 section.title h1 {
|
|
904 text-align: center;
|
|
905 }
|
|
906
|
|
907 section.slide h1 {
|
|
908 position: absolute;
|
|
909 left: 50px; top: 35px;
|
|
910 }
|
52
|
911 " class="slide" data-marpit-pagination="23" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
48
|
912 ;" data-marpit-advanced-background="content">
|
|
913 <h1>ファイルシステムの評価 2/2</h1>
|
|
914 </section>
|
52
|
915 </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section class="slide" style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="23" data-marpit-pagination-total="28"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
916 background-color: #FFFFFF;
|
|
917 font-size: 28px;
|
|
918 color: #4b4b4b;
|
|
919 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
920 }
|
|
921
|
|
922 section.title {
|
|
923 font-size: 40px;
|
|
924 padding: 40px;
|
|
925 }
|
|
926 section.title h1 {
|
|
927 text-align: center;
|
|
928 }
|
|
929
|
|
930 section.slide h1 {
|
|
931 position: absolute;
|
|
932 left: 50px; top: 35px;
|
|
933 }
|
52
|
934 " class="slide" data-marpit-pagination="24" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
48
|
935 ;">
|
|
936 <h1>ie-podmanの評価 1/3</h1>
|
|
937 <ul>
|
|
938 <li>
|
|
939 <p>実験環境</p>
|
|
940 <ul>
|
|
941 <li>新システムの汎用サーバで実施</li>
|
|
942 </ul>
|
|
943 </li>
|
|
944 <li>
|
|
945 <p>実験概要</p>
|
|
946 <ul>
|
|
947 <li>イメージのBuild速度を比較する</li>
|
|
948 </ul>
|
|
949 </li>
|
49
|
950 </ul>
|
|
951 <pre><code class="language-Dockerfile"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-keyword">FROM</span> ubuntu:<span class="hljs-number">20.04</span>
|
|
952 <span class="hljs-keyword">RUN</span><span class="bash"> apt-get update && \
|
|
953 apt-get upgrade -y</span>
|
|
954 </span></span></foreignObject></svg></code></pre>
|
|
955 <ul>
|
|
956 <li>Build速度の比較
|
48
|
957 <ul>
|
|
958 <li>Docker</li>
|
|
959 <li>Podman (rootless)</li>
|
52
|
960 <li>ie-podman (Podman rootfull wrapper)</li>
|
48
|
961 </ul>
|
|
962 </li>
|
|
963 </ul>
|
46
|
964 </section>
|
|
965 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
|
966 background-color: #FFFFFF;
|
|
967 font-size: 28px;
|
|
968 color: #4b4b4b;
|
|
969 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
970 }
|
|
971
|
|
972 section.title {
|
|
973 font-size: 40px;
|
|
974 padding: 40px;
|
|
975 }
|
|
976 section.title h1 {
|
|
977 text-align: center;
|
|
978 }
|
|
979
|
|
980 section.slide h1 {
|
|
981 position: absolute;
|
|
982 left: 50px; top: 35px;
|
|
983 }
|
52
|
984 " class="slide" data-marpit-pagination="25" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
|
985 ;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url("images/container2.png");background-size:70%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="25" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
49
|
986 background-color: #FFFFFF;
|
|
987 font-size: 28px;
|
|
988 color: #4b4b4b;
|
|
989 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
990 }
|
|
991
|
|
992 section.title {
|
|
993 font-size: 40px;
|
|
994 padding: 40px;
|
|
995 }
|
|
996 section.title h1 {
|
|
997 text-align: center;
|
|
998 }
|
|
999
|
|
1000 section.slide h1 {
|
|
1001 position: absolute;
|
|
1002 left: 50px; top: 35px;
|
|
1003 }
|
52
|
1004 " class="slide" data-marpit-pagination="25" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
49
|
1005 ;" data-marpit-advanced-background="content">
|
|
1006 <h1>ie-podmanの評価 2/3</h1>
|
|
1007 </section>
|
52
|
1008 </foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section class="slide" style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="25" data-marpit-pagination-total="28"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
1009 background-color: #FFFFFF;
|
|
1010 font-size: 28px;
|
|
1011 color: #4b4b4b;
|
|
1012 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
1013 }
|
|
1014
|
|
1015 section.title {
|
|
1016 font-size: 40px;
|
|
1017 padding: 40px;
|
|
1018 }
|
|
1019 section.title h1 {
|
|
1020 text-align: center;
|
|
1021 }
|
|
1022
|
|
1023 section.slide h1 {
|
|
1024 position: absolute;
|
|
1025 left: 50px; top: 35px;
|
|
1026 }
|
52
|
1027 " class="slide" data-marpit-pagination="26" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
1028 ;">
|
52
|
1029 <h1>ie-podmanの評価 3/3</h1>
|
46
|
1030 <ul>
|
52
|
1031 <li>Rootlessは<code>syscall</code>が複数呼ばれている
|
46
|
1032 <ul>
|
52
|
1033 <li>そのため、イメージの作成が遅いのではないか</li>
|
46
|
1034 </ul>
|
|
1035 </li>
|
52
|
1036 <li>左がrootless、右がrootfull</li>
|
46
|
1037 </ul>
|
52
|
1038 <p><img src="images/syscall.png" alt="height:325" style="height:325px;" /></p>
|
46
|
1039 </section>
|
52
|
1040 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="27" data-paginate="true" data-class="title" data-theme="default" data-style="section {
|
46
|
1041 background-color: #FFFFFF;
|
|
1042 font-size: 28px;
|
|
1043 color: #4b4b4b;
|
|
1044 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
1045 }
|
|
1046
|
|
1047 section.title {
|
|
1048 font-size: 40px;
|
|
1049 padding: 40px;
|
|
1050 }
|
|
1051 section.title h1 {
|
|
1052 text-align: center;
|
|
1053 }
|
|
1054
|
|
1055 section.slide h1 {
|
|
1056 position: absolute;
|
|
1057 left: 50px; top: 35px;
|
|
1058 }
|
52
|
1059 " class="title" data-marpit-pagination="27" data-marpit-pagination-total="28" style="--paginate:true;--class:title;--theme:default;
|
46
|
1060 ;">
|
|
1061 <h1>まとめ</h1>
|
|
1062 </section>
|
52
|
1063 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="28" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
|
46
|
1064 background-color: #FFFFFF;
|
|
1065 font-size: 28px;
|
|
1066 color: #4b4b4b;
|
|
1067 font-family: "Arial", "Hiragino Maru Gothic ProN";
|
|
1068 }
|
|
1069
|
|
1070 section.title {
|
|
1071 font-size: 40px;
|
|
1072 padding: 40px;
|
|
1073 }
|
|
1074 section.title h1 {
|
|
1075 text-align: center;
|
|
1076 }
|
|
1077
|
|
1078 section.slide h1 {
|
|
1079 position: absolute;
|
|
1080 left: 50px; top: 35px;
|
|
1081 }
|
52
|
1082 " class="slide" data-marpit-pagination="28" data-marpit-pagination-total="28" style="--paginate:true;--class:slide;--theme:default;
|
46
|
1083 ;">
|
|
1084 <h1>今後の課題</h1>
|
|
1085 <ul>
|
48
|
1086 <li>教育情報システムの周知
|
|
1087 <ul>
|
|
1088 <li>Jobの投下やリソースの要求方法</li>
|
|
1089 <li>ie-virsh、ie-podmanの使用方法</li>
|
|
1090 <li>定期的な周知が必要</li>
|
|
1091 </ul>
|
|
1092 </li>
|
|
1093 <li>ie-podmanのネットワーク構成の見直し
|
|
1094 <ul>
|
|
1095 <li>プレフィックス長が24のため、最大254個のIPアドレス</li>
|
|
1096 <li>コンテナを停止で使用されない場合は削除する必要がある</li>
|
|
1097 </ul>
|
|
1098 </li>
|
52
|
1099 <li>基幹サービスすべてのコンテナ移行
|
48
|
1100 <ul>
|
52
|
1101 <li>まだVMで動いている基幹サービスがある</li>
|
|
1102 <li>コンテナ運用の経験を積んでいきたい</li>
|
48
|
1103 </ul>
|
|
1104 </li>
|
46
|
1105 </ul>
|
|
1106 </section>
|
|
1107 <script>!function(){"use strict";const t="marpitSVGPolyfill:setZoomFactor,",e=Symbol();let r,o;function n(n){const i="object"==typeof n&&n.target||document,a="object"==typeof n?n.zoom:n;window[e]||(Object.defineProperty(window,e,{configurable:!0,value:!0}),window.addEventListener("message",(({data:e,origin:r})=>{if(r===window.origin)try{if(e&&"string"==typeof e&&e.startsWith(t)){const[,t]=e.split(","),r=Number.parseFloat(t);Number.isNaN(r)||(o=r)}}catch(t){console.error(t)}})));let l=!1;Array.from(i.querySelectorAll("svg[data-marpit-svg]"),(t=>{var e,n,i,s;t.style.transform||(t.style.transform="translateZ(0)");const c=a||o||t.currentScale||1;r!==c&&(r=c,l=c);const d=t.getBoundingClientRect(),{length:u}=t.children;for(let r=0;r<u;r+=1){const o=t.children[r],a=o.getScreenCTM();if(a){const t=null!==(n=null===(e=o.x)||void 0===e?void 0:e.baseVal.value)&&void 0!==n?n:0,r=null!==(s=null===(i=o.y)||void 0===i?void 0:i.baseVal.value)&&void 0!==s?s:0,l=o.firstChild,{style:u}=l;u.transformOrigin||(u.transformOrigin=`${-t}px ${-r}px`),u.transform=`scale(${c}) matrix(${a.a}, ${a.b}, ${a.c}, ${a.d}, ${a.e-d.left}, ${a.f-d.top}) translateZ(0.0001px)`}}})),!1!==l&&Array.from(i.querySelectorAll("iframe"),(({contentWindow:e})=>{null==e||e.postMessage(`${t}${l}`,"null"===window.origin?"*":window.origin)}))}r=1,o=void 0;const i=(t,e,r)=>{if(t.getAttribute(e)!==r)return t.setAttribute(e,r),!0};function a({once:t=!1,target:e=document}={}){const r="Apple Computer, Inc."===navigator.vendor?[n]:[];let o=!t;const a=()=>{for(const t of r)t({target:e});!function(t=document){Array.from(t.querySelectorAll('svg[data-marp-fitting="svg"]'),(t=>{var e;const r=t.firstChild,o=r.firstChild,{scrollWidth:n,scrollHeight:a}=o;let l,s=1;if(t.hasAttribute("data-marp-fitting-code")&&(l=null===(e=t.parentElement)||void 0===e?void 0:e.parentElement),t.hasAttribute("data-marp-fitting-math")&&(l=t.parentElement),l){const t=getComputedStyle(l),e=Math.ceil(l.clientWidth-parseFloat(t.paddingLeft||"0")-parseFloat(t.paddingRight||"0"));e&&(s=e)}const c=Math.max(n,s),d=Math.max(a,1),u=`0 0 ${c} ${d}`;i(r,"width",`${c}`),i(r,"height",`${d}`),i(t,"preserveAspectRatio",getComputedStyle(t).getPropertyValue("--preserve-aspect-ratio")||"xMinYMin meet"),i(t,"viewBox",u)&&t.classList.toggle("__reflow__")}))}(e),o&&window.requestAnimationFrame(a)};return a(),()=>{o=!1}}const l=Symbol(),s=document.currentScript;((t=document)=>{if("undefined"==typeof window)throw new Error("Marp Core's browser script is valid only in browser context.");if(t[l])return t[l];const e=a({target:t}),r=()=>{e(),delete t[l]};Object.defineProperty(t,l,{configurable:!0,value:r})})(s?s.getRootNode():document)}();
|
52
|
1108 </script></foreignObject></svg></div><script>!function(){"use strict";var e=function(e,t){var n,r=1===(e.parent||e).nodeType?e.parent||e:document.querySelector(e.parent||e),s=[].filter.call("string"==typeof e.slides?r.querySelectorAll(e.slides):e.slides||r.children,(function(e){return"SCRIPT"!==e.nodeName})),a={},i=function(e,t){return(t=t||{}).index=s.indexOf(e),t.slide=e,t},o=function(e,t){a[e]=(a[e]||[]).filter((function(e){return e!==t}))},l=function(e,t){return(a[e]||[]).reduce((function(e,n){return e&&!1!==n(t)}),!0)},c=function(e,t){s[e]&&(n&&l("deactivate",i(n,t)),n=s[e],l("activate",i(n,t)))},d=function(e,t){var r=s.indexOf(n)+e;l(e>0?"next":"prev",i(n,t))&&c(r,t)},u={off:o,on:function(e,t){return(a[e]||(a[e]=[])).push(t),o.bind(null,e,t)},fire:l,slide:function(e,t){if(!arguments.length)return s.indexOf(n);l("slide",i(s[e],t))&&c(e,t)},next:d.bind(null,1),prev:d.bind(null,-1),parent:r,slides:s,destroy:function(e){l("destroy",i(n,e)),a={}}};return(t||[]).forEach((function(e){e(u)})),n||c(0),u};function t(e){e.parent.classList.add("bespoke-marp-parent"),e.slides.forEach((e=>e.classList.add("bespoke-marp-slide"))),e.on("activate",(t=>{const n=t.slide,r=!n.classList.contains("bespoke-marp-active");e.slides.forEach((e=>{e.classList.remove("bespoke-marp-active"),e.setAttribute("aria-hidden","true")})),n.classList.add("bespoke-marp-active"),n.removeAttribute("aria-hidden"),r&&(n.classList.add("bespoke-marp-active-ready"),document.body.clientHeight,n.classList.remove("bespoke-marp-active-ready"))}))}function n(e){let t=0,n=0;Object.defineProperty(e,"fragments",{enumerable:!0,value:e.slides.map((e=>[null,...e.querySelectorAll("[data-marpit-fragment]")]))});const r=r=>void 0!==e.fragments[t][n+r],s=(r,s)=>{t=r,n=s,e.fragments.forEach(((e,t)=>{e.forEach(((e,n)=>{if(null==e)return;const a=t<r||t===r&&n<=s;e.setAttribute("data-bespoke-marp-fragment",a?"active":"inactive"),t===r&&n===s?e.setAttribute("data-bespoke-marp-current-fragment","current"):e.removeAttribute("data-bespoke-marp-current-fragment")}))})),e.fragmentIndex=s;const a={slide:e.slides[r],index:r,fragments:e.fragments[r],fragmentIndex:s};e.fire("fragment",a)};e.on("next",(({fragment:a=!0})=>{if(a){if(r(1))return s(t,n+1),!1;const a=t+1;e.fragments[a]&&s(a,0)}else{const r=e.fragments[t].length;if(n+1<r)return s(t,r-1),!1;const a=e.fragments[t+1];a&&s(t+1,a.length-1)}})),e.on("prev",(({fragment:a=!0})=>{if(r(-1)&&a)return s(t,n-1),!1;const i=t-1;e.fragments[i]&&s(i,e.fragments[i].length-1)})),e.on("slide",(({index:t,fragment:n})=>{let r=0;if(void 0!==n){const s=e.fragments[t];if(s){const{length:e}=s;r=-1===n?e-1:Math.min(Math.max(n,0),e-1)}}s(t,r)})),s(0,0)}
|
46
|
1109 /*!
|
|
1110 * screenfull
|
|
1111 * v5.0.2 - 2020-02-13
|
|
1112 * (c) Sindre Sorhus; MIT License
|
|
1113 */
|
|
1114 var r,s=(function(e){!function(){var t="undefined"!=typeof window&&void 0!==window.document?window.document:{},n=e.exports,r=function(){for(var e,n=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],r=0,s=n.length,a={};r<s;r++)if((e=n[r])&&e[1]in t){for(r=0;r<e.length;r++)a[n[0][r]]=e[r];return a}return!1}(),s={change:r.fullscreenchange,error:r.fullscreenerror},a={request:function(e){return new Promise(function(n,s){var a=function(){this.off("change",a),n()}.bind(this);this.on("change",a);var i=(e=e||t.documentElement)[r.requestFullscreen]();i instanceof Promise&&i.then(a).catch(s)}.bind(this))},exit:function(){return new Promise(function(e,n){if(this.isFullscreen){var s=function(){this.off("change",s),e()}.bind(this);this.on("change",s);var a=t[r.exitFullscreen]();a instanceof Promise&&a.then(s).catch(n)}else e()}.bind(this))},toggle:function(e){return this.isFullscreen?this.exit():this.request(e)},onchange:function(e){this.on("change",e)},onerror:function(e){this.on("error",e)},on:function(e,n){var r=s[e];r&&t.addEventListener(r,n,!1)},off:function(e,n){var r=s[e];r&&t.removeEventListener(r,n,!1)},raw:r};r?(Object.defineProperties(a,{isFullscreen:{get:function(){return Boolean(t[r.fullscreenElement])}},element:{enumerable:!0,get:function(){return t[r.fullscreenElement]}},isEnabled:{enumerable:!0,get:function(){return Boolean(t[r.fullscreenEnabled])}}}),n?e.exports=a:window.screenfull=a):n?e.exports={isEnabled:!1}:window.screenfull={isEnabled:!1}}()}(r={exports:{}},r.exports),r.exports);function a(e){e.fullscreen=()=>{s.isEnabled&&s.toggle(document.body)},document.addEventListener("keydown",(t=>{70!==t.which&&122!==t.which||t.altKey||t.ctrlKey||t.metaKey||!s.isEnabled||(e.fullscreen(),t.preventDefault())}))}function i(e=2e3){return t=>{let n;function r(){n&&clearTimeout(n),n=setTimeout((()=>{t.parent.classList.add("bespoke-marp-inactive"),t.fire("marp-inactive")}),e),t.parent.classList.contains("bespoke-marp-inactive")&&(t.parent.classList.remove("bespoke-marp-inactive"),t.fire("marp-active"))}document.addEventListener("mousedown",r),document.addEventListener("mousemove",r),document.addEventListener("touchend",r),setTimeout(r,0)}}const o=["AUDIO","BUTTON","INPUT","SELECT","TEXTAREA","VIDEO"];function l(e){e.parent.addEventListener("keydown",(e=>{if(!e.target)return;const t=e.target;(o.includes(t.nodeName)||"true"===t.contentEditable)&&e.stopPropagation()}))}function c(e){window.addEventListener("load",(()=>{for(const t of e.slides){const e=t.querySelector("[data-marp-fitting]")?"":"hideable";t.setAttribute("data-bespoke-marp-load",e)}}))}var d;function u({interval:e=200}={}){return t=>{document.addEventListener("keydown",(e=>{if(32===e.which&&e.shiftKey)t.prev();else if(33===e.which||37===e.which||38===e.which)t.prev({fragment:!e.shiftKey});else if(32!==e.which||e.shiftKey)if(34===e.which||39===e.which||40===e.which)t.next({fragment:!e.shiftKey});else if(35===e.which)t.slide(t.slides.length-1,{fragment:-1});else{if(36!==e.which)return;t.slide(0)}else t.next();e.preventDefault()}));let n,r,s=0;t.parent.addEventListener("wheel",(a=>{let i=!1;const o=(e,t)=>{e&&(i=i||function(e,t){return function(e,t){const n=t===d.X?"Width":"Height";return e[`client${n}`]<e[`scroll${n}`]}(e,t)&&function(e,t){const{overflow:n}=e,r=e[`overflow${t}`];return"auto"===n||"scroll"===n||"auto"===r||"scroll"===r}(getComputedStyle(e),t)}(e,t)),(null==e?void 0:e.parentElement)&&o(e.parentElement,t)};if(0!==a.deltaX&&o(a.target,d.X),0!==a.deltaY&&o(a.target,d.Y),i)return;a.preventDefault(),r&&clearTimeout(r),r=setTimeout((()=>{n=0}),e);const l=Date.now()-s<e,c=Math.sqrt(Math.pow(a.deltaX,2)+Math.pow(a.deltaY,2)),u=c<=n;if(n=c,l||u)return;let f;(a.deltaX>0||a.deltaY>0)&&(f="next"),(a.deltaX<0||a.deltaY<0)&&(f="prev"),f&&(t[f](),s=Date.now())}))}}!function(e){e.X="X",e.Y="Y"}(d||(d={}));const f=(...e)=>history.replaceState(...e),m="data-bespoke-view";var p;!function(e){e.Normal="",e.Presenter="presenter",e.Next="next"}(p||(p={}));const h=(e,{protocol:t,host:n,pathname:r,hash:s}=location)=>{const a=e.toString();return`${t}//${n}${r}${a?"?":""}${a}${s}`},g=()=>{switch(document.body.getAttribute(m)){case p.Normal:return p.Normal;case p.Presenter:return p.Presenter;case p.Next:return p.Next;default:throw new Error("View mode is not assigned.")}},v=e=>new URLSearchParams(location.search).get(e),b=(e,t={})=>{const n=Object.assign({location:location,setter:f},t),r=new URLSearchParams(n.location.search);for(const t of Object.keys(e)){const n=e[t];"string"==typeof n?r.set(t,n):r.delete(t)}try{n.setter(null,document.title,h(r,n.location))}catch(e){console.error(e)}},w={available:(()=>{try{return localStorage.setItem("bespoke-marp","bespoke-marp"),localStorage.removeItem("bespoke-marp"),!0}catch(e){return console.warn("Warning: Using localStorage is restricted in the current host so some features may not work."),!1}})(),get:e=>{try{return localStorage.getItem(e)}catch(e){return null}},set:(e,t)=>{try{return localStorage.setItem(e,t),!0}catch(e){return!1}},remove:e=>{try{return localStorage.removeItem(e),!0}catch(e){return!1}}};function y(e=".bespoke-marp-osc"){const t=document.querySelector(e);if(!t)return()=>{};const n=(e,n)=>{t.querySelectorAll(`[data-bespoke-marp-osc=${JSON.stringify(e)}]`).forEach(n)};return s.isEnabled||n("fullscreen",(e=>e.style.display="none")),w.available||n("presenter",(e=>{e.disabled=!0,e.title="Presenter view is disabled due to restricted localStorage."})),e=>{t.addEventListener("click",(t=>{if(t.target instanceof HTMLElement){const{bespokeMarpOsc:n}=t.target.dataset;switch(n&&t.target.blur(),n){case"next":e.next({fragment:!t.shiftKey});break;case"prev":e.prev({fragment:!t.shiftKey});break;case"fullscreen":"function"==typeof e.fullscreen&&s.isEnabled&&e.fullscreen();break;case"presenter":e.openPresenterView()}}})),e.parent.appendChild(t),e.on("activate",(({index:t})=>{n("page",(n=>n.textContent=`Page ${t+1} of ${e.slides.length}`))})),e.on("fragment",(({index:t,fragments:r,fragmentIndex:s})=>{n("prev",(e=>e.disabled=0===t&&0===s)),n("next",(n=>n.disabled=t===e.slides.length-1&&s===r.length-1))})),e.on("marp-active",(()=>t.removeAttribute("aria-hidden"))),e.on("marp-inactive",(()=>t.setAttribute("aria-hidden","true"))),s.isEnabled&&s.onchange((()=>n("fullscreen",(e=>e.classList.toggle("exit",s.isEnabled&&s.isFullscreen)))))}}function x(){const e=Math.max(Math.floor(.85*window.innerWidth),640),t=Math.max(Math.floor(.85*window.innerHeight),360);return window.open(this.presenterUrl,`bespoke-marp-presenter-${this.syncKey}`,`width=${e},height=${t},menubar=no,toolbar=no`)}function k(){const e=new URLSearchParams(location.search);return e.set("view","presenter"),e.set("sync",this.syncKey),h(e)}var E=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"];let L=e=>String(e).replace(/[&<>"']/g,(e=>`&${S[e]};`)),S={"&":"amp","<":"lt",">":"gt",'"':"quot","'":"apos"},I="dangerouslySetInnerHTML",P={className:"class",htmlFor:"for"},M={};function N(e,t){let n=[],r="";t=t||{};for(let e=arguments.length;e-- >2;)n.push(arguments[e]);if("function"==typeof e)return t.children=n.reverse(),e(t);if(e){if(r+="<"+e,t)for(let e in t)!1!==t[e]&&null!=t[e]&&e!==I&&(r+=` ${P[e]?P[e]:L(e)}="${L(t[e])}"`);r+=">"}if(-1===E.indexOf(e)){if(t[I])r+=t[I].__html;else for(;n.length;){let e=n.pop();if(e)if(e.pop)for(let t=e.length;t--;)n.push(e[t]);else r+=!0===M[e]?e:L(e)}r+=e?`</${e}>`:""}return M[r]=!0,r}const F=({children:e})=>N(null,null,...e),$="bespoke-marp-presenter-container",O="bespoke-marp-presenter-next",q="bespoke-marp-presenter-next-container",C="bespoke-marp-presenter-note-container",T="bespoke-marp-presenter-info-container",A="bespoke-marp-presenter-info-page",K="bespoke-marp-presenter-info-page-text",j="bespoke-marp-presenter-info-page-prev",R="bespoke-marp-presenter-info-page-next",U="bespoke-marp-presenter-info-time",D="bespoke-marp-presenter-info-timer";function V(e){const{title:t}=document;document.title="[Presenter view]"+(t?` - ${t}`:"");const n={},r=e=>(n[e]=n[e]||document.querySelector(`.${e}`),n[e]);document.body.appendChild((e=>{const t=document.createElement("div");return t.className=$,t.appendChild(e),t.insertAdjacentHTML("beforeend",N(F,null,N("div",{class:q},N("iframe",{class:O,src:"?view=next"})),N("div",{class:C}),N("div",{class:T},N("div",{class:A},N("button",{class:j,tabindex:"-1",title:"Previous"},"Previous"),N("span",{class:K}),N("button",{class:R,tabindex:"-1",title:"Next"},"Next")),N("time",{class:U,title:"Current time"}),N("div",{class:D})))),t})(e.parent)),(e=>{r(q).addEventListener("click",(()=>e.next()));const t=r(O),n=(s=t,(e,t)=>{var n;return null===(n=s.contentWindow)||void 0===n?void 0:n.postMessage(`navigate:${e},${t}`,"null"===window.origin?"*":window.origin)});var s;t.addEventListener("load",(()=>{r(q).classList.add("active"),n(e.slide(),e.fragmentIndex),e.on("fragment",(({index:e,fragmentIndex:t})=>n(e,t)))}));const a=document.querySelectorAll(".bespoke-marp-note");a.forEach((e=>{e.addEventListener("keydown",(e=>e.stopPropagation())),r(C).appendChild(e)})),e.on("activate",(()=>a.forEach((t=>t.classList.toggle("active",t.dataset.index==e.slide()))))),e.on("activate",(({index:t})=>{r(K).textContent=`${t+1} / ${e.slides.length}`}));const i=r(j),o=r(R);i.addEventListener("click",(t=>{i.blur(),e.prev({fragment:!t.shiftKey})})),o.addEventListener("click",(t=>{o.blur(),e.next({fragment:!t.shiftKey})})),e.on("fragment",(({index:t,fragments:n,fragmentIndex:r})=>{i.disabled=0===t&&0===r,o.disabled=t===e.slides.length-1&&r===n.length-1}));const l=()=>r(U).textContent=(new Date).toLocaleTimeString();l(),setInterval(l,250)})(e)}function X(e){const t=g();return t===p.Next&&e.appendChild(document.createElement("span")),e=>{t===p.Normal&&function(e){if(!(e=>e.syncKey&&"string"==typeof e.syncKey)(e))throw new Error("The current instance of Bespoke.js is invalid for Marp bespoke presenter plugin.");Object.defineProperties(e,{openPresenterView:{enumerable:!0,value:x},presenterUrl:{enumerable:!0,get:k}}),w.available&&document.addEventListener("keydown",(t=>{80!==t.which||t.altKey||t.ctrlKey||t.metaKey||(t.preventDefault(),e.openPresenterView())}))}(e),t===p.Presenter&&V(e),t===p.Next&&function(e){const t=t=>{if(t.origin!==window.origin)return;const[n,r]=t.data.split(":");if("navigate"===n){const[t,n]=r.split(",");let s=Number.parseInt(t,10),a=Number.parseInt(n,10)+1;a>=e.fragments[s].length&&(s+=1,a=0),e.slide(s,{fragment:a})}};window.addEventListener("message",t),e.on("destroy",(()=>window.removeEventListener("message",t)))}(e)}}function Y(e){e.on("activate",(t=>{document.querySelectorAll(".bespoke-progress-parent > .bespoke-progress-bar").forEach((n=>{n.style.flexBasis=100*t.index/(e.slides.length-1)+"%"}))}))}const B=e=>{const t=Number.parseInt(e,10);return Number.isNaN(t)?null:t};function z(e={}){const t=Object.assign({history:!0},e);return e=>{let n=!0;const r=e=>{const t=n;try{return n=!0,e()}finally{n=t}},s=(t={fragment:!0})=>{((t,n)=>{const{fragments:r,slides:s}=e,a=Math.max(0,Math.min(t,s.length-1)),i=Math.max(0,Math.min(n||0,r[a].length-1));a===e.slide()&&i===e.fragmentIndex||e.slide(a,{fragment:i})})((B(location.hash.slice(1))||1)-1,t.fragment?B(v("f")||""):null)};e.on("fragment",(({index:e,fragmentIndex:r})=>{n||b({f:0===r||r.toString()},{location:Object.assign(Object.assign({},location),{hash:`#${e+1}`}),setter:(...e)=>t.history?history.pushState(...e):history.replaceState(...e)})})),setTimeout((()=>{s(),window.addEventListener("hashchange",(()=>r((()=>{s({fragment:!1}),b({f:void 0})})))),window.addEventListener("popstate",(()=>{n||r((()=>s()))})),n=!1}),0)}}let H;function W(e={}){const t=e.key||((e=21)=>{let t="",n=crypto.getRandomValues(new Uint8Array(e));for(;e--;){let r=63&n[e];t+=r<36?r.toString(36):r<62?(r-26).toString(36).toUpperCase():r<63?"_":"-"}return t})(),n=`bespoke-marp-sync-${t}`,r=()=>{const e=w.get(n);return e?JSON.parse(e):Object.create(null)},s=e=>{const t=r(),s=Object.assign(Object.assign({},t),e(t));return w.set(n,JSON.stringify(s)),s};return s((e=>({reference:(e.reference||0)+1}))),e=>{Object.defineProperty(e,"syncKey",{value:t,enumerable:!0});let a=!0;setTimeout((()=>{e.on("fragment",(e=>{a&&s((()=>({index:e.index,fragmentIndex:e.fragmentIndex})))}))}),0),window.addEventListener("storage",(t=>{if(t.key===n&&t.oldValue&&t.newValue){const n=JSON.parse(t.oldValue),r=JSON.parse(t.newValue);if(n.index!==r.index||n.fragmentIndex!==r.fragmentIndex)try{a=!1,e.slide(r.index,{fragment:r.fragmentIndex})}finally{a=!0}}})),e.on("destroy",(()=>{const{reference:e}=r();void 0===e||e<=1?w.remove(n):s((()=>({reference:e-1})))}))}}function J({slope:e=Math.tan(-35*Math.PI/180),swipeThreshold:t=30}={}){return n=>{let r;const s=n.parent,a=e=>{const t=s.getBoundingClientRect();return{x:e.pageX-(t.left+t.right)/2,y:e.pageY-(t.top+t.bottom)/2}};s.addEventListener("touchstart",(e=>{r=1===e.touches.length?a(e.touches[0]):void 0}),{passive:!0}),s.addEventListener("touchmove",(e=>{if(r)if(1===e.touches.length){e.preventDefault();const t=a(e.touches[0]),n=t.x-r.x,s=t.y-r.y;r.delta=Math.sqrt(Math.pow(Math.abs(n),2)+Math.pow(Math.abs(s),2)),r.radian=Math.atan2(n,s)}else r=void 0})),s.addEventListener("touchend",(s=>{if(r){if(r.delta&&r.delta>=t&&r.radian){let t=r.radian-e;t=(t+Math.PI)%(2*Math.PI)-Math.PI,n[t<0?"next":"prev"](),s.stopPropagation()}r=void 0}}),{passive:!0})}}
|
|
1115 /*! *****************************************************************************
|
|
1116 Copyright (c) Microsoft Corporation.
|
|
1117
|
|
1118 Permission to use, copy, modify, and/or distribute this software for any
|
|
1119 purpose with or without fee is hereby granted.
|
|
1120
|
|
1121 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
1122 REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
1123 AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
1124 INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
1125 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
1126 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
1127 PERFORMANCE OF THIS SOFTWARE.
|
|
1128 ***************************************************************************** */function _(e,t,n,r){return new(n||(n=Promise))((function(s,a){function i(e){try{l(r.next(e))}catch(e){a(e)}}function o(e){try{l(r.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,o)}l((r=r.apply(e,t||[])).next())}))}const G=()=>(void 0===H&&(H="wakeLock"in navigator&&navigator.wakeLock),H),Q=()=>_(void 0,void 0,void 0,(function*(){const e=G();if(e)try{const t=yield e.request("screen");return t.addEventListener("release",(()=>{console.debug("[Marp CLI] Wake Lock was released")})),console.debug("[Marp CLI] Wake Lock is active"),t}catch(e){console.warn(e)}return null}));function Z(){return _(this,void 0,void 0,(function*(){if(!G())return;let e;const t=()=>{e&&"visible"===document.visibilityState&&Q()};return document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t),e=yield Q(),e}))}const ee=[p.Normal,p.Presenter,p.Next];!function(r=document.getElementById("p")){document.body.setAttribute(m,(()=>{switch(v("view")){case"next":return p.Next;case"presenter":return p.Presenter;default:return p.Normal}})());const s=(e=>{const t=v(e);return b({[e]:void 0}),t})("sync")||void 0,o=!1,d=!0,f=e(r,((...e)=>{const t=ee.findIndex((e=>g()===e));if(t<0)throw new Error("Invalid view");return e.map((([e,n])=>e[t]&&n)).filter((e=>e))})([[d,d,o],W({key:s})],[[d,d,d],X(r)],[[d,d,o],l],[[d,d,d],t],[[d,o,o],i()],[[d,d,d],c],[[d,d,d],z({history:!1})],[[d,d,o],u()],[[d,d,o],a],[[d,o,o],Y],[[d,d,o],J()],[[d,o,o],y()],[[d,d,d],n],[[d,d,o],Z]));window.addEventListener("beforeunload",(()=>b({sync:f.syncKey}))),window.addEventListener("unload",(()=>f.destroy()))}()}();</script></body></html> |