diff --git a/0-1. CA Intro/index.html b/0-1. CA Intro/index.html index 9a762c7..c136500 100644 --- a/0-1. CA Intro/index.html +++ b/0-1. CA Intro/index.html @@ -82,9 +82,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -122,7 +122,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -187,7 +187,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -314,6 +314,6 @@

Course Schedule

- \ No newline at end of file + \ No newline at end of file diff --git a/0-2. CA Overview/index.html b/0-2. CA Overview/index.html index 345ebe8..b8fe0be 100644 --- a/0-2. CA Overview/index.html +++ b/0-2. CA Overview/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -373,6 +373,6 @@

8 great ideas for designing better computer architecture

- \ No newline at end of file + \ No newline at end of file diff --git a/1-1. Defining Performance/index.html b/1-1. Defining Performance/index.html index f91c9f7..7e750db 100644 --- a/1-1. Defining Performance/index.html +++ b/1-1. Defining Performance/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -301,6 +301,6 @@

Defining performance

- \ No newline at end of file + \ No newline at end of file diff --git a/1-2. Measuring Performance/index.html b/1-2. Measuring Performance/index.html index 94d299a..bea5c54 100644 --- a/1-2. Measuring Performance/index.html +++ b/1-2. Measuring Performance/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -299,6 +299,6 @@

Amdahl's law

- \ No newline at end of file + \ No newline at end of file diff --git a/2-1. Designing principles 1~3 of MIPS ISA/index.html b/2-1. Designing principles 1~3 of MIPS ISA/index.html index ed65d8d..56c3242 100644 --- a/2-1. Designing principles 1~3 of MIPS ISA/index.html +++ b/2-1. Designing principles 1~3 of MIPS ISA/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -406,6 +406,6 @@

Key underlying design principles

- \ No newline at end of file + \ No newline at end of file diff --git a/2-2. Design principles 4 of MIPS ISA/index.html b/2-2. Design principles 4 of MIPS ISA/index.html index c642b95..8365817 100644 --- a/2-2. Design principles 4 of MIPS ISA/index.html +++ b/2-2. Design principles 4 of MIPS ISA/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -413,6 +413,6 @@

Good design demands goog compromise

- \ No newline at end of file + \ No newline at end of file diff --git a/2-3. Representing Instructions in computer/index.html b/2-3. Representing Instructions in computer/index.html index 4fafe6a..ea951be 100644 --- a/2-3. Representing Instructions in computer/index.html +++ b/2-3. Representing Instructions in computer/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -205,7 +205,14 @@ .OEEnV .Footer__Arrow-sc-zqxmks-3{margin-right:16px;}/*!sc*/ .OEEnV:hover .Footer__Arrow-sc-zqxmks-3{left:-2px;}/*!sc*/ @media (max-width:768px){.OEEnV{max-width:inherit;-webkit-flex-basis:inherit;-ms-flex-preferred-size:inherit;flex-basis:inherit;}}/*!sc*/ -data-styled.g42[id="Footer__ArticleButtonWrapper-sc-zqxmks-4"]{content:"OEEnV,"}/*!sc*/ +.cCfvHe{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;padding:20.8px 16px;max-width:250px;-webkit-flex-basis:250px;-ms-flex-preferred-size:250px;flex-basis:250px;font-size:17.6px;border-radius:5px;background-color:rgba(0,0,0,0.06);color:#191919;cursor:pointer;-webkit-transition:background-color 0.3s;transition:background-color 0.3s;}/*!sc*/ +.cCfvHe:hover{background-color:rgba(0,0,0,0.08);}/*!sc*/ +.cCfvHe .Footer__ArrowFlexWrapper-sc-zqxmks-1{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}/*!sc*/ +.cCfvHe .Footer__ArticleButtonTextWrapper-sc-zqxmks-2{-webkit-align-items:flex-end;-webkit-box-align:flex-end;-ms-flex-align:flex-end;align-items:flex-end;}/*!sc*/ +.cCfvHe .Footer__Arrow-sc-zqxmks-3{margin-left:16px;}/*!sc*/ +.cCfvHe:hover .Footer__Arrow-sc-zqxmks-3{left:2px;}/*!sc*/ +@media (max-width:768px){.cCfvHe{max-width:inherit;-webkit-flex-basis:inherit;-ms-flex-preferred-size:inherit;flex-basis:inherit;}}/*!sc*/ +data-styled.g42[id="Footer__ArticleButtonWrapper-sc-zqxmks-4"]{content:"OEEnV,cCfvHe,"}/*!sc*/ .hngxZd{margin-bottom:9.6px;font-size:12.8px;}/*!sc*/ data-styled.g43[id="Footer__ArticleButtonLabel-sc-zqxmks-5"]{content:"hngxZd,"}/*!sc*/ .brczfR{padding:2px 0;width:100%;text-overflow:ellipsis;overflow:hidden;}/*!sc*/ @@ -464,10 +471,10 @@

Conditional operations

slt is used in combination with beq and bne

slt $t0, $t1, $t2
 bne $t0, $zero, LABEL
-beq $t0, $zero, LABEL
+beq $t0, $zero, LABEL
- \ No newline at end of file + \ No newline at end of file diff --git a/404.html b/404.html index 49b646d..05b3fd4 100644 --- a/404.html +++ b/404.html @@ -53,6 +53,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/404/index.html b/404/index.html index 03ffe10..60b0f32 100644 --- a/404/index.html +++ b/404/index.html @@ -53,6 +53,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/_gatsby/slices/_gatsby-scripts-1.html b/_gatsby/slices/_gatsby-scripts-1.html index ac1ddd4..1f8380a 100644 --- a/_gatsby/slices/_gatsby-scripts-1.html +++ b/_gatsby/slices/_gatsby-scripts-1.html @@ -2,6 +2,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/after-jigeumgeuddae/index.html b/after-jigeumgeuddae/index.html index f7dc89f..05f99c6 100644 --- a/after-jigeumgeuddae/index.html +++ b/after-jigeumgeuddae/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -330,6 +330,6 @@

2022 지금그때 회고

- \ No newline at end of file + \ No newline at end of file diff --git a/all/index.html b/all/index.html index 328778a..e9c121d 100644 --- a/all/index.html +++ b/all/index.html @@ -65,15 +65,15 @@ .hlgCLY{margin-bottom:32px;line-height:1.7;font-size:16px;color:#404040;word-break:break-all;}/*!sc*/ data-styled.g53[id="PostList__Excerpt-sc-1oqnm6-3"]{content:"hlgCLY,"}/*!sc*/ .cUedeU{height:48px;}/*!sc*/ -data-styled.g64[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUedeU,"}/*!sc*/ +data-styled.g59[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUedeU,"}/*!sc*/ .gWRObo{margin-bottom:25.6px;line-height:1.2;font-size:18px;font-weight:700;}/*!sc*/ @media (max-width:768px){.gWRObo{padding:0 15px;}}/*!sc*/ data-styled.g78[id="all__PostsCount-sc-1gfv2rr-0"]{content:"gWRObo,"}/*!sc*/ -minjun.blog

14개의 글이 있습니다

Representing Instructions in computer

2024년 07월 31일 15:07

contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …


Design principles 4 of MIPS ISA

2024년 07월 31일 15:07

contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…


Design principles 1~3 of MIPS ISA

2024년 07월 22일 16:07

contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…


Measuring Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…


Defining Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…


CA Overview

2024년 07월 22일 14:07

contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…


Computer Architecture Intro

2024년 07월 22일 12:07

Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. -특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…


2024년 상반기 회고

2024년 07월 20일 20:07

지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…


기존 블로그 대신 Obsidian을 택한 이유

2024년 01월 10일 13:01

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…


2023년 회고

2024년 01월 08일 12:01

지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …

+minjun.blog

15개의 글이 있습니다

sigchi 2024 관심 주제

2024년 09월 07일 12:09

1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신…


Representing Instructions in computer

2024년 07월 31일 15:07

contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …


Design principles 4 of MIPS ISA

2024년 07월 31일 15:07

contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…


Design principles 1~3 of MIPS ISA

2024년 07월 22일 16:07

contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…


Measuring Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…


Defining Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…


CA Overview

2024년 07월 22일 14:07

contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…


Computer Architecture Intro

2024년 07월 22일 12:07

Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. +특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…


2024년 상반기 회고

2024년 07월 20일 20:07

지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…


기존 블로그 대신 Obsidian을 택한 이유

2024년 01월 10일 13:01

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…

- \ No newline at end of file + \ No newline at end of file diff --git a/chunk-map.json b/chunk-map.json index 1b7cd26..ce550c3 100644 --- a/chunk-map.json +++ b/chunk-map.json @@ -1 +1 @@ -{"app":["/app-ded2b582df0bc5128a57.js"],"component---src-pages-404-jsx":["/component---src-pages-404-jsx-e47b4cb7e798033e3bc2.js"],"component---src-pages-all-jsx":["/component---src-pages-all-jsx-83cd975bbdaba6e76a2f.js"],"component---src-pages-index-jsx":["/component---src-pages-index-jsx-1e1b3b70aa8550d78b61.js"],"component---src-pages-search-jsx":["/component---src-pages-search-jsx-f5e2d95e5bd740d0b345.js"],"component---src-pages-series-jsx":["/component---src-pages-series-jsx-e73340da6fc6d08d5a94.js"],"component---src-pages-tags-jsx":["/component---src-pages-tags-jsx-a6fdda42a8d093db5009.js"],"component---src-templates-post-jsx":["/component---src-templates-post-jsx-dc66b3a12edbd26b20af.js"],"component---src-templates-series-jsx":["/component---src-templates-series-jsx-060ee86f839facf4a835.js"]} \ No newline at end of file +{"app":["/app-ded2b582df0bc5128a57.js"],"component---src-pages-404-jsx":["/component---src-pages-404-jsx-e47b4cb7e798033e3bc2.js"],"component---src-pages-all-jsx":["/component---src-pages-all-jsx-83cd975bbdaba6e76a2f.js"],"component---src-pages-index-jsx":["/component---src-pages-index-jsx-1e1b3b70aa8550d78b61.js"],"component---src-pages-search-jsx":["/component---src-pages-search-jsx-f5e2d95e5bd740d0b345.js"],"component---src-pages-series-jsx":["/component---src-pages-series-jsx-e73340da6fc6d08d5a94.js"],"component---src-pages-tags-jsx":["/component---src-pages-tags-jsx-a6fdda42a8d093db5009.js"],"component---src-templates-post-jsx":["/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js"],"component---src-templates-series-jsx":["/component---src-templates-series-jsx-060ee86f839facf4a835.js"]} \ No newline at end of file diff --git a/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js b/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js new file mode 100644 index 0000000..7c09ecc --- /dev/null +++ b/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js @@ -0,0 +1,26 @@ +/*! For license information please see component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.LICENSE.txt */ +(self.webpackChunkgatsby_starter_hoodie=self.webpackChunkgatsby_starter_hoodie||[]).push([[400],{6050:function(e,t){"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const n=window,o=n.ShadowRoot&&(void 0===n.ShadyCSS||n.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,r=Symbol(),i=new WeakMap;let a=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==r)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(o&&void 0===e){const n=void 0!==t&&1===t.length;n&&(e=i.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&i.set(t,e))}return e}toString(){return this.cssText}};const s=o?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const n of e.cssRules)t+=n.cssText;return(e=>new a("string"==typeof e?e:e+"",void 0,r))(t)})(e):e;var l;const c=window,u=c.trustedTypes,d=u?u.emptyScript:"",p=c.reactiveElementPolyfillSupport,h={toAttribute(e,t){switch(t){case Boolean:e=e?d:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=null!==e;break;case Number:n=null===e?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},f=(e,t)=>t!==e&&(t==t||e==e),m={attribute:!0,type:String,converter:h,reflect:!1,hasChanged:f},g="finalized";let v=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(e){var t;this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,n)=>{const o=this._$Ep(n,t);void 0!==o&&(this._$Ev.set(o,n),e.push(o))})),e}static createProperty(e,t=m){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const n="symbol"==typeof e?Symbol():"__"+e,o=this.getPropertyDescriptor(e,n,t);void 0!==o&&Object.defineProperty(this.prototype,e,o)}}static getPropertyDescriptor(e,t,n){return{get(){return this[t]},set(o){const r=this[e];this[t]=o,this.requestUpdate(e,r,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||m}static finalize(){if(this.hasOwnProperty(g))return!1;this[g]=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const n of t)this.createProperty(n,e[n])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const n=new Set(e.flat(1/0).reverse());for(const e of n)t.unshift(s(e))}else void 0!==e&&t.push(s(e));return t}static _$Ep(e,t){const n=t.attribute;return!1===n?void 0:"string"==typeof n?n:"string"==typeof e?e.toLowerCase():void 0}u(){var e;this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,n;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(n=e.hostConnected)||void 0===n||n.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])}))}createRenderRoot(){var e;const t=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{o?e.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):t.forEach((t=>{const o=document.createElement("style"),r=n.litNonce;void 0!==r&&o.setAttribute("nonce",r),o.textContent=t.cssText,e.appendChild(o)}))})(t,this.constructor.elementStyles),t}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$EO(e,t,n=m){var o;const r=this.constructor._$Ep(e,n);if(void 0!==r&&!0===n.reflect){const i=(void 0!==(null===(o=n.converter)||void 0===o?void 0:o.toAttribute)?n.converter:h).toAttribute(t,n.type);this._$El=e,null==i?this.removeAttribute(r):this.setAttribute(r,i),this._$El=null}}_$AK(e,t){var n;const o=this.constructor,r=o._$Ev.get(e);if(void 0!==r&&this._$El!==r){const e=o.getPropertyOptions(r),i="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null===(n=e.converter)||void 0===n?void 0:n.fromAttribute)?e.converter:h;this._$El=r,this[r]=i.fromAttribute(t,e.type),this._$El=null}}requestUpdate(e,t,n){let o=!0;void 0!==e&&(((n=n||this.constructor.getPropertyOptions(e)).hasChanged||f)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===n.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,n))):o=!1),!this.isUpdatePending&&o&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(t){Promise.reject(t)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((e,t)=>this[t]=e)),this._$Ei=void 0);let t=!1;const n=this._$AL;try{t=this.shouldUpdate(n),t?(this.willUpdate(n),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(n)):this._$Ek()}catch(o){throw t=!1,this._$Ek(),o}t&&this._$AE(n)}willUpdate(e){}_$AE(e){var t;null===(t=this._$ES)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$EO(t,this[t],e))),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}};var b;v[g]=!0,v.elementProperties=new Map,v.elementStyles=[],v.shadowRootOptions={mode:"open"},null==p||p({ReactiveElement:v}),(null!==(l=c.reactiveElementVersions)&&void 0!==l?l:c.reactiveElementVersions=[]).push("1.6.2");const y=window,k=y.trustedTypes,_=k?k.createPolicy("lit-html",{createHTML:e=>e}):void 0,w="$lit$",E=`lit$${(Math.random()+"").slice(9)}$`,x="?"+E,S=`<${x}>`,C=document,A=()=>C.createComment(""),$=e=>null===e||"object"!=typeof e&&"function"!=typeof e,O=Array.isArray,T="[ \t\n\f\r]",P=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,I=/-->/g,N=/>/g,j=RegExp(`>|${T}(?:([^\\s"'>=/]+)(${T}*=${T}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),M=/'/g,H=/"/g,z=/^(?:script|style|textarea|title)$/i,L=(D=1,(e,...t)=>({_$litType$:D,strings:e,values:t})),R=Symbol.for("lit-noChange"),U=Symbol.for("lit-nothing"),B=new WeakMap,W=C.createTreeWalker(C,129,null,!1);var D;class F{constructor({strings:e,_$litType$:t},n){let o;this.parts=[];let r=0,i=0;const a=e.length-1,s=this.parts,[l,c]=((e,t)=>{const n=e.length-1,o=[];let r,i=2===t?"":"",a=P;for(let l=0;l"===s[0]?(a=r??P,c=-1):void 0===s[1]?c=-2:(c=a.lastIndex-s[2].length,n=s[1],a=void 0===s[3]?j:'"'===s[3]?H:M):a===H||a===M?a=j:a===I||a===N?a=P:(a=j,r=void 0);const d=a===j&&e[l+1].startsWith("/>")?" ":"";i+=a===P?t+S:c>=0?(o.push(n),t.slice(0,c)+w+t.slice(c)+E+d):t+E+(-2===c?(o.push(void 0),l):d)}const s=i+(e[n]||"")+(2===t?"":"");if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return[void 0!==_?_.createHTML(s):s,o]})(e,t);if(this.el=F.createElement(l,n),W.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(o=W.nextNode())&&s.length0){o.textContent=k?k.emptyScript:"";for(let n=0;nO(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]))(e)?this.T(e):this._(e)}k(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}$(e){this._$AH!==e&&(this._$AR(),this._$AH=this.k(e))}_(e){this._$AH!==U&&$(this._$AH)?this._$AA.nextSibling.data=e:this.$(C.createTextNode(e)),this._$AH=e}g(e){var t;const{values:n,_$litType$:o}=e,r="number"==typeof o?this._$AC(e):(void 0===o.el&&(o.el=F.createElement(o.h,this.options)),o);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===r)this._$AH.v(n);else{const e=new q(r,this),t=e.u(this.options);e.v(n),this.$(t),this._$AH=e}}_$AC(e){let t=B.get(e.strings);return void 0===t&&B.set(e.strings,t=new F(e)),t}T(e){O(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let n,o=0;for(const r of e)o===t.length?t.push(n=new Y(this.k(A()),this.k(A()),this,this.options)):n=t[o],n._$AI(r),o++;o2||""!==n[0]||""!==n[1]?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=U}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,n,o){const r=this.strings;let i=!1;if(void 0===r)e=G(this,e,t,0),i=!$(e)||e!==this._$AH&&e!==R,i&&(this._$AH=e);else{const o=e;let a,s;for(e=r[0],a=0;a{var o,r;const i=null!==(o=null==n?void 0:n.renderBefore)&&void 0!==o?o:t;let a=i._$litPart$;if(void 0===a){const e=null!==(r=null==n?void 0:n.renderBefore)&&void 0!==r?r:null;i._$litPart$=a=new Y(t.insertBefore(A(),e),e,void 0,n??{})}return a._$AI(e),a})(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!1)}render(){return R}};oe.finalized=!0,oe._$litElement$=!0,null===(te=globalThis.litElementHydrateSupport)||void 0===te||te.call(globalThis,{LitElement:oe});const re=globalThis.litElementPolyfillSupport;null==re||re({LitElement:oe}),(null!==(ne=globalThis.litElementVersions)&&void 0!==ne?ne:globalThis.litElementVersions=[]).push("3.3.2");const ie=(e,t)=>"method"===t.kind&&t.descriptor&&!("value"in t.descriptor)?{...t,finisher(n){n.createProperty(t.key,e)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:t.key,initializer(){"function"==typeof t.initializer&&(this[t.key]=t.initializer.call(this))},finisher(n){n.createProperty(t.key,e)}};function ae(e){return(t,n)=>void 0!==n?((e,t,n)=>{t.constructor.createProperty(n,e)})(e,t,n):ie(e,t)}var se;null===(se=window.HTMLSlotElement)||void 0===se||se.prototype.assignedElements;const le=2;let ce=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,n){this._$Ct=e,this._$AM=t,this._$Ci=n}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}};const ue=(e,t)=>{var n,o;const r=e._$AN;if(void 0===r)return!1;for(const i of r)null===(o=(n=i)._$AO)||void 0===o||o.call(n,t,!1),ue(i,t);return!0},de=e=>{let t,n;do{if(void 0===(t=e._$AM))break;n=t._$AN,n.delete(e),e=t}while(0===(null==n?void 0:n.size))},pe=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(void 0===n)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),me(t)}};function he(e){void 0!==this._$AN?(de(this),this._$AM=e,pe(this)):this._$AM=e}function fe(e,t=!1,n=0){const o=this._$AH,r=this._$AN;if(void 0!==r&&0!==r.size)if(t)if(Array.isArray(o))for(let i=n;i{var t,n,o,r;e.type==le&&(null!==(t=(o=e)._$AP)&&void 0!==t||(o._$AP=fe),null!==(n=(r=e)._$AQ)&&void 0!==n||(r._$AQ=he))};class ge extends ce{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,n){super._$AT(e,t,n),pe(this),this.isConnected=e._$AU}_$AO(e,t=!0){var n,o;e!==this.isConnected&&(this.isConnected=e,e?null===(n=this.reconnected)||void 0===n||n.call(this):null===(o=this.disconnected)||void 0===o||o.call(this)),t&&(ue(this,e),de(this))}setValue(e){if((e=>void 0===e.strings)(this._$Ct))this._$Ct._$AI(e,this);else{const t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}}class ve{}const be=new WeakMap,ye=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends ge{render(e){return U}update(e,[t]){var n;const o=t!==this.G;return o&&void 0!==this.G&&this.ot(void 0),(o||this.rt!==this.lt)&&(this.G=t,this.ct=null===(n=e.options)||void 0===n?void 0:n.host,this.ot(this.lt=e.element)),U}ot(e){var t;if("function"==typeof this.G){const n=null!==(t=this.ct)&&void 0!==t?t:globalThis;let o=be.get(n);void 0===o&&(o=new WeakMap,be.set(n,o)),void 0!==o.get(this.G)&&this.G.call(this.ct,void 0),o.set(this.G,e),void 0!==e&&this.G.call(this.ct,e)}else this.G.value=e}get rt(){var e,t,n;return"function"==typeof this.G?null===(t=be.get(null!==(e=this.ct)&&void 0!==e?e:globalThis))||void 0===t?void 0:t.get(this.G):null===(n=this.G)||void 0===n?void 0:n.value}disconnected(){this.rt===this.lt&&this.ot(void 0)}reconnected(){this.ot(this.lt)}});var ke=Object.defineProperty,_e=Object.getOwnPropertyDescriptor,we=(e,t,n,o)=>{for(var r,i=o>1?void 0:o?_e(t,n):t,a=e.length-1;a>=0;a--)(r=e[a])&&(i=(o?r(t,n,i):r(i))||i);return o&&i&&ke(t,n,i),i};t.GiscusWidget=class extends oe{constructor(){super(),this.GISCUS_SESSION_KEY="giscus-session",this.GISCUS_DEFAULT_HOST="https://giscus.app",this.ERROR_SUGGESTION="Please consider reporting this error at https://github.com/giscus/giscus/issues/new.",this.__session="",this._iframeRef=new ve,this.messageEventHandler=this.handleMessageEvent.bind(this),this.hasLoaded=!1,this.host=this.GISCUS_DEFAULT_HOST,this.strict="0",this.reactionsEnabled="1",this.emitMetadata="0",this.inputPosition="bottom",this.theme="light",this.lang="en",this.loading="eager",this.setupSession(),window.addEventListener("message",this.messageEventHandler)}get iframeRef(){var e;return null==(e=this._iframeRef)?void 0:e.value}get _host(){try{return new URL(this.host),this.host}catch{return this.GISCUS_DEFAULT_HOST}}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("message",this.messageEventHandler)}_formatError(e){return`[giscus] An error occurred. Error message: "${e}".`}setupSession(){const e=location.href,t=new URL(e),n=localStorage.getItem(this.GISCUS_SESSION_KEY),o=t.searchParams.get("giscus")||"";if(this.__session="",o)return localStorage.setItem(this.GISCUS_SESSION_KEY,JSON.stringify(o)),this.__session=o,t.searchParams.delete("giscus"),t.hash="",void history.replaceState(void 0,document.title,t.toString());if(n)try{this.__session=JSON.parse(n)}catch(r){localStorage.removeItem(this.GISCUS_SESSION_KEY),console.warn(`${this._formatError(null==r?void 0:r.message)} Session has been cleared.`)}}signOut(){localStorage.removeItem(this.GISCUS_SESSION_KEY),this.__session="",this.update(new Map)}handleMessageEvent(e){if(e.origin!==this._host)return;const{data:t}=e;if("object"!=typeof t||!t.giscus)return;if(this.iframeRef&&t.giscus.resizeHeight&&(this.iframeRef.style.height=`${t.giscus.resizeHeight}px`),t.giscus.signOut)return console.log("[giscus] User has logged out. Session has been cleared."),void this.signOut();if(!t.giscus.error)return;const n=t.giscus.error;if(n.includes("Bad credentials")||n.includes("Invalid state value")||n.includes("State has expired")){if(null!==localStorage.getItem(this.GISCUS_SESSION_KEY))return console.warn(`${this._formatError(n)} Session has been cleared.`),void this.signOut();console.error(`${this._formatError(n)} No session is stored initially. ${this.ERROR_SUGGESTION}`)}n.includes("Discussion not found")?console.warn(`[giscus] ${n}. A new discussion will be created if a comment/reaction is submitted.`):console.error(`${this._formatError(n)} ${this.ERROR_SUGGESTION}`)}sendMessage(e){!this.iframeRef||!this.iframeRef.contentWindow||!this.hasLoaded||(console.log({host:this.host,_host:this._host}),this.iframeRef.contentWindow.postMessage({giscus:e},this._host))}updateConfig(){const e={setConfig:{repo:this.repo,repoId:this.repoId,category:this.category,categoryId:this.categoryId,term:this.getTerm(),number:+this.getNumber(),strict:"1"===this.strict,reactionsEnabled:"1"===this.reactionsEnabled,emitMetadata:"1"===this.emitMetadata,inputPosition:this.inputPosition,theme:this.theme,lang:this.lang}};this.sendMessage(e)}firstUpdated(){var e;null==(e=this.iframeRef)||e.addEventListener("load",(()=>{var e;null==(e=this.iframeRef)||e.classList.remove("loading"),this.hasLoaded=!0,this.updateConfig()}))}requestUpdate(e,t,n){this.hasUpdated&&"host"!==e?this.updateConfig():super.requestUpdate(e,t,n)}getMetaContent(e,t=!1){const n=t?`meta[property='og:${e}'],`:"",o=document.querySelector(n+`meta[name='${e}']`);return o?o.content:""}_getCleanedUrl(){const e=new URL(location.href);return e.searchParams.delete("giscus"),e.hash="",e}getTerm(){switch(this.mapping){case"url":return`${this._getCleanedUrl()}`;case"title":return document.title;case"og:title":return this.getMetaContent("title",!0);case"specific":return this.term||"";case"number":return"";default:return location.pathname.length<2?"index":location.pathname.substring(1).replace(/\.\w+$/,"")}}getNumber(){return"number"===this.mapping&&this.term||""}getIframeSrc(){const e=this._getCleanedUrl().toString(),t=`${e}${this.id?"#"+this.id:""}`,n=this.getMetaContent("description",!0),o=this.getMetaContent("giscus:backlink")||e,r={origin:t,session:this.__session,repo:this.repo,repoId:this.repoId||"",category:this.category||"",categoryId:this.categoryId||"",term:this.getTerm(),number:this.getNumber(),strict:this.strict,reactionsEnabled:this.reactionsEnabled,emitMetadata:this.emitMetadata,inputPosition:this.inputPosition,theme:this.theme,description:n,backLink:o};return`${this._host}${this.lang?`/${this.lang}`:""}/widget?${new URLSearchParams(r)}`}render(){return L` + + `}},t.GiscusWidget.styles=((e,...t)=>{const n=1===e.length?e[0]:t.reduce(((t,n,o)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(n)+e[o+1]),e[0]);return new a(n,e,r)})` + :host, + iframe { + width: 100%; + border: none; + min-height: 150px; + color-scheme: light dark; + } + + iframe.loading { + opacity: 0; + } + `,we([ae({reflect:!0})],t.GiscusWidget.prototype,"host",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"repo",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"repoId",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"category",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"categoryId",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"mapping",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"term",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"strict",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"reactionsEnabled",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"emitMetadata",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"inputPosition",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"theme",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"lang",2),we([ae({reflect:!0})],t.GiscusWidget.prototype,"loading",2),t.GiscusWidget=we([function(e){return customElements.get(e)?e=>e:(e=>t=>{return"function"==typeof t?(n=e,o=t,customElements.define(n,o),o):((e,t)=>{const{kind:n,elements:o}=t;return{kind:n,elements:o,finisher(t){customElements.define(e,t)}}})(e,t);var n,o})(e)}("giscus-widget")],t.GiscusWidget)},8071:function(e,t,n){"use strict";const o=n(5893),r=n(7294);e.exports=function({id:e,host:t,repo:i,repoId:a,category:s,categoryId:l,mapping:c,term:u,strict:d,reactionsEnabled:p,emitMetadata:h,inputPosition:f,theme:m,lang:g,loading:v}){const[b,y]=r.useState(!1);return r.useEffect((()=>{b||(Promise.resolve().then((()=>n(6050))),y(!0))}),[]),b?o.jsx("giscus-widget",{id:e,host:t,repo:i,repoid:a,category:s,categoryid:l,mapping:c,term:u,strict:d,reactionsenabled:p,emitmetadata:h,inputposition:f,theme:m,lang:g,loading:v}):null}},1309:function(e,t,n){"use strict";var o=n(7294),r=n(2788),i=n(9583),a=n(231),s=n(9349);const l=r.default.div.withConfig({displayName:"Bio__BioWrapper",componentId:"sc-5v8ml6-0"})(["display:flex;align-items:center;@media (max-width:768px){padding:0 15px;}"]),c="undefined"!=typeof window&&"localhost:8000"===window.location.host?"http://localhost:8000":s.siteUrl,u=r.default.div.withConfig({displayName:"Bio__Profile",componentId:"sc-5v8ml6-1"})(["flex:0 0 auto;margin-right:16px;width:128px;height:128px;border-radius:999px;background-image:url(","/",".png);background-size:cover;background-position:center;"],c,(e=>e.theme.colors.profile)),d=r.default.div.withConfig({displayName:"Bio__Author",componentId:"sc-5v8ml6-2"})(["margin-bottom:8px;font-size:24px;font-weight:700;color:",";"],(e=>e.theme.colors.text)),p=r.default.div.withConfig({displayName:"Bio__Description",componentId:"sc-5v8ml6-3"})(["margin-bottom:11.2px;line-height:1.5;font-size:16px;color:",";"],(e=>e.theme.colors.secondaryText)),h=r.default.div.withConfig({displayName:"Bio__LinksWrapper",componentId:"sc-5v8ml6-4"})(["& a{margin-right:9.6px;}& svg{width:25.6px;height:25.6px;cursor:pointer;}& svg path{fill:",";transition:fill 0.3s;}& a:hover svg path{fill:",";}"],(e=>e.theme.colors.icon),(e=>e.theme.colors.text)),f=e=>{let{link:t,children:n}=e;return t?o.createElement("a",{href:t,target:"_blank",rel:"noreferrer"},n):null};t.Z=()=>{const{github:e,kaggle:t,instagram:n,facebook:r,twitter:c,x:m,blogger:g,medium:v,linkedIn:b,email:y,resume:k,link:_}=s.links;return o.createElement(l,{id:"bio"},o.createElement(u,null),o.createElement("div",null,o.createElement(d,null,"@",s.author),o.createElement(p,null,s.description),o.createElement(h,null,o.createElement(f,{link:e},o.createElement(i.hJX,null)),o.createElement(f,{link:t},o.createElement(i.jnu,null)),o.createElement(f,{link:n},o.createElement(i.Zf_,null)),o.createElement(f,{link:r},o.createElement(i.Am9,null)),o.createElement(f,{link:c},o.createElement(i.fWC,null)),o.createElement(f,{link:m},o.createElement(a.LCd,null)),o.createElement(f,{link:v},o.createElement(a.Vlo,null)),o.createElement(f,{link:g},o.createElement(a.emo,null)),o.createElement(f,{link:b},o.createElement(i.ltd,null)),o.createElement(f,{link:y},o.createElement(a.uWG,null)),o.createElement(f,{link:k},o.createElement(a.lp$,null)),o.createElement(f,{link:_},o.createElement(a.gjK,null)))))}},729:function(e,t,n){"use strict";var o=n(5697),r=n.n(o);const i=n(2788).default.hr.withConfig({displayName:"Divider",componentId:"sc-1jz0jl-0"})(["margin-top:",";margin-bottom:",";border:none;border-bottom:1px solid ",";"],(e=>e.mt),(e=>e.mb),(e=>e.theme.colors.divider));i.propTypes={mt:r().string,mb:r().string},i.defaultProps={mt:"48px",mb:"48px"},t.Z=i},184:function(e,t,n){"use strict";var o=n(7294),r=n(2788),i=n(1883);const a=r.default.div.withConfig({displayName:"TagList__TagListWrapper",componentId:"sc-s1uz5f-0"})(["margin-bottom:10px;word-break:break-all;"]),s=r.default.div.withConfig({displayName:"TagList__TagLink",componentId:"sc-s1uz5f-1"})(["display:inline-block;padding:9.6px 11.2px;margin-right:8px;margin-bottom:8px;border-radius:50px;background-color:",";color:",";text-decoration:none;font-size:14.4px;transition:all 0.2s;&:hover{background-color:",";}"],(e=>e.selected?e.theme.colors.selectedTagBackground:e.theme.colors.tagBackground),(e=>e.selected?e.theme.colors.selectedTagText:e.theme.colors.tagText),(e=>e.selected?e.theme.colors.hoveredSelectedTagBackground:e.theme.colors.hoveredTagBackground)),l=e=>e.replace(/\s+/g,"-");t.Z=e=>{let{tagList:t,count:n,selected:r}=e;return t?n?o.createElement(a,null,t.map(((e,t)=>o.createElement(i.Link,{key:JSON.stringify({tag:e,i:t}),to:r===e.fieldValue?"/tags":"/tags?q="+encodeURIComponent(e.fieldValue)},o.createElement(s,{selected:e.fieldValue===r},l(e.fieldValue)," (",e.totalCount,")"))))):o.createElement(a,null,t.map(((e,t)=>o.createElement(i.Link,{key:JSON.stringify({tag:e,i:t}),to:"/tags?q="+e},o.createElement(s,null,l(e)))))):null}},8479:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return Oe}});var o=n(7294),r=n(5609),i=n(5038),a=n(2788),s=n(9349),l=n(729),c=n(184);n(1309);const u=a.default.div.withConfig({displayName:"Header__Wrapper",componentId:"sc-1d3p6ct-0"})(["margin-top:32px;@media (max-width:768px){padding:0 15px;}"]),d=a.default.h1.withConfig({displayName:"Header__ArticleTitle",componentId:"sc-1d3p6ct-1"})(["margin-bottom:25.6px;line-height:1.2;font-size:40px;font-weight:700;color:",";"],(e=>e.theme.colors.text)),p=a.default.div.withConfig({displayName:"Header__Information",componentId:"sc-1d3p6ct-2"})(["margin-bottom:32px;font-size:16px;display:flex;flex-direction:column;gap:8px;"]),h=a.default.span.withConfig({displayName:"Header__Author",componentId:"sc-1d3p6ct-3"})(["padding-bottom:15px;font-weight:700;color:",";"],(e=>e.theme.colors.text)),f=a.default.span.withConfig({displayName:"Header__Date",componentId:"sc-1d3p6ct-4"})(["font-weight:300;color:",";"],(e=>e.theme.colors.secondaryText)),m=a.default.strong.withConfig({displayName:"Header__Property",componentId:"sc-1d3p6ct-5"})(["font-weight:300;color:",""],(e=>e.theme.colors.secondaryText));var g=e=>{let{title:t,date:n,tags:r,minToRead:i,updated:a}=e;return o.createElement(u,null,o.createElement(d,null," ",t," "),o.createElement(p,null,o.createElement("div",null,o.createElement(h,null," @",s.author," "),o.createElement(f,null,"· ",i," min read ")),o.createElement("div",null,o.createElement(m,null,"Created Date "),o.createElement(f,null,"· ",n," ")),o.createElement("div",null,o.createElement(m,null,"Last Update "),o.createElement(f,null,"· ",a," "))),r&&o.createElement(c.Z,{tagList:r}),o.createElement(l.Z,{mt:"0"}))},v=n(3880),b=n.n(v),y=n(998),k=n.n(y),_=n(1883),w=n(8193);const E=a.default.div.withConfig({displayName:"Series__SeriesWrapper",componentId:"sc-ifd2zz-0"})(["margin-bottom:32px;padding:16px;background-color:",";"],(e=>e.theme.colors.seriesBackground)),x=a.default.h2.withConfig({displayName:"Series__SeriesHeader",componentId:"sc-ifd2zz-1"})(["margin-bottom:16px;font-size:16px;font-weight:bold;color:",";& > span{font-weight:normal;color:",";}& > a{color:inherit;text-decoration:none;}& > a:hover{text-decoration:underline;}"],(e=>e.theme.colors.text),(e=>e.theme.colors.tertiaryText)),S=a.default.ul.withConfig({displayName:"Series__PostWrapper",componentId:"sc-ifd2zz-2"})([""]),C=a.default.li.withConfig({displayName:"Series__Post",componentId:"sc-ifd2zz-3"})(["position:relative;font-size:12.8px;color:",";&:not(:last-child){margin-bottom:9.6px;}& > a{text-decoration:none;color:inherit;transition:color 0.3s;}& > a:hover{color:",";}& > svg{position:absolute;margin-left:5px;}"],(e=>e.currentPost?e.theme.colors.text:e.theme.colors.tertiaryText),(e=>e.theme.colors.text)),A=a.default.div.withConfig({displayName:"Series__ViewMore",componentId:"sc-ifd2zz-4"})(["margin-top:15px;font-size:14.4px;text-align:center;color:",";cursor:pointer;transition:color 0.3s;&:hover{color:",";}"],(e=>e.theme.colors.tertiaryText),(e=>e.theme.colors.text));var $=e=>{let{header:t,series:n}=e;const{0:r,1:i}=(0,o.useState)(!0),a=(0,o.useMemo)((()=>{if(n.length<5)return n;if(!r)return n;const e=k()(n,{currentPost:!0});return e<2?n.slice(0,5):n.length-e-1<2?n.slice(n.length-5,n.length):n.slice(e-2,e+3)}),[n,r]),s=(0,o.useMemo)((()=>n.length>5),[n]);return o.createElement(E,null,o.createElement(x,null,o.createElement(_.Link,{to:"/series/"+b()(t,/\s/g,"-")},"SERIES: ",t)," ",o.createElement("span",null,"(",n.length,")")),o.createElement(S,null,a.map(((e,t)=>o.createElement(C,{key:t,currentPost:e.currentPost},o.createElement(_.Link,{to:e.fields.slug},e.frontmatter.title)," ",e.currentPost&&o.createElement(w.kyg,null)," ")))),s&&o.createElement(A,{onClick:()=>{i(!r)}},r?"View More (+"+(n.length-a.length)+")":"View Less"))};var O=()=>{const e=(0,o.useRef)();let t=0;return e.current&&(t=e.current.getBoundingClientRect().top+document.documentElement.scrollTop),[e,t]},T=n(5785),P=n(6261);var I=()=>{const{0:e,1:t}=(0,o.useState)({x:0,y:0}),n=()=>{t({y:window.scrollY,x:window.scrollX})};return(0,o.useEffect)((()=>(window.addEventListener("scroll",n),()=>window.removeEventListener("scroll",n))),[]),e};var N=e=>{const t=e.getBoundingClientRect(),n=window.pageXOffset||document.documentElement.scrollLeft,o=window.pageYOffset||document.documentElement.scrollTop;return{top:t.top+o,left:t.left+n}};const j=a.default.div.withConfig({displayName:"RevealOnScroll__StyledWrapper",componentId:"sc-j177rt-0"})(["position:relative;opacity:0;transition:0.35s all ease;",""],(e=>e.visible&&(0,a.css)(["opacity:1;"])));var M=e=>{let{revealAt:t,reverse:n,children:r}=e;const{y:i}=I();let a=null;return a=n?it,o.createElement(j,{visible:a},r)};const H=a.default.div.withConfig({displayName:"Toc__TocWrapper",componentId:"sc-1axrmab-0"})(["position:absolute;opacity:1;left:100%;& > div{padding-right:20px;padding-left:16px;margin-left:48px;position:relative;width:240px;max-height:calc(100% - 185px);overflow-y:auto;::-webkit-scrollbar{width:3px;}::-webkit-scrollbar-track{background:",";}::-webkit-scrollbar-thumb{background:",";}","}@media (max-width:1300px){display:None;}"],(e=>e.theme.colors.scrollTrack),(e=>e.theme.colors.scrollHandle),(e=>e.stick&&(0,a.css)(["position:fixed;top:","px;"],100))),z=a.default.div.withConfig({displayName:"Toc__ParagraphTitle",componentId:"sc-1axrmab-1"})(["margin-bottom:8px;padding-left:","px;font-size:14.4px;color:",";line-height:1.3;transition:all 0.2s;"," &:hover{color:",";cursor:pointer;}"],(e=>e.subtitle?19.2:0),(e=>e.theme.colors.mutedText),(e=>e.active&&(0,a.css)(["transform:translate(-11.2px,0);color:",";"],(e=>e.theme.colors.accentText))),(e=>e.theme.colors.secondAccentText));var L=e=>{let{items:t,articleOffset:n}=e;const{y:r}=I(),{0:i,1:a}=(0,o.useState)(4e3),{0:s,1:l}=(0,o.useState)([]),{0:c,1:u}=(0,o.useState)(0);(0,o.useEffect)((()=>{l((0,T.Z)(document.querySelectorAll("#article-body > h2, #article-body > h3")).map((e=>N(e).top)))}),[]),(0,o.useEffect)((()=>{s.forEach(((e,t)=>{e-300n-100},o.createElement("div",null,t.map(((e,t)=>o.createElement(z,{key:t,subtitle:"H3"===e.tagName,active:t===c,onClick:()=>{return e=t,void P.NY.scrollTo(s[e]-100);var e}},e.innerText))))))};var R=a.default.div.withConfig({displayName:"StyledMarkdown",componentId:"sc-lqtcur-0"})(["&{font-size:16.7px;color:",";line-height:1.73;overflow:hidden;}& h1:first-child,& h2:first-child,& h3:first-child,& h4:first-child{margin-top:0;}& > p,& > ul,& > ol,& table,& blockquote,& pre,& img,& .katex-display{margin-top:0;margin-bottom:24px;word-break:break-all;}& p{overflow-x:scroll;word-break:break-all;::-webkit-scrollbar{display:none;}}& h2,& h3,& h4,& h5,& h6{margin:11.2px 0 4.8px 0;font-weight:700;}& h2{margin-top:75px;margin-bottom:16px;font-size:24px;}& h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}& h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}& h5{font-size:16px;}& h6{font-size:14.4px;}& strong{font-weight:700;}& em{font-style:italic;}& blockquote{padding:18px 24px;border-left:4px solid ",";background-color:",";& *:last-child{margin-bottom:0;}}& blockquote blockquote{margin-top:24px;}& blockquote > p > code.language-text{background-color:",";}& table{border-collapse:collapse;}& th{border-bottom:2px solid ",";font-weight:700;}& td{border-top:1px solid ",";border-bottom:1px solid ",";}& td,th{padding:8px;}& tr:first-child td{border-top:none;}& tr:nth-child(even){background-color:",";}& tr:last-child td{border-bottom:none;}& *:not(pre) > code.language-text,& table code.language-text{position:relative;top:-1px;margin-right:3px;padding:3px 5px 3px 5px;font-size:13px;background-color:",";font-weight:bold;color:",";}& h2 > code.language-text,& h3 > code.language-text,& h4 > code.language-text{font-size:inherit;}& tr:nth-child(even) code.language-text{background-color:",";}& ul,& ol{padding-left:25px;}& ol{list-style:decimal;}& ul{list-style:disc;}& ul ul{list-style:circle;}& ul ul ul{list-style:square;}& li{margin-bottom:15px;}& li p{margin:8px 0;}& pre{::-webkit-scrollbar{height:10px;}::-webkit-scrollbar-track{background:",";}::-webkit-scrollbar-thumb{background:",';}}& code[class*="language-"],& pre[class*="language-"]{font-size:15px;}& img{display:block;margin-left:auto;margin-right:auto;max-width:100%;}& figcaption{margin-top:5px;text-align:center;color:#868e96;font-size:12px;font-style:italic;}& hr{border:none;border-bottom:1px solid ',';}& a[data-wiki-link="true"]{color:',';background-color:none;text-decoration:none;}& a[data-wiki-link="true"]:hover{color:',";text-decoration:underline;}& a{padding:1.6px 0;color:",";}& a:hover{background-color:none;color:",";}"],(e=>e.theme.colors.text),(e=>e.theme.colors.blockQuoteBorder),(e=>e.theme.colors.blockQuoteBackground),(e=>e.theme.colors.inlineCodeBackgroundDarker),(e=>e.theme.colors.border),(e=>e.theme.colors.border),(e=>e.theme.colors.border),(e=>e.theme.colors.tableBackground),(e=>e.theme.colors.inlineCodeBackground),(e=>e.theme.colors.text),(e=>e.theme.colors.inlineCodeBackgroundDarker),(e=>e.theme.colors.scrollTrack),(e=>e.theme.colors.scrollHandle),(e=>e.theme.colors.border),(e=>e.theme.colors.flipAccentText),(e=>e.theme.colors.flipAccentOppositeText),(e=>e.theme.colors.text),(e=>e.theme.colors.hoveredLinkText)),U=n(6113);var B=(0,a.css)(['code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}pre[class*="language-"]{padding:1em;overflow:auto;}:not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}.token.important,.token.bold{font-weight:bold;}.token.italic{font-style:italic;}.token.entity{cursor:help;}']);const W=(0,a.css)(['& code[class*="language-"],& pre[class*="language-"]{background-color:#222222;}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999;}.token.punctuation{color:#ccc;}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a;}.token.function-name{color:#6196cc;}.token.boolean,.token.number,.token.function{color:#f08d49;}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555;}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd;}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699;}.token.operator,.token.entity,.token.url{color:#67cdcc;}.token.important,.token.bold{font-weight:bold;}.token.italic{font-style:italic;}.token.entity{cursor:help;}.token.inserted{color:green;}']);var D=(0,a.createGlobalStyle)([""," ",""],B,W);const F=(0,a.css)(['code[class*="language-"],pre[class*="language-"]{background-color:#f7f6f3;color:hsl(230,8%,24%);}code[class*="language-"]::-moz-selection,code[class*="language-"] *::-moz-selection,pre[class*="language-"] *::-moz-selection{background:hsl(230,1%,90%);color:inherit;}code[class*="language-"]::selection,code[class*="language-"] *::selection,pre[class*="language-"] *::selection{background:hsl(230,1%,90%);color:inherit;}.token.comment,.token.prolog,.token.cdata{color:hsl(230,4%,64%);}.token.doctype,.token.punctuation,.token.entity{color:hsl(230,8%,24%);}.token.attr-name,.token.class-name,.token.boolean,.token.constant,.token.number,.token.atrule{color:hsl(35,99%,36%);}.token.keyword{color:hsl(301,63%,40%);}.token.property,.token.tag,.token.symbol,.token.deleted,.token.important{color:hsl(5,74%,59%);}.token.selector,.token.string,.token.char,.token.builtin,.token.inserted,.token.regex,.token.attr-value,.token.attr-value > .token.punctuation{color:hsl(119,34%,47%);}.token.variable,.token.operator,.token.function{color:hsl(221,87%,60%);}.token.url{color:hsl(198,99%,37%);}.token.attr-value > .token.punctuation.attr-equals,.token.special-attr > .token.attr-value > .token.value.css{color:hsl(230,8%,24%);}.language-css .token.selector{color:hsl(5,74%,59%);}.language-css .token.property{color:hsl(230,8%,24%);}.language-css .token.function,.language-css .token.url > .token.function{color:hsl(198,99%,37%);}.language-css .token.url > .token.string.url{color:hsl(119,34%,47%);}.language-css .token.important,.language-css .token.atrule .token.rule{color:hsl(301,63%,40%);}.language-javascript .token.operator{color:hsl(301,63%,40%);}.language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation{color:hsl(344,84%,43%);}.language-json .token.operator{color:hsl(230,8%,24%);}.language-json .token.null.keyword{color:hsl(35,99%,36%);}.language-markdown .token.url,.language-markdown .token.url > .token.operator,.language-markdown .token.url-reference.url > .token.string{color:hsl(230,8%,24%);}.language-markdown .token.url > .token.content{color:hsl(221,87%,60%);}.language-markdown .token.url > .token.url,.language-markdown .token.url-reference.url{color:hsl(198,99%,37%);}.language-markdown .token.blockquote.punctuation,.language-markdown .token.hr.punctuation{color:hsl(230,4%,64%);font-style:italic;}.language-markdown .token.code-snippet{color:hsl(119,34%,47%);}.language-markdown .token.bold .token.content{color:hsl(35,99%,36%);}.language-markdown .token.italic .token.content{color:hsl(301,63%,40%);}.language-markdown .token.strike .token.content,.language-markdown .token.strike .token.punctuation,.language-markdown .token.list.punctuation,.language-markdown .token.title.important > .token.punctuation{color:hsl(5,74%,59%);}.token.bold{font-weight:bold;}.token.comment,.token.italic{font-style:italic;}.token.entity{cursor:help;}.token.namespace{opacity:0.8;}.token.token.tab:not(:empty):before,.token.token.cr:before,.token.token.lf:before,.token.token.space:before{color:hsla(230,8%,24%,0.2);}div.code-toolbar > .toolbar.toolbar > .toolbar-item > button,div.code-toolbar > .toolbar.toolbar > .toolbar-item > a,div.code-toolbar > .toolbar.toolbar > .toolbar-item > span{background:hsl(230,1%,90%);color:hsl(230,6%,44%);padding:0.1em 0.4em;border-radius:0.3em;}div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover,div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus,div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover,div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus,div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover,div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus{background:hsl(230,1%,78%);color:hsl(230,8%,24%);}.line-highlight.line-highlight{background:hsla(230,8%,24%,0.05);}.line-highlight.line-highlight:before,.line-highlight.line-highlight[data-end]:after{background:hsl(230,1%,90%);color:hsl(230,8%,24%);padding:0.1em 0.6em;border-radius:0.3em;box-shadow:0 2px 0 0 rgba(0,0,0,0.2);}pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before{background-color:hsla(230,8%,24%,0.05);}.line-numbers.line-numbers .line-numbers-rows,.command-line .command-line-prompt{border-right-color:hsla(230,8%,24%,0.2);}.line-numbers .line-numbers-rows > span:before,.command-line .command-line-prompt > span:before{color:hsl(230,1%,62%);}.rainbow-braces .token.token.punctuation.brace-level-1,.rainbow-braces .token.token.punctuation.brace-level-5,.rainbow-braces .token.token.punctuation.brace-level-9{color:hsl(5,74%,59%);}.rainbow-braces .token.token.punctuation.brace-level-2,.rainbow-braces .token.token.punctuation.brace-level-6,.rainbow-braces .token.token.punctuation.brace-level-10{color:hsl(119,34%,47%);}.rainbow-braces .token.token.punctuation.brace-level-3,.rainbow-braces .token.token.punctuation.brace-level-7,.rainbow-braces .token.token.punctuation.brace-level-11{color:hsl(221,87%,60%);}.rainbow-braces .token.token.punctuation.brace-level-4,.rainbow-braces .token.token.punctuation.brace-level-8,.rainbow-braces .token.token.punctuation.brace-level-12{color:hsl(301,63%,40%);}pre.diff-highlight > code .token.token.deleted:not(.prefix),pre > code.diff-highlight .token.token.deleted:not(.prefix){background-color:hsla(353,100%,66%,0.15);}pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection,pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection,pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection,pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection{background-color:hsla(353,95%,66%,0.25);}pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection,pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection,pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection,pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection{background-color:hsla(353,95%,66%,0.25);}pre.diff-highlight > code .token.token.inserted:not(.prefix),pre > code.diff-highlight .token.token.inserted:not(.prefix){background-color:hsla(137,100%,55%,0.15);}pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection,pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection,pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection,pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection{background-color:hsla(135,73%,55%,0.25);}pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection,pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection,pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection,pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection{background-color:hsla(135,73%,55%,0.25);}.prism-previewer.prism-previewer:before,.prism-previewer-gradient.prism-previewer-gradient div{border-color:hsl(0,0,95%);}.prism-previewer-color.prism-previewer-color:before,.prism-previewer-gradient.prism-previewer-gradient div,.prism-previewer-easing.prism-previewer-easing:before{border-radius:0.3em;}.prism-previewer.prism-previewer:after{border-top-color:hsl(0,0,95%);}.prism-previewer-flipped.prism-previewer-flipped.after{border-bottom-color:hsl(0,0,95%);}.prism-previewer-angle.prism-previewer-angle:before,.prism-previewer-time.prism-previewer-time:before,.prism-previewer-easing.prism-previewer-easing{background:hsl(0,0%,100%);}.prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}.prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}.prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}']);var G=(0,a.createGlobalStyle)([""," ",""],B,F);var q=()=>{const{theme:e}=(0,U.useSelector)((e=>e.theme));return o.createElement(o.Fragment,null,"light"===e?o.createElement(G,null):o.createElement(D,null))};const Y=a.default.div.withConfig({displayName:"Body__Wrapper",componentId:"sc-7hat30-0"})(["position:relative;margin-bottom:112px;@media (max-width:768px){padding:0 15px;}"]);var V=e=>{let{html:t}=e;const{0:n,1:r}=(0,o.useState)([]),[i,a]=O();return(0,o.useEffect)((()=>{r(Array.from(document.querySelectorAll("#article-body > h2, #article-body > h3")))}),[]),o.createElement(Y,null,o.createElement(L,{items:n,articleOffset:a}),o.createElement(q,null),o.createElement(R,{id:"article-body",dangerouslySetInnerHTML:{__html:t},itemProp:"articleBody",ref:i}))},Q=n(7516),X=n(673);function Z(e,t){for(var n=0;n=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function re(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}var ie="react-md-spinner",ae="__react-md-spinner-animation__",se=new(n.n(X)())({global:!1,cascade:!0,keyframe:!0,prefix:!0,compress:!1}),le={ROOT_ROTATE:"".concat(ae,"root-rotate"),FILL_UNFILL_ROTATE:"".concat(ae,"fill-unfill-rotate"),LAYER_1_FADE_IN_OUT:"".concat(ae,"layer-1-fade-in-out"),LAYER_2_FADE_IN_OUT:"".concat(ae,"layer-2-fade-in-out"),LAYER_3_FADE_IN_OUT:"".concat(ae,"layer-3-fade-in-out"),LAYER_4_FADE_IN_OUT:"".concat(ae,"layer-4-fade-in-out"),LEFT_SPIN:"".concat(ae,"left-spin"),RIGHT_SPIN:"".concat(ae,"right-spin")},ce=se("","\n@keyframes ".concat(le.ROOT_ROTATE," {\n to { transform: rotate(360deg); }\n}\n\n@keyframes ").concat(le.FILL_UNFILL_ROTATE," {\n 12.5% { transform: rotate(135deg) }\n 25% { transform: rotate(270deg) }\n 37.5% { transform: rotate(405deg) }\n 50% { transform: rotate(540deg) }\n 62.5% { transform: rotate(675deg) }\n 75% { transform: rotate(810deg) }\n 87.5% { transform: rotate(945deg) }\n 100% { transform: rotate(1080deg) }\n}\n\n@keyframes ").concat(le.LAYER_1_FADE_IN_OUT," {\n 0% { opacity: 1 }\n 25% { opacity: 1 }\n 26% { opacity: 0 }\n 89% { opacity: 0 }\n 90% { opacity: 1 }\n 100% { opacity: 1 }\n}\n\n@keyframes ").concat(le.LAYER_2_FADE_IN_OUT," {\n 0% { opacity: 0 }\n 15% { opacity: 0 }\n 25% { opacity: 1 }\n 50% { opacity: 1 }\n 51% { opacity: 0 }\n 100% { opacity: 0 }\n}\n\n@keyframes ").concat(le.LAYER_3_FADE_IN_OUT," {\n 0% { opacity: 0 }\n 40% { opacity: 0 }\n 50% { opacity: 1 }\n 75% { opacity: 1 }\n 76% { opacity: 0 }\n 100% { opacity: 0 }\n}\n\n@keyframes ").concat(le.LAYER_4_FADE_IN_OUT," {\n 0% { opacity: 0 }\n 65% { opacity: 0 }\n 75% { opacity: 1 }\n 90% { opacity: 1 }\n 100% { opacity: 0 }\n}\n\n@keyframes ").concat(le.LEFT_SPIN," {\n 0% { transform: rotate(130deg) }\n 50% { transform: rotate(-5deg) }\n 100% { transform: rotate(130deg) }\n}\n\n@keyframes ").concat(le.RIGHT_SPIN," {\n 0% { transform: rotate(-130deg) }\n 50% { transform: rotate(5deg) }\n 100% { transform: rotate(-130deg) }\n}\n")),ue=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),re(this,te(t).apply(this,arguments))}var n,r,i;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&ne(e,t)}(t,e),n=t,(r=[{key:"componentDidMount",value:function(){var e,n,o;t.mountedInstanceCount<1&&(e=ie,n=ce,(o=document.createElement("style")).type="text/css",o.setAttribute("data-".concat(e),""),o.innerHTML=n,document.head.appendChild(o)),t.mountedInstanceCount++}},{key:"componentWillUnmount",value:function(){var e,n;t.mountedInstanceCount=Math.max(0,t.mountedInstanceCount-1),t.mountedInstanceCount<1&&(e=ie,null!=(n=document.querySelector("[data-".concat(e,"]")))&&null!=n.parentNode&&n.parentNode.removeChild(n))}},{key:"render",value:function(){for(var e=this.props,t=(e.singleColor,e.size,e.borderSize,e.duration,e.color1,e.color2,e.color3,e.color4,oe(e,["singleColor","size","borderSize","duration","color1","color2","color3","color4"])),n=function(e){var t=e.size,n=e.duration,o=e.borderSize||Math.max(1,Math.round(.107142*t)),r=function(e){var t=e.singleColor,n=e.color1,o=e.color2,r=e.color3,i=e.color4;return t?[t,t,t,t]:[n,o,r,i]}(e),i=360*n/306,a={display:"inline-block",position:"relative",width:t,height:t,verticalAlign:"middle",fontSize:"0",animation:"".concat(le.ROOT_ROTATE," ").concat(i,"ms linear infinite"),WebkitAnimation:"".concat(le.ROOT_ROTATE," ").concat(i,"ms linear infinite")},s=r.map((function(e,t){return{boxSizing:"border-box",display:"block",position:"absolute",width:"100%",height:"100%",borderColor:e,whiteSpace:"nowrap",opacity:1,animationName:"".concat(le.FILL_UNFILL_ROTATE,", ").concat(le["LAYER_".concat(t+1,"_FADE_IN_OUT")]),WebkitAnimationName:"".concat(le.FILL_UNFILL_ROTATE,", ").concat(le["LAYER_".concat(t+1,"_FADE_IN_OUT")]),animationDuration:"".concat(n*r.length,"ms"),WebkitAnimationDuration:"".concat(n*r.length,"ms"),animationTimingFunction:"cubic-bezier(.4, 0, .2, 1)",WebkitAnimationTimingFunction:"cubic-bezier(.4, 0, .2, 1)",animationIterationCount:"infinite",WebkitAnimationIterationCount:"infinite"}})),l={display:"inline-block",boxSizing:"border-box",position:"absolute",top:0,borderRadius:"50%"},c=ee({},l,{left:"45%",width:"10%",borderWidth:o,borderColor:"inherit",borderTopStyle:"solid"}),u=ee({},l,{bottom:0,width:"200%",borderWidth:o,borderStyle:"solid",animationDuration:"".concat(n,"ms"),WebkitAnimationDuration:"".concat(n,"ms"),animationTimingFunction:"cubic-bezier(.4, 0, .2, 1)",WebkitAnimationTimingFunction:"cubic-bezier(.4, 0, .2, 1)",animationIterationCount:"infinite",WebkitAnimationIterationCount:"infinite"}),d=ee({},u,{left:0,transform:"rotate(129deg)",WebkitTransform:"rotate(129deg)",animationName:le.LEFT_SPIN,WebkitAnimationName:le.LEFT_SPIN}),p=r.map((function(e){return ee({},d,{borderColor:"".concat(e," transparent transparent ").concat(e)})})),h=ee({},u,{left:"-100%",transform:"rotate(-129deg)",WebkitTransform:"rotate(-129deg)",animationName:le.RIGHT_SPIN,WebkitAnimationName:le.RIGHT_SPIN});return{rootStyle:a,layerStyles:s,layerAfterStyle:c,clipStyle:{display:"inline-block",boxSizing:"border-box",position:"relative",width:"50%",height:"100%",overflow:"hidden",borderColor:"inherit"},clip1AfterStyles:p,clip2AfterStyles:r.map((function(e){return ee({},h,{borderColor:"".concat(e," ").concat(e," transparent transparent")})}))}}(this.props),r=n.rootStyle,i=n.layerStyles,a=n.layerAfterStyle,s=n.clipStyle,l=n.clip1AfterStyles,c=n.clip2AfterStyles,u=[],d=0;d<4;d++)u.push(o.createElement("span",{key:d,style:i[d]},o.createElement("span",{style:s},o.createElement("span",{style:l[d]})),o.createElement("span",{style:s},o.createElement("span",{style:c[d]})),o.createElement("span",{style:a})));return o.createElement("span",J({},t,{style:ee({},r,null!=t.style?t.style:{})}),u)}}])&&Z(n.prototype,r),i&&Z(n,i),t}(o.PureComponent);K(ue,"defaultProps",{size:28,duration:1333,color1:"rgb(66, 165, 245)",color2:"rgb(239, 83, 80)",color3:"rgb(253, 216, 53)",color4:"rgb(76, 175, 80)"}),K(ue,"mountedInstanceCount",0);var de=ue,pe=n(8071);const he=a.default.div.withConfig({displayName:"Footer__ArticleButtonContainer",componentId:"sc-zqxmks-0"})(["display:flex;justify-content:space-between;margin-bottom:48px;@media (max-width:768px){margin-bottom:80px;padding:0 12.8px;flex-direction:column;& > div:first-child{margin-bottom:12.8px;}}"]),fe=a.default.div.withConfig({displayName:"Footer__ArrowFlexWrapper",componentId:"sc-zqxmks-1"})(["width:100%;display:flex;align-items:center;white-space:nowrap;"]),me=a.default.div.withConfig({displayName:"Footer__ArticleButtonTextWrapper",componentId:"sc-zqxmks-2"})(["display:flex;align-items:flex-end;flex-direction:column;overflow:hidden;"]),ge=a.default.div.withConfig({displayName:"Footer__Arrow",componentId:"sc-zqxmks-3"})(["position:relative;left:0;display:flex;align-items:center;font-size:24px;flex-basis:24px;transition:left 0.3s;"]),ve=a.default.div.withConfig({displayName:"Footer__ArticleButtonWrapper",componentId:"sc-zqxmks-4"})(["display:flex;flex-direction:column;align-items:",";padding:20.8px 16px;max-width:250px;flex-basis:250px;font-size:17.6px;border-radius:5px;background-color:",";color:",";cursor:pointer;transition:background-color 0.3s;&:hover{background-color:",";}& ","{flex-direction:",";}& ","{align-items:",";}& ","{",";}&:hover ","{left:","px;}@media (max-width:768px){max-width:inherit;flex-basis:inherit;}"],(e=>e.right?"flex-end":"flex-start"),(e=>e.theme.colors.nextPostButtonBackground),(e=>e.theme.colors.text),(e=>e.theme.colors.hoveredNextPostButtonBackground),fe,(e=>e.right?"row-reverse":"row"),me,(e=>e.right?"flex-end":"flex-start"),ge,(e=>e.right?"margin-left: 16px":"margin-right: 16px"),ge,(e=>e.right?2:-2)),be=a.default.div.withConfig({displayName:"Footer__ArticleButtonLabel",componentId:"sc-zqxmks-5"})(["margin-bottom:9.6px;font-size:12.8px;"]),ye=a.default.div.withConfig({displayName:"Footer__ArticleButtonTitle",componentId:"sc-zqxmks-6"})(["padding:2px 0;width:100%;text-overflow:ellipsis;overflow:hidden;"]),ke=a.default.div.withConfig({displayName:"Footer__CommentWrapper",componentId:"sc-zqxmks-7"})(["@media (max-width:768px){padding:0 15px;}"]),_e=a.default.div.withConfig({displayName:"Footer__SpinnerWrapper",componentId:"sc-zqxmks-8"})(["height:200px;display:flex;justify-content:center;align-items:center;"]),we=a.default.div.withConfig({displayName:"Footer__HiddenWrapper",componentId:"sc-zqxmks-9"})(["height:",";overflow:",";"],(e=>e.isHidden?"0px":"auto"),(e=>e.isHidden?"hidden":"auto")),Ee=e=>{let{right:t,children:n,onClick:r}=e;return o.createElement(ve,{right:t,onClick:r},o.createElement(fe,null,o.createElement(ge,null,t?o.createElement(Q.OEZ,null):o.createElement(Q.u_m,null)),o.createElement(me,null,o.createElement(be,null,t?o.createElement(o.Fragment,null,"Next Post"):o.createElement(o.Fragment,null,"Previous Post")),o.createElement(ye,null,n))))},xe=()=>{const e=(0,a.useTheme)();return o.createElement(_e,null,o.createElement(de,{singleColor:e.colors.spinner}))},Se=e=>{let{title:t}=e;const{theme:n}=(0,U.useSelector)((e=>e.theme)),{0:r,1:i}=(0,o.useState)(!0);return(0,o.useEffect)((()=>{setTimeout((()=>{i(!1)}),1500)}),[]),o.createElement(o.Fragment,null,r&&o.createElement(xe,null),o.createElement(we,{isHidden:r},o.createElement(we,{isHidden:"light"===n},o.createElement(pe,{id:"comments",repo:"theminjunchoi/theminjunchoi.github.io",repoId:"R_kgDOLCr2fA",category:"General",categoryId:"DIC_kwDOLCr2fM4CcTeP",mapping:"title",term:t,reactionsEnabled:"1",emitMetadata:"0",lang:"ko",theme:"dark"})),o.createElement(we,{isHidden:"dark"===n},o.createElement(pe,{id:"comments",repo:"theminjunchoi/theminjunchoi.github.io",repoId:"R_kgDOLCr2fA",category:"General",categoryId:"DIC_kwDOLCr2fM4CcTeP",mapping:"title",term:t,reactionsEnabled:"1",emitMetadata:"0",lang:"ko",theme:"light"}))))};var Ce=e=>{var t,n;let{previous:r,next:i,title:a}=e;return o.createElement(o.Fragment,null,o.createElement(he,null,r?o.createElement(Ee,{onClick:()=>{var e;return(0,_.navigate)(null==r||null===(e=r.fields)||void 0===e?void 0:e.slug)}},null==r||null===(t=r.frontmatter)||void 0===t?void 0:t.title):o.createElement("div",null),i&&o.createElement(Ee,{right:!0,onClick:()=>{var e;return(0,_.navigate)(null==i||null===(e=i.fields)||void 0===e?void 0:e.slug)}},null==i||null===(n=i.frontmatter)||void 0===n?void 0:n.title)),o.createElement(ke,null,o.createElement(l.Z,{mt:"32px"}),o.createElement(Se,{title:a})))};const Ae=a.default.article.withConfig({displayName:"Article",componentId:"sc-1tzp0ke-0"})([""]);Ae.Header=g,Ae.Series=$,Ae.Body=V,Ae.Footer=Ce;var $e=Ae;var Oe=e=>{let{data:t}=e;const n=t.markdownRemark,{previous:a,next:l,seriesList:c}=t,{title:u,date:d,updated:p,tags:h,series:f}=n.frontmatter,{excerpt:m}=n,{readingTime:g,slug:v}=n.fields;let b=[];return null!==f&&(b=c.edges.map((e=>e.node.id===n.id?{...e.node,currentPost:!0}:{...e.node,currentPost:!1}))),o.createElement(i.Z,null,o.createElement(r.Z,{title:u,description:m,url:""+s.siteUrl+v}),o.createElement($e,null,o.createElement($e.Header,{title:u,date:d,updated:p,tags:h,minToRead:Math.round(g.minutes)}),b.length>0&&o.createElement($e.Series,{header:f,series:b}),o.createElement($e.Body,{html:n.html}),o.createElement($e.Footer,{previous:a,next:l,title:u})))}},3096:function(e,t,n){var o="Expected a function",r=NaN,i="[object Symbol]",a=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt,d="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p="object"==typeof self&&self&&self.Object===Object&&self,h=d||p||Function("return this")(),f=Object.prototype.toString,m=Math.max,g=Math.min,v=function(){return h.Date.now()};function b(e,t,n){var r,i,a,s,l,c,u=0,d=!1,p=!1,h=!0;if("function"!=typeof e)throw new TypeError(o);function f(t){var n=r,o=i;return r=i=void 0,u=t,s=e.apply(o,n)}function b(e){var n=e-c;return void 0===c||n>=t||n<0||p&&e-u>=a}function _(){var e=v();if(b(e))return w(e);l=setTimeout(_,function(e){var n=t-(e-c);return p?g(n,a-(e-u)):n}(e))}function w(e){return l=void 0,h&&r?f(e):(r=i=void 0,s)}function E(){var e=v(),n=b(e);if(r=arguments,i=this,c=e,n){if(void 0===l)return function(e){return u=e,l=setTimeout(_,t),d?f(e):s}(c);if(p)return l=setTimeout(_,t),f(c)}return void 0===l&&(l=setTimeout(_,t)),s}return t=k(t)||0,y(n)&&(d=!!n.leading,a=(p="maxWait"in n)?m(k(n.maxWait)||0,t):a,h="trailing"in n?!!n.trailing:h),E.cancel=function(){void 0!==l&&clearTimeout(l),u=0,r=c=i=l=void 0},E.flush=function(){return void 0===l?s:w(v())},E}function y(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function k(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&f.call(e)==i}(e))return r;if(y(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=y(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(a,"");var n=l.test(e);return n||c.test(e)?u(e.slice(2),n?2:8):s.test(e)?r:+e}e.exports=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new TypeError(o);return y(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),b(e,t,{leading:r,maxWait:t,trailing:i})}},2705:function(e,t,n){var o=n(5639).Symbol;e.exports=o},1848:function(e){e.exports=function(e,t,n,o){for(var r=e.length,i=n+(o?1:-1);o?i--:++i=Math.floor(a)&&d=Math.floor(s),m=n.getActiveLink();return f?(r===m&&n.setActiveLink(void 0),e.props.hashSpy&&p.getHash()===r&&p.changeHash(),e.props.spy&&e.state.active&&(e.setState({active:!1}),e.props.onSetInactive&&e.props.onSetInactive()),c.updateStates()):h&&m!==r?(n.setActiveLink(r),e.props.hashSpy&&p.changeHash(r),e.props.spy&&(e.setState({active:!0}),e.props.onSetActive&&e.props.onSetActive(r)),c.updateStates()):void 0}}};return d.propTypes=h,d.defaultProps={offset:0},d},Element:function(e){console.warn("Helpers.Element is deprecated since v1.7.0");var t=function(t){function n(e){i(this,n);var t=a(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,e));return t.childBindings={domNode:null},t}return s(n,t),r(n,[{key:"componentDidMount",value:function(){if("undefined"==typeof window)return!1;this.registerElems(this.props.name)}},{key:"componentDidUpdate",value:function(e){this.props.name!==e.name&&this.registerElems(this.props.name)}},{key:"componentWillUnmount",value:function(){if("undefined"==typeof window)return!1;u.unregister(this.props.name)}},{key:"registerElems",value:function(e){u.register(e,this.childBindings.domNode)}},{key:"render",value:function(){return l.createElement(e,o({},this.props,{parentBindings:this.childBindings}))}}]),n}(l.Component);return t.propTypes={name:d.string,id:d.string},t}};e.exports=f},3200:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=r.duration?1:t(r.progress/r.duration),r.currentPosition=r.startPosition+Math.ceil(r.delta*r.percent),r.containerElement&&r.containerElement!==document&&r.containerElement!==document.body?n.horizontal?r.containerElement.scrollLeft=r.currentPosition:r.containerElement.scrollTop=r.currentPosition:n.horizontal?window.scrollTo(r.currentPosition,0):window.scrollTo(0,r.currentPosition),r.percent<1){var i=e.bind(null,t,n);c.call(window,i)}else a.default.registered.end&&a.default.registered.end(r.to,r.target,r.currentPosition);else a.default.registered.end&&a.default.registered.end(r.to,r.target,r.currentPositionY)},h=function(e){e.data.containerElement=e?e.containerId?document.getElementById(e.containerId):e.container&&e.container.nodeType?e.container:document:null},f=function(e,t,n,o){if(t.data=t.data||{currentPosition:0,startPosition:0,targetPosition:0,progress:0,duration:0,cancel:!1,target:null,containerElement:null,to:null,start:null,delta:null,percent:null,delayTimeout:null},window.clearTimeout(t.data.delayTimeout),i.default.subscribe((function(){t.data.cancel=!0})),h(t),t.data.start=null,t.data.cancel=!1,t.data.startPosition=t.horizontal?u(t):d(t),t.data.targetPosition=t.absolute?e:e+t.data.startPosition,t.data.startPosition!==t.data.targetPosition){var r;t.data.delta=Math.round(t.data.targetPosition-t.data.startPosition),t.data.duration=("function"==typeof(r=t.duration)?r:function(){return r})(t.data.delta),t.data.duration=isNaN(parseFloat(t.data.duration))?1e3:parseFloat(t.data.duration),t.data.to=n,t.data.target=o;var s=l(t),f=p.bind(null,s,t);t&&t.delay>0?t.data.delayTimeout=window.setTimeout((function(){a.default.registered.begin&&a.default.registered.begin(t.data.to,t.data.target),c.call(window,f)}),t.delay):(a.default.registered.begin&&a.default.registered.begin(t.data.to,t.data.target),c.call(window,f))}else a.default.registered.end&&a.default.registered.end(t.data.to,t.data.target,t.data.currentPosition)},m=function(e){return(e=o({},e)).data=e.data||{currentPosition:0,startPosition:0,targetPosition:0,progress:0,duration:0,cancel:!1,target:null,containerElement:null,to:null,start:null,delta:null,percent:null,delayTimeout:null},e.absolute=!0,e};t.default={animateTopScroll:f,getAnimationType:l,scrollToTop:function(e){f(0,m(e))},scrollToBottom:function(e){e=m(e),h(e),f(e.horizontal?function(e){var t=e.data.containerElement;if(t&&t!==document&&t!==document.body)return t.scrollWidth-t.offsetWidth;var n=document.body,o=document.documentElement;return Math.max(n.scrollWidth,n.offsetWidth,o.clientWidth,o.scrollWidth,o.offsetWidth)}(e):function(e){var t=e.data.containerElement;if(t&&t!==document&&t!==document.body)return t.scrollHeight-t.offsetHeight;var n=document.body,o=document.documentElement;return Math.max(n.scrollHeight,n.offsetHeight,o.clientHeight,o.scrollHeight,o.offsetHeight)}(e),e)},scrollTo:function(e,t){f(e,m(t))},scrollMore:function(e,t){t=m(t),h(t);var n=t.horizontal?u(t):d(t);f(e+n,t)}}},140:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(5236),r=["mousedown","mousewheel","touchmove","keydown"];t.default={subscribe:function(e){return"undefined"!=typeof document&&r.forEach((function(t){return(0,o.addPassiveEventListener)(document,t,e)}))}}},5236:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.addPassiveEventListener=function(e,t,n){var o=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t)}catch(n){}return e}();e.addEventListener(t,n,!!o&&{passive:!0})},t.removePassiveEventListener=function(e,t,n){e.removeEventListener(t,n)}},8e3:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t=Math.floor(d)&&m=Math.floor(p)}else{var g=0,v=0,b=0;if(r.getBoundingClientRect)b=r.getBoundingClientRect().top;if(!s||e.props.isDynamic){if(!(s=n.get(a)))return;var y=s.getBoundingClientRect();v=(g=y.top-b+o)+y.height}var k=o-e.props.offset;l=k>=Math.floor(g)&&k=Math.floor(v)}var _=n.getActiveLink();if(u){if(a===_&&n.setActiveLink(void 0),e.props.hashSpy&&c.default.getHash()===a){var w=e.props.saveHashHistory,E=void 0!==w&&w;c.default.changeHash("",E)}e.props.spy&&e.state.active&&(e.setState({active:!1}),e.props.onSetInactive&&e.props.onSetInactive(a,s))}if(l&&(_!==a||!1===e.state.active)){n.setActiveLink(a);var x=e.props.saveHashHistory,S=void 0!==x&&x;e.props.hashSpy&&c.default.changeHash(a,S),e.props.spy&&(e.setState({active:!0}),e.props.onSetActive&&e.props.onSetActive(a,s))}}}};return l.propTypes=d,l.defaultProps={offset:0},l}},7606:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=n(3096),i=(o=r)&&o.__esModule?o:{default:o},a=n(5236);var s={spyCallbacks:[],spySetState:[],scrollSpyContainers:[],mount:function(e,t){if(e){var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:66;return(0,i.default)(e,t)}((function(t){s.scrollHandler(e)}),t);s.scrollSpyContainers.push(e),(0,a.addPassiveEventListener)(e,"scroll",n)}},isMounted:function(e){return-1!==s.scrollSpyContainers.indexOf(e)},currentPositionX:function(e){if(e===document){var t=void 0!==window.pageYOffset,n="CSS1Compat"===(document.compatMode||"");return t?window.pageXOffset:n?document.documentElement.scrollLeft:document.body.scrollLeft}return e.scrollLeft},currentPositionY:function(e){if(e===document){var t=void 0!==window.pageXOffset,n="CSS1Compat"===(document.compatMode||"");return t?window.pageYOffset:n?document.documentElement.scrollTop:document.body.scrollTop}return e.scrollTop},scrollHandler:function(e){(s.scrollSpyContainers[s.scrollSpyContainers.indexOf(e)].spyCallbacks||[]).forEach((function(t){return t(s.currentPositionX(e),s.currentPositionY(e))}))},addStateHandler:function(e){s.spySetState.push(e)},addSpyHandler:function(e,t){var n=s.scrollSpyContainers[s.scrollSpyContainers.indexOf(t)];n.spyCallbacks||(n.spyCallbacks=[]),n.spyCallbacks.push(e),e(s.currentPositionX(t),s.currentPositionY(t))},updateStates:function(){s.spySetState.forEach((function(e){return e()}))},unmount:function(e,t){s.scrollSpyContainers.forEach((function(e){return e.spyCallbacks&&e.spyCallbacks.length&&e.spyCallbacks.indexOf(t)>-1&&e.spyCallbacks.splice(e.spyCallbacks.indexOf(t),1)})),s.spySetState&&s.spySetState.length&&s.spySetState.indexOf(e)>-1&&s.spySetState.splice(s.spySetState.indexOf(e),1),document.removeEventListener("scroll",s.scrollHandler)},update:function(){return s.scrollSpyContainers.forEach((function(e){return s.scrollHandler(e)}))}};t.default=s},2628:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t])/g,b=/([[}=:>])\s+/g,y=/(\{[^{]+?);(?=\})/g,k=/\s{2,}/g,_=/([^\(])(:+) */g,w=/[svh]\w+-[tblr]{2}/,E=/\(\s*(.*)\s*\)/g,x=/([\s\S]*?);/g,S=/-self|flex-/g,C=/[^]*?(:[rp][el]a[\w-]+)[^]*/,A=/stretch|:\s*\w+\-(?:conte|avail)/,$=/([^-])(image-set\()/,O="-webkit-",T="-moz-",P="-ms-",I=59,N=125,j=123,M=40,H=41,z=91,L=93,R=10,U=13,B=9,W=64,D=32,F=38,G=45,q=95,Y=42,V=44,Q=58,X=39,Z=34,K=47,J=62,ee=43,te=126,ne=0,oe=12,re=11,ie=107,ae=109,se=115,le=112,ce=111,ue=105,de=99,pe=100,he=112,fe=1,me=1,ge=0,ve=1,be=1,ye=1,ke=0,_e=0,we=0,Ee=[],xe=[],Se=0,Ce=null,Ae=-2,$e=-1,Oe=0,Te=1,Pe=2,Ie=3,Ne=0,je=1,Me="",He="",ze="";function Le(e,t,r,i,a){for(var s,l,c=0,u=0,d=0,p=0,h=0,v=0,b=0,y=0,k=0,_=0,w=0,x=0,S=0,C=0,A=0,$=0,q=0,ye=0,ke=0,xe=r.length,Ce=xe-1,Ae="",$e="",Ue="",Fe="",Ve="",Qe="";A0&&($e=$e.replace(o,"")),$e.trim().length>0)){switch(b){case D:case B:case I:case U:case R:break;default:$e+=r.charAt(A)}b=I}if(1===q)switch(b){case j:case N:case I:case Z:case X:case M:case H:case V:q=0;case B:case U:case R:case D:break;default:for(q=0,ke=A,h=b,A--,b=I;ke0&&(++A,b=h);case j:ke=xe}}switch(b){case j:for(h=($e=$e.trim()).charCodeAt(0),w=1,ke=++A;A0&&($e=$e.replace(o,"")),v=$e.charCodeAt(1)){case pe:case ae:case se:case G:s=t;break;default:s=Ee}if(ke=(Ue=Le(t,s,Ue,v,a+1)).length,we>0&&0===ke&&(ke=$e.length),Se>0&&(s=Re(Ee,$e,ye),l=qe(Ie,Ue,s,t,me,fe,ke,v,a,i),$e=s.join(""),void 0!==l&&0===(ke=(Ue=l.trim()).length)&&(v=0,Ue="")),ke>0)switch(v){case se:$e=$e.replace(E,De);case pe:case ae:case G:Ue=$e+"{"+Ue+"}";break;case ie:Ue=($e=$e.replace(f,"$1 $2"+(je>0?Me:"")))+"{"+Ue+"}",Ue=1===be||2===be&&We("@"+Ue,3)?"@"+O+Ue+"@"+Ue:"@"+Ue;break;default:Ue=$e+Ue,i===he&&(Fe+=Ue,Ue="")}else Ue=""}else Ue=Le(t,Re(t,$e,ye),Ue,i,a+1);Ve+=Ue,x=0,q=0,C=0,$=0,ye=0,S=0,$e="",Ue="",b=r.charCodeAt(++A);break;case N:case I:if((ke=($e=($>0?$e.replace(o,""):$e).trim()).length)>1)switch(0===C&&((h=$e.charCodeAt(0))===G||h>96&&h<123)&&(ke=($e=$e.replace(" ",":")).length),Se>0&&void 0!==(l=qe(Te,$e,t,e,me,fe,Fe.length,i,a,i))&&0===(ke=($e=l.trim()).length)&&($e="\0\0"),h=$e.charCodeAt(0),v=$e.charCodeAt(1),h){case ne:break;case W:if(v===ue||v===de){Qe+=$e+r.charAt(A);break}default:if($e.charCodeAt(ke-1)===Q)break;Fe+=Be($e,h,v,$e.charCodeAt(2))}x=0,q=0,C=0,$=0,ye=0,$e="",b=r.charCodeAt(++A)}}switch(b){case U:case R:if(u+p+d+c+_e===0)switch(_){case H:case X:case Z:case W:case te:case J:case Y:case ee:case K:case G:case Q:case V:case I:case j:case N:break;default:C>0&&(q=1)}u===K?u=0:ve+x===0&&i!==ie&&$e.length>0&&($=1,$e+="\0"),Se*Ne>0&&qe(Oe,$e,t,e,me,fe,Fe.length,i,a,i),fe=1,me++;break;case I:case N:if(u+p+d+c===0){fe++;break}default:switch(fe++,Ae=r.charAt(A),b){case B:case D:if(p+c+u===0)switch(y){case V:case Q:case B:case D:Ae="";break;default:b!==D&&(Ae=" ")}break;case ne:Ae="\\0";break;case oe:Ae="\\f";break;case re:Ae="\\v";break;case F:p+u+c===0&&ve>0&&(ye=1,$=1,Ae="\f"+Ae);break;case 108:if(p+u+c+ge===0&&C>0)switch(A-C){case 2:y===le&&r.charCodeAt(A-3)===Q&&(ge=y);case 8:k===ce&&(ge=k)}break;case Q:p+u+c===0&&(C=A);break;case V:u+d+p+c===0&&($=1,Ae+="\r");break;case Z:case X:0===u&&(p=p===b?0:0===p?b:p);break;case z:p+u+d===0&&c++;break;case L:p+u+d===0&&c--;break;case H:p+u+c===0&&d--;break;case M:p+u+c===0&&(0===x&&(2*y+3*k==533||(w=0,x=1)),d++);break;case W:u+d+p+c+C+S===0&&(S=1);break;case Y:case K:if(p+c+d>0)break;switch(u){case 0:switch(2*b+3*r.charCodeAt(A+1)){case 235:u=K;break;case 220:ke=A,u=Y}break;case Y:b===K&&y===Y&&ke+2!==A&&(33===r.charCodeAt(ke+2)&&(Fe+=r.substring(ke,A+1)),Ae="",u=0)}}if(0===u){if(ve+p+c+S===0&&i!==ie&&b!==I)switch(b){case V:case te:case J:case ee:case H:case M:if(0===x){switch(y){case B:case D:case R:case U:Ae+="\0";break;default:Ae="\0"+Ae+(b===V?"":"\0")}$=1}else switch(b){case M:C+7===A&&108===y&&(C=0),x=++w;break;case H:0==(x=--w)&&($=1,Ae+="\0")}break;case B:case D:switch(y){case ne:case j:case N:case I:case V:case oe:case B:case D:case R:case U:break;default:0===x&&($=1,Ae+="\0")}}$e+=Ae,b!==D&&b!==B&&(_=b)}}k=y,y=b,A++}if(ke=Fe.length,we>0&&0===ke&&0===Ve.length&&0===t[0].length==0&&(i!==ae||1===t.length&&(ve>0?He:ze)===t[0])&&(ke=t.join(",").length+2),ke>0){if(s=0===ve&&i!==ie?Ge(t):t,Se>0&&void 0!==(l=qe(Pe,Fe,s,e,me,fe,ke,i,a,i))&&0===(Fe=l).length)return Qe+Fe+Ve;if(Fe=s.join(",")+"{"+Fe+"}",be*ge!=0){switch(2!==be||We(Fe,2)||(ge=0),ge){case ce:Fe=Fe.replace(g,":"+T+"$1")+Fe;break;case le:Fe=Fe.replace(m,"::"+O+"input-$1")+Fe.replace(m,"::"+T+"$1")+Fe.replace(m,":"+P+"input-$1")+Fe}ge=0}}return Qe+Fe+Ve}function Re(e,t,n){var o=t.trim().split(u),r=o,i=o.length,a=e.length;switch(a){case 0:case 1:for(var s=0,l=0===a?"":e[0]+" ";s0&&ve>0)return r.replace(p,"$1").replace(d,"$1"+ze);default:if(n*ve>0&&r.indexOf("\f")>0)return r.replace(d,(e.charCodeAt(0)===Q?"":"$1")+e.trim())}return e+r}function Be(e,t,n,o){var s,l=0,c=e+";",u=2*t+3*n+4*o;if(944===u)return Fe(c);if(0===be||2===be&&!We(c,1))return c;switch(u){case 1015:return 97===c.charCodeAt(10)?O+c+c:c;case 951:return 116===c.charCodeAt(3)?O+c+c:c;case 963:return 110===c.charCodeAt(5)?O+c+c:c;case 1009:if(100!==c.charCodeAt(4))break;case 969:case 942:return O+c+c;case 978:return O+c+T+c+c;case 1019:case 983:return O+c+T+c+P+c+c;case 883:return c.charCodeAt(8)===G?O+c+c:c.indexOf("image-set(",11)>0?c.replace($,"$1"+O+"$2")+c:c;case 932:if(c.charCodeAt(4)===G)switch(c.charCodeAt(5)){case 103:return O+"box-"+c.replace("-grow","")+O+c+P+c.replace("grow","positive")+c;case 115:return O+c+P+c.replace("shrink","negative")+c;case 98:return O+c+P+c.replace("basis","preferred-size")+c}return O+c+P+c+c;case 964:return O+c+P+"flex-"+c+c;case 1023:if(99!==c.charCodeAt(8))break;return s=c.substring(c.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),O+"box-pack"+s+O+c+P+"flex-pack"+s+c;case 1005:return i.test(c)?c.replace(r,":"+O)+c.replace(r,":"+T)+c:c;case 1e3:switch(l=(s=c.substring(13).trim()).indexOf("-")+1,s.charCodeAt(0)+s.charCodeAt(l)){case 226:s=c.replace(w,"tb");break;case 232:s=c.replace(w,"tb-rl");break;case 220:s=c.replace(w,"lr");break;default:return c}return O+c+P+s+c;case 1017:if(-1===c.indexOf("sticky",9))return c;case 975:switch(l=(c=e).length-10,u=(s=(33===c.charCodeAt(l)?c.substring(0,l):c).substring(e.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|s.charCodeAt(7))){case 203:if(s.charCodeAt(8)<111)break;case 115:c=c.replace(s,O+s)+";"+c;break;case 207:case 102:c=c.replace(s,O+(u>102?"inline-":"")+"box")+";"+c.replace(s,O+s)+";"+c.replace(s,P+s+"box")+";"+c}return c+";";case 938:if(c.charCodeAt(5)===G)switch(c.charCodeAt(6)){case 105:return s=c.replace("-items",""),O+c+O+"box-"+s+P+"flex-"+s+c;case 115:return O+c+P+"flex-item-"+c.replace(S,"")+c;default:return O+c+P+"flex-line-pack"+c.replace("align-content","").replace(S,"")+c}break;case 973:case 989:if(c.charCodeAt(3)!==G||122===c.charCodeAt(4))break;case 931:case 953:if(!0===A.test(e))return 115===(s=e.substring(e.indexOf(":")+1)).charCodeAt(0)?Be(e.replace("stretch","fill-available"),t,n,o).replace(":fill-available",":stretch"):c.replace(s,O+s)+c.replace(s,T+s.replace("fill-",""))+c;break;case 962:if(c=O+c+(102===c.charCodeAt(5)?P+c:"")+c,n+o===211&&105===c.charCodeAt(13)&&c.indexOf("transform",10)>0)return c.substring(0,c.indexOf(";",27)+1).replace(a,"$1"+O+"$2")+c}return c}function We(e,t){var n=e.indexOf(1===t?":":"{"),o=e.substring(0,3!==t?n:10),r=e.substring(n+1,e.length-1);return Ce(2!==t?o:o.replace(C,"$1"),r,t)}function De(e,t){var n=Be(t,t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2));return n!==t+";"?n.replace(x," or ($1)").substring(4):"("+t+")"}function Fe(e){var t=e.length,n=e.indexOf(":",9)+1,o=e.substring(0,n).trim(),r=e.substring(n,t-1).trim();switch(e.charCodeAt(9)*je){case 0:break;case G:if(110!==e.charCodeAt(10))break;default:var i=r.split((r="",s)),a=0;for(n=0,t=i.length;aW&&d<90||d>96&&d<123||d===q||d===G&&c.charCodeAt(1)!==G)&&isNaN(parseFloat(c))+(-1!==c.indexOf("("))===1)switch(c){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:c+=Me}u[n++]=c}r+=(0===a?"":",")+u.join(" ")}}return r=o+r+";",1===be||2===be&&We(r,1)?O+r+r:r}function Ge(e){for(var t,n,r=0,i=e.length,a=Array(i);r1)){if(p=l.charCodeAt(l.length-1),h=n.charCodeAt(0),t="",0!==u)switch(p){case Y:case te:case J:case ee:case D:case M:break;default:t=" "}switch(h){case F:n=t+He;case te:case J:case ee:case D:case H:case M:break;case z:n=t+n+He;break;case Q:switch(2*n.charCodeAt(1)+3*n.charCodeAt(2)){case 530:if(ye>0){n=t+n.substring(8,d-1);break}default:(u<1||s[u-1].length<1)&&(n=t+He+n)}break;case V:t="";default:n=d>1&&n.indexOf(":")>0?t+n.replace(_,"$1"+He+"$2"):t+n+He}l+=n}a[r]=l.replace(o,"").trim()}return a}function qe(e,t,n,o,r,i,a,s,l,c){for(var u,d=0,p=t;d0&&(Me=o.replace(h,r===z?"":"-")),r=1,1===ve?ze=o:He=o;var i,a=[ze];Se>0&&void 0!==(i=qe($e,n,a,a,me,fe,0,0,0,0))&&"string"==typeof i&&(n=i);var s=Le(Ee,a,n,0,0);return Se>0&&void 0!==(i=qe(Ae,s,a,a,me,fe,s.length,0,0,0))&&"string"!=typeof(s=i)&&(r=0),Me="",ze="",He="",ge=0,me=1,fe=1,ke*r==0?s:Ve(s)}return Ze.use=Qe,Ze.set=Xe,void 0!==t&&Xe(t),Ze}(null)}}]); +//# sourceMappingURL=component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.map \ No newline at end of file diff --git a/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.LICENSE.txt b/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.LICENSE.txt new file mode 100644 index 0000000..46689c4 --- /dev/null +++ b/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.LICENSE.txt @@ -0,0 +1,36 @@ +/* + * __ ___ + * _____/ /___ __/ (_)____ + * / ___/ __/ / / / / / ___/ + * (__ ) /_/ /_/ / / (__ ) + * /____/\__/\__, /_/_/____/ + * /____/ + * + * light - weight css preprocessor @licence MIT + */ + +/*! @preserve react-md-spinner v1.0.0 - tsuyoshiwada | MIT license. */ + +/** + * @license + * Copyright 2017 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ diff --git a/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.map b/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.map new file mode 100644 index 0000000..e8b1a76 --- /dev/null +++ b/component---src-templates-post-jsx-bf38cba3ec3071b7f885.js.map @@ -0,0 +1 @@ +{"version":3,"file":"component---src-templates-post-jsx-bf38cba3ec3071b7f885.js","mappings":"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","sources":["webpack://gatsby-starter-hoodie/./node_modules/@giscus/react/dist/giscus-1126a0a1.js","webpack://gatsby-starter-hoodie/./node_modules/@giscus/react/dist/index.js","webpack://gatsby-starter-hoodie/./src/components/Bio/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Divider/index.jsx","webpack://gatsby-starter-hoodie/./src/components/TagList/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Header/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Series/index.jsx","webpack://gatsby-starter-hoodie/./src/hooks/useOffsetTop.jsx","webpack://gatsby-starter-hoodie/./src/hooks/useScroll.jsx","webpack://gatsby-starter-hoodie/./src/utils/getElmentOffset.js","webpack://gatsby-starter-hoodie/./src/components/RevealOnScroll/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Body/Toc/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Body/StyledMarkdown/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Body/PrismTheme/CommonStyle.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Body/PrismTheme/DarkMode.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Body/PrismTheme/LightMode.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Body/PrismTheme/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/Body/index.jsx","webpack://gatsby-starter-hoodie/./node_modules/react-md-spinner/dist/react-md-spinner.esm.js","webpack://gatsby-starter-hoodie/./node_modules/@giscus/react/dist/wrapper.mjs","webpack://gatsby-starter-hoodie/./src/components/Article/Footer/index.jsx","webpack://gatsby-starter-hoodie/./src/components/Article/index.jsx","webpack://gatsby-starter-hoodie/./src/templates/Post.jsx","webpack://gatsby-starter-hoodie/./node_modules/lodash.throttle/index.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_Symbol.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_baseFindIndex.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_baseGetTag.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_baseTrim.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_freeGlobal.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_getRawTag.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_objectToString.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_root.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/_trimmedEndIndex.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/findIndex.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/isObject.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/isObjectLike.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/isSymbol.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/replace.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/toFinite.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/toInteger.js","webpack://gatsby-starter-hoodie/./node_modules/lodash/toNumber.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/components/Button.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/components/Element.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/components/Link.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/index.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/Helpers.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/animate-scroll.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/cancel-events.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/passive-event-listeners.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/scroll-element.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/scroll-events.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/scroll-hash.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/scroll-link.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/scroll-spy.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/scroller.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/smooth.js","webpack://gatsby-starter-hoodie/./node_modules/react-scroll/modules/mixins/utils.js","webpack://gatsby-starter-hoodie/./node_modules/stylis/stylis.js"],"sourcesContent":["\"use strict\";Object.defineProperty(exports,Symbol.toStringTag,{value:\"Module\"});/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const M=window,F=M.ShadowRoot&&(M.ShadyCSS===void 0||M.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,Q=Symbol(),Z=new WeakMap;let ct=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==Q)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const e=this.t;if(F&&t===void 0){const s=e!==void 0&&e.length===1;s&&(t=Z.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),s&&Z.set(e,t))}return t}toString(){return this.cssText}};const _t=i=>new ct(typeof i==\"string\"?i:i+\"\",void 0,Q),vt=(i,...t)=>{const e=i.length===1?i[0]:t.reduce((s,n,r)=>s+(o=>{if(o._$cssResult$===!0)return o.cssText;if(typeof o==\"number\")return o;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+o+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(n)+i[r+1],i[0]);return new ct(e,i,Q)},ft=(i,t)=>{F?i.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet):t.forEach(e=>{const s=document.createElement(\"style\"),n=M.litNonce;n!==void 0&&s.setAttribute(\"nonce\",n),s.textContent=e.cssText,i.appendChild(s)})},X=F?i=>i:i=>i instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return _t(e)})(i):i;/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var L;const H=window,tt=H.trustedTypes,mt=tt?tt.emptyScript:\"\",et=H.reactiveElementPolyfillSupport,Y={toAttribute(i,t){switch(t){case Boolean:i=i?mt:null;break;case Object:case Array:i=i==null?i:JSON.stringify(i)}return i},fromAttribute(i,t){let e=i;switch(t){case Boolean:e=i!==null;break;case Number:e=i===null?null:Number(i);break;case Object:case Array:try{e=JSON.parse(i)}catch{e=null}}return e}},dt=(i,t)=>t!==i&&(t==t||i==i),W={attribute:!0,type:String,converter:Y,reflect:!1,hasChanged:dt},q=\"finalized\";let y=class extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this.u()}static addInitializer(t){var e;this.finalize(),((e=this.h)!==null&&e!==void 0?e:this.h=[]).push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach((e,s)=>{const n=this._$Ep(s,e);n!==void 0&&(this._$Ev.set(n,s),t.push(n))}),t}static createProperty(t,e=W){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const s=typeof t==\"symbol\"?Symbol():\"__\"+t,n=this.getPropertyDescriptor(t,s,e);n!==void 0&&Object.defineProperty(this.prototype,t,n)}}static getPropertyDescriptor(t,e,s){return{get(){return this[e]},set(n){const r=this[t];this[e]=n,this.requestUpdate(t,r,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||W}static finalize(){if(this.hasOwnProperty(q))return!1;this[q]=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),t.h!==void 0&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty(\"properties\")){const e=this.properties,s=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const n of s)this.createProperty(n,e[n])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const s=new Set(t.flat(1/0).reverse());for(const n of s)e.unshift(X(n))}else t!==void 0&&e.push(X(t));return e}static _$Ep(t,e){const s=e.attribute;return s===!1?void 0:typeof s==\"string\"?s:typeof t==\"string\"?t.toLowerCase():void 0}u(){var t;this._$E_=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$Eg(),this.requestUpdate(),(t=this.constructor.h)===null||t===void 0||t.forEach(e=>e(this))}addController(t){var e,s;((e=this._$ES)!==null&&e!==void 0?e:this._$ES=[]).push(t),this.renderRoot!==void 0&&this.isConnected&&((s=t.hostConnected)===null||s===void 0||s.call(t))}removeController(t){var e;(e=this._$ES)===null||e===void 0||e.splice(this._$ES.indexOf(t)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach((t,e)=>{this.hasOwnProperty(e)&&(this._$Ei.set(e,this[e]),delete this[e])})}createRenderRoot(){var t;const e=(t=this.shadowRoot)!==null&&t!==void 0?t:this.attachShadow(this.constructor.shadowRootOptions);return ft(e,this.constructor.elementStyles),e}connectedCallback(){var t;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(t=this._$ES)===null||t===void 0||t.forEach(e=>{var s;return(s=e.hostConnected)===null||s===void 0?void 0:s.call(e)})}enableUpdating(t){}disconnectedCallback(){var t;(t=this._$ES)===null||t===void 0||t.forEach(e=>{var s;return(s=e.hostDisconnected)===null||s===void 0?void 0:s.call(e)})}attributeChangedCallback(t,e,s){this._$AK(t,s)}_$EO(t,e,s=W){var n;const r=this.constructor._$Ep(t,s);if(r!==void 0&&s.reflect===!0){const o=(((n=s.converter)===null||n===void 0?void 0:n.toAttribute)!==void 0?s.converter:Y).toAttribute(e,s.type);this._$El=t,o==null?this.removeAttribute(r):this.setAttribute(r,o),this._$El=null}}_$AK(t,e){var s;const n=this.constructor,r=n._$Ev.get(t);if(r!==void 0&&this._$El!==r){const o=n.getPropertyOptions(r),c=typeof o.converter==\"function\"?{fromAttribute:o.converter}:((s=o.converter)===null||s===void 0?void 0:s.fromAttribute)!==void 0?o.converter:Y;this._$El=r,this[r]=c.fromAttribute(e,o.type),this._$El=null}}requestUpdate(t,e,s){let n=!0;t!==void 0&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||dt)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),s.reflect===!0&&this._$El!==t&&(this._$EC===void 0&&(this._$EC=new Map),this._$EC.set(t,s))):n=!1),!this.isUpdatePending&&n&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}const t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach((n,r)=>this[r]=n),this._$Ei=void 0);let e=!1;const s=this._$AL;try{e=this.shouldUpdate(s),e?(this.willUpdate(s),(t=this._$ES)===null||t===void 0||t.forEach(n=>{var r;return(r=n.hostUpdate)===null||r===void 0?void 0:r.call(n)}),this.update(s)):this._$Ek()}catch(n){throw e=!1,this._$Ek(),n}e&&this._$AE(s)}willUpdate(t){}_$AE(t){var e;(e=this._$ES)===null||e===void 0||e.forEach(s=>{var n;return(n=s.hostUpdated)===null||n===void 0?void 0:n.call(s)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return!0}update(t){this._$EC!==void 0&&(this._$EC.forEach((e,s)=>this._$EO(s,this[s],e)),this._$EC=void 0),this._$Ek()}updated(t){}firstUpdated(t){}};y[q]=!0,y.elementProperties=new Map,y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},et==null||et({ReactiveElement:y}),((L=H.reactiveElementVersions)!==null&&L!==void 0?L:H.reactiveElementVersions=[]).push(\"1.6.2\");/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var D;const x=window,S=x.trustedTypes,st=S?S.createPolicy(\"lit-html\",{createHTML:i=>i}):void 0,J=\"$lit$\",v=`lit$${(Math.random()+\"\").slice(9)}$`,ut=\"?\"+v,At=`<${ut}>`,A=document,N=()=>A.createComment(\"\"),O=i=>i===null||typeof i!=\"object\"&&typeof i!=\"function\",pt=Array.isArray,yt=i=>pt(i)||typeof(i==null?void 0:i[Symbol.iterator])==\"function\",z=`[ \t\n\\f\\r]`,C=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,it=/-->/g,nt=/>/g,f=RegExp(`>|${z}(?:([^\\\\s\"'>=/]+)(${z}*=${z}*(?:[^ \t\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),rt=/'/g,ot=/\"/g,$t=/^(?:script|style|textarea|title)$/i,St=i=>(t,...e)=>({_$litType$:i,strings:t,values:e}),Et=St(1),E=Symbol.for(\"lit-noChange\"),u=Symbol.for(\"lit-nothing\"),lt=new WeakMap,m=A.createTreeWalker(A,129,null,!1),bt=(i,t)=>{const e=i.length-1,s=[];let n,r=t===2?\"\":\"\",o=C;for(let l=0;l\"?(o=n??C,d=-1):a[1]===void 0?d=-2:(d=o.lastIndex-a[2].length,_=a[1],o=a[3]===void 0?f:a[3]==='\"'?ot:rt):o===ot||o===rt?o=f:o===it||o===nt?o=C:(o=f,n=void 0);const R=o===f&&i[l+1].startsWith(\"/>\")?\" \":\"\";r+=o===C?h+At:d>=0?(s.push(_),h.slice(0,d)+J+h.slice(d)+v+R):h+v+(d===-2?(s.push(void 0),l):R)}const c=r+(i[e]||\"\")+(t===2?\"\":\"\");if(!Array.isArray(i)||!i.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return[st!==void 0?st.createHTML(c):c,s]};class P{constructor({strings:t,_$litType$:e},s){let n;this.parts=[];let r=0,o=0;const c=t.length-1,l=this.parts,[h,_]=bt(t,e);if(this.el=P.createElement(h,s),m.currentNode=this.el.content,e===2){const a=this.el.content,d=a.firstChild;d.remove(),a.append(...d.childNodes)}for(;(n=m.nextNode())!==null&&l.length0){n.textContent=S?S.emptyScript:\"\";for(let g=0;g2||s[0]!==\"\"||s[1]!==\"\"?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=u}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,s,n){const r=this.strings;let o=!1;if(r===void 0)t=b(this,t,e,0),o=!O(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const c=t;let l,h;for(t=r[0],l=0;l{var s,n;const r=(s=e==null?void 0:e.renderBefore)!==null&&s!==void 0?s:t;let o=r._$litPart$;if(o===void 0){const c=(n=e==null?void 0:e.renderBefore)!==null&&n!==void 0?n:null;r._$litPart$=o=new T(t.insertBefore(N(),c),c,void 0,e??{})}return o._$AI(i),o};/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var j,B;let w=class extends y{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var t,e;const s=super.createRenderRoot();return(t=(e=this.renderOptions).renderBefore)!==null&&t!==void 0||(e.renderBefore=s.firstChild),s}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=Tt(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),(t=this._$Do)===null||t===void 0||t.setConnected(!1)}render(){return E}};w.finalized=!0,w._$litElement$=!0,(j=globalThis.litElementHydrateSupport)===null||j===void 0||j.call(globalThis,{LitElement:w});const at=globalThis.litElementPolyfillSupport;at==null||at({LitElement:w});((B=globalThis.litElementVersions)!==null&&B!==void 0?B:globalThis.litElementVersions=[]).push(\"3.3.2\");/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const Rt=i=>t=>typeof t==\"function\"?((e,s)=>(customElements.define(e,s),s))(i,t):((e,s)=>{const{kind:n,elements:r}=s;return{kind:n,elements:r,finisher(o){customElements.define(e,o)}}})(i,t);/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const It=(i,t)=>t.kind===\"method\"&&t.descriptor&&!(\"value\"in t.descriptor)?{...t,finisher(e){e.createProperty(t.key,i)}}:{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},originalKey:t.key,initializer(){typeof t.initializer==\"function\"&&(this[t.key]=t.initializer.call(this))},finisher(e){e.createProperty(t.key,i)}},Mt=(i,t,e)=>{t.constructor.createProperty(e,i)};function $(i){return(t,e)=>e!==void 0?Mt(i,t,e):It(i,t)}/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var V;((V=window.HTMLSlotElement)===null||V===void 0?void 0:V.prototype.assignedElements)!=null;/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const Ht=i=>i.strings===void 0;/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const xt={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Gt=i=>(...t)=>({_$litDirective$:i,values:t});let kt=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,s){this._$Ct=t,this._$AM=e,this._$Ci=s}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const U=(i,t)=>{var e,s;const n=i._$AN;if(n===void 0)return!1;for(const r of n)(s=(e=r)._$AO)===null||s===void 0||s.call(e,t,!1),U(r,t);return!0},G=i=>{let t,e;do{if((t=i._$AM)===void 0)break;e=t._$AN,e.delete(i),i=t}while((e==null?void 0:e.size)===0)},gt=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(e===void 0)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),Dt(t)}};function Lt(i){this._$AN!==void 0?(G(this),this._$AM=i,gt(this)):this._$AM=i}function Wt(i,t=!1,e=0){const s=this._$AH,n=this._$AN;if(n!==void 0&&n.size!==0)if(t)if(Array.isArray(s))for(let r=e;r{var t,e,s,n;i.type==xt.CHILD&&((t=(s=i)._$AP)!==null&&t!==void 0||(s._$AP=Wt),(e=(n=i)._$AQ)!==null&&e!==void 0||(n._$AQ=Lt))};class zt extends kt{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,s){super._$AT(t,e,s),gt(this),this.isConnected=t._$AU}_$AO(t,e=!0){var s,n;t!==this.isConnected&&(this.isConnected=t,t?(s=this.reconnected)===null||s===void 0||s.call(this):(n=this.disconnected)===null||n===void 0||n.call(this)),e&&(U(this,t),G(this))}setValue(t){if(Ht(this._$Ct))this._$Ct._$AI(t,this);else{const e=[...this._$Ct._$AH];e[this._$Ci]=t,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}}/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const jt=()=>new Bt;class Bt{}const K=new WeakMap,Vt=Gt(class extends zt{render(i){return u}update(i,[t]){var e;const s=t!==this.G;return s&&this.G!==void 0&&this.ot(void 0),(s||this.rt!==this.lt)&&(this.G=t,this.ct=(e=i.options)===null||e===void 0?void 0:e.host,this.ot(this.lt=i.element)),u}ot(i){var t;if(typeof this.G==\"function\"){const e=(t=this.ct)!==null&&t!==void 0?t:globalThis;let s=K.get(e);s===void 0&&(s=new WeakMap,K.set(e,s)),s.get(this.G)!==void 0&&this.G.call(this.ct,void 0),s.set(this.G,i),i!==void 0&&this.G.call(this.ct,i)}else this.G.value=i}get rt(){var i,t,e;return typeof this.G==\"function\"?(t=K.get((i=this.ct)!==null&&i!==void 0?i:globalThis))===null||t===void 0?void 0:t.get(this.G):(e=this.G)===null||e===void 0?void 0:e.value}disconnected(){this.rt===this.lt&&this.ot(void 0)}reconnected(){this.ot(this.lt)}});var Kt=Object.defineProperty,Yt=Object.getOwnPropertyDescriptor,p=(i,t,e,s)=>{for(var n=s>1?void 0:s?Yt(t,e):t,r=i.length-1,o;r>=0;r--)(o=i[r])&&(n=(s?o(t,e,n):o(n))||n);return s&&n&&Kt(t,e,n),n};function qt(i){return customElements.get(i)?t=>t:Rt(i)}exports.GiscusWidget=class extends w{constructor(){super(),this.GISCUS_SESSION_KEY=\"giscus-session\",this.GISCUS_DEFAULT_HOST=\"https://giscus.app\",this.ERROR_SUGGESTION=\"Please consider reporting this error at https://github.com/giscus/giscus/issues/new.\",this.__session=\"\",this._iframeRef=jt(),this.messageEventHandler=this.handleMessageEvent.bind(this),this.hasLoaded=!1,this.host=this.GISCUS_DEFAULT_HOST,this.strict=\"0\",this.reactionsEnabled=\"1\",this.emitMetadata=\"0\",this.inputPosition=\"bottom\",this.theme=\"light\",this.lang=\"en\",this.loading=\"eager\",this.setupSession(),window.addEventListener(\"message\",this.messageEventHandler)}get iframeRef(){var t;return(t=this._iframeRef)==null?void 0:t.value}get _host(){try{return new URL(this.host),this.host}catch{return this.GISCUS_DEFAULT_HOST}}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(\"message\",this.messageEventHandler)}_formatError(t){return`[giscus] An error occurred. Error message: \"${t}\".`}setupSession(){const t=location.href,e=new URL(t),s=localStorage.getItem(this.GISCUS_SESSION_KEY),n=e.searchParams.get(\"giscus\")||\"\";if(this.__session=\"\",n){localStorage.setItem(this.GISCUS_SESSION_KEY,JSON.stringify(n)),this.__session=n,e.searchParams.delete(\"giscus\"),e.hash=\"\",history.replaceState(void 0,document.title,e.toString());return}if(s)try{this.__session=JSON.parse(s)}catch(r){localStorage.removeItem(this.GISCUS_SESSION_KEY),console.warn(`${this._formatError(r==null?void 0:r.message)} Session has been cleared.`)}}signOut(){localStorage.removeItem(this.GISCUS_SESSION_KEY),this.__session=\"\",this.update(new Map)}handleMessageEvent(t){if(t.origin!==this._host)return;const{data:e}=t;if(!(typeof e==\"object\"&&e.giscus))return;if(this.iframeRef&&e.giscus.resizeHeight&&(this.iframeRef.style.height=`${e.giscus.resizeHeight}px`),e.giscus.signOut){console.log(\"[giscus] User has logged out. Session has been cleared.\"),this.signOut();return}if(!e.giscus.error)return;const s=e.giscus.error;if(s.includes(\"Bad credentials\")||s.includes(\"Invalid state value\")||s.includes(\"State has expired\")){if(localStorage.getItem(this.GISCUS_SESSION_KEY)!==null){console.warn(`${this._formatError(s)} Session has been cleared.`),this.signOut();return}console.error(`${this._formatError(s)} No session is stored initially. ${this.ERROR_SUGGESTION}`)}if(s.includes(\"Discussion not found\")){console.warn(`[giscus] ${s}. A new discussion will be created if a comment/reaction is submitted.`);return}console.error(`${this._formatError(s)} ${this.ERROR_SUGGESTION}`)}sendMessage(t){!this.iframeRef||!this.iframeRef.contentWindow||!this.hasLoaded||(console.log({host:this.host,_host:this._host}),this.iframeRef.contentWindow.postMessage({giscus:t},this._host))}updateConfig(){const t={setConfig:{repo:this.repo,repoId:this.repoId,category:this.category,categoryId:this.categoryId,term:this.getTerm(),number:+this.getNumber(),strict:this.strict===\"1\",reactionsEnabled:this.reactionsEnabled===\"1\",emitMetadata:this.emitMetadata===\"1\",inputPosition:this.inputPosition,theme:this.theme,lang:this.lang}};this.sendMessage(t)}firstUpdated(){var t;(t=this.iframeRef)==null||t.addEventListener(\"load\",()=>{var e;(e=this.iframeRef)==null||e.classList.remove(\"loading\"),this.hasLoaded=!0,this.updateConfig()})}requestUpdate(t,e,s){if(!this.hasUpdated||t===\"host\"){super.requestUpdate(t,e,s);return}this.updateConfig()}getMetaContent(t,e=!1){const s=e?`meta[property='og:${t}'],`:\"\",n=document.querySelector(s+`meta[name='${t}']`);return n?n.content:\"\"}_getCleanedUrl(){const t=new URL(location.href);return t.searchParams.delete(\"giscus\"),t.hash=\"\",t}getTerm(){switch(this.mapping){case\"url\":return`${this._getCleanedUrl()}`;case\"title\":return document.title;case\"og:title\":return this.getMetaContent(\"title\",!0);case\"specific\":return this.term||\"\";case\"number\":return\"\";case\"pathname\":default:return location.pathname.length<2?\"index\":location.pathname.substring(1).replace(/\\.\\w+$/,\"\")}}getNumber(){return this.mapping===\"number\"&&this.term||\"\"}getIframeSrc(){const t=this._getCleanedUrl().toString(),e=`${t}${this.id?\"#\"+this.id:\"\"}`,s=this.getMetaContent(\"description\",!0),n=this.getMetaContent(\"giscus:backlink\")||t,r={origin:e,session:this.__session,repo:this.repo,repoId:this.repoId||\"\",category:this.category||\"\",categoryId:this.categoryId||\"\",term:this.getTerm(),number:this.getNumber(),strict:this.strict,reactionsEnabled:this.reactionsEnabled,emitMetadata:this.emitMetadata,inputPosition:this.inputPosition,theme:this.theme,description:s,backLink:n},o=this._host,c=this.lang?`/${this.lang}`:\"\",l=new URLSearchParams(r);return`${o}${c}/widget?${l}`}render(){return Et`\n \n `}};exports.GiscusWidget.styles=vt`\n :host,\n iframe {\n width: 100%;\n border: none;\n min-height: 150px;\n color-scheme: light dark;\n }\n\n iframe.loading {\n opacity: 0;\n }\n `;p([$({reflect:!0})],exports.GiscusWidget.prototype,\"host\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"repo\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"repoId\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"category\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"categoryId\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"mapping\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"term\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"strict\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"reactionsEnabled\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"emitMetadata\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"inputPosition\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"theme\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"lang\",2);p([$({reflect:!0})],exports.GiscusWidget.prototype,\"loading\",2);exports.GiscusWidget=p([qt(\"giscus-widget\")],exports.GiscusWidget);\n","\"use strict\";const j=require(\"react/jsx-runtime\"),t=require(\"react\");function b({id:r,host:s,repo:i,repoId:u,category:n,categoryId:o,mapping:c,term:a,strict:d,reactionsEnabled:f,emitMetadata:l,inputPosition:m,theme:p,lang:g,loading:q}){const[e,x]=t.useState(!1);return t.useEffect(()=>{e||(Promise.resolve().then(()=>require(\"./giscus-1126a0a1.js\")),x(!0))},[]),e?j.jsx(\"giscus-widget\",{id:r,host:s,repo:i,repoid:u,category:n,categoryid:o,mapping:c,term:a,strict:d,reactionsenabled:f,emitmetadata:l,inputposition:m,theme:p,lang:g,loading:q}):null}module.exports=b;\n","import React from \"react\"\nimport styled from \"styled-components\"\n\nimport {\n FaGithub,\n FaKaggle,\n FaFacebook,\n FaTwitter,\n FaLinkedin,\n FaInstagram,\n} from \"react-icons/fa\"\n\nimport {\n FaXTwitter,\n FaRegEnvelope,\n FaMedium,\n FaBlogger,\n FaRegFileLines,\n FaLink,\n} from \"react-icons/fa6\"\n\nimport { siteUrl, description, author, links } from \"../../../blog-config\"\n\n\nconst BioWrapper = styled.div`\n display: flex;\n align-items: center;\n\n @media (max-width: 768px) {\n padding: 0 15px;\n }\n`\n\nconst profileImageRoot =\n typeof window !== \"undefined\" && window.location.host === \"localhost:8000\"\n ? \"http://localhost:8000\"\n : siteUrl\n\nconst Profile = styled.div`\n flex: 0 0 auto;\n margin-right: 16px;\n width: 128px;\n height: 128px;\n border-radius: 999px;\n background-image: url(${profileImageRoot}/${props => props.theme.colors.profile}.png);\n background-size: cover;\n background-position: center;\n`\n\nconst Author = styled.div`\n margin-bottom: 8px;\n font-size: 24px;\n font-weight: 700;\n color: ${props => props.theme.colors.text};\n`\n\nconst Description = styled.div`\n margin-bottom: 11.2px;\n line-height: 1.5;\n font-size: 16px;\n color: ${props => props.theme.colors.secondaryText};\n`\n\nconst LinksWrapper = styled.div`\n & a {\n margin-right: 9.6px;\n }\n\n & svg {\n width: 25.6px;\n height: 25.6px;\n cursor: pointer;\n }\n\n & svg path {\n fill: ${props => props.theme.colors.icon};\n transition: fill 0.3s;\n }\n\n & a:hover svg path {\n fill: ${props => props.theme.colors.text};\n }\n`\n\nconst Link = ({ link, children }) => {\n if (!link) return null\n return (\n \n {children}\n \n )\n}\n\nconst Bio = () => {\n const {\n github,\n kaggle,\n instagram,\n facebook,\n twitter,\n x,\n blogger,\n medium,\n linkedIn,\n email,\n resume,\n link,\n } = links\n\n return (\n \n \n
\n @{author}\n {description}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n )\n}\n\nexport default Bio\n","import PropTypes from \"prop-types\"\nimport styled from \"styled-components\"\n\nconst Divider = styled.hr`\n margin-top: ${props => props.mt};\n margin-bottom: ${props => props.mb};\n border: none;\n border-bottom: 1px solid ${props => props.theme.colors.divider};\n`\n\nDivider.propTypes = {\n mt: PropTypes.string,\n mb: PropTypes.string,\n}\n\nDivider.defaultProps = {\n mt: \"48px\",\n mb: \"48px\",\n}\n\nexport default Divider\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Link } from \"gatsby\"\n\nconst TagListWrapper = styled.div`\n margin-bottom: 10px;\n word-break: break-all;\n`\n\nconst TagLink = styled.div`\n display: inline-block;\n padding: 9.6px 11.2px;\n margin-right: 8px;\n margin-bottom: 8px;\n border-radius: 50px;\n background-color: ${props =>\n props.selected\n ? props.theme.colors.selectedTagBackground\n : props.theme.colors.tagBackground};\n color: ${props =>\n props.selected\n ? props.theme.colors.selectedTagText\n : props.theme.colors.tagText};\n text-decoration: none;\n font-size: 14.4px;\n transition: all 0.2s;\n\n &:hover {\n background-color: ${props =>\n props.selected\n ? props.theme.colors.hoveredSelectedTagBackground\n : props.theme.colors.hoveredTagBackground};\n }\n`\n\nconst spaceToDash = text => {\n return text.replace(/\\s+/g, \"-\")\n}\n\nconst TagList = ({ tagList, count, selected }) => {\n if (!tagList) return null\n\n if (!count) {\n return (\n \n {tagList.map((tag, i) => (\n \n {spaceToDash(tag)}\n \n ))}\n \n )\n }\n\n return (\n \n {tagList.map((tag, i) => (\n \n \n {spaceToDash(tag.fieldValue)} ({tag.totalCount})\n \n \n ))}\n \n )\n}\n\nexport default TagList\n","import React from \"react\"\nimport styled from \"styled-components\"\n\nimport { author } from \"../../../../blog-config\"\n\nimport Divider from \"components/Divider\"\nimport TagList from \"components/TagList\"\nimport Bio from \"components/Bio\"\n\nconst Wrapper = styled.div`\n margin-top: 32px;\n @media (max-width: 768px) {\n padding: 0 15px;\n }\n`\n\nconst ArticleTitle = styled.h1`\n margin-bottom: 25.6px;\n line-height: 1.2;\n font-size: 40px;\n font-weight: 700;\n color: ${props => props.theme.colors.text};\n`\n\nconst Information = styled.div`\n margin-bottom: 32px;\n font-size: 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n`\n\nconst Author = styled.span`\n padding-bottom: 15px;\n font-weight: 700;\n color: ${props => props.theme.colors.text};\n`\n\nconst Date = styled.span`\n font-weight: 300;\n color: ${props => props.theme.colors.secondaryText};\n`\n\nconst Property = styled.strong`\n font-weight: 300;\n color: ${props => props.theme.colors.secondaryText}\n`\n\nconst Header = ({ title, date, tags, minToRead, updated }) => {\n return (\n \n {title} \n \n
\n @{author} \n · {minToRead} min read \n
\n \n\n
\n Created Date · {date} \n \n
\n
\n Last Update · {updated} \n
\n
\n {tags && }\n \n
\n )\n}\n\nexport default Header\n","import React, { useState, useMemo } from \"react\"\nimport _ from \"lodash\"\nimport styled from \"styled-components\"\nimport { Link } from \"gatsby\"\n\nimport { AiOutlineArrowLeft } from \"react-icons/ai\"\n\nconst SeriesWrapper = styled.div`\n margin-bottom: 32px;\n padding: 16px;\n background-color: ${props => props.theme.colors.seriesBackground};\n`\n\nconst SeriesHeader = styled.h2`\n margin-bottom: 16px;\n font-size: 16px;\n font-weight: bold;\n color: ${props => props.theme.colors.text};\n\n & > span {\n font-weight: normal;\n color: ${props => props.theme.colors.tertiaryText};\n }\n\n & > a {\n color: inherit;\n text-decoration: none;\n }\n\n & > a:hover {\n text-decoration: underline;\n }\n`\n\nconst PostWrapper = styled.ul``\n\nconst Post = styled.li`\n position: relative;\n font-size: 12.8px;\n color: ${props =>\n props.currentPost\n ? props.theme.colors.text\n : props.theme.colors.tertiaryText};\n\n &:not(:last-child) {\n margin-bottom: 9.6px;\n }\n\n & > a {\n text-decoration: none;\n color: inherit;\n transition: color 0.3s;\n }\n\n & > a:hover {\n color: ${props => props.theme.colors.text};\n }\n\n & > svg {\n position: absolute;\n margin-left: 5px;\n }\n`\n\nconst ViewMore = styled.div`\n margin-top: 15px;\n font-size: 14.4px;\n text-align: center;\n color: ${props => props.theme.colors.tertiaryText};\n cursor: pointer;\n transition: color 0.3s;\n\n &:hover {\n color: ${props => props.theme.colors.text};\n }\n`\n\nconst Series = ({ header, series }) => {\n const [fold, setFold] = useState(true)\n\n const filteredPosts = useMemo(() => {\n if (series.length < 5) return series\n if (!fold) return series\n\n const currentPostIdx = _.findIndex(series, { currentPost: true })\n\n if (currentPostIdx < 2) return series.slice(0, 5)\n if (series.length - currentPostIdx - 1 < 2)\n return series.slice(series.length - 5, series.length)\n\n return series.slice(currentPostIdx - 2, currentPostIdx + 3)\n }, [series, fold])\n\n const showViewButton = useMemo(() => {\n return series.length > 5\n }, [series])\n\n return (\n \n \n \n SERIES: {header}\n {\" \"}\n ({series.length})\n \n \n {filteredPosts.map((post, i) => (\n \n {post.frontmatter.title}{\" \"}\n {post.currentPost && }{\" \"}\n \n ))}\n \n {showViewButton && (\n {\n setFold(!fold)\n }}\n >\n {fold\n ? `View More (+${series.length - filteredPosts.length})`\n : \"View Less\"}\n \n )}\n \n )\n}\n\nexport default Series\n","import { useRef } from \"react\"\n\nconst useOffsetTop = () => {\n const ref = useRef()\n\n let offsetTop = 0\n if (ref.current)\n offsetTop =\n ref.current.getBoundingClientRect().top +\n document.documentElement.scrollTop\n\n return [ref, offsetTop]\n}\n\nexport default useOffsetTop\n","import { useEffect, useState } from \"react\"\n\nconst useScroll = () => {\n const [scroll, setScroll] = useState({\n x: 0,\n y: 0,\n })\n\n const onScroll = () => {\n setScroll({ y: window.scrollY, x: window.scrollX })\n }\n\n useEffect(() => {\n window.addEventListener(\"scroll\", onScroll)\n return () => window.removeEventListener(\"scroll\", onScroll)\n }, [])\n\n return scroll\n}\n\nexport default useScroll\n","const offset = element => {\n const rect = element.getBoundingClientRect(),\n scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,\n scrollTop = window.pageYOffset || document.documentElement.scrollTop\n return { top: rect.top + scrollTop, left: rect.left + scrollLeft }\n}\n\nexport default offset\n","import React from \"react\"\nimport styled, { css } from \"styled-components\"\n\nimport useScroll from \"hooks/useScroll\"\n\nconst StyledWrapper = styled.div`\n position: relative;\n opacity: 0;\n transition: 0.35s all ease;\n ${props =>\n props.visible &&\n css`\n opacity: 1;\n `}\n`\n\nconst RevealOnScroll = ({ revealAt, reverse, children }) => {\n const { y } = useScroll()\n\n let reveal = null\n if (!reverse) reveal = y > revealAt\n else reveal = y < revealAt\n\n return {children}\n}\n\nexport default RevealOnScroll\n","import React, { useState, useEffect } from \"react\"\nimport styled, { css } from \"styled-components\"\n\nimport { animateScroll } from \"react-scroll\"\n\nimport useScroll from \"hooks/useScroll\"\n\nimport getElementOffset from \"utils/getElmentOffset\"\n\nimport RevealOnScroll from \"components/RevealOnScroll\"\n\nconst STICK_OFFSET = 100\n\nconst TocWrapper = styled.div`\n position: absolute;\n opacity: 1;\n left: 100%;\n\n & > div {\n padding-right: 20px;\n padding-left: 16px;\n margin-left: 48px;\n position: relative;\n width: 240px;\n max-height: calc(100% - 185px);\n overflow-y: auto;\n\n ::-webkit-scrollbar {\n width: 3px;\n }\n ::-webkit-scrollbar-track {\n background: ${props => props.theme.colors.scrollTrack};\n }\n\n ::-webkit-scrollbar-thumb {\n background: ${props => props.theme.colors.scrollHandle};\n }\n\n ${props =>\n props.stick &&\n css`\n position: fixed;\n top: ${STICK_OFFSET}px;\n `}\n }\n\n @media (max-width: 1300px) {\n display: None;\n }\n`\n\nconst ParagraphTitle = styled.div`\n margin-bottom: 8px;\n padding-left: ${props => (props.subtitle ? 19.2 : 0)}px;\n font-size: 14.4px;\n color: ${props => props.theme.colors.mutedText};\n line-height: 1.3;\n transition: all 0.2s;\n\n ${props =>\n props.active &&\n css`\n transform: translate(-11.2px, 0);\n color: ${props => props.theme.colors.accentText};\n `}\n\n &:hover {\n color: ${props => props.theme.colors.secondAccentText};\n cursor: pointer;\n }\n`\n\nconst Toc = ({ items, articleOffset }) => {\n const { y } = useScroll()\n\n const [revealAt, setRevealAt] = useState(4000)\n const [headers, setHeaders] = useState([])\n const [active, setActive] = useState(0)\n\n useEffect(() => {\n setHeaders(\n [\n ...document.querySelectorAll(\"#article-body > h2, #article-body > h3\"),\n ].map(element => getElementOffset(element).top)\n )\n }, [])\n\n useEffect(() => {\n headers.forEach((header, i) => {\n if (header - 300 < y) {\n setActive(i)\n return\n }\n })\n }, [y])\n\n const handleClickTitle = index => {\n animateScroll.scrollTo(headers[index] - 100)\n }\n\n return (\n \n articleOffset - STICK_OFFSET}>\n
\n {items.map((item, i) => (\n handleClickTitle(i)}\n >\n {item.innerText}\n \n ))}\n
\n
\n
\n )\n}\n\nexport default Toc\n","import styled from \"styled-components\"\n\nconst StyledMarkdown = styled.div`\n & {\n font-size: 16.7px;\n color: ${props => props.theme.colors.text};\n line-height: 1.73;\n overflow: hidden;\n }\n\n & h1:first-child,\n & h2:first-child,\n & h3:first-child,\n & h4:first-child {\n margin-top: 0;\n }\n\n & > p,\n & > ul,\n & > ol,\n & table,\n & blockquote,\n & pre,\n & img,\n & .katex-display {\n margin-top: 0;\n margin-bottom: 24px;\n word-break: break-all;\n }\n\n & p {\n overflow-x: scroll;\n word-break: break-all;\n\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n & h2,\n & h3,\n & h4,\n & h5,\n & h6 {\n margin: 11.2px 0 4.8px 0;\n font-weight: 700;\n }\n\n & h2 {\n margin-top: 75px;\n margin-bottom: 16px;\n font-size: 24px;\n }\n\n & h3 {\n margin-top: 50px;\n margin-bottom: 14px;\n font-size: 22.4px;\n }\n\n & h4 {\n margin-top: 40px;\n margin-bottom: 12px;\n font-size: 17.6px;\n }\n\n & h5 {\n font-size: 16px;\n }\n\n & h6 {\n font-size: 14.4px;\n }\n\n & strong {\n font-weight: 700;\n }\n\n & em {\n font-style: italic;\n }\n\n & blockquote {\n padding: 18px 24px;\n border-left: 4px solid ${props => props.theme.colors.blockQuoteBorder};\n background-color: ${props => props.theme.colors.blockQuoteBackground};\n\n & *:last-child {\n margin-bottom: 0;\n }\n }\n\n & blockquote blockquote {\n margin-top: 24px;\n }\n\n & blockquote > p > code.language-text {\n background-color: ${props => props.theme.colors.inlineCodeBackgroundDarker};\n }\n\n & table {\n border-collapse: collapse;\n }\n\n & th {\n border-bottom: 2px solid ${props => props.theme.colors.border};\n font-weight: 700;\n }\n\n & td {\n border-top: 1px solid ${props => props.theme.colors.border};\n border-bottom: 1px solid ${props => props.theme.colors.border};\n }\n\n & td,\n th {\n padding: 8px;\n }\n\n & tr:first-child td {\n border-top: none;\n }\n\n & tr:nth-child(even) {\n background-color: ${props => props.theme.colors.tableBackground};\n }\n\n & tr:last-child td {\n border-bottom: none;\n }\n\n & *:not(pre) > code.language-text,\n & table code.language-text {\n position: relative;\n top: -1px;\n margin-right: 3px;\n padding: 3px 5px 3px 5px;\n font-size: 13px;\n background-color: ${props => props.theme.colors.inlineCodeBackground};\n font-weight: bold;\n color: ${props => props.theme.colors.text};\n }\n\n & h2 > code.language-text,\n & h3 > code.language-text,\n & h4 > code.language-text {\n font-size: inherit;\n }\n\n & tr:nth-child(even) code.language-text {\n background-color: ${props => props.theme.colors.inlineCodeBackgroundDarker};\n }\n\n & ul,\n & ol {\n padding-left: 25px;\n }\n\n & ol {\n list-style: decimal;\n }\n\n & ul {\n list-style: disc;\n }\n\n & ul ul {\n list-style: circle;\n }\n\n & ul ul ul {\n list-style: square;\n }\n\n & li {\n margin-bottom: 15px;\n }\n\n & li p {\n margin: 8px 0;\n }\n\n & pre {\n ::-webkit-scrollbar {\n height: 10px;\n }\n ::-webkit-scrollbar-track {\n background: ${props => props.theme.colors.scrollTrack};\n }\n\n ::-webkit-scrollbar-thumb {\n background: ${props => props.theme.colors.scrollHandle};\n }\n }\n\n & code[class*=\"language-\"],\n & pre[class*=\"language-\"] {\n font-size: 15px;\n }\n\n & img {\n display: block;\n margin-left: auto;\n margin-right: auto;\n max-width: 100%;\n }\n\n & figcaption {\n margin-top: 5px;\n text-align: center;\n color: #868e96;\n font-size: 12px;\n font-style: italic;\n }\n\n & hr {\n border: none;\n border-bottom: 1px solid ${props => props.theme.colors.border};\n }\n\n & a[data-wiki-link=\"true\"] {\n color: ${props => props.theme.colors.flipAccentText};\n background-color: none;\n text-decoration: none;\n }\n\n & a[data-wiki-link=\"true\"]:hover {\n color: ${props => props.theme.colors.flipAccentOppositeText};\n text-decoration: underline;\n }\n\n & a {\n padding: 1.6px 0;\n color: ${props => props.theme.colors.text};\n }\n\n & a:hover {\n background-color: none;\n color: ${props => props.theme.colors.hoveredLinkText};\n }\n`\n\nexport default StyledMarkdown\n","import { css } from \"styled-components\"\n\nconst CommonStyle = css`\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n margin-bottom: 24px;\n font-size: 14.5px;\n color: #ccc;\n background: none;\n font-family: \"Bai Jamjuree\", monospace;\n text-align: justify;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.5;\n\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n }\n\n /* Code blocks */\n pre[class*=\"language-\"] {\n padding: 1em;\n overflow: auto;\n }\n\n /* Inline code */\n :not(pre) > code[class*=\"language-\"] {\n padding: 0.1em;\n border-radius: 0.3em;\n white-space: normal;\n }\n\n .token.important,\n .token.bold {\n font-weight: bold;\n }\n .token.italic {\n font-style: italic;\n }\n\n .token.entity {\n cursor: help;\n }\n`\n\nexport default CommonStyle\n","import { createGlobalStyle, css } from \"styled-components\"\nimport CommonStyle from \"./CommonStyle\"\n\nconst Theme = css`\n /**\n * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML\n * Based on https://github.com/chriskempson/tomorrow-theme\n * @author Rose Pritchard\n */\n & code[class*=\"language-\"],\n & pre[class*=\"language-\"] {\n background-color: #222222;\n }\n\n .token.comment,\n .token.block-comment,\n .token.prolog,\n .token.doctype,\n .token.cdata {\n color: #999;\n }\n\n .token.punctuation {\n color: #ccc;\n }\n\n .token.tag,\n .token.attr-name,\n .token.namespace,\n .token.deleted {\n color: #e2777a;\n }\n\n .token.function-name {\n color: #6196cc;\n }\n\n .token.boolean,\n .token.number,\n .token.function {\n color: #f08d49;\n }\n\n .token.property,\n .token.class-name,\n .token.constant,\n .token.symbol {\n color: #f8c555;\n }\n\n .token.selector,\n .token.important,\n .token.atrule,\n .token.keyword,\n .token.builtin {\n color: #cc99cd;\n }\n\n .token.string,\n .token.char,\n .token.attr-value,\n .token.regex,\n .token.variable {\n color: #7ec699;\n }\n\n .token.operator,\n .token.entity,\n .token.url {\n color: #67cdcc;\n }\n\n .token.important,\n .token.bold {\n font-weight: bold;\n }\n .token.italic {\n font-style: italic;\n }\n\n .token.entity {\n cursor: help;\n }\n\n .token.inserted {\n color: green;\n }\n`\n\nconst DarkMode = createGlobalStyle`\n ${CommonStyle}\n ${Theme}\n`\n\nexport default DarkMode\n","import { createGlobalStyle, css } from \"styled-components\"\nimport CommonStyle from \"./CommonStyle\"\n\nconst Theme = css`\n /**\n * One Light theme for prism.js\n * Based on Atom's One Light theme: https://github.com/atom/atom/tree/master/packages/one-light-syntax\n */\n\n /**\n * One Light colours (accurate as of commit eb064bf on 19 Feb 2021)\n * From colors.less\n * --mono-1: hsl(230, 8%, 24%);\n * --mono-2: hsl(230, 6%, 44%);\n * --mono-3: hsl(230, 4%, 64%)\n * --hue-1: hsl(198, 99%, 37%);\n * --hue-2: hsl(221, 87%, 60%);\n * --hue-3: hsl(301, 63%, 40%);\n * --hue-4: hsl(119, 34%, 47%);\n * --hue-5: hsl(5, 74%, 59%);\n * --hue-5-2: hsl(344, 84%, 43%);\n * --hue-6: hsl(35, 99%, 36%);\n * --hue-6-2: hsl(35, 99%, 40%);\n * --syntax-fg: hsl(230, 8%, 24%);\n * --syntax-bg: hsl(230, 1%, 98%);\n * --syntax-gutter: hsl(230, 1%, 62%);\n * --syntax-guide: hsla(230, 8%, 24%, 0.2);\n * --syntax-accent: hsl(230, 100%, 66%);\n * From syntax-variables.less\n * --syntax-selection-color: hsl(230, 1%, 90%);\n * --syntax-gutter-background-color-selected: hsl(230, 1%, 90%);\n * --syntax-cursor-line: hsla(230, 8%, 24%, 0.05);\n */\n\n code[class*=\"language-\"],\n pre[class*=\"language-\"] {\n background-color: #f7f6f3;\n color: hsl(230, 8%, 24%);\n }\n\n /* Selection */\n code[class*=\"language-\"]::-moz-selection,\n code[class*=\"language-\"] *::-moz-selection,\n pre[class*=\"language-\"] *::-moz-selection {\n background: hsl(230, 1%, 90%);\n color: inherit;\n }\n\n code[class*=\"language-\"]::selection,\n code[class*=\"language-\"] *::selection,\n pre[class*=\"language-\"] *::selection {\n background: hsl(230, 1%, 90%);\n color: inherit;\n }\n\n .token.comment,\n .token.prolog,\n .token.cdata {\n color: hsl(230, 4%, 64%);\n }\n\n .token.doctype,\n .token.punctuation,\n .token.entity {\n color: hsl(230, 8%, 24%);\n }\n\n .token.attr-name,\n .token.class-name,\n .token.boolean,\n .token.constant,\n .token.number,\n .token.atrule {\n color: hsl(35, 99%, 36%);\n }\n\n .token.keyword {\n color: hsl(301, 63%, 40%);\n }\n\n .token.property,\n .token.tag,\n .token.symbol,\n .token.deleted,\n .token.important {\n color: hsl(5, 74%, 59%);\n }\n\n .token.selector,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted,\n .token.regex,\n .token.attr-value,\n .token.attr-value > .token.punctuation {\n color: hsl(119, 34%, 47%);\n }\n\n .token.variable,\n .token.operator,\n .token.function {\n color: hsl(221, 87%, 60%);\n }\n\n .token.url {\n color: hsl(198, 99%, 37%);\n }\n\n /* HTML overrides */\n .token.attr-value > .token.punctuation.attr-equals,\n .token.special-attr > .token.attr-value > .token.value.css {\n color: hsl(230, 8%, 24%);\n }\n\n /* CSS overrides */\n .language-css .token.selector {\n color: hsl(5, 74%, 59%);\n }\n\n .language-css .token.property {\n color: hsl(230, 8%, 24%);\n }\n\n .language-css .token.function,\n .language-css .token.url > .token.function {\n color: hsl(198, 99%, 37%);\n }\n\n .language-css .token.url > .token.string.url {\n color: hsl(119, 34%, 47%);\n }\n\n .language-css .token.important,\n .language-css .token.atrule .token.rule {\n color: hsl(301, 63%, 40%);\n }\n\n /* JS overrides */\n .language-javascript .token.operator {\n color: hsl(301, 63%, 40%);\n }\n\n .language-javascript\n .token.template-string\n > .token.interpolation\n > .token.interpolation-punctuation.punctuation {\n color: hsl(344, 84%, 43%);\n }\n\n /* JSON overrides */\n .language-json .token.operator {\n color: hsl(230, 8%, 24%);\n }\n\n .language-json .token.null.keyword {\n color: hsl(35, 99%, 36%);\n }\n\n /* MD overrides */\n .language-markdown .token.url,\n .language-markdown .token.url > .token.operator,\n .language-markdown .token.url-reference.url > .token.string {\n color: hsl(230, 8%, 24%);\n }\n\n .language-markdown .token.url > .token.content {\n color: hsl(221, 87%, 60%);\n }\n\n .language-markdown .token.url > .token.url,\n .language-markdown .token.url-reference.url {\n color: hsl(198, 99%, 37%);\n }\n\n .language-markdown .token.blockquote.punctuation,\n .language-markdown .token.hr.punctuation {\n color: hsl(230, 4%, 64%);\n font-style: italic;\n }\n\n .language-markdown .token.code-snippet {\n color: hsl(119, 34%, 47%);\n }\n\n .language-markdown .token.bold .token.content {\n color: hsl(35, 99%, 36%);\n }\n\n .language-markdown .token.italic .token.content {\n color: hsl(301, 63%, 40%);\n }\n\n .language-markdown .token.strike .token.content,\n .language-markdown .token.strike .token.punctuation,\n .language-markdown .token.list.punctuation,\n .language-markdown .token.title.important > .token.punctuation {\n color: hsl(5, 74%, 59%);\n }\n\n /* General */\n .token.bold {\n font-weight: bold;\n }\n\n .token.comment,\n .token.italic {\n font-style: italic;\n }\n\n .token.entity {\n cursor: help;\n }\n\n .token.namespace {\n opacity: 0.8;\n }\n\n /* Plugin overrides */\n /* Selectors should have higher specificity than those in the plugins' default stylesheets */\n\n /* Show Invisibles plugin overrides */\n .token.token.tab:not(:empty):before,\n .token.token.cr:before,\n .token.token.lf:before,\n .token.token.space:before {\n color: hsla(230, 8%, 24%, 0.2);\n }\n\n /* Styling the buttons */\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > button,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > a,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > span {\n background: hsl(230, 1%, 90%);\n color: hsl(230, 6%, 44%);\n padding: 0.1em 0.4em;\n border-radius: 0.3em;\n }\n\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover,\n div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus {\n background: hsl(230, 1%, 78%); /* custom: darken(--syntax-bg, 20%) */\n color: hsl(230, 8%, 24%);\n }\n\n /* Line Highlight plugin overrides */\n /* The highlighted line itself */\n .line-highlight.line-highlight {\n background: hsla(230, 8%, 24%, 0.05);\n }\n\n /* Default line numbers in Line Highlight plugin */\n .line-highlight.line-highlight:before,\n .line-highlight.line-highlight[data-end]:after {\n background: hsl(230, 1%, 90%);\n color: hsl(230, 8%, 24%);\n padding: 0.1em 0.6em;\n border-radius: 0.3em;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); /* same as Toolbar plugin default */\n }\n\n /* Hovering over a linkable line number (in the gutter area) */\n /* Requires Line Numbers plugin as well */\n pre[id].linkable-line-numbers.linkable-line-numbers\n span.line-numbers-rows\n > span:hover:before {\n background-color: hsla(230, 8%, 24%, 0.05);\n }\n\n /* Line Numbers and Command Line plugins overrides */\n /* Line separating gutter from coding area */\n .line-numbers.line-numbers .line-numbers-rows,\n .command-line .command-line-prompt {\n border-right-color: hsla(230, 8%, 24%, 0.2);\n }\n\n /* Stuff in the gutter */\n .line-numbers .line-numbers-rows > span:before,\n .command-line .command-line-prompt > span:before {\n color: hsl(230, 1%, 62%);\n }\n\n /* Match Braces plugin overrides */\n /* Note: Outline colour is inherited from the braces */\n .rainbow-braces .token.token.punctuation.brace-level-1,\n .rainbow-braces .token.token.punctuation.brace-level-5,\n .rainbow-braces .token.token.punctuation.brace-level-9 {\n color: hsl(5, 74%, 59%);\n }\n\n .rainbow-braces .token.token.punctuation.brace-level-2,\n .rainbow-braces .token.token.punctuation.brace-level-6,\n .rainbow-braces .token.token.punctuation.brace-level-10 {\n color: hsl(119, 34%, 47%);\n }\n\n .rainbow-braces .token.token.punctuation.brace-level-3,\n .rainbow-braces .token.token.punctuation.brace-level-7,\n .rainbow-braces .token.token.punctuation.brace-level-11 {\n color: hsl(221, 87%, 60%);\n }\n\n .rainbow-braces .token.token.punctuation.brace-level-4,\n .rainbow-braces .token.token.punctuation.brace-level-8,\n .rainbow-braces .token.token.punctuation.brace-level-12 {\n color: hsl(301, 63%, 40%);\n }\n\n /* Diff Highlight plugin overrides */\n /* Taken from https://github.com/atom/github/blob/master/styles/variables.less */\n pre.diff-highlight > code .token.token.deleted:not(.prefix),\n pre > code.diff-highlight .token.token.deleted:not(.prefix) {\n background-color: hsla(353, 100%, 66%, 0.15);\n }\n\n pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection,\n pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection,\n pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection,\n pre\n > code.diff-highlight\n .token.token.deleted:not(.prefix)\n *::-moz-selection {\n background-color: hsla(353, 95%, 66%, 0.25);\n }\n\n pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection,\n pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection,\n pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection,\n pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection {\n background-color: hsla(353, 95%, 66%, 0.25);\n }\n\n pre.diff-highlight > code .token.token.inserted:not(.prefix),\n pre > code.diff-highlight .token.token.inserted:not(.prefix) {\n background-color: hsla(137, 100%, 55%, 0.15);\n }\n\n pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection,\n pre.diff-highlight\n > code\n .token.token.inserted:not(.prefix)\n *::-moz-selection,\n pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection,\n pre\n > code.diff-highlight\n .token.token.inserted:not(.prefix)\n *::-moz-selection {\n background-color: hsla(135, 73%, 55%, 0.25);\n }\n\n pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection,\n pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection,\n pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection,\n pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection {\n background-color: hsla(135, 73%, 55%, 0.25);\n }\n\n /* Previewers plugin overrides */\n /* Based on https://github.com/atom-community/atom-ide-datatip/blob/master/styles/atom-ide-datatips.less and https://github.com/atom/atom/blob/master/packages/one-light-ui */\n /* Border around popup */\n .prism-previewer.prism-previewer:before,\n .prism-previewer-gradient.prism-previewer-gradient div {\n border-color: hsl(0, 0, 95%);\n }\n\n /* Angle and time should remain as circles and are hence not included */\n .prism-previewer-color.prism-previewer-color:before,\n .prism-previewer-gradient.prism-previewer-gradient div,\n .prism-previewer-easing.prism-previewer-easing:before {\n border-radius: 0.3em;\n }\n\n /* Triangles pointing to the code */\n .prism-previewer.prism-previewer:after {\n border-top-color: hsl(0, 0, 95%);\n }\n\n .prism-previewer-flipped.prism-previewer-flipped.after {\n border-bottom-color: hsl(0, 0, 95%);\n }\n\n /* Background colour within the popup */\n .prism-previewer-angle.prism-previewer-angle:before,\n .prism-previewer-time.prism-previewer-time:before,\n .prism-previewer-easing.prism-previewer-easing {\n background: hsl(0, 0%, 100%);\n }\n\n /* For angle, this is the positive area (eg. 90deg will display one quadrant in this colour) */\n /* For time, this is the alternate colour */\n .prism-previewer-angle.prism-previewer-angle circle,\n .prism-previewer-time.prism-previewer-time circle {\n stroke: hsl(230, 8%, 24%);\n stroke-opacity: 1;\n }\n\n /* Stroke colours of the handle, direction point, and vector itself */\n .prism-previewer-easing.prism-previewer-easing circle,\n .prism-previewer-easing.prism-previewer-easing path,\n .prism-previewer-easing.prism-previewer-easing line {\n stroke: hsl(230, 8%, 24%);\n }\n\n /* Fill colour of the handle */\n .prism-previewer-easing.prism-previewer-easing circle {\n fill: transparent;\n }\n`\n\nconst LightMode = createGlobalStyle`\n ${CommonStyle}\n ${Theme}\n`\n\nexport default LightMode\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport DarkMode from \"./DarkMode\"\nimport LightMode from \"./LightMode\"\n\nconst PrismTheme = () => {\n const { theme } = useSelector(state => state.theme)\n\n return <>{theme === \"light\" ? : }\n}\n\nexport default PrismTheme\n","import React, { useState, useEffect } from \"react\"\nimport styled from \"styled-components\"\n\nimport useOffsetTop from \"hooks/useOffsetTop\"\n\nimport Toc from \"./Toc\"\nimport StyledMarkdown from \"./StyledMarkdown\"\nimport PrismTheme from \"./PrismTheme\"\n\nconst Wrapper = styled.div`\n position: relative;\n margin-bottom: 112px;\n\n @media (max-width: 768px) {\n padding: 0 15px;\n }\n`\n\nconst Body = ({ html }) => {\n const [toc, setToc] = useState([])\n\n const [ref, offsetTop] = useOffsetTop()\n\n useEffect(() => {\n setToc(\n Array.from(\n document.querySelectorAll(\"#article-body > h2, #article-body > h3\")\n )\n )\n }, [])\n\n return (\n \n \n\n \n\n \n \n )\n}\n\nexport default Body","/*! @preserve react-md-spinner v1.0.0 - tsuyoshiwada | MIT license. */\nimport React from 'react';\nimport Stylis from 'stylis';\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nvar STYLE_DATA_NAME = \"react-md-spinner\";\n\nvar KEYFRAME_PREFIX = \"__react-md-spinner-animation__\";\nvar stylis = new Stylis({\n global: false,\n cascade: true,\n keyframe: true,\n prefix: true,\n compress: false\n});\nvar Keyframe = {\n ROOT_ROTATE: \"\".concat(KEYFRAME_PREFIX, \"root-rotate\"),\n FILL_UNFILL_ROTATE: \"\".concat(KEYFRAME_PREFIX, \"fill-unfill-rotate\"),\n LAYER_1_FADE_IN_OUT: \"\".concat(KEYFRAME_PREFIX, \"layer-1-fade-in-out\"),\n LAYER_2_FADE_IN_OUT: \"\".concat(KEYFRAME_PREFIX, \"layer-2-fade-in-out\"),\n LAYER_3_FADE_IN_OUT: \"\".concat(KEYFRAME_PREFIX, \"layer-3-fade-in-out\"),\n LAYER_4_FADE_IN_OUT: \"\".concat(KEYFRAME_PREFIX, \"layer-4-fade-in-out\"),\n LEFT_SPIN: \"\".concat(KEYFRAME_PREFIX, \"left-spin\"),\n RIGHT_SPIN: \"\".concat(KEYFRAME_PREFIX, \"right-spin\")\n};\nvar keyframes = stylis(\"\", \"\\n@keyframes \".concat(Keyframe.ROOT_ROTATE, \" {\\n to { transform: rotate(360deg); }\\n}\\n\\n@keyframes \").concat(Keyframe.FILL_UNFILL_ROTATE, \" {\\n 12.5% { transform: rotate(135deg) }\\n 25% { transform: rotate(270deg) }\\n 37.5% { transform: rotate(405deg) }\\n 50% { transform: rotate(540deg) }\\n 62.5% { transform: rotate(675deg) }\\n 75% { transform: rotate(810deg) }\\n 87.5% { transform: rotate(945deg) }\\n 100% { transform: rotate(1080deg) }\\n}\\n\\n@keyframes \").concat(Keyframe.LAYER_1_FADE_IN_OUT, \" {\\n 0% { opacity: 1 }\\n 25% { opacity: 1 }\\n 26% { opacity: 0 }\\n 89% { opacity: 0 }\\n 90% { opacity: 1 }\\n 100% { opacity: 1 }\\n}\\n\\n@keyframes \").concat(Keyframe.LAYER_2_FADE_IN_OUT, \" {\\n 0% { opacity: 0 }\\n 15% { opacity: 0 }\\n 25% { opacity: 1 }\\n 50% { opacity: 1 }\\n 51% { opacity: 0 }\\n 100% { opacity: 0 }\\n}\\n\\n@keyframes \").concat(Keyframe.LAYER_3_FADE_IN_OUT, \" {\\n 0% { opacity: 0 }\\n 40% { opacity: 0 }\\n 50% { opacity: 1 }\\n 75% { opacity: 1 }\\n 76% { opacity: 0 }\\n 100% { opacity: 0 }\\n}\\n\\n@keyframes \").concat(Keyframe.LAYER_4_FADE_IN_OUT, \" {\\n 0% { opacity: 0 }\\n 65% { opacity: 0 }\\n 75% { opacity: 1 }\\n 90% { opacity: 1 }\\n 100% { opacity: 0 }\\n}\\n\\n@keyframes \").concat(Keyframe.LEFT_SPIN, \" {\\n 0% { transform: rotate(130deg) }\\n 50% { transform: rotate(-5deg) }\\n 100% { transform: rotate(130deg) }\\n}\\n\\n@keyframes \").concat(Keyframe.RIGHT_SPIN, \" {\\n 0% { transform: rotate(-130deg) }\\n 50% { transform: rotate(5deg) }\\n 100% { transform: rotate(-130deg) }\\n}\\n\"));\n\nvar getStylesheetString = function getStylesheetString() {\n return \"\");\n};\nvar getStylesheetComponent = function getStylesheetComponent() {\n var _React$createElement;\n\n return React.createElement(\"style\", (_React$createElement = {\n type: \"text/css\"\n }, _defineProperty(_React$createElement, \"data-\".concat(STYLE_DATA_NAME), \"\"), _defineProperty(_React$createElement, \"dangerouslySetInnerHTML\", {\n __html: keyframes\n }), _React$createElement));\n};\n\nvar ssrBehavior = /*#__PURE__*/Object.freeze({\n getStylesheetString: getStylesheetString,\n getStylesheetComponent: getStylesheetComponent\n});\n\nvar getColors = function getColors(props) {\n var singleColor = props.singleColor,\n color1 = props.color1,\n color2 = props.color2,\n color3 = props.color3,\n color4 = props.color4;\n return singleColor ? [singleColor, singleColor, singleColor, singleColor] : [color1, color2, color3, color4];\n};\n\nvar getStyles = function getStyles(props) {\n var size = props.size;\n var duration = props.duration;\n var borderSize = props.borderSize;\n var borderWidth = borderSize || Math.max(1, Math.round(size * 0.107142));\n var colors = getColors(props);\n var arcSize = 270;\n var arcStartRotate = 216;\n var rootDuration = 360 * duration / (arcStartRotate + (360 - arcSize));\n var rootStyle = {\n display: \"inline-block\",\n position: \"relative\",\n width: size,\n height: size,\n verticalAlign: \"middle\",\n fontSize: \"0\",\n animation: \"\".concat(Keyframe.ROOT_ROTATE, \" \").concat(rootDuration, \"ms linear infinite\"),\n WebkitAnimation: \"\".concat(Keyframe.ROOT_ROTATE, \" \").concat(rootDuration, \"ms linear infinite\")\n };\n var layerStyles = colors.map(function (color, i) {\n return {\n boxSizing: \"border-box\",\n display: \"block\",\n position: \"absolute\",\n width: \"100%\",\n height: \"100%\",\n borderColor: color,\n whiteSpace: \"nowrap\",\n opacity: 1,\n animationName: \"\".concat(Keyframe.FILL_UNFILL_ROTATE, \", \").concat(Keyframe[\"LAYER_\".concat(i + 1, \"_FADE_IN_OUT\")]),\n WebkitAnimationName: \"\".concat(Keyframe.FILL_UNFILL_ROTATE, \", \").concat(Keyframe[\"LAYER_\".concat(i + 1, \"_FADE_IN_OUT\")]),\n animationDuration: \"\".concat(duration * colors.length, \"ms\"),\n WebkitAnimationDuration: \"\".concat(duration * colors.length, \"ms\"),\n animationTimingFunction: \"cubic-bezier(.4, 0, .2, 1)\",\n WebkitAnimationTimingFunction: \"cubic-bezier(.4, 0, .2, 1)\",\n animationIterationCount: \"infinite\",\n WebkitAnimationIterationCount: \"infinite\"\n };\n });\n var clipStyle = {\n display: \"inline-block\",\n boxSizing: \"border-box\",\n position: \"relative\",\n width: \"50%\",\n height: \"100%\",\n overflow: \"hidden\",\n borderColor: \"inherit\"\n };\n var layerClipAfterStyle = {\n display: \"inline-block\",\n boxSizing: \"border-box\",\n position: \"absolute\",\n top: 0,\n borderRadius: \"50%\"\n };\n\n var layerAfterStyle = _objectSpread({}, layerClipAfterStyle, {\n left: \"45%\",\n width: \"10%\",\n borderWidth: borderWidth,\n borderColor: \"inherit\",\n borderTopStyle: \"solid\"\n });\n\n var clipAfterStyle = _objectSpread({}, layerClipAfterStyle, {\n bottom: 0,\n width: \"200%\",\n borderWidth: borderWidth,\n borderStyle: \"solid\",\n animationDuration: \"\".concat(duration, \"ms\"),\n WebkitAnimationDuration: \"\".concat(duration, \"ms\"),\n animationTimingFunction: \"cubic-bezier(.4, 0, .2, 1)\",\n WebkitAnimationTimingFunction: \"cubic-bezier(.4, 0, .2, 1)\",\n animationIterationCount: \"infinite\",\n WebkitAnimationIterationCount: \"infinite\"\n });\n\n var clip1AfterStyle = _objectSpread({}, clipAfterStyle, {\n left: 0,\n transform: \"rotate(129deg)\",\n WebkitTransform: \"rotate(129deg)\",\n animationName: Keyframe.LEFT_SPIN,\n WebkitAnimationName: Keyframe.LEFT_SPIN\n });\n\n var clip1AfterStyles = colors.map(function (color) {\n return _objectSpread({}, clip1AfterStyle, {\n borderColor: \"\".concat(color, \" transparent transparent \").concat(color)\n });\n });\n\n var clip2AfterStyle = _objectSpread({}, clipAfterStyle, {\n left: \"-100%\",\n transform: \"rotate(-129deg)\",\n WebkitTransform: \"rotate(-129deg)\",\n animationName: Keyframe.RIGHT_SPIN,\n WebkitAnimationName: Keyframe.RIGHT_SPIN\n });\n\n var clip2AfterStyles = colors.map(function (color) {\n return _objectSpread({}, clip2AfterStyle, {\n borderColor: \"\".concat(color, \" \").concat(color, \" transparent transparent\")\n });\n });\n return {\n rootStyle: rootStyle,\n layerStyles: layerStyles,\n layerAfterStyle: layerAfterStyle,\n clipStyle: clipStyle,\n clip1AfterStyles: clip1AfterStyles,\n clip2AfterStyles: clip2AfterStyles\n };\n};\n\nvar injectStyles = function injectStyles(name, rules) {\n var el = document.createElement(\"style\");\n el.type = \"text/css\";\n el.setAttribute(\"data-\".concat(name), \"\");\n el.innerHTML = rules;\n document.head.appendChild(el);\n};\nvar uninjectStyles = function uninjectStyles(name) {\n var el = document.querySelector(\"[data-\".concat(name, \"]\"));\n\n if (el != null && el.parentNode != null) {\n el.parentNode.removeChild(el);\n }\n};\n\nvar MDSpinner =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(MDSpinner, _React$PureComponent);\n\n function MDSpinner() {\n _classCallCheck(this, MDSpinner);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(MDSpinner).apply(this, arguments));\n }\n\n _createClass(MDSpinner, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (MDSpinner.mountedInstanceCount < 1) {\n injectStyles(STYLE_DATA_NAME, keyframes);\n }\n\n MDSpinner.mountedInstanceCount++;\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n MDSpinner.mountedInstanceCount = Math.max(0, MDSpinner.mountedInstanceCount - 1);\n\n if (MDSpinner.mountedInstanceCount < 1) {\n uninjectStyles(STYLE_DATA_NAME);\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n _singleColor = _this$props.singleColor,\n _size = _this$props.size,\n _borderSize = _this$props.borderSize,\n _duration = _this$props.duration,\n _color1 = _this$props.color1,\n _color2 = _this$props.color2,\n _color3 = _this$props.color3,\n _color4 = _this$props.color4,\n rest = _objectWithoutProperties(_this$props, [\"singleColor\", \"size\", \"borderSize\", \"duration\", \"color1\", \"color2\", \"color3\", \"color4\"]);\n\n var _getStyles = getStyles(this.props),\n rootStyle = _getStyles.rootStyle,\n layerStyles = _getStyles.layerStyles,\n layerAfterStyle = _getStyles.layerAfterStyle,\n clipStyle = _getStyles.clipStyle,\n clip1AfterStyles = _getStyles.clip1AfterStyles,\n clip2AfterStyles = _getStyles.clip2AfterStyles;\n\n var layers = [];\n\n for (var i = 0; i < 4; i++) {\n layers.push(React.createElement(\"span\", {\n key: i,\n style: layerStyles[i]\n }, React.createElement(\"span\", {\n style: clipStyle\n }, React.createElement(\"span\", {\n style: clip1AfterStyles[i]\n })), React.createElement(\"span\", {\n style: clipStyle\n }, React.createElement(\"span\", {\n style: clip2AfterStyles[i]\n })), React.createElement(\"span\", {\n style: layerAfterStyle\n })));\n }\n\n return React.createElement(\"span\", _extends({}, rest, {\n style: _objectSpread({}, rootStyle, rest.style != null ? rest.style : {})\n }), layers);\n }\n }]);\n\n return MDSpinner;\n}(React.PureComponent);\n\n_defineProperty(MDSpinner, \"defaultProps\", {\n size: 28,\n duration: 1333,\n color1: \"rgb(66, 165, 245)\",\n color2: \"rgb(239, 83, 80)\",\n color3: \"rgb(253, 216, 53)\",\n color4: \"rgb(76, 175, 80)\"\n});\n\n_defineProperty(MDSpinner, \"mountedInstanceCount\", 0);\n\nexport default MDSpinner;\nexport { ssrBehavior };\n","import module from './index.js';\n\nexport default module;","import React, { useEffect, useState } from \"react\"\nimport { navigate } from \"gatsby\"\nimport { useSelector } from \"react-redux\"\nimport styled, { useTheme } from \"styled-components\"\nimport { BiLeftArrowAlt, BiRightArrowAlt } from \"react-icons/bi\"\nimport MDSpinner from \"react-md-spinner\"\nimport Divider from \"components/Divider\"\nimport Giscus from \"@giscus/react\"\n\nconst ArticleButtonContainer = styled.div`\n display: flex;\n justify-content: space-between;\n margin-bottom: 48px;\n\n @media (max-width: 768px) {\n margin-bottom: 80px;\n padding: 0 12.8px;\n flex-direction: column;\n\n & > div:first-child {\n margin-bottom: 12.8px;\n }\n }\n`\n\nconst ArrowFlexWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n white-space: nowrap;\n`\n\nconst ArticleButtonTextWrapper = styled.div`\n display: flex;\n align-items: flex-end;\n flex-direction: column;\n overflow: hidden;\n`\n\nconst Arrow = styled.div`\n position: relative;\n left: 0;\n display: flex;\n align-items: center;\n font-size: 24px;\n flex-basis: 24px;\n transition: left 0.3s;\n`\n\nconst ArticleButtonWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: ${props => (props.right ? \"flex-end\" : \"flex-start\")};\n padding: 20.8px 16px;\n max-width: 250px;\n flex-basis: 250px;\n font-size: 17.6px;\n border-radius: 5px;\n background-color: ${props => props.theme.colors.nextPostButtonBackground};\n color: ${props => props.theme.colors.text};\n cursor: pointer;\n transition: background-color 0.3s;\n\n &:hover {\n background-color: ${props =>\n props.theme.colors.hoveredNextPostButtonBackground};\n }\n\n & ${ArrowFlexWrapper} {\n flex-direction: ${props => (props.right ? \"row-reverse\" : \"row\")};\n }\n\n & ${ArticleButtonTextWrapper} {\n align-items: ${props => (props.right ? \"flex-end\" : \"flex-start\")};\n }\n\n & ${Arrow} {\n ${props => (props.right ? \"margin-left: 16px\" : \"margin-right: 16px\")};\n }\n\n &:hover ${Arrow} {\n left: ${props => (props.right ? 2 : -2)}px;\n }\n\n @media (max-width: 768px) {\n max-width: inherit;\n flex-basis: inherit;\n }\n`\n\nconst ArticleButtonLabel = styled.div`\n margin-bottom: 9.6px;\n font-size: 12.8px;\n`\n\nconst ArticleButtonTitle = styled.div`\n padding: 2px 0;\n width: 100%;\n text-overflow: ellipsis;\n overflow: hidden;\n`\n\nconst CommentWrapper = styled.div`\n @media (max-width: 768px) {\n padding: 0 15px;\n }\n`\n\nconst SpinnerWrapper = styled.div`\n height: 200px;\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\nconst HiddenWrapper = styled.div`\n height: ${props => (props.isHidden ? \"0px\" : \"auto\")};\n overflow: ${props => (props.isHidden ? \"hidden\" : \"auto\")};\n`\n\nconst ArticleButton = ({ right, children, onClick }) => {\n return (\n \n \n {right ? : }\n \n \n {right ? <>Next Post : <>Previous Post}\n \n {children}\n \n \n \n )\n}\n\nconst Spinner = () => {\n const theme = useTheme()\n return (\n \n \n \n )\n}\n\nconst Comment = ({title}) => {\n const { theme } = useSelector(state => state.theme)\n const [spinner, setSpinner] = useState(true)\n\n useEffect(() => {\n setTimeout(() => {\n setSpinner(false)\n }, 1500)\n }, [])\n\n return (\n <>\n {spinner && }\n\n \n \n \n \n \n \n \n \n \n )\n}\n\nconst Footer = ({ previous, next, title }) => {\n return (\n <>\n \n {previous ? (\n navigate(previous?.fields?.slug)}>\n {previous?.frontmatter?.title}\n \n ) : (\n
\n )}\n {next && (\n navigate(next?.fields?.slug)}>\n {next?.frontmatter?.title}\n \n )}\n
\n \n \n \n \n \n )\n}\n\nexport default Footer\n","import styled from \"styled-components\"\n\nimport Header from \"./Header\"\nimport Series from \"./Series\"\nimport Body from \"./Body\"\nimport Footer from \"./Footer\"\n\nconst Article = styled.article``\n\nArticle.Header = Header\nArticle.Series = Series\nArticle.Body = Body\nArticle.Footer = Footer\n\nexport default Article\n","import React from \"react\"\nimport SEO from \"components/SEO\"\nimport { graphql } from \"gatsby\"\n\nimport Layout from \"components/Layout\"\nimport Article from \"components/Article\"\n\nimport { siteUrl } from \"../../blog-config\"\n\nconst Post = ({ data }) => {\n const post = data.markdownRemark\n const { previous, next, seriesList } = data\n\n const { title, date, updated, tags, series } = post.frontmatter\n const { excerpt } = post\n const { readingTime, slug } = post.fields\n\n let filteredSeries = []\n if (series !== null) {\n filteredSeries = seriesList.edges.map(seriesPost => {\n if (seriesPost.node.id === post.id) {\n return {\n ...seriesPost.node,\n currentPost: true,\n }\n } else {\n return {\n ...seriesPost.node,\n currentPost: false,\n }\n }\n })\n }\n\n return (\n \n \n
\n \n {filteredSeries.length > 0 && (\n \n )}\n \n \n
\n
\n )\n}\n\nexport default Post\n\nexport const pageQuery = graphql`\n query BlogPostBySlug(\n $id: String!\n $series: String\n $previousPostId: String\n $nextPostId: String\n ) {\n site {\n siteMetadata {\n title\n }\n }\n markdownRemark(id: { eq: $id }) {\n id\n excerpt(pruneLength: 200, truncate: true)\n html\n frontmatter {\n title\n date(formatString: \"YYYY년 MM월 DD일 HH:MM\")\n updated(formatString: \"YYYY년 MM월 DD일 HH:MM\")\n tags\n series\n }\n fields {\n slug\n readingTime {\n minutes\n }\n }\n }\n seriesList: allMarkdownRemark(\n sort: { order: ASC, fields: [frontmatter___date] }\n filter: { frontmatter: { series: { eq: $series } } }\n ) {\n edges {\n node {\n id\n fields {\n slug\n }\n frontmatter {\n title\n }\n }\n }\n }\n previous: markdownRemark(id: { eq: $previousPostId }) {\n fields {\n slug\n }\n frontmatter {\n title\n }\n }\n next: markdownRemark(id: { eq: $nextPostId }) {\n fields {\n slug\n }\n frontmatter {\n title\n }\n }\n }\n`\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var toString = require('./toString');\n\n/**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\nfunction replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n}\n\nmodule.exports = replace;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _scrollLink = require('../mixins/scroll-link');\n\nvar _scrollLink2 = _interopRequireDefault(_scrollLink);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ButtonElement = function (_React$Component) {\n _inherits(ButtonElement, _React$Component);\n\n function ButtonElement() {\n _classCallCheck(this, ButtonElement);\n\n return _possibleConstructorReturn(this, (ButtonElement.__proto__ || Object.getPrototypeOf(ButtonElement)).apply(this, arguments));\n }\n\n _createClass(ButtonElement, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'input',\n this.props,\n this.props.children\n );\n }\n }]);\n\n return ButtonElement;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _scrollLink2.default)(ButtonElement);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _scrollElement = require('../mixins/scroll-element');\n\nvar _scrollElement2 = _interopRequireDefault(_scrollElement);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ElementWrapper = function (_React$Component) {\n _inherits(ElementWrapper, _React$Component);\n\n function ElementWrapper() {\n _classCallCheck(this, ElementWrapper);\n\n return _possibleConstructorReturn(this, (ElementWrapper.__proto__ || Object.getPrototypeOf(ElementWrapper)).apply(this, arguments));\n }\n\n _createClass(ElementWrapper, [{\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n // Remove `parentBindings` from props\n var newProps = _extends({}, this.props);\n if (newProps.parentBindings) {\n delete newProps.parentBindings;\n }\n\n return _react2.default.createElement(\n 'div',\n _extends({}, newProps, { ref: function ref(el) {\n _this2.props.parentBindings.domNode = el;\n } }),\n this.props.children\n );\n }\n }]);\n\n return ElementWrapper;\n}(_react2.default.Component);\n\n;\n\nElementWrapper.propTypes = {\n name: _propTypes2.default.string,\n id: _propTypes2.default.string\n};\n\nexports.default = (0, _scrollElement2.default)(ElementWrapper);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _scrollLink = require('../mixins/scroll-link');\n\nvar _scrollLink2 = _interopRequireDefault(_scrollLink);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LinkElement = function (_React$Component) {\n _inherits(LinkElement, _React$Component);\n\n function LinkElement() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, LinkElement);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = LinkElement.__proto__ || Object.getPrototypeOf(LinkElement)).call.apply(_ref, [this].concat(args))), _this), _this.render = function () {\n return _react2.default.createElement(\n 'a',\n _this.props,\n _this.props.children\n );\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n return LinkElement;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _scrollLink2.default)(LinkElement);","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Helpers = exports.ScrollElement = exports.ScrollLink = exports.animateScroll = exports.scrollSpy = exports.Events = exports.scroller = exports.Element = exports.Button = exports.Link = undefined;\n\nvar _Link = require('./components/Link.js');\n\nvar _Link2 = _interopRequireDefault(_Link);\n\nvar _Button = require('./components/Button.js');\n\nvar _Button2 = _interopRequireDefault(_Button);\n\nvar _Element = require('./components/Element.js');\n\nvar _Element2 = _interopRequireDefault(_Element);\n\nvar _scroller = require('./mixins/scroller.js');\n\nvar _scroller2 = _interopRequireDefault(_scroller);\n\nvar _scrollEvents = require('./mixins/scroll-events.js');\n\nvar _scrollEvents2 = _interopRequireDefault(_scrollEvents);\n\nvar _scrollSpy = require('./mixins/scroll-spy.js');\n\nvar _scrollSpy2 = _interopRequireDefault(_scrollSpy);\n\nvar _animateScroll = require('./mixins/animate-scroll.js');\n\nvar _animateScroll2 = _interopRequireDefault(_animateScroll);\n\nvar _scrollLink = require('./mixins/scroll-link.js');\n\nvar _scrollLink2 = _interopRequireDefault(_scrollLink);\n\nvar _scrollElement = require('./mixins/scroll-element.js');\n\nvar _scrollElement2 = _interopRequireDefault(_scrollElement);\n\nvar _Helpers = require('./mixins/Helpers.js');\n\nvar _Helpers2 = _interopRequireDefault(_Helpers);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Link = _Link2.default;\nexports.Button = _Button2.default;\nexports.Element = _Element2.default;\nexports.scroller = _scroller2.default;\nexports.Events = _scrollEvents2.default;\nexports.scrollSpy = _scrollSpy2.default;\nexports.animateScroll = _animateScroll2.default;\nexports.ScrollLink = _scrollLink2.default;\nexports.ScrollElement = _scrollElement2.default;\nexports.Helpers = _Helpers2.default;\nexports.default = { Link: _Link2.default, Button: _Button2.default, Element: _Element2.default, scroller: _scroller2.default, Events: _scrollEvents2.default, scrollSpy: _scrollSpy2.default, animateScroll: _animateScroll2.default, ScrollLink: _scrollLink2.default, ScrollElement: _scrollElement2.default, Helpers: _Helpers2.default };","\"use strict\";\n\n/* DEPRECATED */\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar React = require('react');\nvar ReactDOM = require('react-dom');\n\nvar utils = require('./utils');\nvar scrollSpy = require('./scroll-spy');\nvar defaultScroller = require('./scroller');\nvar PropTypes = require('prop-types');\nvar scrollHash = require('./scroll-hash');\n\nvar protoTypes = {\n to: PropTypes.string.isRequired,\n containerId: PropTypes.string,\n container: PropTypes.object,\n activeClass: PropTypes.string,\n spy: PropTypes.bool,\n smooth: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n offset: PropTypes.number,\n delay: PropTypes.number,\n isDynamic: PropTypes.bool,\n onClick: PropTypes.func,\n duration: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n absolute: PropTypes.bool,\n onSetActive: PropTypes.func,\n onSetInactive: PropTypes.func,\n ignoreCancelEvents: PropTypes.bool,\n hashSpy: PropTypes.bool,\n spyThrottle: PropTypes.number\n};\n\nvar Helpers = {\n Scroll: function Scroll(Component, customScroller) {\n\n console.warn(\"Helpers.Scroll is deprecated since v1.7.0\");\n\n var scroller = customScroller || defaultScroller;\n\n var Scroll = function (_React$Component) {\n _inherits(Scroll, _React$Component);\n\n function Scroll(props) {\n _classCallCheck(this, Scroll);\n\n var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, props));\n\n _initialiseProps.call(_this);\n\n _this.state = {\n active: false\n };\n return _this;\n }\n\n _createClass(Scroll, [{\n key: 'getScrollSpyContainer',\n value: function getScrollSpyContainer() {\n var containerId = this.props.containerId;\n var container = this.props.container;\n\n if (containerId) {\n return document.getElementById(containerId);\n }\n\n if (container && container.nodeType) {\n return container;\n }\n\n return document;\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.props.spy || this.props.hashSpy) {\n var scrollSpyContainer = this.getScrollSpyContainer();\n\n if (!scrollSpy.isMounted(scrollSpyContainer)) {\n scrollSpy.mount(scrollSpyContainer, this.props.spyThrottle);\n }\n\n if (this.props.hashSpy) {\n if (!scrollHash.isMounted()) {\n scrollHash.mount(scroller);\n }\n scrollHash.mapContainer(this.props.to, scrollSpyContainer);\n }\n\n if (this.props.spy) {\n scrollSpy.addStateHandler(this.stateHandler);\n }\n\n scrollSpy.addSpyHandler(this.spyHandler, scrollSpyContainer);\n\n this.setState({\n container: scrollSpyContainer\n });\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n scrollSpy.unmount(this.stateHandler, this.spyHandler);\n }\n }, {\n key: 'render',\n value: function render() {\n var className = \"\";\n\n if (this.state && this.state.active) {\n className = ((this.props.className || \"\") + \" \" + (this.props.activeClass || \"active\")).trim();\n } else {\n className = this.props.className;\n }\n\n var props = _extends({}, this.props);\n\n for (var prop in protoTypes) {\n if (props.hasOwnProperty(prop)) {\n delete props[prop];\n }\n }\n\n props.className = className;\n props.onClick = this.handleClick;\n\n return React.createElement(Component, props);\n }\n }]);\n\n return Scroll;\n }(React.Component);\n\n var _initialiseProps = function _initialiseProps() {\n var _this2 = this;\n\n this.scrollTo = function (to, props) {\n scroller.scrollTo(to, _extends({}, _this2.state, props));\n };\n\n this.handleClick = function (event) {\n\n /*\r\n * give the posibility to override onClick\r\n */\n\n if (_this2.props.onClick) {\n _this2.props.onClick(event);\n }\n\n /*\r\n * dont bubble the navigation\r\n */\n\n if (event.stopPropagation) event.stopPropagation();\n if (event.preventDefault) event.preventDefault();\n\n /*\r\n * do the magic!\r\n */\n _this2.scrollTo(_this2.props.to, _this2.props);\n };\n\n this.stateHandler = function () {\n if (scroller.getActiveLink() !== _this2.props.to) {\n if (_this2.state !== null && _this2.state.active && _this2.props.onSetInactive) {\n _this2.props.onSetInactive();\n }\n _this2.setState({ active: false });\n }\n };\n\n this.spyHandler = function (y) {\n\n var scrollSpyContainer = _this2.getScrollSpyContainer();\n\n if (scrollHash.isMounted() && !scrollHash.isInitialized()) {\n return;\n }\n\n var to = _this2.props.to;\n var element = null;\n var elemTopBound = 0;\n var elemBottomBound = 0;\n var containerTop = 0;\n\n if (scrollSpyContainer.getBoundingClientRect) {\n var containerCords = scrollSpyContainer.getBoundingClientRect();\n containerTop = containerCords.top;\n }\n\n if (!element || _this2.props.isDynamic) {\n element = scroller.get(to);\n if (!element) {\n return;\n }\n\n var cords = element.getBoundingClientRect();\n elemTopBound = cords.top - containerTop + y;\n elemBottomBound = elemTopBound + cords.height;\n }\n\n var offsetY = y - _this2.props.offset;\n var isInside = offsetY >= Math.floor(elemTopBound) && offsetY < Math.floor(elemBottomBound);\n var isOutside = offsetY < Math.floor(elemTopBound) || offsetY >= Math.floor(elemBottomBound);\n var activeLink = scroller.getActiveLink();\n\n if (isOutside) {\n if (to === activeLink) {\n scroller.setActiveLink(void 0);\n }\n\n if (_this2.props.hashSpy && scrollHash.getHash() === to) {\n scrollHash.changeHash();\n }\n\n if (_this2.props.spy && _this2.state.active) {\n _this2.setState({ active: false });\n _this2.props.onSetInactive && _this2.props.onSetInactive();\n }\n\n return scrollSpy.updateStates();\n }\n\n if (isInside && activeLink !== to) {\n scroller.setActiveLink(to);\n\n _this2.props.hashSpy && scrollHash.changeHash(to);\n\n if (_this2.props.spy) {\n _this2.setState({ active: true });\n _this2.props.onSetActive && _this2.props.onSetActive(to);\n }\n return scrollSpy.updateStates();\n }\n };\n };\n\n ;\n\n Scroll.propTypes = protoTypes;\n\n Scroll.defaultProps = { offset: 0 };\n\n return Scroll;\n },\n Element: function Element(Component) {\n\n console.warn(\"Helpers.Element is deprecated since v1.7.0\");\n\n var Element = function (_React$Component2) {\n _inherits(Element, _React$Component2);\n\n function Element(props) {\n _classCallCheck(this, Element);\n\n var _this3 = _possibleConstructorReturn(this, (Element.__proto__ || Object.getPrototypeOf(Element)).call(this, props));\n\n _this3.childBindings = {\n domNode: null\n };\n return _this3;\n }\n\n _createClass(Element, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (typeof window === 'undefined') {\n return false;\n }\n this.registerElems(this.props.name);\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n if (this.props.name !== prevProps.name) {\n this.registerElems(this.props.name);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (typeof window === 'undefined') {\n return false;\n }\n defaultScroller.unregister(this.props.name);\n }\n }, {\n key: 'registerElems',\n value: function registerElems(name) {\n defaultScroller.register(name, this.childBindings.domNode);\n }\n }, {\n key: 'render',\n value: function render() {\n return React.createElement(Component, _extends({}, this.props, { parentBindings: this.childBindings }));\n }\n }]);\n\n return Element;\n }(React.Component);\n\n ;\n\n Element.propTypes = {\n name: PropTypes.string,\n id: PropTypes.string\n };\n\n return Element;\n }\n};\n\nmodule.exports = Helpers;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _smooth = require('./smooth');\n\nvar _smooth2 = _interopRequireDefault(_smooth);\n\nvar _cancelEvents = require('./cancel-events');\n\nvar _cancelEvents2 = _interopRequireDefault(_cancelEvents);\n\nvar _scrollEvents = require('./scroll-events');\n\nvar _scrollEvents2 = _interopRequireDefault(_scrollEvents);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/*\r\n * Gets the easing type from the smooth prop within options.\r\n */\nvar getAnimationType = function getAnimationType(options) {\n return _smooth2.default[options.smooth] || _smooth2.default.defaultEasing;\n};\n/*\r\n * Function helper\r\n */\nvar functionWrapper = function functionWrapper(value) {\n return typeof value === 'function' ? value : function () {\n return value;\n };\n};\n/*\r\n * Wraps window properties to allow server side rendering\r\n */\nvar currentWindowProperties = function currentWindowProperties() {\n if (typeof window !== 'undefined') {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame;\n }\n};\n\n/*\r\n * Helper function to never extend 60fps on the webpage.\r\n */\nvar requestAnimationFrameHelper = function () {\n return currentWindowProperties() || function (callback, element, delay) {\n window.setTimeout(callback, delay || 1000 / 60, new Date().getTime());\n };\n}();\n\nvar makeData = function makeData() {\n return {\n currentPosition: 0,\n startPosition: 0,\n targetPosition: 0,\n progress: 0,\n duration: 0,\n cancel: false,\n\n target: null,\n containerElement: null,\n to: null,\n start: null,\n delta: null,\n percent: null,\n delayTimeout: null\n };\n};\n\nvar currentPositionX = function currentPositionX(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollLeft;\n } else {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;\n }\n};\n\nvar currentPositionY = function currentPositionY(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollTop;\n } else {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;\n }\n};\n\nvar scrollContainerWidth = function scrollContainerWidth(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollWidth - containerElement.offsetWidth;\n } else {\n var body = document.body;\n var html = document.documentElement;\n\n return Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth);\n }\n};\n\nvar scrollContainerHeight = function scrollContainerHeight(options) {\n var containerElement = options.data.containerElement;\n if (containerElement && containerElement !== document && containerElement !== document.body) {\n return containerElement.scrollHeight - containerElement.offsetHeight;\n } else {\n var body = document.body;\n var html = document.documentElement;\n\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n};\n\nvar animateScroll = function animateScroll(easing, options, timestamp) {\n var data = options.data;\n\n // Cancel on specific events\n if (!options.ignoreCancelEvents && data.cancel) {\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](data.to, data.target, data.currentPositionY);\n }\n return;\n };\n\n data.delta = Math.round(data.targetPosition - data.startPosition);\n\n if (data.start === null) {\n data.start = timestamp;\n }\n\n data.progress = timestamp - data.start;\n\n data.percent = data.progress >= data.duration ? 1 : easing(data.progress / data.duration);\n\n data.currentPosition = data.startPosition + Math.ceil(data.delta * data.percent);\n\n if (data.containerElement && data.containerElement !== document && data.containerElement !== document.body) {\n if (options.horizontal) {\n data.containerElement.scrollLeft = data.currentPosition;\n } else {\n data.containerElement.scrollTop = data.currentPosition;\n }\n } else {\n if (options.horizontal) {\n window.scrollTo(data.currentPosition, 0);\n } else {\n window.scrollTo(0, data.currentPosition);\n }\n }\n\n if (data.percent < 1) {\n var easedAnimate = animateScroll.bind(null, easing, options);\n requestAnimationFrameHelper.call(window, easedAnimate);\n return;\n }\n\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](data.to, data.target, data.currentPosition);\n }\n};\n\nvar setContainer = function setContainer(options) {\n options.data.containerElement = !options ? null : options.containerId ? document.getElementById(options.containerId) : options.container && options.container.nodeType ? options.container : document;\n};\n\nvar animateTopScroll = function animateTopScroll(scrollOffset, options, to, target) {\n options.data = options.data || makeData();\n\n window.clearTimeout(options.data.delayTimeout);\n\n _cancelEvents2.default.subscribe(function () {\n options.data.cancel = true;\n });\n\n setContainer(options);\n\n options.data.start = null;\n options.data.cancel = false;\n options.data.startPosition = options.horizontal ? currentPositionX(options) : currentPositionY(options);\n options.data.targetPosition = options.absolute ? scrollOffset : scrollOffset + options.data.startPosition;\n\n if (options.data.startPosition === options.data.targetPosition) {\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](options.data.to, options.data.target, options.data.currentPosition);\n }\n return;\n }\n\n options.data.delta = Math.round(options.data.targetPosition - options.data.startPosition);\n\n options.data.duration = functionWrapper(options.duration)(options.data.delta);\n options.data.duration = isNaN(parseFloat(options.data.duration)) ? 1000 : parseFloat(options.data.duration);\n options.data.to = to;\n options.data.target = target;\n\n var easing = getAnimationType(options);\n var easedAnimate = animateScroll.bind(null, easing, options);\n\n if (options && options.delay > 0) {\n options.data.delayTimeout = window.setTimeout(function () {\n if (_scrollEvents2.default.registered['begin']) {\n _scrollEvents2.default.registered['begin'](options.data.to, options.data.target);\n }\n requestAnimationFrameHelper.call(window, easedAnimate);\n }, options.delay);\n return;\n }\n\n if (_scrollEvents2.default.registered['begin']) {\n _scrollEvents2.default.registered['begin'](options.data.to, options.data.target);\n }\n requestAnimationFrameHelper.call(window, easedAnimate);\n};\n\nvar proceedOptions = function proceedOptions(options) {\n options = _extends({}, options);\n options.data = options.data || makeData();\n options.absolute = true;\n return options;\n};\n\nvar scrollToTop = function scrollToTop(options) {\n animateTopScroll(0, proceedOptions(options));\n};\n\nvar scrollTo = function scrollTo(toPosition, options) {\n animateTopScroll(toPosition, proceedOptions(options));\n};\n\nvar scrollToBottom = function scrollToBottom(options) {\n options = proceedOptions(options);\n setContainer(options);\n animateTopScroll(options.horizontal ? scrollContainerWidth(options) : scrollContainerHeight(options), options);\n};\n\nvar scrollMore = function scrollMore(toPosition, options) {\n options = proceedOptions(options);\n setContainer(options);\n var currentPosition = options.horizontal ? currentPositionX(options) : currentPositionY(options);\n animateTopScroll(toPosition + currentPosition, options);\n};\n\nexports.default = {\n animateTopScroll: animateTopScroll,\n getAnimationType: getAnimationType,\n scrollToTop: scrollToTop,\n scrollToBottom: scrollToBottom,\n scrollTo: scrollTo,\n scrollMore: scrollMore\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _passiveEventListeners = require('./passive-event-listeners');\n\nvar events = ['mousedown', 'mousewheel', 'touchmove', 'keydown'];\n\nexports.default = {\n subscribe: function subscribe(cancelEvent) {\n return typeof document !== 'undefined' && events.forEach(function (event) {\n return (0, _passiveEventListeners.addPassiveEventListener)(document, event, cancelEvent);\n });\n }\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/*\r\n * Tell the browser that the event listener won't prevent a scroll.\r\n * Allowing the browser to continue scrolling without having to\r\n * to wait for the listener to return.\r\n */\nvar addPassiveEventListener = exports.addPassiveEventListener = function addPassiveEventListener(target, eventName, listener) {\n var supportsPassiveOption = function () {\n var supportsPassiveOption = false;\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassiveOption = true;\n }\n });\n window.addEventListener('test', null, opts);\n } catch (e) {}\n return supportsPassiveOption;\n }();\n target.addEventListener(eventName, listener, supportsPassiveOption ? { passive: true } : false);\n};\n\nvar removePassiveEventListener = exports.removePassiveEventListener = function removePassiveEventListener(target, eventName, listener) {\n target.removeEventListener(eventName, listener);\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _scroller = require('./scroller');\n\nvar _scroller2 = _interopRequireDefault(_scroller);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nexports.default = function (Component) {\n var Element = function (_React$Component) {\n _inherits(Element, _React$Component);\n\n function Element(props) {\n _classCallCheck(this, Element);\n\n var _this = _possibleConstructorReturn(this, (Element.__proto__ || Object.getPrototypeOf(Element)).call(this, props));\n\n _this.childBindings = {\n domNode: null\n };\n return _this;\n }\n\n _createClass(Element, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (typeof window === 'undefined') {\n return false;\n }\n this.registerElems(this.props.name);\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n if (this.props.name !== prevProps.name) {\n this.registerElems(this.props.name);\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n if (typeof window === 'undefined') {\n return false;\n }\n _scroller2.default.unregister(this.props.name);\n }\n }, {\n key: 'registerElems',\n value: function registerElems(name) {\n _scroller2.default.register(name, this.childBindings.domNode);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(Component, _extends({}, this.props, { parentBindings: this.childBindings }));\n }\n }]);\n\n return Element;\n }(_react2.default.Component);\n\n ;\n\n Element.propTypes = {\n name: _propTypes2.default.string,\n id: _propTypes2.default.string\n };\n\n return Element;\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar Events = {\n\tregistered: {},\n\tscrollEvent: {\n\t\tregister: function register(evtName, callback) {\n\t\t\tEvents.registered[evtName] = callback;\n\t\t},\n\t\tremove: function remove(evtName) {\n\t\t\tEvents.registered[evtName] = null;\n\t\t}\n\t}\n};\n\nexports.default = Events;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _passiveEventListeners = require('./passive-event-listeners');\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar scrollHash = {\n mountFlag: false,\n initialized: false,\n scroller: null,\n containers: {},\n\n mount: function mount(scroller) {\n this.scroller = scroller;\n\n this.handleHashChange = this.handleHashChange.bind(this);\n window.addEventListener('hashchange', this.handleHashChange);\n\n this.initStateFromHash();\n this.mountFlag = true;\n },\n mapContainer: function mapContainer(to, container) {\n this.containers[to] = container;\n },\n isMounted: function isMounted() {\n return this.mountFlag;\n },\n isInitialized: function isInitialized() {\n return this.initialized;\n },\n initStateFromHash: function initStateFromHash() {\n var _this = this;\n\n var hash = this.getHash();\n if (hash) {\n window.setTimeout(function () {\n _this.scrollTo(hash, true);\n _this.initialized = true;\n }, 10);\n } else {\n this.initialized = true;\n }\n },\n scrollTo: function scrollTo(to, isInit) {\n var scroller = this.scroller;\n var element = scroller.get(to);\n if (element && (isInit || to !== scroller.getActiveLink())) {\n var container = this.containers[to] || document;\n scroller.scrollTo(to, { container: container });\n }\n },\n getHash: function getHash() {\n return _utils2.default.getHash();\n },\n changeHash: function changeHash(to, saveHashHistory) {\n if (this.isInitialized() && _utils2.default.getHash() !== to) {\n _utils2.default.updateHash(to, saveHashHistory);\n }\n },\n handleHashChange: function handleHashChange() {\n this.scrollTo(this.getHash());\n },\n unmount: function unmount() {\n this.scroller = null;\n this.containers = null;\n window.removeEventListener('hashchange', this.handleHashChange);\n }\n};\n\nexports.default = scrollHash;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _scrollSpy = require('./scroll-spy');\n\nvar _scrollSpy2 = _interopRequireDefault(_scrollSpy);\n\nvar _scroller = require('./scroller');\n\nvar _scroller2 = _interopRequireDefault(_scroller);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _scrollHash = require('./scroll-hash');\n\nvar _scrollHash2 = _interopRequireDefault(_scrollHash);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar protoTypes = {\n to: _propTypes2.default.string.isRequired,\n containerId: _propTypes2.default.string,\n container: _propTypes2.default.object,\n activeClass: _propTypes2.default.string,\n activeStyle: _propTypes2.default.object,\n spy: _propTypes2.default.bool,\n horizontal: _propTypes2.default.bool,\n smooth: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.string]),\n offset: _propTypes2.default.number,\n delay: _propTypes2.default.number,\n isDynamic: _propTypes2.default.bool,\n onClick: _propTypes2.default.func,\n duration: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.func]),\n absolute: _propTypes2.default.bool,\n onSetActive: _propTypes2.default.func,\n onSetInactive: _propTypes2.default.func,\n ignoreCancelEvents: _propTypes2.default.bool,\n hashSpy: _propTypes2.default.bool,\n saveHashHistory: _propTypes2.default.bool,\n spyThrottle: _propTypes2.default.number\n};\n\nexports.default = function (Component, customScroller) {\n\n var scroller = customScroller || _scroller2.default;\n\n var Link = function (_React$PureComponent) {\n _inherits(Link, _React$PureComponent);\n\n function Link(props) {\n _classCallCheck(this, Link);\n\n var _this = _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).call(this, props));\n\n _initialiseProps.call(_this);\n\n _this.state = {\n active: false\n };\n return _this;\n }\n\n _createClass(Link, [{\n key: 'getScrollSpyContainer',\n value: function getScrollSpyContainer() {\n var containerId = this.props.containerId;\n var container = this.props.container;\n\n if (containerId && !container) {\n return document.getElementById(containerId);\n }\n\n if (container && container.nodeType) {\n return container;\n }\n\n return document;\n }\n }, {\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.props.spy || this.props.hashSpy) {\n var scrollSpyContainer = this.getScrollSpyContainer();\n\n if (!_scrollSpy2.default.isMounted(scrollSpyContainer)) {\n _scrollSpy2.default.mount(scrollSpyContainer, this.props.spyThrottle);\n }\n\n if (this.props.hashSpy) {\n if (!_scrollHash2.default.isMounted()) {\n _scrollHash2.default.mount(scroller);\n }\n _scrollHash2.default.mapContainer(this.props.to, scrollSpyContainer);\n }\n\n _scrollSpy2.default.addSpyHandler(this.spyHandler, scrollSpyContainer);\n\n this.setState({\n container: scrollSpyContainer\n });\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n _scrollSpy2.default.unmount(this.stateHandler, this.spyHandler);\n }\n }, {\n key: 'render',\n value: function render() {\n var className = \"\";\n\n if (this.state && this.state.active) {\n className = ((this.props.className || \"\") + \" \" + (this.props.activeClass || \"active\")).trim();\n } else {\n className = this.props.className;\n }\n\n var style = {};\n\n if (this.state && this.state.active) {\n style = _extends({}, this.props.style, this.props.activeStyle);\n } else {\n style = _extends({}, this.props.style);\n }\n\n var props = _extends({}, this.props);\n\n for (var prop in protoTypes) {\n if (props.hasOwnProperty(prop)) {\n delete props[prop];\n }\n }\n\n props.className = className;\n props.style = style;\n props.onClick = this.handleClick;\n\n return _react2.default.createElement(Component, props);\n }\n }]);\n\n return Link;\n }(_react2.default.PureComponent);\n\n var _initialiseProps = function _initialiseProps() {\n var _this2 = this;\n\n this.scrollTo = function (to, props) {\n scroller.scrollTo(to, _extends({}, _this2.state, props));\n };\n\n this.handleClick = function (event) {\n\n /*\r\n * give the posibility to override onClick\r\n */\n\n if (_this2.props.onClick) {\n _this2.props.onClick(event);\n }\n\n /*\r\n * dont bubble the navigation\r\n */\n\n if (event.stopPropagation) event.stopPropagation();\n if (event.preventDefault) event.preventDefault();\n\n /*\r\n * do the magic!\r\n */\n _this2.scrollTo(_this2.props.to, _this2.props);\n };\n\n this.spyHandler = function (x, y) {\n var scrollSpyContainer = _this2.getScrollSpyContainer();\n\n if (_scrollHash2.default.isMounted() && !_scrollHash2.default.isInitialized()) {\n return;\n }\n\n var horizontal = _this2.props.horizontal;\n\n var to = _this2.props.to;\n var element = null;\n var isInside = void 0;\n var isOutside = void 0;\n\n if (horizontal) {\n var elemLeftBound = 0;\n var elemRightBound = 0;\n var containerLeft = 0;\n\n if (scrollSpyContainer.getBoundingClientRect) {\n var containerCords = scrollSpyContainer.getBoundingClientRect();\n containerLeft = containerCords.left;\n }\n\n if (!element || _this2.props.isDynamic) {\n element = scroller.get(to);\n if (!element) {\n return;\n }\n\n var cords = element.getBoundingClientRect();\n elemLeftBound = cords.left - containerLeft + x;\n elemRightBound = elemLeftBound + cords.width;\n }\n\n var offsetX = x - _this2.props.offset;\n isInside = offsetX >= Math.floor(elemLeftBound) && offsetX < Math.floor(elemRightBound);\n isOutside = offsetX < Math.floor(elemLeftBound) || offsetX >= Math.floor(elemRightBound);\n } else {\n var elemTopBound = 0;\n var elemBottomBound = 0;\n var containerTop = 0;\n\n if (scrollSpyContainer.getBoundingClientRect) {\n var _containerCords = scrollSpyContainer.getBoundingClientRect();\n containerTop = _containerCords.top;\n }\n\n if (!element || _this2.props.isDynamic) {\n element = scroller.get(to);\n if (!element) {\n return;\n }\n\n var _cords = element.getBoundingClientRect();\n elemTopBound = _cords.top - containerTop + y;\n elemBottomBound = elemTopBound + _cords.height;\n }\n\n var offsetY = y - _this2.props.offset;\n isInside = offsetY >= Math.floor(elemTopBound) && offsetY < Math.floor(elemBottomBound);\n isOutside = offsetY < Math.floor(elemTopBound) || offsetY >= Math.floor(elemBottomBound);\n }\n\n var activeLink = scroller.getActiveLink();\n\n if (isOutside) {\n if (to === activeLink) {\n scroller.setActiveLink(void 0);\n }\n\n if (_this2.props.hashSpy && _scrollHash2.default.getHash() === to) {\n var _props$saveHashHistor = _this2.props.saveHashHistory,\n saveHashHistory = _props$saveHashHistor === undefined ? false : _props$saveHashHistor;\n\n _scrollHash2.default.changeHash(\"\", saveHashHistory);\n }\n\n if (_this2.props.spy && _this2.state.active) {\n _this2.setState({ active: false });\n _this2.props.onSetInactive && _this2.props.onSetInactive(to, element);\n }\n }\n\n if (isInside && (activeLink !== to || _this2.state.active === false)) {\n scroller.setActiveLink(to);\n\n var _props$saveHashHistor2 = _this2.props.saveHashHistory,\n _saveHashHistory = _props$saveHashHistor2 === undefined ? false : _props$saveHashHistor2;\n\n _this2.props.hashSpy && _scrollHash2.default.changeHash(to, _saveHashHistory);\n\n if (_this2.props.spy) {\n _this2.setState({ active: true });\n _this2.props.onSetActive && _this2.props.onSetActive(to, element);\n }\n }\n };\n };\n\n ;\n\n Link.propTypes = protoTypes;\n\n Link.defaultProps = { offset: 0 };\n\n return Link;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _lodash = require('lodash.throttle');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _passiveEventListeners = require('./passive-event-listeners');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// The eventHandler will execute at a rate of 15fps by default\nvar eventThrottler = function eventThrottler(eventHandler) {\n var throttleAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 66;\n return (0, _lodash2.default)(eventHandler, throttleAmount);\n};\n\nvar scrollSpy = {\n\n spyCallbacks: [],\n spySetState: [],\n scrollSpyContainers: [],\n\n mount: function mount(scrollSpyContainer, throttle) {\n if (scrollSpyContainer) {\n var eventHandler = eventThrottler(function (event) {\n scrollSpy.scrollHandler(scrollSpyContainer);\n }, throttle);\n scrollSpy.scrollSpyContainers.push(scrollSpyContainer);\n (0, _passiveEventListeners.addPassiveEventListener)(scrollSpyContainer, 'scroll', eventHandler);\n }\n },\n isMounted: function isMounted(scrollSpyContainer) {\n return scrollSpy.scrollSpyContainers.indexOf(scrollSpyContainer) !== -1;\n },\n currentPositionX: function currentPositionX(scrollSpyContainer) {\n if (scrollSpyContainer === document) {\n var supportPageOffset = window.pageYOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;\n } else {\n return scrollSpyContainer.scrollLeft;\n }\n },\n currentPositionY: function currentPositionY(scrollSpyContainer) {\n if (scrollSpyContainer === document) {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (document.compatMode || \"\") === \"CSS1Compat\";\n return supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;\n } else {\n return scrollSpyContainer.scrollTop;\n }\n },\n scrollHandler: function scrollHandler(scrollSpyContainer) {\n var callbacks = scrollSpy.scrollSpyContainers[scrollSpy.scrollSpyContainers.indexOf(scrollSpyContainer)].spyCallbacks || [];\n callbacks.forEach(function (c) {\n return c(scrollSpy.currentPositionX(scrollSpyContainer), scrollSpy.currentPositionY(scrollSpyContainer));\n });\n },\n addStateHandler: function addStateHandler(handler) {\n scrollSpy.spySetState.push(handler);\n },\n addSpyHandler: function addSpyHandler(handler, scrollSpyContainer) {\n var container = scrollSpy.scrollSpyContainers[scrollSpy.scrollSpyContainers.indexOf(scrollSpyContainer)];\n\n if (!container.spyCallbacks) {\n container.spyCallbacks = [];\n }\n\n container.spyCallbacks.push(handler);\n\n handler(scrollSpy.currentPositionX(scrollSpyContainer), scrollSpy.currentPositionY(scrollSpyContainer));\n },\n updateStates: function updateStates() {\n scrollSpy.spySetState.forEach(function (s) {\n return s();\n });\n },\n unmount: function unmount(stateHandler, spyHandler) {\n scrollSpy.scrollSpyContainers.forEach(function (c) {\n return c.spyCallbacks && c.spyCallbacks.length && c.spyCallbacks.indexOf(spyHandler) > -1 && c.spyCallbacks.splice(c.spyCallbacks.indexOf(spyHandler), 1);\n });\n\n if (scrollSpy.spySetState && scrollSpy.spySetState.length && scrollSpy.spySetState.indexOf(stateHandler) > -1) {\n scrollSpy.spySetState.splice(scrollSpy.spySetState.indexOf(stateHandler), 1);\n }\n\n document.removeEventListener('scroll', scrollSpy.scrollHandler);\n },\n\n\n update: function update() {\n return scrollSpy.scrollSpyContainers.forEach(function (c) {\n return scrollSpy.scrollHandler(c);\n });\n }\n};\n\nexports.default = scrollSpy;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _utils = require('./utils');\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _animateScroll = require('./animate-scroll');\n\nvar _animateScroll2 = _interopRequireDefault(_animateScroll);\n\nvar _scrollEvents = require('./scroll-events');\n\nvar _scrollEvents2 = _interopRequireDefault(_scrollEvents);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar __mapped = {};\nvar __activeLink = void 0;\n\nexports.default = {\n\n unmount: function unmount() {\n __mapped = {};\n },\n\n register: function register(name, element) {\n __mapped[name] = element;\n },\n\n unregister: function unregister(name) {\n delete __mapped[name];\n },\n\n get: function get(name) {\n return __mapped[name] || document.getElementById(name) || document.getElementsByName(name)[0] || document.getElementsByClassName(name)[0];\n },\n\n setActiveLink: function setActiveLink(link) {\n return __activeLink = link;\n },\n\n getActiveLink: function getActiveLink() {\n return __activeLink;\n },\n\n scrollTo: function scrollTo(to, props) {\n\n var target = this.get(to);\n\n if (!target) {\n console.warn(\"target Element not found\");\n return;\n }\n\n props = _extends({}, props, { absolute: false });\n\n var containerId = props.containerId;\n var container = props.container;\n\n var containerElement = void 0;\n if (containerId) {\n containerElement = document.getElementById(containerId);\n } else if (container && container.nodeType) {\n containerElement = container;\n } else {\n containerElement = document;\n }\n\n props.absolute = true;\n\n var horizontal = props.horizontal;\n var scrollOffset = _utils2.default.scrollOffset(containerElement, target, horizontal) + (props.offset || 0);\n\n /*\r\n * if animate is not provided just scroll into the view\r\n */\n if (!props.smooth) {\n if (_scrollEvents2.default.registered['begin']) {\n _scrollEvents2.default.registered['begin'](to, target);\n }\n\n if (containerElement === document) {\n if (props.horizontal) {\n window.scrollTo(scrollOffset, 0);\n } else {\n window.scrollTo(0, scrollOffset);\n }\n } else {\n containerElement.scrollTop = scrollOffset;\n }\n\n if (_scrollEvents2.default.registered['end']) {\n _scrollEvents2.default.registered['end'](to, target);\n }\n\n return;\n }\n\n /*\r\n * Animate scrolling\r\n */\n\n _animateScroll2.default.animateTopScroll(scrollOffset, props, to, target);\n }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = {\n /*\r\n * https://github.com/oblador/angular-scroll (duScrollDefaultEasing)\r\n */\n defaultEasing: function defaultEasing(x) {\n if (x < 0.5) {\n return Math.pow(x * 2, 2) / 2;\n }\n return 1 - Math.pow((1 - x) * 2, 2) / 2;\n },\n /*\r\n * https://gist.github.com/gre/1650294\r\n */\n // no easing, no acceleration\n linear: function linear(x) {\n return x;\n },\n // accelerating from zero velocity\n easeInQuad: function easeInQuad(x) {\n return x * x;\n },\n // decelerating to zero velocity\n easeOutQuad: function easeOutQuad(x) {\n return x * (2 - x);\n },\n // acceleration until halfway, then deceleration\n easeInOutQuad: function easeInOutQuad(x) {\n return x < .5 ? 2 * x * x : -1 + (4 - 2 * x) * x;\n },\n // accelerating from zero velocity \n easeInCubic: function easeInCubic(x) {\n return x * x * x;\n },\n // decelerating to zero velocity π\n easeOutCubic: function easeOutCubic(x) {\n return --x * x * x + 1;\n },\n // acceleration until halfway, then deceleration \n easeInOutCubic: function easeInOutCubic(x) {\n return x < .5 ? 4 * x * x * x : (x - 1) * (2 * x - 2) * (2 * x - 2) + 1;\n },\n // accelerating from zero velocity \n easeInQuart: function easeInQuart(x) {\n return x * x * x * x;\n },\n // decelerating to zero velocity \n easeOutQuart: function easeOutQuart(x) {\n return 1 - --x * x * x * x;\n },\n // acceleration until halfway, then deceleration\n easeInOutQuart: function easeInOutQuart(x) {\n return x < .5 ? 8 * x * x * x * x : 1 - 8 * --x * x * x * x;\n },\n // accelerating from zero velocity\n easeInQuint: function easeInQuint(x) {\n return x * x * x * x * x;\n },\n // decelerating to zero velocity\n easeOutQuint: function easeOutQuint(x) {\n return 1 + --x * x * x * x * x;\n },\n // acceleration until halfway, then deceleration \n easeInOutQuint: function easeInOutQuint(x) {\n return x < .5 ? 16 * x * x * x * x * x : 1 + 16 * --x * x * x * x * x;\n }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar updateHash = function updateHash(hash, historyUpdate) {\n var hashVal = hash.indexOf(\"#\") === 0 ? hash.substring(1) : hash;\n var hashToUpdate = hashVal ? \"#\" + hashVal : \"\";\n var curLoc = window && window.location;\n var urlToPush = hashToUpdate ? curLoc.pathname + curLoc.search + hashToUpdate : curLoc.pathname + curLoc.search;\n historyUpdate ? history.pushState(history.state, \"\", urlToPush) : history.replaceState(history.state, \"\", urlToPush);\n};\n\nvar getHash = function getHash() {\n return window.location.hash.replace(/^#/, \"\");\n};\n\nvar filterElementInContainer = function filterElementInContainer(container) {\n return function (element) {\n return container.contains ? container != element && container.contains(element) : !!(container.compareDocumentPosition(element) & 16);\n };\n};\n\nvar isPositioned = function isPositioned(element) {\n return getComputedStyle(element).position !== \"static\";\n};\n\nvar getElementOffsetInfoUntil = function getElementOffsetInfoUntil(element, predicate) {\n var offsetTop = element.offsetTop;\n var currentOffsetParent = element.offsetParent;\n\n while (currentOffsetParent && !predicate(currentOffsetParent)) {\n offsetTop += currentOffsetParent.offsetTop;\n currentOffsetParent = currentOffsetParent.offsetParent;\n }\n\n return { offsetTop: offsetTop, offsetParent: currentOffsetParent };\n};\n\nvar scrollOffset = function scrollOffset(c, t, horizontal) {\n if (horizontal) {\n return c === document ? t.getBoundingClientRect().left + (window.scrollX || window.pageXOffset) : getComputedStyle(c).position !== \"static\" ? t.offsetLeft : t.offsetLeft - c.offsetLeft;\n } else {\n if (c === document) {\n return t.getBoundingClientRect().top + (window.scrollY || window.pageYOffset);\n }\n\n // The offsetParent of an element, according to MDN, is its nearest positioned\n // (an element whose position is anything other than static) ancestor. The offsetTop\n // of an element is taken with respect to its offsetParent which may not neccessarily\n // be its parentElement except the parent itself is positioned.\n\n // So if containerElement is positioned, then it must be an offsetParent somewhere\n // If it happens that targetElement is a descendant of the containerElement, and there\n // is not intermediate positioned element between the two of them, i.e.\n // targetElement\"s offsetParent is the same as the containerElement, then the\n // distance between the two will be the offsetTop of the targetElement.\n // If, on the other hand, there are intermediate positioned elements between the\n // two entities, the distance between the targetElement and the containerElement\n // will be the accumulation of the offsetTop of the element and that of its\n // subsequent offsetParent until the containerElement is reached, since it\n // will also be an offsetParent at some point due to the fact that it is positioned.\n\n // If the containerElement is not positioned, then it can\"t be an offsetParent,\n // which means that the offsetTop of the targetElement would not be with respect to it.\n // However, if the two of them happen to have the same offsetParent, then\n // the distance between them will be the difference between their offsetTop\n // since they are both taken with respect to the same entity.\n // The last resort would be to accumulate their offsetTop until a common\n // offsetParent is reached (usually the document) and taking the difference\n // between the accumulated offsetTops\n\n if (isPositioned(c)) {\n if (t.offsetParent !== c) {\n var isContainerElementOrDocument = function isContainerElementOrDocument(e) {\n return e === c || e === document;\n };\n\n var _getElementOffsetInfo = getElementOffsetInfoUntil(t, isContainerElementOrDocument),\n offsetTop = _getElementOffsetInfo.offsetTop,\n offsetParent = _getElementOffsetInfo.offsetParent;\n\n if (offsetParent !== c) {\n throw new Error(\"Seems containerElement is not an ancestor of the Element\");\n }\n\n return offsetTop;\n }\n\n return t.offsetTop;\n }\n\n if (t.offsetParent === c.offsetParent) {\n return t.offsetTop - c.offsetTop;\n }\n\n var isDocument = function isDocument(e) {\n return e === document;\n };\n return getElementOffsetInfoUntil(t, isDocument).offsetTop - getElementOffsetInfoUntil(c, isDocument).offsetTop;\n }\n};\n\nexports.default = {\n updateHash: updateHash,\n getHash: getHash,\n filterElementInContainer: filterElementInContainer,\n scrollOffset: scrollOffset\n};","/*\n * __ ___\n * _____/ /___ __/ (_)____\n * / ___/ __/ / / / / / ___/\n * (__ ) /_/ /_/ / / (__ )\n * /____/\\__/\\__, /_/_/____/\n * /____/\n *\n * light - weight css preprocessor @licence MIT\n */\n(function (factory) {/* eslint-disable */\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory(null)) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory(null)) :\n\t\t\t(window['stylis'] = factory(null))\n}(/** @param {*=} options */function factory (options) {/* eslint-disable */\n\n\t'use strict'\n\n\t/**\n\t * Notes\n\t *\n\t * The [''] pattern is used to support closure compiler\n\t * the jsdoc signatures are also used to the same effect\n\t *\n\t * ----\n\t *\n\t * int + int + int === n4 [faster]\n\t *\n\t * vs\n\t *\n\t * int === n1 && int === n2 && int === n3\n\t *\n\t * ----\n\t *\n\t * switch (int) { case ints...} [faster]\n\t *\n\t * vs\n\t *\n\t * if (int == 1 && int === 2 ...)\n\t *\n\t * ----\n\t *\n\t * The (first*n1 + second*n2 + third*n3) format used in the property parser\n\t * is a simple way to hash the sequence of characters\n\t * taking into account the index they occur in\n\t * since any number of 3 character sequences could produce duplicates.\n\t *\n\t * On the other hand sequences that are directly tied to the index of the character\n\t * resolve a far more accurate measure, it's also faster\n\t * to evaluate one condition in a switch statement\n\t * than three in an if statement regardless of the added math.\n\t *\n\t * This allows the vendor prefixer to be both small and fast.\n\t */\n\n\tvar nullptn = /^\\0+/g /* matches leading null characters */\n\tvar formatptn = /[\\0\\r\\f]/g /* matches new line, null and formfeed characters */\n\tvar colonptn = /: */g /* splits animation rules */\n\tvar cursorptn = /zoo|gra/ /* assert cursor varient */\n\tvar transformptn = /([,: ])(transform)/g /* vendor prefix transform, older webkit */\n\tvar animationptn = /,+\\s*(?![^(]*[)])/g /* splits multiple shorthand notation animations */\n\tvar propertiesptn = / +\\s*(?![^(]*[)])/g /* animation properties */\n\tvar elementptn = / *[\\0] */g /* selector elements */\n\tvar selectorptn = /,\\r+?/g /* splits selectors */\n\tvar andptn = /([\\t\\r\\n ])*\\f?&/g /* match & */\n\tvar escapeptn = /:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g /* matches :global(.*) */\n\tvar invalidptn = /\\W+/g /* removes invalid characters from keyframes */\n\tvar keyframeptn = /@(k\\w+)\\s*(\\S*)\\s*/ /* matches @keyframes $1 */\n\tvar plcholdrptn = /::(place)/g /* match ::placeholder varient */\n\tvar readonlyptn = /:(read-only)/g /* match :read-only varient */\n\tvar beforeptn = /\\s+(?=[{\\];=:>])/g /* matches \\s before ] ; = : */\n\tvar afterptn = /([[}=:>])\\s+/g /* matches \\s after characters [ } = : */\n\tvar tailptn = /(\\{[^{]+?);(?=\\})/g /* matches tail semi-colons ;} */\n\tvar whiteptn = /\\s{2,}/g /* matches repeating whitespace */\n\tvar pseudoptn = /([^\\(])(:+) */g /* pseudo element */\n\tvar writingptn = /[svh]\\w+-[tblr]{2}/ /* match writing mode property values */\n\tvar gradientptn = /([\\w-]+t\\()/g /* match *gradient property */\n\tvar supportsptn = /\\(\\s*(.*)\\s*\\)/g /* match supports (groups) */\n\tvar propertyptn = /([\\s\\S]*?);/g /* match properties leading semicolon */\n\tvar selfptn = /-self|flex-/g /* match flex- and -self in align-self: flex-*; */\n\tvar pseudofmt = /[^]*?(:[rp][el]a[\\w-]+)[^]*/ /* extrats :readonly or :placholder from selector */\n\tvar trimptn = /[ \\t]+$/ /* match tail whitspace */\n\tvar dimensionptn = /stretch|:\\s*\\w+\\-(?:conte|avail)/ /* match max/min/fit-content, fill-available */\n\tvar imgsrcptn = /([^-])(image-set\\()/\n\n\t/* vendors */\n\tvar webkit = '-webkit-'\n\tvar moz = '-moz-'\n\tvar ms = '-ms-'\n\n\t/* character codes */\n\tvar SEMICOLON = 59 /* ; */\n\tvar CLOSEBRACES = 125 /* } */\n\tvar OPENBRACES = 123 /* { */\n\tvar OPENPARENTHESES = 40 /* ( */\n\tvar CLOSEPARENTHESES = 41 /* ) */\n\tvar OPENBRACKET = 91 /* [ */\n\tvar CLOSEBRACKET = 93 /* ] */\n\tvar NEWLINE = 10 /* \\n */\n\tvar CARRIAGE = 13 /* \\r */\n\tvar TAB = 9 /* \\t */\n\tvar AT = 64 /* @ */\n\tvar SPACE = 32 /* */\n\tvar AND = 38 /* & */\n\tvar DASH = 45 /* - */\n\tvar UNDERSCORE = 95 /* _ */\n\tvar STAR = 42 /* * */\n\tvar COMMA = 44 /* , */\n\tvar COLON = 58 /* : */\n\tvar SINGLEQUOTE = 39 /* ' */\n\tvar DOUBLEQUOTE = 34 /* \" */\n\tvar FOWARDSLASH = 47 /* / */\n\tvar GREATERTHAN = 62 /* > */\n\tvar PLUS = 43 /* + */\n\tvar TILDE = 126 /* ~ */\n\tvar NULL = 0 /* \\0 */\n\tvar FORMFEED = 12 /* \\f */\n\tvar VERTICALTAB = 11 /* \\v */\n\n\t/* special identifiers */\n\tvar KEYFRAME = 107 /* k */\n\tvar MEDIA = 109 /* m */\n\tvar SUPPORTS = 115 /* s */\n\tvar PLACEHOLDER = 112 /* p */\n\tvar READONLY = 111 /* o */\n\tvar IMPORT = 105 /* i */\n\tvar CHARSET = 99 /* c */\n\tvar DOCUMENT = 100 /* d */\n\tvar PAGE = 112 /* p */\n\n\tvar column = 1 /* current column */\n\tvar line = 1 /* current line numebr */\n\tvar pattern = 0 /* :pattern */\n\n\tvar cascade = 1 /* #id h1 h2 vs h1#id h2#id */\n\tvar prefix = 1 /* vendor prefix */\n\tvar escape = 1 /* escape :global() pattern */\n\tvar compress = 0 /* compress output */\n\tvar semicolon = 0 /* no/semicolon option */\n\tvar preserve = 0 /* preserve empty selectors */\n\n\t/* empty reference */\n\tvar array = []\n\n\t/* plugins */\n\tvar plugins = []\n\tvar plugged = 0\n\tvar should = null\n\n\t/* plugin context */\n\tvar POSTS = -2\n\tvar PREPS = -1\n\tvar UNKWN = 0\n\tvar PROPS = 1\n\tvar BLCKS = 2\n\tvar ATRUL = 3\n\n\t/* plugin newline context */\n\tvar unkwn = 0\n\n\t/* keyframe animation */\n\tvar keyed = 1\n\tvar key = ''\n\n\t/* selector namespace */\n\tvar nscopealt = ''\n\tvar nscope = ''\n\n\t/**\n\t * Compile\n\t *\n\t * @param {Array} parent\n\t * @param {Array} current\n\t * @param {string} body\n\t * @param {number} id\n\t * @param {number} depth\n\t * @return {string}\n\t */\n\tfunction compile (parent, current, body, id, depth) {\n\t\tvar bracket = 0 /* brackets [] */\n\t\tvar comment = 0 /* comments /* // or /* */\n\t\tvar parentheses = 0 /* functions () */\n\t\tvar quote = 0 /* quotes '', \"\" */\n\n\t\tvar first = 0 /* first character code */\n\t\tvar second = 0 /* second character code */\n\t\tvar code = 0 /* current character code */\n\t\tvar tail = 0 /* previous character code */\n\t\tvar trail = 0 /* character before previous code */\n\t\tvar peak = 0 /* previous non-whitespace code */\n\n\t\tvar counter = 0 /* count sequence termination */\n\t\tvar context = 0 /* track current context */\n\t\tvar atrule = 0 /* track @at-rule context */\n\t\tvar pseudo = 0 /* track pseudo token index */\n\t\tvar caret = 0 /* current character index */\n\t\tvar format = 0 /* control character formating context */\n\t\tvar insert = 0 /* auto semicolon insertion */\n\t\tvar invert = 0 /* inverted selector pattern */\n\t\tvar length = 0 /* generic length address */\n\t\tvar eof = body.length /* end of file(length) */\n\t\tvar eol = eof - 1 /* end of file(characters) */\n\n\t\tvar char = '' /* current character */\n\t\tvar chars = '' /* current buffer of characters */\n\t\tvar child = '' /* next buffer of characters */\n\t\tvar out = '' /* compiled body */\n\t\tvar children = '' /* compiled children */\n\t\tvar flat = '' /* compiled leafs */\n\t\tvar selector /* generic selector address */\n\t\tvar result /* generic address */\n\n\t\t// ...build body\n\t\twhile (caret < eof) {\n\t\t\tcode = body.charCodeAt(caret)\n\n\t\t\t// eof varient\n\t\t\tif (caret === eol) {\n\t\t\t\t// last character + noop context, add synthetic padding for noop context to terminate\n\t\t\t\tif (comment + quote + parentheses + bracket !== 0) {\n\t\t\t\t\tif (comment !== 0) {\n\t\t\t\t\t\tcode = comment === FOWARDSLASH ? NEWLINE : FOWARDSLASH\n\t\t\t\t\t}\n\n\t\t\t\t\tquote = parentheses = bracket = 0\n\t\t\t\t\teof++\n\t\t\t\t\teol++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t// eof varient\n\t\t\t\tif (caret === eol) {\n\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chars.trim().length > 0) {\n\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchars += body.charAt(caret)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcode = SEMICOLON\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// auto semicolon insertion\n\t\t\t\tif (insert === 1) {\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t// false flags\n\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\tcase OPENPARENTHESES:\n\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ignore\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// valid\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\tfirst = code\n\t\t\t\t\t\t\tcaret--\n\t\t\t\t\t\t\tcode = SEMICOLON\n\n\t\t\t\t\t\t\twhile (length < eof) {\n\t\t\t\t\t\t\t\tswitch (body.charCodeAt(length++)) {\n\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\tcase CARRIAGE:\n\t\t\t\t\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\t\t\t++caret\n\t\t\t\t\t\t\t\t\t\t\tcode = first\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\t\tlength = eof\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// token varient\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\tchars = chars.trim()\n\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\tcounter = 1\n\t\t\t\t\t\tlength = ++caret\n\n\t\t\t\t\t\twhile (caret < eof) {\n\t\t\t\t\t\t\tswitch (code = body.charCodeAt(caret)) {\n\t\t\t\t\t\t\t\tcase OPENBRACES: {\n\t\t\t\t\t\t\t\t\tcounter++\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\t\tcounter--\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\tswitch (second = body.charCodeAt(caret + 1)) {\n\t\t\t\t\t\t\t\t\t\t// /*, //\n\t\t\t\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\t\t\t\t\tcaret = delimited(second, caret, eol, body)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"[\" === 91 & \"]\" === 93 hence forth 91 + 1 + 1 === 93\n\t\t\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// given \"(\" === 40 & \")\" === 41 hence forth 40 + 1 === 41\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tcode++\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// quote tail delimiter is identical to the head delimiter hence noop,\n\t\t\t\t\t\t\t\t// fallthrough clauses have been shifted to the correct tail delimiter\n\t\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\t\t\twhile (caret++ < eol) {\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(caret) === code) {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (counter === 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcaret++\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchild = body.substring(length, caret)\n\n\t\t\t\t\t\tif (first === NULL) {\n\t\t\t\t\t\t\tfirst = (chars = chars.replace(nullptn, '').trim()).charCodeAt(0)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t// @at-rule\n\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\tif (format > 0) {\n\t\t\t\t\t\t\t\t\tchars = chars.replace(formatptn, '')\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\tcase SUPPORTS:\n\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\tselector = current\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tselector = array\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tchild = compile(current, selector, child, second, depth+1)\n\t\t\t\t\t\t\t\tlength = child.length\n\n\t\t\t\t\t\t\t\t// preserve empty @at-rule\n\t\t\t\t\t\t\t\tif (preserve > 0 && length === 0) {\n\t\t\t\t\t\t\t\t\tlength = chars.length\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// execute plugins, @at-rule context\n\t\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\t\tselector = select(array, chars, invert)\n\t\t\t\t\t\t\t\t\tresult = proxy(ATRUL, child, selector, current, line, column, length, second, depth, id)\n\t\t\t\t\t\t\t\t\tchars = selector.join('')\n\n\t\t\t\t\t\t\t\t\tif (result !== void 0) {\n\t\t\t\t\t\t\t\t\t\tif ((length = (child = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\t\tsecond = 0\n\t\t\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (length > 0) {\n\t\t\t\t\t\t\t\t\tswitch (second) {\n\t\t\t\t\t\t\t\t\t\tcase SUPPORTS: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(supportsptn, supports)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase DOCUMENT:\n\t\t\t\t\t\t\t\t\t\tcase MEDIA:\n\t\t\t\t\t\t\t\t\t\tcase DASH: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcase KEYFRAME: {\n\t\t\t\t\t\t\t\t\t\t\tchars = chars.replace(keyframeptn, '$1 $2' + (keyed > 0 ? key : ''))\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + '{' + child + '}'\n\n\t\t\t\t\t\t\t\t\t\t\tif (prefix === 1 || (prefix === 2 && vendor('@'+child, 3))) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + webkit + child + '@' + child\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = '@' + child\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tchild = chars + child\n\n\t\t\t\t\t\t\t\t\t\t\tif (id === PAGE) {\n\t\t\t\t\t\t\t\t\t\t\t\tchild = (out += child, '')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// selector\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tchild = compile(current, select(current, chars, invert), child, id, depth+1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tchildren += child\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tatrule = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tchild = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\tcase SEMICOLON: {\n\t\t\t\t\t\tchars = (format > 0 ? chars.replace(formatptn, '') : chars).trim()\n\n\t\t\t\t\t\tif ((length = chars.length) > 1) {\n\t\t\t\t\t\t\t// monkey-patch missing colon\n\t\t\t\t\t\t\tif (pseudo === 0) {\n\t\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\n\t\t\t\t\t\t\t\t// first character is a letter or dash, buffer has a space character\n\t\t\t\t\t\t\t\tif ((first === DASH || first > 96 && first < 123)) {\n\t\t\t\t\t\t\t\t\tlength = (chars = chars.replace(' ', ':')).length\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// execute plugins, property context\n\t\t\t\t\t\t\tif (plugged > 0) {\n\t\t\t\t\t\t\t\tif ((result = proxy(PROPS, chars, current, parent, line, column, out.length, id, depth, id)) !== void 0) {\n\t\t\t\t\t\t\t\t\tif ((length = (chars = result.trim()).length) === 0) {\n\t\t\t\t\t\t\t\t\t\tchars = '\\0\\0'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfirst = chars.charCodeAt(0)\n\t\t\t\t\t\t\tsecond = chars.charCodeAt(1)\n\n\t\t\t\t\t\t\tswitch (first) {\n\t\t\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\t\t\tif (second === IMPORT || second === CHARSET) {\n\t\t\t\t\t\t\t\t\t\tflat += chars + body.charAt(caret)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\tif (chars.charCodeAt(length-1) === COLON) {\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tout += property(chars, first, second, chars.charCodeAt(2))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset\n\t\t\t\t\t\tcontext = 0\n\t\t\t\t\t\tinsert = 0\n\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\tformat = 0\n\t\t\t\t\t\tinvert = 0\n\t\t\t\t\t\tchars = ''\n\t\t\t\t\t\tcode = body.charCodeAt(++caret)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// parse characters\n\t\t\tswitch (code) {\n\t\t\t\tcase CARRIAGE:\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\t// auto insert semicolon\n\t\t\t\t\tif (comment + quote + parentheses + bracket + semicolon === 0) {\n\t\t\t\t\t\t// valid non-whitespace characters that\n\t\t\t\t\t\t// may precede a newline\n\t\t\t\t\t\tswitch (peak) {\n\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\tcase SINGLEQUOTE:\n\t\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\t\tcase AT:\n\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\tcase FOWARDSLASH:\n\t\t\t\t\t\t\tcase DASH:\n\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t// current buffer has a colon\n\t\t\t\t\t\t\t\tif (pseudo > 0) {\n\t\t\t\t\t\t\t\t\tinsert = 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// terminate line comment\n\t\t\t\t\tif (comment === FOWARDSLASH) {\n\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t} else if (cascade + context === 0 && id !== KEYFRAME && chars.length > 0) {\n\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\tchars += '\\0'\n\t\t\t\t\t}\n\n\t\t\t\t\t// execute plugins, newline context\n\t\t\t\t\tif (plugged * unkwn > 0) {\n\t\t\t\t\t\tproxy(UNKWN, chars, current, parent, line, column, out.length, id, depth, id)\n\t\t\t\t\t}\n\n\t\t\t\t\t// next line, reset column position\n\t\t\t\t\tcolumn = 1\n\t\t\t\t\tline++\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase SEMICOLON:\n\t\t\t\tcase CLOSEBRACES: {\n\t\t\t\t\tif (comment + quote + parentheses + bracket === 0) {\n\t\t\t\t\t\tcolumn++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\t// increment column position\n\t\t\t\t\tcolumn++\n\n\t\t\t\t\t// current character\n\t\t\t\t\tchar = body.charAt(caret)\n\n\t\t\t\t\t// remove comments, escape functions, strings, attributes and prepare selectors\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\tif (quote + bracket + comment === 0) {\n\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\tcase COLON:\n\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\tif (code !== SPACE) {\n\t\t\t\t\t\t\t\t\t\t\tchar = ' '\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// escape breaking control characters\n\t\t\t\t\t\tcase NULL: {\n\t\t\t\t\t\t\tchar = '\\\\0'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase FORMFEED: {\n\t\t\t\t\t\t\tchar = '\\\\f'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase VERTICALTAB: {\n\t\t\t\t\t\t\tchar = '\\\\v'\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// &\n\t\t\t\t\t\tcase AND: {\n\t\t\t\t\t\t\t// inverted selector pattern i.e html &\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0 && cascade > 0) {\n\t\t\t\t\t\t\t\tinvert = 1\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar = '\\f' + char\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ::paceholder, l\n\t\t\t\t\t\t// :read-ony, l\n\t\t\t\t\t\tcase 108: {\n\t\t\t\t\t\t\tif (quote + comment + bracket + pattern === 0 && pseudo > 0) {\n\t\t\t\t\t\t\t\tswitch (caret - pseudo) {\n\t\t\t\t\t\t\t\t\t// ::placeholder\n\t\t\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\t\t\tif (tail === PLACEHOLDER && body.charCodeAt(caret-3) === COLON) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = tail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// :read-only\n\t\t\t\t\t\t\t\t\tcase 8: {\n\t\t\t\t\t\t\t\t\t\tif (trail === READONLY) {\n\t\t\t\t\t\t\t\t\t\t\tpattern = trail\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tpseudo = caret\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// selectors\n\t\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket === 0) {\n\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\tchar += '\\r'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// quotes\n\t\t\t\t\t\tcase DOUBLEQUOTE:\n\t\t\t\t\t\tcase SINGLEQUOTE: {\n\t\t\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t\t\tquote = quote === code ? 0 : (quote === 0 ? code : quote)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// attributes\n\t\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase CLOSEBRACKET: {\n\t\t\t\t\t\t\tif (quote + comment + parentheses === 0) {\n\t\t\t\t\t\t\t\tbracket--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// functions\n\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tparentheses--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\tif (quote + comment + bracket === 0) {\n\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\tswitch (tail*2 + trail*3) {\n\t\t\t\t\t\t\t\t\t\t// :matches\n\t\t\t\t\t\t\t\t\t\tcase 533: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// :global, :not, :nth-child etc...\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tcounter = 0\n\t\t\t\t\t\t\t\t\t\t\tcontext = 1\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tparentheses++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase AT: {\n\t\t\t\t\t\t\tif (comment + parentheses + quote + bracket + pseudo + atrule === 0) {\n\t\t\t\t\t\t\t\tatrule = 1\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// block/line comments\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\t\t\tif (quote + bracket + parentheses > 0) {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tswitch (comment) {\n\t\t\t\t\t\t\t\t// initialize line/block comment context\n\t\t\t\t\t\t\t\tcase 0: {\n\t\t\t\t\t\t\t\t\tswitch (code*2 + body.charCodeAt(caret+1)*3) {\n\t\t\t\t\t\t\t\t\t\t// //\n\t\t\t\t\t\t\t\t\t\tcase 235: {\n\t\t\t\t\t\t\t\t\t\t\tcomment = FOWARDSLASH\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t// /*\n\t\t\t\t\t\t\t\t\t\tcase 220: {\n\t\t\t\t\t\t\t\t\t\t\tlength = caret\n\t\t\t\t\t\t\t\t\t\t\tcomment = STAR\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// end block comment context\n\t\t\t\t\t\t\t\tcase STAR: {\n\t\t\t\t\t\t\t\t\tif (code === FOWARDSLASH && tail === STAR && length + 2 !== caret) {\n\t\t\t\t\t\t\t\t\t\t// /* ... */, !\n\t\t\t\t\t\t\t\t\t\tif (body.charCodeAt(length+2) === 33) {\n\t\t\t\t\t\t\t\t\t\t\tout += body.substring(length, caret+1)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tchar = ''\n\t\t\t\t\t\t\t\t\t\tcomment = 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ignore comment blocks\n\t\t\t\t\tif (comment === 0) {\n\t\t\t\t\t\t// aggressive isolation mode, divide each individual selector\n\t\t\t\t\t\t// including selectors in :not function but excluding selectors in :global function\n\t\t\t\t\t\tif (cascade + quote + bracket + atrule === 0 && id !== KEYFRAME && code !== SEMICOLON) {\n\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t// outside of an isolated context i.e nth-child(<...>)\n\t\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = char + '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t\tchar = '\\0' + char + (code === COMMA ? '' : '\\0')\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// within an isolated context, sleep untill it's terminated\n\t\t\t\t\t\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\t// :globa(\n\t\t\t\t\t\t\t\t\t\t\t\tif (pseudo + 7 === caret && tail === 108) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tpseudo = 0\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcontext = ++counter\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tcase CLOSEPARENTHESES: {\n\t\t\t\t\t\t\t\t\t\t\t\tif ((context = --counter) === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\tcase SPACE: {\n\t\t\t\t\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\t\t\t\t\tcase NULL:\n\t\t\t\t\t\t\t\t\t\tcase OPENBRACES:\n\t\t\t\t\t\t\t\t\t\tcase CLOSEBRACES:\n\t\t\t\t\t\t\t\t\t\tcase SEMICOLON:\n\t\t\t\t\t\t\t\t\t\tcase COMMA:\n\t\t\t\t\t\t\t\t\t\tcase FORMFEED:\n\t\t\t\t\t\t\t\t\t\tcase TAB:\n\t\t\t\t\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\t\t\t\t\tcase NEWLINE:\n\t\t\t\t\t\t\t\t\t\tcase CARRIAGE: {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\t// ignore in isolated contexts\n\t\t\t\t\t\t\t\t\t\t\tif (context === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tformat = 1\n\t\t\t\t\t\t\t\t\t\t\t\tchar += '\\0'\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// concat buffer of characters\n\t\t\t\t\t\tchars += char\n\n\t\t\t\t\t\t// previous non-whitespace character code\n\t\t\t\t\t\tif (code !== SPACE && code !== TAB) {\n\t\t\t\t\t\t\tpeak = code\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tail character codes\n\t\t\ttrail = tail\n\t\t\ttail = code\n\n\t\t\t// visit every character\n\t\t\tcaret++\n\t\t}\n\n\t\tlength = out.length\n\n\t\t// preserve empty selector\n \t\tif (preserve > 0) {\n \t\t\tif (length === 0 && children.length === 0 && (current[0].length === 0) === false) {\n \t\t\t\tif (id !== MEDIA || (current.length === 1 && (cascade > 0 ? nscopealt : nscope) === current[0])) {\n\t\t\t\t\tlength = current.join(',').length + 2\n \t\t\t\t}\n \t\t\t}\n\t\t}\n\n\t\tif (length > 0) {\n\t\t\t// cascade isolation mode?\n\t\t\tselector = cascade === 0 && id !== KEYFRAME ? isolate(current) : current\n\n\t\t\t// execute plugins, block context\n\t\t\tif (plugged > 0) {\n\t\t\t\tresult = proxy(BLCKS, out, selector, parent, line, column, length, id, depth, id)\n\n\t\t\t\tif (result !== void 0 && (out = result).length === 0) {\n\t\t\t\t\treturn flat + out + children\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tout = selector.join(',') + '{' + out + '}'\n\n\t\t\tif (prefix*pattern !== 0) {\n\t\t\t\tif (prefix === 2 && !vendor(out, 2))\n\t\t\t\t\tpattern = 0\n\n\t\t\t\tswitch (pattern) {\n\t\t\t\t\t// ::read-only\n\t\t\t\t\tcase READONLY: {\n\t\t\t\t\t\tout = out.replace(readonlyptn, ':'+moz+'$1')+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// ::placeholder\n\t\t\t\t\tcase PLACEHOLDER: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + webkit + 'input-$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, '::' + moz + '$1') +\n\t\t\t\t\t\t\tout.replace(plcholdrptn, ':' + ms + 'input-$1') + out\n\t\t\t\t\t\t)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpattern = 0\n\t\t\t}\n\t\t}\n\n\t\treturn flat + out + children\n\t}\n\n\t/**\n\t * Select\n\t *\n\t * @param {Array} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @return {Array}\n\t */\n\tfunction select (parent, current, invert) {\n\t\tvar selectors = current.trim().split(selectorptn)\n\t\tvar out = selectors\n\n\t\tvar length = selectors.length\n\t\tvar l = parent.length\n\n\t\tswitch (l) {\n\t\t\t// 0-1 parent selectors\n\t\t\tcase 0:\n\t\t\tcase 1: {\n\t\t\t\tfor (var i = 0, selector = l === 0 ? '' : parent[0] + ' '; i < length; ++i) {\n\t\t\t\t\tout[i] = scope(selector, out[i], invert, l).trim()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// >2 parent selectors, nested\n\t\t\tdefault: {\n\t\t\t\tfor (var i = 0, j = 0, out = []; i < length; ++i) {\n\t\t\t\t\tfor (var k = 0; k < l; ++k) {\n\t\t\t\t\t\tout[j++] = scope(parent[k] + ' ', selectors[i], invert, l).trim()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Scope\n\t *\n\t * @param {string} parent\n\t * @param {string} current\n\t * @param {number} invert\n\t * @param {number} level\n\t * @return {string}\n\t */\n\tfunction scope (parent, current, invert, level) {\n\t\tvar selector = current\n\t\tvar code = selector.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (selector = selector.trim()).charCodeAt(0)\n\t\t}\n\n\t\tswitch (code) {\n\t\t\t// &\n\t\t\tcase AND: {\n\t\t\t\tswitch (cascade + level) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\tcase 1: {\n\t\t\t\t\t\tif (parent.trim().length === 0) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// :\n\t\t\tcase COLON: {\n\t\t\t\tswitch (selector.charCodeAt(1)) {\n\t\t\t\t\t// g in :global\n\t\t\t\t\tcase 103: {\n\t\t\t\t\t\tif (escape > 0 && cascade > 0) {\n\t\t\t\t\t\t\treturn selector.replace(escapeptn, '$1').replace(andptn, '$1'+nscope)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\t// :hover\n\t\t\t\t\t\treturn parent.trim() + selector.replace(andptn, '$1'+parent.trim())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\t// html &\n\t\t\t\tif (invert*cascade > 0 && selector.indexOf('\\f') > 0) {\n\t\t\t\t\treturn selector.replace(andptn, (parent.charCodeAt(0) === COLON ? '' : '$1')+parent.trim())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn parent + selector\n\t}\n\n\t/**\n\t * Property\n\t *\n\t * @param {string} input\n\t * @param {number} first\n\t * @param {number} second\n\t * @param {number} third\n\t * @return {string}\n\t */\n\tfunction property (input, first, second, third) {\n\t\tvar index = 0\n\t\tvar out = input + ';'\n\t\tvar hash = (first*2) + (second*3) + (third*4)\n\t\tvar cache\n\n\t\t// animation: a, n, i characters\n\t\tif (hash === 944) {\n\t\t\treturn animation(out)\n\t\t} else if (prefix === 0 || (prefix === 2 && !vendor(out, 1))) {\n\t\t\treturn out\n\t\t}\n\n\t\t// vendor prefix\n\t\tswitch (hash) {\n\t\t\t// text-decoration/text-size-adjust/text-shadow/text-align/text-transform: t, e, x\n\t\t\tcase 1015: {\n\t\t\t\t// text-shadow/text-align/text-transform, a\n\t\t\t\treturn out.charCodeAt(10) === 97 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// filter/fill f, i, l\n\t\t\tcase 951: {\n\t\t\t\t// filter, t\n\t\t\t\treturn out.charCodeAt(3) === 116 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// color/column, c, o, l\n\t\t\tcase 963: {\n\t\t\t\t// column, n\n\t\t\t\treturn out.charCodeAt(5) === 110 ? webkit + out + out : out\n\t\t\t}\n\t\t\t// box-decoration-break, b, o, x\n\t\t\tcase 1009: {\n\t\t\t\tif (out.charCodeAt(4) !== 100) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// mask, m, a, s\n\t\t\t// clip-path, c, l, i\n\t\t\tcase 969:\n\t\t\tcase 942: {\n\t\t\t\treturn webkit + out + out\n\t\t\t}\n\t\t\t// appearance: a, p, p\n\t\t\tcase 978: {\n\t\t\t\treturn webkit + out + moz + out + out\n\t\t\t}\n\t\t\t// hyphens: h, y, p\n\t\t\t// user-select: u, s, e\n\t\t\tcase 1019:\n\t\t\tcase 983: {\n\t\t\t\treturn webkit + out + moz + out + ms + out + out\n\t\t\t}\n\t\t\t// background/backface-visibility, b, a, c\n\t\t\tcase 883: {\n\t\t\t\t// backface-visibility, -\n\t\t\t\tif (out.charCodeAt(8) === DASH) {\n\t\t\t\t\treturn webkit + out + out\n\t\t\t\t}\n\n\t\t\t\t// image-set(...)\n\t\t\t\tif (out.indexOf('image-set(', 11) > 0) {\n\t\t\t\t\treturn out.replace(imgsrcptn, '$1'+webkit+'$2') + out\n\t\t\t\t}\n\n\t\t\t\treturn out\n\t\t\t}\n\t\t\t// flex: f, l, e\n\t\t\tcase 932: {\n\t\t\t\tif (out.charCodeAt(4) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(5)) {\n\t\t\t\t\t\t// flex-grow, g\n\t\t\t\t\t\tcase 103: {\n\t\t\t\t\t\t\treturn webkit + 'box-' + out.replace('-grow', '') + webkit + out + ms + out.replace('grow', 'positive') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-shrink, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('shrink', 'negative') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// flex-basis, b\n\t\t\t\t\t\tcase 98: {\n\t\t\t\t\t\t\treturn webkit + out + ms + out.replace('basis', 'preferred-size') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + out + out\n\t\t\t}\n\t\t\t// order: o, r, d\n\t\t\tcase 964: {\n\t\t\t\treturn webkit + out + ms + 'flex' + '-' + out + out\n\t\t\t}\n\t\t\t// justify-items/justify-content, j, u, s\n\t\t\tcase 1023: {\n\t\t\t\t// justify-content, c\n\t\t\t\tif (out.charCodeAt(8) !== 99) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcache = out.substring(out.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify')\n\t\t\t\treturn webkit + 'box-pack' + cache + webkit + out + ms + 'flex-pack' + cache + out\n\t\t\t}\n\t\t\t// cursor, c, u, r\n\t\t\tcase 1005: {\n\t\t\t\treturn cursorptn.test(out) ? out.replace(colonptn, ':' + webkit) + out.replace(colonptn, ':' + moz) + out : out\n\t\t\t}\n\t\t\t// writing-mode, w, r, i\n\t\t\tcase 1000: {\n\t\t\t\tcache = out.substring(13).trim()\n\t\t\t\tindex = cache.indexOf('-') + 1\n\n\t\t\t\tswitch (cache.charCodeAt(0)+cache.charCodeAt(index)) {\n\t\t\t\t\t// vertical-lr\n\t\t\t\t\tcase 226: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// vertical-rl\n\t\t\t\t\tcase 232: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'tb-rl')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// horizontal-tb\n\t\t\t\t\tcase 220: {\n\t\t\t\t\t\tcache = out.replace(writingptn, 'lr')\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\treturn out\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn webkit + out + ms + cache + out\n\t\t\t}\n\t\t\t// position: sticky\n\t\t\tcase 1017: {\n\t\t\t\tif (out.indexOf('sticky', 9) === -1) {\n\t\t\t\t\treturn out\n\t\t\t\t}\n\t\t\t}\n\t\t\t// display(flex/inline-flex/inline-box): d, i, s\n\t\t\tcase 975: {\n\t\t\t\tindex = (out = input).length - 10\n\t\t\t\tcache = (out.charCodeAt(index) === 33 ? out.substring(0, index) : out).substring(input.indexOf(':', 7) + 1).trim()\n\n\t\t\t\tswitch (hash = cache.charCodeAt(0) + (cache.charCodeAt(7)|0)) {\n\t\t\t\t\t// inline-\n\t\t\t\t\tcase 203: {\n\t\t\t\t\t\t// inline-box\n\t\t\t\t\t\tif (cache.charCodeAt(8) < 111) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// inline-box/sticky\n\t\t\t\t\tcase 115: {\n\t\t\t\t\t\tout = out.replace(cache, webkit+cache)+';'+out\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\t// inline-flex\n\t\t\t\t\t// flex\n\t\t\t\t\tcase 207:\n\t\t\t\t\tcase 102: {\n\t\t\t\t\t\tout = (\n\t\t\t\t\t\t\tout.replace(cache, webkit+(hash > 102 ? 'inline-' : '')+'box')+';'+\n\t\t\t\t\t\t\tout.replace(cache, webkit+cache)+';'+\n\t\t\t\t\t\t\tout.replace(cache, ms+cache+'box')+';'+\n\t\t\t\t\t\t\tout\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn out + ';'\n\t\t\t}\n\t\t\t// align-items, align-center, align-self: a, l, i, -\n\t\t\tcase 938: {\n\t\t\t\tif (out.charCodeAt(5) === DASH) {\n\t\t\t\t\tswitch (out.charCodeAt(6)) {\n\t\t\t\t\t\t// align-items, i\n\t\t\t\t\t\tcase 105: {\n\t\t\t\t\t\t\tcache = out.replace('-items', '')\n\t\t\t\t\t\t\treturn webkit + out + webkit + 'box-' + cache + ms + 'flex-' + cache + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-self, s\n\t\t\t\t\t\tcase 115: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-item-' + out.replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// align-content\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\treturn webkit + out + ms + 'flex-line-pack' + out.replace('align-content', '').replace(selfptn, '') + out\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// min/max\n\t\t\tcase 973:\n\t\t\tcase 989: {\n\t\t\t\t// min-/max- height/width/block-size/inline-size\n\t\t\t\tif (out.charCodeAt(3) !== DASH || out.charCodeAt(4) === 122) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// height/width: min-content / width: max-content\n\t\t\tcase 931:\n\t\t\tcase 953: {\n\t\t\t\tif (dimensionptn.test(input) === true) {\n\t\t\t\t\t// stretch\n\t\t\t\t\tif ((cache = input.substring(input.indexOf(':') + 1)).charCodeAt(0) === 115)\n\t\t\t\t\t\treturn property(input.replace('stretch', 'fill-available'), first, second, third).replace(':fill-available', ':stretch')\n\t\t\t\t\telse\n\t\t\t\t\t\treturn out.replace(cache, webkit + cache) + out.replace(cache, moz + cache.replace('fill-', '')) + out\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// transform, transition: t, r, a\n\t\t\tcase 962: {\n\t\t\t\tout = webkit + out + (out.charCodeAt(5) === 102 ? ms + out : '') + out\n\n\t\t\t\t// transitions\n\t\t\t\tif (second + third === 211 && out.charCodeAt(13) === 105 && out.indexOf('transform', 10) > 0) {\n\t\t\t\t\treturn out.substring(0, out.indexOf(';', 27) + 1).replace(transformptn, '$1' + webkit + '$2') + out\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Vendor\n\t *\n\t * @param {string} content\n\t * @param {number} context\n\t * @return {boolean}\n\t */\n\tfunction vendor (content, context) {\n\t\tvar index = content.indexOf(context === 1 ? ':' : '{')\n\t\tvar key = content.substring(0, context !== 3 ? index : 10)\n\t\tvar value = content.substring(index + 1, content.length - 1)\n\n\t\treturn should(context !== 2 ? key : key.replace(pseudofmt, '$1'), value, context)\n\t}\n\n\t/**\n\t * Supports\n\t *\n\t * @param {string} match\n\t * @param {string} group\n\t * @return {string}\n\t */\n\tfunction supports (match, group) {\n\t\tvar out = property(group, group.charCodeAt(0), group.charCodeAt(1), group.charCodeAt(2))\n\n\t\treturn out !== group+';' ? out.replace(propertyptn, ' or ($1)').substring(4) : '('+group+')'\n\t}\n\n\t/**\n\t * Animation\n\t *\n\t * @param {string} input\n\t * @return {string}\n\t */\n\tfunction animation (input) {\n\t\tvar length = input.length\n\t\tvar index = input.indexOf(':', 9) + 1\n\t\tvar declare = input.substring(0, index).trim()\n\t\tvar out = input.substring(index, length-1).trim()\n\n\t\tswitch (input.charCodeAt(9)*keyed) {\n\t\t\tcase 0: {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// animation-*, -\n\t\t\tcase DASH: {\n\t\t\t\t// animation-name, n\n\t\t\t\tif (input.charCodeAt(10) !== 110) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// animation/animation-name\n\t\t\tdefault: {\n\t\t\t\t// split in case of multiple animations\n\t\t\t\tvar list = out.split((out = '', animationptn))\n\n\t\t\t\tfor (var i = 0, index = 0, length = list.length; i < length; index = 0, ++i) {\n\t\t\t\t\tvar value = list[i]\n\t\t\t\t\tvar items = value.split(propertiesptn)\n\n\t\t\t\t\twhile (value = items[index]) {\n\t\t\t\t\t\tvar peak = value.charCodeAt(0)\n\n\t\t\t\t\t\tif (keyed === 1 && (\n\t\t\t\t\t\t\t// letters\n\t\t\t\t\t\t\t(peak > AT && peak < 90) || (peak > 96 && peak < 123) || peak === UNDERSCORE ||\n\t\t\t\t\t\t\t// dash but not in sequence i.e --\n\t\t\t\t\t\t\t(peak === DASH && value.charCodeAt(1) !== DASH)\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t// not a number/function\n\t\t\t\t\t\t\tswitch (isNaN(parseFloat(value)) + (value.indexOf('(') !== -1)) {\n\t\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\t\tswitch (value) {\n\t\t\t\t\t\t\t\t\t\t// not a valid reserved keyword\n\t\t\t\t\t\t\t\t\t\tcase 'infinite': case 'alternate': case 'backwards': case 'running':\n\t\t\t\t\t\t\t\t\t\tcase 'normal': case 'forwards': case 'both': case 'none': case 'linear':\n\t\t\t\t\t\t\t\t\t\tcase 'ease': case 'ease-in': case 'ease-out': case 'ease-in-out':\n\t\t\t\t\t\t\t\t\t\tcase 'paused': case 'reverse': case 'alternate-reverse': case 'inherit':\n\t\t\t\t\t\t\t\t\t\tcase 'initial': case 'unset': case 'step-start': case 'step-end': {\n\t\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\t\t\t\tvalue += key\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titems[index++] = value\n\t\t\t\t\t}\n\n\t\t\t\t\tout += (i === 0 ? '' : ',') + items.join(' ')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tout = declare + out + ';'\n\n\t\tif (prefix === 1 || (prefix === 2 && vendor(out, 1)))\n\t\t\treturn webkit + out + out\n\n\t\treturn out\n\t}\n\n\t/**\n\t * Isolate\n\t *\n\t * @param {Array} current\n\t */\n\tfunction isolate (current) {\n\t\tfor (var i = 0, length = current.length, selector = Array(length), padding, element; i < length; ++i) {\n\t\t\t// split individual elements in a selector i.e h1 h2 === [h1, h2]\n\t\t\tvar elements = current[i].split(elementptn)\n\t\t\tvar out = ''\n\n\t\t\tfor (var j = 0, size = 0, tail = 0, code = 0, l = elements.length; j < l; ++j) {\n\t\t\t\t// empty element\n\t\t\t\tif ((size = (element = elements[j]).length) === 0 && l > 1) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\ttail = out.charCodeAt(out.length-1)\n\t\t\t\tcode = element.charCodeAt(0)\n\t\t\t\tpadding = ''\n\n\t\t\t\tif (j !== 0) {\n\t\t\t\t\t// determine if we need padding\n\t\t\t\t\tswitch (tail) {\n\t\t\t\t\t\tcase STAR:\n\t\t\t\t\t\tcase TILDE:\n\t\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\t\tcase PLUS:\n\t\t\t\t\t\tcase SPACE:\n\t\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tpadding = ' '\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (code) {\n\t\t\t\t\tcase AND: {\n\t\t\t\t\t\telement = padding + nscopealt\n\t\t\t\t\t}\n\t\t\t\t\tcase TILDE:\n\t\t\t\t\tcase GREATERTHAN:\n\t\t\t\t\tcase PLUS:\n\t\t\t\t\tcase SPACE:\n\t\t\t\t\tcase CLOSEPARENTHESES:\n\t\t\t\t\tcase OPENPARENTHESES: {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase OPENBRACKET: {\n\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COLON: {\n\t\t\t\t\t\tswitch (element.charCodeAt(1)*2 + element.charCodeAt(2)*3) {\n\t\t\t\t\t\t\t// :global\n\t\t\t\t\t\t\tcase 530: {\n\t\t\t\t\t\t\t\tif (escape > 0) {\n\t\t\t\t\t\t\t\t\telement = padding + element.substring(8, size - 1)\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// :hover, :nth-child(), ...\n\t\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\t\tif (j < 1 || elements[j-1].length < 1) {\n\t\t\t\t\t\t\t\t\telement = padding + nscopealt + element\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tcase COMMA: {\n\t\t\t\t\t\tpadding = ''\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tif (size > 1 && element.indexOf(':') > 0) {\n\t\t\t\t\t\t\telement = padding + element.replace(pseudoptn, '$1' + nscopealt + '$2')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement = padding + element + nscopealt\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tout += element\n\t\t\t}\n\n\t\t\tselector[i] = out.replace(formatptn, '').trim()\n\t\t}\n\n\t\treturn selector\n\t}\n\n\t/**\n\t * Proxy\n\t *\n\t * @param {number} context\n\t * @param {string} content\n\t * @param {Array} selectors\n\t * @param {Array} parents\n\t * @param {number} line\n\t * @param {number} column\n\t * @param {number} length\n\t * @param {number} id\n\t * @param {number} depth\n\t * @param {number} at\n\t * @return {(string|void|*)}\n\t */\n\tfunction proxy (context, content, selectors, parents, line, column, length, id, depth, at) {\n\t\tfor (var i = 0, out = content, next; i < plugged; ++i) {\n\t\t\tswitch (next = plugins[i].call(stylis, context, out, selectors, parents, line, column, length, id, depth, at)) {\n\t\t\t\tcase void 0:\n\t\t\t\tcase false:\n\t\t\t\tcase true:\n\t\t\t\tcase null: {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tout = next\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (out !== content) {\n\t\t return out\n\t\t}\n\t}\n\n\t/**\n\t * @param {number} code\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction delimited (code, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\t// /*\n\t\t\t\tcase FOWARDSLASH: {\n\t\t\t\t\tif (code === STAR) {\n\t\t\t\t\t\tif (body.charCodeAt(i - 1) === STAR && index + 2 !== i) {\n\t\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// //\n\t\t\t\tcase NEWLINE: {\n\t\t\t\t\tif (code === FOWARDSLASH) {\n\t\t\t\t\t\treturn i + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * @param {number} type\n\t * @param {number} index\n\t * @param {number} length\n\t * @param {number} find\n\t * @param {string} body\n\t * @return {number}\n\t */\n\tfunction match (type, index, length, body) {\n\t\tfor (var i = index + 1; i < length; ++i) {\n\t\t\tswitch (body.charCodeAt(i)) {\n\t\t\t\tcase type: {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn i\n\t}\n\n\t/**\n\t * Minify\n\t *\n\t * @param {(string|*)} output\n\t * @return {string}\n\t */\n\tfunction minify (output) {\n\t\treturn output\n\t\t\t.replace(formatptn, '')\n\t\t\t.replace(beforeptn, '')\n\t\t\t.replace(afterptn, '$1')\n\t\t\t.replace(tailptn, '$1')\n\t\t\t.replace(whiteptn, ' ')\n\t}\n\n\t/**\n\t * Use\n\t *\n\t * @param {(Array|function(...?)|number|void)?} plugin\n\t */\n\tfunction use (plugin) {\n\t\tswitch (plugin) {\n\t\t\tcase void 0:\n\t\t\tcase null: {\n\t\t\t\tplugged = plugins.length = 0\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (typeof plugin === 'function') {\n\t\t\t\t\tplugins[plugged++] = plugin\n\t\t\t\t}\telse if (typeof plugin === 'object') {\n\t\t\t\t\tfor (var i = 0, length = plugin.length; i < length; ++i) {\n\t\t\t\t\t\tuse(plugin[i])\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tunkwn = !!plugin|0\n\t\t\t\t}\n\t\t\t}\n \t\t}\n\n \t\treturn use\n\t}\n\n\t/**\n\t * Set\n\t *\n\t * @param {*} options\n\t */\n\tfunction set (options) {\n\t\tfor (var name in options) {\n\t\t\tvar value = options[name]\n\t\t\tswitch (name) {\n\t\t\t\tcase 'keyframe': keyed = value|0; break\n\t\t\t\tcase 'global': escape = value|0; break\n\t\t\t\tcase 'cascade': cascade = value|0; break\n\t\t\t\tcase 'compress': compress = value|0; break\n\t\t\t\tcase 'semicolon': semicolon = value|0; break\n\t\t\t\tcase 'preserve': preserve = value|0; break\n\t\t\t\tcase 'prefix':\n\t\t\t\t\tshould = null\n\n\t\t\t\t\tif (!value) {\n\t\t\t\t\t\tprefix = 0\n\t\t\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\t\t\tprefix = 1\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprefix = 2\n\t\t\t\t\t\tshould = value\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn set\n\t}\n\n\t/**\n\t * Stylis\n\t *\n\t * @param {string} selector\n\t * @param {string} input\n\t * @return {*}\n\t */\n\tfunction stylis (selector, input) {\n\t\tif (this !== void 0 && this.constructor === stylis) {\n\t\t\treturn factory(selector)\n\t\t}\n\n\t\t// setup\n\t\tvar ns = selector\n\t\tvar code = ns.charCodeAt(0)\n\n\t\t// trim leading whitespace\n\t\tif (code < 33) {\n\t\t\tcode = (ns = ns.trim()).charCodeAt(0)\n\t\t}\n\n\t\t// keyframe/animation namespace\n\t\tif (keyed > 0) {\n\t\t\tkey = ns.replace(invalidptn, code === OPENBRACKET ? '' : '-')\n\t\t}\n\n\t\t// reset, used to assert if a plugin is moneky-patching the return value\n\t\tcode = 1\n\n\t\t// cascade/isolate\n\t\tif (cascade === 1) {\n\t\t\tnscope = ns\n\t\t} else {\n\t\t\tnscopealt = ns\n\t\t}\n\n\t\tvar selectors = [nscope]\n\t\tvar result\n\n\t\t// execute plugins, pre-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(PREPS, input, selectors, selectors, line, column, 0, 0, 0, 0)\n\n\t\t\tif (result !== void 0 && typeof result === 'string') {\n\t\t\t\tinput = result\n\t\t\t}\n\t\t}\n\n\t\t// build\n\t\tvar output = compile(array, selectors, input, 0, 0)\n\n\t\t// execute plugins, post-process context\n\t\tif (plugged > 0) {\n\t\t\tresult = proxy(POSTS, output, selectors, selectors, line, column, output.length, 0, 0, 0)\n\n\t\t\t// bypass minification\n\t\t\tif (result !== void 0 && typeof(output = result) !== 'string') {\n\t\t\t\tcode = 0\n\t\t\t}\n\t\t}\n\n\t\t// reset\n\t\tkey = ''\n\t\tnscope = ''\n\t\tnscopealt = ''\n\t\tpattern = 0\n\t\tline = 1\n\t\tcolumn = 1\n\n\t\treturn compress*code === 0 ? output : minify(output)\n\t}\n\n\tstylis['use'] = use\n\tstylis['set'] = set\n\n\tif (options !== void 0) {\n\t\tset(options)\n\t}\n\n\treturn stylis\n}));\n"],"names":["Object","defineProperty","exports","Symbol","toStringTag","value","M","window","F","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","Q","Z","WeakMap","ct","constructor","t","e","s","this","_$cssResult$","Error","cssText","styleSheet","o","length","get","replaceSync","set","toString","X","i","cssRules","_t","L","H","tt","trustedTypes","mt","emptyScript","et","reactiveElementPolyfillSupport","Y","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","dt","W","attribute","type","String","converter","reflect","hasChanged","q","y","HTMLElement","super","_$Ei","Map","isUpdatePending","hasUpdated","_$El","u","addInitializer","finalize","h","push","observedAttributes","elementProperties","forEach","n","_$Ep","_$Ev","createProperty","state","noAccessor","hasOwnProperty","getPropertyDescriptor","r","requestUpdate","configurable","enumerable","getPropertyOptions","getPrototypeOf","properties","getOwnPropertyNames","getOwnPropertySymbols","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","_$E_","Promise","enableUpdating","_$AL","_$Eg","addController","_$ES","renderRoot","isConnected","hostConnected","call","removeController","splice","indexOf","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","adoptedStyleSheets","map","document","createElement","litNonce","setAttribute","textContent","appendChild","ft","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$EO","removeAttribute","c","has","_$EC","_$Ej","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$Ek","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","D","mode","ReactiveElement","reactiveElementVersions","x","S","st","createPolicy","createHTML","J","v","Math","random","slice","ut","At","A","N","createComment","O","pt","z","C","it","nt","f","RegExp","rt","ot","$t","Et","_$litType$","strings","values","E","for","lt","m","createTreeWalker","P","parts","l","_","a","d","g","lastIndex","exec","test","R","startsWith","bt","el","currentNode","content","firstChild","remove","append","childNodes","nextNode","nodeType","hasAttributes","getAttributeNames","endsWith","getAttribute","split","I","index","name","ctor","wt","Nt","Ot","k","tagName","data","innerHTML","b","_$Co","_$Cl","_$litDirective$","_$AO","_$AT","_$AS","Ct","_$AV","_$AN","_$AD","_$AM","parentNode","_$AU","creationScope","importNode","T","nextSibling","Pt","_$AI","_$AH","_$AA","_$AB","options","_$Cp","startNode","endNode","_$AR","$","iterator","yt","insertBefore","createTextNode","_$AC","_$AP","setConnected","element","fill","j","arguments","Ut","capture","once","passive","removeEventListener","addEventListener","handleEvent","host","ht","litHtmlPolyfillSupport","litHtmlVersions","B","w","renderOptions","_$Do","renderBefore","render","_$litPart$","Tt","finalized","_$litElement$","globalThis","litElementHydrateSupport","LitElement","at","litElementPolyfillSupport","litElementVersions","It","kind","descriptor","finisher","key","placement","originalKey","initializer","Mt","V","HTMLSlotElement","assignedElements","xt","kt","_$Ct","_$Ci","U","G","delete","size","gt","add","Dt","Lt","Wt","_$AQ","zt","reconnected","disconnected","setValue","Ht","Bt","K","Vt","Gt","Kt","Yt","getOwnPropertyDescriptor","p","GiscusWidget","GISCUS_SESSION_KEY","GISCUS_DEFAULT_HOST","ERROR_SUGGESTION","__session","_iframeRef","messageEventHandler","handleMessageEvent","bind","hasLoaded","strict","reactionsEnabled","emitMetadata","inputPosition","theme","lang","loading","setupSession","iframeRef","_host","URL","_formatError","location","href","localStorage","getItem","searchParams","setItem","hash","history","replaceState","title","removeItem","console","warn","message","signOut","origin","giscus","resizeHeight","style","height","log","error","includes","sendMessage","contentWindow","postMessage","updateConfig","setConfig","repo","repoId","category","categoryId","term","getTerm","number","getNumber","classList","getMetaContent","querySelector","_getCleanedUrl","mapping","pathname","substring","replace","getIframeSrc","id","session","description","backLink","URLSearchParams","reduce","customElements","define","elements","Rt","qt","module","useState","useEffect","resolve","then","jsx","repoid","categoryid","reactionsenabled","emitmetadata","inputposition","BioWrapper","styled","div","withConfig","displayName","componentId","profileImageRoot","siteUrl","Profile","props","colors","profile","Author","text","Description","secondaryText","LinksWrapper","icon","Link","_ref","link","children","React","target","rel","Bio","github","kaggle","instagram","facebook","twitter","blogger","medium","linkedIn","email","resume","links","author","FaGithub","FaKaggle","FaInstagram","FaFacebook","FaTwitter","FaXTwitter","FaMedium","FaBlogger","FaLinkedin","FaRegEnvelope","FaRegFileLines","FaLink","Divider","hr","mb","divider","propTypes","PropTypes","defaultProps","TagListWrapper","TagLink","selected","selectedTagBackground","tagBackground","selectedTagText","tagText","hoveredSelectedTagBackground","hoveredTagBackground","spaceToDash","tagList","count","tag","to","fieldValue","encodeURIComponent","totalCount","Wrapper","ArticleTitle","h1","Information","span","Date","Property","strong","date","tags","minToRead","TagList","SeriesWrapper","seriesBackground","SeriesHeader","h2","tertiaryText","PostWrapper","ul","Post","li","currentPost","ViewMore","header","series","fold","setFold","filteredPosts","useMemo","currentPostIdx","_findIndex","showViewButton","_replace","post","fields","slug","frontmatter","AiOutlineArrowLeft","onClick","useOffsetTop","ref","useRef","offsetTop","current","getBoundingClientRect","top","documentElement","scrollTop","useScroll","scroll","setScroll","onScroll","scrollY","scrollX","rect","scrollLeft","pageXOffset","pageYOffset","left","StyledWrapper","visible","css","revealAt","reveal","TocWrapper","scrollTrack","scrollHandle","stick","ParagraphTitle","subtitle","mutedText","active","accentText","secondAccentText","items","articleOffset","setRevealAt","headers","setHeaders","setActive","_toConsumableArray","querySelectorAll","getElementOffset","RevealOnScroll","item","handleClickTitle","animateScroll","scrollTo","innerText","blockQuoteBorder","blockQuoteBackground","inlineCodeBackgroundDarker","border","tableBackground","inlineCodeBackground","flipAccentText","flipAccentOppositeText","hoveredLinkText","Theme","createGlobalStyle","CommonStyle","PrismTheme","useSelector","LightMode","DarkMode","html","toc","setToc","from","Toc","StyledMarkdown","dangerouslySetInnerHTML","__html","itemProp","_defineProperties","writable","_defineProperty","obj","_extends","assign","source","apply","_objectSpread","ownKeys","keys","concat","filter","sym","_getPrototypeOf","setPrototypeOf","__proto__","_setPrototypeOf","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_possibleConstructorReturn","self","ReferenceError","_assertThisInitialized","STYLE_DATA_NAME","KEYFRAME_PREFIX","global","cascade","keyframe","prefix","compress","Keyframe","ROOT_ROTATE","FILL_UNFILL_ROTATE","LAYER_1_FADE_IN_OUT","LAYER_2_FADE_IN_OUT","LAYER_3_FADE_IN_OUT","LAYER_4_FADE_IN_OUT","LEFT_SPIN","RIGHT_SPIN","keyframes","MDSpinner","_React$PureComponent","instance","Constructor","TypeError","_classCallCheck","protoProps","staticProps","subClass","superClass","create","_inherits","rules","mountedInstanceCount","head","max","removeChild","_this$props","rest","singleColor","borderSize","duration","color1","color2","color3","color4","_getStyles","borderWidth","round","getColors","rootDuration","rootStyle","display","position","width","verticalAlign","fontSize","animation","WebkitAnimation","layerStyles","color","boxSizing","borderColor","whiteSpace","opacity","animationName","WebkitAnimationName","animationDuration","WebkitAnimationDuration","animationTimingFunction","WebkitAnimationTimingFunction","animationIterationCount","WebkitAnimationIterationCount","layerClipAfterStyle","borderRadius","layerAfterStyle","borderTopStyle","clipAfterStyle","bottom","borderStyle","clip1AfterStyle","transform","WebkitTransform","clip1AfterStyles","clip2AfterStyle","clipStyle","overflow","clip2AfterStyles","getStyles","layers","ArticleButtonContainer","ArrowFlexWrapper","ArticleButtonTextWrapper","Arrow","ArticleButtonWrapper","right","nextPostButtonBackground","hoveredNextPostButtonBackground","ArticleButtonLabel","ArticleButtonTitle","CommentWrapper","SpinnerWrapper","HiddenWrapper","isHidden","ArticleButton","BiRightArrowAlt","BiLeftArrowAlt","Spinner","useTheme","spinner","Comment","_ref2","setSpinner","setTimeout","Giscus","_ref3","_previous$frontmatter","_next$frontmatter","previous","next","_previous$fields","navigate","_next$fields","Article","article","Header","Series","Body","Footer","markdownRemark","seriesList","excerpt","readingTime","filteredSeries","edges","seriesPost","node","Layout","SEO","url","minutes","FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","freeSelf","root","Function","objectToString","nativeMax","nativeMin","min","now","debounce","func","wait","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","undefined","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","debounced","isInvoking","leadingEdge","toNumber","isObject","cancel","clearTimeout","flush","isObjectLike","isSymbol","other","valueOf","isBinary","array","predicate","fromIndex","fromRight","getRawTag","symToStringTag","trimmedEndIndex","reTrimStart","string","objectProto","nativeObjectToString","isOwn","unmasked","reWhitespace","charAt","baseFindIndex","baseIteratee","toInteger","baseGetTag","INFINITY","toFinite","remainder","baseTrim","_createClass","defineProperties","_react2","_interopRequireDefault","_scrollLink2","__esModule","default","ButtonElement","_React$Component","Component","_scrollElement2","_propTypes2","ElementWrapper","_this2","newProps","parentBindings","domNode","LinkElement","_temp","_this","_len","_key","_Link2","_Button2","_Element2","_scroller2","_scrollEvents2","_scrollSpy2","_animateScroll2","_Helpers2","scrollSpy","defaultScroller","scrollHash","protoTypes","isRequired","containerId","container","object","activeClass","spy","bool","smooth","oneOfType","offset","delay","isDynamic","absolute","onSetActive","onSetInactive","ignoreCancelEvents","hashSpy","spyThrottle","Helpers","Scroll","customScroller","scroller","_initialiseProps","getElementById","scrollSpyContainer","getScrollSpyContainer","isMounted","mount","mapContainer","addStateHandler","stateHandler","addSpyHandler","spyHandler","setState","unmount","className","trim","prop","handleClick","event","stopPropagation","preventDefault","getActiveLink","isInitialized","elemTopBound","elemBottomBound","containerTop","cords","offsetY","isInside","floor","isOutside","activeLink","setActiveLink","getHash","changeHash","updateStates","Element","_React$Component2","_this3","childBindings","registerElems","prevProps","unregister","register","_smooth2","_cancelEvents2","getAnimationType","defaultEasing","requestAnimationFrameHelper","requestAnimationFrame","webkitRequestAnimationFrame","currentWindowProperties","callback","getTime","currentPositionX","containerElement","body","supportPageOffset","isCSS1Compat","compatMode","currentPositionY","easing","timestamp","delta","targetPosition","startPosition","start","progress","percent","currentPosition","ceil","horizontal","easedAnimate","registered","setContainer","animateTopScroll","scrollOffset","delayTimeout","subscribe","isNaN","parseFloat","proceedOptions","scrollToTop","scrollToBottom","scrollWidth","offsetWidth","clientWidth","scrollContainerWidth","scrollHeight","offsetHeight","clientHeight","scrollContainerHeight","toPosition","scrollMore","_passiveEventListeners","events","cancelEvent","addPassiveEventListener","eventName","listener","supportsPassiveOption","opts","removePassiveEventListener","Events","scrollEvent","evtName","_utils","_utils2","mountFlag","initialized","containers","handleHashChange","initStateFromHash","isInit","saveHashHistory","updateHash","_scrollHash2","activeStyle","PureComponent","elemLeftBound","elemRightBound","containerLeft","offsetX","_cords","_props$saveHashHistor","_props$saveHashHistor2","_saveHashHistory","_lodash","_lodash2","spyCallbacks","spySetState","scrollSpyContainers","throttle","eventHandler","throttleAmount","eventThrottler","scrollHandler","handler","__mapped","__activeLink","getElementsByName","getElementsByClassName","pow","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getElementOffsetInfoUntil","currentOffsetParent","offsetParent","historyUpdate","hashVal","hashToUpdate","curLoc","urlToPush","search","pushState","filterElementInContainer","contains","compareDocumentPosition","getComputedStyle","offsetLeft","_getElementOffsetInfo","isDocument","factory","nullptn","formatptn","colonptn","cursorptn","transformptn","animationptn","propertiesptn","elementptn","selectorptn","andptn","escapeptn","invalidptn","keyframeptn","plcholdrptn","readonlyptn","beforeptn","afterptn","tailptn","whiteptn","pseudoptn","writingptn","supportsptn","propertyptn","selfptn","pseudofmt","dimensionptn","imgsrcptn","webkit","moz","ms","SEMICOLON","CLOSEBRACES","OPENBRACES","OPENPARENTHESES","CLOSEPARENTHESES","OPENBRACKET","CLOSEBRACKET","NEWLINE","CARRIAGE","TAB","AT","SPACE","AND","DASH","UNDERSCORE","STAR","COMMA","COLON","SINGLEQUOTE","DOUBLEQUOTE","FOWARDSLASH","GREATERTHAN","PLUS","TILDE","NULL","FORMFEED","VERTICALTAB","KEYFRAME","MEDIA","SUPPORTS","PLACEHOLDER","READONLY","IMPORT","CHARSET","DOCUMENT","PAGE","column","line","pattern","escape","semicolon","preserve","plugins","plugged","should","POSTS","PREPS","UNKWN","PROPS","BLCKS","ATRUL","unkwn","keyed","nscopealt","nscope","compile","parent","depth","selector","bracket","comment","parentheses","quote","first","second","code","tail","trail","peak","counter","context","atrule","pseudo","caret","format","insert","invert","eof","eol","char","chars","child","out","charCodeAt","delimited","select","proxy","join","supports","vendor","property","isolate","selectors","scope","level","input","third","cache","match","group","declare","list","padding","parents","stylis","minify","output","use","plugin","ns"],"sourceRoot":""} \ No newline at end of file diff --git a/index.html b/index.html index ea04e76..eb72ad7 100644 --- a/index.html +++ b/index.html @@ -80,7 +80,7 @@ .hlgCLY{margin-bottom:32px;line-height:1.7;font-size:16px;color:#404040;word-break:break-all;}/*!sc*/ data-styled.g53[id="PostList__Excerpt-sc-1oqnm6-3"]{content:"hlgCLY,"}/*!sc*/ .cUedeU{height:48px;}/*!sc*/ -data-styled.g64[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUedeU,"}/*!sc*/ +data-styled.g59[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUedeU,"}/*!sc*/ .jCYmBW{position:relative;}/*!sc*/ data-styled.g74[id="SideTagList__RelativeWrapper-sc-11pn9fc-0"]{content:"jCYmBW,"}/*!sc*/ .fhiNKx{position:absolute;left:112%;top:0px;width:200px;height:100px;font-size:16px;}/*!sc*/ @@ -92,11 +92,11 @@ .eplOOa:hover{color:#191919;}/*!sc*/ .eplOOa > a{color:inherit;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ data-styled.g77[id="SideTagList__Tag-sc-11pn9fc-3"]{content:"eplOOa,"}/*!sc*/ -minjun.blog
@MJ
안녕하세요, 최민준입니다 :)

Representing Instructions in computer

July 31, 2024

contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …


Design principles 4 of MIPS ISA

July 31, 2024

contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…


Design principles 1~3 of MIPS ISA

July 22, 2024

contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…


Measuring Performance

July 22, 2024

contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…


Defining Performance

July 22, 2024

contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…


CA Overview

July 22, 2024

contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…


Computer Architecture Intro

July 22, 2024

Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. -특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…


2024년 상반기 회고

July 20, 2024

지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…


기존 블로그 대신 Obsidian을 택한 이유

January 10, 2024

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…


2023년 회고

January 08, 2024

지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …

+minjun.blog
@MJ
안녕하세요, 최민준입니다 :)

sigchi 2024 관심 주제

September 07, 2024

1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신…


Representing Instructions in computer

July 31, 2024

contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …


Design principles 4 of MIPS ISA

July 31, 2024

contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…


Design principles 1~3 of MIPS ISA

July 22, 2024

contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…


Measuring Performance

July 22, 2024

contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…


Defining Performance

July 22, 2024

contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…


CA Overview

July 22, 2024

contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…


Computer Architecture Intro

July 22, 2024

Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. +특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…


2024년 상반기 회고

July 20, 2024

지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…


기존 블로그 대신 Obsidian을 택한 이유

January 10, 2024

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…

- \ No newline at end of file + \ No newline at end of file diff --git a/interesting topic among sigchi 2024/index.html b/interesting topic among sigchi 2024/index.html new file mode 100644 index 0000000..d262c3a --- /dev/null +++ b/interesting topic among sigchi 2024/index.html @@ -0,0 +1,239 @@ +sigchi 2024 관심 주제

sigchi 2024 관심 주제

@MJ · 5 min read
Created Date · 2024년 09월 07일 12:09
Last Update · 2024년 09월 18일 20:09

1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality

+

Intro 요약

+

다시금 달에 가기 위해 인력, 통신, 하드웨어, 소프트웨어 및 데이터 등 새로운 솔루션들이 뒷받침되고 있음. 달과 같은 더 밝은 빛, 더 어두운 그림자, 감소된 중력이 있는 상황 속에서 우주인이 부피가 크고 제한적인 우주복을 입고 장애물을 탐색해야함. 이러한 독특한 상황들을 시뮬레이션 하기 위해 VR이 활용되고 있음.

+

VR은 달의 환경 조건을 시각화하고 예상되는 시나리오를 테스트하는데 이상적인 도구이지만 시청각적 특성만 제현가능하다는 점 때문에 달을 완벽히 구현하는데 한계가 있음.

+

본 연구에서는 장갑과 물리적 모형을 이용해 실제와 비슷한 촉각적, 운동 감각을 구현하고 가상 신체에 대한 구체화 감각을 향상시키려는 노력을 함.

+

2. “I know I have this till my Last Breath”: Unmasking the Gaps in Chronic Obstructive Pulmonary Disease (COPD) Care in India

+

Intro 요약

+

비전염성 질환(NCD: Non-communicable disease)은 전 세계 사망자의 74%를 차지함. 이러한 비전염성 질환 중 만성 호흡기 질환(CRD: Chronic Respiratory Diseases)은 사망률에 크게 기여함. 최근 20년 사이에 사망률 28.5%, 유병률 39.8% 증가. 그 중 만성 폐쇄성 폐질환(COPD: Chronic Obstructive Pulmonary Disease)은 흔하지만 진단하기가 어려워 전 세계 사망 원인 중 3위를 차지함. 세계보건기구(WHO)는 심각성을 인지하고 NCD 예방 및 관리를 위한 세계 행동 계획과 지속 가능한 개발을 UN 2030 의제에 포함 시킴.

+

COPD와 같은 CRD로 인한 사망의 90%는 저소득 및 중소득 국가에서 발생. 2016년, CRD는 인도의 총 사망 및 장애 조정 생명 연수(DALY)의 10.9%와 6.4%를 차지, 이 중 CRD로 인한 총 DALY의 75.6%가 COPD에 기인. 인도의 의료 인프라에 불균형이 있기 때문. 대기 오염이 심화되면서 인도에 상당한 사회경제적 부담이 생김. 2016년 인도에서 COPD로 인한 총 DALY 중 53.7%가 대기 오염에 기인. 병원과 병상이 인도 인구에 비해 현저히 적음.

+

HCI 연구원들은 최근 몇 년 동안 CRD에 점점 더 관심을 보이고 있으며 디지털 건강 모니터링 및 웨어러블 장치, 원격 진료 및 원격 의료 솔루션, 행동 개입 및 게임화, 자기 관리를 포함한 CRD 치료의 다양한 측면을 다루고 있음.

+

3. Evaluating ActuAir: Building Occupants' Experiences of a Shape-Changing Air Quality Display

+

Intro 요약

+

건물이 점점 더 센서가 많아지고 기후 변화 압박 속에서 인식 및 웰빙 목적으로 건물 내 환경 데이터를 사용하는 데 대한 관심이 커지고 있음. 그에 비해 대형 모양 변경 디스플레이를 중심으로 한 연구에서는 거주자의 공기 질 데이터 경험에 대한 연구는 별로 없음.

+

ActuAir 시스템은 생체 모방 개념에서 영감을 받은 모듈식 맞춤형 룸 디바이더로, 팽창과 LED 애니메이션으로 AQ(Air Quality)를 표시. 이와 같은 대규모 소프트 로봇 및 모양 변경 반응형 아키텍쳐는 미래 스마트 빌딩 설계 및 HCI/HBI 연구에 기여함.

+ + \ No newline at end of file diff --git a/nuxt-katex/index.html b/nuxt-katex/index.html index b660c3d..cda49a8 100644 --- a/nuxt-katex/index.html +++ b/nuxt-katex/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -280,6 +280,6 @@

마무리

- \ No newline at end of file + \ No newline at end of file diff --git a/page-data/1-1. Defining Performance/page-data.json b/page-data/1-1. Defining Performance/page-data.json index 551657a..5d2da00 100644 --- a/page-data/1-1. Defining Performance/page-data.json +++ b/page-data/1-1. Defining Performance/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/1-1. Defining Performance/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to single task e.g., how long it takes to do a single …","html":"

contents: 0-1. CA Intro

\n

Two metrics for defining computer performances

\n
    \n
  1. Response time\n
      \n
    • The time between the start and completion of a task
    • \n
    • related to single task
    • \n
    • e.g., how long it takes to do a single task
    • \n
    \n
  2. \n
  3. Throughput\n
      \n
    • A total amount of works done per unit time
    • \n
    • related to multiple tasks
    • \n
    • e.g., tasks per hour
    • \n
    \n
  4. \n
\n

 

\n

Q. If we replace the processor in a computer with ad faster version

\n
    \n
  • Response time decrease
  • \n
  • Throughput increase
  • \n
\n

Q. If we add more processors to a system

\n
    \n
  • Response time maintain or increase (more lanes more complex)
  • \n
  • Throughput increase
  • \n
\n

Defining performance

\n
    \n
  • Performance=1execution  time(reponse  time)Performance = \\frac{1}{execution\\;time\\,(reponse\\;time)}Performance=executiontime(reponsetime)1
  • \n
  • Relative performance: X is N time faster than Y
  • \n
  • PerformancexPerformancey=ExecutiontimeyExecutiontimex=N\\frac{Performance_x}{Performance_y} = \\frac{Execution time_y}{Execution time_x} = NPerformanceyPerformancex=ExecutiontimexExecutiontimey=N
  • \n
\n

\n \n \n \n performance.jpg\n \n \n
performance.jpg
\n

\n
    \n
  • Elapsed time = system performance = t1 + t2 + t3 + t4\n
      \n
    • total time between the start and completion of a task, including everything
    • \n
    \n
  • \n
  • CPU time = CPU performance = t1 + t4 (Only this in this class)\n
      \n
    • The time spent processing a given task on a processor
    • \n
    \n
  • \n
\n
Performance=CPU  performance=1CPU  timePerformance = CPU\\;performance = \\frac{1}{CPU\\;time}Performance=CPUperformance=CPUtime1
\n

The CPU time can be further divided into

\n
    \n
  • User CPU time\n
      \n
    • spent for processing the code of the program (some functions)
    • \n
    \n
  • \n
  • System CPU time\n
      \n
    • spent in the operating system performing tasks for the program (OS)
    • \n
    \n
  • \n
","frontmatter":{"title":"Defining Performance","date":"2024년 07월 22일 15:07","updated":"2024년 07월 31일 15:07","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/1-1. Defining Performance/","readingTime":{"minutes":1.155}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}},"next":{"fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},"pageContext":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","series":null,"previousPostId":"0b650b2c-e1d8-533f-979c-7c4a2f177084","nextPostId":"68f03ffa-5893-565d-840e-f0f6ae87f5c9"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/1-1. Defining Performance/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to single task e.g., how long it takes to do a single …","html":"

contents: 0-1. CA Intro

\n

Two metrics for defining computer performances

\n
    \n
  1. Response time\n
      \n
    • The time between the start and completion of a task
    • \n
    • related to single task
    • \n
    • e.g., how long it takes to do a single task
    • \n
    \n
  2. \n
  3. Throughput\n
      \n
    • A total amount of works done per unit time
    • \n
    • related to multiple tasks
    • \n
    • e.g., tasks per hour
    • \n
    \n
  4. \n
\n

 

\n

Q. If we replace the processor in a computer with ad faster version

\n
    \n
  • Response time decrease
  • \n
  • Throughput increase
  • \n
\n

Q. If we add more processors to a system

\n
    \n
  • Response time maintain or increase (more lanes more complex)
  • \n
  • Throughput increase
  • \n
\n

Defining performance

\n
    \n
  • Performance=1execution  time(reponse  time)Performance = \\frac{1}{execution\\;time\\,(reponse\\;time)}Performance=executiontime(reponsetime)1
  • \n
  • Relative performance: X is N time faster than Y
  • \n
  • PerformancexPerformancey=ExecutiontimeyExecutiontimex=N\\frac{Performance_x}{Performance_y} = \\frac{Execution time_y}{Execution time_x} = NPerformanceyPerformancex=ExecutiontimexExecutiontimey=N
  • \n
\n

\n \n \n \n performance.jpg\n \n \n
performance.jpg
\n

\n
    \n
  • Elapsed time = system performance = t1 + t2 + t3 + t4\n
      \n
    • total time between the start and completion of a task, including everything
    • \n
    \n
  • \n
  • CPU time = CPU performance = t1 + t4 (Only this in this class)\n
      \n
    • The time spent processing a given task on a processor
    • \n
    \n
  • \n
\n
Performance=CPU  performance=1CPU  timePerformance = CPU\\;performance = \\frac{1}{CPU\\;time}Performance=CPUperformance=CPUtime1
\n

The CPU time can be further divided into

\n
    \n
  • User CPU time\n
      \n
    • spent for processing the code of the program (some functions)
    • \n
    \n
  • \n
  • System CPU time\n
      \n
    • spent in the operating system performing tasks for the program (OS)
    • \n
    \n
  • \n
","frontmatter":{"title":"Defining Performance","date":"2024년 07월 22일 15:07","updated":"2024년 07월 31일 15:07","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/1-1. Defining Performance/","readingTime":{"minutes":1.155}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}},"next":{"fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},"pageContext":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","series":null,"previousPostId":"0b650b2c-e1d8-533f-979c-7c4a2f177084","nextPostId":"68f03ffa-5893-565d-840e-f0f6ae87f5c9"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/1-2. Measuring Performance/page-data.json b/page-data/1-2. Measuring Performance/page-data.json index fe1cd7a..23961b6 100644 --- a/page-data/1-2. Measuring Performance/page-data.json +++ b/page-data/1-2. Measuring Performance/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/1-2. Measuring Performance/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic operation Clock rate (frequency): How many basic o…","html":"

contents: 0-1. CA Intro

\n

Measuring CPU performance

\n
    \n
  • Clock period: the duration of a clock cycle\n
      \n
    • How long the computer takes to perform a single basic operation
    • \n
    \n
  • \n
  • Clock rate (frequency): cycles  per  second=1clock  periodcycles\\;per\\;second = \\frac{1}{clock\\;period}cyclespersecond=clockperiod1\n
      \n
    • How many basic operations can be performed in a second
    • \n
    \n
  • \n
\n
CPU  time=Clock  cycles×Clock  period=Clock  cycles×1Clock  rate\nCPU\\;time = Clock\\;cycles \\times Clock\\;period \\\\ = Clock\\;cycles \\times \\frac{1}{Clock\\;rate}\nCPUtime=Clockcycles×Clockperiod=Clockcycles×Clockrate1
\n

What is CPI?

\n

Clock Cycles per instruction\n: Average number of clock cycles per instruction for a program or program fragment

\n
CPU  time=Clock  cycles×1Clock  rate=Instruction  count×CPI×1Clock  rate\nCPU\\;time = Clock\\;cycles \\times \\frac{1}{Clock\\;rate} \\\\= Instruction\\;count \\times CPI \\times \\frac{1}{Clock\\;rate}\nCPUtime=Clockcycles×Clockrate1=Instructioncount×CPI×Clockrate1
\n

CPI can be affected by

\n
    \n
  1. Cost for each instruction type: CPIiCPI_iCPIi
  2. \n
  3. The frequency of each type of instructions: Fi=Instruction  countiInstruction  countF_i = \\frac{Instruction\\;count_i}{Instruction\\;count}Fi=InstructioncountInstructioncounti
  4. \n
\n
CPI=i=1nCPIi×Fi\n\\displaystyle CPI = \\sum_{i=1}^{n}{CPI_i \\times F_i}\nCPI=i=1nCPIi×Fi
\n

More about

\n

Benchmark

\n

: a tool for measuring the performance of computers

\n
    \n
  • Metric: Geometric Mean
  • \n
\n
 Performance=1i=1nExecution  time  ratioin=1i=1nExecution  timeX,iExecution  timeREF,in =i=1nExecution  timeREF,iExecution  timeX,in\n Performance = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{Execution\\;time\\;ratio_i}}} \\\\ = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{\\frac{Execution\\;time_{X,i}}{Execution\\;time_{REF,i}}}}} \n \\\\ = \\sqrt[n]{\\textstyle \\prod_{i=1}^{n}{\\frac{Execution\\;time_{REF,i}}{Execution\\;time_{X,i}}}}\n Performance=ni=1nExecutiontimeratioi1=ni=1nExecutiontimeREF,iExecutiontimeX,i1 =ni=1nExecutiontimeX,iExecutiontimeREF,i
\n

Amdahl's law

\n

Execution  time  after  improvementExecution\\;time\\;after\\;improvementExecutiontimeafterimprovement

\n

=Execution  time  affected  by  improvementAmount  of  improvement+Execution  time  unaffected= \\frac{Execution\\;time\\;affected\\;by\\;improvement}{Amount\\;of\\;improvement} + Execution\\;time\\;unaffected=AmountofimprovementExecutiontimeaffectedbyimprovement+Executiontimeunaffected

","frontmatter":{"title":"Measuring Performance","date":"2024년 07월 22일 15:07","updated":"2024년 08월 02일 15:08","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/1-2. Measuring Performance/","readingTime":{"minutes":0.815}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}},"next":{"fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},"pageContext":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","series":null,"previousPostId":"b47b70aa-e8ac-5077-9959-1e864d435bb6","nextPostId":"85e63ee9-5665-538b-ac43-635e8220e2d2"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/1-2. Measuring Performance/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic operation Clock rate (frequency): How many basic o…","html":"

contents: 0-1. CA Intro

\n

Measuring CPU performance

\n
    \n
  • Clock period: the duration of a clock cycle\n
      \n
    • How long the computer takes to perform a single basic operation
    • \n
    \n
  • \n
  • Clock rate (frequency): cycles  per  second=1clock  periodcycles\\;per\\;second = \\frac{1}{clock\\;period}cyclespersecond=clockperiod1\n
      \n
    • How many basic operations can be performed in a second
    • \n
    \n
  • \n
\n
CPU  time=Clock  cycles×Clock  period=Clock  cycles×1Clock  rate\nCPU\\;time = Clock\\;cycles \\times Clock\\;period \\\\ = Clock\\;cycles \\times \\frac{1}{Clock\\;rate}\nCPUtime=Clockcycles×Clockperiod=Clockcycles×Clockrate1
\n

What is CPI?

\n

Clock Cycles per instruction\n: Average number of clock cycles per instruction for a program or program fragment

\n
CPU  time=Clock  cycles×1Clock  rate=Instruction  count×CPI×1Clock  rate\nCPU\\;time = Clock\\;cycles \\times \\frac{1}{Clock\\;rate} \\\\= Instruction\\;count \\times CPI \\times \\frac{1}{Clock\\;rate}\nCPUtime=Clockcycles×Clockrate1=Instructioncount×CPI×Clockrate1
\n

CPI can be affected by

\n
    \n
  1. Cost for each instruction type: CPIiCPI_iCPIi
  2. \n
  3. The frequency of each type of instructions: Fi=Instruction  countiInstruction  countF_i = \\frac{Instruction\\;count_i}{Instruction\\;count}Fi=InstructioncountInstructioncounti
  4. \n
\n
CPI=i=1nCPIi×Fi\n\\displaystyle CPI = \\sum_{i=1}^{n}{CPI_i \\times F_i}\nCPI=i=1nCPIi×Fi
\n

More about

\n

Benchmark

\n

: a tool for measuring the performance of computers

\n
    \n
  • Metric: Geometric Mean
  • \n
\n
 Performance=1i=1nExecution  time  ratioin=1i=1nExecution  timeX,iExecution  timeREF,in =i=1nExecution  timeREF,iExecution  timeX,in\n Performance = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{Execution\\;time\\;ratio_i}}} \\\\ = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{\\frac{Execution\\;time_{X,i}}{Execution\\;time_{REF,i}}}}} \n \\\\ = \\sqrt[n]{\\textstyle \\prod_{i=1}^{n}{\\frac{Execution\\;time_{REF,i}}{Execution\\;time_{X,i}}}}\n Performance=ni=1nExecutiontimeratioi1=ni=1nExecutiontimeREF,iExecutiontimeX,i1 =ni=1nExecutiontimeX,iExecutiontimeREF,i
\n

Amdahl's law

\n

Execution  time  after  improvementExecution\\;time\\;after\\;improvementExecutiontimeafterimprovement

\n

=Execution  time  affected  by  improvementAmount  of  improvement+Execution  time  unaffected= \\frac{Execution\\;time\\;affected\\;by\\;improvement}{Amount\\;of\\;improvement} + Execution\\;time\\;unaffected=AmountofimprovementExecutiontimeaffectedbyimprovement+Executiontimeunaffected

","frontmatter":{"title":"Measuring Performance","date":"2024년 07월 22일 15:07","updated":"2024년 08월 02일 15:08","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/1-2. Measuring Performance/","readingTime":{"minutes":0.815}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}},"next":{"fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},"pageContext":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","series":null,"previousPostId":"b47b70aa-e8ac-5077-9959-1e864d435bb6","nextPostId":"85e63ee9-5665-538b-ac43-635e8220e2d2"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/2-1. Designing principles 1~3 of MIPS ISA/page-data.json b/page-data/2-1. Designing principles 1~3 of MIPS ISA/page-data.json index 4db9970..85517a1 100644 --- a/page-data/2-1. Designing principles 1~3 of MIPS ISA/page-data.json +++ b/page-data/2-1. Designing principles 1~3 of MIPS ISA/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/2-1. Designing principles 1~3 of MIPS ISA/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favors regularity Smaller is faster Make the common ca…","html":"

contents: 0-1. CA Intro

\n

MIPS ISA

\n

What is MIPS ISA

\n
    \n
  • Microprocessor without Interlocked Pipelined Stages
  • \n
  • A kind of ISA
  • \n
\n

Design principles

\n
    \n
  1. Simplicity favors regularity
  2. \n
  3. Smaller is faster
  4. \n
  5. Make the common case fast
  6. \n
\n

Design Principle 1

\n

Simplicity favors regularity

\n
    \n
  • Regularity: all MIPS arithmetic instructions include a single operation & three operands
  • \n
  • Regularity makes implementation simpler
  • \n
  • Simplicity enables higher performance at lower cost
  • \n
\n

Examples

\n
    \n
  • add a, b, c\n
      \n
    • a=b+ca = b + ca=b+c
    • \n
    \n
  • \n
  • sub a, a, d\n
      \n
    • a=ada = a - da=ad
    • \n
    \n
  • \n
\n

Design Principle 2

\n

Smaller is faster

\n
    \n
  • Operands of MIPS arithmetic instructions must be chosen in a small number of registers
  • \n
  • Register: Fast locations for data
  • \n
  • 32 32-bit registers in MIPS
  • \n
  • 32 is 252^525 that can be represented by using 5 bits
    \n \n \n \n registers.jpg\n \n \n
    registers.jpg
    \n
  • \n
\n

Practice 1

\n

C code:

\n
f = (g + h) - (i + j)
\n

Compiled MIPS assembly language code:

\n
add $t0, $s1, $s2\nadd $t1, $s3, $s4\nsub $s0, $t0, $t1
\n

Memory instruction

\n

Memory organization

\n

keep a small amount data in registers and other remaining, complex data in memory

\n
    \n
  • Load values from memory into registers
  • \n
  • Store results from registers to memory
  • \n
\n

Address

\n

A memory address is an index to the memory array, starting at 0\nMIPS uses byte addressing (Each address identifies an 8-bit byte)

\n

But, most data items are larger than a byte. So, they use \"words\"

\n
    \n
  • In MIPS, a ward is 32 bits
  • \n
  • Registers also hold 32-bit of data
  • \n
\n

Alignment restrictions

\n
    \n
  • The start address of each data should be multiple of N, where N is the size of the data
  • \n
  • In MIPS, words must start at a addresses that are multiples of 4
  • \n
  • Some data items use one or two bytes (halfword)
  • \n
\n

Byte ordering

\n
    \n
  • Big endian(MIPS): place the most significant byte first and the least significant byte last
  • \n
  • Little endian: place the least significant byte first and the most significant byte last  
  • \n
\n

Load/Store

\n
    \n
  • lw reg1 offset(reg2): Load 32-bit word from the memory address reg2 + offset into reg1
  • \n
  • sw reg1 offset(reg2): Store 32-bit word in reg1 at the memory address reg2 + offset
  • \n
  • lh/sh and lb/sb instructions load/store halfwords and 8-bit of data
  • \n
\n

Practice 2

\n

C code:

\n
g = h + A[8]
\n
    \n
  • A is an array of 4-bytes words
  • \n
  • The value of g and h are in $s1 and $s2
  • \n
  • The base address of A is in $s3
  • \n
\n

Compiled MIPS assembly language code:

\n
lw $t0, 32($s3)\nadd $s1, $s2, $t0
\n

Practice 2

\n

C code:

\n
A[12] = h+ A[8]
\n
    \n
  • A is an array of 4-bytes words
  • \n
  • The value of h is in $s2
  • \n
  • The base address of A is in $s3
  • \n
\n

Compiled MIPS assembly language code:

\n
lw $t0, 32($s3)\nadd $t0, $s2, $t0\nsw $t0, 48($s3)
\n

Practice 3

\n

C code:

\n
f = (g + h) - (i + j)
\n
    \n
  • f, g, and h are in $s0, $s1, and $2 respectively
  • \n
  • Halfwords i and j are sequentially stored in memory
  • \n
  • The start address of i is stored in $s3
  • \n
\n

Compiled MIPS assembly language code:

\n
add $t0, $s1, $s2\nlh $t1, 0($s3)\nlh $t2, 2($s3)\nadd $t3, $t1, $t2\nsub $s2, $t0, $t3
\n

Design Principle 3

\n

Make the common case fast

\n

Common case : a program uses a small constant in an operation many times

\n

Solution: support

\n
    \n
  • \n

    16-bit immediate operands for handling the constants

    \n
      \n
    • no need to access memory to load the constants
    • \n
    • addi $t0, $t0, 4 : addi is an add immediate instruction
    • \n
    \n
  • \n
  • \n

    MIPS register 0 ($zero) contains the constant 0

    \n
      \n
    • add $t0, $t1, $zero : move values between two registers $t0 and t1
    • \n
    \n
  • \n
\n

Practice 4

\n

C code:

\n
f = A[10] - i + 4
\n
    \n
  • A is an array of bytes and its base address is stored in $s0
  • \n
  • f and i are stored in $s1 and $s2 respectively
  • \n
\n

Compiled MIPS assembly language code:

\n
lb $t0, 10($s0)\nsub $t1, $t0, $s2\naddi $s1, $t1, 4
\n

Summary: MIPS ISA

\n

Key underlying design principles

\n
    \n
  • Design principle 1. Simplicity favors regularity\n
      \n
    • All MIPS arithmetic instructions include a single operation & three operands
    • \n
    \n
  • \n
  • Design principle 2. Smaller is faster\n
      \n
    • Operands of MIPS arithmetic instructions must be chosen in a small number of registers
    • \n
    • MIPS keeps more complex data in memory and supports data transfer between memory and registers
    • \n
    \n
  • \n
  • Design principle 3. Make the common case faster\n
      \n
    • Support 16-bit immediate operands for handling small constants + $zero
    • \n
    \n
  • \n
","frontmatter":{"title":"Design principles 1~3 of MIPS ISA","date":"2024년 07월 22일 16:07","updated":"2024년 07월 31일 15:07","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/","readingTime":{"minutes":3.985}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}},"next":{"fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},"pageContext":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","series":null,"previousPostId":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","nextPostId":"2e0c3819-8874-5c1d-a775-2a6a841b21b5"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/2-1. Designing principles 1~3 of MIPS ISA/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favors regularity Smaller is faster Make the common ca…","html":"

contents: 0-1. CA Intro

\n

MIPS ISA

\n

What is MIPS ISA

\n
    \n
  • Microprocessor without Interlocked Pipelined Stages
  • \n
  • A kind of ISA
  • \n
\n

Design principles

\n
    \n
  1. Simplicity favors regularity
  2. \n
  3. Smaller is faster
  4. \n
  5. Make the common case fast
  6. \n
\n

Design Principle 1

\n

Simplicity favors regularity

\n
    \n
  • Regularity: all MIPS arithmetic instructions include a single operation & three operands
  • \n
  • Regularity makes implementation simpler
  • \n
  • Simplicity enables higher performance at lower cost
  • \n
\n

Examples

\n
    \n
  • add a, b, c\n
      \n
    • a=b+ca = b + ca=b+c
    • \n
    \n
  • \n
  • sub a, a, d\n
      \n
    • a=ada = a - da=ad
    • \n
    \n
  • \n
\n

Design Principle 2

\n

Smaller is faster

\n
    \n
  • Operands of MIPS arithmetic instructions must be chosen in a small number of registers
  • \n
  • Register: Fast locations for data
  • \n
  • 32 32-bit registers in MIPS
  • \n
  • 32 is 252^525 that can be represented by using 5 bits
    \n \n \n \n registers.jpg\n \n \n
    registers.jpg
    \n
  • \n
\n

Practice 1

\n

C code:

\n
f = (g + h) - (i + j)
\n

Compiled MIPS assembly language code:

\n
add $t0, $s1, $s2\nadd $t1, $s3, $s4\nsub $s0, $t0, $t1
\n

Memory instruction

\n

Memory organization

\n

keep a small amount data in registers and other remaining, complex data in memory

\n
    \n
  • Load values from memory into registers
  • \n
  • Store results from registers to memory
  • \n
\n

Address

\n

A memory address is an index to the memory array, starting at 0\nMIPS uses byte addressing (Each address identifies an 8-bit byte)

\n

But, most data items are larger than a byte. So, they use \"words\"

\n
    \n
  • In MIPS, a ward is 32 bits
  • \n
  • Registers also hold 32-bit of data
  • \n
\n

Alignment restrictions

\n
    \n
  • The start address of each data should be multiple of N, where N is the size of the data
  • \n
  • In MIPS, words must start at a addresses that are multiples of 4
  • \n
  • Some data items use one or two bytes (halfword)
  • \n
\n

Byte ordering

\n
    \n
  • Big endian(MIPS): place the most significant byte first and the least significant byte last
  • \n
  • Little endian: place the least significant byte first and the most significant byte last  
  • \n
\n

Load/Store

\n
    \n
  • lw reg1 offset(reg2): Load 32-bit word from the memory address reg2 + offset into reg1
  • \n
  • sw reg1 offset(reg2): Store 32-bit word in reg1 at the memory address reg2 + offset
  • \n
  • lh/sh and lb/sb instructions load/store halfwords and 8-bit of data
  • \n
\n

Practice 2

\n

C code:

\n
g = h + A[8]
\n
    \n
  • A is an array of 4-bytes words
  • \n
  • The value of g and h are in $s1 and $s2
  • \n
  • The base address of A is in $s3
  • \n
\n

Compiled MIPS assembly language code:

\n
lw $t0, 32($s3)\nadd $s1, $s2, $t0
\n

Practice 2

\n

C code:

\n
A[12] = h+ A[8]
\n
    \n
  • A is an array of 4-bytes words
  • \n
  • The value of h is in $s2
  • \n
  • The base address of A is in $s3
  • \n
\n

Compiled MIPS assembly language code:

\n
lw $t0, 32($s3)\nadd $t0, $s2, $t0\nsw $t0, 48($s3)
\n

Practice 3

\n

C code:

\n
f = (g + h) - (i + j)
\n
    \n
  • f, g, and h are in $s0, $s1, and $2 respectively
  • \n
  • Halfwords i and j are sequentially stored in memory
  • \n
  • The start address of i is stored in $s3
  • \n
\n

Compiled MIPS assembly language code:

\n
add $t0, $s1, $s2\nlh $t1, 0($s3)\nlh $t2, 2($s3)\nadd $t3, $t1, $t2\nsub $s2, $t0, $t3
\n

Design Principle 3

\n

Make the common case fast

\n

Common case : a program uses a small constant in an operation many times

\n

Solution: support

\n
    \n
  • \n

    16-bit immediate operands for handling the constants

    \n
      \n
    • no need to access memory to load the constants
    • \n
    • addi $t0, $t0, 4 : addi is an add immediate instruction
    • \n
    \n
  • \n
  • \n

    MIPS register 0 ($zero) contains the constant 0

    \n
      \n
    • add $t0, $t1, $zero : move values between two registers $t0 and t1
    • \n
    \n
  • \n
\n

Practice 4

\n

C code:

\n
f = A[10] - i + 4
\n
    \n
  • A is an array of bytes and its base address is stored in $s0
  • \n
  • f and i are stored in $s1 and $s2 respectively
  • \n
\n

Compiled MIPS assembly language code:

\n
lb $t0, 10($s0)\nsub $t1, $t0, $s2\naddi $s1, $t1, 4
\n

Summary: MIPS ISA

\n

Key underlying design principles

\n
    \n
  • Design principle 1. Simplicity favors regularity\n
      \n
    • All MIPS arithmetic instructions include a single operation & three operands
    • \n
    \n
  • \n
  • Design principle 2. Smaller is faster\n
      \n
    • Operands of MIPS arithmetic instructions must be chosen in a small number of registers
    • \n
    • MIPS keeps more complex data in memory and supports data transfer between memory and registers
    • \n
    \n
  • \n
  • Design principle 3. Make the common case faster\n
      \n
    • Support 16-bit immediate operands for handling small constants + $zero
    • \n
    \n
  • \n
","frontmatter":{"title":"Design principles 1~3 of MIPS ISA","date":"2024년 07월 22일 16:07","updated":"2024년 07월 31일 15:07","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/","readingTime":{"minutes":3.985}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}},"next":{"fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},"pageContext":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","series":null,"previousPostId":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","nextPostId":"2e0c3819-8874-5c1d-a775-2a6a841b21b5"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/2-2. Design principles 4 of MIPS ISA/page-data.json b/page-data/2-2. Design principles 4 of MIPS ISA/page-data.json index 1f2666b..4d85420 100644 --- a/page-data/2-2. Design principles 4 of MIPS ISA/page-data.json +++ b/page-data/2-2. Design principles 4 of MIPS ISA/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/2-2. Design principles 4 of MIPS ISA/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to encode instructions and data in well-formed binary. D…","html":"

contents: 0-1. CA Intro

\n

The assembly language that has been studied so far is not a form that the processor can understand.

\n

Therefore, we need to encode instructions and data in well-formed binary.

\n

Data representation

\n

numbers

\n
    \n
  • Numbers are kept in computer hardware as a series of 1 and 0
  • \n
  • They are considered base 2 numbers (binary numbers)
  • \n
  • Binary numbers are stored in words
  • \n
  • In MIPS, the words are 34 bits (4 bytes) long + MIPS is big endian
  • \n
\n

unsigned numbers

\n
    \n
  • By using n bits, we can represent unsigned numbers from 0 to 2n12^n-12n1
  • \n
\n

signed numbers

\n

Signed Magnitude

\n
    \n
  • first bit determines mathematical symbols\n
      \n
    • 0 is plus (+)
    • \n
    • 1 is minus (-)
    • \n
    \n
  • \n
  • others are bit size
  • \n
  • but, 000 = 100 = 0
  • \n
\n

One's complement

\n
    \n
  • first bit determines mathematical symbols\n
      \n
    • 0 is plus (+)
    • \n
    • 1 is minus (-)
    • \n
    \n
  • \n
  • if first bit is 0\n
      \n
    • read it as it is
    • \n
    \n
  • \n
  • if first bit is 1\n
      \n
    • flip 1 to 0, 0 to 1
    • \n
    \n
  • \n
  • ex) 100 = -3
  • \n
  • but, 000 = 111 = 0
  • \n
\n

Two's complement

\n
    \n
  • first bit determines mathematical symbols\n
      \n
    • 0 is plus (+)
    • \n
    • 1 is minus (-)
    • \n
    \n
  • \n
  • if first bit is 0\n
      \n
    • read it as it is
    • \n
    \n
  • \n
  • if first bit is 1\n
      \n
    • flip 1 to 0, 0 to 1
    • \n
    • plus 1
    • \n
    \n
  • \n
  • ex) 100 = -4
  • \n
  • the number of zero is 1
  • \n
\n

Answer

\n

two's complement  

\n
    \n
  • we can get the computation result by just doing given arithmetic operations
  • \n
\n

    - 000 - 001 = 111 ( 0 - 1 = -1)\n    - 010 + 111 = 001 (2 + (-1) = 1)

\n
    \n
  • the number of zero is only 1.
  • \n
  • by using n bits, we can represent signed numbers from 2n1-2^{n-1}2n1 to 2n112^{n-1}-12n11
  • \n
\n

Signed extension

\n

Sometimes, we need to represent n-bit numbers by using more than n bits

\n
    \n
  • 16-bit immediate should be converted to 32 bits for arithmetic
  • \n
  • Instructions lb/lh loads byte/halfword from memory space and store it into 32-bit registers
  • \n
  • Replicate the sign bit to the left\n
    \n \n \n \n signed extension.jpg\n \n \n
    signed extension.jpg
    \n
  • \n
\n

Instruction representation

\n

Like data, instructions are also encoded/represented in binary\nWe call the encoded instructions as machine instructions

\n

For representing instructions, ISA defines instruction format\nIssue: to represent all kinds of instructions, we might need many instrucion formants

\n

Design principle 4

\n

Good design demands good compromise

\n

Based on this, MIPS keeps formats as similar as possible (regularity)

\n

R-format

\n

For the instructions that use only Register operands\n

\n \n \n \n r-format.jpg\n \n \n
r-format.jpg
\n

\n
    \n
  • op (opcode): basic operation of the instruction (what the instruction does)
  • \n
  • rs: the first source register operand
  • \n
  • rt: the second source register operand
  • \n
  • rd: the destination register operand
  • \n
  • shamt: shift amount (used for shift operations)
  • \n
  • funct: function code (the specific variant of the operation)
  • \n
\n
\n

Q. why are the rs, rt, rd 5 bits?

\n

A. registers are 32, which means 5 bits are enough to express each register

\n
\n

I-format

\n

For the instructions that use Immediate operands\n

\n \n \n \n i-format.jpg\n \n \n
i-format.jpg
\n

\n
    \n
  • op (opcode): basic operation of the instruction (what the instruction does)
  • \n
  • rs: the first source register operand
  • \n
  • rt: the second source register operand
  • \n
  • Constant or address
  • \n
\n

Summary

\n

Key underlying design principles

\n

Design Principle 1

\n

Simplicity favors regularity

\n

All MIPS arithmetic instructions include a single operation & three operands

\n
    \n
  • Lower clock period or CPI
  • \n
\n

Design Principle 2

\n

Smaller is faster

\n

Operands of MIPS arithmetic instructions must be chosen in a small number of registers.\nMIPS keeps more complex data in memory and supports data transfer between memory and registers.

\n
    \n
  • Lower clock period or CPI
  • \n
\n

Design Principle 3

\n

Make the common case fast

\n

Support 16-bit immediate operands for handling small constants + $zero

\n
    \n
  • Lower Instruction count
  • \n
\n

Design Principle 4

\n

Good design demands goog compromise

\n

Keep all instructions the same length + keep instruction formats similar as possible.\nData (numbers) are also represented in binary based on two's complement rules.

\n
    \n
  • Lower clock period or CPI
  • \n
","frontmatter":{"title":"Design principles 4 of MIPS ISA","date":"2024년 07월 31일 15:07","updated":"2024년 07월 31일 15:07","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/","readingTime":{"minutes":3.47}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}},"next":{"fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},"pageContext":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","series":null,"previousPostId":"85e63ee9-5665-538b-ac43-635e8220e2d2","nextPostId":"0c2c4f4c-9eb8-50df-891b-1365303231f7"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/2-2. Design principles 4 of MIPS ISA/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to encode instructions and data in well-formed binary. D…","html":"

contents: 0-1. CA Intro

\n

The assembly language that has been studied so far is not a form that the processor can understand.

\n

Therefore, we need to encode instructions and data in well-formed binary.

\n

Data representation

\n

numbers

\n
    \n
  • Numbers are kept in computer hardware as a series of 1 and 0
  • \n
  • They are considered base 2 numbers (binary numbers)
  • \n
  • Binary numbers are stored in words
  • \n
  • In MIPS, the words are 34 bits (4 bytes) long + MIPS is big endian
  • \n
\n

unsigned numbers

\n
    \n
  • By using n bits, we can represent unsigned numbers from 0 to 2n12^n-12n1
  • \n
\n

signed numbers

\n

Signed Magnitude

\n
    \n
  • first bit determines mathematical symbols\n
      \n
    • 0 is plus (+)
    • \n
    • 1 is minus (-)
    • \n
    \n
  • \n
  • others are bit size
  • \n
  • but, 000 = 100 = 0
  • \n
\n

One's complement

\n
    \n
  • first bit determines mathematical symbols\n
      \n
    • 0 is plus (+)
    • \n
    • 1 is minus (-)
    • \n
    \n
  • \n
  • if first bit is 0\n
      \n
    • read it as it is
    • \n
    \n
  • \n
  • if first bit is 1\n
      \n
    • flip 1 to 0, 0 to 1
    • \n
    \n
  • \n
  • ex) 100 = -3
  • \n
  • but, 000 = 111 = 0
  • \n
\n

Two's complement

\n
    \n
  • first bit determines mathematical symbols\n
      \n
    • 0 is plus (+)
    • \n
    • 1 is minus (-)
    • \n
    \n
  • \n
  • if first bit is 0\n
      \n
    • read it as it is
    • \n
    \n
  • \n
  • if first bit is 1\n
      \n
    • flip 1 to 0, 0 to 1
    • \n
    • plus 1
    • \n
    \n
  • \n
  • ex) 100 = -4
  • \n
  • the number of zero is 1
  • \n
\n

Answer

\n

two's complement  

\n
    \n
  • we can get the computation result by just doing given arithmetic operations
  • \n
\n

    - 000 - 001 = 111 ( 0 - 1 = -1)\n    - 010 + 111 = 001 (2 + (-1) = 1)

\n
    \n
  • the number of zero is only 1.
  • \n
  • by using n bits, we can represent signed numbers from 2n1-2^{n-1}2n1 to 2n112^{n-1}-12n11
  • \n
\n

Signed extension

\n

Sometimes, we need to represent n-bit numbers by using more than n bits

\n
    \n
  • 16-bit immediate should be converted to 32 bits for arithmetic
  • \n
  • Instructions lb/lh loads byte/halfword from memory space and store it into 32-bit registers
  • \n
  • Replicate the sign bit to the left\n
    \n \n \n \n signed extension.jpg\n \n \n
    signed extension.jpg
    \n
  • \n
\n

Instruction representation

\n

Like data, instructions are also encoded/represented in binary\nWe call the encoded instructions as machine instructions

\n

For representing instructions, ISA defines instruction format\nIssue: to represent all kinds of instructions, we might need many instrucion formants

\n

Design principle 4

\n

Good design demands good compromise

\n

Based on this, MIPS keeps formats as similar as possible (regularity)

\n

R-format

\n

For the instructions that use only Register operands\n

\n \n \n \n r-format.jpg\n \n \n
r-format.jpg
\n

\n
    \n
  • op (opcode): basic operation of the instruction (what the instruction does)
  • \n
  • rs: the first source register operand
  • \n
  • rt: the second source register operand
  • \n
  • rd: the destination register operand
  • \n
  • shamt: shift amount (used for shift operations)
  • \n
  • funct: function code (the specific variant of the operation)
  • \n
\n
\n

Q. why are the rs, rt, rd 5 bits?

\n

A. registers are 32, which means 5 bits are enough to express each register

\n
\n

I-format

\n

For the instructions that use Immediate operands\n

\n \n \n \n i-format.jpg\n \n \n
i-format.jpg
\n

\n
    \n
  • op (opcode): basic operation of the instruction (what the instruction does)
  • \n
  • rs: the first source register operand
  • \n
  • rt: the second source register operand
  • \n
  • Constant or address
  • \n
\n

Summary

\n

Key underlying design principles

\n

Design Principle 1

\n

Simplicity favors regularity

\n

All MIPS arithmetic instructions include a single operation & three operands

\n
    \n
  • Lower clock period or CPI
  • \n
\n

Design Principle 2

\n

Smaller is faster

\n

Operands of MIPS arithmetic instructions must be chosen in a small number of registers.\nMIPS keeps more complex data in memory and supports data transfer between memory and registers.

\n
    \n
  • Lower clock period or CPI
  • \n
\n

Design Principle 3

\n

Make the common case fast

\n

Support 16-bit immediate operands for handling small constants + $zero

\n
    \n
  • Lower Instruction count
  • \n
\n

Design Principle 4

\n

Good design demands goog compromise

\n

Keep all instructions the same length + keep instruction formats similar as possible.\nData (numbers) are also represented in binary based on two's complement rules.

\n
    \n
  • Lower clock period or CPI
  • \n
","frontmatter":{"title":"Design principles 4 of MIPS ISA","date":"2024년 07월 31일 15:07","updated":"2024년 07월 31일 15:07","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/","readingTime":{"minutes":3.47}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}},"next":{"fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},"pageContext":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","series":null,"previousPostId":"85e63ee9-5665-538b-ac43-635e8220e2d2","nextPostId":"0c2c4f4c-9eb8-50df-891b-1365303231f7"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/2-3. Representing Instructions in computer/page-data.json b/page-data/2-3. Representing Instructions in computer/page-data.json index 6bff010..ef5e716 100644 --- a/page-data/2-3. Representing Instructions in computer/page-data.json +++ b/page-data/2-3. Representing Instructions in computer/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/2-3. Representing Instructions in computer/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic & logic unit (ALU) does the operation hold the va…","html":"

contents: 0-1. CA Intro

\n

Common HW design for MIPS ISA

\n

\n \n \n \n HW design.jpg\n \n \n
HW design.jpg
\n

\n

CPU, register, and memory

\n
    \n
  • Control unit (CU) directs the operation of the processor
  • \n
  • Arithmetic & logic unit (ALU) does the operation
  • \n
  • $0, ..., $31 hold the value that will be used in the operation (called general purpose register)
  • \n
  • Program counter (PC) contains the memory address of the instruction will be executed
  • \n
  • Instruction register (IR) contains the current instruction
  • \n
\n

Execution of the instruction

\n
    \n
  • Step 1 (fetch): CU says \"load the instruction from the memory address in PC to IR\"
  • \n
  • Step 2 (decode): CU says \"the instruction stored in IR means ADD $s0, $s1, $s2
  • \n
  • Step 2 (execute): ALU does the add operation with the values in $s1 and $s2 and stores the computation result in $s0
  • \n
\n

Operation

\n

Arithmetic operations

\n

Instructions for arithmetic

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationC    JavaMIPS assembly languageExample          
Add      +    +    add (R), addi (I)  add $t0, $t1, $t2
Subtract  -    -    sub (R)              sub $t0, $t1, $t2
\n

Logical operations

\n

Instructions for bitwise manipulation

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationCJavaMIPS assembly languageExample
Bitwise AND&&and(R), andi(I)and $t0, $t1, $t2
Bitwise OR||or (R), ori(I)or $t0, $t1, $t2
Bitwise NOR~~nor(R)nor $t0, $t1, $t2
\n

MIPS has no NOT instruction\nInstead, it has NOR R-type instruction

\n
    \n
  • a NOR b == NOT (a OR b)
  • \n
  • But, we can do the NOT operation with NOR: nor $t0, $t1, $zero!
  • \n
\n

\n \n \n \n \n \n
nor.jpg
\n

\n

Shift operations

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationC    JavaMIPS assembly languageExample
Shift left  <<  <<<  sll (R)sll $s1, $s2, 10 ($s1 = $s2 << 10)
Shift right>>  >>>  srl (R)srl $s1, $s2, 10 ($s1 = $s2 >> 10)
\n

\n \n \n \n \n \n
shift operation.jpg
\n

\n
    \n
  • shamt: how many positions to shift
  • \n
  • Shift left/right logical (sll / srl)\n
      \n
    • Shift left/right and fill with 0 bits
    • \n
    • (unsigned only) sll with i bits = multiply by 2i2^i2i
    • \n
    • (unsigned only) srl with i bits = divide by 2i2^i2i
    • \n
    \n
  • \n
\n

Conditional operations

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationMIPS assembly languageExample
Conditional branchbeq(I)beq $t0, $t1, LABEL (if t0==t0 == t0==t1, goto LABEL)
bne(I)bne $t0, $t1, LABEL (if t0!=t0 != t0!=t1, goto LABEL)
Unconditional branchj(I)j LABEL (goto LABEL)
\n

\n \n \n \n bne.jpg\n \n \n
bne.jpg
\n
\n
\n \n \n \n j-format.jpg\n \n \n
j-format.jpg
\n

\n

Instructions for making decisions\nUsually combined with goto statements and labels\nthere are no branch instructions like blt (less than) and bge (greater than or equal to)

\n

Why?

\n
    \n
  • Handling <, >, <=, >=, ... is slower and more complicate than =, !=
  • \n
  • It will cause increase of instruction count and clock period or CPI
  • \n
\n

Instead, MIPS provides others

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
operationMIPS assembly languageExample
Set on less thanslt(R), slti(I)slt t0,t0, t0,t1, t2(ift2 (if t2(ift1 < t2,t2, t2,t0 = 1; else $t0 = 0)
\n

slt is used in combination with beq and bne

\n
slt $t0, $t1, $t2\nbne $t0, $zero, LABEL\nbeq $t0, $zero, LABEL
","frontmatter":{"title":"Representing Instructions in computer","date":"2024년 07월 31일 15:07","updated":"2024년 08월 02일 15:08","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/2-3. Representing Instructions in computer/","readingTime":{"minutes":3.215}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}},"next":null},"pageContext":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","series":null,"previousPostId":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","nextPostId":null}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/2-3. Representing Instructions in computer/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic & logic unit (ALU) does the operation hold the va…","html":"

contents: 0-1. CA Intro

\n

Common HW design for MIPS ISA

\n

\n \n \n \n HW design.jpg\n \n \n
HW design.jpg
\n

\n

CPU, register, and memory

\n
    \n
  • Control unit (CU) directs the operation of the processor
  • \n
  • Arithmetic & logic unit (ALU) does the operation
  • \n
  • $0, ..., $31 hold the value that will be used in the operation (called general purpose register)
  • \n
  • Program counter (PC) contains the memory address of the instruction will be executed
  • \n
  • Instruction register (IR) contains the current instruction
  • \n
\n

Execution of the instruction

\n
    \n
  • Step 1 (fetch): CU says \"load the instruction from the memory address in PC to IR\"
  • \n
  • Step 2 (decode): CU says \"the instruction stored in IR means ADD $s0, $s1, $s2
  • \n
  • Step 2 (execute): ALU does the add operation with the values in $s1 and $s2 and stores the computation result in $s0
  • \n
\n

Operation

\n

Arithmetic operations

\n

Instructions for arithmetic

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationC    JavaMIPS assembly languageExample          
Add      +    +    add (R), addi (I)  add $t0, $t1, $t2
Subtract  -    -    sub (R)              sub $t0, $t1, $t2
\n

Logical operations

\n

Instructions for bitwise manipulation

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationCJavaMIPS assembly languageExample
Bitwise AND&&and(R), andi(I)and $t0, $t1, $t2
Bitwise OR||or (R), ori(I)or $t0, $t1, $t2
Bitwise NOR~~nor(R)nor $t0, $t1, $t2
\n

MIPS has no NOT instruction\nInstead, it has NOR R-type instruction

\n
    \n
  • a NOR b == NOT (a OR b)
  • \n
  • But, we can do the NOT operation with NOR: nor $t0, $t1, $zero!
  • \n
\n

\n \n \n \n \n \n
nor.jpg
\n

\n

Shift operations

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationC    JavaMIPS assembly languageExample
Shift left  <<  <<<  sll (R)sll $s1, $s2, 10 ($s1 = $s2 << 10)
Shift right>>  >>>  srl (R)srl $s1, $s2, 10 ($s1 = $s2 >> 10)
\n

\n \n \n \n \n \n
shift operation.jpg
\n

\n
    \n
  • shamt: how many positions to shift
  • \n
  • Shift left/right logical (sll / srl)\n
      \n
    • Shift left/right and fill with 0 bits
    • \n
    • (unsigned only) sll with i bits = multiply by 2i2^i2i
    • \n
    • (unsigned only) srl with i bits = divide by 2i2^i2i
    • \n
    \n
  • \n
\n

Conditional operations

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
OperationMIPS assembly languageExample
Conditional branchbeq(I)beq $t0, $t1, LABEL (if t0==t0 == t0==t1, goto LABEL)
bne(I)bne $t0, $t1, LABEL (if t0!=t0 != t0!=t1, goto LABEL)
Unconditional branchj(I)j LABEL (goto LABEL)
\n

\n \n \n \n bne.jpg\n \n \n
bne.jpg
\n
\n
\n \n \n \n j-format.jpg\n \n \n
j-format.jpg
\n

\n

Instructions for making decisions\nUsually combined with goto statements and labels\nthere are no branch instructions like blt (less than) and bge (greater than or equal to)

\n

Why?

\n
    \n
  • Handling <, >, <=, >=, ... is slower and more complicate than =, !=
  • \n
  • It will cause increase of instruction count and clock period or CPI
  • \n
\n

Instead, MIPS provides others

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
operationMIPS assembly languageExample
Set on less thanslt(R), slti(I)slt t0,t0, t0,t1, t2(ift2 (if t2(ift1 < t2,t2, t2,t0 = 1; else $t0 = 0)
\n

slt is used in combination with beq and bne

\n
slt $t0, $t1, $t2\nbne $t0, $zero, LABEL\nbeq $t0, $zero, LABEL
","frontmatter":{"title":"Representing Instructions in computer","date":"2024년 07월 31일 15:07","updated":"2024년 08월 02일 15:08","tags":["study","컴퓨터구조"],"series":null},"fields":{"slug":"/2-3. Representing Instructions in computer/","readingTime":{"minutes":3.215}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}},"next":{"fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}},"pageContext":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","series":null,"previousPostId":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","nextPostId":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/after-jigeumgeuddae/page-data.json b/page-data/after-jigeumgeuddae/page-data.json index 6c49c3b..619781b 100644 --- a/page-data/after-jigeumgeuddae/page-data.json +++ b/page-data/after-jigeumgeuddae/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/after-jigeumgeuddae/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다. 이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공…","html":"

기존 블로그에서 이전해온 글입니다.

\n

What is 지금그때?

\n

\"ZeroPage.svg\"

\n

현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다.

\n

이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공유하고 엿볼 수 있는 자리다. 후배분들은 학업이나 학교생활에 대한 본인의 고민을 털어 놓을 수 있고 이에 대한 조언이나 선배분들의 경험을 들을 수 있다. 반대로 선배분들은 그런 질문들에 기꺼이 조언을 아끼지 않아주시고 요즘은 어떤 공부를 하는지, 학교 생활은 무엇이 달라졌는지 서로 이야기를 나눌 수 있는 자리이다.

\n

작년에도 내가 1학년일 때 이 행사를 참여했었는데 선배분들과 이야기를 하면서 학교 수업에서는 얻을 수 없던 이야기들을 나눌 수 있었고, 취업이나 대학원 뿐이 아니라 개발자라는 종류의 사람이 무엇인지, 앞으로의 공부 방향성을 어떻게 확립해나가야 하는지를 알 수 있었다.

\n

올해는 이 동아리의 회장단으로서 행사를 준비하고 운영하고 참여했다.

\n

진행 방법

\n

우선 간단히 아이스 브레이킹을 하고 본격적으로 시작이 됐다. 대략 한 시간씩 3타임이 운영이 됐고 각 타임에는 본인이 관심이 있는 주제가 있는 자리에 가서 편하게 대화를 하면 된다.

\n

자세한 타임테이블은 아래와 같다.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
TimeActivity
13:30 - 14:00참가자 등록
14:00 - 14:30개회사
14:30 - 15:00아이스브레이킹
15:00 - 16:00월드카페 1부
16:00 - 17:00월드카페 2부
14:30 - 15:00월드카페 3부
18:00후기 및 폐막
18:30회식
\n

주제는 신청하신 분들이 원하는 것을 바탕으로 총 12개를 만들었다.

\n
    \n
  • 무슨 공부를 해야하는가, 학부생때 해야할 것들에 대한 추천
  • \n
  • 학교 수업을 따라가는 것이 중요한가
  • \n
  • 졸업생으로서 가장 유용하게 생각하는 과목
  • \n
  • 취업을 위해 준비해야할 것들
  • \n
  • 대학원에 대한 조언
  • \n
  • 관심 분야를 어떻게 정했는지
  • \n
  • 지금 하는 일이 즐거운 이유
  • \n
  • 컴퓨터 전공자는 어떤 유형으로 사회에 진출하는가
  • \n
  • ZeroPage가 나에게 미친 영향
  • \n
  • 시간, 멘탈 체력 등의 관리
  • \n
  • 방학에는 무엇을 하는 게 좋은가
  • \n
  • 개발자와 커뮤니케이션에 대해
  • \n
\n

어떤 주제에 참여했는가

\n

꼭 한 타임에 한 주제에 머물러 있을 필요는 없었는데 자리에서 이야기를 하다보니 물어볼 것도 많았고 들을 내용도 많아서 총 3개의 주제에 참여를 했다.

\n

학교 수업을 따라가는 것이 중요한가

\n

첫 번째 타임에 참여한 주제다. 사실 이 주제는 내가 1학년 때부터 재학생 선배분들께 많이 물어보며 다녔고 이에 대한 답도 알지만, 오늘 처음 본 선배분들, 특히 현업에 종사하신 분들의 생각은 어떤지 궁금해서 자리를 찾아갔다.

\n

당연히, 다들 중요하다고 대답해주셨다. 근데 그거에 덧붙여서 이야기 해주신게 기억이 남았다. 내 기억에 남는대로 재해석을 하자면, 학교에서 배운 내용은 일종의 지도 같은 역할을 한다고 하셨다. 당장은 현업에서 쓰이지 않고 내가 필요로 하지는 않을 수도 있지만, 언젠가 내가 그 지식이 필요할 때 그 길을 찾는데 유리하다고 한다. 또한 본인이 취직을 하든, 연구를 하든 무엇을 할 지 아무도 알 수 없기에 기회비용일 수도 있지만 잘 만들어진 학교 커리큘럼을 따라가는 게 맞다고 하셨다.

\n

하지만 오히려 반대로 학점은 그리 중요하지 않았다. 대학원을 준비하지 않는 이상, 취업을 할 때는 학점보다는 그 과목을 본인이 자신의 말로 설명할 수 있는지, 얼만큼 자기의 지식으로 만들었는지를 판별하기 때문에 학점에 그리 목 메이지 않아도 된다고 한다.

\n

그래서 나는 요즘 기업에서 신입을 뽑을 때 학점보다는 프로젝트를 더 중요하게 생각하냐고 여쭤봤고, 거기 계신 세 분의 선배들 모두 얼추 맞다고 대답하셨다. 대신 우리들이 프로젝트를 통해서 어떤 특정한 모습을 뽑내려고 안해도 된다고 하셨다. 지원자들을 보면, 프로젝트를 통해 본인의 특장점을 억지로 어필하려는 모습이 보인다고 하는데 이러한 점보다는 오히려 본인이 문제를 정의하고, 몰두하고, 해결해나가는 과정 속에서 생기는 고민이나 선택들에 대한 이유를 본인만의 생각으로 논리적이게 풀이할 수 있고 그 과정을 제시할 수 있으면 된다고 했다. 단순히 예를 들자면, 왜 React를 안쓰고 Nuxt로 개발을 하는지에 대한 본인만의 생각이 있고 말을 할 수 있으면 그걸로 충분하다는 얘기다. 실제 현업에서도 예시와 경우가 많기 때문에 이런 상황에는 지원자가 어떤 이유로 왜 이런 선택을 하는지 알아가는 과정인 것이었다. 또 더불어서 학교에서 배운 내용들을 본인의 프로젝트에 적용하려는 시도를 하면 좋을 것 같다고 하셨다. 개념적이고 추상적인 CS 지식을 프로젝트에 적용하는 게 쉽지는 않지만 low level를 다루면서 양질의 프로젝트를 만들 수 있거나 문제를 해결할 수 있는 근본적인 해결책을 찾을 수도 있다고 하셨다.

\n

관심 분야를 어떻게 정했는지

\n

두 번째 타임에 참여한 주제다. 입학 전부터, 나는 문제를 찾아 공학적인 기술로 해결해나가는 것을 좋아했다. 그렇다보니 프로젝트성 공부를 지속했었다. 문제를 해결해나가는 과정에서 앱이 필요하면 앱 개발 공부를 했고, 웹이 필요할 것 같으면 그때부터 웹을 공부하기 시작했다. 필요성에 의해 공부를 하다보니 여러 분야를 어느정도 경험은 해봤지만 특정 분야에 대한 깊은 지식이나 내가 그 분야를 제대로 잘 안다고 말을 할 수는 없었던 것 같았다. 그래서 최근에는 내가 좋아하는 분야를 찾아서 깊게 파보고 싶다는 생각이 문득 들었고 선배분들은 어떻게 본인의 분야를 정했는지 궁금했다.

\n

여러 선배들의 조언을 정리하면 아래와 같다.

\n

우선 다양한 경험을 해봐야한다는 것이었다. 동아리 내에서 스터디를 하든, 더 몰입감 있게 공모전을 나가든 어느정도의 강제성을 부여한 채로 여러 분야를 접해야한다는 것이다. 사실 지금 관심 분야를 찾아도 실제 현업에 나가면 자신이 관심있어 하는 분야를 다루는 경우는 일부기 때문에 한 분야를 깊게 파는 것이 물론 개인의 성장에 도움은 되지만, 관심 분야를 못 정했다고 불안해할 필요는 없다고 하셨다. 다만 오래 방황을 할 경우에는 학교 공부를 더 열심히 해야한다고 하셨다. 학교에서 배우는 CS 지식이 현업에서 일하는 지금까지도 도움이 되기 때문에 기본 중에 기본이 되는 내용들은 탄탄히 쌓을 필요가 있다고 했다.

\n

사실 너무 당연한 얘기였다. 오히려 선배분께서 지금처럼 필요에 의해 찾아 공부하고 고민하는 시간이 필요한 게 당연하다고 하셨다. 그 말에 안심이 되기도 했고, 지금처럼 지치지 말고 여러 자극을 받으며 살아야겠다고 생각했다.

\n

방학에는 무엇을 하는 게 좋은가

\n

세 번째 타임에 참여한 주제다. 사실 세 번째 타임에는 조언을 들으러 간 게 아니라 1학년분들이 계셔서 고민을 들어주려고 갔었다. 그래봤자 1년 차이라 도움이 될 지는 모르겠지만, 그래도 쉬지 않고 바쁘게 1학년을 보냈다고 말할 수 있어서 좋았던 점, 또 아쉬웠던 점을 들려주려고 갔다.

\n

내가 말한 내용만 정리를 하면 아래와 같다.

\n

난 하나의 기술 스택을 공부해보거나, 학교에서 지원해주는 외부 프로그램을 해보라고 추천했었다. 경험에서 오는 차이만큼 확실한 게 없다고 생각을 해와서 방학만큼은 학기 중에 병행하기 어려웠던 개발공부를 하거나, 해외 프로그램에 참여하는 게 도움이 많이 될 것 같았다. 또한 본인이 졸업 전에 하고 싶은 것에 대한 계획을 세울 필요가 있다고 말해줬다. 교환학생만 해도, 적어도 1년 전부터는 어학성적을 준비해야한다. 외부 동아리도 코딩 테스트를 통과하려면 몇 달을 할애해야한다. 나도 이런 점에 있어서는 부족했고 아쉬웠기에 후배분들은 더 낫길 바라는 마음에 말해줬다.

\n

2022 지금그때 회고

\n

\n \n \n \n \n \n
2022 지금그때.jpg
\n

\n

올해에도 작년과 마찬가지로 여러 생각이 들었고 다양한 감정들을 느낄 수 있었다. 참여자로서, 또 이 행사를 준비했던 회장단으로서도 느낀점이 있었다.

\n

우선 장소가 급히 바뀌어 예상했던 방향대로 안흘러가서 좀 아쉬웠다. 그럼에도 다른 회장단들이 열심히 같이 준비해줘서 다행이었고 무사히 진행됐다는 점에서 뿌듯하기도 했다. 이럴 때마다 회장단하길 잘한 것 같다는 생각이 든다.

\n

1년동안 학교 생활을 하다보면 자연스럽게 진로에 관한 이런저런 고민들이 쌓이게 된다. 오히려 난 방향성 없게 입에 넣어주는 공부만 하면 안된다고 생각하고 본인이 학교를 다니면서 진로나, 학업, 개발 등 본인만의 여러 고민들이 생겨야한다고 생각한다. 나는 그럴 때마다 물어볼 곳이 없었는데 졸업을 하셔도 여전히 관심을 가져주시는 분들 덕분에 동아리 운영도 되고 나와 같은 재학생들의 고민이 조금은 덜어지는 것 같다. 선배분들께 질문을 하고, 이야기를 하다보면 내 로드맵을 잠시 먼 시점에서 관찰하는 느낌이 든다. 미로에서 잠시 나와 탈출구가 어딨는지 확인하는 느낌이었다. 평상시에 갖고 있던 여러 고민들이 하나하나 풀려서 그런가 다시금 방향성이 잡히고 새로운 자극을 찾은 느낌이 들었다.

\n

학부 차원에서 이런 이벤트를 유지를 못시켜서 더욱 동아리 선배분들께 감사하기도했다. 다만 아쉬운 건, 1학년분들도 나와 같은 기분을 느끼셨으면 했다. 듣는 것에만 익숙해진 분들이 꽤 있으셨는데 기회를 놓치지 않고 이런 저런 질문을 더 많이 했으면 어땟을까.. 라는 생각이 들었다.

\n

추가로 선배분들이 어떤 일을 하는지, 어느 분야를 공부하고 계신지 여쭤봤었는데 그럴 때마다 난 대체 불가능 한 사람, 개발자를 위한 개발자라는 타이틀을 내밀 수 있는 사림이 되어야겠다고 생각했다. 본인이 지금 무엇을 하고 있는지, 자신 있게 보여주고 설명하는 모습이 내가 바라는 모습이기도 했다. 지금 내가 하고자 하는 분야를 뚜렷히 못정해서 저런 생각이 들은 것 같기도 했다. 앞으로도 많은 자극들을 받으며 아직 접해보지 못한 것들을 경험해보고 싶었고, 지금 도움을 받은 만큼 나의 지금이 그때가 될 때 후배분들의 지금에 도움이 될 수 있는 사람이 되어야겠다는 생각을 했다.

","frontmatter":{"title":"2022 ZeroPage 지금그때","date":"2022년 11월 26일 20:11","updated":"2024년 06월 24일 22:06","tags":["club"],"series":null},"fields":{"slug":"/after-jigeumgeuddae/","readingTime":{"minutes":17.275}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}},"next":{"fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"title":"2022년 하반기 회고"}}},"pageContext":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","series":null,"previousPostId":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","nextPostId":"d10c9197-533f-53cc-baab-6d1994a260b4"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/after-jigeumgeuddae/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다. 이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공…","html":"

기존 블로그에서 이전해온 글입니다.

\n

What is 지금그때?

\n

\"ZeroPage.svg\"

\n

현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다.

\n

이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공유하고 엿볼 수 있는 자리다. 후배분들은 학업이나 학교생활에 대한 본인의 고민을 털어 놓을 수 있고 이에 대한 조언이나 선배분들의 경험을 들을 수 있다. 반대로 선배분들은 그런 질문들에 기꺼이 조언을 아끼지 않아주시고 요즘은 어떤 공부를 하는지, 학교 생활은 무엇이 달라졌는지 서로 이야기를 나눌 수 있는 자리이다.

\n

작년에도 내가 1학년일 때 이 행사를 참여했었는데 선배분들과 이야기를 하면서 학교 수업에서는 얻을 수 없던 이야기들을 나눌 수 있었고, 취업이나 대학원 뿐이 아니라 개발자라는 종류의 사람이 무엇인지, 앞으로의 공부 방향성을 어떻게 확립해나가야 하는지를 알 수 있었다.

\n

올해는 이 동아리의 회장단으로서 행사를 준비하고 운영하고 참여했다.

\n

진행 방법

\n

우선 간단히 아이스 브레이킹을 하고 본격적으로 시작이 됐다. 대략 한 시간씩 3타임이 운영이 됐고 각 타임에는 본인이 관심이 있는 주제가 있는 자리에 가서 편하게 대화를 하면 된다.

\n

자세한 타임테이블은 아래와 같다.

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
TimeActivity
13:30 - 14:00참가자 등록
14:00 - 14:30개회사
14:30 - 15:00아이스브레이킹
15:00 - 16:00월드카페 1부
16:00 - 17:00월드카페 2부
14:30 - 15:00월드카페 3부
18:00후기 및 폐막
18:30회식
\n

주제는 신청하신 분들이 원하는 것을 바탕으로 총 12개를 만들었다.

\n
    \n
  • 무슨 공부를 해야하는가, 학부생때 해야할 것들에 대한 추천
  • \n
  • 학교 수업을 따라가는 것이 중요한가
  • \n
  • 졸업생으로서 가장 유용하게 생각하는 과목
  • \n
  • 취업을 위해 준비해야할 것들
  • \n
  • 대학원에 대한 조언
  • \n
  • 관심 분야를 어떻게 정했는지
  • \n
  • 지금 하는 일이 즐거운 이유
  • \n
  • 컴퓨터 전공자는 어떤 유형으로 사회에 진출하는가
  • \n
  • ZeroPage가 나에게 미친 영향
  • \n
  • 시간, 멘탈 체력 등의 관리
  • \n
  • 방학에는 무엇을 하는 게 좋은가
  • \n
  • 개발자와 커뮤니케이션에 대해
  • \n
\n

어떤 주제에 참여했는가

\n

꼭 한 타임에 한 주제에 머물러 있을 필요는 없었는데 자리에서 이야기를 하다보니 물어볼 것도 많았고 들을 내용도 많아서 총 3개의 주제에 참여를 했다.

\n

학교 수업을 따라가는 것이 중요한가

\n

첫 번째 타임에 참여한 주제다. 사실 이 주제는 내가 1학년 때부터 재학생 선배분들께 많이 물어보며 다녔고 이에 대한 답도 알지만, 오늘 처음 본 선배분들, 특히 현업에 종사하신 분들의 생각은 어떤지 궁금해서 자리를 찾아갔다.

\n

당연히, 다들 중요하다고 대답해주셨다. 근데 그거에 덧붙여서 이야기 해주신게 기억이 남았다. 내 기억에 남는대로 재해석을 하자면, 학교에서 배운 내용은 일종의 지도 같은 역할을 한다고 하셨다. 당장은 현업에서 쓰이지 않고 내가 필요로 하지는 않을 수도 있지만, 언젠가 내가 그 지식이 필요할 때 그 길을 찾는데 유리하다고 한다. 또한 본인이 취직을 하든, 연구를 하든 무엇을 할 지 아무도 알 수 없기에 기회비용일 수도 있지만 잘 만들어진 학교 커리큘럼을 따라가는 게 맞다고 하셨다.

\n

하지만 오히려 반대로 학점은 그리 중요하지 않았다. 대학원을 준비하지 않는 이상, 취업을 할 때는 학점보다는 그 과목을 본인이 자신의 말로 설명할 수 있는지, 얼만큼 자기의 지식으로 만들었는지를 판별하기 때문에 학점에 그리 목 메이지 않아도 된다고 한다.

\n

그래서 나는 요즘 기업에서 신입을 뽑을 때 학점보다는 프로젝트를 더 중요하게 생각하냐고 여쭤봤고, 거기 계신 세 분의 선배들 모두 얼추 맞다고 대답하셨다. 대신 우리들이 프로젝트를 통해서 어떤 특정한 모습을 뽑내려고 안해도 된다고 하셨다. 지원자들을 보면, 프로젝트를 통해 본인의 특장점을 억지로 어필하려는 모습이 보인다고 하는데 이러한 점보다는 오히려 본인이 문제를 정의하고, 몰두하고, 해결해나가는 과정 속에서 생기는 고민이나 선택들에 대한 이유를 본인만의 생각으로 논리적이게 풀이할 수 있고 그 과정을 제시할 수 있으면 된다고 했다. 단순히 예를 들자면, 왜 React를 안쓰고 Nuxt로 개발을 하는지에 대한 본인만의 생각이 있고 말을 할 수 있으면 그걸로 충분하다는 얘기다. 실제 현업에서도 예시와 경우가 많기 때문에 이런 상황에는 지원자가 어떤 이유로 왜 이런 선택을 하는지 알아가는 과정인 것이었다. 또 더불어서 학교에서 배운 내용들을 본인의 프로젝트에 적용하려는 시도를 하면 좋을 것 같다고 하셨다. 개념적이고 추상적인 CS 지식을 프로젝트에 적용하는 게 쉽지는 않지만 low level를 다루면서 양질의 프로젝트를 만들 수 있거나 문제를 해결할 수 있는 근본적인 해결책을 찾을 수도 있다고 하셨다.

\n

관심 분야를 어떻게 정했는지

\n

두 번째 타임에 참여한 주제다. 입학 전부터, 나는 문제를 찾아 공학적인 기술로 해결해나가는 것을 좋아했다. 그렇다보니 프로젝트성 공부를 지속했었다. 문제를 해결해나가는 과정에서 앱이 필요하면 앱 개발 공부를 했고, 웹이 필요할 것 같으면 그때부터 웹을 공부하기 시작했다. 필요성에 의해 공부를 하다보니 여러 분야를 어느정도 경험은 해봤지만 특정 분야에 대한 깊은 지식이나 내가 그 분야를 제대로 잘 안다고 말을 할 수는 없었던 것 같았다. 그래서 최근에는 내가 좋아하는 분야를 찾아서 깊게 파보고 싶다는 생각이 문득 들었고 선배분들은 어떻게 본인의 분야를 정했는지 궁금했다.

\n

여러 선배들의 조언을 정리하면 아래와 같다.

\n

우선 다양한 경험을 해봐야한다는 것이었다. 동아리 내에서 스터디를 하든, 더 몰입감 있게 공모전을 나가든 어느정도의 강제성을 부여한 채로 여러 분야를 접해야한다는 것이다. 사실 지금 관심 분야를 찾아도 실제 현업에 나가면 자신이 관심있어 하는 분야를 다루는 경우는 일부기 때문에 한 분야를 깊게 파는 것이 물론 개인의 성장에 도움은 되지만, 관심 분야를 못 정했다고 불안해할 필요는 없다고 하셨다. 다만 오래 방황을 할 경우에는 학교 공부를 더 열심히 해야한다고 하셨다. 학교에서 배우는 CS 지식이 현업에서 일하는 지금까지도 도움이 되기 때문에 기본 중에 기본이 되는 내용들은 탄탄히 쌓을 필요가 있다고 했다.

\n

사실 너무 당연한 얘기였다. 오히려 선배분께서 지금처럼 필요에 의해 찾아 공부하고 고민하는 시간이 필요한 게 당연하다고 하셨다. 그 말에 안심이 되기도 했고, 지금처럼 지치지 말고 여러 자극을 받으며 살아야겠다고 생각했다.

\n

방학에는 무엇을 하는 게 좋은가

\n

세 번째 타임에 참여한 주제다. 사실 세 번째 타임에는 조언을 들으러 간 게 아니라 1학년분들이 계셔서 고민을 들어주려고 갔었다. 그래봤자 1년 차이라 도움이 될 지는 모르겠지만, 그래도 쉬지 않고 바쁘게 1학년을 보냈다고 말할 수 있어서 좋았던 점, 또 아쉬웠던 점을 들려주려고 갔다.

\n

내가 말한 내용만 정리를 하면 아래와 같다.

\n

난 하나의 기술 스택을 공부해보거나, 학교에서 지원해주는 외부 프로그램을 해보라고 추천했었다. 경험에서 오는 차이만큼 확실한 게 없다고 생각을 해와서 방학만큼은 학기 중에 병행하기 어려웠던 개발공부를 하거나, 해외 프로그램에 참여하는 게 도움이 많이 될 것 같았다. 또한 본인이 졸업 전에 하고 싶은 것에 대한 계획을 세울 필요가 있다고 말해줬다. 교환학생만 해도, 적어도 1년 전부터는 어학성적을 준비해야한다. 외부 동아리도 코딩 테스트를 통과하려면 몇 달을 할애해야한다. 나도 이런 점에 있어서는 부족했고 아쉬웠기에 후배분들은 더 낫길 바라는 마음에 말해줬다.

\n

2022 지금그때 회고

\n

\n \n \n \n \n \n
2022 지금그때.jpg
\n

\n

올해에도 작년과 마찬가지로 여러 생각이 들었고 다양한 감정들을 느낄 수 있었다. 참여자로서, 또 이 행사를 준비했던 회장단으로서도 느낀점이 있었다.

\n

우선 장소가 급히 바뀌어 예상했던 방향대로 안흘러가서 좀 아쉬웠다. 그럼에도 다른 회장단들이 열심히 같이 준비해줘서 다행이었고 무사히 진행됐다는 점에서 뿌듯하기도 했다. 이럴 때마다 회장단하길 잘한 것 같다는 생각이 든다.

\n

1년동안 학교 생활을 하다보면 자연스럽게 진로에 관한 이런저런 고민들이 쌓이게 된다. 오히려 난 방향성 없게 입에 넣어주는 공부만 하면 안된다고 생각하고 본인이 학교를 다니면서 진로나, 학업, 개발 등 본인만의 여러 고민들이 생겨야한다고 생각한다. 나는 그럴 때마다 물어볼 곳이 없었는데 졸업을 하셔도 여전히 관심을 가져주시는 분들 덕분에 동아리 운영도 되고 나와 같은 재학생들의 고민이 조금은 덜어지는 것 같다. 선배분들께 질문을 하고, 이야기를 하다보면 내 로드맵을 잠시 먼 시점에서 관찰하는 느낌이 든다. 미로에서 잠시 나와 탈출구가 어딨는지 확인하는 느낌이었다. 평상시에 갖고 있던 여러 고민들이 하나하나 풀려서 그런가 다시금 방향성이 잡히고 새로운 자극을 찾은 느낌이 들었다.

\n

학부 차원에서 이런 이벤트를 유지를 못시켜서 더욱 동아리 선배분들께 감사하기도했다. 다만 아쉬운 건, 1학년분들도 나와 같은 기분을 느끼셨으면 했다. 듣는 것에만 익숙해진 분들이 꽤 있으셨는데 기회를 놓치지 않고 이런 저런 질문을 더 많이 했으면 어땟을까.. 라는 생각이 들었다.

\n

추가로 선배분들이 어떤 일을 하는지, 어느 분야를 공부하고 계신지 여쭤봤었는데 그럴 때마다 난 대체 불가능 한 사람, 개발자를 위한 개발자라는 타이틀을 내밀 수 있는 사림이 되어야겠다고 생각했다. 본인이 지금 무엇을 하고 있는지, 자신 있게 보여주고 설명하는 모습이 내가 바라는 모습이기도 했다. 지금 내가 하고자 하는 분야를 뚜렷히 못정해서 저런 생각이 들은 것 같기도 했다. 앞으로도 많은 자극들을 받으며 아직 접해보지 못한 것들을 경험해보고 싶었고, 지금 도움을 받은 만큼 나의 지금이 그때가 될 때 후배분들의 지금에 도움이 될 수 있는 사람이 되어야겠다는 생각을 했다.

","frontmatter":{"title":"2022 ZeroPage 지금그때","date":"2022년 11월 26일 20:11","updated":"2024년 06월 24일 22:06","tags":["club"],"series":null},"fields":{"slug":"/after-jigeumgeuddae/","readingTime":{"minutes":17.275}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}},"next":{"fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"title":"2022년 하반기 회고"}}},"pageContext":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","series":null,"previousPostId":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","nextPostId":"d10c9197-533f-53cc-baab-6d1994a260b4"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/all/page-data.json b/page-data/all/page-data.json index 641dbc8..35fc504 100644 --- a/page-data/all/page-data.json +++ b/page-data/all/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-all-jsx","path":"/all/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 08월 02일 15:08","title":"Representing Instructions in computer","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 07월 31일 15:07","title":"Design principles 4 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 22일 16:07","updated":"2024년 07월 31일 15:07","title":"Design principles 1~3 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 08월 02일 15:08","title":"Measuring Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 07월 31일 15:07","title":"Defining Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"2024년 07월 22일 14:07","updated":"2024년 07월 31일 15:07","title":"CA Overview","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"2024년 07월 22일 12:07","updated":"2024년 07월 22일 15:07","title":"Computer Architecture Intro","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"2024년 07월 20일 20:07","updated":"2024년 07월 22일 14:07","title":"2024년 상반기 회고","description":null,"tags":["회고"]}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"2024년 01월 10일 13:01","updated":"2024년 01월 11일 23:01","title":"기존 블로그 대신 Obsidian을 택한 이유","description":null,"tags":["obsidian"]}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"2024년 01월 08일 12:01","updated":"2024년 07월 20일 20:07","title":"2023년 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"2022년 12월 23일 12:12","updated":"2024년 07월 20일 20:07","title":"2022년 하반기 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"2022년 11월 26일 20:11","updated":"2024년 06월 24일 22:06","title":"2022 ZeroPage 지금그때","description":null,"tags":["club"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"2022년 09월 13일 22:09","updated":"2024년 06월 24일 22:06","title":"Nuxt content에 Mathtype 사용하기","description":null,"tags":["Nuxt","Katex"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"2022년 09월 05일 12:09","updated":"2024년 07월 20일 20:07","title":"2022년 상반기 회고","description":null,"tags":["회고","club"]}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-pages-all-jsx","path":"/all/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"research","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신…","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"date":"2024년 09월 07일 12:09","updated":"2024년 09월 18일 20:09","title":"sigchi 2024 관심 주제","description":null,"tags":["research"]}},{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 08월 02일 15:08","title":"Representing Instructions in computer","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 07월 31일 15:07","title":"Design principles 4 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 22일 16:07","updated":"2024년 07월 31일 15:07","title":"Design principles 1~3 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 08월 02일 15:08","title":"Measuring Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 07월 31일 15:07","title":"Defining Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"2024년 07월 22일 14:07","updated":"2024년 07월 31일 15:07","title":"CA Overview","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"2024년 07월 22일 12:07","updated":"2024년 07월 22일 15:07","title":"Computer Architecture Intro","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"2024년 07월 20일 20:07","updated":"2024년 07월 22일 14:07","title":"2024년 상반기 회고","description":null,"tags":["회고"]}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"2024년 01월 10일 13:01","updated":"2024년 01월 11일 23:01","title":"기존 블로그 대신 Obsidian을 택한 이유","description":null,"tags":["obsidian"]}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"2024년 01월 08일 12:01","updated":"2024년 07월 20일 20:07","title":"2023년 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"2022년 12월 23일 12:12","updated":"2024년 07월 20일 20:07","title":"2022년 하반기 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"2022년 11월 26일 20:11","updated":"2024년 06월 24일 22:06","title":"2022 ZeroPage 지금그때","description":null,"tags":["club"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"2022년 09월 13일 22:09","updated":"2024년 06월 24일 22:06","title":"Nuxt content에 Mathtype 사용하기","description":null,"tags":["Nuxt","Katex"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"2022년 09월 05일 12:09","updated":"2024년 07월 20일 20:07","title":"2022년 상반기 회고","description":null,"tags":["회고","club"]}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/app-data.json b/page-data/app-data.json index 8880b2f..f65eb05 100644 --- a/page-data/app-data.json +++ b/page-data/app-data.json @@ -1 +1 @@ -{"webpackCompilationHash":"9c0f799986330812a665"} +{"webpackCompilationHash":"0b43938e5009b0dca59f"} diff --git a/page-data/index/page-data.json b/page-data/index/page-data.json index ed5c405..878bc0c 100644 --- a/page-data/index/page-data.json +++ b/page-data/index/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-index-jsx","path":"/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":null,"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"July 31, 2024","updated":"Aug 02, 2024","title":"Representing Instructions in computer","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"July 31, 2024","updated":"Jul 31, 2024","title":"Design principles 4 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Design principles 1~3 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Aug 02, 2024","title":"Measuring Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Defining Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"CA Overview","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 22, 2024","title":"Computer Architecture Intro","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"July 20, 2024","updated":"Jul 22, 2024","title":"2024년 상반기 회고","description":null,"tags":["회고"]}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"January 10, 2024","updated":"Jan 11, 2024","title":"기존 블로그 대신 Obsidian을 택한 이유","description":null,"tags":["obsidian"]}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"January 08, 2024","updated":"Jul 20, 2024","title":"2023년 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"December 23, 2022","updated":"Jul 20, 2024","title":"2022년 하반기 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"November 26, 2022","updated":"Jun 24, 2024","title":"2022 ZeroPage 지금그때","description":null,"tags":["club"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"September 13, 2022","updated":"Jun 24, 2024","title":"Nuxt content에 Mathtype 사용하기","description":null,"tags":["Nuxt","Katex"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"September 05, 2022","updated":"Jul 20, 2024","title":"2022년 상반기 회고","description":null,"tags":["회고","club"]}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-pages-index-jsx","path":"/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":null,"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"research","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신…","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"date":"September 07, 2024","updated":"Sep 18, 2024","title":"sigchi 2024 관심 주제","description":null,"tags":["research"]}},{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"July 31, 2024","updated":"Aug 02, 2024","title":"Representing Instructions in computer","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"July 31, 2024","updated":"Jul 31, 2024","title":"Design principles 4 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Design principles 1~3 of MIPS ISA","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Aug 02, 2024","title":"Measuring Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Defining Performance","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"CA Overview","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 22, 2024","title":"Computer Architecture Intro","description":null,"tags":["study","컴퓨터구조"]}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"July 20, 2024","updated":"Jul 22, 2024","title":"2024년 상반기 회고","description":null,"tags":["회고"]}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"January 10, 2024","updated":"Jan 11, 2024","title":"기존 블로그 대신 Obsidian을 택한 이유","description":null,"tags":["obsidian"]}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"January 08, 2024","updated":"Jul 20, 2024","title":"2023년 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"December 23, 2022","updated":"Jul 20, 2024","title":"2022년 하반기 회고","description":null,"tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"November 26, 2022","updated":"Jun 24, 2024","title":"2022 ZeroPage 지금그때","description":null,"tags":["club"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"September 13, 2022","updated":"Jun 24, 2024","title":"Nuxt content에 Mathtype 사용하기","description":null,"tags":["Nuxt","Katex"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"September 05, 2022","updated":"Jul 20, 2024","title":"2022년 상반기 회고","description":null,"tags":["회고","club"]}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/interesting topic among sigchi 2024/page-data.json b/page-data/interesting topic among sigchi 2024/page-data.json new file mode 100644 index 0000000..3fca300 --- /dev/null +++ b/page-data/interesting topic among sigchi 2024/page-data.json @@ -0,0 +1 @@ +{"componentChunkName":"component---src-templates-post-jsx","path":"/interesting topic among sigchi 2024/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","excerpt":"1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신, 하드웨어, 소프트웨어 및 데이터 등 새로운 솔루션들이 뒷받침되고 있음. 달과 같은 더 …","html":"

1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality

\n

Intro 요약

\n

다시금 달에 가기 위해 인력, 통신, 하드웨어, 소프트웨어 및 데이터 등 새로운 솔루션들이 뒷받침되고 있음. 달과 같은 더 밝은 빛, 더 어두운 그림자, 감소된 중력이 있는 상황 속에서 우주인이 부피가 크고 제한적인 우주복을 입고 장애물을 탐색해야함. 이러한 독특한 상황들을 시뮬레이션 하기 위해 VR이 활용되고 있음.

\n

VR은 달의 환경 조건을 시각화하고 예상되는 시나리오를 테스트하는데 이상적인 도구이지만 시청각적 특성만 제현가능하다는 점 때문에 달을 완벽히 구현하는데 한계가 있음.

\n

본 연구에서는 장갑과 물리적 모형을 이용해 실제와 비슷한 촉각적, 운동 감각을 구현하고 가상 신체에 대한 구체화 감각을 향상시키려는 노력을 함.

\n

2. “I know I have this till my Last Breath”: Unmasking the Gaps in Chronic Obstructive Pulmonary Disease (COPD) Care in India

\n

Intro 요약

\n

비전염성 질환(NCD: Non-communicable disease)은 전 세계 사망자의 74%를 차지함. 이러한 비전염성 질환 중 만성 호흡기 질환(CRD: Chronic Respiratory Diseases)은 사망률에 크게 기여함. 최근 20년 사이에 사망률 28.5%, 유병률 39.8% 증가. 그 중 만성 폐쇄성 폐질환(COPD: Chronic Obstructive Pulmonary Disease)은 흔하지만 진단하기가 어려워 전 세계 사망 원인 중 3위를 차지함. 세계보건기구(WHO)는 심각성을 인지하고 NCD 예방 및 관리를 위한 세계 행동 계획과 지속 가능한 개발을 UN 2030 의제에 포함 시킴.

\n

COPD와 같은 CRD로 인한 사망의 90%는 저소득 및 중소득 국가에서 발생. 2016년, CRD는 인도의 총 사망 및 장애 조정 생명 연수(DALY)의 10.9%와 6.4%를 차지, 이 중 CRD로 인한 총 DALY의 75.6%가 COPD에 기인. 인도의 의료 인프라에 불균형이 있기 때문. 대기 오염이 심화되면서 인도에 상당한 사회경제적 부담이 생김. 2016년 인도에서 COPD로 인한 총 DALY 중 53.7%가 대기 오염에 기인. 병원과 병상이 인도 인구에 비해 현저히 적음.

\n

HCI 연구원들은 최근 몇 년 동안 CRD에 점점 더 관심을 보이고 있으며 디지털 건강 모니터링 및 웨어러블 장치, 원격 진료 및 원격 의료 솔루션, 행동 개입 및 게임화, 자기 관리를 포함한 CRD 치료의 다양한 측면을 다루고 있음.

\n

3. Evaluating ActuAir: Building Occupants' Experiences of a Shape-Changing Air Quality Display

\n

Intro 요약

\n

건물이 점점 더 센서가 많아지고 기후 변화 압박 속에서 인식 및 웰빙 목적으로 건물 내 환경 데이터를 사용하는 데 대한 관심이 커지고 있음. 그에 비해 대형 모양 변경 디스플레이를 중심으로 한 연구에서는 거주자의 공기 질 데이터 경험에 대한 연구는 별로 없음.

\n

ActuAir 시스템은 생체 모방 개념에서 영감을 받은 모듈식 맞춤형 룸 디바이더로, 팽창과 LED 애니메이션으로 AQ(Air Quality)를 표시. 이와 같은 대규모 소프트 로봇 및 모양 변경 반응형 아키텍쳐는 미래 스마트 빌딩 설계 및 HCI/HBI 연구에 기여함.

","frontmatter":{"title":"sigchi 2024 관심 주제","date":"2024년 09월 07일 12:09","updated":"2024년 09월 18일 20:09","tags":["research"],"series":null},"fields":{"slug":"/interesting topic among sigchi 2024/","readingTime":{"minutes":4.535}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}},"next":null},"pageContext":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","series":null,"previousPostId":"0c2c4f4c-9eb8-50df-891b-1365303231f7","nextPostId":null}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/nuxt-katex/page-data.json b/page-data/nuxt-katex/page-data.json index a522746..04cc3c7 100644 --- a/page-data/nuxt-katex/page-data.json +++ b/page-data/nuxt-katex/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/nuxt-katex/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다. 문제 상황 본 페이지는 Nuxt content와 tailwindcss ty…","html":"

기존 블로그에서 이전해온 글입니다.

\n

\n \n \n \n \n \n
Nuxt.png
\n

\n

삽질 배경

\n

내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다.

\n

문제 상황

\n

본 페이지는 Nuxt content와 tailwindcss typography로 개발되었는데 둘 다 markdown에서 수식을 기본적으로 지원해주지 않기 때문에 내가 추가적으로\n플러그인이나 패키지를 다운받아 적용시켜줘야했다. 구글링을 하다보면 이 GitHub Issue가 그나마 제일 믿을 만한 정보가 많았는데 이 페이지뿐만 아니라 거의 모든 사이트들이 rehype-katexremark-math package를 다운받아 적용하라고 한다. 근데 문제는 nuxt/content, rehype-katex, remark-math package들이 새롭게 업데이트 되면서 서로 호환이 되도록 작업을 안해놨기 때문에 전부 다 최신 버전으로 다운 받아 사용할 경우 수식 적용 자체가 되지를 않는다.

\n

정답

\n

삽질 방법

\n

일단 Nuxt content에서 katex를 지원해주는 방법에 대한 거의 모든 글을 읽어봤을만큼 몇 시간동안 구글링을 해보고 모든 버전들끼리 조합을 해본 뒤에 정답을 찾았다. 또한 nuxt/content을 바꿔주게 되면 수식이 필요없는 파일들에게도 영향이 갈 수 있어서 rehype-katex, remark-math package들만 버전 조합을 찾아봤다. npm downgrade를 하면 쉬운데 에러가 많이 나서 매번 노드 모듈들을 지워주고 package.json을 수정한다음에 새롭게 모듈들을 깔아보면서 로컬에서 실행해보며 확인해주었다.

\n

결론

\n
\"dependencies\": {\n    \"@nuxt/content\": \"^1.15.1\",\n    \"rehype-katex\": \"^4.0.0\",\n    \"remark-math\": \"^4.0.0\",\n    \"katex\": \"^0.15.3\",\n  },
\n
package.json
\n
\n

우선 위에서부터 언급한 3가지 package들은 저 버전들로 설치를 해놔야 호환이 된다. 특히 rehype-katex는 5버전, remark-math는 4버전을 넘기면 안된다. 추가로 katex package도 필요한데, 이 package가 없으면 수식을 인식하긴하는데 우리가 원하는대로 깔끔하게 적용되지 않는다.

\n
css: [\n    {\n      src: 'katex/dist/katex.min.css',\n      defer: true\n    },\n    \"@/assets/css/main.css\"\n  ],\ncontent: {\n    markdown: {\n      remarkPlugins: ['remark-math'],\n      rehypePlugins: ['rehype-katex']\n    },\n  },
\n
nuxt.config.js
\n
\n

그리고 나서 nuxt.config.js 파일에 가서 위와 같이 적용을 시켜줘야한다.

\n

마무리

\n

아무리 구글링을 해도 답이 안나오길래 Github에 Nuxt content로 빌드된 페이지 레포 중에 markdown에서 수식을 지원해줄 수 있게 작업한 것들을 찾아봤다. 유일하게 한 개가 있었는데 그 레포에서는 katex package를 추가로 설치해서 적용해주길래 똑같이 적용시켜보았다.

\n

이럴 때 보면 확실히 Nuxt가 React에 비해 커뮤니티 활성도가 조금 낮은 듯하다. 지금은 Nuxt가 너무 익숙해져서 넘어갈 생각은 없지만 프로그래밍을 하는데에 있어 커뮤니티가 기여하는 점이 크다는 것을 알았다.

\n

적게 잡아도 5시간정도는 이 작업만 한 것 같다. 중간에 던질까 생각도 많았는데 모든 경우를 시도해보지 않으면 나중에 후회할 것 같아서 광기어린 눈으로 지구끝까지 삽질을 해보았다. 나처럼 Nuxt content에 mathtype을 적용하고자 하는 사람이 많을 것 같은데 도움이 됐으면 좋겠다.

","frontmatter":{"title":"Nuxt content에 Mathtype 사용하기","date":"2022년 09월 13일 22:09","updated":"2024년 06월 24일 22:06","tags":["Nuxt","Katex"],"series":null},"fields":{"slug":"/nuxt-katex/","readingTime":{"minutes":4.7}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"title":"2022년 상반기 회고"}},"next":{"fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},"pageContext":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","series":null,"previousPostId":"7e405df8-63be-58ca-828c-8e327a830670","nextPostId":"a827654c-d261-5db3-bff4-d98d76aadbe0"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/nuxt-katex/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다. 문제 상황 본 페이지는 Nuxt content와 tailwindcss ty…","html":"

기존 블로그에서 이전해온 글입니다.

\n

\n \n \n \n \n \n
Nuxt.png
\n

\n

삽질 배경

\n

내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다.

\n

문제 상황

\n

본 페이지는 Nuxt content와 tailwindcss typography로 개발되었는데 둘 다 markdown에서 수식을 기본적으로 지원해주지 않기 때문에 내가 추가적으로\n플러그인이나 패키지를 다운받아 적용시켜줘야했다. 구글링을 하다보면 이 GitHub Issue가 그나마 제일 믿을 만한 정보가 많았는데 이 페이지뿐만 아니라 거의 모든 사이트들이 rehype-katexremark-math package를 다운받아 적용하라고 한다. 근데 문제는 nuxt/content, rehype-katex, remark-math package들이 새롭게 업데이트 되면서 서로 호환이 되도록 작업을 안해놨기 때문에 전부 다 최신 버전으로 다운 받아 사용할 경우 수식 적용 자체가 되지를 않는다.

\n

정답

\n

삽질 방법

\n

일단 Nuxt content에서 katex를 지원해주는 방법에 대한 거의 모든 글을 읽어봤을만큼 몇 시간동안 구글링을 해보고 모든 버전들끼리 조합을 해본 뒤에 정답을 찾았다. 또한 nuxt/content을 바꿔주게 되면 수식이 필요없는 파일들에게도 영향이 갈 수 있어서 rehype-katex, remark-math package들만 버전 조합을 찾아봤다. npm downgrade를 하면 쉬운데 에러가 많이 나서 매번 노드 모듈들을 지워주고 package.json을 수정한다음에 새롭게 모듈들을 깔아보면서 로컬에서 실행해보며 확인해주었다.

\n

결론

\n
\"dependencies\": {\n    \"@nuxt/content\": \"^1.15.1\",\n    \"rehype-katex\": \"^4.0.0\",\n    \"remark-math\": \"^4.0.0\",\n    \"katex\": \"^0.15.3\",\n  },
\n
package.json
\n
\n

우선 위에서부터 언급한 3가지 package들은 저 버전들로 설치를 해놔야 호환이 된다. 특히 rehype-katex는 5버전, remark-math는 4버전을 넘기면 안된다. 추가로 katex package도 필요한데, 이 package가 없으면 수식을 인식하긴하는데 우리가 원하는대로 깔끔하게 적용되지 않는다.

\n
css: [\n    {\n      src: 'katex/dist/katex.min.css',\n      defer: true\n    },\n    \"@/assets/css/main.css\"\n  ],\ncontent: {\n    markdown: {\n      remarkPlugins: ['remark-math'],\n      rehypePlugins: ['rehype-katex']\n    },\n  },
\n
nuxt.config.js
\n
\n

그리고 나서 nuxt.config.js 파일에 가서 위와 같이 적용을 시켜줘야한다.

\n

마무리

\n

아무리 구글링을 해도 답이 안나오길래 Github에 Nuxt content로 빌드된 페이지 레포 중에 markdown에서 수식을 지원해줄 수 있게 작업한 것들을 찾아봤다. 유일하게 한 개가 있었는데 그 레포에서는 katex package를 추가로 설치해서 적용해주길래 똑같이 적용시켜보았다.

\n

이럴 때 보면 확실히 Nuxt가 React에 비해 커뮤니티 활성도가 조금 낮은 듯하다. 지금은 Nuxt가 너무 익숙해져서 넘어갈 생각은 없지만 프로그래밍을 하는데에 있어 커뮤니티가 기여하는 점이 크다는 것을 알았다.

\n

적게 잡아도 5시간정도는 이 작업만 한 것 같다. 중간에 던질까 생각도 많았는데 모든 경우를 시도해보지 않으면 나중에 후회할 것 같아서 광기어린 눈으로 지구끝까지 삽질을 해보았다. 나처럼 Nuxt content에 mathtype을 적용하고자 하는 사람이 많을 것 같은데 도움이 됐으면 좋겠다.

","frontmatter":{"title":"Nuxt content에 Mathtype 사용하기","date":"2022년 09월 13일 22:09","updated":"2024년 06월 24일 22:06","tags":["Nuxt","Katex"],"series":null},"fields":{"slug":"/nuxt-katex/","readingTime":{"minutes":4.7}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"title":"2022년 상반기 회고"}},"next":{"fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},"pageContext":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","series":null,"previousPostId":"7e405df8-63be-58ca-828c-8e327a830670","nextPostId":"a827654c-d261-5db3-bff4-d98d76aadbe0"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/search/page-data.json b/page-data/search/page-data.json index 7e19620..8f63034 100644 --- a/page-data/search/page-data.json +++ b/page-data/search/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-search-jsx","path":"/search/","result":{"data":{"allMarkdownRemark":{"nodes":[{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic & logic unit (ALU) does the operation hold the va…","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"2024년 07월 31일 15:07","title":"Representing Instructions in computer","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n\n## Common HW design for MIPS ISA\n![[HW design.jpg]]\n\n**CPU, register, and memory**\n- Control unit (CU) directs the operation of the processor\n- Arithmetic & logic unit (ALU) does the operation\n- `$0, ..., $31` hold the value that will be used in the operation (called general purpose register)\n- Program counter (PC) contains the memory address of the instruction will be executed\n- Instruction register (IR) contains the current instruction\n\n**Execution of the instruction**\n- Step 1 (fetch): CU says \"load the instruction from the memory address in PC to IR\"\n- Step 2 (decode): CU says \"the instruction stored in IR means `ADD $s0, $s1, $s2`\n- Step 2 (execute): ALU does the add operation with the values in `$s1` and `$s2` and stores the computation result in `$s0`\n## Operation\n### Arithmetic operations\n**Instructions for arithmetic**\n| Operation | C    | Java | MIPS assembly language | Example           |\n| --------- | ---- | ---- | ---------------------- | ------------------- |\n| Add       | +    | +    | `add` (R), `addi` (I)  | `add $t0, $t1, $t2` |\n| Subtract  | -    | -    | `sub` (R)              | `sub $t0, $t1, $t2` |\n\n### Logical operations\n**Instructions for bitwise manipulation**\n\n| Operation | C | Java | MIPS assembly language | Example |\n| ----------- | --- | ---- | ---------------------- | ------------------- |\n| Bitwise AND | & | & | `and`(R), `andi`(I) | `and $t0, $t1, $t2` |\n| Bitwise OR | \\| | \\| | `or` (R), `ori`(I) | `or $t0, $t1, $t2` |\n| Bitwise NOR | ~ | ~ | `nor`(R) | `nor $t0, $t1, $t2` |\n\n\nMIPS has no NOT instruction \nInstead, it has **NOR R-type** instruction\n- a NOR b == NOT (a OR b)\n- But, we can do the NOT operation with NOR: `nor $t0, $t1, $zero!`\n![[nor.jpg]]\n\n### Shift operations\n| Operation | C     | Java | MIPS assembly language | Example |\n| :----------- | :---- | :---- | :--------------------- | :----------------------------------- |\n| Shift left   | <<   | <<<   | `sll` (R) | `sll $s1, $s2, 10 ($s1 = $s2 << 10)` |\n| Shift right | >>   | >>>   | `srl` (R) | `srl $s1, $s2, 10 ($s1 = $s2 >> 10)` |\n\n![[shift operation.jpg]]\n- shamt: how many positions to shift\n- Shift left/right logical (sll / srl)\n\t- Shift left/right and fill with 0 bits\n\t- (unsigned only) sll with i bits = multiply by $2^i$\n\t- (unsigned only) srl with i bits = divide by $2^i$\n\n\n### Conditional operations\n\n| Operation | MIPS assembly language | Example |\n| -------------------- | ---------------------- | ------------------------------------------------- |\n| Conditional branch | `beq`(I) | `beq $t0, $t1, LABEL` (if $t0 == $t1, goto LABEL) |\n| | `bne`(I) | `bne $t0, $t1, LABEL` (if $t0 != $t1, goto LABEL) |\n| Unconditional branch | `j`(I) | `j LABEL` (goto LABEL) |\n\n\n![[bne.jpg]]\n![[j-format.jpg]]\n\n**Instructions for making decisions** \nUsually combined with goto statements and labels \nthere are no branch instructions like blt (less than) and bge (greater than or equal to)\n\n\n**Why?** \n- Handling <, >, <=, >=, ... is slower and more complicate than =, !=\n- It will cause increase of instruction count and clock period or CPI\n\n**Instead, MIPS provides others** \n\n| operation | MIPS assembly language | Example |\n| ---------------- | ---------------------- | ---------------------------------------------------------- |\n| Set on less than | slt(R), slti(I) | slt $t0, $t1, $t2 (if $t1 < $t2, $t0 = 1; else $t0 = 0) |\n\n\n**slt is used in combination with beq and bne**\n```\nslt $t0, $t1, $t2\nbne $t0, $zero, LABEL\nbeq $t0, $zero, LABEL\n```"},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to encode instructions and data in well-formed binary. D…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 31일 15:07","title":"Design principles 4 of MIPS ISA","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n\nThe assembly language that has been studied so far is not a form that the processor can understand. \n\nTherefore, we need to **encode instructions and data in well-formed binary.**\n\n## Data representation\n\n### numbers\n- Numbers are kept in computer hardware as a series of 1 and 0\n- They are considered base 2 numbers (binary numbers)\n- Binary numbers are stored in words\n- In MIPS, the words are 34 bits (4 bytes) long + MIPS is big endian\n### unsigned numbers\n- By using n bits, we can represent unsigned numbers from 0 to $2^n-1$\n### signed numbers\n#### Signed Magnitude\n- first bit determines mathematical symbols\n\t- 0 is plus (+)\n\t- 1 is minus (-)\n- others are bit size\n- but, 000 = 100 = 0\n#### One's complement\n- first bit determines mathematical symbols\n\t- 0 is plus (+)\n\t- 1 is minus (-)\n- if first bit is 0\n\t- read it as it is\n- if first bit is 1\n\t- flip 1 to 0, 0 to 1\n- ex) 100 = -3\n- but, 000 = 111 = 0\n#### Two's complement\n- first bit determines mathematical symbols\n\t- 0 is plus (+)\n\t- 1 is minus (-)\n- if first bit is 0\n\t- read it as it is\n- if first bit is 1\n\t- flip 1 to 0, 0 to 1\n\t- plus 1\n- ex) 100 = -4\n- the number of zero is 1\n### Answer\n**two's complement**  \n- we can get the computation result by just doing given arithmetic operations\n    - 000 - 001 = 111 ( 0 - 1 = -1)\n    - 010 + 111 = 001 (2 + (-1) = 1)\n- the number of zero is only 1.\n- by using n bits, we can represent signed numbers from $-2^{n-1}$ to $2^{n-1}-1$\n#### Signed extension\nSometimes, we need to represent n-bit numbers by using more than n bits\n- 16-bit immediate should be converted to 32 bits for arithmetic\n- Instructions `lb/lh` loads byte/halfword from memory space and store it into 32-bit registers\n- Replicate the sign bit to the left\n ![[signed extension.jpg]]\n## Instruction representation\n**Like data, instructions are also encoded/represented in binary**\nWe call the encoded instructions as **machine instructions**\n\nFor representing instructions, ISA defines instruction format\nIssue: to represent all kinds of instructions, we might need many instrucion formants\n## Design principle 4\n### Good design demands good compromise\nBased on this, MIPS keeps formats as similar as possible (regularity)\n### R-format\nFor the instructions that use only Register operands\n![[r-format.jpg]]\n- `op` (opcode): basic operation of the instruction (what the instruction does)\n- `rs`: the first source register operand\n- `rt`: the second source register operand\n- `rd`: the destination register operand\n- `shamt`: shift amount (used for shift operations)\n- `funct`: function code (the specific variant of the operation)\n>Q. why are the rs, rt, rd 5 bits? \n>\n>A. registers are 32, which means 5 bits are enough to express each register\n\n### I-format\nFor the instructions that use Immediate operands\n![[i-format.jpg]]\n- `op` (opcode): basic operation of the instruction (what the instruction does)\n- `rs`: the first source register operand\n- `rt`: the second source register operand\n- `Constant or address`\n## Summary\nKey underlying design principles\n### Design Principle 1\n#### Simplicity favors regularity\nAll MIPS arithmetic instructions include a single operation & three operands\n- Lower clock period or CPI\n\n## Design Principle 2\n#### Smaller is faster\nOperands of MIPS arithmetic instructions must be chosen in a small number of registers.\nMIPS keeps more complex data in memory and supports data transfer between memory and registers.\n- Lower clock period or CPI\n### Design Principle 3\n#### Make the common case fast\nSupport 16-bit immediate operands for handling small constants + `$zero`\n- Lower Instruction count\n### Design Principle 4\n#### Good design demands goog compromise\nKeep all instructions the same length + keep instruction formats similar as possible. \nData (numbers) are also represented in binary based on two's complement rules.\n- Lower clock period or CPI"},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favors regularity Smaller is faster Make the common ca…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 22일 16:07","title":"Design principles 1~3 of MIPS ISA","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n## MIPS ISA\n### What is MIPS ISA\n- Microprocessor without Interlocked Pipelined Stages\n- A kind of ISA\n\n### Design principles\n1. **Simplicity favors regularity**\n2. **Smaller is faster**\n3. **Make the common case fast**\n\n## Design Principle 1\n### Simplicity favors regularity\n- **Regularity**: all MIPS arithmetic instructions include **a single operation & three operands** \n- Regularity makes implementation simpler \n- Simplicity enables higher performance at lower cost\n\n### Examples\n- add a, b, c\n\t- $a = b + c$\n- sub a, a, d\n\t- $a = a - d$\n\n## Design Principle 2\n### Smaller is faster\n- Operands of MIPS arithmetic instructions must be chosen in **a small number of registers**\n- **Register**: Fast locations for data\n- 32 32-bit registers in MIPS\n- 32 is $2^5$ that can be represented by using 5 bits![[registers.jpg]]\n\n## Practice 1\n**C code:**\n```c\nf = (g + h) - (i + j)\n```\n**Compiled MIPS assembly language code:**\n```\nadd $t0, $s1, $s2\nadd $t1, $s3, $s4\nsub $s0, $t0, $t1\n```\n\n## Memory instruction\n### Memory organization\nkeep a small amount data in **registers** and other remaining, complex data in **memory**\n- **Load** values from memory into registers\n- **Store** results from registers to memory\n### Address\nA memory address is an index to the memory array, starting at 0 \nMIPS uses byte addressing (Each address identifies an 8-bit byte)\n\n**But**, most data items are larger than a byte. So, they use \"**words**\" \n- In MIPS, a ward is 32 bits\n- Registers also hold 32-bit of data\n#### Alignment restrictions\n\n- The start address of each data should be multiple of N, where N is the size of the data\n- In MIPS, words must start at a addresses that are multiples of 4\n- Some data items use one or two bytes (halfword)\n#### Byte ordering\n- Big endian(**MIPS**): place the most significant byte first and the least significant byte last\n- Little endian: place the least significant byte first and the most significant byte last  \n### Load/Store\n- **lw reg1 offset(reg2)**: Load 32-bit word from the memory address reg2 + offset into reg1\n- **sw reg1 offset(reg2)**: Store 32-bit word in reg1 at the memory address reg2 + offset\n- **lh/sh** and **lb/sb** instructions load/store halfwords and 8-bit of data\n\n## Practice 2\n**C code:**\n```c\ng = h + A[8]\n```\n- A is an array of 4-bytes words\n- The value of g and h are in `$s1` and `$s2`\n- The base address of A is in `$s3`\n\n**Compiled MIPS assembly language code:**\n```\nlw $t0, 32($s3)\nadd $s1, $s2, $t0\n```\n\n## Practice 2\n**C code:**\n```c\nA[12] = h+ A[8]\n```\n- A is an array of 4-bytes words\n- The value of h is in `$s2`\n- The base address of A is in `$s3`\n\n**Compiled MIPS assembly language code:**\n```\nlw $t0, 32($s3)\nadd $t0, $s2, $t0\nsw $t0, 48($s3)\n```\n\n## Practice 3\n**C code:**\n```c\nf = (g + h) - (i + j)\n```\n- f, g, and h are in `$s0`, `$s1`, and `$2` respectively\n- Halfwords i and j are sequentially stored in memory\n- The start address of i is stored in `$s3`\n\n**Compiled MIPS assembly language code:**\n```\nadd $t0, $s1, $s2\nlh $t1, 0($s3)\nlh $t2, 2($s3)\nadd $t3, $t1, $t2\nsub $s2, $t0, $t3\n```\n\n## Design Principle 3\n### Make the common case fast\n**Common case :** a program uses a small constant in an operation many times \n\n**Solution: support** \n- **16-bit immediate operands** for handling the constants\n\t- no need to access memory to load the constants\n\t- `addi $t0, $t0, 4` : addi is an add immediate instruction\n\n- **MIPS register 0 (`$zero`)** contains the constant 0\n\t- `add $t0, $t1, $zero` : move values between two registers `$t0` and `t1`\n\n## Practice 4\n**C code:**\n```c\nf = A[10] - i + 4\n```\n- `A` is an array of bytes and its base address is stored in `$s0`\n- `f` and `i` are stored in `$s1` and `$s2` respectively\n\n**Compiled MIPS assembly language code:**\n```\nlb $t0, 10($s0)\nsub $t1, $t0, $s2\naddi $s1, $t1, 4\n```\n \n\n## Summary: MIPS ISA\n\n### Key underlying design principles\n\n- Design principle 1. Simplicity favors regularity\n\t- All MIPS arithmetic instructions include a single operation & three operands\n- Design principle 2. Smaller is faster\n\t- Operands of MIPS arithmetic instructions must be chosen in a small number of registers\n\t- MIPS keeps more complex data in memory and supports data transfer between memory and registers\n- Design principle 3. Make the common case faster\n\t- Support 16-bit immediate operands for handling small constants + `$zero`\n"},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic operation Clock rate (frequency): How many basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","title":"Measuring Performance","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n## Measuring CPU performance\n- Clock period: the duration of a clock cycle\n\t- How long the computer takes to perform a single basic operation\n- Clock rate (frequency): $cycles\\;per\\;second = \\frac{1}{clock\\;period}$\n\t- How many basic operations can be performed in a second\n$$\n\nCPU\\;time = Clock\\;cycles \\times Clock\\;period \\\\ = Clock\\;cycles \\times \\frac{1}{Clock\\;rate}\n\n$$\n### What is CPI?\n**Clock Cycles per instruction**\n: Average number of clock cycles per instruction for a program or program fragment \n$$\n\nCPU\\;time = Clock\\;cycles \\times \\frac{1}{Clock\\;rate} \\\\= Instruction\\;count \\times CPI \\times \\frac{1}{Clock\\;rate}\n\n$$\n**CPI** can be affected by\n1) Cost for each instruction type: $CPI_i$\n2) The frequency of each type of instructions: $F_i = \\frac{Instruction\\;count_i}{Instruction\\;count}$\n$$\n\n\\displaystyle CPI = \\sum_{i=1}^{n}{CPI_i \\times F_i}\n\n$$\n\n## More about\n### Benchmark\n: **a tool for measuring the performance of computers**\n- Metric: **Geometric Mean**\n$$\n\n Performance = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{Execution\\;time\\;ratio_i}}} \\\\ = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{\\frac{Execution\\;time_{X,i}}{Execution\\;time_{REF,i}}}}} \n \\\\ = \\sqrt[n]{\\textstyle \\prod_{i=1}^{n}{\\frac{Execution\\;time_{REF,i}}{Execution\\;time_{X,i}}}}\n\n$$\n\n### Amdahl's law\n$Execution\\;time\\;after\\;improvement$ \n\n$= \\frac{Execution\\;time\\;affected\\;by\\;improvement}{Amount\\;of\\;improvement} + Execution\\;time\\;unaffected$\n\n"},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to single task e.g., how long it takes to do a single …","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","title":"Defining Performance","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n## Two metrics for defining computer performances\n1. Response time\n\t- The time between the start and completion of a task\n\t- related to single task\n\t- e.g., how long it takes to do a single task\n1. Throughput\n\t- A total amount of works done per unit time\n\t- related to multiple tasks\n\t- e.g., tasks per hour\n  \n\n**Q. If we replace the processor in a computer with ad faster version**\n- Response time **decrease**\n- Throughput **increase**\n\n**Q. If we add more processors to a system**\n- Response time **maintain or increase** (more lanes more complex)\n- Throughput **increase**\n\n## Defining performance\n\n- $Performance = \\frac{1}{execution\\;time\\,(reponse\\;time)}$\n- Relative performance: **X is N time faster than Y**\n- $\\frac{Performance_x}{Performance_y} = \\frac{Execution time_y}{Execution time_x} = N$\n\n![[performance.jpg]]\n\n- Elapsed time = system performance = **t1 + t2 + t3 + t4**\n\t- total time between the start and completion of a task, **including everything**\n- CPU time = CPU performance = **t1 + t4** *(Only this in this class)*\n\t- The time spent **processing** a given task **on a processor**\n\n$$\nPerformance = CPU\\;performance = \\frac{1}{CPU\\;time}\n$$\n\nThe CPU time can be further divided into\n- **User CPU time**\n\t- spent for processing the code of the program (some functions)\n- **System CPU time**\n\t- spent in the operating system performing tasks for the program (OS)"},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems software Compilers: translate high-level language to…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"2024년 07월 22일 14:07","title":"CA Overview","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n### Below your program\n\nA simplified view of hardware and software\n- **Applications software**\n\t- Written in high-level language\n- **Systems software**\n\t- **Compilers**: translate high-level language to machine language\n\t- **Operating Systems**\n\t\t- Handle input/output operations\n\t\t- Manage resources (e.g., storage, memory)\n\t\t- Schedule tasks (processes)\n- **Hardware**\n    - processors memory, I/O devices\n    \n\n## Execution of programs\n### Step 1: Translating language\n- From high-level language\n\t- Designed for specific domain\n\t- Provides for productivity and portability\n- To hardware machine language\n\t- Binary digits\n\t- Encoded instructions\n\n### Step 2: Inputting, outputting, processing, and storing data\n**4 Fundamental HW components**\n- Processor\n\t- Datapath + control, our primary focus\n- Memory\n- Input device\n\t- Keyboard, mouse, ...\n- Output device\n\t- Screen, speaker\n\n**8 STEPS**\n1) Loading: programs are stored in memory\n2) Inputting: input device write data to memory\n3) Fetching: processor fetches instructions and data from memory\n4) Decoding: processor (control) decodes the instructions and determine what to do\n5) Executing : processor (datapath) executes the instructions & stores the computation result to memory\n6) Outputting: output device sends the result by reading output data from memory\n\n## Understanding program performance\n\n- Algorithm\n\t- Determines the number of operations executed\n- Programming language, compiler, and instruction set architecture (ISA)\n\t- Determine the number of machine instructions executed per operation\n- Processor and memory system\n\t- Determine how fast instructions can be executed\n- I/O system (including OS)\n\t- Determines how fast I/O operations are executed\n\n## What is ISA (Instruction Set Architecture)\n- An interface between SW snd HW (includes a set of machine instruction)\n\t- SW is translated into the machine instructions included in the ISA\n\t- HW is designed to support the instructions in ISA\n\n## 8 great ideas for designing better computer architecture\n- Design for **Moore's Law**\n\t- Anticipate where the technology will be when the design finishes\n- Provide **abstraction** to simplify design\n\t- Hide low-level details for the ease of SW development\n- Make **the common case** fast\n\t- Enhance performance of the common case instead of optimizing the rare case.\n- Perform via **parallelism**\n\t- Perform operations in parallel\n- Performance via **pipelining**\n\t- Use a particular patten of parallelism, called pipelining\n- Performance via **prediction**\n\t- Start working with prediction, stead of waiting until you know for sure\n- **Hierarchy** of memories\n\t- Use the fastest, smallest, and most expensive memory at the top of the hierarchy and the slowest, largest, and cheapest memory at the bottom\n\t- cache > RAM > Large SSD\n- Dependability via **redundancy**\n\t- Include redundant components that can take over when failure occurs"},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites C 프로그래밍, 논리회로, 어셈블리어를 알면 더욱 좋습니다. Textbooks 본 페이지…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"2024년 07월 22일 12:07","title":"Computer Architecture Intro","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"## Course Description\n\n본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. \n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다.\n\n## Prerequisites and Co-requisites\n\nC 프로그래밍, 논리회로, 어셈블리어를 알면 더욱 좋습니다.\n\n## Textbooks\n\n본 페이지에 작성될 내용의 기반은 아래의 책에 있습니다.\n![[computer-architecture-textbook.jpg]]Computer Organization and Design 5th Edition (Asian Edition)\n\n## Course Schedule\n- 0. Intro\n\t- [[0-1. CA Intro]]\n\t- [[0-2. CA Overview]]\n- 1. Computer Abstractions and Technology\n\t- [[1-1. Defining Performance]]\n\t- [[1-2. Measuring Performance]]\n- 2. Instructions: Language of the Computer\n\t- [[2-1. Designing principles 1~3 of MIPS ISA]]\n\t- [[2-2. Design principles 4 of MIPS ISA]]\n\t- [[2-3. Representing Instructions in computer]]\n\t- [[2-4. Supporting procedures in computer hardware]]\n\t- [[2-5. MIPS memory allocation & addressing]]\n- 3. Arithmetic for Computers\n\t- [[3-1. Addition and Subtraction]]\n\t- [[3-2. Multiplication]]\n\t- [[3-3. Division]]\n- 4. The Processor\n\t- [[4-1. Processor Overview]]\n\t- [[4-2. Controlling a datapath]]\n\t- [[4-3. A single-cycle datapath]]\n\t- [[4-4. Pipelining overview]]\n\t- [[4-5. Handling hazards]]\n\t- [[4-6. Exceptions]]\n- 5. Memory Hierarchy\n\t- [[5-1. Cache overview]]\n\t- [[5-2. Improving cache performance]]\n\t- [[5-3. Vitual memory Part 1]]\n\t- [[5-4. Vitual memory Part 2]]\n"},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상태인데 엇복학은 힘들 것 같아서 내년에 복학할 예정이고 대신 학부연구생은 하반기부터 진행할…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"2024년 07월 20일 20:07","title":"2024년 상반기 회고","tags":["회고"]},"rawMarkdownBody":"지난 회고: [[retrospect-2023]]\n\n어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상태인데 엇복학은 힘들 것 같아서 내년에 복학할 예정이고 대신 학부연구생은 하반기부터 진행할 예정이다.\n\n우선 이번 반기 목표는 아래와 같다.\n> - 운동 꾸준히 하기 (체중80 골격근량43 목표)\n> - 코테 준비하기\n> - 좋아하는 분야 찾기\n> - 일찍 자고 일찍 일어나기 \n\n\n## 운동 꾸준히 하기\n입대 후부터 지금까지 습관처럼 운동을 해오고 있는데 이제는 안하면 스트레스를 받는 정도인 것 같다. 좋은 건지, 안 좋은 건지는 모르겠지만 점점 욕심도 생기고 변해가는 모습이 마음에 든다. \n\n지금은 학교도 안다니고 약속도 정해진 게 없어서 운동을 오전에 해치우고 있는데 학부연구생을 시작하거나 복학하고 나서는 언제 운동을 가야할 지 모르겠다. 운동하는 직장인분들 보면 저녁 늦게 오시는 것 같던데 다들 일정 다 끝내고 힘든 와중에 어떻게들 하는지... 대단한 것 같다.\n![[inbody.jpg]]\n위 사진이 6월말 인바디 결과다. 예전에 비해서는 체중도 많이 늘고 골격근량도 증가해서 진짜 좋아진 편인데 하다보니 욕심이 생겨서... 올해 안으로 체중 80kg, 골격근량 43kg 만드는 게 목표다. 체지방도 많이 필요해보이긴 하는데 그렇다고 지금 복근이 선명하게 보일정도로 마르지도 않아서 더 찌워도 되나... 하는 생각이 든다. 근데 찌우고 싶어도 살이 찌지는 않더라..\n\n지금은 4분할 운동하고 하루 또는 상황이 여의치 않으면 이틀 쉬어주고 있는데 하반기에도 유지하는 게 목표다. 꾸준히 하자!\n\n## 코딩테스트 준비\n군복무를 하면서 코테 준비만큼은 목표를 달성하지 못한 것 같다. 지금 상태는 어떤 알고리즘을 써야하는지 보면 어찌저찌 풀 수 있는 정도인데 그 알고리즘 마저도 온전히 내 걸로 만들지도 못했다. 아직 많이 부족한 분야라고 생각이 들고 그만큼 내가 그동안 피해왔던 분야라고 생각이 든다. \n\n어떤 종류의 알고리즘을 써야하는지 안보면서 푸는 연습, 푸는 방식을 정했으면 스스로 구현하는 연습을 처음부터 기초를 다진다는 생각으로 해야할 것 같고 공부 과정을 여기에 잘 남기도록 해야겠다/ \n\n## 좋아하는 분야 찾기 (미래 계획)\n학부연구생을 하는 것도 이 목표의 일환이기도 한데, 난 내가 생각했을 때 아직은 어떤 분야를 깊게 알고싶은지 모르는 것 같다. 관심사도 계절 바뀌듯이 바뀌어서 넓고 얕은 지식 상태를 유지하고 있는 상황이다. 최근엔 HCI (Human Computer Interactions)에 관심이 생겼다. 그래서 [중앙대 김효수 교수님 연구실](https://sites.google.com/view/hcslab-cau/home?authuser=0)에서 학부연구생을 하기로 했고, 아직은 그곳에서 내가 무엇을 할지는 모르겠지만 내 바람은 연구 분위기도 경험해보면서 내가 선택한 분야가 나와 과연 잘 맞는가, 내가 계속 호기심을 갖고 접근하는가, 이런 일련의 과정들을 계속 해갈 수 있을지에 대한 답을 찾아가고 싶다.\n\n주변에 학교를 졸업하는 사람이 하나 둘 생기면서 과연 난 학사 졸업 후에 무엇을 할 지에 대한 막연한 고민들이 생기기 시작했다. 대학원을 가고 싶은지, 취업을 하고 싶은지, 창업을 하고 싶은지 아무것도 모르는 상태다. 고등학생 때는 당연히 대입이라는 어떻게 보면 정해진 미래 덕분에, 혹은 아직은 미성년자라는 것 때문에 미래에 대한 고민들이 없었지만 대학생이라는 신분은 좀 애매한 것 같다. 법적상 성인이긴 하지만 과연 그만큼의 책임감을 우리가 느끼고 있느냐, 난 개인적으론 아닌 것 같다. 아직은 철 없다고 느끼는 순간도 많고 애처럼 책임을 회피하는 순간들이 종종 있는데, 남은 반기동안에는 졸업 후의 모습에 대해서, 내가 진짜 하고 싶은게 무엇인지 고민할 수 있는 시간을 많이 가져야겠다고 생각이 든다.\n\n## 일찍 자고 일찍 일어나기\n전역 후에 자연스럽게 늦게 자고 늦게 일어나는... 입대 전 생활로 돌아가고 있다. 그렇다고 새벽까지 생산적인 일을 하는 것도 아니라서 온전히 활용하는 시간이 적다. 오전 시간을 활용하려고 하고 있고 지금도 일찍 자고 일찍 일어나서 운동을 가는 루틴을 습관화하려고 하는데 유지하자. \n\n## 마무리하며\n지나고나서야 군대에 있는 1년 반이 짧게 느껴지는 것 같다. 그동안 못해왔던 공부를 다시 할 생각에 막막하기도 하고 기대도 되는 시점인데 절반도 안남은 24년을 후회없이 보내고 싶다. 전에도 쓴 것 같은데 기록의 중요성을 다시 한 번 느끼면서 하반기에는 공부 뿐이 아니라 여러 활동들, 생각들을 적으려고 노력해봐야겠다. "},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다. 생산성 내가 원한 건 생산성 딱 하나였…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"2024년 01월 10일 13:01","title":"기존 블로그 대신 Obsidian을 택한 이유","tags":["obsidian"]},"rawMarkdownBody":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다.\n## 생산성\n내가 원한 건 생산성 딱 하나였다. 블로깅을 하는 유일한 목적이 결국은 스쳐지나가는 생각들을 메모해두기 위함인데 기존에 사용하던 [Nuxt로 개발된 블로그](https://github.com/theminjunchoi/ex-blog)는 생산성 측면에서 부족했던 것 같다. 글 하나를 쓰기 위해 노트북을 열어야했고 괜히 나도 있어보이는 글을 쓰기 위해 억지로 분량을 늘리고 이쁜 문장들을 찾았다. 공부 내용을 기록할 때도 학습에 초점을 둔 기록이기보단 정리에 초점을 둔 기록들 투성이었다. 지금 생각해보면 모든 요소 하나하나가 너무 많은 시간을 잡아먹는 것 같았다. 그러던 와중에 obsidian을 발견했다.\n## 현재 블로그\n### obsidian\n세컨드브레인이라는 책을 읽다가 obsidian이라는 툴을 알게 됐다. 글과 글 사이에 관계를 나타내기 좋아서 사용하기 시작했는데 여러 플러그인들도 많아서 내가 사용하는 용도에 맞게 커스텀하기 좋은 것 같다. 플러그인은 아래의 것들을 사용하고 있다.\n- Omnisearch\n- Templater\n- Update time on edit\n- Outliner\n- Checklist\n- Calendar\n- MindMap\n- Obsidian git\n### Gatsby\n기존 블로그는 Nuxt로 개발된 정적 웹페이지였다. Nuxt에서 Gatsby로 넘어간 이유는 2가지다.\n\n첫째는 원래 사용하던 블로그는 Nuxt2로 개발되었는데 내가 군대를 간 사이에 Nuxt3가 나왔다. 처음에는 마이그레이션을 해보려고 해봤는데 생각만큼 그리 단순하지 않았다. 가장 큰 문제는 아래에서도 간단하게 언급하겠지만 Nuxt가 버전업이 되면서 이를 지원하던 노드 모듈들도 이에 맞게 수정이 되어야하는데 vue 생태계가 그렇게 반응이 빠르지 않았다. 그래서 내가 마이그레이션을 해도 기존에 쓰던 기능들을 못 쓰게 되고 내가 노드 모듈을 직접 건드려보기도 했는데 도저히 휴가 때 할 수 있는 양이 아니었다.\n\n두 번째 이유는 단순히 vue 기반의 프레임워크랑 react 기반의 프레임워크를 비교해보고 싶었다. 여러 프레임워크를 쓰면서 나한테 맞고 편한 프레임워크를 찾아보고 싶었고 얼마나 많이 다른지 단순 호기심에서 시작했다. 좀 더 써봐야 알겠지만 프레임워크를 지원하는 생태계는 역시 vue보단 react가 좀 더 좋은 것 같다. 지원하는 노드 모듈들이 많은 것도 틀린 말은 아닌데 그것보다는 프레임워크의 버전업을 노드 모듈들이 빠르게 반응해서 맞춰주는 건 react가 더 편한 것 같다. 사실 차이가 그렇게 크지는 않겠지만 그래도 아직 익숙한 건 아직까지 vue인 것 같다. \n### 동기화: Working Copy\nobsidian에서 obsidian sync라는 기능으로 유료 구독제를 결제하면 여러 기기간의 동기화를 지원해주고 있다. 하지만 나는 Working copy라는 어플로 노트북과 아이패드, 아이폰을 동기화 해주고 있다. 결국은 Github로 동기화를 해주고 있는 건데 조금은 불편할지라도 내가 원할 때 커밋을 올리고 버전관리가 더 쉬울 것 같아서 이렇게 사용하고 있다."},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 생각을 가지고 살았는지, 전역 후에 내가 어떤 목표를 가지고 살아야하는지 한 번쯤은 정리해…","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"2024년 01월 08일 12:01","title":"2023년 회고","tags":["회고"]},"rawMarkdownBody":"지난 회고: [[retrospect-2022-2]]\n\n이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 생각을 가지고 살았는지, 전역 후에 내가 어떤 목표를 가지고 살아야하는지 한 번쯤은 정리해보려고 늦었지만 휴가를 나와서 23년 회고를 작성하기로 했다.\n## 2023년 과연 난 뭘 했을까?\n사실 한 게 별로 없다. 머리 밀고 훈련소 들어가서 열심히 훈련받고, 자대 배치받고, 흘러가는 시간에 몸을 맡긴 채 하루하루를 녹이고 있는 날들의 연속이었다. 그래도 그 속에서 1년 반이라는 시간이 내 20대의 공백으로만 남는 건 허락하지 못하기에 이거저거 시도를 해봤다.\n### 독서\n사실 난 책과는 그리 친한 편은 아닌데, 훈련소를 들어가면 쉬는 시간에 너무나도 할 게 없었다. 그래서 진중문고에 올라와있던 책을 한 두권씩 읽었는데 난 책이 그렇게 재밌다는 걸 훈련소에서 알았다. 그렇게 훈련소에서 한 두권 읽다가 자대 배치를 받고 핸드폰이라는 신문물을 발견해서 초반에는 열심히 밀린 핸드폰을 하다가 그거마저 지쳐버려서 다시 또 책을 읽기 시작했다. 당직을 서야할 때나 주말에도 꽤 많이 읽었는데 지금 다시 생각하면 막상 기억에 남는 건 몇 개 없는 것 같다.\n- 우리는 모두 각자의 별에서 빛난다 - 이광형\n- 세컨드브레인 - 티아고포르테\n다음 휴가 때는 이 2권이라도 책 리뷰를 써볼까한다.\n### 운동\n요즘은 운동을 안하면 불안할 정도로 습관이 된 것 같다. 주변 형들이 군대를 다녀오면 남는 건 군적금과 몸밖에 없다고 하길래 시작했는데 여러모로 군생활을 버티게끔 해준 유일한 취미생활이 된 것 같다. 군생활에 현타가 올 때마다 운동하다보니 재미도 붙어서 주 5회 1시간 이상씩 꾸준히 하고 있다. 전역 후에도 유지할 수 있도록 해야겠다.\n### 코딩\n난 내가 군대에서도 코딩을 할 줄 알았다. 어떻게든 꾸역꾸역 할 줄 알았는데 지금 막상 돌아보면 별로 못한 것 같다. pc가 4대 밖에 없는 사지방에서 차가운 손 녹여가며 해봤는데 집중도 안되고 군e러닝도 하다보니까 당장 눈 앞에 놓인 학점 따기 바빴던 것 같다. 남은 기간 동안에는 군e러닝도 안들으니까 적어도 코테준비를 해야겠다.\n### 군e러닝\n군복무를 하면서 군e러닝을 들을 수 있다. 각 학교에서 군 휴학생을 위해 몇몇 강의들을 개설해주는데 나는 23-1에는 **소비의문화와역사**, 23-2에는 그 놈의 **실용한자**를 수강했다. 타 학교에 비해 중앙대가 개설해주는 강의가 별로 없어서 아쉽긴 했지만 실용한자가 군e러닝으로 들을 수 있어서 다행이었다. 아직 실용한자를 수강하지 않은 중대 미필분들은 군대에서 끝내버리세요 :)\n\n생각보다 뺏기는 시간도 많았고 시험에, 과제에 준비해야할 것들은 군 휴학생이라고 배려해주는 건 별로 없지만 그래도 무의미하게 군생활을 보내지 않고 학점이라도 채운 것 같다.\n### 창업아이디어경진대회\n23년 2월, 8월 2번에 걸쳐서 창업아이디어경진대회에 나갔다. 물론 포상휴가에 눈이 멀어 나갔지만 그래도 반복되는 군생활 가운데 새로운 바람을 불어넣어준 활동이었다. 2월에는 본선에서 떨어져서 8월에 좀 더 열심히 준비해서 다시 도전했다. 이 활동이 어떤 지식의 도약을 일으켜 준 건 아니었지만 지금 생각해보면 군복무하면서 이거저거 시도해보면서 바쁘게 생활한 것 같아서 뿌듯하다.\n\n![[presentation.png]]\n## 2024년 목표\n군대에 있으면서 '개발자로서 나' 라는 부분에 대해 생각을 많이 해오고 있다. 혼자 고민할 수 있는 시간이 많다보니 이런저런 생각을 하곤 하는데 요즘 난 나라는 개발자가 뭘 좋아하는지, 무엇을 잘하고 어떤 일을 할 때 행복해하는지 고민을 하고 있는 것 같다.\n\n사실 내가 스스로를 개발자라고 칭할 수 있나? 라는 생각이 들기도 한다. 아직 내 이름을 걸고 보여줄 수 있는 프로젝트도 없고 이룬 게 별로 없는 것 같아서 조바심도 나고 얼른 다시 학교로 가고 싶다는 생각이 든다.\n\n그래서 2024년의 목표는 커리어 성장과 가치 높이기다. 내년이면 올해보다 회고할 게 많은 내가 되면 좋겠다. 그때까지 옵시디언으로 꾸준히 기록을 해나가면서 유의미한 한 해를 보내고 싶다.\n\n이렇게 보니 군생활하면서 후회하지 않을 정도로 열심히 산 것 같다. 내년 이맘때도 1년 동안 정말 열심히 살았구나라는 생각을 할 수 있길 바라며 23년 회고와 24년 목표를 기록해본다.\n"},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에, 지난 9월에 작성했던 상반기 회고를 다시 읽어봤다. 내가 무슨 생각을 해왔었는지, 하반기…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"2022년 12월 23일 12:12","title":"2022년 하반기 회고","tags":["회고"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/retrospect-2022-2)에서 이전해온 글입니다.*\n\n지난 회고: [[retrospect-2022-1]]\n\n## 들어가기 전에\n어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에, 지난 9월에 작성했던 [상반기 회고](https://minjun.blog/retrospect-2022-1)를 다시 읽어봤다. 내가 무슨 생각을 해왔었는지, 하반기에 새운 목표들은 잘 이루었는지 확인해봤다. 다 읽고 가장 먼저 생각이 든 건, **내 사고의 기록은 더 구체적으로, 목표는 더더욱 구체적으로 적어야겠다는 것이**었다. 나름 한 학기 동안 내가 느꼈던 것들을 자세히 적었다고 생각했는데 지금 다시 보니 그 순간의 기억을 다시 불러내기엔 조금 부족한 것 같다. 이번 회고는 보다 더 다양한 내 기억들을 저장하고자 한다.\n\n## 학교 수업\n이번 학기엔 전공 수업이 5개였다. 컴퓨터구조, 컴퓨터통신, 객체지향프로그래밍, 오토마타와 형식언어, 데이터베이스설계, 이렇게 총 5개를 들었다. 생각보다 전공 수업을 5개나 듣는 건 쉬운 일이 아니었다. 강의 자체를 오프라인으로 오랜시간동안 듣는 게 너무도 오랜만이었기 때문에 학기 초에는 몸이 적응하기 힘들었었다. 그럼에도 난 시간을 쪼개면 내 개인 개발 공부를 할 수 있는 시간이 있을거라고 생각했는데 학교 수업을 너무 재밌있게 들어서 그런지 그 둘을 병행하기엔 물리적으로 불가능했었다. \n\n![[Computer-Architecture.jpg]]\n\n\n특히 컴퓨터구조와 컴퓨터통신 과목을 배우면서 검은색화면 뒤로, 우리 눈에 보이지 않는 방식으로 일어나고 있는 일들을 얕게나마 알아가는 과정이 흥미로웠다. 컴퓨터구조를 공부하면서 수업 자료 이외에도 원서도 많이 읽었는데, 학교 강의에서는 다뤄주지 않는 내용들도 궁금해하고 찾아보면서 잠시나마 대학원에 가면 어떨까.. 하는 생각을 했다. 나도 저런 책을 쓸 만큼의 연구를 해보고 싶기도 했고, 책을 읽으면서 나라면 이런 문제를 다르게 접근하지 않았을까.. 혹은 더 효율적인 뱡향으로 풀 수 있지 않을까.. 하는 건방진 생각을 하기도 했다.\n\n## ZeroPage\n\n![[zp-angelscamp-site.jpg]]\n![[zp-지금그때-site.jpg]]\n\n\nZeroPage의 모든 굵지막한 행사들이 끝이 났다. 엔젤스캠프, 지금그때를 진행했고, 1월 초에 다같이 기년회를 할 예정이다. 그때가서도 말할 예정이지만, 나에게 ZeroPage는 가장 자극을 많이 받을 수 있는 곳이었다. 각자 자리에서 열심히 사는 그들을 보며 순수한 열정을 불태울 수 있는, 내가 학교 생활에서 가장 아끼던 부분이었다. \n\n기년회를 끝으로 공식적인 회장단 활동이 끝이 난다. 한 동아리의 회장단은 참 해야할 일이 많다는 걸 깨달은 한 해였지만, 그럼에도 너무 재미있었던 1년이었다. 사람 만나는 재미를 알게 되고 내 생각을 누군가와 공유한다는 느낌을 받을 수 있던 자리였다. \n\n1년 사이에 동아리에 대한 애정이 많이 커졌다. 내가 보고 듣고 느끼고 배운 게 많았던 곳이어서 그런지, 회장단이 끝난다는 게 왠지 모르게 시원섭섭한 느낌이다. 동아리 사람들에게 올해의 ZeroPage가 어떻게 기억될지는 모르겠지만, 다들 이 동아리로 하여금 나처럼 배우고 느낀 점이 많으면 그걸로 만족할 수 있을 것 같다.\n\n32대 회장단을 같이 이끌어온 친구들에게도 너무 수고했다고 고맙다고 전해주고 싶다.\n\n## 2023년\n적은 건 몇 개 없지만 모니터 앞에서는 몇 시간을 넘게 그동안의 시간들을 쭉 되새겨보았다. 올해는 공부도 열심히 하고 노는 것도 열심히 해서 그런지 시간이 너무 빠르다고 느껴질만큼 바쁘게, 재밌게 보낸 것 같다. 내년엔, 잠시 하던 걸 멈춰두고 2023년 1월 9일에 입대를 하기로 했다. 사실 공부도 더 하고 싶고, 학교 생활도 더 하고 싶고, 더 자극받고 성장하고 싶은데 갑작스럽게 가는 것 같아서 많이 아쉬운 건 사실이다. 하지만 더 늦어질 수도 없고 오히려 하고 싶은 게 너무나도 많아서 하루 빨리 가기로 결정을 하기도 했다. 전역 후에 하고 싶은 게 너무도 많기에, 좀 더 빨리 입대하고 좀 더 빨리 전역할 생각이다. \n\n군대에서의 계획은 아직 잘 모르겠다. 원래는 토플도 공부하고 알고리즘도 공부하겠다는 목표를 적으려고 했지만, 가봐야 생각이 정리될 수 있을 것 같다. 20살이 돼도 학교 수업과 별개로 열심히 자기 계발하고 공부했었다. 한 번쯤 쉬는 것도 나쁘지 않을 것 같다는 생각이 이 글을 쓰면서 문득 떠올랐다. 대신, 나한테 2023년은 어느때보다 느리게 가겠지만 그래도 인생에 있어서 의미없는 1년으로 만들지 말자는 게 내 작은 목표이다.\n\n## 2022년의 나\n나는 학교 수업 이외에도 이런 저런 활동 하는 것을 좋아하고, 사람들을 만나서 배우고 같이 공부하는 과정을 좋아하며 그로 인해 얻게 되는 시너지와 에너지를 좋아하는 사람이다. 하지만 올해에는 부족한 점도 있었다. \n\n어느 순간 팀플 과제를 하는 내 모습이 내가 원하던 모습이 아니었다는 것을 깨달았다. 성적에 대한 욕심 때문에 기분이 내 태도가 되어버린 순간들이 몇몇 있었다. 팀 프로젝트를 하면서 가장 아쉬운 순간은, 팀원들이 나만큼 이 과제에 진심이 아니었다는 걸 깨달은 순간이다. 데일 카네기는 인간관계의 기본원칙을 설명하면서 마지막으로 \"상대방에게 열렬한 욕망을 불러일으켜라.\"라고 한다. 수도 없이 읽은 구절인데 팀원들에게 미안하기도 하고 아직은 부족한 나에게 실망한 순간이었다. \n\n반대로 올해의 내가 잘한 점은, 나에게 집중할 수 있는 시간이 많았다는 것이다. 해외프로그램을 다녀온 이후로 나한테 보다 더 집중할 수 있었다. 관심과 욕심은 내가 성장할 수 있게하는 내 동력원인데 항상 그 관심의 영역에는 내가 없음을 깨달을 수 있었다. 내가 잘하고 못하는 게 무엇인지, 내 관심사와 시선은 어디로 향하는지 알 수 있었고 이외에도 감정적으로, 또 그 밖으로도 느낀 게 너무 많은 올해였다. \n\n## 마무리하며\n회고를 하면서 올해는 돌아봤는데 알차게, 또 후회없이 보낸 것 같아서 다행이었다. 나를 성장시킬 수 있었던 한 해였고, 동기부여가 많이 됐던 한 해였다. 다음 회고는 아마 24년 하반기 회고가 될 것 같은데 얼른 그 회고를 쓰는 날이 다가왔으면 좋겠다"},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다. 이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"2022년 11월 26일 20:11","title":"2022 ZeroPage 지금그때","tags":["club"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/after-jigeumgeuddae)에서 이전해온 글입니다.*\n\n## What is 지금그때?\n![[ZeroPage.svg]]\n\n현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 ['지금그때'](https://zp-portal.org/jigeumgeuddae/)를 진행했다. \n\n이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공유하고 엿볼 수 있는 자리다. 후배분들은 학업이나 학교생활에 대한 본인의 고민을 털어 놓을 수 있고 이에 대한 조언이나 선배분들의 경험을 들을 수 있다. 반대로 선배분들은 그런 질문들에 기꺼이 조언을 아끼지 않아주시고 요즘은 어떤 공부를 하는지, 학교 생활은 무엇이 달라졌는지 서로 이야기를 나눌 수 있는 자리이다.\n\n작년에도 내가 1학년일 때 이 행사를 참여했었는데 선배분들과 이야기를 하면서 학교 수업에서는 얻을 수 없던 이야기들을 나눌 수 있었고, 취업이나 대학원 뿐이 아니라 개발자라는 종류의 사람이 무엇인지, 앞으로의 공부 방향성을 어떻게 확립해나가야 하는지를 알 수 있었다.\n\n올해는 이 동아리의 회장단으로서 행사를 준비하고 운영하고 참여했다.\n\n### 진행 방법\n우선 간단히 아이스 브레이킹을 하고 본격적으로 시작이 됐다. 대략 한 시간씩 3타임이 운영이 됐고 각 타임에는 본인이 관심이 있는 주제가 있는 자리에 가서 편하게 대화를 하면 된다.\n\n자세한 타임테이블은 아래와 같다.\n| Time | Activity |\n| ------------- | -------------- |\n| 13:30 - 14:00 | 참가자 등록 |\n| 14:00 - 14:30 | 개회사 |\n| 14:30 - 15:00 | 아이스브레이킹 |\n| 15:00 - 16:00 | 월드카페 1부 |\n| 16:00 - 17:00 | 월드카페 2부 |\n| 14:30 - 15:00 | 월드카페 3부 |\n| 18:00 | 후기 및 폐막 |\n| 18:30 | 회식 |\n\n\n주제는 신청하신 분들이 원하는 것을 바탕으로 총 12개를 만들었다.\n- 무슨 공부를 해야하는가, 학부생때 해야할 것들에 대한 추천\n- 학교 수업을 따라가는 것이 중요한가\n- 졸업생으로서 가장 유용하게 생각하는 과목\n- 취업을 위해 준비해야할 것들\n- 대학원에 대한 조언\n- 관심 분야를 어떻게 정했는지\n- 지금 하는 일이 즐거운 이유\n- 컴퓨터 전공자는 어떤 유형으로 사회에 진출하는가\n- ZeroPage가 나에게 미친 영향\n- 시간, 멘탈 체력 등의 관리\n- 방학에는 무엇을 하는 게 좋은가\n- 개발자와 커뮤니케이션에 대해\n\n## 어떤 주제에 참여했는가\n꼭 한 타임에 한 주제에 머물러 있을 필요는 없었는데 자리에서 이야기를 하다보니 물어볼 것도 많았고 들을 내용도 많아서 총 3개의 주제에 참여를 했다.\n\n### 학교 수업을 따라가는 것이 중요한가\n첫 번째 타임에 참여한 주제다. 사실 이 주제는 내가 1학년 때부터 재학생 선배분들께 많이 물어보며 다녔고 이에 대한 답도 알지만, 오늘 처음 본 선배분들, 특히 현업에 종사하신 분들의 생각은 어떤지 궁금해서 자리를 찾아갔다.\n\n당연히, 다들 중요하다고 대답해주셨다. 근데 그거에 덧붙여서 이야기 해주신게 기억이 남았다. 내 기억에 남는대로 재해석을 하자면, 학교에서 배운 내용은 일종의 지도 같은 역할을 한다고 하셨다. 당장은 현업에서 쓰이지 않고 내가 필요로 하지는 않을 수도 있지만, 언젠가 내가 그 지식이 필요할 때 그 길을 찾는데 유리하다고 한다. 또한 본인이 취직을 하든, 연구를 하든 무엇을 할 지 아무도 알 수 없기에 기회비용일 수도 있지만 잘 만들어진 학교 커리큘럼을 따라가는 게 맞다고 하셨다.\n\n하지만 오히려 반대로 학점은 그리 중요하지 않았다. 대학원을 준비하지 않는 이상, 취업을 할 때는 학점보다는 그 과목을 본인이 자신의 말로 설명할 수 있는지, 얼만큼 자기의 지식으로 만들었는지를 판별하기 때문에 학점에 그리 목 메이지 않아도 된다고 한다.\n\n그래서 나는 요즘 기업에서 신입을 뽑을 때 학점보다는 프로젝트를 더 중요하게 생각하냐고 여쭤봤고, 거기 계신 세 분의 선배들 모두 얼추 맞다고 대답하셨다. 대신 우리들이 프로젝트를 통해서 어떤 특정한 모습을 뽑내려고 안해도 된다고 하셨다. 지원자들을 보면, 프로젝트를 통해 본인의 특장점을 억지로 어필하려는 모습이 보인다고 하는데 이러한 점보다는 오히려 **본인이 문제를 정의하고, 몰두하고, 해결해나가는 과정 속에서 생기는 고민이나 선택들에 대한 이유를 본인만의 생각으로 논리적이게 풀이할 수 있고 그 과정을 제시할 수 있으면 된다고 했다.** 단순히 예를 들자면, 왜 React를 안쓰고 Nuxt로 개발을 하는지에 대한 본인만의 생각이 있고 말을 할 수 있으면 그걸로 충분하다는 얘기다. 실제 현업에서도 예시와 경우가 많기 때문에 이런 상황에는 지원자가 어떤 이유로 왜 이런 선택을 하는지 알아가는 과정인 것이었다. 또 더불어서 **학교에서 배운 내용들을 본인의 프로젝트에 적용하려는 시도를 하면 좋을 것 같다고 하셨다.** 개념적이고 추상적인 CS 지식을 프로젝트에 적용하는 게 쉽지는 않지만 low level를 다루면서 양질의 프로젝트를 만들 수 있거나 문제를 해결할 수 있는 근본적인 해결책을 찾을 수도 있다고 하셨다.\n\n### 관심 분야를 어떻게 정했는지\n두 번째 타임에 참여한 주제다. 입학 전부터, 나는 문제를 찾아 공학적인 기술로 해결해나가는 것을 좋아했다. 그렇다보니 프로젝트성 공부를 지속했었다. 문제를 해결해나가는 과정에서 앱이 필요하면 앱 개발 공부를 했고, 웹이 필요할 것 같으면 그때부터 웹을 공부하기 시작했다. 필요성에 의해 공부를 하다보니 여러 분야를 어느정도 경험은 해봤지만 특정 분야에 대한 깊은 지식이나 내가 그 분야를 제대로 잘 안다고 말을 할 수는 없었던 것 같았다. 그래서 최근에는 내가 좋아하는 분야를 찾아서 깊게 파보고 싶다는 생각이 문득 들었고 선배분들은 어떻게 본인의 분야를 정했는지 궁금했다.\n\n여러 선배들의 조언을 정리하면 아래와 같다.\n\n우선 다양한 경험을 해봐야한다는 것이었다. 동아리 내에서 스터디를 하든, 더 몰입감 있게 공모전을 나가든 어느정도의 강제성을 부여한 채로 여러 분야를 접해야한다는 것이다. 사실 지금 관심 분야를 찾아도 실제 현업에 나가면 자신이 관심있어 하는 분야를 다루는 경우는 일부기 때문에 한 분야를 깊게 파는 것이 물론 개인의 성장에 도움은 되지만, 관심 분야를 못 정했다고 불안해할 필요는 없다고 하셨다. 다만 오래 방황을 할 경우에는 학교 공부를 더 열심히 해야한다고 하셨다. 학교에서 배우는 CS 지식이 현업에서 일하는 지금까지도 도움이 되기 때문에 기본 중에 기본이 되는 내용들은 탄탄히 쌓을 필요가 있다고 했다. \n\n사실 너무 당연한 얘기였다. 오히려 선배분께서 지금처럼 필요에 의해 찾아 공부하고 고민하는 시간이 필요한 게 당연하다고 하셨다. 그 말에 안심이 되기도 했고, 지금처럼 지치지 말고 여러 자극을 받으며 살아야겠다고 생각했다.\n### 방학에는 무엇을 하는 게 좋은가\n세 번째 타임에 참여한 주제다. 사실 세 번째 타임에는 조언을 들으러 간 게 아니라 1학년분들이 계셔서 고민을 들어주려고 갔었다. 그래봤자 1년 차이라 도움이 될 지는 모르겠지만, 그래도 쉬지 않고 바쁘게 1학년을 보냈다고 말할 수 있어서 좋았던 점, 또 아쉬웠던 점을 들려주려고 갔다.\n\n내가 말한 내용만 정리를 하면 아래와 같다.\n\n난 하나의 기술 스택을 공부해보거나, 학교에서 지원해주는 외부 프로그램을 해보라고 추천했었다. 경험에서 오는 차이만큼 확실한 게 없다고 생각을 해와서 방학만큼은 학기 중에 병행하기 어려웠던 개발공부를 하거나, 해외 프로그램에 참여하는 게 도움이 많이 될 것 같았다. 또한 본인이 졸업 전에 하고 싶은 것에 대한 계획을 세울 필요가 있다고 말해줬다. 교환학생만 해도, 적어도 1년 전부터는 어학성적을 준비해야한다. 외부 동아리도 코딩 테스트를 통과하려면 몇 달을 할애해야한다. 나도 이런 점에 있어서는 부족했고 아쉬웠기에 후배분들은 더 낫길 바라는 마음에 말해줬다.\n## 2022 지금그때 회고\n![[2022 지금그때.jpg]]\n\n올해에도 작년과 마찬가지로 여러 생각이 들었고 다양한 감정들을 느낄 수 있었다. 참여자로서, 또 이 행사를 준비했던 회장단으로서도 느낀점이 있었다. \n\n우선 장소가 급히 바뀌어 예상했던 방향대로 안흘러가서 좀 아쉬웠다. 그럼에도 다른 회장단들이 열심히 같이 준비해줘서 다행이었고 무사히 진행됐다는 점에서 뿌듯하기도 했다. 이럴 때마다 회장단하길 잘한 것 같다는 생각이 든다.\n\n1년동안 학교 생활을 하다보면 자연스럽게 진로에 관한 이런저런 고민들이 쌓이게 된다. 오히려 난 방향성 없게 입에 넣어주는 공부만 하면 안된다고 생각하고 본인이 학교를 다니면서 진로나, 학업, 개발 등 본인만의 여러 고민들이 생겨야한다고 생각한다. 나는 그럴 때마다 물어볼 곳이 없었는데 졸업을 하셔도 여전히 관심을 가져주시는 분들 덕분에 동아리 운영도 되고 나와 같은 재학생들의 고민이 조금은 덜어지는 것 같다. 선배분들께 질문을 하고, 이야기를 하다보면 내 로드맵을 잠시 먼 시점에서 관찰하는 느낌이 든다. 미로에서 잠시 나와 탈출구가 어딨는지 확인하는 느낌이었다. 평상시에 갖고 있던 여러 고민들이 하나하나 풀려서 그런가 다시금 방향성이 잡히고 새로운 자극을 찾은 느낌이 들었다.\n\n학부 차원에서 이런 이벤트를 유지를 못시켜서 더욱 동아리 선배분들께 감사하기도했다. 다만 아쉬운 건, 1학년분들도 나와 같은 기분을 느끼셨으면 했다. 듣는 것에만 익숙해진 분들이 꽤 있으셨는데 기회를 놓치지 않고 이런 저런 질문을 더 많이 했으면 어땟을까.. 라는 생각이 들었다.\n\n추가로 선배분들이 어떤 일을 하는지, 어느 분야를 공부하고 계신지 여쭤봤었는데 그럴 때마다 난 **대체 불가능 한 사람, 개발자를 위한 개발자**라는 타이틀을 내밀 수 있는 사림이 되어야겠다고 생각했다. 본인이 지금 무엇을 하고 있는지, 자신 있게 보여주고 설명하는 모습이 내가 바라는 모습이기도 했다. 지금 내가 하고자 하는 분야를 뚜렷히 못정해서 저런 생각이 들은 것 같기도 했다. 앞으로도 많은 자극들을 받으며 아직 접해보지 못한 것들을 경험해보고 싶었고, 지금 도움을 받은 만큼 나의 지금이 그때가 될 때 후배분들의 지금에 도움이 될 수 있는 사람이 되어야겠다는 생각을 했다.\n"},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다. 문제 상황 본 페이지는 Nuxt content와 tailwindcss ty…","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"2022년 09월 13일 22:09","title":"Nuxt content에 Mathtype 사용하기","tags":["Nuxt","Katex"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/nuxt-katex)에서 이전해온 글입니다.*\n\n\n![[Nuxt.png]]\n## 삽질 배경\n내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 [스터디 페이지](https://choiminjun.netlify.app/study/computer-architecture/0-1)를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다.\n\n### 문제 상황\n본 페이지는 Nuxt content와 tailwindcss typography로 개발되었는데 둘 다 markdown에서 수식을 기본적으로 지원해주지 않기 때문에 내가 추가적으로 \n플러그인이나 패키지를 다운받아 적용시켜줘야했다. 구글링을 하다보면 이 [GitHub Issue](https://github.com/nuxt/content/issues/102)가 그나마 제일 믿을 만한 정보가 많았는데 이 페이지뿐만 아니라 거의 모든 사이트들이 `rehype-katex`와 `remark-math` package를 다운받아 적용하라고 한다. 근데 문제는 `nuxt/content`, `rehype-katex`, `remark-math` package들이 새롭게 업데이트 되면서 서로 호환이 되도록 작업을 안해놨기 때문에 전부 다 최신 버전으로 다운 받아 사용할 경우 수식 적용 자체가 되지를 않는다. \n\n## 정답\n### 삽질 방법\n일단 Nuxt content에서 katex를 지원해주는 방법에 대한 거의 모든 글을 읽어봤을만큼 몇 시간동안 구글링을 해보고 모든 버전들끼리 조합을 해본 뒤에 정답을 찾았다. 또한 `nuxt/content`을 바꿔주게 되면 수식이 필요없는 파일들에게도 영향이 갈 수 있어서 `rehype-katex`, `remark-math` package들만 버전 조합을 찾아봤다. npm downgrade를 하면 쉬운데 에러가 많이 나서 매번 **노드 모듈**들을 지워주고 **package.json**을 수정한다음에 새롭게 모듈들을 깔아보면서 로컬에서 실행해보며 확인해주었다.\n\n### 결론\n\n```javascript\n\"dependencies\": {\n \"@nuxt/content\": \"^1.15.1\",\n \"rehype-katex\": \"^4.0.0\",\n \"remark-math\": \"^4.0.0\",\n \"katex\": \"^0.15.3\",\n },\n``` \n
package.json
\n
\n\n우선 위에서부터 언급한 3가지 package들은 저 버전들로 설치를 해놔야 호환이 된다. 특히 `rehype-katex`는 5버전, `remark-math`는 4버전을 넘기면 안된다. 추가로 `katex` package도 필요한데, 이 package가 없으면 수식을 인식하긴하는데 우리가 원하는대로 깔끔하게 적용되지 않는다.\n\n\n\n```javascript\ncss: [\n {\n src: 'katex/dist/katex.min.css',\n defer: true\n },\n \"@/assets/css/main.css\"\n ],\ncontent: {\n markdown: {\n remarkPlugins: ['remark-math'],\n rehypePlugins: ['rehype-katex']\n },\n },\n```\n
nuxt.config.js
\n
\n\n그리고 나서 **nuxt.config.js** 파일에 가서 위와 같이 적용을 시켜줘야한다.\n\n\n## 마무리\n아무리 구글링을 해도 답이 안나오길래 Github에 Nuxt content로 빌드된 페이지 레포 중에 markdown에서 수식을 지원해줄 수 있게 작업한 것들을 찾아봤다. 유일하게 한 개가 있었는데 그 레포에서는 `katex` package를 추가로 설치해서 적용해주길래 똑같이 적용시켜보았다. \n\n이럴 때 보면 확실히 Nuxt가 React에 비해 커뮤니티 활성도가 조금 낮은 듯하다. 지금은 Nuxt가 너무 익숙해져서 넘어갈 생각은 없지만 프로그래밍을 하는데에 있어 커뮤니티가 기여하는 점이 크다는 것을 알았다. \n\n적게 잡아도 5시간정도는 이 작업만 한 것 같다. 중간에 던질까 생각도 많았는데 모든 경우를 시도해보지 않으면 나중에 후회할 것 같아서 광기어린 눈으로 지구끝까지 삽질을 해보았다. 나처럼 Nuxt content에 mathtype을 적용하고자 하는 사람이 많을 것 같은데 도움이 됐으면 좋겠다.\n"},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 되돌아보는 것 자체만으로도 스스로 많은 자극이 되었기에 회고를 작성하는 습관을 들여야겠다고…","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"2022년 09월 05일 12:09","title":"2022년 상반기 회고","tags":["회고","club"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/retrospect-2022-1)에서 이전해온 글입니다.*\n\n## 들어가기전에\n이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다. \n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 되돌아보는 것 자체만으로도 스스로 많은 자극이 되었기에 회고를 작성하는 습관을 들여야겠다고 꾸준히 생각했었는데 내 마음에 들 때까지 내 페이지를 개발하는 게 우선인 것 같아서 조금 늦은 감이 없진 않지만 지금에서야 작성해보고자한다. \n\n## Google Developer Student Club CAU\n\n\n![[GDSC.svg]]\n\n\n\n### 열정적인 사람들을 만나며\n2021년 9월쯤, 우연히 학교 에브리타임에서 GDSC CAU 1기를 모집한다는 글을 보았다. 홍보글을 보았을 때 '이 동아리는 개발을 잘하는 사람만\n들어갈 수 있는 곳인가?' 라는 의문이 제일 먼저 들면서 나도 모르게 움츠러들었었다. 그런 나에게 반항심이라도 들었는지 떨어져도 본전이라는 마음으로, 한 편으로는 이 동아리를 통해 나도 개발을 잘하는 사람이라는 가치에 한 발자국 더 다가가고자 하는 마음으로 지원을 했고 운이 좋았는지는 모르겠지만 합격을 해서 1년을 열심히 활동하고 얼마전 수료식을 했다.\n\n21년도에 중앙대학교 소프트웨어학부에 입학을 하고 입학과 동시에 전부 비대면 수업을 들었던 나는 자연스레 학교 생활과는 멀어졌었고 학교 수업만 따라가고 있었다. 그러다가 처음으로 동아리라는 것을 해보고 환경의 중요성을 더욱 실감했던 것 같다. 온라인이었지만 정모에 나가고 스터디를 하고 프로젝트를 진행하면서 나와 같은 목표를 가진, 또 나와 같은 열정을 가진, 어쩌면 나보다도 더욱 큰 꿈을 가진 사람들을 만나면서 그들로부터 동기와 열정을 느끼고 나 또한 다시 내가 하고 싶었던 것들에 몰두할 수 있었다.\n\n### 나를 성장시키는 힘\n이 동아리를 통해 기술적으로 배운 것들도 많았지만 더욱 중요하게, 나라는 사람을 성장시킬 수 있는 방법을 깨달았다.\n그건 바로 **불편함에 익숙해져야한다는 것**이다. GDSC에서 나는 Flutter를 공부하고 앱 개발을 했는데 매 순간 고민의 연속이었고 기존에 내가 하던 것과는 완전 다른 느낌의 코딩이기에 쉬운 것이 하나 없었다. 이처럼 새로운 언어와 프레임워크를 접하면서 누구나 당연히 불편함을 느낄거라 생각을 한다. 하지만 그 불편함을 느끼는 과정이 학습의 동기가 되고 성장의 과정이라는 것을 배웠다. 2학년인 지금도 새롭게 배우고 접하는 것들이 많지만 앞으로도 다를 것 같지는 않아보였다. 중요한 건 그런 과정 속에서 나를 둘러싼 불편함을 받아드리고 적응하는 것임을 배울 수 있었다.\n\n또 다른 것으로는, **새로움에 주저하지 말자는 것**이다. 아무것도 모르는 1학년 학부생이 무작정 동아리에 들어가고 FE/BE 경험도 없으면서 Flutter를 시작하는 것이 누가 보기엔 살짝 무모하다 할 수 있지만 그럼에도 생각을 실천으로 옮기는 것 또한 나를 성장시키는 방법이라고 생각했다. 처음 동아리에 들어갔을 때 내가 유일한 1학년이었다. '내가 잘 따라갈 수 있을까' 걱정도 했지만 새로움에 도전하는 걸 어느순간 내가 즐기고 있음을 느꼈던 것 같다. 처음에는 쉬운 것조차 어떻게 하는지 몰라서 많이 헤매고 시도때도 없이 선배들한테 질문을 했는데 지금 생각해도 본인 일처럼 친절하게 알려준 선배들께 감사하다.\n\n## ZeroPage | 중앙대학교 소프트웨어학부 학술연구회\n\n![[ZeroPage.svg]]\n### 회장단 상반기 회고\nGDSC에서 가깝게 지낸 사람들이 대부분 중앙대학교 소프트웨어학부 학술연구회인 ZeroPage 소속이었다. 그들과 지내면서 자연스레 나도 ZeroPage에 가입을 했고 작년 하반기에 열심히 활동을 하면서 이 동아리를 이어나가고자 올해 초 회장단에 지원을 했다.\n\n회장단으로 한 학기를 보내고 되돌아봤을 때 잘한 점도 있는 것 같고 아쉬운 점도 몇몇 있는 것 같다. 우선 대면으로 조금씩 허용되면서 그동안의 행사들과 동아리 분위기를 바꾸고자 나름대로 노력을 했다. 최근에는 Devils Camp를 대면으로 진행했는데 마침 내가 그때 코로나에 걸려 못 간 게 아쉬웠다. 또한 동아리를 유지하기 위해서는 회원들을 꾸준히 모집하는 것도 중요한데 그래도 노력한만큼 동아리가 유지되고 있는 것 같아서 다행인 것 같다.\n\n최근에 후배분들 중 한 분이 동아리 회장단을 하는 게 부담스럽지 않냐고 물어봐주셨다. 30년 넘게 유지되고 있는 동아리라 초반에는 부담도 됐지만 지금은 조금이나마 편해진 것 같다. 그럼에도 불구하고 나는 그 후배분께 본인이 애정을 쏟고 싶은 곳이 있다면 회장단만큼 유대감을 크게 느낄 수 있는 방법이 몇 없을 거라고 말을 해줬다. 매주 정모를 하고 함께 스터디를 해나가면서 같이 성장해나가는 기분은 말로 설명할 수 없을 무언가가 있는 것 같다고 말이다. 아직 상반기밖에 안지났지만 여전히 하루하루 느끼는 게 많은 것 같다. 요즘 하는 생각은 '**어렵지 않은 사람이 되자**'이다. 여러 사람을 만나며 소통을 해나가는 과정 속에서 처음의 진입장벽을 허무는 게 중요한 것 같다. 그래서 앞으로는 스터디도 더 자주 개최하고 보다 활동적인 동아리를 만들려고 계획 중이다. \n\n\n## 해외인턴프로그램\n얼마 전, 여름방학에 미국 LA로 한 달간 인턴프로그램을 다녀왔다. 본 프로그램을 통해 창업이라는 개념에 벽이 조금은 허물어진 것 같고, 진지하게 교환학생에 대해서 생각을 해보았다. 다른 문화 속에서 내가 좋아하는 분야를 공부해보고 싶다. 대학원을 해외로 가는 방법도 있지만, 그건 차후에 내가 공부하고 싶은 분야를 뚜렷이 찾으면 고민해볼 것 같다. \n\n## 운동\n내 책상 바로 옆에 풀업을 할 수 있는 치닝디핑(턱걸이 기구)과 덤벨이 있다. 작년 초부터 지금까지 못해도 일주일에 3번이상 꾸준히 운동을 해오고 있는데 점점 개수가 느는 게 보인다. 책상에 앉아있는 시간이 많아질 수록 체력 또한 중요하다고 생각해서 눈에 보이면 일단 하나 당기고 본다. 앞으로는 더 바빠질 것을 대비해서 오전 시간을 최대한 활용해보고자 한다. \n\n## 앞으로의 목표\n지난 한 학기, 크게는 1년을 돌아보며 나는 다양한 사람들과 만나면서 다양한 방면으로 성장하고 있음을 느꼈다. 이렇게 회고를 하다보니 뿌듯하기도 하고 새롭게 자극받는 기분이 든다. 2학년 2학기를 시작하고 있는 지금, 전공을 5개나 듣고 있지만 또 새로운 것에 도전하고 새로운 환경에서 또 다른 사람들을 만나보고 싶다는 생각이 드는 요즘이다. 아직 정확히 무엇을 더 할지는 모르겠지만 올해 하반기에는 좀 더 많은 자극을 받으며 열심히 살고 싶다. "}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-pages-search-jsx","path":"/search/","result":{"data":{"allMarkdownRemark":{"nodes":[{"excerpt":"1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신, 하드웨어, 소프트웨어 및 데이터 등 새로운 솔루션들이 뒷받침되고 있음. 달과 같은 더 …","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"date":"2024년 09월 07일 12:09","title":"sigchi 2024 관심 주제","tags":["research"]},"rawMarkdownBody":"## [1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality](https://programs.sigchi.org/chi/2024/program/content/147838)\n\n### Intro 요약\n다시금 달에 가기 위해 인력, 통신, 하드웨어, 소프트웨어 및 데이터 등 새로운 솔루션들이 뒷받침되고 있음. 달과 같은 더 밝은 빛, 더 어두운 그림자, 감소된 중력이 있는 상황 속에서 우주인이 부피가 크고 제한적인 우주복을 입고 장애물을 탐색해야함. 이러한 독특한 상황들을 시뮬레이션 하기 위해 VR이 활용되고 있음.\n\nVR은 달의 환경 조건을 시각화하고 예상되는 시나리오를 테스트하는데 이상적인 도구이지만 시청각적 특성만 제현가능하다는 점 때문에 달을 완벽히 구현하는데 한계가 있음. \n\n**본 연구에서는 장갑과 물리적 모형을 이용해 실제와 비슷한 촉각적, 운동 감각을 구현**하고 가상 신체에 대한 구체화 감각을 향상시키려는 노력을 함.\n\n## [2. “I know I have this till my Last Breath”: Unmasking the Gaps in Chronic Obstructive Pulmonary Disease (COPD) Care in India](https://programs.sigchi.org/chi/2024/program/content/147082)\n\n### Intro 요약\n비전염성 질환(NCD: Non-communicable disease)은 전 세계 사망자의 74%를 차지함. 이러한 비전염성 질환 중 만성 호흡기 질환(CRD: Chronic Respiratory Diseases)은 사망률에 크게 기여함. 최근 20년 사이에 사망률 28.5%, 유병률 39.8% 증가. 그 중 만성 폐쇄성 폐질환(COPD: Chronic Obstructive Pulmonary Disease)은 흔하지만 진단하기가 어려워 전 세계 사망 원인 중 3위를 차지함. 세계보건기구(WHO)는 심각성을 인지하고 NCD 예방 및 관리를 위한 세계 행동 계획과 지속 가능한 개발을 UN 2030 의제에 포함 시킴.\n\n**COPD와 같은 CRD로 인한 사망의 90%는 저소득 및 중소득 국가에서 발생**. 2016년, CRD는 인도의 총 사망 및 장애 조정 생명 연수(DALY)의 10.9%와 6.4%를 차지, 이 중 CRD로 인한 총 DALY의 75.6%가 COPD에 기인. **인도의 의료 인프라에 불균형이 있기 때문**. 대기 오염이 심화되면서 인도에 상당한 사회경제적 부담이 생김. 2016년 인도에서 COPD로 인한 총 DALY 중 53.7%가 대기 오염에 기인. 병원과 병상이 인도 인구에 비해 현저히 적음.\n\nHCI 연구원들은 최근 몇 년 동안 CRD에 점점 더 관심을 보이고 있으며 디지털 건강 모니터링 및 웨어러블 장치, 원격 진료 및 원격 의료 솔루션, 행동 개입 및 게임화, 자기 관리를 포함한 CRD 치료의 다양한 측면을 다루고 있음.\n\n## [3. Evaluating ActuAir: Building Occupants' Experiences of a Shape-Changing Air Quality Display](https://programs.sigchi.org/chi/2024/program/content/146904)\n\n### Intro 요약\n건물이 점점 더 센서가 많아지고 기후 변화 압박 속에서 인식 및 웰빙 목적으로 건물 내 환경 데이터를 사용하는 데 대한 관심이 커지고 있음. 그에 비해 대형 모양 변경 디스플레이를 중심으로 한 연구에서는 거주자의 공기 질 데이터 경험에 대한 연구는 별로 없음.\n\nActuAir 시스템은 생체 모방 개념에서 영감을 받은 모듈식 맞춤형 룸 디바이더로, 팽창과 LED 애니메이션으로 AQ(Air Quality)를 표시. 이와 같은 대규모 소프트 로봇 및 모양 변경 반응형 아키텍쳐는 미래 스마트 빌딩 설계 및 HCI/HBI 연구에 기여함."},{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic & logic unit (ALU) does the operation hold the va…","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"2024년 07월 31일 15:07","title":"Representing Instructions in computer","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n\n## Common HW design for MIPS ISA\n![[HW design.jpg]]\n\n**CPU, register, and memory**\n- Control unit (CU) directs the operation of the processor\n- Arithmetic & logic unit (ALU) does the operation\n- `$0, ..., $31` hold the value that will be used in the operation (called general purpose register)\n- Program counter (PC) contains the memory address of the instruction will be executed\n- Instruction register (IR) contains the current instruction\n\n**Execution of the instruction**\n- Step 1 (fetch): CU says \"load the instruction from the memory address in PC to IR\"\n- Step 2 (decode): CU says \"the instruction stored in IR means `ADD $s0, $s1, $s2`\n- Step 2 (execute): ALU does the add operation with the values in `$s1` and `$s2` and stores the computation result in `$s0`\n## Operation\n### Arithmetic operations\n**Instructions for arithmetic**\n| Operation | C    | Java | MIPS assembly language | Example           |\n| --------- | ---- | ---- | ---------------------- | ------------------- |\n| Add       | +    | +    | `add` (R), `addi` (I)  | `add $t0, $t1, $t2` |\n| Subtract  | -    | -    | `sub` (R)              | `sub $t0, $t1, $t2` |\n\n### Logical operations\n**Instructions for bitwise manipulation**\n\n| Operation | C | Java | MIPS assembly language | Example |\n| ----------- | --- | ---- | ---------------------- | ------------------- |\n| Bitwise AND | & | & | `and`(R), `andi`(I) | `and $t0, $t1, $t2` |\n| Bitwise OR | \\| | \\| | `or` (R), `ori`(I) | `or $t0, $t1, $t2` |\n| Bitwise NOR | ~ | ~ | `nor`(R) | `nor $t0, $t1, $t2` |\n\n\nMIPS has no NOT instruction \nInstead, it has **NOR R-type** instruction\n- a NOR b == NOT (a OR b)\n- But, we can do the NOT operation with NOR: `nor $t0, $t1, $zero!`\n![[nor.jpg]]\n\n### Shift operations\n| Operation | C     | Java | MIPS assembly language | Example |\n| :----------- | :---- | :---- | :--------------------- | :----------------------------------- |\n| Shift left   | <<   | <<<   | `sll` (R) | `sll $s1, $s2, 10 ($s1 = $s2 << 10)` |\n| Shift right | >>   | >>>   | `srl` (R) | `srl $s1, $s2, 10 ($s1 = $s2 >> 10)` |\n\n![[shift operation.jpg]]\n- shamt: how many positions to shift\n- Shift left/right logical (sll / srl)\n\t- Shift left/right and fill with 0 bits\n\t- (unsigned only) sll with i bits = multiply by $2^i$\n\t- (unsigned only) srl with i bits = divide by $2^i$\n\n\n### Conditional operations\n\n| Operation | MIPS assembly language | Example |\n| -------------------- | ---------------------- | ------------------------------------------------- |\n| Conditional branch | `beq`(I) | `beq $t0, $t1, LABEL` (if $t0 == $t1, goto LABEL) |\n| | `bne`(I) | `bne $t0, $t1, LABEL` (if $t0 != $t1, goto LABEL) |\n| Unconditional branch | `j`(I) | `j LABEL` (goto LABEL) |\n\n\n![[bne.jpg]]\n![[j-format.jpg]]\n\n**Instructions for making decisions** \nUsually combined with goto statements and labels \nthere are no branch instructions like blt (less than) and bge (greater than or equal to)\n\n\n**Why?** \n- Handling <, >, <=, >=, ... is slower and more complicate than =, !=\n- It will cause increase of instruction count and clock period or CPI\n\n**Instead, MIPS provides others** \n\n| operation | MIPS assembly language | Example |\n| ---------------- | ---------------------- | ---------------------------------------------------------- |\n| Set on less than | slt(R), slti(I) | slt $t0, $t1, $t2 (if $t1 < $t2, $t0 = 1; else $t0 = 0) |\n\n\n**slt is used in combination with beq and bne**\n```\nslt $t0, $t1, $t2\nbne $t0, $zero, LABEL\nbeq $t0, $zero, LABEL\n```"},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to encode instructions and data in well-formed binary. D…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 31일 15:07","title":"Design principles 4 of MIPS ISA","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n\nThe assembly language that has been studied so far is not a form that the processor can understand. \n\nTherefore, we need to **encode instructions and data in well-formed binary.**\n\n## Data representation\n\n### numbers\n- Numbers are kept in computer hardware as a series of 1 and 0\n- They are considered base 2 numbers (binary numbers)\n- Binary numbers are stored in words\n- In MIPS, the words are 34 bits (4 bytes) long + MIPS is big endian\n### unsigned numbers\n- By using n bits, we can represent unsigned numbers from 0 to $2^n-1$\n### signed numbers\n#### Signed Magnitude\n- first bit determines mathematical symbols\n\t- 0 is plus (+)\n\t- 1 is minus (-)\n- others are bit size\n- but, 000 = 100 = 0\n#### One's complement\n- first bit determines mathematical symbols\n\t- 0 is plus (+)\n\t- 1 is minus (-)\n- if first bit is 0\n\t- read it as it is\n- if first bit is 1\n\t- flip 1 to 0, 0 to 1\n- ex) 100 = -3\n- but, 000 = 111 = 0\n#### Two's complement\n- first bit determines mathematical symbols\n\t- 0 is plus (+)\n\t- 1 is minus (-)\n- if first bit is 0\n\t- read it as it is\n- if first bit is 1\n\t- flip 1 to 0, 0 to 1\n\t- plus 1\n- ex) 100 = -4\n- the number of zero is 1\n### Answer\n**two's complement**  \n- we can get the computation result by just doing given arithmetic operations\n    - 000 - 001 = 111 ( 0 - 1 = -1)\n    - 010 + 111 = 001 (2 + (-1) = 1)\n- the number of zero is only 1.\n- by using n bits, we can represent signed numbers from $-2^{n-1}$ to $2^{n-1}-1$\n#### Signed extension\nSometimes, we need to represent n-bit numbers by using more than n bits\n- 16-bit immediate should be converted to 32 bits for arithmetic\n- Instructions `lb/lh` loads byte/halfword from memory space and store it into 32-bit registers\n- Replicate the sign bit to the left\n ![[signed extension.jpg]]\n## Instruction representation\n**Like data, instructions are also encoded/represented in binary**\nWe call the encoded instructions as **machine instructions**\n\nFor representing instructions, ISA defines instruction format\nIssue: to represent all kinds of instructions, we might need many instrucion formants\n## Design principle 4\n### Good design demands good compromise\nBased on this, MIPS keeps formats as similar as possible (regularity)\n### R-format\nFor the instructions that use only Register operands\n![[r-format.jpg]]\n- `op` (opcode): basic operation of the instruction (what the instruction does)\n- `rs`: the first source register operand\n- `rt`: the second source register operand\n- `rd`: the destination register operand\n- `shamt`: shift amount (used for shift operations)\n- `funct`: function code (the specific variant of the operation)\n>Q. why are the rs, rt, rd 5 bits? \n>\n>A. registers are 32, which means 5 bits are enough to express each register\n\n### I-format\nFor the instructions that use Immediate operands\n![[i-format.jpg]]\n- `op` (opcode): basic operation of the instruction (what the instruction does)\n- `rs`: the first source register operand\n- `rt`: the second source register operand\n- `Constant or address`\n## Summary\nKey underlying design principles\n### Design Principle 1\n#### Simplicity favors regularity\nAll MIPS arithmetic instructions include a single operation & three operands\n- Lower clock period or CPI\n\n## Design Principle 2\n#### Smaller is faster\nOperands of MIPS arithmetic instructions must be chosen in a small number of registers.\nMIPS keeps more complex data in memory and supports data transfer between memory and registers.\n- Lower clock period or CPI\n### Design Principle 3\n#### Make the common case fast\nSupport 16-bit immediate operands for handling small constants + `$zero`\n- Lower Instruction count\n### Design Principle 4\n#### Good design demands goog compromise\nKeep all instructions the same length + keep instruction formats similar as possible. \nData (numbers) are also represented in binary based on two's complement rules.\n- Lower clock period or CPI"},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favors regularity Smaller is faster Make the common ca…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 22일 16:07","title":"Design principles 1~3 of MIPS ISA","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n## MIPS ISA\n### What is MIPS ISA\n- Microprocessor without Interlocked Pipelined Stages\n- A kind of ISA\n\n### Design principles\n1. **Simplicity favors regularity**\n2. **Smaller is faster**\n3. **Make the common case fast**\n\n## Design Principle 1\n### Simplicity favors regularity\n- **Regularity**: all MIPS arithmetic instructions include **a single operation & three operands** \n- Regularity makes implementation simpler \n- Simplicity enables higher performance at lower cost\n\n### Examples\n- add a, b, c\n\t- $a = b + c$\n- sub a, a, d\n\t- $a = a - d$\n\n## Design Principle 2\n### Smaller is faster\n- Operands of MIPS arithmetic instructions must be chosen in **a small number of registers**\n- **Register**: Fast locations for data\n- 32 32-bit registers in MIPS\n- 32 is $2^5$ that can be represented by using 5 bits![[registers.jpg]]\n\n## Practice 1\n**C code:**\n```c\nf = (g + h) - (i + j)\n```\n**Compiled MIPS assembly language code:**\n```\nadd $t0, $s1, $s2\nadd $t1, $s3, $s4\nsub $s0, $t0, $t1\n```\n\n## Memory instruction\n### Memory organization\nkeep a small amount data in **registers** and other remaining, complex data in **memory**\n- **Load** values from memory into registers\n- **Store** results from registers to memory\n### Address\nA memory address is an index to the memory array, starting at 0 \nMIPS uses byte addressing (Each address identifies an 8-bit byte)\n\n**But**, most data items are larger than a byte. So, they use \"**words**\" \n- In MIPS, a ward is 32 bits\n- Registers also hold 32-bit of data\n#### Alignment restrictions\n\n- The start address of each data should be multiple of N, where N is the size of the data\n- In MIPS, words must start at a addresses that are multiples of 4\n- Some data items use one or two bytes (halfword)\n#### Byte ordering\n- Big endian(**MIPS**): place the most significant byte first and the least significant byte last\n- Little endian: place the least significant byte first and the most significant byte last  \n### Load/Store\n- **lw reg1 offset(reg2)**: Load 32-bit word from the memory address reg2 + offset into reg1\n- **sw reg1 offset(reg2)**: Store 32-bit word in reg1 at the memory address reg2 + offset\n- **lh/sh** and **lb/sb** instructions load/store halfwords and 8-bit of data\n\n## Practice 2\n**C code:**\n```c\ng = h + A[8]\n```\n- A is an array of 4-bytes words\n- The value of g and h are in `$s1` and `$s2`\n- The base address of A is in `$s3`\n\n**Compiled MIPS assembly language code:**\n```\nlw $t0, 32($s3)\nadd $s1, $s2, $t0\n```\n\n## Practice 2\n**C code:**\n```c\nA[12] = h+ A[8]\n```\n- A is an array of 4-bytes words\n- The value of h is in `$s2`\n- The base address of A is in `$s3`\n\n**Compiled MIPS assembly language code:**\n```\nlw $t0, 32($s3)\nadd $t0, $s2, $t0\nsw $t0, 48($s3)\n```\n\n## Practice 3\n**C code:**\n```c\nf = (g + h) - (i + j)\n```\n- f, g, and h are in `$s0`, `$s1`, and `$2` respectively\n- Halfwords i and j are sequentially stored in memory\n- The start address of i is stored in `$s3`\n\n**Compiled MIPS assembly language code:**\n```\nadd $t0, $s1, $s2\nlh $t1, 0($s3)\nlh $t2, 2($s3)\nadd $t3, $t1, $t2\nsub $s2, $t0, $t3\n```\n\n## Design Principle 3\n### Make the common case fast\n**Common case :** a program uses a small constant in an operation many times \n\n**Solution: support** \n- **16-bit immediate operands** for handling the constants\n\t- no need to access memory to load the constants\n\t- `addi $t0, $t0, 4` : addi is an add immediate instruction\n\n- **MIPS register 0 (`$zero`)** contains the constant 0\n\t- `add $t0, $t1, $zero` : move values between two registers `$t0` and `t1`\n\n## Practice 4\n**C code:**\n```c\nf = A[10] - i + 4\n```\n- `A` is an array of bytes and its base address is stored in `$s0`\n- `f` and `i` are stored in `$s1` and `$s2` respectively\n\n**Compiled MIPS assembly language code:**\n```\nlb $t0, 10($s0)\nsub $t1, $t0, $s2\naddi $s1, $t1, 4\n```\n \n\n## Summary: MIPS ISA\n\n### Key underlying design principles\n\n- Design principle 1. Simplicity favors regularity\n\t- All MIPS arithmetic instructions include a single operation & three operands\n- Design principle 2. Smaller is faster\n\t- Operands of MIPS arithmetic instructions must be chosen in a small number of registers\n\t- MIPS keeps more complex data in memory and supports data transfer between memory and registers\n- Design principle 3. Make the common case faster\n\t- Support 16-bit immediate operands for handling small constants + `$zero`\n"},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic operation Clock rate (frequency): How many basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","title":"Measuring Performance","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n## Measuring CPU performance\n- Clock period: the duration of a clock cycle\n\t- How long the computer takes to perform a single basic operation\n- Clock rate (frequency): $cycles\\;per\\;second = \\frac{1}{clock\\;period}$\n\t- How many basic operations can be performed in a second\n$$\n\nCPU\\;time = Clock\\;cycles \\times Clock\\;period \\\\ = Clock\\;cycles \\times \\frac{1}{Clock\\;rate}\n\n$$\n### What is CPI?\n**Clock Cycles per instruction**\n: Average number of clock cycles per instruction for a program or program fragment \n$$\n\nCPU\\;time = Clock\\;cycles \\times \\frac{1}{Clock\\;rate} \\\\= Instruction\\;count \\times CPI \\times \\frac{1}{Clock\\;rate}\n\n$$\n**CPI** can be affected by\n1) Cost for each instruction type: $CPI_i$\n2) The frequency of each type of instructions: $F_i = \\frac{Instruction\\;count_i}{Instruction\\;count}$\n$$\n\n\\displaystyle CPI = \\sum_{i=1}^{n}{CPI_i \\times F_i}\n\n$$\n\n## More about\n### Benchmark\n: **a tool for measuring the performance of computers**\n- Metric: **Geometric Mean**\n$$\n\n Performance = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{Execution\\;time\\;ratio_i}}} \\\\ = \\frac{1}{\\sqrt[n]{\\prod_{i=1}^{n}{\\frac{Execution\\;time_{X,i}}{Execution\\;time_{REF,i}}}}} \n \\\\ = \\sqrt[n]{\\textstyle \\prod_{i=1}^{n}{\\frac{Execution\\;time_{REF,i}}{Execution\\;time_{X,i}}}}\n\n$$\n\n### Amdahl's law\n$Execution\\;time\\;after\\;improvement$ \n\n$= \\frac{Execution\\;time\\;affected\\;by\\;improvement}{Amount\\;of\\;improvement} + Execution\\;time\\;unaffected$\n\n"},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to single task e.g., how long it takes to do a single …","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","title":"Defining Performance","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n## Two metrics for defining computer performances\n1. Response time\n\t- The time between the start and completion of a task\n\t- related to single task\n\t- e.g., how long it takes to do a single task\n1. Throughput\n\t- A total amount of works done per unit time\n\t- related to multiple tasks\n\t- e.g., tasks per hour\n  \n\n**Q. If we replace the processor in a computer with ad faster version**\n- Response time **decrease**\n- Throughput **increase**\n\n**Q. If we add more processors to a system**\n- Response time **maintain or increase** (more lanes more complex)\n- Throughput **increase**\n\n## Defining performance\n\n- $Performance = \\frac{1}{execution\\;time\\,(reponse\\;time)}$\n- Relative performance: **X is N time faster than Y**\n- $\\frac{Performance_x}{Performance_y} = \\frac{Execution time_y}{Execution time_x} = N$\n\n![[performance.jpg]]\n\n- Elapsed time = system performance = **t1 + t2 + t3 + t4**\n\t- total time between the start and completion of a task, **including everything**\n- CPU time = CPU performance = **t1 + t4** *(Only this in this class)*\n\t- The time spent **processing** a given task **on a processor**\n\n$$\nPerformance = CPU\\;performance = \\frac{1}{CPU\\;time}\n$$\n\nThe CPU time can be further divided into\n- **User CPU time**\n\t- spent for processing the code of the program (some functions)\n- **System CPU time**\n\t- spent in the operating system performing tasks for the program (OS)"},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems software Compilers: translate high-level language to…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"2024년 07월 22일 14:07","title":"CA Overview","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"contents: [[0-1. CA Intro]]\n### Below your program\n\nA simplified view of hardware and software\n- **Applications software**\n\t- Written in high-level language\n- **Systems software**\n\t- **Compilers**: translate high-level language to machine language\n\t- **Operating Systems**\n\t\t- Handle input/output operations\n\t\t- Manage resources (e.g., storage, memory)\n\t\t- Schedule tasks (processes)\n- **Hardware**\n    - processors memory, I/O devices\n    \n\n## Execution of programs\n### Step 1: Translating language\n- From high-level language\n\t- Designed for specific domain\n\t- Provides for productivity and portability\n- To hardware machine language\n\t- Binary digits\n\t- Encoded instructions\n\n### Step 2: Inputting, outputting, processing, and storing data\n**4 Fundamental HW components**\n- Processor\n\t- Datapath + control, our primary focus\n- Memory\n- Input device\n\t- Keyboard, mouse, ...\n- Output device\n\t- Screen, speaker\n\n**8 STEPS**\n1) Loading: programs are stored in memory\n2) Inputting: input device write data to memory\n3) Fetching: processor fetches instructions and data from memory\n4) Decoding: processor (control) decodes the instructions and determine what to do\n5) Executing : processor (datapath) executes the instructions & stores the computation result to memory\n6) Outputting: output device sends the result by reading output data from memory\n\n## Understanding program performance\n\n- Algorithm\n\t- Determines the number of operations executed\n- Programming language, compiler, and instruction set architecture (ISA)\n\t- Determine the number of machine instructions executed per operation\n- Processor and memory system\n\t- Determine how fast instructions can be executed\n- I/O system (including OS)\n\t- Determines how fast I/O operations are executed\n\n## What is ISA (Instruction Set Architecture)\n- An interface between SW snd HW (includes a set of machine instruction)\n\t- SW is translated into the machine instructions included in the ISA\n\t- HW is designed to support the instructions in ISA\n\n## 8 great ideas for designing better computer architecture\n- Design for **Moore's Law**\n\t- Anticipate where the technology will be when the design finishes\n- Provide **abstraction** to simplify design\n\t- Hide low-level details for the ease of SW development\n- Make **the common case** fast\n\t- Enhance performance of the common case instead of optimizing the rare case.\n- Perform via **parallelism**\n\t- Perform operations in parallel\n- Performance via **pipelining**\n\t- Use a particular patten of parallelism, called pipelining\n- Performance via **prediction**\n\t- Start working with prediction, stead of waiting until you know for sure\n- **Hierarchy** of memories\n\t- Use the fastest, smallest, and most expensive memory at the top of the hierarchy and the slowest, largest, and cheapest memory at the bottom\n\t- cache > RAM > Large SSD\n- Dependability via **redundancy**\n\t- Include redundant components that can take over when failure occurs"},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites C 프로그래밍, 논리회로, 어셈블리어를 알면 더욱 좋습니다. Textbooks 본 페이지…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"2024년 07월 22일 12:07","title":"Computer Architecture Intro","tags":["study","컴퓨터구조"]},"rawMarkdownBody":"## Course Description\n\n본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. \n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다.\n\n## Prerequisites and Co-requisites\n\nC 프로그래밍, 논리회로, 어셈블리어를 알면 더욱 좋습니다.\n\n## Textbooks\n\n본 페이지에 작성될 내용의 기반은 아래의 책에 있습니다.\n![[computer-architecture-textbook.jpg]]Computer Organization and Design 5th Edition (Asian Edition)\n\n## Course Schedule\n- 0. Intro\n\t- [[0-1. CA Intro]]\n\t- [[0-2. CA Overview]]\n- 1. Computer Abstractions and Technology\n\t- [[1-1. Defining Performance]]\n\t- [[1-2. Measuring Performance]]\n- 2. Instructions: Language of the Computer\n\t- [[2-1. Designing principles 1~3 of MIPS ISA]]\n\t- [[2-2. Design principles 4 of MIPS ISA]]\n\t- [[2-3. Representing Instructions in computer]]\n\t- [[2-4. Supporting procedures in computer hardware]]\n\t- [[2-5. MIPS memory allocation & addressing]]\n- 3. Arithmetic for Computers\n\t- [[3-1. Addition and Subtraction]]\n\t- [[3-2. Multiplication]]\n\t- [[3-3. Division]]\n- 4. The Processor\n\t- [[4-1. Processor Overview]]\n\t- [[4-2. Controlling a datapath]]\n\t- [[4-3. A single-cycle datapath]]\n\t- [[4-4. Pipelining overview]]\n\t- [[4-5. Handling hazards]]\n\t- [[4-6. Exceptions]]\n- 5. Memory Hierarchy\n\t- [[5-1. Cache overview]]\n\t- [[5-2. Improving cache performance]]\n\t- [[5-3. Vitual memory Part 1]]\n\t- [[5-4. Vitual memory Part 2]]\n"},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상태인데 엇복학은 힘들 것 같아서 내년에 복학할 예정이고 대신 학부연구생은 하반기부터 진행할…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"2024년 07월 20일 20:07","title":"2024년 상반기 회고","tags":["회고"]},"rawMarkdownBody":"지난 회고: [[retrospect-2023]]\n\n어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상태인데 엇복학은 힘들 것 같아서 내년에 복학할 예정이고 대신 학부연구생은 하반기부터 진행할 예정이다.\n\n우선 이번 반기 목표는 아래와 같다.\n> - 운동 꾸준히 하기 (체중80 골격근량43 목표)\n> - 코테 준비하기\n> - 좋아하는 분야 찾기\n> - 일찍 자고 일찍 일어나기 \n\n\n## 운동 꾸준히 하기\n입대 후부터 지금까지 습관처럼 운동을 해오고 있는데 이제는 안하면 스트레스를 받는 정도인 것 같다. 좋은 건지, 안 좋은 건지는 모르겠지만 점점 욕심도 생기고 변해가는 모습이 마음에 든다. \n\n지금은 학교도 안다니고 약속도 정해진 게 없어서 운동을 오전에 해치우고 있는데 학부연구생을 시작하거나 복학하고 나서는 언제 운동을 가야할 지 모르겠다. 운동하는 직장인분들 보면 저녁 늦게 오시는 것 같던데 다들 일정 다 끝내고 힘든 와중에 어떻게들 하는지... 대단한 것 같다.\n![[inbody.jpg]]\n위 사진이 6월말 인바디 결과다. 예전에 비해서는 체중도 많이 늘고 골격근량도 증가해서 진짜 좋아진 편인데 하다보니 욕심이 생겨서... 올해 안으로 체중 80kg, 골격근량 43kg 만드는 게 목표다. 체지방도 많이 필요해보이긴 하는데 그렇다고 지금 복근이 선명하게 보일정도로 마르지도 않아서 더 찌워도 되나... 하는 생각이 든다. 근데 찌우고 싶어도 살이 찌지는 않더라..\n\n지금은 4분할 운동하고 하루 또는 상황이 여의치 않으면 이틀 쉬어주고 있는데 하반기에도 유지하는 게 목표다. 꾸준히 하자!\n\n## 코딩테스트 준비\n군복무를 하면서 코테 준비만큼은 목표를 달성하지 못한 것 같다. 지금 상태는 어떤 알고리즘을 써야하는지 보면 어찌저찌 풀 수 있는 정도인데 그 알고리즘 마저도 온전히 내 걸로 만들지도 못했다. 아직 많이 부족한 분야라고 생각이 들고 그만큼 내가 그동안 피해왔던 분야라고 생각이 든다. \n\n어떤 종류의 알고리즘을 써야하는지 안보면서 푸는 연습, 푸는 방식을 정했으면 스스로 구현하는 연습을 처음부터 기초를 다진다는 생각으로 해야할 것 같고 공부 과정을 여기에 잘 남기도록 해야겠다/ \n\n## 좋아하는 분야 찾기 (미래 계획)\n학부연구생을 하는 것도 이 목표의 일환이기도 한데, 난 내가 생각했을 때 아직은 어떤 분야를 깊게 알고싶은지 모르는 것 같다. 관심사도 계절 바뀌듯이 바뀌어서 넓고 얕은 지식 상태를 유지하고 있는 상황이다. 최근엔 HCI (Human Computer Interactions)에 관심이 생겼다. 그래서 [중앙대 김효수 교수님 연구실](https://sites.google.com/view/hcslab-cau/home?authuser=0)에서 학부연구생을 하기로 했고, 아직은 그곳에서 내가 무엇을 할지는 모르겠지만 내 바람은 연구 분위기도 경험해보면서 내가 선택한 분야가 나와 과연 잘 맞는가, 내가 계속 호기심을 갖고 접근하는가, 이런 일련의 과정들을 계속 해갈 수 있을지에 대한 답을 찾아가고 싶다.\n\n주변에 학교를 졸업하는 사람이 하나 둘 생기면서 과연 난 학사 졸업 후에 무엇을 할 지에 대한 막연한 고민들이 생기기 시작했다. 대학원을 가고 싶은지, 취업을 하고 싶은지, 창업을 하고 싶은지 아무것도 모르는 상태다. 고등학생 때는 당연히 대입이라는 어떻게 보면 정해진 미래 덕분에, 혹은 아직은 미성년자라는 것 때문에 미래에 대한 고민들이 없었지만 대학생이라는 신분은 좀 애매한 것 같다. 법적상 성인이긴 하지만 과연 그만큼의 책임감을 우리가 느끼고 있느냐, 난 개인적으론 아닌 것 같다. 아직은 철 없다고 느끼는 순간도 많고 애처럼 책임을 회피하는 순간들이 종종 있는데, 남은 반기동안에는 졸업 후의 모습에 대해서, 내가 진짜 하고 싶은게 무엇인지 고민할 수 있는 시간을 많이 가져야겠다고 생각이 든다.\n\n## 일찍 자고 일찍 일어나기\n전역 후에 자연스럽게 늦게 자고 늦게 일어나는... 입대 전 생활로 돌아가고 있다. 그렇다고 새벽까지 생산적인 일을 하는 것도 아니라서 온전히 활용하는 시간이 적다. 오전 시간을 활용하려고 하고 있고 지금도 일찍 자고 일찍 일어나서 운동을 가는 루틴을 습관화하려고 하는데 유지하자. \n\n## 마무리하며\n지나고나서야 군대에 있는 1년 반이 짧게 느껴지는 것 같다. 그동안 못해왔던 공부를 다시 할 생각에 막막하기도 하고 기대도 되는 시점인데 절반도 안남은 24년을 후회없이 보내고 싶다. 전에도 쓴 것 같은데 기록의 중요성을 다시 한 번 느끼면서 하반기에는 공부 뿐이 아니라 여러 활동들, 생각들을 적으려고 노력해봐야겠다. "},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다. 생산성 내가 원한 건 생산성 딱 하나였…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"2024년 01월 10일 13:01","title":"기존 블로그 대신 Obsidian을 택한 이유","tags":["obsidian"]},"rawMarkdownBody":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다.\n## 생산성\n내가 원한 건 생산성 딱 하나였다. 블로깅을 하는 유일한 목적이 결국은 스쳐지나가는 생각들을 메모해두기 위함인데 기존에 사용하던 [Nuxt로 개발된 블로그](https://github.com/theminjunchoi/ex-blog)는 생산성 측면에서 부족했던 것 같다. 글 하나를 쓰기 위해 노트북을 열어야했고 괜히 나도 있어보이는 글을 쓰기 위해 억지로 분량을 늘리고 이쁜 문장들을 찾았다. 공부 내용을 기록할 때도 학습에 초점을 둔 기록이기보단 정리에 초점을 둔 기록들 투성이었다. 지금 생각해보면 모든 요소 하나하나가 너무 많은 시간을 잡아먹는 것 같았다. 그러던 와중에 obsidian을 발견했다.\n## 현재 블로그\n### obsidian\n세컨드브레인이라는 책을 읽다가 obsidian이라는 툴을 알게 됐다. 글과 글 사이에 관계를 나타내기 좋아서 사용하기 시작했는데 여러 플러그인들도 많아서 내가 사용하는 용도에 맞게 커스텀하기 좋은 것 같다. 플러그인은 아래의 것들을 사용하고 있다.\n- Omnisearch\n- Templater\n- Update time on edit\n- Outliner\n- Checklist\n- Calendar\n- MindMap\n- Obsidian git\n### Gatsby\n기존 블로그는 Nuxt로 개발된 정적 웹페이지였다. Nuxt에서 Gatsby로 넘어간 이유는 2가지다.\n\n첫째는 원래 사용하던 블로그는 Nuxt2로 개발되었는데 내가 군대를 간 사이에 Nuxt3가 나왔다. 처음에는 마이그레이션을 해보려고 해봤는데 생각만큼 그리 단순하지 않았다. 가장 큰 문제는 아래에서도 간단하게 언급하겠지만 Nuxt가 버전업이 되면서 이를 지원하던 노드 모듈들도 이에 맞게 수정이 되어야하는데 vue 생태계가 그렇게 반응이 빠르지 않았다. 그래서 내가 마이그레이션을 해도 기존에 쓰던 기능들을 못 쓰게 되고 내가 노드 모듈을 직접 건드려보기도 했는데 도저히 휴가 때 할 수 있는 양이 아니었다.\n\n두 번째 이유는 단순히 vue 기반의 프레임워크랑 react 기반의 프레임워크를 비교해보고 싶었다. 여러 프레임워크를 쓰면서 나한테 맞고 편한 프레임워크를 찾아보고 싶었고 얼마나 많이 다른지 단순 호기심에서 시작했다. 좀 더 써봐야 알겠지만 프레임워크를 지원하는 생태계는 역시 vue보단 react가 좀 더 좋은 것 같다. 지원하는 노드 모듈들이 많은 것도 틀린 말은 아닌데 그것보다는 프레임워크의 버전업을 노드 모듈들이 빠르게 반응해서 맞춰주는 건 react가 더 편한 것 같다. 사실 차이가 그렇게 크지는 않겠지만 그래도 아직 익숙한 건 아직까지 vue인 것 같다. \n### 동기화: Working Copy\nobsidian에서 obsidian sync라는 기능으로 유료 구독제를 결제하면 여러 기기간의 동기화를 지원해주고 있다. 하지만 나는 Working copy라는 어플로 노트북과 아이패드, 아이폰을 동기화 해주고 있다. 결국은 Github로 동기화를 해주고 있는 건데 조금은 불편할지라도 내가 원할 때 커밋을 올리고 버전관리가 더 쉬울 것 같아서 이렇게 사용하고 있다."},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 생각을 가지고 살았는지, 전역 후에 내가 어떤 목표를 가지고 살아야하는지 한 번쯤은 정리해…","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"2024년 01월 08일 12:01","title":"2023년 회고","tags":["회고"]},"rawMarkdownBody":"지난 회고: [[retrospect-2022-2]]\n\n이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 생각을 가지고 살았는지, 전역 후에 내가 어떤 목표를 가지고 살아야하는지 한 번쯤은 정리해보려고 늦었지만 휴가를 나와서 23년 회고를 작성하기로 했다.\n## 2023년 과연 난 뭘 했을까?\n사실 한 게 별로 없다. 머리 밀고 훈련소 들어가서 열심히 훈련받고, 자대 배치받고, 흘러가는 시간에 몸을 맡긴 채 하루하루를 녹이고 있는 날들의 연속이었다. 그래도 그 속에서 1년 반이라는 시간이 내 20대의 공백으로만 남는 건 허락하지 못하기에 이거저거 시도를 해봤다.\n### 독서\n사실 난 책과는 그리 친한 편은 아닌데, 훈련소를 들어가면 쉬는 시간에 너무나도 할 게 없었다. 그래서 진중문고에 올라와있던 책을 한 두권씩 읽었는데 난 책이 그렇게 재밌다는 걸 훈련소에서 알았다. 그렇게 훈련소에서 한 두권 읽다가 자대 배치를 받고 핸드폰이라는 신문물을 발견해서 초반에는 열심히 밀린 핸드폰을 하다가 그거마저 지쳐버려서 다시 또 책을 읽기 시작했다. 당직을 서야할 때나 주말에도 꽤 많이 읽었는데 지금 다시 생각하면 막상 기억에 남는 건 몇 개 없는 것 같다.\n- 우리는 모두 각자의 별에서 빛난다 - 이광형\n- 세컨드브레인 - 티아고포르테\n다음 휴가 때는 이 2권이라도 책 리뷰를 써볼까한다.\n### 운동\n요즘은 운동을 안하면 불안할 정도로 습관이 된 것 같다. 주변 형들이 군대를 다녀오면 남는 건 군적금과 몸밖에 없다고 하길래 시작했는데 여러모로 군생활을 버티게끔 해준 유일한 취미생활이 된 것 같다. 군생활에 현타가 올 때마다 운동하다보니 재미도 붙어서 주 5회 1시간 이상씩 꾸준히 하고 있다. 전역 후에도 유지할 수 있도록 해야겠다.\n### 코딩\n난 내가 군대에서도 코딩을 할 줄 알았다. 어떻게든 꾸역꾸역 할 줄 알았는데 지금 막상 돌아보면 별로 못한 것 같다. pc가 4대 밖에 없는 사지방에서 차가운 손 녹여가며 해봤는데 집중도 안되고 군e러닝도 하다보니까 당장 눈 앞에 놓인 학점 따기 바빴던 것 같다. 남은 기간 동안에는 군e러닝도 안들으니까 적어도 코테준비를 해야겠다.\n### 군e러닝\n군복무를 하면서 군e러닝을 들을 수 있다. 각 학교에서 군 휴학생을 위해 몇몇 강의들을 개설해주는데 나는 23-1에는 **소비의문화와역사**, 23-2에는 그 놈의 **실용한자**를 수강했다. 타 학교에 비해 중앙대가 개설해주는 강의가 별로 없어서 아쉽긴 했지만 실용한자가 군e러닝으로 들을 수 있어서 다행이었다. 아직 실용한자를 수강하지 않은 중대 미필분들은 군대에서 끝내버리세요 :)\n\n생각보다 뺏기는 시간도 많았고 시험에, 과제에 준비해야할 것들은 군 휴학생이라고 배려해주는 건 별로 없지만 그래도 무의미하게 군생활을 보내지 않고 학점이라도 채운 것 같다.\n### 창업아이디어경진대회\n23년 2월, 8월 2번에 걸쳐서 창업아이디어경진대회에 나갔다. 물론 포상휴가에 눈이 멀어 나갔지만 그래도 반복되는 군생활 가운데 새로운 바람을 불어넣어준 활동이었다. 2월에는 본선에서 떨어져서 8월에 좀 더 열심히 준비해서 다시 도전했다. 이 활동이 어떤 지식의 도약을 일으켜 준 건 아니었지만 지금 생각해보면 군복무하면서 이거저거 시도해보면서 바쁘게 생활한 것 같아서 뿌듯하다.\n\n![[presentation.png]]\n## 2024년 목표\n군대에 있으면서 '개발자로서 나' 라는 부분에 대해 생각을 많이 해오고 있다. 혼자 고민할 수 있는 시간이 많다보니 이런저런 생각을 하곤 하는데 요즘 난 나라는 개발자가 뭘 좋아하는지, 무엇을 잘하고 어떤 일을 할 때 행복해하는지 고민을 하고 있는 것 같다.\n\n사실 내가 스스로를 개발자라고 칭할 수 있나? 라는 생각이 들기도 한다. 아직 내 이름을 걸고 보여줄 수 있는 프로젝트도 없고 이룬 게 별로 없는 것 같아서 조바심도 나고 얼른 다시 학교로 가고 싶다는 생각이 든다.\n\n그래서 2024년의 목표는 커리어 성장과 가치 높이기다. 내년이면 올해보다 회고할 게 많은 내가 되면 좋겠다. 그때까지 옵시디언으로 꾸준히 기록을 해나가면서 유의미한 한 해를 보내고 싶다.\n\n이렇게 보니 군생활하면서 후회하지 않을 정도로 열심히 산 것 같다. 내년 이맘때도 1년 동안 정말 열심히 살았구나라는 생각을 할 수 있길 바라며 23년 회고와 24년 목표를 기록해본다.\n"},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에, 지난 9월에 작성했던 상반기 회고를 다시 읽어봤다. 내가 무슨 생각을 해왔었는지, 하반기…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"2022년 12월 23일 12:12","title":"2022년 하반기 회고","tags":["회고"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/retrospect-2022-2)에서 이전해온 글입니다.*\n\n지난 회고: [[retrospect-2022-1]]\n\n## 들어가기 전에\n어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에, 지난 9월에 작성했던 [상반기 회고](https://minjun.blog/retrospect-2022-1)를 다시 읽어봤다. 내가 무슨 생각을 해왔었는지, 하반기에 새운 목표들은 잘 이루었는지 확인해봤다. 다 읽고 가장 먼저 생각이 든 건, **내 사고의 기록은 더 구체적으로, 목표는 더더욱 구체적으로 적어야겠다는 것이**었다. 나름 한 학기 동안 내가 느꼈던 것들을 자세히 적었다고 생각했는데 지금 다시 보니 그 순간의 기억을 다시 불러내기엔 조금 부족한 것 같다. 이번 회고는 보다 더 다양한 내 기억들을 저장하고자 한다.\n\n## 학교 수업\n이번 학기엔 전공 수업이 5개였다. 컴퓨터구조, 컴퓨터통신, 객체지향프로그래밍, 오토마타와 형식언어, 데이터베이스설계, 이렇게 총 5개를 들었다. 생각보다 전공 수업을 5개나 듣는 건 쉬운 일이 아니었다. 강의 자체를 오프라인으로 오랜시간동안 듣는 게 너무도 오랜만이었기 때문에 학기 초에는 몸이 적응하기 힘들었었다. 그럼에도 난 시간을 쪼개면 내 개인 개발 공부를 할 수 있는 시간이 있을거라고 생각했는데 학교 수업을 너무 재밌있게 들어서 그런지 그 둘을 병행하기엔 물리적으로 불가능했었다. \n\n![[Computer-Architecture.jpg]]\n\n\n특히 컴퓨터구조와 컴퓨터통신 과목을 배우면서 검은색화면 뒤로, 우리 눈에 보이지 않는 방식으로 일어나고 있는 일들을 얕게나마 알아가는 과정이 흥미로웠다. 컴퓨터구조를 공부하면서 수업 자료 이외에도 원서도 많이 읽었는데, 학교 강의에서는 다뤄주지 않는 내용들도 궁금해하고 찾아보면서 잠시나마 대학원에 가면 어떨까.. 하는 생각을 했다. 나도 저런 책을 쓸 만큼의 연구를 해보고 싶기도 했고, 책을 읽으면서 나라면 이런 문제를 다르게 접근하지 않았을까.. 혹은 더 효율적인 뱡향으로 풀 수 있지 않을까.. 하는 건방진 생각을 하기도 했다.\n\n## ZeroPage\n\n![[zp-angelscamp-site.jpg]]\n![[zp-지금그때-site.jpg]]\n\n\nZeroPage의 모든 굵지막한 행사들이 끝이 났다. 엔젤스캠프, 지금그때를 진행했고, 1월 초에 다같이 기년회를 할 예정이다. 그때가서도 말할 예정이지만, 나에게 ZeroPage는 가장 자극을 많이 받을 수 있는 곳이었다. 각자 자리에서 열심히 사는 그들을 보며 순수한 열정을 불태울 수 있는, 내가 학교 생활에서 가장 아끼던 부분이었다. \n\n기년회를 끝으로 공식적인 회장단 활동이 끝이 난다. 한 동아리의 회장단은 참 해야할 일이 많다는 걸 깨달은 한 해였지만, 그럼에도 너무 재미있었던 1년이었다. 사람 만나는 재미를 알게 되고 내 생각을 누군가와 공유한다는 느낌을 받을 수 있던 자리였다. \n\n1년 사이에 동아리에 대한 애정이 많이 커졌다. 내가 보고 듣고 느끼고 배운 게 많았던 곳이어서 그런지, 회장단이 끝난다는 게 왠지 모르게 시원섭섭한 느낌이다. 동아리 사람들에게 올해의 ZeroPage가 어떻게 기억될지는 모르겠지만, 다들 이 동아리로 하여금 나처럼 배우고 느낀 점이 많으면 그걸로 만족할 수 있을 것 같다.\n\n32대 회장단을 같이 이끌어온 친구들에게도 너무 수고했다고 고맙다고 전해주고 싶다.\n\n## 2023년\n적은 건 몇 개 없지만 모니터 앞에서는 몇 시간을 넘게 그동안의 시간들을 쭉 되새겨보았다. 올해는 공부도 열심히 하고 노는 것도 열심히 해서 그런지 시간이 너무 빠르다고 느껴질만큼 바쁘게, 재밌게 보낸 것 같다. 내년엔, 잠시 하던 걸 멈춰두고 2023년 1월 9일에 입대를 하기로 했다. 사실 공부도 더 하고 싶고, 학교 생활도 더 하고 싶고, 더 자극받고 성장하고 싶은데 갑작스럽게 가는 것 같아서 많이 아쉬운 건 사실이다. 하지만 더 늦어질 수도 없고 오히려 하고 싶은 게 너무나도 많아서 하루 빨리 가기로 결정을 하기도 했다. 전역 후에 하고 싶은 게 너무도 많기에, 좀 더 빨리 입대하고 좀 더 빨리 전역할 생각이다. \n\n군대에서의 계획은 아직 잘 모르겠다. 원래는 토플도 공부하고 알고리즘도 공부하겠다는 목표를 적으려고 했지만, 가봐야 생각이 정리될 수 있을 것 같다. 20살이 돼도 학교 수업과 별개로 열심히 자기 계발하고 공부했었다. 한 번쯤 쉬는 것도 나쁘지 않을 것 같다는 생각이 이 글을 쓰면서 문득 떠올랐다. 대신, 나한테 2023년은 어느때보다 느리게 가겠지만 그래도 인생에 있어서 의미없는 1년으로 만들지 말자는 게 내 작은 목표이다.\n\n## 2022년의 나\n나는 학교 수업 이외에도 이런 저런 활동 하는 것을 좋아하고, 사람들을 만나서 배우고 같이 공부하는 과정을 좋아하며 그로 인해 얻게 되는 시너지와 에너지를 좋아하는 사람이다. 하지만 올해에는 부족한 점도 있었다. \n\n어느 순간 팀플 과제를 하는 내 모습이 내가 원하던 모습이 아니었다는 것을 깨달았다. 성적에 대한 욕심 때문에 기분이 내 태도가 되어버린 순간들이 몇몇 있었다. 팀 프로젝트를 하면서 가장 아쉬운 순간은, 팀원들이 나만큼 이 과제에 진심이 아니었다는 걸 깨달은 순간이다. 데일 카네기는 인간관계의 기본원칙을 설명하면서 마지막으로 \"상대방에게 열렬한 욕망을 불러일으켜라.\"라고 한다. 수도 없이 읽은 구절인데 팀원들에게 미안하기도 하고 아직은 부족한 나에게 실망한 순간이었다. \n\n반대로 올해의 내가 잘한 점은, 나에게 집중할 수 있는 시간이 많았다는 것이다. 해외프로그램을 다녀온 이후로 나한테 보다 더 집중할 수 있었다. 관심과 욕심은 내가 성장할 수 있게하는 내 동력원인데 항상 그 관심의 영역에는 내가 없음을 깨달을 수 있었다. 내가 잘하고 못하는 게 무엇인지, 내 관심사와 시선은 어디로 향하는지 알 수 있었고 이외에도 감정적으로, 또 그 밖으로도 느낀 게 너무 많은 올해였다. \n\n## 마무리하며\n회고를 하면서 올해는 돌아봤는데 알차게, 또 후회없이 보낸 것 같아서 다행이었다. 나를 성장시킬 수 있었던 한 해였고, 동기부여가 많이 됐던 한 해였다. 다음 회고는 아마 24년 하반기 회고가 될 것 같은데 얼른 그 회고를 쓰는 날이 다가왔으면 좋겠다"},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다. 이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"2022년 11월 26일 20:11","title":"2022 ZeroPage 지금그때","tags":["club"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/after-jigeumgeuddae)에서 이전해온 글입니다.*\n\n## What is 지금그때?\n![[ZeroPage.svg]]\n\n현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 ['지금그때'](https://zp-portal.org/jigeumgeuddae/)를 진행했다. \n\n이 행사는 졸업하신 선배분들과 재학생이 만나 선배분들의 그때와 우리들의 지금을 서로 공유하고 엿볼 수 있는 자리다. 후배분들은 학업이나 학교생활에 대한 본인의 고민을 털어 놓을 수 있고 이에 대한 조언이나 선배분들의 경험을 들을 수 있다. 반대로 선배분들은 그런 질문들에 기꺼이 조언을 아끼지 않아주시고 요즘은 어떤 공부를 하는지, 학교 생활은 무엇이 달라졌는지 서로 이야기를 나눌 수 있는 자리이다.\n\n작년에도 내가 1학년일 때 이 행사를 참여했었는데 선배분들과 이야기를 하면서 학교 수업에서는 얻을 수 없던 이야기들을 나눌 수 있었고, 취업이나 대학원 뿐이 아니라 개발자라는 종류의 사람이 무엇인지, 앞으로의 공부 방향성을 어떻게 확립해나가야 하는지를 알 수 있었다.\n\n올해는 이 동아리의 회장단으로서 행사를 준비하고 운영하고 참여했다.\n\n### 진행 방법\n우선 간단히 아이스 브레이킹을 하고 본격적으로 시작이 됐다. 대략 한 시간씩 3타임이 운영이 됐고 각 타임에는 본인이 관심이 있는 주제가 있는 자리에 가서 편하게 대화를 하면 된다.\n\n자세한 타임테이블은 아래와 같다.\n| Time | Activity |\n| ------------- | -------------- |\n| 13:30 - 14:00 | 참가자 등록 |\n| 14:00 - 14:30 | 개회사 |\n| 14:30 - 15:00 | 아이스브레이킹 |\n| 15:00 - 16:00 | 월드카페 1부 |\n| 16:00 - 17:00 | 월드카페 2부 |\n| 14:30 - 15:00 | 월드카페 3부 |\n| 18:00 | 후기 및 폐막 |\n| 18:30 | 회식 |\n\n\n주제는 신청하신 분들이 원하는 것을 바탕으로 총 12개를 만들었다.\n- 무슨 공부를 해야하는가, 학부생때 해야할 것들에 대한 추천\n- 학교 수업을 따라가는 것이 중요한가\n- 졸업생으로서 가장 유용하게 생각하는 과목\n- 취업을 위해 준비해야할 것들\n- 대학원에 대한 조언\n- 관심 분야를 어떻게 정했는지\n- 지금 하는 일이 즐거운 이유\n- 컴퓨터 전공자는 어떤 유형으로 사회에 진출하는가\n- ZeroPage가 나에게 미친 영향\n- 시간, 멘탈 체력 등의 관리\n- 방학에는 무엇을 하는 게 좋은가\n- 개발자와 커뮤니케이션에 대해\n\n## 어떤 주제에 참여했는가\n꼭 한 타임에 한 주제에 머물러 있을 필요는 없었는데 자리에서 이야기를 하다보니 물어볼 것도 많았고 들을 내용도 많아서 총 3개의 주제에 참여를 했다.\n\n### 학교 수업을 따라가는 것이 중요한가\n첫 번째 타임에 참여한 주제다. 사실 이 주제는 내가 1학년 때부터 재학생 선배분들께 많이 물어보며 다녔고 이에 대한 답도 알지만, 오늘 처음 본 선배분들, 특히 현업에 종사하신 분들의 생각은 어떤지 궁금해서 자리를 찾아갔다.\n\n당연히, 다들 중요하다고 대답해주셨다. 근데 그거에 덧붙여서 이야기 해주신게 기억이 남았다. 내 기억에 남는대로 재해석을 하자면, 학교에서 배운 내용은 일종의 지도 같은 역할을 한다고 하셨다. 당장은 현업에서 쓰이지 않고 내가 필요로 하지는 않을 수도 있지만, 언젠가 내가 그 지식이 필요할 때 그 길을 찾는데 유리하다고 한다. 또한 본인이 취직을 하든, 연구를 하든 무엇을 할 지 아무도 알 수 없기에 기회비용일 수도 있지만 잘 만들어진 학교 커리큘럼을 따라가는 게 맞다고 하셨다.\n\n하지만 오히려 반대로 학점은 그리 중요하지 않았다. 대학원을 준비하지 않는 이상, 취업을 할 때는 학점보다는 그 과목을 본인이 자신의 말로 설명할 수 있는지, 얼만큼 자기의 지식으로 만들었는지를 판별하기 때문에 학점에 그리 목 메이지 않아도 된다고 한다.\n\n그래서 나는 요즘 기업에서 신입을 뽑을 때 학점보다는 프로젝트를 더 중요하게 생각하냐고 여쭤봤고, 거기 계신 세 분의 선배들 모두 얼추 맞다고 대답하셨다. 대신 우리들이 프로젝트를 통해서 어떤 특정한 모습을 뽑내려고 안해도 된다고 하셨다. 지원자들을 보면, 프로젝트를 통해 본인의 특장점을 억지로 어필하려는 모습이 보인다고 하는데 이러한 점보다는 오히려 **본인이 문제를 정의하고, 몰두하고, 해결해나가는 과정 속에서 생기는 고민이나 선택들에 대한 이유를 본인만의 생각으로 논리적이게 풀이할 수 있고 그 과정을 제시할 수 있으면 된다고 했다.** 단순히 예를 들자면, 왜 React를 안쓰고 Nuxt로 개발을 하는지에 대한 본인만의 생각이 있고 말을 할 수 있으면 그걸로 충분하다는 얘기다. 실제 현업에서도 예시와 경우가 많기 때문에 이런 상황에는 지원자가 어떤 이유로 왜 이런 선택을 하는지 알아가는 과정인 것이었다. 또 더불어서 **학교에서 배운 내용들을 본인의 프로젝트에 적용하려는 시도를 하면 좋을 것 같다고 하셨다.** 개념적이고 추상적인 CS 지식을 프로젝트에 적용하는 게 쉽지는 않지만 low level를 다루면서 양질의 프로젝트를 만들 수 있거나 문제를 해결할 수 있는 근본적인 해결책을 찾을 수도 있다고 하셨다.\n\n### 관심 분야를 어떻게 정했는지\n두 번째 타임에 참여한 주제다. 입학 전부터, 나는 문제를 찾아 공학적인 기술로 해결해나가는 것을 좋아했다. 그렇다보니 프로젝트성 공부를 지속했었다. 문제를 해결해나가는 과정에서 앱이 필요하면 앱 개발 공부를 했고, 웹이 필요할 것 같으면 그때부터 웹을 공부하기 시작했다. 필요성에 의해 공부를 하다보니 여러 분야를 어느정도 경험은 해봤지만 특정 분야에 대한 깊은 지식이나 내가 그 분야를 제대로 잘 안다고 말을 할 수는 없었던 것 같았다. 그래서 최근에는 내가 좋아하는 분야를 찾아서 깊게 파보고 싶다는 생각이 문득 들었고 선배분들은 어떻게 본인의 분야를 정했는지 궁금했다.\n\n여러 선배들의 조언을 정리하면 아래와 같다.\n\n우선 다양한 경험을 해봐야한다는 것이었다. 동아리 내에서 스터디를 하든, 더 몰입감 있게 공모전을 나가든 어느정도의 강제성을 부여한 채로 여러 분야를 접해야한다는 것이다. 사실 지금 관심 분야를 찾아도 실제 현업에 나가면 자신이 관심있어 하는 분야를 다루는 경우는 일부기 때문에 한 분야를 깊게 파는 것이 물론 개인의 성장에 도움은 되지만, 관심 분야를 못 정했다고 불안해할 필요는 없다고 하셨다. 다만 오래 방황을 할 경우에는 학교 공부를 더 열심히 해야한다고 하셨다. 학교에서 배우는 CS 지식이 현업에서 일하는 지금까지도 도움이 되기 때문에 기본 중에 기본이 되는 내용들은 탄탄히 쌓을 필요가 있다고 했다. \n\n사실 너무 당연한 얘기였다. 오히려 선배분께서 지금처럼 필요에 의해 찾아 공부하고 고민하는 시간이 필요한 게 당연하다고 하셨다. 그 말에 안심이 되기도 했고, 지금처럼 지치지 말고 여러 자극을 받으며 살아야겠다고 생각했다.\n### 방학에는 무엇을 하는 게 좋은가\n세 번째 타임에 참여한 주제다. 사실 세 번째 타임에는 조언을 들으러 간 게 아니라 1학년분들이 계셔서 고민을 들어주려고 갔었다. 그래봤자 1년 차이라 도움이 될 지는 모르겠지만, 그래도 쉬지 않고 바쁘게 1학년을 보냈다고 말할 수 있어서 좋았던 점, 또 아쉬웠던 점을 들려주려고 갔다.\n\n내가 말한 내용만 정리를 하면 아래와 같다.\n\n난 하나의 기술 스택을 공부해보거나, 학교에서 지원해주는 외부 프로그램을 해보라고 추천했었다. 경험에서 오는 차이만큼 확실한 게 없다고 생각을 해와서 방학만큼은 학기 중에 병행하기 어려웠던 개발공부를 하거나, 해외 프로그램에 참여하는 게 도움이 많이 될 것 같았다. 또한 본인이 졸업 전에 하고 싶은 것에 대한 계획을 세울 필요가 있다고 말해줬다. 교환학생만 해도, 적어도 1년 전부터는 어학성적을 준비해야한다. 외부 동아리도 코딩 테스트를 통과하려면 몇 달을 할애해야한다. 나도 이런 점에 있어서는 부족했고 아쉬웠기에 후배분들은 더 낫길 바라는 마음에 말해줬다.\n## 2022 지금그때 회고\n![[2022 지금그때.jpg]]\n\n올해에도 작년과 마찬가지로 여러 생각이 들었고 다양한 감정들을 느낄 수 있었다. 참여자로서, 또 이 행사를 준비했던 회장단으로서도 느낀점이 있었다. \n\n우선 장소가 급히 바뀌어 예상했던 방향대로 안흘러가서 좀 아쉬웠다. 그럼에도 다른 회장단들이 열심히 같이 준비해줘서 다행이었고 무사히 진행됐다는 점에서 뿌듯하기도 했다. 이럴 때마다 회장단하길 잘한 것 같다는 생각이 든다.\n\n1년동안 학교 생활을 하다보면 자연스럽게 진로에 관한 이런저런 고민들이 쌓이게 된다. 오히려 난 방향성 없게 입에 넣어주는 공부만 하면 안된다고 생각하고 본인이 학교를 다니면서 진로나, 학업, 개발 등 본인만의 여러 고민들이 생겨야한다고 생각한다. 나는 그럴 때마다 물어볼 곳이 없었는데 졸업을 하셔도 여전히 관심을 가져주시는 분들 덕분에 동아리 운영도 되고 나와 같은 재학생들의 고민이 조금은 덜어지는 것 같다. 선배분들께 질문을 하고, 이야기를 하다보면 내 로드맵을 잠시 먼 시점에서 관찰하는 느낌이 든다. 미로에서 잠시 나와 탈출구가 어딨는지 확인하는 느낌이었다. 평상시에 갖고 있던 여러 고민들이 하나하나 풀려서 그런가 다시금 방향성이 잡히고 새로운 자극을 찾은 느낌이 들었다.\n\n학부 차원에서 이런 이벤트를 유지를 못시켜서 더욱 동아리 선배분들께 감사하기도했다. 다만 아쉬운 건, 1학년분들도 나와 같은 기분을 느끼셨으면 했다. 듣는 것에만 익숙해진 분들이 꽤 있으셨는데 기회를 놓치지 않고 이런 저런 질문을 더 많이 했으면 어땟을까.. 라는 생각이 들었다.\n\n추가로 선배분들이 어떤 일을 하는지, 어느 분야를 공부하고 계신지 여쭤봤었는데 그럴 때마다 난 **대체 불가능 한 사람, 개발자를 위한 개발자**라는 타이틀을 내밀 수 있는 사림이 되어야겠다고 생각했다. 본인이 지금 무엇을 하고 있는지, 자신 있게 보여주고 설명하는 모습이 내가 바라는 모습이기도 했다. 지금 내가 하고자 하는 분야를 뚜렷히 못정해서 저런 생각이 들은 것 같기도 했다. 앞으로도 많은 자극들을 받으며 아직 접해보지 못한 것들을 경험해보고 싶었고, 지금 도움을 받은 만큼 나의 지금이 그때가 될 때 후배분들의 지금에 도움이 될 수 있는 사람이 되어야겠다는 생각을 했다.\n"},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다. 문제 상황 본 페이지는 Nuxt content와 tailwindcss ty…","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"2022년 09월 13일 22:09","title":"Nuxt content에 Mathtype 사용하기","tags":["Nuxt","Katex"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/nuxt-katex)에서 이전해온 글입니다.*\n\n\n![[Nuxt.png]]\n## 삽질 배경\n내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 [스터디 페이지](https://choiminjun.netlify.app/study/computer-architecture/0-1)를 개발하면서 markdown에 수식을 적어야 할 일이 또 생기고 말았다.\n\n### 문제 상황\n본 페이지는 Nuxt content와 tailwindcss typography로 개발되었는데 둘 다 markdown에서 수식을 기본적으로 지원해주지 않기 때문에 내가 추가적으로 \n플러그인이나 패키지를 다운받아 적용시켜줘야했다. 구글링을 하다보면 이 [GitHub Issue](https://github.com/nuxt/content/issues/102)가 그나마 제일 믿을 만한 정보가 많았는데 이 페이지뿐만 아니라 거의 모든 사이트들이 `rehype-katex`와 `remark-math` package를 다운받아 적용하라고 한다. 근데 문제는 `nuxt/content`, `rehype-katex`, `remark-math` package들이 새롭게 업데이트 되면서 서로 호환이 되도록 작업을 안해놨기 때문에 전부 다 최신 버전으로 다운 받아 사용할 경우 수식 적용 자체가 되지를 않는다. \n\n## 정답\n### 삽질 방법\n일단 Nuxt content에서 katex를 지원해주는 방법에 대한 거의 모든 글을 읽어봤을만큼 몇 시간동안 구글링을 해보고 모든 버전들끼리 조합을 해본 뒤에 정답을 찾았다. 또한 `nuxt/content`을 바꿔주게 되면 수식이 필요없는 파일들에게도 영향이 갈 수 있어서 `rehype-katex`, `remark-math` package들만 버전 조합을 찾아봤다. npm downgrade를 하면 쉬운데 에러가 많이 나서 매번 **노드 모듈**들을 지워주고 **package.json**을 수정한다음에 새롭게 모듈들을 깔아보면서 로컬에서 실행해보며 확인해주었다.\n\n### 결론\n\n```javascript\n\"dependencies\": {\n \"@nuxt/content\": \"^1.15.1\",\n \"rehype-katex\": \"^4.0.0\",\n \"remark-math\": \"^4.0.0\",\n \"katex\": \"^0.15.3\",\n },\n``` \n
package.json
\n
\n\n우선 위에서부터 언급한 3가지 package들은 저 버전들로 설치를 해놔야 호환이 된다. 특히 `rehype-katex`는 5버전, `remark-math`는 4버전을 넘기면 안된다. 추가로 `katex` package도 필요한데, 이 package가 없으면 수식을 인식하긴하는데 우리가 원하는대로 깔끔하게 적용되지 않는다.\n\n\n\n```javascript\ncss: [\n {\n src: 'katex/dist/katex.min.css',\n defer: true\n },\n \"@/assets/css/main.css\"\n ],\ncontent: {\n markdown: {\n remarkPlugins: ['remark-math'],\n rehypePlugins: ['rehype-katex']\n },\n },\n```\n
nuxt.config.js
\n
\n\n그리고 나서 **nuxt.config.js** 파일에 가서 위와 같이 적용을 시켜줘야한다.\n\n\n## 마무리\n아무리 구글링을 해도 답이 안나오길래 Github에 Nuxt content로 빌드된 페이지 레포 중에 markdown에서 수식을 지원해줄 수 있게 작업한 것들을 찾아봤다. 유일하게 한 개가 있었는데 그 레포에서는 `katex` package를 추가로 설치해서 적용해주길래 똑같이 적용시켜보았다. \n\n이럴 때 보면 확실히 Nuxt가 React에 비해 커뮤니티 활성도가 조금 낮은 듯하다. 지금은 Nuxt가 너무 익숙해져서 넘어갈 생각은 없지만 프로그래밍을 하는데에 있어 커뮤니티가 기여하는 점이 크다는 것을 알았다. \n\n적게 잡아도 5시간정도는 이 작업만 한 것 같다. 중간에 던질까 생각도 많았는데 모든 경우를 시도해보지 않으면 나중에 후회할 것 같아서 광기어린 눈으로 지구끝까지 삽질을 해보았다. 나처럼 Nuxt content에 mathtype을 적용하고자 하는 사람이 많을 것 같은데 도움이 됐으면 좋겠다.\n"},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 되돌아보는 것 자체만으로도 스스로 많은 자극이 되었기에 회고를 작성하는 습관을 들여야겠다고…","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"2022년 09월 05일 12:09","title":"2022년 상반기 회고","tags":["회고","club"]},"rawMarkdownBody":"\n*[기존 블로그](https://choiminjun.netlify.app/blog/retrospect-2022-1)에서 이전해온 글입니다.*\n\n## 들어가기전에\n이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다. \n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 되돌아보는 것 자체만으로도 스스로 많은 자극이 되었기에 회고를 작성하는 습관을 들여야겠다고 꾸준히 생각했었는데 내 마음에 들 때까지 내 페이지를 개발하는 게 우선인 것 같아서 조금 늦은 감이 없진 않지만 지금에서야 작성해보고자한다. \n\n## Google Developer Student Club CAU\n\n\n![[GDSC.svg]]\n\n\n\n### 열정적인 사람들을 만나며\n2021년 9월쯤, 우연히 학교 에브리타임에서 GDSC CAU 1기를 모집한다는 글을 보았다. 홍보글을 보았을 때 '이 동아리는 개발을 잘하는 사람만\n들어갈 수 있는 곳인가?' 라는 의문이 제일 먼저 들면서 나도 모르게 움츠러들었었다. 그런 나에게 반항심이라도 들었는지 떨어져도 본전이라는 마음으로, 한 편으로는 이 동아리를 통해 나도 개발을 잘하는 사람이라는 가치에 한 발자국 더 다가가고자 하는 마음으로 지원을 했고 운이 좋았는지는 모르겠지만 합격을 해서 1년을 열심히 활동하고 얼마전 수료식을 했다.\n\n21년도에 중앙대학교 소프트웨어학부에 입학을 하고 입학과 동시에 전부 비대면 수업을 들었던 나는 자연스레 학교 생활과는 멀어졌었고 학교 수업만 따라가고 있었다. 그러다가 처음으로 동아리라는 것을 해보고 환경의 중요성을 더욱 실감했던 것 같다. 온라인이었지만 정모에 나가고 스터디를 하고 프로젝트를 진행하면서 나와 같은 목표를 가진, 또 나와 같은 열정을 가진, 어쩌면 나보다도 더욱 큰 꿈을 가진 사람들을 만나면서 그들로부터 동기와 열정을 느끼고 나 또한 다시 내가 하고 싶었던 것들에 몰두할 수 있었다.\n\n### 나를 성장시키는 힘\n이 동아리를 통해 기술적으로 배운 것들도 많았지만 더욱 중요하게, 나라는 사람을 성장시킬 수 있는 방법을 깨달았다.\n그건 바로 **불편함에 익숙해져야한다는 것**이다. GDSC에서 나는 Flutter를 공부하고 앱 개발을 했는데 매 순간 고민의 연속이었고 기존에 내가 하던 것과는 완전 다른 느낌의 코딩이기에 쉬운 것이 하나 없었다. 이처럼 새로운 언어와 프레임워크를 접하면서 누구나 당연히 불편함을 느낄거라 생각을 한다. 하지만 그 불편함을 느끼는 과정이 학습의 동기가 되고 성장의 과정이라는 것을 배웠다. 2학년인 지금도 새롭게 배우고 접하는 것들이 많지만 앞으로도 다를 것 같지는 않아보였다. 중요한 건 그런 과정 속에서 나를 둘러싼 불편함을 받아드리고 적응하는 것임을 배울 수 있었다.\n\n또 다른 것으로는, **새로움에 주저하지 말자는 것**이다. 아무것도 모르는 1학년 학부생이 무작정 동아리에 들어가고 FE/BE 경험도 없으면서 Flutter를 시작하는 것이 누가 보기엔 살짝 무모하다 할 수 있지만 그럼에도 생각을 실천으로 옮기는 것 또한 나를 성장시키는 방법이라고 생각했다. 처음 동아리에 들어갔을 때 내가 유일한 1학년이었다. '내가 잘 따라갈 수 있을까' 걱정도 했지만 새로움에 도전하는 걸 어느순간 내가 즐기고 있음을 느꼈던 것 같다. 처음에는 쉬운 것조차 어떻게 하는지 몰라서 많이 헤매고 시도때도 없이 선배들한테 질문을 했는데 지금 생각해도 본인 일처럼 친절하게 알려준 선배들께 감사하다.\n\n## ZeroPage | 중앙대학교 소프트웨어학부 학술연구회\n\n![[ZeroPage.svg]]\n### 회장단 상반기 회고\nGDSC에서 가깝게 지낸 사람들이 대부분 중앙대학교 소프트웨어학부 학술연구회인 ZeroPage 소속이었다. 그들과 지내면서 자연스레 나도 ZeroPage에 가입을 했고 작년 하반기에 열심히 활동을 하면서 이 동아리를 이어나가고자 올해 초 회장단에 지원을 했다.\n\n회장단으로 한 학기를 보내고 되돌아봤을 때 잘한 점도 있는 것 같고 아쉬운 점도 몇몇 있는 것 같다. 우선 대면으로 조금씩 허용되면서 그동안의 행사들과 동아리 분위기를 바꾸고자 나름대로 노력을 했다. 최근에는 Devils Camp를 대면으로 진행했는데 마침 내가 그때 코로나에 걸려 못 간 게 아쉬웠다. 또한 동아리를 유지하기 위해서는 회원들을 꾸준히 모집하는 것도 중요한데 그래도 노력한만큼 동아리가 유지되고 있는 것 같아서 다행인 것 같다.\n\n최근에 후배분들 중 한 분이 동아리 회장단을 하는 게 부담스럽지 않냐고 물어봐주셨다. 30년 넘게 유지되고 있는 동아리라 초반에는 부담도 됐지만 지금은 조금이나마 편해진 것 같다. 그럼에도 불구하고 나는 그 후배분께 본인이 애정을 쏟고 싶은 곳이 있다면 회장단만큼 유대감을 크게 느낄 수 있는 방법이 몇 없을 거라고 말을 해줬다. 매주 정모를 하고 함께 스터디를 해나가면서 같이 성장해나가는 기분은 말로 설명할 수 없을 무언가가 있는 것 같다고 말이다. 아직 상반기밖에 안지났지만 여전히 하루하루 느끼는 게 많은 것 같다. 요즘 하는 생각은 '**어렵지 않은 사람이 되자**'이다. 여러 사람을 만나며 소통을 해나가는 과정 속에서 처음의 진입장벽을 허무는 게 중요한 것 같다. 그래서 앞으로는 스터디도 더 자주 개최하고 보다 활동적인 동아리를 만들려고 계획 중이다. \n\n\n## 해외인턴프로그램\n얼마 전, 여름방학에 미국 LA로 한 달간 인턴프로그램을 다녀왔다. 본 프로그램을 통해 창업이라는 개념에 벽이 조금은 허물어진 것 같고, 진지하게 교환학생에 대해서 생각을 해보았다. 다른 문화 속에서 내가 좋아하는 분야를 공부해보고 싶다. 대학원을 해외로 가는 방법도 있지만, 그건 차후에 내가 공부하고 싶은 분야를 뚜렷이 찾으면 고민해볼 것 같다. \n\n## 운동\n내 책상 바로 옆에 풀업을 할 수 있는 치닝디핑(턱걸이 기구)과 덤벨이 있다. 작년 초부터 지금까지 못해도 일주일에 3번이상 꾸준히 운동을 해오고 있는데 점점 개수가 느는 게 보인다. 책상에 앉아있는 시간이 많아질 수록 체력 또한 중요하다고 생각해서 눈에 보이면 일단 하나 당기고 본다. 앞으로는 더 바빠질 것을 대비해서 오전 시간을 최대한 활용해보고자 한다. \n\n## 앞으로의 목표\n지난 한 학기, 크게는 1년을 돌아보며 나는 다양한 사람들과 만나면서 다양한 방면으로 성장하고 있음을 느꼈다. 이렇게 회고를 하다보니 뿌듯하기도 하고 새롭게 자극받는 기분이 든다. 2학년 2학기를 시작하고 있는 지금, 전공을 5개나 듣고 있지만 또 새로운 것에 도전하고 새로운 환경에서 또 다른 사람들을 만나보고 싶다는 생각이 드는 요즘이다. 아직 정확히 무엇을 더 할지는 모르겠지만 올해 하반기에는 좀 더 많은 자극을 받으며 열심히 살고 싶다. "}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/series/page-data.json b/page-data/series/page-data.json index bd557eb..6e02cb4 100644 --- a/page-data/series/page-data.json +++ b/page-data/series/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-series-jsx","path":"/series/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 08월 02일 15:08","title":"Representing Instructions in computer","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 07월 31일 15:07","title":"Design principles 4 of MIPS ISA","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 22일 16:07","updated":"2024년 07월 31일 15:07","title":"Design principles 1~3 of MIPS ISA","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 08월 02일 15:08","title":"Measuring Performance","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 07월 31일 15:07","title":"Defining Performance","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"2024년 07월 22일 14:07","updated":"2024년 07월 31일 15:07","title":"CA Overview","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"2024년 07월 22일 12:07","updated":"2024년 07월 22일 15:07","title":"Computer Architecture Intro","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"2024년 07월 20일 20:07","updated":"2024년 07월 22일 14:07","title":"2024년 상반기 회고","tags":["회고"],"series":"기록과 방향성에 대한 회고"}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"2024년 01월 10일 13:01","updated":"2024년 01월 11일 23:01","title":"기존 블로그 대신 Obsidian을 택한 이유","tags":["obsidian"],"series":null}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"2024년 01월 08일 12:01","updated":"2024년 07월 20일 20:07","title":"2023년 회고","tags":["회고"],"series":"기록과 방향성에 대한 회고"}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"2022년 12월 23일 12:12","updated":"2024년 07월 20일 20:07","title":"2022년 하반기 회고","tags":["회고"],"series":"기록과 방향성에 대한 회고"}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"2022년 11월 26일 20:11","updated":"2024년 06월 24일 22:06","title":"2022 ZeroPage 지금그때","tags":["club"],"series":null}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"2022년 09월 13일 22:09","updated":"2024년 06월 24일 22:06","title":"Nuxt content에 Mathtype 사용하기","tags":["Nuxt","Katex"],"series":null}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"2022년 09월 05일 12:09","updated":"2024년 07월 20일 20:07","title":"2022년 상반기 회고","tags":["회고","club"],"series":"기록과 방향성에 대한 회고"}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-pages-series-jsx","path":"/series/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"research","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신…","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"date":"2024년 09월 07일 12:09","updated":"2024년 09월 18일 20:09","title":"sigchi 2024 관심 주제","tags":["research"],"series":null}},{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 08월 02일 15:08","title":"Representing Instructions in computer","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 31일 15:07","updated":"2024년 07월 31일 15:07","title":"Design principles 4 of MIPS ISA","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"2024년 07월 22일 16:07","updated":"2024년 07월 31일 15:07","title":"Design principles 1~3 of MIPS ISA","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 08월 02일 15:08","title":"Measuring Performance","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"2024년 07월 22일 15:07","updated":"2024년 07월 31일 15:07","title":"Defining Performance","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"2024년 07월 22일 14:07","updated":"2024년 07월 31일 15:07","title":"CA Overview","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"2024년 07월 22일 12:07","updated":"2024년 07월 22일 15:07","title":"Computer Architecture Intro","tags":["study","컴퓨터구조"],"series":null}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"2024년 07월 20일 20:07","updated":"2024년 07월 22일 14:07","title":"2024년 상반기 회고","tags":["회고"],"series":"기록과 방향성에 대한 회고"}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"2024년 01월 10일 13:01","updated":"2024년 01월 11일 23:01","title":"기존 블로그 대신 Obsidian을 택한 이유","tags":["obsidian"],"series":null}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"2024년 01월 08일 12:01","updated":"2024년 07월 20일 20:07","title":"2023년 회고","tags":["회고"],"series":"기록과 방향성에 대한 회고"}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"2022년 12월 23일 12:12","updated":"2024년 07월 20일 20:07","title":"2022년 하반기 회고","tags":["회고"],"series":"기록과 방향성에 대한 회고"}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"2022년 11월 26일 20:11","updated":"2024년 06월 24일 22:06","title":"2022 ZeroPage 지금그때","tags":["club"],"series":null}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"2022년 09월 13일 22:09","updated":"2024년 06월 24일 22:06","title":"Nuxt content에 Mathtype 사용하기","tags":["Nuxt","Katex"],"series":null}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"2022년 09월 05일 12:09","updated":"2024년 07월 20일 20:07","title":"2022년 상반기 회고","tags":["회고","club"],"series":"기록과 방향성에 대한 회고"}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/tags/page-data.json b/page-data/tags/page-data.json index 80ae80f..f252c19 100644 --- a/page-data/tags/page-data.json +++ b/page-data/tags/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-pages-tags-jsx","path":"/tags/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"July 31, 2024","updated":"Aug 02, 2024","title":"Representing Instructions in computer","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"July 31, 2024","updated":"Jul 31, 2024","title":"Design principles 4 of MIPS ISA","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Design principles 1~3 of MIPS ISA","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Aug 02, 2024","title":"Measuring Performance","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Defining Performance","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"CA Overview","tags":["study","컴퓨터구조"]}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 22, 2024","title":"Computer Architecture Intro","tags":["study","컴퓨터구조"]}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"July 20, 2024","updated":"Jul 22, 2024","title":"2024년 상반기 회고","tags":["회고"]}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"January 10, 2024","updated":"Jan 11, 2024","title":"기존 블로그 대신 Obsidian을 택한 이유","tags":["obsidian"]}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"January 08, 2024","updated":"Jul 20, 2024","title":"2023년 회고","tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"December 23, 2022","updated":"Jul 20, 2024","title":"2022년 하반기 회고","tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"November 26, 2022","updated":"Jun 24, 2024","title":"2022 ZeroPage 지금그때","tags":["club"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"September 13, 2022","updated":"Jun 24, 2024","title":"Nuxt content에 Mathtype 사용하기","tags":["Nuxt","Katex"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"September 05, 2022","updated":"Jul 20, 2024","title":"2022년 상반기 회고","tags":["회고","club"]}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-pages-tags-jsx","path":"/tags/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"allMarkdownRemark":{"group":[{"fieldValue":"Katex","totalCount":1},{"fieldValue":"Nuxt","totalCount":1},{"fieldValue":"club","totalCount":2},{"fieldValue":"obsidian","totalCount":1},{"fieldValue":"research","totalCount":1},{"fieldValue":"study","totalCount":7},{"fieldValue":"컴퓨터구조","totalCount":7},{"fieldValue":"회고","totalCount":4}],"nodes":[{"excerpt":"1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신…","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"date":"September 07, 2024","updated":"Sep 18, 2024","title":"sigchi 2024 관심 주제","tags":["research"]}},{"excerpt":"contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic …","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"date":"July 31, 2024","updated":"Aug 02, 2024","title":"Representing Instructions in computer","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to enc…","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"date":"July 31, 2024","updated":"Jul 31, 2024","title":"Design principles 4 of MIPS ISA","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favo…","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Design principles 1~3 of MIPS ISA","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic o…","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Aug 02, 2024","title":"Measuring Performance","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to s…","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"Defining Performance","tags":["study","컴퓨터구조"]}},{"excerpt":"contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems so…","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 31, 2024","title":"CA Overview","tags":["study","컴퓨터구조"]}},{"excerpt":"Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다.\n특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites…","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"date":"July 22, 2024","updated":"Jul 22, 2024","title":"Computer Architecture Intro","tags":["study","컴퓨터구조"]}},{"excerpt":"지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상…","fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"date":"July 20, 2024","updated":"Jul 22, 2024","title":"2024년 상반기 회고","tags":["회고"]}},{"excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을…","fields":{"slug":"/why-obsidian/"},"frontmatter":{"date":"January 10, 2024","updated":"Jan 11, 2024","title":"기존 블로그 대신 Obsidian을 택한 이유","tags":["obsidian"]}},{"excerpt":"지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 …","fields":{"slug":"/retrospect-2023/"},"frontmatter":{"date":"January 08, 2024","updated":"Jul 20, 2024","title":"2023년 회고","tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 지난 회고: retrospect-2022-1 들어가기 전에 어느덧 연말이 다가왔다. 상반기 회고를 쓴 게 엊그제 같은데 다시금 회고를 써야한다는 것을 깨닫고 나서야 연말이 다가왔음을 느꼈다.\n2022년 하반기 회고를 작성하기 전에,…","fields":{"slug":"/retrospect-2022-2/"},"frontmatter":{"date":"December 23, 2022","updated":"Jul 20, 2024","title":"2022년 하반기 회고","tags":["회고"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. What is 지금그때? ZeroPage.svg 현재 내가 32대 회장단으로 있는 중앙대학교 소프트웨어학부 학술동아리 ZeroPage에는 매년 주기적으로 열리는 행사가 크게 4개가 있다. 오늘은 마지막 행사인 '지금그때'를 진행했다…","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"date":"November 26, 2022","updated":"Jun 24, 2024","title":"2022 ZeroPage 지금그때","tags":["club"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 삽질 배경 내 개인페이지는 올해 초에 처음 개발되기 시작했었다. 그때도 markdown에 수식을 적용하기 위해 이것저것 시도해보다가 포기했었는데 며칠 전부터 스터디 페이지를 개발하면서 markdown에 수식을 적어야 할 일이 또 …","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"date":"September 13, 2022","updated":"Jun 24, 2024","title":"Nuxt content에 Mathtype 사용하기","tags":["Nuxt","Katex"]}},{"excerpt":"기존 블로그에서 이전해온 글입니다. 들어가기전에 이 글을 작성하는 오늘은 9월 5일, 하반기에 접어들고 벌써 2학년 2학기를 이제 막 시작하는 날이다.\n사실 회고를 작성해야겠다고 생각한 건 꽤 오래되었다. 내가 그동안 어떤 생각을 했고 어떻게 그것들을 달성해나갔는지 …","fields":{"slug":"/retrospect-2022-1/"},"frontmatter":{"date":"September 05, 2022","updated":"Jul 20, 2024","title":"2022년 상반기 회고","tags":["회고","club"]}}]}},"pageContext":{}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/page-data/why-obsidian/page-data.json b/page-data/why-obsidian/page-data.json index 2cc509e..1eff6e1 100644 --- a/page-data/why-obsidian/page-data.json +++ b/page-data/why-obsidian/page-data.json @@ -1 +1 @@ -{"componentChunkName":"component---src-templates-post-jsx","path":"/why-obsidian/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다. 생산성 내가 원한 건 생산성 딱 하나였…","html":"

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다.

\n

생산성

\n

내가 원한 건 생산성 딱 하나였다. 블로깅을 하는 유일한 목적이 결국은 스쳐지나가는 생각들을 메모해두기 위함인데 기존에 사용하던 Nuxt로 개발된 블로그는 생산성 측면에서 부족했던 것 같다. 글 하나를 쓰기 위해 노트북을 열어야했고 괜히 나도 있어보이는 글을 쓰기 위해 억지로 분량을 늘리고 이쁜 문장들을 찾았다. 공부 내용을 기록할 때도 학습에 초점을 둔 기록이기보단 정리에 초점을 둔 기록들 투성이었다. 지금 생각해보면 모든 요소 하나하나가 너무 많은 시간을 잡아먹는 것 같았다. 그러던 와중에 obsidian을 발견했다.

\n

현재 블로그

\n

obsidian

\n

세컨드브레인이라는 책을 읽다가 obsidian이라는 툴을 알게 됐다. 글과 글 사이에 관계를 나타내기 좋아서 사용하기 시작했는데 여러 플러그인들도 많아서 내가 사용하는 용도에 맞게 커스텀하기 좋은 것 같다. 플러그인은 아래의 것들을 사용하고 있다.

\n
    \n
  • Omnisearch
  • \n
  • Templater
  • \n
  • Update time on edit
  • \n
  • Outliner
  • \n
  • Checklist
  • \n
  • Calendar
  • \n
  • MindMap
  • \n
  • Obsidian git
  • \n
\n

Gatsby

\n

기존 블로그는 Nuxt로 개발된 정적 웹페이지였다. Nuxt에서 Gatsby로 넘어간 이유는 2가지다.

\n

첫째는 원래 사용하던 블로그는 Nuxt2로 개발되었는데 내가 군대를 간 사이에 Nuxt3가 나왔다. 처음에는 마이그레이션을 해보려고 해봤는데 생각만큼 그리 단순하지 않았다. 가장 큰 문제는 아래에서도 간단하게 언급하겠지만 Nuxt가 버전업이 되면서 이를 지원하던 노드 모듈들도 이에 맞게 수정이 되어야하는데 vue 생태계가 그렇게 반응이 빠르지 않았다. 그래서 내가 마이그레이션을 해도 기존에 쓰던 기능들을 못 쓰게 되고 내가 노드 모듈을 직접 건드려보기도 했는데 도저히 휴가 때 할 수 있는 양이 아니었다.

\n

두 번째 이유는 단순히 vue 기반의 프레임워크랑 react 기반의 프레임워크를 비교해보고 싶었다. 여러 프레임워크를 쓰면서 나한테 맞고 편한 프레임워크를 찾아보고 싶었고 얼마나 많이 다른지 단순 호기심에서 시작했다. 좀 더 써봐야 알겠지만 프레임워크를 지원하는 생태계는 역시 vue보단 react가 좀 더 좋은 것 같다. 지원하는 노드 모듈들이 많은 것도 틀린 말은 아닌데 그것보다는 프레임워크의 버전업을 노드 모듈들이 빠르게 반응해서 맞춰주는 건 react가 더 편한 것 같다. 사실 차이가 그렇게 크지는 않겠지만 그래도 아직 익숙한 건 아직까지 vue인 것 같다.

\n

동기화: Working Copy

\n

obsidian에서 obsidian sync라는 기능으로 유료 구독제를 결제하면 여러 기기간의 동기화를 지원해주고 있다. 하지만 나는 Working copy라는 어플로 노트북과 아이패드, 아이폰을 동기화 해주고 있다. 결국은 Github로 동기화를 해주고 있는 건데 조금은 불편할지라도 내가 원할 때 커밋을 올리고 버전관리가 더 쉬울 것 같아서 이렇게 사용하고 있다.

","frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유","date":"2024년 01월 10일 13:01","updated":"2024년 01월 11일 23:01","tags":["obsidian"],"series":null},"fields":{"slug":"/why-obsidian/","readingTime":{"minutes":5.255}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}}]},"previous":{"fields":{"slug":"/retrospect-2023/"},"frontmatter":{"title":"2023년 회고"}},"next":{"fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"title":"2024년 상반기 회고"}}},"pageContext":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","series":null,"previousPostId":"d49f9c60-6010-5f76-81e3-87455b756b80","nextPostId":"2ca0600f-1f37-5abc-83e8-8205df778c83"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file +{"componentChunkName":"component---src-templates-post-jsx","path":"/why-obsidian/","result":{"data":{"site":{"siteMetadata":{"title":"minjun.blog"}},"markdownRemark":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","excerpt":"항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다. 생산성 내가 원한 건 생산성 딱 하나였…","html":"

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다.

\n

생산성

\n

내가 원한 건 생산성 딱 하나였다. 블로깅을 하는 유일한 목적이 결국은 스쳐지나가는 생각들을 메모해두기 위함인데 기존에 사용하던 Nuxt로 개발된 블로그는 생산성 측면에서 부족했던 것 같다. 글 하나를 쓰기 위해 노트북을 열어야했고 괜히 나도 있어보이는 글을 쓰기 위해 억지로 분량을 늘리고 이쁜 문장들을 찾았다. 공부 내용을 기록할 때도 학습에 초점을 둔 기록이기보단 정리에 초점을 둔 기록들 투성이었다. 지금 생각해보면 모든 요소 하나하나가 너무 많은 시간을 잡아먹는 것 같았다. 그러던 와중에 obsidian을 발견했다.

\n

현재 블로그

\n

obsidian

\n

세컨드브레인이라는 책을 읽다가 obsidian이라는 툴을 알게 됐다. 글과 글 사이에 관계를 나타내기 좋아서 사용하기 시작했는데 여러 플러그인들도 많아서 내가 사용하는 용도에 맞게 커스텀하기 좋은 것 같다. 플러그인은 아래의 것들을 사용하고 있다.

\n
    \n
  • Omnisearch
  • \n
  • Templater
  • \n
  • Update time on edit
  • \n
  • Outliner
  • \n
  • Checklist
  • \n
  • Calendar
  • \n
  • MindMap
  • \n
  • Obsidian git
  • \n
\n

Gatsby

\n

기존 블로그는 Nuxt로 개발된 정적 웹페이지였다. Nuxt에서 Gatsby로 넘어간 이유는 2가지다.

\n

첫째는 원래 사용하던 블로그는 Nuxt2로 개발되었는데 내가 군대를 간 사이에 Nuxt3가 나왔다. 처음에는 마이그레이션을 해보려고 해봤는데 생각만큼 그리 단순하지 않았다. 가장 큰 문제는 아래에서도 간단하게 언급하겠지만 Nuxt가 버전업이 되면서 이를 지원하던 노드 모듈들도 이에 맞게 수정이 되어야하는데 vue 생태계가 그렇게 반응이 빠르지 않았다. 그래서 내가 마이그레이션을 해도 기존에 쓰던 기능들을 못 쓰게 되고 내가 노드 모듈을 직접 건드려보기도 했는데 도저히 휴가 때 할 수 있는 양이 아니었다.

\n

두 번째 이유는 단순히 vue 기반의 프레임워크랑 react 기반의 프레임워크를 비교해보고 싶었다. 여러 프레임워크를 쓰면서 나한테 맞고 편한 프레임워크를 찾아보고 싶었고 얼마나 많이 다른지 단순 호기심에서 시작했다. 좀 더 써봐야 알겠지만 프레임워크를 지원하는 생태계는 역시 vue보단 react가 좀 더 좋은 것 같다. 지원하는 노드 모듈들이 많은 것도 틀린 말은 아닌데 그것보다는 프레임워크의 버전업을 노드 모듈들이 빠르게 반응해서 맞춰주는 건 react가 더 편한 것 같다. 사실 차이가 그렇게 크지는 않겠지만 그래도 아직 익숙한 건 아직까지 vue인 것 같다.

\n

동기화: Working Copy

\n

obsidian에서 obsidian sync라는 기능으로 유료 구독제를 결제하면 여러 기기간의 동기화를 지원해주고 있다. 하지만 나는 Working copy라는 어플로 노트북과 아이패드, 아이폰을 동기화 해주고 있다. 결국은 Github로 동기화를 해주고 있는 건데 조금은 불편할지라도 내가 원할 때 커밋을 올리고 버전관리가 더 쉬울 것 같아서 이렇게 사용하고 있다.

","frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유","date":"2024년 01월 10일 13:01","updated":"2024년 01월 11일 23:01","tags":["obsidian"],"series":null},"fields":{"slug":"/why-obsidian/","readingTime":{"minutes":5.255}}},"seriesList":{"edges":[{"node":{"id":"cbe16ee9-7b41-5ddd-a23e-2bfdaa98940d","fields":{"slug":"/nuxt-katex/"},"frontmatter":{"title":"Nuxt content에 Mathtype 사용하기"}}},{"node":{"id":"a827654c-d261-5db3-bff4-d98d76aadbe0","fields":{"slug":"/after-jigeumgeuddae/"},"frontmatter":{"title":"2022 ZeroPage 지금그때"}}},{"node":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","fields":{"slug":"/why-obsidian/"},"frontmatter":{"title":"기존 블로그 대신 Obsidian을 택한 이유"}}},{"node":{"id":"5d5d6131-4e89-5c1e-91ba-e66f285f51b1","fields":{"slug":"/0-1. CA Intro/"},"frontmatter":{"title":"Computer Architecture Intro"}}},{"node":{"id":"0b650b2c-e1d8-533f-979c-7c4a2f177084","fields":{"slug":"/0-2. CA Overview/"},"frontmatter":{"title":"CA Overview"}}},{"node":{"id":"b47b70aa-e8ac-5077-9959-1e864d435bb6","fields":{"slug":"/1-1. Defining Performance/"},"frontmatter":{"title":"Defining Performance"}}},{"node":{"id":"68f03ffa-5893-565d-840e-f0f6ae87f5c9","fields":{"slug":"/1-2. Measuring Performance/"},"frontmatter":{"title":"Measuring Performance"}}},{"node":{"id":"85e63ee9-5665-538b-ac43-635e8220e2d2","fields":{"slug":"/2-1. Designing principles 1~3 of MIPS ISA/"},"frontmatter":{"title":"Design principles 1~3 of MIPS ISA"}}},{"node":{"id":"2e0c3819-8874-5c1d-a775-2a6a841b21b5","fields":{"slug":"/2-2. Design principles 4 of MIPS ISA/"},"frontmatter":{"title":"Design principles 4 of MIPS ISA"}}},{"node":{"id":"0c2c4f4c-9eb8-50df-891b-1365303231f7","fields":{"slug":"/2-3. Representing Instructions in computer/"},"frontmatter":{"title":"Representing Instructions in computer"}}},{"node":{"id":"87ccd6ac-f6b1-5543-8b35-64c214bd6af6","fields":{"slug":"/interesting topic among sigchi 2024/"},"frontmatter":{"title":"sigchi 2024 관심 주제"}}}]},"previous":{"fields":{"slug":"/retrospect-2023/"},"frontmatter":{"title":"2023년 회고"}},"next":{"fields":{"slug":"/retrospect-2024-1/"},"frontmatter":{"title":"2024년 상반기 회고"}}},"pageContext":{"id":"25f4be38-5d7e-533d-9343-d399890cd14e","series":null,"previousPostId":"d49f9c60-6010-5f76-81e3-87455b756b80","nextPostId":"2ca0600f-1f37-5abc-83e8-8205df778c83"}},"staticQueryHashes":[],"slicesMap":{}} \ No newline at end of file diff --git a/retrospect-2022-1/index.html b/retrospect-2022-1/index.html index de8fc10..c192671 100644 --- a/retrospect-2022-1/index.html +++ b/retrospect-2022-1/index.html @@ -100,9 +100,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -140,7 +140,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -205,7 +205,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -266,6 +266,6 @@

앞으로의 목표

- \ No newline at end of file + \ No newline at end of file diff --git a/retrospect-2022-2/index.html b/retrospect-2022-2/index.html index d47c4ec..0177139 100644 --- a/retrospect-2022-2/index.html +++ b/retrospect-2022-2/index.html @@ -100,9 +100,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -140,7 +140,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -205,7 +205,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -311,6 +311,6 @@

마무리하며

- \ No newline at end of file + \ No newline at end of file diff --git a/retrospect-2023/index.html b/retrospect-2023/index.html index 19a3015..a33d8bf 100644 --- a/retrospect-2023/index.html +++ b/retrospect-2023/index.html @@ -98,9 +98,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -138,7 +138,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -203,7 +203,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -284,6 +284,6 @@

2024년 목표

- \ No newline at end of file + \ No newline at end of file diff --git a/retrospect-2024-1/index.html b/retrospect-2024-1/index.html index 0bc8b9a..88b0125 100644 --- a/retrospect-2024-1/index.html +++ b/retrospect-2024-1/index.html @@ -98,9 +98,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -138,7 +138,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -203,7 +203,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -284,6 +284,6 @@

마무리하며

- \ No newline at end of file + \ No newline at end of file diff --git a/rss.xml b/rss.xml index 5c224b9..e9fe41c 100644 --- a/rss.xml +++ b/rss.xml @@ -1,4 +1,17 @@ -<![CDATA[RSS Feed of minjun.blog]]>https://minjun.blogGatsbyJSThu, 08 Aug 2024 09:10:52 GMT<![CDATA[Measuring Performance]]>https://minjun.blog/1-2. Measuring Performance/https://minjun.blog/1-2. Measuring Performance/Mon, 22 Jul 2024 15:40:24 GMT<p>contents: <a href="/0-1.%20CA%20Intro" data-wiki-link="true">0-1. CA Intro</a></p> +<![CDATA[RSS Feed of minjun.blog]]>https://minjun.blogGatsbyJSWed, 18 Sep 2024 11:49:24 GMT<![CDATA[sigchi 2024 관심 주제]]>https://minjun.blog/interesting topic among sigchi 2024/https://minjun.blog/interesting topic among sigchi 2024/Sat, 07 Sep 2024 12:35:24 GMT<h2><a href="https://programs.sigchi.org/chi/2024/program/content/147838">1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality</a></h2> +<h3>Intro 요약</h3> +<p>다시금 달에 가기 위해 인력, 통신, 하드웨어, 소프트웨어 및 데이터 등 새로운 솔루션들이 뒷받침되고 있음. 달과 같은 더 밝은 빛, 더 어두운 그림자, 감소된 중력이 있는 상황 속에서 우주인이 부피가 크고 제한적인 우주복을 입고 장애물을 탐색해야함. 이러한 독특한 상황들을 시뮬레이션 하기 위해 VR이 활용되고 있음.</p> +<p>VR은 달의 환경 조건을 시각화하고 예상되는 시나리오를 테스트하는데 이상적인 도구이지만 시청각적 특성만 제현가능하다는 점 때문에 달을 완벽히 구현하는데 한계가 있음.</p> +<p><strong>본 연구에서는 장갑과 물리적 모형을 이용해 실제와 비슷한 촉각적, 운동 감각을 구현</strong>하고 가상 신체에 대한 구체화 감각을 향상시키려는 노력을 함.</p> +<h2><a href="https://programs.sigchi.org/chi/2024/program/content/147082">2. “I know I have this till my Last Breath”: Unmasking the Gaps in Chronic Obstructive Pulmonary Disease (COPD) Care in India</a></h2> +<h3>Intro 요약</h3> +<p>비전염성 질환(NCD: Non-communicable disease)은 전 세계 사망자의 74%를 차지함. 이러한 비전염성 질환 중 만성 호흡기 질환(CRD: Chronic Respiratory Diseases)은 사망률에 크게 기여함. 최근 20년 사이에 사망률 28.5%, 유병률 39.8% 증가. 그 중 만성 폐쇄성 폐질환(COPD: Chronic Obstructive Pulmonary Disease)은 흔하지만 진단하기가 어려워 전 세계 사망 원인 중 3위를 차지함. 세계보건기구(WHO)는 심각성을 인지하고 NCD 예방 및 관리를 위한 세계 행동 계획과 지속 가능한 개발을 UN 2030 의제에 포함 시킴.</p> +<p><strong>COPD와 같은 CRD로 인한 사망의 90%는 저소득 및 중소득 국가에서 발생</strong>. 2016년, CRD는 인도의 총 사망 및 장애 조정 생명 연수(DALY)의 10.9%와 6.4%를 차지, 이 중 CRD로 인한 총 DALY의 75.6%가 COPD에 기인. <strong>인도의 의료 인프라에 불균형이 있기 때문</strong>. 대기 오염이 심화되면서 인도에 상당한 사회경제적 부담이 생김. 2016년 인도에서 COPD로 인한 총 DALY 중 53.7%가 대기 오염에 기인. 병원과 병상이 인도 인구에 비해 현저히 적음.</p> +<p>HCI 연구원들은 최근 몇 년 동안 CRD에 점점 더 관심을 보이고 있으며 디지털 건강 모니터링 및 웨어러블 장치, 원격 진료 및 원격 의료 솔루션, 행동 개입 및 게임화, 자기 관리를 포함한 CRD 치료의 다양한 측면을 다루고 있음.</p> +<h2><a href="https://programs.sigchi.org/chi/2024/program/content/146904">3. Evaluating ActuAir: Building Occupants' Experiences of a Shape-Changing Air Quality Display</a></h2> +<h3>Intro 요약</h3> +<p>건물이 점점 더 센서가 많아지고 기후 변화 압박 속에서 인식 및 웰빙 목적으로 건물 내 환경 데이터를 사용하는 데 대한 관심이 커지고 있음. 그에 비해 대형 모양 변경 디스플레이를 중심으로 한 연구에서는 거주자의 공기 질 데이터 경험에 대한 연구는 별로 없음.</p> +<p>ActuAir 시스템은 생체 모방 개념에서 영감을 받은 모듈식 맞춤형 룸 디바이더로, 팽창과 LED 애니메이션으로 AQ(Air Quality)를 표시. 이와 같은 대규모 소프트 로봇 및 모양 변경 반응형 아키텍쳐는 미래 스마트 빌딩 설계 및 HCI/HBI 연구에 기여함.</p><![CDATA[Measuring Performance]]>https://minjun.blog/1-2. Measuring Performance/https://minjun.blog/1-2. Measuring Performance/Mon, 22 Jul 2024 15:40:24 GMT<p>contents: <a href="/0-1.%20CA%20Intro" data-wiki-link="true">0-1. CA Intro</a></p> <h2>Measuring CPU performance</h2> <ul> <li>Clock period: the duration of a clock cycle diff --git a/search/index.html b/search/index.html index 758f25e..6afc063 100644 --- a/search/index.html +++ b/search/index.html @@ -65,7 +65,7 @@ .hlgCLY{margin-bottom:32px;line-height:1.7;font-size:16px;color:#404040;word-break:break-all;}/*!sc*/ data-styled.g53[id="PostList__Excerpt-sc-1oqnm6-3"]{content:"hlgCLY,"}/*!sc*/ .cUecZP{height:70px;}/*!sc*/ -data-styled.g64[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUecZP,"}/*!sc*/ +data-styled.g59[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUecZP,"}/*!sc*/ .eihHri{position:relative;}/*!sc*/ data-styled.g69[id="TextField__Wrapper-sc-x9cxl4-0"]{content:"eihHri,"}/*!sc*/ .jIHunx{position:absolute;top:12px;left:18px;font-size:20px;color:#ced4da;text-shadow:0 0 5px #ced4da;-webkit-transition:all 0.2s;transition:all 0.2s;}/*!sc*/ @@ -80,11 +80,11 @@ .kFkBYn{margin-bottom:25.6px;line-height:1.2;font-size:18px;font-weight:700;}/*!sc*/ @media (max-width:768px){.kFkBYn{padding:0 15px;}}/*!sc*/ data-styled.g73[id="search__PostsCount-sc-1ljtwq8-1"]{content:"kFkBYn,"}/*!sc*/ -minjun.blog

14 개의 글이 있습니다.

Representing Instructions in computer

2024년 07월 31일 15:07

contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic & logic unit (ALU) does the operation hold the va…


Design principles 4 of MIPS ISA

2024년 07월 31일 15:07

contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to encode instructions and data in well-formed binary. D…


Design principles 1~3 of MIPS ISA

2024년 07월 22일 16:07

contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favors regularity Smaller is faster Make the common ca…


Measuring Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic operation Clock rate (frequency): How many basic o…


Defining Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to single task e.g., how long it takes to do a single …


CA Overview

2024년 07월 22일 14:07

contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems software Compilers: translate high-level language to…


Computer Architecture Intro

2024년 07월 22일 12:07

Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. -특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites C 프로그래밍, 논리회로, 어셈블리어를 알면 더욱 좋습니다. Textbooks 본 페이지…


2024년 상반기 회고

2024년 07월 20일 20:07

지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상태인데 엇복학은 힘들 것 같아서 내년에 복학할 예정이고 대신 학부연구생은 하반기부터 진행할…


기존 블로그 대신 Obsidian을 택한 이유

2024년 01월 10일 13:01

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다. 생산성 내가 원한 건 생산성 딱 하나였…


2023년 회고

2024년 01월 08일 12:01

지난 회고: retrospect-2022-2 이제 막 옵시디언으로 넘어왔는데 이 글이 옵시디언으로 기록하는 첫 번째 글이 되지 않을까싶다. 원래 2023년은 군대로 모든 시간을 보내서 회고를 안쓰려고 했는데 오늘이 입대한 지 딱 1년이 됐고, 그 1년동안 내가 무슨 생각을 가지고 살았는지, 전역 후에 내가 어떤 목표를 가지고 살아야하는지 한 번쯤은 정리해…

+minjun.blog

15 개의 글이 있습니다.

sigchi 2024 관심 주제

2024년 09월 07일 12:09

1. Touching the Moon: Leveraging Passive Haptics, Embodiment and Presence for Operational Assessments in Virtual Reality Intro 요약 다시금 달에 가기 위해 인력, 통신, 하드웨어, 소프트웨어 및 데이터 등 새로운 솔루션들이 뒷받침되고 있음. 달과 같은 더 …


Representing Instructions in computer

2024년 07월 31일 15:07

contents: 0-1. CA Intro Common HW design for MIPS ISA CPU, register, and memory Control unit (CU) directs the operation of the processor Arithmetic & logic unit (ALU) does the operation hold the va…


Design principles 4 of MIPS ISA

2024년 07월 31일 15:07

contents: 0-1. CA Intro The assembly language that has been studied so far is not a form that the processor can understand. Therefore, we need to encode instructions and data in well-formed binary. D…


Design principles 1~3 of MIPS ISA

2024년 07월 22일 16:07

contents: 0-1. CA Intro MIPS ISA What is MIPS ISA Microprocessor without Interlocked Pipelined Stages A kind of ISA Design principles Simplicity favors regularity Smaller is faster Make the common ca…


Measuring Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Measuring CPU performance Clock period: the duration of a clock cycle How long the computer takes to perform a single basic operation Clock rate (frequency): How many basic o…


Defining Performance

2024년 07월 22일 15:07

contents: 0-1. CA Intro Two metrics for defining computer performances Response time The time between the start and completion of a task related to single task e.g., how long it takes to do a single …


CA Overview

2024년 07월 22일 14:07

contents: 0-1. CA Intro Below your program A simplified view of hardware and software Applications software Written in high-level language Systems software Compilers: translate high-level language to…


Computer Architecture Intro

2024년 07월 22일 12:07

Course Description 본 스터디에서는 컴퓨터 시스템이 어떻게 구성되어있고 디자인되어있는지 공부합니다. +특히 CPU, memory를 포함한 하드웨어 시스템에 적용되고 있는 디자인 특성들을 알아봅니다. Prerequisites and Co-requisites C 프로그래밍, 논리회로, 어셈블리어를 알면 더욱 좋습니다. Textbooks 본 페이지…


2024년 상반기 회고

2024년 07월 20일 20:07

지난 회고: retrospect-2023 어느덧 24년 상반기가 지나갔다. 2주 전에 전역도 하고 한창 바쁘게 살고 있는 요즘이다. 물론 공부를 그렇게 한다는 건 아니고 자취 준비도 하고 못 만났던 사람들도 열심히 만나고 있다. 학교는 아직 4차 학기밖에 안 끝낸 상태인데 엇복학은 힘들 것 같아서 내년에 복학할 예정이고 대신 학부연구생은 하반기부터 진행할…


기존 블로그 대신 Obsidian을 택한 이유

2024년 01월 10일 13:01

항상 기록의 중요성을 느끼고 있었다. 내가 어떤 걸 배우고 해냈다라는 걸 뽑내기 보다는 내 생각들과 학습한 내용들을 구조화해서 나중에 다시 쉽게 찾아볼 수 있도록, 그리고 그게 또 하나의 내 자산이 되기를 원했다. 그래서 제작년부터 이런 저런 툴을 사용해보며 블로깅을 해왔는데 결국은 하나같이 다 마음에 들지 않았다. 생산성 내가 원한 건 생산성 딱 하나였…

- \ No newline at end of file + \ No newline at end of file diff --git a/series/index.html b/series/index.html index 1f40e47..5a24880 100644 --- a/series/index.html +++ b/series/index.html @@ -51,28 +51,28 @@ .hlSpe > a{-webkit-text-decoration:none;text-decoration:none;color:inherit;-webkit-transition:all 0.2s;transition:all 0.2s;}/*!sc*/ .hlSpe > a:hover{color:#404040;}/*!sc*/ data-styled.g49[id="Title__Wrapper-sc-1ttlsnf-0"]{content:"kdouQu,hlSpe,"}/*!sc*/ +.cUecYB{height:32px;}/*!sc*/ +data-styled.g59[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUecYB,"}/*!sc*/ .lbtNvt{margin-bottom:60px;}/*!sc*/ @media (max-width:768px){.lbtNvt{padding:0 10px;}}/*!sc*/ -data-styled.g59[id="SeriesList__SeriesListWrapper-sc-1c0vrq-0"]{content:"lbtNvt,"}/*!sc*/ +data-styled.g62[id="SeriesList__SeriesListWrapper-sc-1c0vrq-0"]{content:"lbtNvt,"}/*!sc*/ .grWXzE{position:relative;top:0;-webkit-transition:all 0.5s;transition:all 0.5s;}/*!sc*/ @media (max-width:768px){.grWXzE{padding:0 5px;}}/*!sc*/ -data-styled.g60[id="SeriesList__SeriesWrapper-sc-1c0vrq-1"]{content:"grWXzE,"}/*!sc*/ +data-styled.g63[id="SeriesList__SeriesWrapper-sc-1c0vrq-1"]{content:"grWXzE,"}/*!sc*/ .lfUtLY{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#868e96;}/*!sc*/ .lfUtLY > span{margin:0 5px;}/*!sc*/ -data-styled.g61[id="SeriesList__SeriesInform-sc-1c0vrq-2"]{content:"lfUtLY,"}/*!sc*/ +data-styled.g64[id="SeriesList__SeriesInform-sc-1c0vrq-2"]{content:"lfUtLY,"}/*!sc*/ .OdjCA{font-size:14.4px;}/*!sc*/ -data-styled.g62[id="SeriesList__Date-sc-1c0vrq-3"]{content:"OdjCA,"}/*!sc*/ +data-styled.g65[id="SeriesList__Date-sc-1c0vrq-3"]{content:"OdjCA,"}/*!sc*/ .iFkdKs{font-size:14.4px;}/*!sc*/ -data-styled.g63[id="SeriesList__PostCount-sc-1c0vrq-4"]{content:"iFkdKs,"}/*!sc*/ -.cUecYB{height:32px;}/*!sc*/ -data-styled.g64[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUecYB,"}/*!sc*/ +data-styled.g66[id="SeriesList__PostCount-sc-1c0vrq-4"]{content:"iFkdKs,"}/*!sc*/ .hDPUci{margin-top:20px;}/*!sc*/ @media (max-width:768px){.hDPUci{padding:0 15px;}}/*!sc*/ -data-styled.g66[id="series__TagListWrapper-sc-gipkj1-0"]{content:"hDPUci,"}/*!sc*/ +data-styled.g68[id="series__TagListWrapper-sc-gipkj1-0"]{content:"hDPUci,"}/*!sc*/ minjun.blog

There are 1 series.

기록과 방향성에 대한 회고

4 Posts

·

Last updated on 2024년 07월 20일 20:07

- \ No newline at end of file + \ No newline at end of file diff --git "a/series/\352\270\260\353\241\235\352\263\274-\353\260\251\355\226\245\354\204\261\354\227\220-\353\214\200\355\225\234-\355\232\214\352\263\240/index.html" "b/series/\352\270\260\353\241\235\352\263\274-\353\260\251\355\226\245\354\204\261\354\227\220-\353\214\200\355\225\234-\355\232\214\352\263\240/index.html" index 17892a7..067ea33 100644 --- "a/series/\352\270\260\353\241\235\352\263\274-\353\260\251\355\226\245\354\204\261\354\227\220-\353\214\200\355\225\234-\355\232\214\352\263\240/index.html" +++ "b/series/\352\270\260\353\241\235\352\263\274-\353\260\251\355\226\245\354\204\261\354\227\220-\353\214\200\355\225\234-\355\232\214\352\263\240/index.html" @@ -82,6 +82,6 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/sitemap-0.xml b/sitemap-0.xml index 03fb756..379604c 100644 --- a/sitemap-0.xml +++ b/sitemap-0.xml @@ -1 +1 @@ -https://minjun.blog/retrospect-2022-1/daily0.7https://minjun.blog/nuxt-katex/daily0.7https://minjun.blog/after-jigeumgeuddae/daily0.7https://minjun.blog/retrospect-2022-2/daily0.7https://minjun.blog/retrospect-2023/daily0.7https://minjun.blog/why-obsidian/daily0.7https://minjun.blog/retrospect-2024-1/daily0.7https://minjun.blog/0-1.%20CA%20Intro/daily0.7https://minjun.blog/0-2.%20CA%20Overview/daily0.7https://minjun.blog/1-1.%20Defining%20Performance/daily0.7https://minjun.blog/1-2.%20Measuring%20Performance/daily0.7https://minjun.blog/2-1.%20Designing%20principles%201~3%20of%20MIPS%20ISA/daily0.7https://minjun.blog/2-2.%20Design%20principles%204%20of%20MIPS%20ISA/daily0.7https://minjun.blog/2-3.%20Representing%20Instructions%20in%20computer/daily0.7https://minjun.blog/series/%EA%B8%B0%EB%A1%9D%EA%B3%BC-%EB%B0%A9%ED%96%A5%EC%84%B1%EC%97%90-%EB%8C%80%ED%95%9C-%ED%9A%8C%EA%B3%A0/daily0.7https://minjun.blog/all/daily0.7https://minjun.blog/daily0.7https://minjun.blog/search/daily0.7https://minjun.blog/series/daily0.7https://minjun.blog/tags/daily0.7 \ No newline at end of file +https://minjun.blog/retrospect-2022-1/daily0.7https://minjun.blog/nuxt-katex/daily0.7https://minjun.blog/after-jigeumgeuddae/daily0.7https://minjun.blog/retrospect-2022-2/daily0.7https://minjun.blog/retrospect-2023/daily0.7https://minjun.blog/why-obsidian/daily0.7https://minjun.blog/retrospect-2024-1/daily0.7https://minjun.blog/0-1.%20CA%20Intro/daily0.7https://minjun.blog/0-2.%20CA%20Overview/daily0.7https://minjun.blog/1-1.%20Defining%20Performance/daily0.7https://minjun.blog/1-2.%20Measuring%20Performance/daily0.7https://minjun.blog/2-1.%20Designing%20principles%201~3%20of%20MIPS%20ISA/daily0.7https://minjun.blog/2-2.%20Design%20principles%204%20of%20MIPS%20ISA/daily0.7https://minjun.blog/2-3.%20Representing%20Instructions%20in%20computer/daily0.7https://minjun.blog/interesting%20topic%20among%20sigchi%202024/daily0.7https://minjun.blog/series/%EA%B8%B0%EB%A1%9D%EA%B3%BC-%EB%B0%A9%ED%96%A5%EC%84%B1%EC%97%90-%EB%8C%80%ED%95%9C-%ED%9A%8C%EA%B3%A0/daily0.7https://minjun.blog/all/daily0.7https://minjun.blog/daily0.7https://minjun.blog/search/daily0.7https://minjun.blog/series/daily0.7https://minjun.blog/tags/daily0.7 \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 2d2e112..f5529bf 100644 --- a/tags/index.html +++ b/tags/index.html @@ -56,14 +56,14 @@ @media (max-width:768px){.euTAqz{padding:0 10px;}}/*!sc*/ data-styled.g50[id="PostList__PostListWrapper-sc-1oqnm6-0"]{content:"euTAqz,"}/*!sc*/ .cUecYB{height:32px;}/*!sc*/ -data-styled.g64[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUecYB,"}/*!sc*/ +data-styled.g59[id="VerticalSpace-sc-fbwjqc-0"]{content:"cUecYB,"}/*!sc*/ .khRKr{margin-top:20px;}/*!sc*/ @media (max-width:768px){.khRKr{padding:0 15px;}}/*!sc*/ -data-styled.g67[id="tags__TagListWrapper-sc-1p0kse9-0"]{content:"khRKr,"}/*!sc*/ -minjun.blog
+data-styled.g60[id="tags__TagListWrapper-sc-1p0kse9-0"]{content:"khRKr,"}/*!sc*/ +minjun.blog
- \ No newline at end of file + \ No newline at end of file diff --git a/webpack-runtime-d0f271c937ea3908169b.js b/webpack-runtime-d0f271c937ea3908169b.js new file mode 100644 index 0000000..b03a9ab --- /dev/null +++ b/webpack-runtime-d0f271c937ea3908169b.js @@ -0,0 +1,2 @@ +!function(){"use strict";var e,t,n,r,o,c={},a={};function i(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={id:e,loaded:!1,exports:{}};return c[e](n,n.exports,i),n.loaded=!0,n.exports}i.m=c,e=[],i.O=function(t,n,r,o){if(!n){var c=1/0;for(s=0;s=o)&&Object.keys(i.O).every((function(e){return i.O[e](n[f])}))?n.splice(f--,1):(a=!1,o0&&e[s-1][2]>o;s--)e[s]=e[s-1];e[s]=[n,r,o]},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},i.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);i.r(o);var c={};t=t||[null,n({}),n([]),n(n)];for(var a=2&r&&e;"object"==typeof a&&!~t.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},i.d(o,c),o},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.f={},i.e=function(e){return Promise.all(Object.keys(i.f).reduce((function(t,n){return i.f[n](e,t),t}),[]))},i.u=function(e){return{62:"742687ace8b903e5caf6234a692958c909077334",81:"component---src-pages-tags-jsx",82:"7c3caac6ccbcbb47fe85751a1b576b7a35334396",154:"component---src-pages-all-jsx",230:"component---src-pages-index-jsx",256:"component---src-pages-404-jsx",260:"277cd099b731cb56ec6ed9808399df13c01b816a",351:"commons",400:"component---src-templates-post-jsx",441:"component---src-pages-series-jsx",445:"1bfc9850",617:"d7eeaac4",778:"c7773329",832:"component---src-templates-series-jsx",874:"1a48c3c1",995:"component---src-pages-search-jsx"}[e]+"-"+{62:"7d60a87121832a7567b0",81:"a6fdda42a8d093db5009",82:"160e4e6a889ebc9f5823",154:"83cd975bbdaba6e76a2f",230:"1e1b3b70aa8550d78b61",256:"e47b4cb7e798033e3bc2",260:"6b2ac93ba744e04b2a9e",351:"4c426105848db22e112a",400:"bf38cba3ec3071b7f885",441:"e73340da6fc6d08d5a94",445:"352aa5521202f308752f",617:"77e208c4507ea6dc52c2",778:"fbfbee0fab93b8a184ab",832:"060ee86f839facf4a835",874:"a100af9d828ff24746c8",995:"f5e2d95e5bd740d0b345"}[e]+".js"},i.miniCssF=function(e){return"styles.ff85f547ea36ba22122e.css"},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="gatsby-starter-hoodie:",i.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var a,f;if(void 0!==n)for(var u=document.getElementsByTagName("script"),s=0;s 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"gatsby-starter-hoodie:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"62\":\"742687ace8b903e5caf6234a692958c909077334\",\"81\":\"component---src-pages-tags-jsx\",\"82\":\"7c3caac6ccbcbb47fe85751a1b576b7a35334396\",\"154\":\"component---src-pages-all-jsx\",\"230\":\"component---src-pages-index-jsx\",\"256\":\"component---src-pages-404-jsx\",\"260\":\"277cd099b731cb56ec6ed9808399df13c01b816a\",\"351\":\"commons\",\"400\":\"component---src-templates-post-jsx\",\"441\":\"component---src-pages-series-jsx\",\"445\":\"1bfc9850\",\"617\":\"d7eeaac4\",\"778\":\"c7773329\",\"832\":\"component---src-templates-series-jsx\",\"874\":\"1a48c3c1\",\"995\":\"component---src-pages-search-jsx\"}[chunkId] + \"-\" + {\"62\":\"7d60a87121832a7567b0\",\"81\":\"a6fdda42a8d093db5009\",\"82\":\"160e4e6a889ebc9f5823\",\"154\":\"83cd975bbdaba6e76a2f\",\"230\":\"1e1b3b70aa8550d78b61\",\"256\":\"e47b4cb7e798033e3bc2\",\"260\":\"6b2ac93ba744e04b2a9e\",\"351\":\"4c426105848db22e112a\",\"400\":\"bf38cba3ec3071b7f885\",\"441\":\"e73340da6fc6d08d5a94\",\"445\":\"352aa5521202f308752f\",\"617\":\"77e208c4507ea6dc52c2\",\"778\":\"fbfbee0fab93b8a184ab\",\"832\":\"060ee86f839facf4a835\",\"874\":\"a100af9d828ff24746c8\",\"995\":\"f5e2d95e5bd740d0b345\"}[chunkId] + \".js\";\n};","// This function allow to reference all chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"styles\" + \".\" + \"ff85f547ea36ba22122e\" + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t658: 0,\n\t532: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(532|658)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkgatsby_starter_hoodie\"] = self[\"webpackChunkgatsby_starter_hoodie\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","m","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","getPrototypeOf","obj","__proto__","t","value","mode","this","then","ns","create","def","current","indexOf","getOwnPropertyNames","forEach","definition","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","window","prop","prototype","hasOwnProperty","call","l","url","done","push","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","children","p","installedChunks","installedChunkData","test","promise","resolve","reject","error","Error","errorType","realSrc","message","name","request","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/webpack.stats.json b/webpack.stats.json index 9891cd3..0e48b31 100644 --- a/webpack.stats.json +++ b/webpack.stats.json @@ -1 +1 @@ -{"name":"build-javascript","namedChunkGroups":{"app":{"name":"app","assets":[{"name":"webpack-runtime-af118a242e7c4d7a8eb5.js","size":4720},{"name":"framework-5991a6d7854d0410764f.js","size":141437},{"name":"styles.ff85f547ea36ba22122e.css","size":142900},{"name":"app-ded2b582df0bc5128a57.js","size":124973}],"filteredAssets":0,"assetsSize":414030,"filteredAuxiliaryAssets":49,"auxiliaryAssetsSize":1842495},"component---src-pages-404-jsx":{"name":"component---src-pages-404-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"component---src-pages-404-jsx-e47b4cb7e798033e3bc2.js","size":877}],"filteredAssets":0,"assetsSize":34852,"filteredAuxiliaryAssets":3,"auxiliaryAssetsSize":1493084},"component---src-pages-all-jsx":{"name":"component---src-pages-all-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"component---src-pages-all-jsx-83cd975bbdaba6e76a2f.js","size":1202}],"filteredAssets":0,"assetsSize":42202,"filteredAuxiliaryAssets":4,"auxiliaryAssetsSize":1527963},"component---src-pages-index-jsx":{"name":"component---src-pages-index-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"c7773329-fbfbee0fab93b8a184ab.js","size":4223},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"component---src-pages-index-jsx-1e1b3b70aa8550d78b61.js","size":8525}],"filteredAssets":0,"assetsSize":71768,"filteredAuxiliaryAssets":6,"auxiliaryAssetsSize":3365071},"component---src-pages-search-jsx":{"name":"component---src-pages-search-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"component---src-pages-search-jsx-f5e2d95e5bd740d0b345.js","size":2850}],"filteredAssets":0,"assetsSize":43850,"filteredAuxiliaryAssets":4,"auxiliaryAssetsSize":1676365},"component---src-pages-series-jsx":{"name":"component---src-pages-series-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","size":4299},{"name":"component---src-pages-series-jsx-e73340da6fc6d08d5a94.js","size":36018}],"filteredAssets":0,"assetsSize":92312,"filteredAuxiliaryAssets":5,"auxiliaryAssetsSize":1840940},"component---src-pages-tags-jsx":{"name":"component---src-pages-tags-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","size":4299},{"name":"component---src-pages-tags-jsx-a6fdda42a8d093db5009.js","size":8506}],"filteredAssets":0,"assetsSize":71825,"filteredAuxiliaryAssets":6,"auxiliaryAssetsSize":1704388},"component---src-templates-post-jsx":{"name":"component---src-templates-post-jsx","assets":[{"name":"framework-5991a6d7854d0410764f.js","size":141437},{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"c7773329-fbfbee0fab93b8a184ab.js","size":4223},{"name":"1a48c3c1-a100af9d828ff24746c8.js","size":640},{"name":"d7eeaac4-77e208c4507ea6dc52c2.js","size":570},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"component---src-templates-post-jsx-dc66b3a12edbd26b20af.js","size":106308}],"filteredAssets":0,"assetsSize":305173,"filteredAuxiliaryAssets":8,"auxiliaryAssetsSize":5539640},"component---src-templates-series-jsx":{"name":"component---src-templates-series-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"component---src-templates-series-jsx-060ee86f839facf4a835.js","size":1838}],"filteredAssets":0,"assetsSize":42838,"filteredAuxiliaryAssets":4,"auxiliaryAssetsSize":1528952}},"assetsByChunkName":{"app":["webpack-runtime-af118a242e7c4d7a8eb5.js","framework-5991a6d7854d0410764f.js","styles.ff85f547ea36ba22122e.css","app-ded2b582df0bc5128a57.js"],"component---src-pages-404-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","component---src-pages-404-jsx-e47b4cb7e798033e3bc2.js"],"component---src-pages-all-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","component---src-pages-all-jsx-83cd975bbdaba6e76a2f.js"],"component---src-pages-index-jsx":["1bfc9850-352aa5521202f308752f.js","c7773329-fbfbee0fab93b8a184ab.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","component---src-pages-index-jsx-1e1b3b70aa8550d78b61.js"],"component---src-pages-search-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","component---src-pages-search-jsx-f5e2d95e5bd740d0b345.js"],"component---src-pages-series-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","component---src-pages-series-jsx-e73340da6fc6d08d5a94.js"],"component---src-pages-tags-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","component---src-pages-tags-jsx-a6fdda42a8d093db5009.js"],"component---src-templates-post-jsx":["framework-5991a6d7854d0410764f.js","1bfc9850-352aa5521202f308752f.js","c7773329-fbfbee0fab93b8a184ab.js","1a48c3c1-a100af9d828ff24746c8.js","d7eeaac4-77e208c4507ea6dc52c2.js","commons-4c426105848db22e112a.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","component---src-templates-post-jsx-dc66b3a12edbd26b20af.js"],"component---src-templates-series-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","component---src-templates-series-jsx-060ee86f839facf4a835.js"]},"childAssetsByChunkName":{}} \ No newline at end of file +{"name":"build-javascript","namedChunkGroups":{"app":{"name":"app","assets":[{"name":"webpack-runtime-d0f271c937ea3908169b.js","size":4720},{"name":"framework-5991a6d7854d0410764f.js","size":141437},{"name":"styles.ff85f547ea36ba22122e.css","size":142900},{"name":"app-ded2b582df0bc5128a57.js","size":124973}],"filteredAssets":0,"assetsSize":414030,"filteredAuxiliaryAssets":49,"auxiliaryAssetsSize":1842495},"component---src-pages-404-jsx":{"name":"component---src-pages-404-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"component---src-pages-404-jsx-e47b4cb7e798033e3bc2.js","size":877}],"filteredAssets":0,"assetsSize":34852,"filteredAuxiliaryAssets":3,"auxiliaryAssetsSize":1493084},"component---src-pages-all-jsx":{"name":"component---src-pages-all-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"component---src-pages-all-jsx-83cd975bbdaba6e76a2f.js","size":1202}],"filteredAssets":0,"assetsSize":42202,"filteredAuxiliaryAssets":4,"auxiliaryAssetsSize":1527963},"component---src-pages-index-jsx":{"name":"component---src-pages-index-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"c7773329-fbfbee0fab93b8a184ab.js","size":4223},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"component---src-pages-index-jsx-1e1b3b70aa8550d78b61.js","size":8525}],"filteredAssets":0,"assetsSize":71768,"filteredAuxiliaryAssets":6,"auxiliaryAssetsSize":3365071},"component---src-pages-search-jsx":{"name":"component---src-pages-search-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"component---src-pages-search-jsx-f5e2d95e5bd740d0b345.js","size":2850}],"filteredAssets":0,"assetsSize":43850,"filteredAuxiliaryAssets":4,"auxiliaryAssetsSize":1676365},"component---src-pages-series-jsx":{"name":"component---src-pages-series-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","size":4299},{"name":"component---src-pages-series-jsx-e73340da6fc6d08d5a94.js","size":36018}],"filteredAssets":0,"assetsSize":92312,"filteredAuxiliaryAssets":5,"auxiliaryAssetsSize":1840940},"component---src-pages-tags-jsx":{"name":"component---src-pages-tags-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","size":4299},{"name":"component---src-pages-tags-jsx-a6fdda42a8d093db5009.js","size":8506}],"filteredAssets":0,"assetsSize":71825,"filteredAuxiliaryAssets":6,"auxiliaryAssetsSize":1704388},"component---src-templates-post-jsx":{"name":"component---src-templates-post-jsx","assets":[{"name":"framework-5991a6d7854d0410764f.js","size":141437},{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"c7773329-fbfbee0fab93b8a184ab.js","size":4223},{"name":"1a48c3c1-a100af9d828ff24746c8.js","size":640},{"name":"d7eeaac4-77e208c4507ea6dc52c2.js","size":570},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","size":18020},{"name":"component---src-templates-post-jsx-bf38cba3ec3071b7f885.js","size":106311}],"filteredAssets":0,"assetsSize":305176,"filteredAuxiliaryAssets":8,"auxiliaryAssetsSize":5539643},"component---src-templates-series-jsx":{"name":"component---src-templates-series-jsx","assets":[{"name":"1bfc9850-352aa5521202f308752f.js","size":7808},{"name":"commons-4c426105848db22e112a.js","size":26167},{"name":"277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","size":7025},{"name":"component---src-templates-series-jsx-060ee86f839facf4a835.js","size":1838}],"filteredAssets":0,"assetsSize":42838,"filteredAuxiliaryAssets":4,"auxiliaryAssetsSize":1528952}},"assetsByChunkName":{"app":["webpack-runtime-d0f271c937ea3908169b.js","framework-5991a6d7854d0410764f.js","styles.ff85f547ea36ba22122e.css","app-ded2b582df0bc5128a57.js"],"component---src-pages-404-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","component---src-pages-404-jsx-e47b4cb7e798033e3bc2.js"],"component---src-pages-all-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","component---src-pages-all-jsx-83cd975bbdaba6e76a2f.js"],"component---src-pages-index-jsx":["1bfc9850-352aa5521202f308752f.js","c7773329-fbfbee0fab93b8a184ab.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","component---src-pages-index-jsx-1e1b3b70aa8550d78b61.js"],"component---src-pages-search-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","component---src-pages-search-jsx-f5e2d95e5bd740d0b345.js"],"component---src-pages-series-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","component---src-pages-series-jsx-e73340da6fc6d08d5a94.js"],"component---src-pages-tags-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","742687ace8b903e5caf6234a692958c909077334-7d60a87121832a7567b0.js","component---src-pages-tags-jsx-a6fdda42a8d093db5009.js"],"component---src-templates-post-jsx":["framework-5991a6d7854d0410764f.js","1bfc9850-352aa5521202f308752f.js","c7773329-fbfbee0fab93b8a184ab.js","1a48c3c1-a100af9d828ff24746c8.js","d7eeaac4-77e208c4507ea6dc52c2.js","commons-4c426105848db22e112a.js","7c3caac6ccbcbb47fe85751a1b576b7a35334396-160e4e6a889ebc9f5823.js","component---src-templates-post-jsx-bf38cba3ec3071b7f885.js"],"component---src-templates-series-jsx":["1bfc9850-352aa5521202f308752f.js","commons-4c426105848db22e112a.js","277cd099b731cb56ec6ed9808399df13c01b816a-6b2ac93ba744e04b2a9e.js","component---src-templates-series-jsx-060ee86f839facf4a835.js"]},"childAssetsByChunkName":{}} \ No newline at end of file diff --git a/why-obsidian/index.html b/why-obsidian/index.html index b509b15..9b0ff46 100644 --- a/why-obsidian/index.html +++ b/why-obsidian/index.html @@ -80,9 +80,9 @@ .erkpHX p{overflow-x:scroll;word-break:break-all;}/*!sc*/ .erkpHX p::-webkit-scrollbar{display:none;}/*!sc*/ .erkpHX h2,.erkpHX h3,.erkpHX h4,.erkpHX h5,.erkpHX h6{margin:11.2px 0 4.8px 0;font-weight:700;}/*!sc*/ -.erkpHX h2{margin-top:60px;margin-bottom:10px;font-size:28px;}/*!sc*/ -.erkpHX h3{margin-top:10px;margin-bottom:16px;font-size:22.4px;}/*!sc*/ -.erkpHX h4{margin-top:70px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ +.erkpHX h2{margin-top:75px;margin-bottom:16px;font-size:24px;}/*!sc*/ +.erkpHX h3{margin-top:50px;margin-bottom:14px;font-size:22.4px;}/*!sc*/ +.erkpHX h4{margin-top:40px;margin-bottom:12px;font-size:17.6px;}/*!sc*/ .erkpHX h5{font-size:16px;}/*!sc*/ .erkpHX h6{font-size:14.4px;}/*!sc*/ .erkpHX strong{font-weight:700;}/*!sc*/ @@ -120,7 +120,7 @@ .erkpHX a{padding:1.6px 0;color:#191919;}/*!sc*/ .erkpHX a:hover{background-color:none;color:#868e96;}/*!sc*/ data-styled.g34[id="StyledMarkdown-sc-lqtcur-0"]{content:"erkpHX,"}/*!sc*/ -code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ +code[class*="language-"],pre[class*="language-"]{margin-bottom:24px;font-size:14.5px;color:#ccc;background:none;font-family:"Bai Jamjuree",monospace;text-align:justify;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;}/*!sc*/ pre[class*="language-"]{padding:1em;overflow:auto;}/*!sc*/ :not(pre) > code[class*="language-"]{padding:0.1em;border-radius:0.3em;white-space:normal;}/*!sc*/ .token.important,.token.bold{font-weight:bold;}/*!sc*/ @@ -185,7 +185,7 @@ .prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:hsl(230,8%,24%);stroke-opacity:1;}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing path,.prism-previewer-easing.prism-previewer-easing line{stroke:hsl(230,8%,24%);}/*!sc*/ .prism-previewer-easing.prism-previewer-easing circle{fill:transparent;}/*!sc*/ -data-styled.g36[id="sc-global-ldYEch1"]{content:"sc-global-ldYEch1,"}/*!sc*/ +data-styled.g36[id="sc-global-bIpVyQ1"]{content:"sc-global-bIpVyQ1,"}/*!sc*/ .bUeHPW{position:relative;margin-bottom:112px;}/*!sc*/ @media (max-width:768px){.bUeHPW{padding:0 15px;}}/*!sc*/ data-styled.g37[id="Body__Wrapper-sc-7hat30-0"]{content:"bUeHPW,"}/*!sc*/ @@ -249,6 +249,6 @@

동기화: Working Copy

- \ No newline at end of file + \ No newline at end of file