diff --git a/404.html b/404.html index bf21490e..c88c1948 100644 --- a/404.html +++ b/404.html @@ -20,13 +20,13 @@ - - + + -

404

How did we get here?
+ - + diff --git a/about.html b/about.html index 702f5d20..d54e3ecc 100644 --- a/about.html +++ b/about.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/assets/css/0.styles.14880031.css b/assets/css/0.styles.8c38f4ba.css similarity index 97% rename from assets/css/0.styles.14880031.css rename to assets/css/0.styles.8c38f4ba.css index 0b473917..51ace317 100644 --- a/assets/css/0.styles.14880031.css +++ b/assets/css/0.styles.8c38f4ba.css @@ -1 +1 @@ -code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;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;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#1bb89b}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#1bb89b}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;-webkit-user-select:none;user-select:none;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#app{transition:background .3s}.homepage .logo,.homepage>.home{padding:0;max-width:unset}.homepage .logo .footer,.homepage .logo .hero,.homepage>.home .footer,.homepage>.home .hero{display:none}.homepage .navbar{opacity:0;transform:translateY(-58px);transition:.3s}.homepage .navbar.show{opacity:1;transform:translateY(0)}.navbar{border:0;box-shadow:0 1px 1rem rgba(0,0,0,.08);transition:background .3s}.navbar .links{background:none!important}.navbar .search-box>input{border-color:transparent;border-radius:.5rem;background-color:#eee}.navbar .search-box>input.focused{background-color:transparent}.navbar .nav-item>a{height:2.4rem}.sidebar{transition:background .3s,transform .2s ease}.page{min-height:100vh;box-sizing:border-box}.nav-item>.dropdown-wrapper .nav-dropdown{border:0;box-shadow:0 .3rem .3rem rgba(0,0,0,.2)}.nav-item>.dropdown-wrapper .nav-dropdown .dropdown-item .nav-link{border-left:2px solid transparent;transition:.3s}.nav-item>.dropdown-wrapper .nav-dropdown .dropdown-item .nav-link.router-link-active{border-left-color:#1bb89b}.nav-item>.dropdown-wrapper .nav-dropdown .dropdown-item .nav-link:after{content:none}main{overflow-x:hidden}img[alt=win7simu]{width:45px;height:45px;vertical-align:bottom}.banner{margin:1rem 0;width:100%}.embed-responsive iframe{display:block;margin:auto;max-width:100%}.contains-task-list{list-style:none;padding:0}.contains-task-list input{margin:0 8px 0 0;transform:scale(1.2)}@media (max-width:719px){.nav-item>.dropdown-wrapper .nav-dropdown{box-shadow:none}}.nav-item:nth-child(2):before{content:"";position:absolute;z-index:-1;top:50%;left:30%;width:64px;height:64px;background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjU2NiAzLjU4NmE1IDUgMCAwMC0zLjUzIDYuMTI4bDMuNjM4IDEzLjUxOSA0LjgwNy01LjIyOSA2Ljc4MSAyLjExLTMuNjM3LTEzLjUxOGE1IDUgMCAwMC02LjEyOC0zLjUzbC0xLjkzMS41MnptLjA3NiA2LjU1Yy4wODMuMzA3LjA5NS41ODMuMDM2LjgzYTEuMjUgMS4yNSAwIDAxLS4zNC42MTkgMS4zOCAxLjM4IDAgMDEtLjYyMy4zNDljLS4yNS4wNjctLjQ4OS4wNy0uNzE4LjAxYTEuMjU0IDEuMjU0IDAgMDEtLjYwMy0uMzY1IDEuNjkgMS42OSAwIDAxLS4zODMtLjczNCAxLjY5NCAxLjY5NCAwIDAxLS4wMzctLjgyOWMuMDU3LS4yNDYuMTctLjQ1MS4zMzgtLjYxNy4xNjgtLjE2Ny4zNzctLjI4NC42MjYtLjM1MS4yNDgtLjA2Ny40ODctLjA3LjcxNi0uMDEuMjMuMDU5LjQzLjE4LjYwNC4zNjQuMTczLjE4My4zMDIuNDI4LjM4NC43MzV6bS0uNjAyLjE2M2ExLjMgMS4zIDAgMDAtLjIyNC0uNDc4LjcwNC43MDQgMCAwMC0uMzMyLS4yNDMuNjkyLjY5MiAwIDAwLS40MDQtLjAwNS42OTIuNjkyIDAgMDAtLjM0OC4yMDcuNzEyLjcxMiAwIDAwLS4xNjYuMzc3Yy0uMDIyLjE1Mi0uMDA2LjMyNy4wNDcuNTI2LjA1NC4xOTguMTI4LjM1Ny4yMjMuNDc4LjA5Ni4xMi4yMDcuMjAxLjMzMy4yNDMuMTI2LjA0MS4yNjEuMDQzLjQwNS4wMDRhLjY5Mi42OTIgMCAwMC4zNDctLjIwNi43MDQuNzA0IDAgMDAuMTY1LS4zNzcgMS4zIDEuMyAwIDAwLS4wNDYtLjUyNnptMS40MiAxLjEyNGwtLjc1Ni0yLjgxIDEuMTA4LS4yOTdjLjIxMy0uMDU4LjQwNi0uMDY2LjU3OC0uMDI1LjE3MS4wNC4zMTYuMTIyLjQzMy4yNDQuMTE4LjEyMS4yMDIuMjc1LjI1Mi40NjIuMDUuMTg2LjA1NS4zNjIuMDEzLjUyNmEuODYyLjg2MiAwIDAxLS4yNi40MjdjLS4xMzEuMTItLjMwNC4yMS0uNTIuMjY4bC0uNS4xMzQuMjQ2LjkxMS0uNTk0LjE2em0uNjI0LTEuNjU1bC0uNDAzLjEwOC0uMjUyLS45MzYuNC0uMTA4YS42MzMuNjMzIDAgMDEuMzAxLS4wMTguMzkuMzkgMCAwMS4yMTIuMTE4Yy4wNTYuMDYuMDk2LjEzNi4xMjIuMjMuMDI0LjA5Mi4wMjguMTc4LjAxLjI2YS40MDQuNDA0IDAgMDEtLjEyMy4yMS42Mi42MiAwIDAxLS4yNjcuMTM2em0xLjg3Ny45ODJsLS43NTYtMi44MSAxLjg5My0uNTA4LjEzMi40OS0xLjMuMzQ5LjE4LjY3IDEuMjAyLS4zMjQuMTMyLjQ5LTEuMjAxLjMyMy4xOC42NyAxLjMwNC0uMzUuMTMyLjQ5LTEuODk4LjUxem0zLjk1OS00LjA3OGwuNzU2IDIuODEtLjUxMy4xMzctMS42OTgtMS40MzktLjAyLjAwNi40NzUgMS43NjgtLjU5NC4xNi0uNzU2LTIuODEuNTIxLS4xNCAxLjY4OCAxLjQ0LjAyNS0uMDA2LS40NzUtMS43NjcuNTktLjE1OXptLTcuODQgMTAuM2wtLjc1Ny0yLjgwOSAxLjEyNS0uMzAyYy4yMDctLjA1Ni4zODctLjA3Mi41NDItLjA0OGEuNzExLjcxMSAwIDAxLjM4LjE3MmMuMDk4LjA4OS4xNjcuMjA0LjIwNC4zNDVhLjU4OC41ODggMCAwMS0uMTE0LjU1OS43Ny43NyAwIDAxLS4yMy4xOGwuMDA3LjAyOGEuNjY0LjY2NCAwIDAxLjYxNy4xODMuNzE2LjcxNiAwIDAxLjE4My4zMzMuNzU2Ljc1NiAwIDAxLS4wMDMuNDI5Ljc3NS43NzUgMCAwMS0uMjUxLjM2MyAxLjI4NCAxLjI4NCAwIDAxLS41MDQuMjQ0bC0xLjIuMzIzem0uNDYyLS42NDVsLjQ4NS0uMTNjLjE2NS0uMDQ1LjI3Ny0uMTA5LjMzNi0uMTkyYS4zMjguMzI4IDAgMDAuMDQ1LS4yODYuMzkuMzkgMCAwMC0uMTExLS4xOS4zOTYuMzk2IDAgMDAtLjE5OC0uMDk4LjU3LjU3IDAgMDAtLjI2LjAxNmwtLjQ5Ny4xMzQuMi43NDZ6bS0uMzA5LTEuMTQ4bC40NC0uMTE5YS41NDMuNTQzIDAgMDAuMjA2LS4xLjM3NC4zNzQgMCAwMC4xMTgtLjE2NC4zMzMuMzMzIDAgMDAuMDA1LS4yMDYuMzIuMzIgMCAwMC0uMTc1LS4yMTcuNDY1LjQ2NSAwIDAwLS4zMy0uMDFsLS40NS4xMi4xODYuNjk2em0yLjQgMS4xMDZsLS43NTYtMi44MDkgMS44OTMtLjUxLjEzMi40OS0xLjMuMzUuMTguNjcgMS4yMDItLjMyNC4xMzIuNDktMS4yMDEuMzIzLjE4LjY3IDEuMzA0LS4zNS4xMzIuNDktMS44OTguNTF6bTEuNjM0LTIuOTI3bC0uMTMyLS40OSAyLjMwNy0uNjIuMTMyLjQ5LS44Ni4yMy42MjQgMi4zMi0uNTg3LjE1OC0uNjI0LTIuMzItLjg2LjIzMnptMy40NTIgMS41NTlsLS42MzYuMTcxLjIxMy0zLjA3Ljc2Ni0uMjA2IDEuNzI0IDIuNTQ5LS42MzYuMTctLjM4LS41ODQtMS4wMTUuMjczLS4wMzYuNjk3em0uMTQ0LTIuMzYzbC42My45Ny0uNzEyLjE5Mi4wNi0xLjE1Ni4wMjItLjAwNnptLTUuNTktNi40NzZjLjUzMi0uMTQzLjg1NC0uNjcuNzE4LTEuMTc3LS4xMzYtLjUwNi0uNjgtLjgtMS4yMTMtLjY1Ny0uNTMzLjE0My0uODU1LjY3LS43MTggMS4xNzcuMTM2LjUwNy42NzkuOCAxLjIxMi42NTd6IiBmaWxsPSIjRUU0QjRCIi8+PC9zdmc+") no-repeat;background-size:100%}.is-dark{color:#ededed;background:#1c1c1c}.is-dark .homepage section:first-child{background-image:url(/assets/home-bg-dark.jpg);background-color:transparent}.is-dark .navbar{background:#292929}.is-dark .navbar .links .dropdown-title{color:#ededed}.is-dark .navbar .links .nav-dropdown{background:#363636}.is-dark .navbar .links .nav-dropdown .dropdown-item h4{border-color:#434343}.is-dark .navbar .links .nav-link,.is-dark .navbar .site-name{color:#ededed}.is-dark .navbar .search-box input{background-color:hsla(0,0%,100%,.08);color:#eaeaea}.is-dark .sidebar{background:#212121;border-color:transparent}.is-dark .sidebar-link,.is-dark .sidebar .mobile-dropdown-title{color:#ededed}.is-dark .custom-block.tip{background:hsla(0,0%,100%,.08)}.is-dark .custom-block.warning{color:gold}.is-dark .custom-block.warning .custom-block-title{color:#ff0}.is-dark table td,.is-dark table th{border-color:#363636}.is-dark table tr:nth-child(2n){background:hsla(0,0%,100%,.08)}.is-dark h2{border-color:#434343}.is-dark code{color:#ededed;background-color:hsla(0,0%,100%,.08)}.is-dark .page-nav .inner{border-color:#434343}.is-dark .page-edit .last-updated .prefix{color:#ededed}.is-dark .page-edit .last-updated .time{color:#bebebe}.is-dark .content__default>footer{border-color:#434343;color:#eaeaea}.changelog h2{border:none;font-size:2rem;font-weight:700}.changelog .content__default ul:not(.social-share-list){margin-left:1rem}.changelog .sidebar .sidebar-sub-headers{padding-left:2.5rem;position:relative}.changelog .sidebar .sidebar-sub-headers:before{content:"";position:absolute;width:2px;height:100%;background:#eee}.changelog .sidebar .sidebar-sub-headers li a{padding-left:1rem}#nprogress{pointer-events:none}#nprogress .bar{background:#1bb89b;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #1bb89b,0 0 5px #1bb89b;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#1bb89b transparent transparent #1bb89b;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}html{scroll-behavior:smooth}.social-share{position:relative;box-sizing:border-box}.social-share-list{list-style:none;padding:0;margin:0;line-height:1}.social-share-network{position:relative;display:inline-block;vertical-align:middle}.social-share-trigger{color:#6a8bad}.social-share-btn{position:relative;width:56px;height:56px;padding:0;border-radius:50%;font-size:32px;font-family:inherit;text-align:center;background:none;border:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:all .3s ease-out}.social-share-btn:not(.social-share-trigger){color:#545e66}.social-share-btn:not(.social-share-trigger):hover{background-color:hsla(0,0%,73.7%,.15)}.social-share-icon-svg svg{width:1em!important;height:1em!important;fill:currentColor!important;vertical-align:-.15em!important;overflow:hidden!important}.social-share-icon-img{position:absolute;top:50%;left:50%;display:block;width:1em;height:1em;margin:-.5em 0 0 -.5em;background-repeat:no-repeat;background-position:50%;background-size:contain}.social-share-global{position:fixed;right:0;bottom:50%;z-index:99999;background-color:#fff;border:1px solid #efefef;border-right:none;border-radius:8px 0 0 8px;transform:translateY(50%);transition:all .3s ease-out;box-shadow:-2px 1px 6px rgba(0,0,0,.08)}.social-share-global .social-share-network{display:block}.social-share-global .social-share-btn{width:60px;height:60px;border-radius:5px;font-size:36px}.social-share-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;display:flex;justify-content:center;align-items:center;background-color:rgba(0,0,0,.5);transition:all .3s ease-out;opacity:0}.social-share-overlay.show{opacity:1}.social-share-qrcode{display:block;border-radius:4px;overflow:hidden;box-shadow:0 0 4px rgba(0,0,0,.08)}@media screen and (max-width:719px){.social-share-btn{width:40px;height:40px;font-size:28px}.social-share-global{bottom:15%;border-radius:5px 0 0 5px;transform:translate(0);box-shadow:-1px 1px 3px rgba(0,0,0,.03)}.social-share-global .social-share-btn{width:40px;height:40px;font-size:28px;border-radius:3px}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#1bb89b;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #18a68b}.home .hero .action-button:hover{background-color:#1fd2b1}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#1bb89b}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#1bb89b}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#1bb89b}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#1bb89b}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #1bb89b;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#1bb89b}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #1ecdad}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#1bb89b;border-left-color:#1bb89b}.sidebar-heading.clickable:hover{color:#1bb89b}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#1bb89b}a.sidebar-link.active{font-weight:600;color:#1bb89b;border-left-color:#1bb89b}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.content__default[data-v-4718630c]{max-width:1200px}[data-v-4718630c] .page-edit{display:none}.ad-wrapper{max-width:740px;margin:0 auto}[data-v-20ccf1a2] .page-edit{display:none}.content__default[data-v-1e21e726]{max-width:900px}[data-v-1e21e726] .page-edit{display:none}ins[data-v-1e21e726]{margin:2rem 0}.feature-links[data-v-1e21e726]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));grid-gap:2.5rem 1.5rem;list-style:none;padding:0;margin:0}.feature-links li[data-v-1e21e726]{flex:1 1 200px}.feature-links li a[data-v-1e21e726]{color:currentColor;display:block;text-align:center;transition:color .3s}.feature-links li a .image[data-v-1e21e726]{color:#eee;height:200px;overflow:hidden;border-radius:6px;box-shadow:0 .2rem .6rem rgba(0,0,0,.1);position:relative}.is-dark .feature-links li a .image[data-v-1e21e726]{color:#292929}.feature-links li a .image .icon[data-v-1e21e726]{width:3rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:0}.feature-links li a .image img[data-v-1e21e726]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:top left;object-position:top left;transition:transform .3s ease-out;position:relative;z-index:1}.feature-links li a span[data-v-1e21e726]{display:block;margin-top:5px;font-size:1.2em;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center;text-transform:capitalize}.feature-links li a[data-v-1e21e726]:hover{color:#1bb89b;text-decoration:none}.feature-links li a:hover img[data-v-1e21e726]{transform:scale(1.06)}.content__default[data-v-41cc6025]{margin-bottom:-2.5rem}.ad-wrapper[data-v-41cc6025]{max-width:740px;margin:0 auto}.a-button[data-v-4ef368cc]{background:#545e66;border:0;border-radius:.2rem;box-shadow:0 4px #2c3e50;color:#fff;cursor:pointer;display:inline-block;font-size:1rem;padding:.6rem 1.8rem;transition:transform .2s,box-shadow .2s}.a-button[data-v-4ef368cc]:active{transform:translateY(4px);box-shadow:none}.a-button[data-v-4ef368cc]:hover{text-decoration:none!important}a[data-v-7233fed5]{display:flex;align-items:center;color:#2c3e50;transition:color .3s;margin-right:.5rem}.is-dark a[data-v-7233fed5]{color:#eaeaea}a[data-v-7233fed5]:hover{color:#1bb89b;text-decoration:none!important}a img[data-v-7233fed5]{width:2rem;height:2rem;margin-right:.25rem}button[data-v-0f94617e]{width:24px;height:24px;padding:12px;box-sizing:unset;background:#eee;border:none;border-radius:50%;color:#2c3e50;cursor:pointer;transition:all .2s}button[data-v-0f94617e]:hover{transform:scale(1.15)}button.active[data-v-0f94617e]{transform:scale(1.15);background:#1bb89b;color:#fff}.is-dark button[data-v-0f94617e]:not(.active){background:#292929;color:#aaa}.first-created[data-v-026804f3]{display:flex;align-items:center}.first-created svg[data-v-026804f3]{width:1rem;margin-right:.5rem}.adsbygoogle[data-ad-status=filled][data-v-653796b7]{margin:3rem 0;text-align:center}.banner[data-v-2685687c]{margin:2rem auto}.page-edit[data-v-d53989e8]{padding:0}p[data-v-d53989e8]{text-align:right}b[data-v-d53989e8]{font-weight:500}.Vue-Toastification__container{z-index:9999;position:fixed;padding:4px;width:600px;box-sizing:border-box;display:flex;min-height:100%;color:#fff;flex-direction:column;pointer-events:none}@media only screen and (min-width:600px){.Vue-Toastification__container.top-center,.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right{top:1em}.Vue-Toastification__container.bottom-center,.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right{bottom:1em;flex-direction:column-reverse}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.top-left{left:1em}.Vue-Toastification__container.bottom-left .Vue-Toastification__toast,.Vue-Toastification__container.top-left .Vue-Toastification__toast{margin-right:auto}@supports not (-moz-appearance:none){.Vue-Toastification__container.bottom-left .Vue-Toastification__toast--rtl,.Vue-Toastification__container.top-left .Vue-Toastification__toast--rtl{margin-right:unset;margin-left:auto}}.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.top-right{right:1em}.Vue-Toastification__container.bottom-right .Vue-Toastification__toast,.Vue-Toastification__container.top-right .Vue-Toastification__toast{margin-left:auto}@supports not (-moz-appearance:none){.Vue-Toastification__container.bottom-right .Vue-Toastification__toast--rtl,.Vue-Toastification__container.top-right .Vue-Toastification__toast--rtl{margin-left:unset;margin-right:auto}}.Vue-Toastification__container.bottom-center,.Vue-Toastification__container.top-center{left:50%;margin-left:-300px}.Vue-Toastification__container.bottom-center .Vue-Toastification__toast,.Vue-Toastification__container.top-center .Vue-Toastification__toast{margin-left:auto;margin-right:auto}}@media only screen and (max-width:600px){.Vue-Toastification__container{width:100vw;padding:0;left:0;margin:0}.Vue-Toastification__container .Vue-Toastification__toast{width:100%}.Vue-Toastification__container.top-center,.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right{top:0}.Vue-Toastification__container.bottom-center,.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right{bottom:0;flex-direction:column-reverse}}.Vue-Toastification__toast{display:inline-flex;position:relative;max-height:800px;min-height:64px;box-sizing:border-box;margin-bottom:1rem;padding:22px 24px;border-radius:8px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);justify-content:space-between;font-family:Lato,Helvetica,Roboto,Arial,sans-serif;max-width:600px;min-width:326px;pointer-events:auto;overflow:hidden;transform:translateZ(0);direction:ltr}.Vue-Toastification__toast--rtl{direction:rtl}.Vue-Toastification__toast--default{background-color:#1976d2;color:#fff}.Vue-Toastification__toast--info{background-color:#2196f3;color:#fff}.Vue-Toastification__toast--success{background-color:#4caf50;color:#fff}.Vue-Toastification__toast--error{background-color:#ff5252;color:#fff}.Vue-Toastification__toast--warning{background-color:#ffc107;color:#fff}@media only screen and (max-width:600px){.Vue-Toastification__toast{border-radius:0;margin-bottom:.5rem}}.Vue-Toastification__toast-body{flex:1;line-height:24px;font-size:16px;word-break:break-word;white-space:pre-wrap}.Vue-Toastification__toast-component-body{flex:1}.Vue-Toastification__toast.disable-transition{transition:none!important;animation:none!important}.Vue-Toastification__close-button{font-weight:700;font-size:24px;line-height:24px;background:transparent;outline:none;border:none;padding:0 0 0 10px;cursor:pointer;transition:.3s ease;align-items:center;color:#fff;opacity:.3;transition:visibility 0s,opacity .2s linear}.Vue-Toastification__close-button:focus,.Vue-Toastification__close-button:hover{opacity:1}.Vue-Toastification__toast:not(:hover) .Vue-Toastification__close-button.show-on-hover{opacity:0}.Vue-Toastification__toast--rtl .Vue-Toastification__close-button{padding-left:unset;padding-right:10px}@keyframes scale-x-frames{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Vue-Toastification__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:10000;background-color:hsla(0,0%,100%,.7);transform-origin:left;animation:scale-x-frames linear 1 forwards}.Vue-Toastification__toast--rtl .Vue-Toastification__progress-bar{right:0;left:unset;transform-origin:right}.Vue-Toastification__icon{margin:auto 18px auto 0;background:transparent;outline:none;border:none;padding:0;transition:.3s ease;align-items:center;width:20px;height:100%}.Vue-Toastification__toast--rtl .Vue-Toastification__icon{margin:auto 0 auto 18px}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceOutRight{40%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(1000px,0,0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Vue-Toastification__bounce-enter-active.bottom-left,.Vue-Toastification__bounce-enter-active.top-left{animation-name:bounceInLeft}.Vue-Toastification__bounce-enter-active.bottom-right,.Vue-Toastification__bounce-enter-active.top-right{animation-name:bounceInRight}.Vue-Toastification__bounce-enter-active.top-center{animation-name:bounceInDown}.Vue-Toastification__bounce-enter-active.bottom-center{animation-name:bounceInUp}.Vue-Toastification__bounce-leave-active.bottom-left,.Vue-Toastification__bounce-leave-active.top-left{animation-name:bounceOutLeft}.Vue-Toastification__bounce-leave-active.bottom-right,.Vue-Toastification__bounce-leave-active.top-right{animation-name:bounceOutRight}.Vue-Toastification__bounce-leave-active.top-center{animation-name:bounceOutUp}.Vue-Toastification__bounce-leave-active.bottom-center{animation-name:bounceOutDown}.Vue-Toastification__bounce-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes fadeOutTop{0%{transform:translateY(0);opacity:1}to{transform:translateY(-50px);opacity:0}}@keyframes fadeOutLeft{0%{transform:translateX(0);opacity:1}to{transform:translateX(-50px);opacity:0}}@keyframes fadeOutBottom{0%{transform:translateY(0);opacity:1}to{transform:translateY(50px);opacity:0}}@keyframes fadeOutRight{0%{transform:translateX(0);opacity:1}to{transform:translateX(50px);opacity:0}}@keyframes fadeInLeft{0%{transform:translateX(-50px);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes fadeInRight{0%{transform:translateX(50px);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes fadeInTop{0%{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fadeInBottom{0%{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}.Vue-Toastification__fade-enter-active.bottom-left,.Vue-Toastification__fade-enter-active.top-left{animation-name:fadeInLeft}.Vue-Toastification__fade-enter-active.bottom-right,.Vue-Toastification__fade-enter-active.top-right{animation-name:fadeInRight}.Vue-Toastification__fade-enter-active.top-center{animation-name:fadeInTop}.Vue-Toastification__fade-enter-active.bottom-center{animation-name:fadeInBottom}.Vue-Toastification__fade-leave-active.bottom-left,.Vue-Toastification__fade-leave-active.top-left{animation-name:fadeOutLeft}.Vue-Toastification__fade-leave-active.bottom-right,.Vue-Toastification__fade-leave-active.top-right{animation-name:fadeOutRight}.Vue-Toastification__fade-leave-active.top-center{animation-name:fadeOutTop}.Vue-Toastification__fade-leave-active.bottom-center{animation-name:fadeOutBottom}.Vue-Toastification__fade-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes slideInBlurredLeft{0%{transform:translateX(-1000px) scaleX(2.5) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}to{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredTop{0%{transform:translateY(-1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 0;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredRight{0%{transform:translateX(1000px) scaleX(2.5) scaleY(.2);transform-origin:0 50%;filter:blur(40px);opacity:0}to{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredBottom{0%{transform:translateY(1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideOutBlurredTop{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 0;filter:blur(0);opacity:1}to{transform:translateY(-1000px) scaleY(2) scaleX(.2);transform-origin:50% 0;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredBottom{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateY(1000px) scaleY(2) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredLeft{0%{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateX(-1000px) scaleX(2) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}}@keyframes slideOutBlurredRight{0%{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateX(1000px) scaleX(2) scaleY(.2);transform-origin:0 50%;filter:blur(40px);opacity:0}}.Vue-Toastification__slideBlurred-enter-active.bottom-left,.Vue-Toastification__slideBlurred-enter-active.top-left{animation-name:slideInBlurredLeft}.Vue-Toastification__slideBlurred-enter-active.bottom-right,.Vue-Toastification__slideBlurred-enter-active.top-right{animation-name:slideInBlurredRight}.Vue-Toastification__slideBlurred-enter-active.top-center{animation-name:slideInBlurredTop}.Vue-Toastification__slideBlurred-enter-active.bottom-center{animation-name:slideInBlurredBottom}.Vue-Toastification__slideBlurred-leave-active.bottom-left,.Vue-Toastification__slideBlurred-leave-active.top-left{animation-name:slideOutBlurredLeft}.Vue-Toastification__slideBlurred-leave-active.bottom-right,.Vue-Toastification__slideBlurred-leave-active.top-right{animation-name:slideOutBlurredRight}.Vue-Toastification__slideBlurred-leave-active.top-center{animation-name:slideOutBlurredTop}.Vue-Toastification__slideBlurred-leave-active.bottom-center{animation-name:slideOutBlurredBottom}.Vue-Toastification__slideBlurred-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}.Vue-Toastification__toast--default{background:#292929;box-shadow:none;color:#eaeaea}.Vue-Toastification__close-button{color:#eaeaea}.Vue-Toastification__icon{display:none}.site-settings[data-v-b4971ba2]{position:fixed;right:-40px;bottom:-40px;width:96px;height:96px}.toggle[data-v-b4971ba2]{width:100%;height:100%;padding:20% 54% 54% 20%;background:none;border:none;border-radius:50%;cursor:pointer;background:#1bb89b;transition:transform .2s}.toggle svg[data-v-b4971ba2]{color:#fff}.site-settings:hover .toggle[data-v-b4971ba2],.toggle.active[data-v-b4971ba2]{transform:scale(1.2)}ul[data-v-b4971ba2]{position:absolute;width:100%;height:100%;top:0;left:0;margin:0;padding:0;list-style:none;display:flex;z-index:-1;transform:scale(0)}ul li[data-v-b4971ba2]{position:absolute}ul li[data-v-b4971ba2]:first-child{transform:translateX(-150%)}ul li[data-v-b4971ba2]:nth-child(2){transform:translate(-100%,-100%)}ul li[data-v-b4971ba2]:last-child{transform:translateY(-150%)}.access[data-v-17f3a2e1]{margin:2rem 0;text-align:center}.access a[data-v-17f3a2e1]{display:inline-block;margin:.6rem;transition:transform .2s}.access a[data-v-17f3a2e1]:hover{transform:scale(1.05)}.blog-links[data-v-35f506a6]{display:grid;gap:3rem 2rem;list-style:none;padding:0}.blog-links>li[data-v-35f506a6]{border-radius:1rem;box-shadow:0 .2rem 1rem rgba(0,0,0,.1);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.is-dark .blog-links>li[data-v-35f506a6]{background:#1f1f1f}.blog-links a[data-v-35f506a6]{display:flex;flex-direction:column;color:currentColor;font-weight:unset}.blog-links a[data-v-35f506a6]>:not(.blog-image){padding:0 1rem}.blog-links a .blog-image[data-v-35f506a6]{height:250px;overflow:hidden}.blog-links a .blog-image img[data-v-35f506a6]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .3s ease-out}.blog-links a .first-created[data-v-35f506a6]{font-size:.9rem}.blog-links a h2[data-v-35f506a6]{border-bottom:none;transition:color .3s}.blog-links a[data-v-35f506a6]:hover{text-decoration:none}.blog-links a:hover img[data-v-35f506a6]{transform:scale(1.06)}.blog-links a:hover h2[data-v-35f506a6]{color:#1bb89b}@media (min-width:720px){.blog-links[data-v-35f506a6]{grid-template-columns:1fr 1fr}}@media (min-width:960px){.blog-links[data-v-35f506a6]{grid-template-columns:1fr 1fr 1fr}}.blog-meta[data-v-37d0b7b8]{display:flex;flex-wrap:wrap;justify-content:space-between}div[data-v-051d57d2]{display:flex;align-items:center}div svg[data-v-051d57d2]{width:1rem;height:1rem}ul[data-v-051d57d2]{list-style:none;display:flex;padding:1rem;font-size:.85rem}ul a[data-v-051d57d2]{background:#eee;border-radius:.4rem;color:currentColor;font-weight:400;padding:.3rem .4rem;margin:0 .2rem}ul a[data-v-051d57d2]:hover{text-decoration:underline}.is-dark ul a[data-v-051d57d2]{background:#292929}nav[data-v-7c5b105f]{display:flex;flex-wrap:wrap;justify-content:center;margin:2rem 0}nav a[data-v-7c5b105f]{background:#eee;border-radius:1rem;color:currentColor;margin:.3rem;padding:.6rem;min-width:4rem;text-align:center}nav a.router-link-exact-active[data-v-7c5b105f]{color:#fff;background:#1bb89b}nav a[data-v-7c5b105f]:hover{text-decoration:none!important}.is-dark nav a[data-v-7c5b105f]:not(.router-link-exact-active){background:#292929}@media (min-width:420px){nav a[data-v-7c5b105f]{margin:.5rem;padding:1rem}}section[data-v-a37ba0d0]{margin:0 auto;max-width:740px;padding:2rem 2.5rem}div[data-v-43263439]{margin:.5rem 0}input[data-v-43263439],textarea[data-v-43263439]{outline:none;padding:.5rem 1rem;width:100%;font-size:100%;font-family:inherit;box-sizing:border-box;border-radius:6px;border:1px solid #aaa}input[data-v-43263439]:focus,textarea[data-v-43263439]:focus{border-color:#1bb89b}input.error[data-v-43263439],textarea.error[data-v-43263439]{border-color:red}textarea[data-v-43263439]{height:200px;resize:vertical}.link-buttons[data-v-fe445868]{margin:0 auto 1.8rem;padding:0;list-style:none;display:flex;justify-content:center}.link-buttons a[data-v-fe445868]{display:block;min-width:64px;padding:12px;margin:0 4px;border-radius:8px;box-sizing:border-box;transition-property:transform,box-shadow;transition-duration:.2s;background:#eee;box-shadow:0 3px #d0d0d0;border-bottom:2px solid #d0d0d0}.link-buttons a[data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}.link-buttons a img[data-v-fe445868]{display:block;margin:auto;width:auto}.link-buttons a[data-social=twitter][data-v-fe445868]{background:#1da1f2;box-shadow:0 3px #2f81be;border-bottom:2px solid #2f81be}.link-buttons a[data-social=twitter][data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}.link-buttons a[data-social=github][data-v-fe445868]{background:#333;box-shadow:0 3px #000;border-bottom:2px solid #000}.link-buttons a[data-social=github][data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}.link-buttons a[data-social=youtube][data-v-fe445868]{background:red;box-shadow:0 3px #900;border-bottom:2px solid #900}.link-buttons a[data-social=youtube][data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}footer[data-v-fe445868]{border-top:1px solid #eaecef;color:#2c3e50;padding:2.5rem;text-align:center}.is-dark footer[data-v-fe445868]{border-color:#545e66;color:#eaeaea}.home .footer{padding:0}ul[data-v-59795e29]{list-style:none;margin:0;padding:0}li[data-v-59795e29]{border:1px solid;border-radius:4px;box-sizing:border-box;text-align:center;margin:12px 4px;padding:0 16px;width:100%}h2[data-v-59795e29]{border:0;margin-bottom:0;padding:0}@media (min-width:720px){ul[data-v-59795e29]{display:flex}}.social[data-v-025be346]{display:flex;align-items:center;justify-content:flex-end}.is-dark .social[data-v-025be346] .social-share .social-share-btn{color:#8c8c8c}.social[data-v-025be346] .social-share .social-share-btn:hover{color:#1bb89b}.social[data-v-025be346] .social-share .social-share-btn{width:2.5rem;height:2.5rem;font-size:1.5rem}.social[data-v-025be346] .social-share .social-share-btn>span,section[data-v-568d8f4c]{display:flex;align-items:center;justify-content:center}section[data-v-568d8f4c]{background-image:url(/assets/home-bg.jpg);background-color:#1596f2;background-size:cover;background-attachment:fixed;transition:background .3s;height:100vh;max-height:900px;min-height:500px;box-sizing:border-box;flex-direction:column;position:relative}h1[data-v-568d8f4c]{font-weight:400}button[data-v-568d8f4c]{background:none;border:0;display:block;cursor:pointer;position:relative}button span[data-v-568d8f4c]{display:block;color:#fff;font-size:1.5rem;text-align:center;text-shadow:0 1px 2px #000}button span[data-v-568d8f4c]:first-child{width:150px;height:150px}button span:first-child img[data-v-568d8f4c]{width:100%;height:100%}h1[data-v-568d8f4c]{padding:1rem 2rem;margin:0;color:#fff;text-align:center;text-shadow:0 1px 2px #000;max-width:600px;font-size:3.5rem}.indicator[data-v-568d8f4c]{border:2px solid #fff;border-radius:24px;width:24px;height:36px;position:absolute;bottom:12px}.indicator[data-v-568d8f4c]:before{content:"";position:absolute;width:4px;height:6px;background:#fff;border-radius:2px;top:10%;left:calc(50% - 2px);animation:scroll-down-568d8f4c 1.5s infinite}@media (max-width:640px){h1[data-v-568d8f4c]{font-size:2rem}}@keyframes scroll-down-568d8f4c{0%{opacity:.2;transform:translateY(0)}to{opacity:1;transform:translateY(8px)}}div[data-v-e7a7a3f0]{width:180px;height:200px;flex-shrink:0;overflow:hidden;border-radius:50%}div>iframe[data-v-e7a7a3f0]{border:0;width:180px;height:300px}div[data-v-e7a7a3f0],img[data-v-e7a7a3f0]{margin-right:2rem}.right div[data-v-e7a7a3f0],.right img[data-v-e7a7a3f0]{margin-right:0;margin-left:2rem}@media (max-width:640px){div[data-v-e7a7a3f0],img[data-v-e7a7a3f0]{margin:0!important}}ul[data-v-65ae56a6]{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(2,1fr);gap:2rem}li[data-v-65ae56a6]{background:rgba(0,0,0,.05);border-radius:1rem;padding:3rem;position:relative}li[data-v-65ae56a6]:before{content:"\201C";display:block;font-family:serif;font-size:16rem;opacity:.1;position:absolute;top:-6rem;left:.5rem}li .content[data-v-65ae56a6]{font-style:italic;margin-bottom:2rem}li figure[data-v-65ae56a6]{margin:0;display:flex;align-items:center}li figure img[data-v-65ae56a6]{border-radius:50%}li figcaption[data-v-65ae56a6]{margin-left:2rem}li figcaption .author[data-v-65ae56a6]{font-size:1.2rem;font-weight:700}.is-dark li[data-v-65ae56a6]{background:#292929}@media (max-width:959px){ul[data-v-65ae56a6]{grid-template-columns:none}}@media (max-width:419px){li[data-v-65ae56a6]{padding:2rem}}section[data-v-06508d2a]{padding:8rem 4rem}section>div[data-v-06508d2a]{align-items:center;display:flex;justify-content:center;margin:auto;max-width:1024px}section article>h2[data-v-06508d2a]{border:0;margin-top:0;font-size:2.5rem}section article>p[data-v-06508d2a]{text-align:justify;max-width:640px}section article>footer[data-v-06508d2a]{text-align:right}section article>footer>a[data-v-06508d2a]{display:inline-block;font-size:1rem;padding:.4rem 1.5rem}section article>footer>a[data-v-06508d2a]:not(:first-child){margin-left:8%}section.right>div>[data-v-06508d2a]:first-child{order:1}section.right article>footer[data-v-06508d2a]{text-align:left}section.right article>footer>a[data-v-06508d2a]:not(:first-child){margin-right:8%}section.center footer[data-v-06508d2a],section.center h2[data-v-06508d2a]{text-align:center}section.is-dark[data-v-06508d2a]{background:rgba(0,0,0,.05)}@media (max-width:640px){section[data-v-06508d2a]{padding:4rem 2rem}section>div[data-v-06508d2a]{flex-direction:column}section>div article>footer[data-v-06508d2a],section>div article>h2[data-v-06508d2a]{text-align:center}section.right>div [data-v-06508d2a]:first-child{order:unset}section.right article>footer[data-v-06508d2a],section.right article>h2[data-v-06508d2a]{text-align:center}}ul[data-v-145d0661]{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:2rem;margin:0 0 1rem;padding:0}li[data-v-145d0661]{background:#fff;border-radius:.75rem;box-shadow:0 .2rem 1rem rgba(0,0,0,.1);overflow:hidden}li:hover img[data-v-145d0661]{transform:scale(1.4)}.is-dark li[data-v-145d0661]{background:#292929}span[data-v-145d0661]{display:block;overflow:hidden}span[data-v-145d0661]:last-child{color:#2c3e50;padding:.5rem 1rem;text-align:center}.is-dark span[data-v-145d0661]:last-child{color:#eaeaea}img[data-v-145d0661]{display:block;transform:scale(1.35);transition:transform .3s ease-out}@media (max-width:959px){ul[data-v-145d0661]{grid-template-columns:repeat(2,1fr)}}@media (max-width:719px){ul[data-v-145d0661]{grid-template-columns:none}}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983} \ No newline at end of file +code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;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;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#1bb89b}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#1bb89b}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;-webkit-user-select:none;user-select:none;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#app{transition:background .3s}.homepage .logo,.homepage>.home{padding:0;max-width:unset}.homepage .logo .footer,.homepage .logo .hero,.homepage>.home .footer,.homepage>.home .hero{display:none}.homepage .navbar{opacity:0;transform:translateY(-58px);transition:.3s}.homepage .navbar.show{opacity:1;transform:translateY(0)}.navbar{border:0;box-shadow:0 1px 1rem rgba(0,0,0,.08);transition:background .3s}.navbar .links{background:none!important}.navbar .search-box>input{border-color:transparent;border-radius:.5rem;background-color:#eee}.navbar .search-box>input.focused{background-color:transparent}.navbar .nav-item>a{height:2.4rem}.sidebar{transition:background .3s,transform .2s ease}.page{min-height:100vh;box-sizing:border-box}.nav-item>.dropdown-wrapper .nav-dropdown{border:0;box-shadow:0 .3rem .3rem rgba(0,0,0,.2)}.nav-item>.dropdown-wrapper .nav-dropdown .dropdown-item .nav-link{border-left:2px solid transparent;transition:.3s}.nav-item>.dropdown-wrapper .nav-dropdown .dropdown-item .nav-link.router-link-active{border-left-color:#1bb89b}.nav-item>.dropdown-wrapper .nav-dropdown .dropdown-item .nav-link:after{content:none}main{overflow-x:hidden}img[alt=win7simu]{width:45px;height:45px;vertical-align:bottom}.banner{margin:1rem 0;width:100%}.embed-responsive iframe{display:block;margin:auto;max-width:100%}.contains-task-list{list-style:none;padding:0}.contains-task-list input{margin:0 8px 0 0;transform:scale(1.2)}@media (max-width:719px){.nav-item>.dropdown-wrapper .nav-dropdown{box-shadow:none}}.nav-item:nth-child(2):before{content:"";position:absolute;z-index:-1;top:50%;left:30%;width:64px;height:64px;background:url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04LjU2NiAzLjU4NmE1IDUgMCAwMC0zLjUzIDYuMTI4bDMuNjM4IDEzLjUxOSA0LjgwNy01LjIyOSA2Ljc4MSAyLjExLTMuNjM3LTEzLjUxOGE1IDUgMCAwMC02LjEyOC0zLjUzbC0xLjkzMS41MnptLjA3NiA2LjU1Yy4wODMuMzA3LjA5NS41ODMuMDM2LjgzYTEuMjUgMS4yNSAwIDAxLS4zNC42MTkgMS4zOCAxLjM4IDAgMDEtLjYyMy4zNDljLS4yNS4wNjctLjQ4OS4wNy0uNzE4LjAxYTEuMjU0IDEuMjU0IDAgMDEtLjYwMy0uMzY1IDEuNjkgMS42OSAwIDAxLS4zODMtLjczNCAxLjY5NCAxLjY5NCAwIDAxLS4wMzctLjgyOWMuMDU3LS4yNDYuMTctLjQ1MS4zMzgtLjYxNy4xNjgtLjE2Ny4zNzctLjI4NC42MjYtLjM1MS4yNDgtLjA2Ny40ODctLjA3LjcxNi0uMDEuMjMuMDU5LjQzLjE4LjYwNC4zNjQuMTczLjE4My4zMDIuNDI4LjM4NC43MzV6bS0uNjAyLjE2M2ExLjMgMS4zIDAgMDAtLjIyNC0uNDc4LjcwNC43MDQgMCAwMC0uMzMyLS4yNDMuNjkyLjY5MiAwIDAwLS40MDQtLjAwNS42OTIuNjkyIDAgMDAtLjM0OC4yMDcuNzEyLjcxMiAwIDAwLS4xNjYuMzc3Yy0uMDIyLjE1Mi0uMDA2LjMyNy4wNDcuNTI2LjA1NC4xOTguMTI4LjM1Ny4yMjMuNDc4LjA5Ni4xMi4yMDcuMjAxLjMzMy4yNDMuMTI2LjA0MS4yNjEuMDQzLjQwNS4wMDRhLjY5Mi42OTIgMCAwMC4zNDctLjIwNi43MDQuNzA0IDAgMDAuMTY1LS4zNzcgMS4zIDEuMyAwIDAwLS4wNDYtLjUyNnptMS40MiAxLjEyNGwtLjc1Ni0yLjgxIDEuMTA4LS4yOTdjLjIxMy0uMDU4LjQwNi0uMDY2LjU3OC0uMDI1LjE3MS4wNC4zMTYuMTIyLjQzMy4yNDQuMTE4LjEyMS4yMDIuMjc1LjI1Mi40NjIuMDUuMTg2LjA1NS4zNjIuMDEzLjUyNmEuODYyLjg2MiAwIDAxLS4yNi40MjdjLS4xMzEuMTItLjMwNC4yMS0uNTIuMjY4bC0uNS4xMzQuMjQ2LjkxMS0uNTk0LjE2em0uNjI0LTEuNjU1bC0uNDAzLjEwOC0uMjUyLS45MzYuNC0uMTA4YS42MzMuNjMzIDAgMDEuMzAxLS4wMTguMzkuMzkgMCAwMS4yMTIuMTE4Yy4wNTYuMDYuMDk2LjEzNi4xMjIuMjMuMDI0LjA5Mi4wMjguMTc4LjAxLjI2YS40MDQuNDA0IDAgMDEtLjEyMy4yMS42Mi42MiAwIDAxLS4yNjcuMTM2em0xLjg3Ny45ODJsLS43NTYtMi44MSAxLjg5My0uNTA4LjEzMi40OS0xLjMuMzQ5LjE4LjY3IDEuMjAyLS4zMjQuMTMyLjQ5LTEuMjAxLjMyMy4xOC42NyAxLjMwNC0uMzUuMTMyLjQ5LTEuODk4LjUxem0zLjk1OS00LjA3OGwuNzU2IDIuODEtLjUxMy4xMzctMS42OTgtMS40MzktLjAyLjAwNi40NzUgMS43NjgtLjU5NC4xNi0uNzU2LTIuODEuNTIxLS4xNCAxLjY4OCAxLjQ0LjAyNS0uMDA2LS40NzUtMS43NjcuNTktLjE1OXptLTcuODQgMTAuM2wtLjc1Ny0yLjgwOSAxLjEyNS0uMzAyYy4yMDctLjA1Ni4zODctLjA3Mi41NDItLjA0OGEuNzExLjcxMSAwIDAxLjM4LjE3MmMuMDk4LjA4OS4xNjcuMjA0LjIwNC4zNDVhLjU4OC41ODggMCAwMS0uMTE0LjU1OS43Ny43NyAwIDAxLS4yMy4xOGwuMDA3LjAyOGEuNjY0LjY2NCAwIDAxLjYxNy4xODMuNzE2LjcxNiAwIDAxLjE4My4zMzMuNzU2Ljc1NiAwIDAxLS4wMDMuNDI5Ljc3NS43NzUgMCAwMS0uMjUxLjM2MyAxLjI4NCAxLjI4NCAwIDAxLS41MDQuMjQ0bC0xLjIuMzIzem0uNDYyLS42NDVsLjQ4NS0uMTNjLjE2NS0uMDQ1LjI3Ny0uMTA5LjMzNi0uMTkyYS4zMjguMzI4IDAgMDAuMDQ1LS4yODYuMzkuMzkgMCAwMC0uMTExLS4xOS4zOTYuMzk2IDAgMDAtLjE5OC0uMDk4LjU3LjU3IDAgMDAtLjI2LjAxNmwtLjQ5Ny4xMzQuMi43NDZ6bS0uMzA5LTEuMTQ4bC40NC0uMTE5YS41NDMuNTQzIDAgMDAuMjA2LS4xLjM3NC4zNzQgMCAwMC4xMTgtLjE2NC4zMzMuMzMzIDAgMDAuMDA1LS4yMDYuMzIuMzIgMCAwMC0uMTc1LS4yMTcuNDY1LjQ2NSAwIDAwLS4zMy0uMDFsLS40NS4xMi4xODYuNjk2em0yLjQgMS4xMDZsLS43NTYtMi44MDkgMS44OTMtLjUxLjEzMi40OS0xLjMuMzUuMTguNjcgMS4yMDItLjMyNC4xMzIuNDktMS4yMDEuMzIzLjE4LjY3IDEuMzA0LS4zNS4xMzIuNDktMS44OTguNTF6bTEuNjM0LTIuOTI3bC0uMTMyLS40OSAyLjMwNy0uNjIuMTMyLjQ5LS44Ni4yMy42MjQgMi4zMi0uNTg3LjE1OC0uNjI0LTIuMzItLjg2LjIzMnptMy40NTIgMS41NTlsLS42MzYuMTcxLjIxMy0zLjA3Ljc2Ni0uMjA2IDEuNzI0IDIuNTQ5LS42MzYuMTctLjM4LS41ODQtMS4wMTUuMjczLS4wMzYuNjk3em0uMTQ0LTIuMzYzbC42My45Ny0uNzEyLjE5Mi4wNi0xLjE1Ni4wMjItLjAwNnptLTUuNTktNi40NzZjLjUzMi0uMTQzLjg1NC0uNjcuNzE4LTEuMTc3LS4xMzYtLjUwNi0uNjgtLjgtMS4yMTMtLjY1Ny0uNTMzLjE0My0uODU1LjY3LS43MTggMS4xNzcuMTM2LjUwNy42NzkuOCAxLjIxMi42NTd6IiBmaWxsPSIjRUU0QjRCIi8+PC9zdmc+") no-repeat;background-size:100%}.is-dark{color:#ededed;background:#1c1c1c}.is-dark .homepage section:first-child{background-image:url(/assets/home-bg-dark.jpg);background-color:transparent}.is-dark .navbar{background:#292929}.is-dark .navbar .links .dropdown-title{color:#ededed}.is-dark .navbar .links .nav-dropdown{background:#363636}.is-dark .navbar .links .nav-dropdown .dropdown-item h4{border-color:#434343}.is-dark .navbar .links .nav-link,.is-dark .navbar .site-name{color:#ededed}.is-dark .navbar .search-box input{background-color:hsla(0,0%,100%,.08);color:#eaeaea}.is-dark .sidebar{background:#212121;border-color:transparent}.is-dark .sidebar-link,.is-dark .sidebar .mobile-dropdown-title{color:#ededed}.is-dark .custom-block.tip{background:hsla(0,0%,100%,.08)}.is-dark .custom-block.warning{color:gold}.is-dark .custom-block.warning .custom-block-title{color:#ff0}.is-dark table td,.is-dark table th{border-color:#363636}.is-dark table tr:nth-child(2n){background:hsla(0,0%,100%,.08)}.is-dark h2{border-color:#434343}.is-dark code{color:#ededed;background-color:hsla(0,0%,100%,.08)}.is-dark .page-nav .inner{border-color:#434343}.is-dark .page-edit .last-updated .prefix{color:#ededed}.is-dark .page-edit .last-updated .time{color:#bebebe}.is-dark .content__default>footer{border-color:#434343;color:#eaeaea}.changelog h2{border:none;font-size:2rem;font-weight:700}.changelog .content__default ul:not(.social-share-list){margin-left:1rem}.changelog .sidebar .sidebar-sub-headers{padding-left:2.5rem;position:relative}.changelog .sidebar .sidebar-sub-headers:before{content:"";position:absolute;width:2px;height:100%;background:#eee}.changelog .sidebar .sidebar-sub-headers li a{padding-left:1rem}#nprogress{pointer-events:none}#nprogress .bar{background:#1bb89b;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #1bb89b,0 0 5px #1bb89b;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#1bb89b transparent transparent #1bb89b;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}html{scroll-behavior:smooth}.social-share{position:relative;box-sizing:border-box}.social-share-list{list-style:none;padding:0;margin:0;line-height:1}.social-share-network{position:relative;display:inline-block;vertical-align:middle}.social-share-trigger{color:#6a8bad}.social-share-btn{position:relative;width:56px;height:56px;padding:0;border-radius:50%;font-size:32px;font-family:inherit;text-align:center;background:none;border:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:all .3s ease-out}.social-share-btn:not(.social-share-trigger){color:#545e66}.social-share-btn:not(.social-share-trigger):hover{background-color:hsla(0,0%,73.7%,.15)}.social-share-icon-svg svg{width:1em!important;height:1em!important;fill:currentColor!important;vertical-align:-.15em!important;overflow:hidden!important}.social-share-icon-img{position:absolute;top:50%;left:50%;display:block;width:1em;height:1em;margin:-.5em 0 0 -.5em;background-repeat:no-repeat;background-position:50%;background-size:contain}.social-share-global{position:fixed;right:0;bottom:50%;z-index:99999;background-color:#fff;border:1px solid #efefef;border-right:none;border-radius:8px 0 0 8px;transform:translateY(50%);transition:all .3s ease-out;box-shadow:-2px 1px 6px rgba(0,0,0,.08)}.social-share-global .social-share-network{display:block}.social-share-global .social-share-btn{width:60px;height:60px;border-radius:5px;font-size:36px}.social-share-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;display:flex;justify-content:center;align-items:center;background-color:rgba(0,0,0,.5);transition:all .3s ease-out;opacity:0}.social-share-overlay.show{opacity:1}.social-share-qrcode{display:block;border-radius:4px;overflow:hidden;box-shadow:0 0 4px rgba(0,0,0,.08)}@media screen and (max-width:719px){.social-share-btn{width:40px;height:40px;font-size:28px}.social-share-global{bottom:15%;border-radius:5px 0 0 5px;transform:translate(0);box-shadow:-1px 1px 3px rgba(0,0,0,.03)}.social-share-global .social-share-btn{width:40px;height:40px;font-size:28px;border-radius:3px}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#1bb89b;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #18a68b}.home .hero .action-button:hover{background-color:#1fd2b1}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#1bb89b}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#1bb89b}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#1bb89b}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#1bb89b}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #1bb89b;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#1bb89b}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #1ecdad}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#1bb89b;border-left-color:#1bb89b}.sidebar-heading.clickable:hover{color:#1bb89b}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#1bb89b}a.sidebar-link.active{font-weight:600;color:#1bb89b;border-left-color:#1bb89b}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.content__default[data-v-4718630c]{max-width:1200px}[data-v-4718630c] .page-edit{display:none}.ad-wrapper{max-width:740px;margin:0 auto}[data-v-20ccf1a2] .page-edit{display:none}.content__default[data-v-1e21e726]{max-width:900px}[data-v-1e21e726] .page-edit{display:none}ins[data-v-1e21e726]{margin:2rem 0}.feature-links[data-v-1e21e726]{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));grid-gap:2.5rem 1.5rem;list-style:none;padding:0;margin:0}.feature-links li[data-v-1e21e726]{flex:1 1 200px}.feature-links li a[data-v-1e21e726]{color:currentColor;display:block;text-align:center;transition:color .3s}.feature-links li a .image[data-v-1e21e726]{color:#eee;height:200px;overflow:hidden;border-radius:6px;box-shadow:0 .2rem .6rem rgba(0,0,0,.1);position:relative}.is-dark .feature-links li a .image[data-v-1e21e726]{color:#292929}.feature-links li a .image .icon[data-v-1e21e726]{width:3rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:0}.feature-links li a .image img[data-v-1e21e726]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:top left;object-position:top left;transition:transform .3s ease-out;position:relative;z-index:1}.feature-links li a span[data-v-1e21e726]{display:block;margin-top:5px;font-size:1.2em;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;text-align:center;text-transform:capitalize}.feature-links li a[data-v-1e21e726]:hover{color:#1bb89b;text-decoration:none}.feature-links li a:hover img[data-v-1e21e726]{transform:scale(1.06)}.content__default[data-v-41cc6025]{margin-bottom:-2.5rem}.ad-wrapper[data-v-41cc6025]{max-width:740px;margin:0 auto}.a-button[data-v-4ef368cc]{background:#545e66;border:0;border-radius:.2rem;box-shadow:0 4px #2c3e50;color:#fff;cursor:pointer;display:inline-block;font-size:1rem;padding:.6rem 1.8rem;transition:transform .2s,box-shadow .2s}.a-button[data-v-4ef368cc]:active{transform:translateY(4px);box-shadow:none}.a-button[data-v-4ef368cc]:hover{text-decoration:none!important}a[data-v-7233fed5]{display:flex;align-items:center;color:#2c3e50;transition:color .3s;margin-right:.5rem}.is-dark a[data-v-7233fed5]{color:#eaeaea}a[data-v-7233fed5]:hover{color:#1bb89b;text-decoration:none!important}a img[data-v-7233fed5]{width:2rem;height:2rem;margin-right:.25rem}button[data-v-0f94617e]{width:24px;height:24px;padding:12px;box-sizing:unset;background:#eee;border:none;border-radius:50%;color:#2c3e50;cursor:pointer;transition:all .2s}button[data-v-0f94617e]:hover{transform:scale(1.15)}button.active[data-v-0f94617e]{transform:scale(1.15);background:#1bb89b;color:#fff}.is-dark button[data-v-0f94617e]:not(.active){background:#292929;color:#aaa}.first-created[data-v-026804f3]{display:flex;align-items:center}.first-created svg[data-v-026804f3]{width:1rem;margin-right:.5rem}.adsbygoogle[data-ad-status=filled][data-v-653796b7]{margin:3rem 0;text-align:center}.banner[data-v-2685687c]{margin:2rem auto}.page-edit[data-v-d53989e8]{padding:0}p[data-v-d53989e8]{text-align:right}b[data-v-d53989e8]{font-weight:500}.Vue-Toastification__container{z-index:9999;position:fixed;padding:4px;width:600px;box-sizing:border-box;display:flex;min-height:100%;color:#fff;flex-direction:column;pointer-events:none}@media only screen and (min-width:600px){.Vue-Toastification__container.top-center,.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right{top:1em}.Vue-Toastification__container.bottom-center,.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right{bottom:1em;flex-direction:column-reverse}.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.top-left{left:1em}.Vue-Toastification__container.bottom-left .Vue-Toastification__toast,.Vue-Toastification__container.top-left .Vue-Toastification__toast{margin-right:auto}@supports not (-moz-appearance:none){.Vue-Toastification__container.bottom-left .Vue-Toastification__toast--rtl,.Vue-Toastification__container.top-left .Vue-Toastification__toast--rtl{margin-right:unset;margin-left:auto}}.Vue-Toastification__container.bottom-right,.Vue-Toastification__container.top-right{right:1em}.Vue-Toastification__container.bottom-right .Vue-Toastification__toast,.Vue-Toastification__container.top-right .Vue-Toastification__toast{margin-left:auto}@supports not (-moz-appearance:none){.Vue-Toastification__container.bottom-right .Vue-Toastification__toast--rtl,.Vue-Toastification__container.top-right .Vue-Toastification__toast--rtl{margin-left:unset;margin-right:auto}}.Vue-Toastification__container.bottom-center,.Vue-Toastification__container.top-center{left:50%;margin-left:-300px}.Vue-Toastification__container.bottom-center .Vue-Toastification__toast,.Vue-Toastification__container.top-center .Vue-Toastification__toast{margin-left:auto;margin-right:auto}}@media only screen and (max-width:600px){.Vue-Toastification__container{width:100vw;padding:0;left:0;margin:0}.Vue-Toastification__container .Vue-Toastification__toast{width:100%}.Vue-Toastification__container.top-center,.Vue-Toastification__container.top-left,.Vue-Toastification__container.top-right{top:0}.Vue-Toastification__container.bottom-center,.Vue-Toastification__container.bottom-left,.Vue-Toastification__container.bottom-right{bottom:0;flex-direction:column-reverse}}.Vue-Toastification__toast{display:inline-flex;position:relative;max-height:800px;min-height:64px;box-sizing:border-box;margin-bottom:1rem;padding:22px 24px;border-radius:8px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);justify-content:space-between;font-family:Lato,Helvetica,Roboto,Arial,sans-serif;max-width:600px;min-width:326px;pointer-events:auto;overflow:hidden;transform:translateZ(0);direction:ltr}.Vue-Toastification__toast--rtl{direction:rtl}.Vue-Toastification__toast--default{background-color:#1976d2;color:#fff}.Vue-Toastification__toast--info{background-color:#2196f3;color:#fff}.Vue-Toastification__toast--success{background-color:#4caf50;color:#fff}.Vue-Toastification__toast--error{background-color:#ff5252;color:#fff}.Vue-Toastification__toast--warning{background-color:#ffc107;color:#fff}@media only screen and (max-width:600px){.Vue-Toastification__toast{border-radius:0;margin-bottom:.5rem}}.Vue-Toastification__toast-body{flex:1;line-height:24px;font-size:16px;word-break:break-word;white-space:pre-wrap}.Vue-Toastification__toast-component-body{flex:1}.Vue-Toastification__toast.disable-transition{transition:none!important;animation:none!important}.Vue-Toastification__close-button{font-weight:700;font-size:24px;line-height:24px;background:transparent;outline:none;border:none;padding:0 0 0 10px;cursor:pointer;transition:.3s ease;align-items:center;color:#fff;opacity:.3;transition:visibility 0s,opacity .2s linear}.Vue-Toastification__close-button:focus,.Vue-Toastification__close-button:hover{opacity:1}.Vue-Toastification__toast:not(:hover) .Vue-Toastification__close-button.show-on-hover{opacity:0}.Vue-Toastification__toast--rtl .Vue-Toastification__close-button{padding-left:unset;padding-right:10px}@keyframes scale-x-frames{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.Vue-Toastification__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:10000;background-color:hsla(0,0%,100%,.7);transform-origin:left;animation:scale-x-frames linear 1 forwards}.Vue-Toastification__toast--rtl .Vue-Toastification__progress-bar{right:0;left:unset;transform-origin:right}.Vue-Toastification__icon{margin:auto 18px auto 0;background:transparent;outline:none;border:none;padding:0;transition:.3s ease;align-items:center;width:20px;height:100%}.Vue-Toastification__toast--rtl .Vue-Toastification__icon{margin:auto 0 auto 18px}@keyframes bounceInRight{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}@keyframes bounceOutRight{40%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(1000px,0,0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.Vue-Toastification__bounce-enter-active.bottom-left,.Vue-Toastification__bounce-enter-active.top-left{animation-name:bounceInLeft}.Vue-Toastification__bounce-enter-active.bottom-right,.Vue-Toastification__bounce-enter-active.top-right{animation-name:bounceInRight}.Vue-Toastification__bounce-enter-active.top-center{animation-name:bounceInDown}.Vue-Toastification__bounce-enter-active.bottom-center{animation-name:bounceInUp}.Vue-Toastification__bounce-leave-active.bottom-left,.Vue-Toastification__bounce-leave-active.top-left{animation-name:bounceOutLeft}.Vue-Toastification__bounce-leave-active.bottom-right,.Vue-Toastification__bounce-leave-active.top-right{animation-name:bounceOutRight}.Vue-Toastification__bounce-leave-active.top-center{animation-name:bounceOutUp}.Vue-Toastification__bounce-leave-active.bottom-center{animation-name:bounceOutDown}.Vue-Toastification__bounce-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes fadeOutTop{0%{transform:translateY(0);opacity:1}to{transform:translateY(-50px);opacity:0}}@keyframes fadeOutLeft{0%{transform:translateX(0);opacity:1}to{transform:translateX(-50px);opacity:0}}@keyframes fadeOutBottom{0%{transform:translateY(0);opacity:1}to{transform:translateY(50px);opacity:0}}@keyframes fadeOutRight{0%{transform:translateX(0);opacity:1}to{transform:translateX(50px);opacity:0}}@keyframes fadeInLeft{0%{transform:translateX(-50px);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes fadeInRight{0%{transform:translateX(50px);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes fadeInTop{0%{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes fadeInBottom{0%{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}.Vue-Toastification__fade-enter-active.bottom-left,.Vue-Toastification__fade-enter-active.top-left{animation-name:fadeInLeft}.Vue-Toastification__fade-enter-active.bottom-right,.Vue-Toastification__fade-enter-active.top-right{animation-name:fadeInRight}.Vue-Toastification__fade-enter-active.top-center{animation-name:fadeInTop}.Vue-Toastification__fade-enter-active.bottom-center{animation-name:fadeInBottom}.Vue-Toastification__fade-leave-active.bottom-left,.Vue-Toastification__fade-leave-active.top-left{animation-name:fadeOutLeft}.Vue-Toastification__fade-leave-active.bottom-right,.Vue-Toastification__fade-leave-active.top-right{animation-name:fadeOutRight}.Vue-Toastification__fade-leave-active.top-center{animation-name:fadeOutTop}.Vue-Toastification__fade-leave-active.bottom-center{animation-name:fadeOutBottom}.Vue-Toastification__fade-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}@keyframes slideInBlurredLeft{0%{transform:translateX(-1000px) scaleX(2.5) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}to{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredTop{0%{transform:translateY(-1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 0;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredRight{0%{transform:translateX(1000px) scaleX(2.5) scaleY(.2);transform-origin:0 50%;filter:blur(40px);opacity:0}to{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideInBlurredBottom{0%{transform:translateY(1000px) scaleY(2.5) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}to{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}}@keyframes slideOutBlurredTop{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 0;filter:blur(0);opacity:1}to{transform:translateY(-1000px) scaleY(2) scaleX(.2);transform-origin:50% 0;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredBottom{0%{transform:translateY(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateY(1000px) scaleY(2) scaleX(.2);transform-origin:50% 100%;filter:blur(240px);opacity:0}}@keyframes slideOutBlurredLeft{0%{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateX(-1000px) scaleX(2) scaleY(.2);transform-origin:100% 50%;filter:blur(40px);opacity:0}}@keyframes slideOutBlurredRight{0%{transform:translateX(0) scaleY(1) scaleX(1);transform-origin:50% 50%;filter:blur(0);opacity:1}to{transform:translateX(1000px) scaleX(2) scaleY(.2);transform-origin:0 50%;filter:blur(40px);opacity:0}}.Vue-Toastification__slideBlurred-enter-active.bottom-left,.Vue-Toastification__slideBlurred-enter-active.top-left{animation-name:slideInBlurredLeft}.Vue-Toastification__slideBlurred-enter-active.bottom-right,.Vue-Toastification__slideBlurred-enter-active.top-right{animation-name:slideInBlurredRight}.Vue-Toastification__slideBlurred-enter-active.top-center{animation-name:slideInBlurredTop}.Vue-Toastification__slideBlurred-enter-active.bottom-center{animation-name:slideInBlurredBottom}.Vue-Toastification__slideBlurred-leave-active.bottom-left,.Vue-Toastification__slideBlurred-leave-active.top-left{animation-name:slideOutBlurredLeft}.Vue-Toastification__slideBlurred-leave-active.bottom-right,.Vue-Toastification__slideBlurred-leave-active.top-right{animation-name:slideOutBlurredRight}.Vue-Toastification__slideBlurred-leave-active.top-center{animation-name:slideOutBlurredTop}.Vue-Toastification__slideBlurred-leave-active.bottom-center{animation-name:slideOutBlurredBottom}.Vue-Toastification__slideBlurred-move{transition-timing-function:ease-in-out;transition-property:all;transition-duration:.4s}.Vue-Toastification__toast--default{background:#292929;box-shadow:none;color:#eaeaea}.Vue-Toastification__close-button{color:#eaeaea}.Vue-Toastification__icon{display:none}.site-settings[data-v-b4971ba2]{position:fixed;right:-40px;bottom:-40px;width:96px;height:96px}.toggle[data-v-b4971ba2]{width:100%;height:100%;padding:20% 54% 54% 20%;background:none;border:none;border-radius:50%;cursor:pointer;background:#1bb89b;transition:transform .2s}.toggle svg[data-v-b4971ba2]{color:#fff}.site-settings:hover .toggle[data-v-b4971ba2],.toggle.active[data-v-b4971ba2]{transform:scale(1.2)}ul[data-v-b4971ba2]{position:absolute;width:100%;height:100%;top:0;left:0;margin:0;padding:0;list-style:none;display:flex;z-index:-1;transform:scale(0)}ul li[data-v-b4971ba2]{position:absolute}ul li[data-v-b4971ba2]:first-child{transform:translateX(-150%)}ul li[data-v-b4971ba2]:nth-child(2){transform:translate(-100%,-100%)}ul li[data-v-b4971ba2]:last-child{transform:translateY(-150%)}.access[data-v-17f3a2e1]{margin:2rem 0;text-align:center}.access a[data-v-17f3a2e1]{display:inline-block;margin:.6rem;transition:transform .2s}.access a[data-v-17f3a2e1]:hover{transform:scale(1.05)}.blog-links[data-v-35f506a6]{display:grid;gap:3rem 2rem;list-style:none;padding:0}.blog-links>li[data-v-35f506a6]{border-radius:1rem;box-shadow:0 .2rem 1rem rgba(0,0,0,.1);display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.is-dark .blog-links>li[data-v-35f506a6]{background:#1f1f1f}.blog-links a[data-v-35f506a6]{display:flex;flex-direction:column;color:currentColor;font-weight:unset}.blog-links a[data-v-35f506a6]>:not(.blog-image){padding:0 1rem}.blog-links a .blog-image[data-v-35f506a6]{height:250px;overflow:hidden}.blog-links a .blog-image img[data-v-35f506a6]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .3s ease-out}.blog-links a .first-created[data-v-35f506a6]{font-size:.9rem}.blog-links a h2[data-v-35f506a6]{border-bottom:none;transition:color .3s}.blog-links a[data-v-35f506a6]:hover{text-decoration:none}.blog-links a:hover img[data-v-35f506a6]{transform:scale(1.06)}.blog-links a:hover h2[data-v-35f506a6]{color:#1bb89b}@media (min-width:720px){.blog-links[data-v-35f506a6]{grid-template-columns:1fr 1fr}}@media (min-width:960px){.blog-links[data-v-35f506a6]{grid-template-columns:1fr 1fr 1fr}}.blog-meta[data-v-37d0b7b8]{display:flex;flex-wrap:wrap;justify-content:space-between}div[data-v-051d57d2]{display:flex;align-items:center}div svg[data-v-051d57d2]{width:1rem;height:1rem}ul[data-v-051d57d2]{list-style:none;display:flex;padding:1rem;font-size:.85rem}ul a[data-v-051d57d2]{background:#eee;border-radius:.4rem;color:currentColor;font-weight:400;padding:.3rem .4rem;margin:0 .2rem}ul a[data-v-051d57d2]:hover{text-decoration:underline}.is-dark ul a[data-v-051d57d2]{background:#292929}nav[data-v-7c5b105f]{display:flex;flex-wrap:wrap;justify-content:center;margin:2rem 0}nav a[data-v-7c5b105f]{background:#eee;border-radius:1rem;color:currentColor;margin:.3rem;padding:.6rem;min-width:4rem;text-align:center}nav a.router-link-exact-active[data-v-7c5b105f]{color:#fff;background:#1bb89b}nav a[data-v-7c5b105f]:hover{text-decoration:none!important}.is-dark nav a[data-v-7c5b105f]:not(.router-link-exact-active){background:#292929}@media (min-width:420px){nav a[data-v-7c5b105f]{margin:.5rem;padding:1rem}}section[data-v-a37ba0d0]{margin:0 auto;max-width:740px;padding:2rem 2.5rem}div[data-v-43263439]{margin:.5rem 0}input[data-v-43263439],textarea[data-v-43263439]{outline:none;padding:.5rem 1rem;width:100%;font-size:100%;font-family:inherit;box-sizing:border-box;border-radius:6px;border:1px solid #aaa}input[data-v-43263439]:focus,textarea[data-v-43263439]:focus{border-color:#1bb89b}input.error[data-v-43263439],textarea.error[data-v-43263439]{border-color:red}textarea[data-v-43263439]{height:200px;resize:vertical}ul[data-v-59795e29]{list-style:none;margin:0;padding:0}li[data-v-59795e29]{border:1px solid;border-radius:4px;box-sizing:border-box;text-align:center;margin:12px 4px;padding:0 16px;width:100%}h2[data-v-59795e29]{border:0;margin-bottom:0;padding:0}@media (min-width:720px){ul[data-v-59795e29]{display:flex}}.link-buttons[data-v-fe445868]{margin:0 auto 1.8rem;padding:0;list-style:none;display:flex;justify-content:center}.link-buttons a[data-v-fe445868]{display:block;min-width:64px;padding:12px;margin:0 4px;border-radius:8px;box-sizing:border-box;transition-property:transform,box-shadow;transition-duration:.2s;background:#eee;box-shadow:0 3px #d0d0d0;border-bottom:2px solid #d0d0d0}.link-buttons a[data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}.link-buttons a img[data-v-fe445868]{display:block;margin:auto;width:auto}.link-buttons a[data-social=twitter][data-v-fe445868]{background:#1da1f2;box-shadow:0 3px #2f81be;border-bottom:2px solid #2f81be}.link-buttons a[data-social=twitter][data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}.link-buttons a[data-social=github][data-v-fe445868]{background:#333;box-shadow:0 3px #000;border-bottom:2px solid #000}.link-buttons a[data-social=github][data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}.link-buttons a[data-social=youtube][data-v-fe445868]{background:red;box-shadow:0 3px #900;border-bottom:2px solid #900}.link-buttons a[data-social=youtube][data-v-fe445868]:hover{transform:translateY(3px);box-shadow:none!important}footer[data-v-fe445868]{border-top:1px solid #eaecef;color:#2c3e50;padding:2.5rem;text-align:center}.is-dark footer[data-v-fe445868]{border-color:#545e66;color:#eaeaea}.home .footer{padding:0}.social[data-v-025be346]{display:flex;align-items:center;justify-content:flex-end}.is-dark .social[data-v-025be346] .social-share .social-share-btn{color:#8c8c8c}.social[data-v-025be346] .social-share .social-share-btn:hover{color:#1bb89b}.social[data-v-025be346] .social-share .social-share-btn{width:2.5rem;height:2.5rem;font-size:1.5rem}.social[data-v-025be346] .social-share .social-share-btn>span,section[data-v-568d8f4c]{display:flex;align-items:center;justify-content:center}section[data-v-568d8f4c]{background-image:url(/assets/home-bg.jpg);background-color:#1596f2;background-size:cover;background-attachment:fixed;transition:background .3s;height:100vh;max-height:900px;min-height:500px;box-sizing:border-box;flex-direction:column;position:relative}h1[data-v-568d8f4c]{font-weight:400}button[data-v-568d8f4c]{background:none;border:0;display:block;cursor:pointer;position:relative}button span[data-v-568d8f4c]{display:block;color:#fff;font-size:1.5rem;text-align:center;text-shadow:0 1px 2px #000}button span[data-v-568d8f4c]:first-child{width:150px;height:150px}button span:first-child img[data-v-568d8f4c]{width:100%;height:100%}h1[data-v-568d8f4c]{padding:1rem 2rem;margin:0;color:#fff;text-align:center;text-shadow:0 1px 2px #000;max-width:600px;font-size:3.5rem}.indicator[data-v-568d8f4c]{border:2px solid #fff;border-radius:24px;width:24px;height:36px;position:absolute;bottom:12px}.indicator[data-v-568d8f4c]:before{content:"";position:absolute;width:4px;height:6px;background:#fff;border-radius:2px;top:10%;left:calc(50% - 2px);animation:scroll-down-568d8f4c 1.5s infinite}@media (max-width:640px){h1[data-v-568d8f4c]{font-size:2rem}}@keyframes scroll-down-568d8f4c{0%{opacity:.2;transform:translateY(0)}to{opacity:1;transform:translateY(8px)}}div[data-v-e7a7a3f0]{width:180px;height:200px;flex-shrink:0;overflow:hidden;border-radius:50%}div>iframe[data-v-e7a7a3f0]{border:0;width:180px;height:300px}div[data-v-e7a7a3f0],img[data-v-e7a7a3f0]{margin-right:2rem}.right div[data-v-e7a7a3f0],.right img[data-v-e7a7a3f0]{margin-right:0;margin-left:2rem}@media (max-width:640px){div[data-v-e7a7a3f0],img[data-v-e7a7a3f0]{margin:0!important}}ul[data-v-65ae56a6]{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(2,1fr);gap:2rem}li[data-v-65ae56a6]{background:rgba(0,0,0,.05);border-radius:1rem;padding:3rem;position:relative}li[data-v-65ae56a6]:before{content:"\201C";display:block;font-family:serif;font-size:16rem;opacity:.1;position:absolute;top:-6rem;left:.5rem}li .content[data-v-65ae56a6]{font-style:italic;margin-bottom:2rem}li figure[data-v-65ae56a6]{margin:0;display:flex;align-items:center}li figure img[data-v-65ae56a6]{border-radius:50%}li figcaption[data-v-65ae56a6]{margin-left:2rem}li figcaption .author[data-v-65ae56a6]{font-size:1.2rem;font-weight:700}.is-dark li[data-v-65ae56a6]{background:#292929}@media (max-width:959px){ul[data-v-65ae56a6]{grid-template-columns:none}}@media (max-width:419px){li[data-v-65ae56a6]{padding:2rem}}section[data-v-06508d2a]{padding:8rem 4rem}section>div[data-v-06508d2a]{align-items:center;display:flex;justify-content:center;margin:auto;max-width:1024px}section article>h2[data-v-06508d2a]{border:0;margin-top:0;font-size:2.5rem}section article>p[data-v-06508d2a]{text-align:justify;max-width:640px}section article>footer[data-v-06508d2a]{text-align:right}section article>footer>a[data-v-06508d2a]{display:inline-block;font-size:1rem;padding:.4rem 1.5rem}section article>footer>a[data-v-06508d2a]:not(:first-child){margin-left:8%}section.right>div>[data-v-06508d2a]:first-child{order:1}section.right article>footer[data-v-06508d2a]{text-align:left}section.right article>footer>a[data-v-06508d2a]:not(:first-child){margin-right:8%}section.center footer[data-v-06508d2a],section.center h2[data-v-06508d2a]{text-align:center}section.is-dark[data-v-06508d2a]{background:rgba(0,0,0,.05)}@media (max-width:640px){section[data-v-06508d2a]{padding:4rem 2rem}section>div[data-v-06508d2a]{flex-direction:column}section>div article>footer[data-v-06508d2a],section>div article>h2[data-v-06508d2a]{text-align:center}section.right>div [data-v-06508d2a]:first-child{order:unset}section.right article>footer[data-v-06508d2a],section.right article>h2[data-v-06508d2a]{text-align:center}}ul[data-v-145d0661]{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:2rem;margin:0 0 1rem;padding:0}li[data-v-145d0661]{background:#fff;border-radius:.75rem;box-shadow:0 .2rem 1rem rgba(0,0,0,.1);overflow:hidden}li:hover img[data-v-145d0661]{transform:scale(1.4)}.is-dark li[data-v-145d0661]{background:#292929}span[data-v-145d0661]{display:block;overflow:hidden}span[data-v-145d0661]:last-child{color:#2c3e50;padding:.5rem 1rem;text-align:center}.is-dark span[data-v-145d0661]:last-child{color:#eaeaea}img[data-v-145d0661]{display:block;transform:scale(1.35);transition:transform .3s ease-out}@media (max-width:959px){ul[data-v-145d0661]{grid-template-columns:repeat(2,1fr)}}@media (max-width:719px){ul[data-v-145d0661]{grid-template-columns:none}}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983} \ No newline at end of file diff --git a/assets/js/10.64c89d19.js b/assets/js/10.64c89d19.js new file mode 100644 index 00000000..cac489b4 --- /dev/null +++ b/assets/js/10.64c89d19.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{292:function(t,e){t.exports={DOMAIN:"visnalize.com",ORIGIN:"https://visnalize.com"}},295:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));n(107);var a=n(292);function r(t,e){if(!t||!e)throw new Error("imageUrl and options are required");const n=Object.entries(e).map(([t,e])=>void 0===e?"":`${t}=${e}`).filter(Boolean).join(","),r=encodeURIComponent(/^(https?:|mailto:|tel:)/.test(t)?t:`${a.ORIGIN}${t}`);return`${a.ORIGIN}/cdn-cgi/image/${n}/${r}`}},313:function(t,e,n){},366:function(t,e,n){"use strict";n(313)},458:function(t,e,n){"use strict";n.r(e);var a=n(288),r=n(295),o={components:{ParentLayout:a.default},computed:{features(){const t=this.$site.pages.filter(({path:t})=>t.includes(this.$page.path)&&t!==this.$page.path);return t.sort((t,e)=>{const n=t.frontmatter.version||"0.0.0";return(e.frontmatter.version||"0.0.0").localeCompare(n,void 0,{numeric:!0,sensitivity:"base"})}),t}},methods:{transform:t=>Object(r.a)(t,{width:450})}},s=(n(366),n(13)),i=Object(s.a)(o,(function(){var t=this,e=t._self._c;return e("parent-layout",{scopedSlots:t._u([{key:"page-top",fn:function(){return[e("div",{staticClass:"theme-default-content content__default"},[e("h1",[t._v("Win7 Simu simulated apps")]),t._v(" "),e("a-sponsor-ad",{attrs:{format:"banner"}}),t._v(" "),e("ul",{staticClass:"feature-links"},t._l(t.features,(function(n){return e("li",{key:n.path},[e("router-link",{attrs:{to:n.path}},[e("span",{staticClass:"image"},[e("v-icon",{attrs:{name:"image"}}),t._v(" "),e("img",{attrs:{src:t.transform(n.frontmatter.image),alt:n.title}})],1),t._v(" "),e("span",[t._v(t._s(n.title))])])],1)})),0)],1)]},proxy:!0},{key:"page-bottom",fn:function(){return[e("m-footer")]},proxy:!0}])})}),[],!1,null,"1e21e726",null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/10.a03baa40.js b/assets/js/10.a03baa40.js deleted file mode 100644 index ab0f4b60..00000000 --- a/assets/js/10.a03baa40.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{292:function(t,e){t.exports={DOMAIN:"visnalize.com",ORIGIN:"https://visnalize.com"}},295:function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));n(107);var a=n(292);function r(t,e){if(!t||!e)throw new Error("imageUrl and options are required");const n=Object.entries(e).map(([t,e])=>void 0===e?"":`${t}=${e}`).filter(Boolean).join(","),r=/^(https?:|mailto:|tel:)/.test(t)?t:`${a.ORIGIN}${t}`;return`${a.ORIGIN}/cdn-cgi/image/${n}/${r}`}},313:function(t,e,n){},366:function(t,e,n){"use strict";n(313)},458:function(t,e,n){"use strict";n.r(e);var a=n(288),r=n(295),o={components:{ParentLayout:a.default},computed:{features(){const t=this.$site.pages.filter(({path:t})=>t.includes(this.$page.path)&&t!==this.$page.path);return t.sort((t,e)=>{const n=t.frontmatter.version||"0.0.0";return(e.frontmatter.version||"0.0.0").localeCompare(n,void 0,{numeric:!0,sensitivity:"base"})}),t}},methods:{transform:t=>Object(r.a)(t,{width:450})}},s=(n(366),n(13)),i=Object(s.a)(o,(function(){var t=this,e=t._self._c;return e("parent-layout",{scopedSlots:t._u([{key:"page-top",fn:function(){return[e("div",{staticClass:"theme-default-content content__default"},[e("h1",[t._v("Win7 Simu simulated apps")]),t._v(" "),e("a-sponsor-ad",{attrs:{format:"banner"}}),t._v(" "),e("ul",{staticClass:"feature-links"},t._l(t.features,(function(n){return e("li",{key:n.path},[e("router-link",{attrs:{to:n.path}},[e("span",{staticClass:"image"},[e("v-icon",{attrs:{name:"image"}}),t._v(" "),e("img",{attrs:{src:t.transform(n.frontmatter.image),alt:n.title}})],1),t._v(" "),e("span",[t._v(t._s(n.title))])])],1)})),0)],1)]},proxy:!0},{key:"page-bottom",fn:function(){return[e("m-footer")]},proxy:!0}])})}),[],!1,null,"1e21e726",null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/102.e2778eae.js b/assets/js/100.0cff9000.js similarity index 77% rename from assets/js/102.e2778eae.js rename to assets/js/100.0cff9000.js index 591203ec..e8723cb5 100644 --- a/assets/js/102.e2778eae.js +++ b/assets/js/100.0cff9000.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{546:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{541:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/103.bf25e320.js b/assets/js/101.f827436e.js similarity index 77% rename from assets/js/103.bf25e320.js rename to assets/js/101.f827436e.js index d73d1dd6..1c4c1f05 100644 --- a/assets/js/103.bf25e320.js +++ b/assets/js/101.f827436e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{545:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{542:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/100.56ff1d06.js b/assets/js/102.58757ade.js similarity index 77% rename from assets/js/100.56ff1d06.js rename to assets/js/102.58757ade.js index 5cc75529..6a5a1cf0 100644 --- a/assets/js/100.56ff1d06.js +++ b/assets/js/102.58757ade.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{543:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{543:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/101.22893bde.js b/assets/js/103.b6ae51dc.js similarity index 77% rename from assets/js/101.22893bde.js rename to assets/js/103.b6ae51dc.js index 631483c3..b0e9473f 100644 --- a/assets/js/101.22893bde.js +++ b/assets/js/103.b6ae51dc.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{544:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{544:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/104.38a04a72.js b/assets/js/104.38a04a72.js deleted file mode 100644 index 0b3a72bb..00000000 --- a/assets/js/104.38a04a72.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{547:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/104.971b4680.js b/assets/js/104.971b4680.js new file mode 100644 index 00000000..0c3ba604 --- /dev/null +++ b/assets/js/104.971b4680.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{546:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/105.4f49e110.js b/assets/js/105.4f49e110.js new file mode 100644 index 00000000..48662cc2 --- /dev/null +++ b/assets/js/105.4f49e110.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{547:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/105.ec82917f.js b/assets/js/105.ec82917f.js deleted file mode 100644 index d2388846..00000000 --- a/assets/js/105.ec82917f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{548:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/106.8802b836.js b/assets/js/106.8802b836.js new file mode 100644 index 00000000..94cbaf5b --- /dev/null +++ b/assets/js/106.8802b836.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{548:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/106.dbf6e154.js b/assets/js/106.dbf6e154.js deleted file mode 100644 index a21a6ec4..00000000 --- a/assets/js/106.dbf6e154.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{549:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/108.9a84362c.js b/assets/js/108.9a84362c.js new file mode 100644 index 00000000..b67c6fcc --- /dev/null +++ b/assets/js/108.9a84362c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{549:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/108.fb6521a2.js b/assets/js/108.fb6521a2.js deleted file mode 100644 index f744f505..00000000 --- a/assets/js/108.fb6521a2.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{554:function(t,n,s){"use strict";s.r(n);var e=s(13),o=Object(e.a)({},(function(){return(0,this._self._c)("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}})}),[],!1,null,null,null);n.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/12.283d3335.js b/assets/js/12.b764e7cd.js similarity index 90% rename from assets/js/12.283d3335.js rename to assets/js/12.b764e7cd.js index 8515d32b..8cfd3992 100644 --- a/assets/js/12.283d3335.js +++ b/assets/js/12.b764e7cd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{375:function(e,t,a){e.exports=a.p+"assets/img/roms.a020f50d.jpg"},376:function(e,t,a){e.exports=a.p+"assets/img/gamesdb.3f817468.jpg"},377:function(e,t,a){e.exports=a.p+"assets/img/insert-game-data.1bcf0446.jpg"},378:function(e,t,a){e.exports=a.p+"assets/img/insert-game-data2.ae992983.jpg"},502:function(e,t,a){"use strict";a.r(t);var o=a(13),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"how-to-add-more-games-to-game-stick-lite-4k"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#how-to-add-more-games-to-game-stick-lite-4k"}},[e._v("#")]),e._v(" How to add more games to Game Stick Lite 4K")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"/assets/covers/game-stick-4k-lite.jpg",alt:"Game Stick Lite 4K"}})]),e._v(" "),t("p",[e._v("Recently, I have had a chance to get my hands on a Game Stick Lite 4K, a USB stick-like device with two controllers and a bunch of pre-installed games that you can play on your TV. It is a fantastic option for those who want to play their childhood games on a big screen without owning a fancy console or a computer, as it is very affordable (typically around $20 - $40) and easy to set up. Though there are a lot of games pre-installed, some of your childhood favorites might be missing or are not available in your language. In this post, I will show you how to add more games to the Game Stick Lite 4K to enjoy more of your childhood games.")]),e._v(" "),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("ul",[t("li",[e._v("A Game Stick Lite 4K (apparently)")]),e._v(" "),t("li",[e._v("A computer or laptop with internet connection")]),e._v(" "),t("li",[e._v("A MicroSD card reader (even your smartphone can be used as a card reader)")])]),e._v(" "),t("h2",{attrs:{id:"step-by-step-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-by-step-guide"}},[e._v("#")]),e._v(" Step-by-step guide")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Have the game ROMs you want to play ready (you can find these easily by searching on the internet). Optionally, download a cover image for each game. The cover image should be in the "),t("code",[e._v(".png")]),e._v(" format and have the same name as the game ROM file. The cover image may then be displayed when you select the game to play.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(375),alt:"Game ROMs and cover images"}})])]),e._v(" "),t("li",[t("p",[e._v("Remove the MicroSD card from the game stick and insert it into your computer or laptop using a MicroSD card reader.")])]),e._v(" "),t("li",[t("p",[e._v("At the root of the SD card, you will see a "),t("code",[e._v("game")]),e._v(" folder, this is where all the games are stored. Games are grouped by the console they belong to. For instance, all the NES games are stored in the "),t("code",[e._v("fc")]),e._v(" folder, all the GameboyColor games are stored in the "),t("code",[e._v("gbc")]),e._v(" folder, Atari games in the "),t("code",[e._v("atari")]),e._v(" folder, and so on.")])]),e._v(" "),t("li",[t("p",[e._v("Copy your game ROMs (and their cover images) to the respective folders. Note that the ROM format should match with what is already available in the folder.")])]),e._v(" "),t("li",[t("p",[e._v("Install "),t("a",{attrs:{href:"https://sqlitebrowser.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("DB4S"),t("OutboundLink")],1),e._v(" (SQLite Database Browser) on your computer or laptop.")])]),e._v(" "),t("li",[t("p",[e._v("Back to the root of the SD card, open the "),t("code",[e._v("games.db")]),e._v(" file with DB4S (you might need to copy the file to your computer first if you are using a smartphone as a card reader).")])]),e._v(" "),t("li",[t("p",[e._v("Here, a list of tables in the game database will be displayed, you only need to care about the tables "),t("code",[e._v("tbl_en")]),e._v(" and "),t("code",[e._v("tbl_game")]),e._v(" where you will modify to add your games.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(376),alt:"Open games.db file using DB4S"}})])]),e._v(" "),t("li",[t("p",[e._v('Click on the "Browse Data" tab and select the '),t("code",[e._v("tbl_en")]),e._v(' table from the dropdown. Choose "Insert a new record" and add your game titles. Make sure the game titles match the names of the ROM files you added earlier.')]),e._v(" "),t("p",[t("img",{attrs:{src:a(377),alt:"Browse Data tab"}})])]),e._v(" "),t("li",[t("p",[e._v("Then select the "),t("code",[e._v("tbl_game")]),e._v(" table from the dropdown. Start adding your game data here following the existing format and structure. Also make sure the game titles match the names of the ROM files you added earlier.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(378),alt:"Insert game data"}})])])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Warning")]),e._v(" "),t("p",[e._v("Be very careful when modifying the game database. Any mistake will cause the game stick to not work properly. Always make a backup of the "),t("code",[e._v("games.db")]),e._v(" file before making any changes.")])]),e._v(" "),t("ul",[t("li",[e._v("Save your changes (and replace the "),t("code",[e._v("games.db")]),e._v(" file on the SD card if you copied it to your computer earlier).")]),e._v(" "),t("li",[e._v("Safely remove the MicroSD card from your computer or laptop and insert it back into the game stick.")]),e._v(" "),t("li",[e._v("Turn on the game stick and enjoy your games!")])]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{373:function(e,t,a){e.exports=a.p+"assets/img/roms.a020f50d.jpg"},374:function(e,t,a){e.exports=a.p+"assets/img/gamesdb.3f817468.jpg"},375:function(e,t,a){e.exports=a.p+"assets/img/insert-game-data.1bcf0446.jpg"},376:function(e,t,a){e.exports=a.p+"assets/img/insert-game-data2.ae992983.jpg"},501:function(e,t,a){"use strict";a.r(t);var o=a(13),r=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"how-to-add-more-games-to-game-stick-lite-4k"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#how-to-add-more-games-to-game-stick-lite-4k"}},[e._v("#")]),e._v(" How to add more games to Game Stick Lite 4K")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"/assets/covers/game-stick-4k-lite.jpg",alt:"Game Stick Lite 4K"}})]),e._v(" "),t("p",[e._v("Recently, I have had a chance to get my hands on a Game Stick Lite 4K, a USB stick-like device with two controllers and a bunch of pre-installed games that you can play on your TV. It is a fantastic option for those who want to play their childhood games on a big screen without owning a fancy console or a computer, as it is very affordable (typically around $20 - $40) and easy to set up. Though there are a lot of games pre-installed, some of your childhood favorites might be missing or are not available in your language. In this post, I will show you how to add more games to the Game Stick Lite 4K to enjoy more of your childhood games.")]),e._v(" "),t("h2",{attrs:{id:"prerequisites"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#prerequisites"}},[e._v("#")]),e._v(" Prerequisites")]),e._v(" "),t("ul",[t("li",[e._v("A Game Stick Lite 4K (apparently)")]),e._v(" "),t("li",[e._v("A computer or laptop with internet connection")]),e._v(" "),t("li",[e._v("A MicroSD card reader (even your smartphone can be used as a card reader)")])]),e._v(" "),t("h2",{attrs:{id:"step-by-step-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-by-step-guide"}},[e._v("#")]),e._v(" Step-by-step guide")]),e._v(" "),t("ul",[t("li",[t("p",[e._v("Have the game ROMs you want to play ready (you can find these easily by searching on the internet). Optionally, download a cover image for each game. The cover image should be in the "),t("code",[e._v(".png")]),e._v(" format and have the same name as the game ROM file. The cover image may then be displayed when you select the game to play.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(373),alt:"Game ROMs and cover images"}})])]),e._v(" "),t("li",[t("p",[e._v("Remove the MicroSD card from the game stick and insert it into your computer or laptop using a MicroSD card reader.")])]),e._v(" "),t("li",[t("p",[e._v("At the root of the SD card, you will see a "),t("code",[e._v("game")]),e._v(" folder, this is where all the games are stored. Games are grouped by the console they belong to. For instance, all the NES games are stored in the "),t("code",[e._v("fc")]),e._v(" folder, all the GameboyColor games are stored in the "),t("code",[e._v("gbc")]),e._v(" folder, Atari games in the "),t("code",[e._v("atari")]),e._v(" folder, and so on.")])]),e._v(" "),t("li",[t("p",[e._v("Copy your game ROMs (and their cover images) to the respective folders. Note that the ROM format should match with what is already available in the folder.")])]),e._v(" "),t("li",[t("p",[e._v("Install "),t("a",{attrs:{href:"https://sqlitebrowser.org/",target:"_blank",rel:"noopener noreferrer"}},[e._v("DB4S"),t("OutboundLink")],1),e._v(" (SQLite Database Browser) on your computer or laptop.")])]),e._v(" "),t("li",[t("p",[e._v("Back to the root of the SD card, open the "),t("code",[e._v("games.db")]),e._v(" file with DB4S (you might need to copy the file to your computer first if you are using a smartphone as a card reader).")])]),e._v(" "),t("li",[t("p",[e._v("Here, a list of tables in the game database will be displayed, you only need to care about the tables "),t("code",[e._v("tbl_en")]),e._v(" and "),t("code",[e._v("tbl_game")]),e._v(" where you will modify to add your games.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(374),alt:"Open games.db file using DB4S"}})])]),e._v(" "),t("li",[t("p",[e._v('Click on the "Browse Data" tab and select the '),t("code",[e._v("tbl_en")]),e._v(' table from the dropdown. Choose "Insert a new record" and add your game titles. Make sure the game titles match the names of the ROM files you added earlier.')]),e._v(" "),t("p",[t("img",{attrs:{src:a(375),alt:"Browse Data tab"}})])]),e._v(" "),t("li",[t("p",[e._v("Then select the "),t("code",[e._v("tbl_game")]),e._v(" table from the dropdown. Start adding your game data here following the existing format and structure. Also make sure the game titles match the names of the ROM files you added earlier.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(376),alt:"Insert game data"}})])])]),e._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[e._v("Warning")]),e._v(" "),t("p",[e._v("Be very careful when modifying the game database. Any mistake will cause the game stick to not work properly. Always make a backup of the "),t("code",[e._v("games.db")]),e._v(" file before making any changes.")])]),e._v(" "),t("ul",[t("li",[e._v("Save your changes (and replace the "),t("code",[e._v("games.db")]),e._v(" file on the SD card if you copied it to your computer earlier).")]),e._v(" "),t("li",[e._v("Safely remove the MicroSD card from your computer or laptop and insert it back into the game stick.")]),e._v(" "),t("li",[e._v("Turn on the game stick and enjoy your games!")])]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/19.94339416.js b/assets/js/19.94f2c2b9.js similarity index 99% rename from assets/js/19.94339416.js rename to assets/js/19.94f2c2b9.js index 12446214..1dd63efc 100644 --- a/assets/js/19.94339416.js +++ b/assets/js/19.94f2c2b9.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{383:function(e,t,a){e.exports=a.p+"assets/img/visnalize-com-growth.67fc9dc7.jpg"},384:function(e,t,a){e.exports=a.p+"assets/img/win7-simu-growth.6ba88ded.jpg"},385:function(e,t,a){e.exports=a.p+"assets/img/brick-1100-growth.cd8f231c.jpg"},506:function(e,t,a){"use strict";a.r(t);var r=a(13),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"visnalize-year-in-review-2023"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#visnalize-year-in-review-2023"}},[e._v("#")]),e._v(" Visnalize year in review - 2023")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://images.unsplash.com/photo-1579952775264-625f17561a5d?auto=format&fit=crop&w=740&q=80",alt:"Ho Chi Minh new year firework"}})]),e._v(" "),t("p",[t("em",[e._v("Cover image by Streetwindy via "),t("a",{attrs:{href:"https://unsplash.com/photos/fireworks-display-over-city-buildings-during-night-time-rYIrNpFFilI",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unsplash"),t("OutboundLink")],1)])]),e._v(" "),t("p",[e._v('Last year, I initiated a habit of writing a "year in review" post for '),t("RouterLink",{attrs:{to:"/blog/win7-simu-year-in-review-2022.html"}},[e._v("Win7 Simu")]),e._v(". It was a great way to reflect on the year and see what I have accomplished. I decided to do it again this year, however, this time I will write about Visnalize as a whole, since we now have more than one product, it will probably be more interesting to have a look at a bigger picture.")],1),e._v(" "),t("p",[e._v("Let's not waste any more time and get right into it.")]),e._v(" "),t("h2",{attrs:{id:"the-amazing-numbers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-amazing-numbers"}},[e._v("#")]),e._v(" The amazing numbers")]),e._v(" "),t("h3",{attrs:{id:"visnalize-com"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#visnalize-com"}},[e._v("#")]),e._v(" Visnalize(.com)")]),e._v(" "),t("p",[t("img",{attrs:{src:a(383),alt:"Visnalize.com's growth"}})]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("6")]),e._v(" new blog posts published")]),e._v(" "),t("li",[e._v("An average of "),t("strong",[e._v("800")]),e._v(" daily active users")]),e._v(" "),t("li",[e._v("An average of "),t("strong",[e._v("1700")]),e._v(" daily page views")]),e._v(" "),t("li",[e._v("A total of "),t("strong",[e._v("$950")]),e._v(" in revenue (all from AdSense)")])]),e._v(" "),t("h3",{attrs:{id:"win7-simu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#win7-simu"}},[e._v("#")]),e._v(" "),t("RouterLink",{attrs:{to:"/win7simu/about.html"}},[e._v("Win7 Simu")])],1),e._v(" "),t("p",[t("img",{attrs:{src:a(384),alt:"Win7 Simu's growth"}})]),e._v(" "),t("p",[t("strong",[e._v("Android only")])]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("10.8M")]),e._v(" users downloaded the app from "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.visnalize.win7simu",target:"_blank",rel:"noopener noreferrer"}},[e._v("Google Play"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("strong",[e._v("670K")]),e._v(" active devices that still have the app installed")]),e._v(" "),t("li",[t("strong",[e._v("42.4K")]),e._v(" users gave an average rating of "),t("strong",[e._v("4.18/5")])]),e._v(" "),t("li",[t("strong",[e._v("20K")]),e._v(" users left a review")])]),e._v(" "),t("p",[t("strong",[e._v("Both versions")])]),e._v(" "),t("ul",[t("li",[e._v("An average of "),t("strong",[e._v("50K")]),e._v(" daily active users")]),e._v(" "),t("li",[e._v("A user spent an average of "),t("strong",[e._v("14 mins")]),e._v(" with the app")]),e._v(" "),t("li",[t("strong",[e._v("2.3M")]),e._v(" accounts created in the app")]),e._v(" "),t("li",[t("strong",[e._v("18")]),e._v(" version updates were released")]),e._v(" "),t("li",[t("strong",[e._v("$9.8K")]),e._v(" gross revenue from ads")]),e._v(" "),t("li",[t("strong",[e._v("$3.1K")]),e._v(" gross revenue from in-app purchases")]),e._v(" "),t("li",[t("strong",[e._v("$303")]),e._v(" gross revenue from partnerships")])]),e._v(" "),t("h3",{attrs:{id:"brick-1100-beta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#brick-1100-beta"}},[e._v("#")]),e._v(" "),t("RouterLink",{attrs:{to:"/brick1100/about.html"}},[e._v("Brick 1100")]),e._v(" (Beta)")],1),e._v(" "),t("p",[t("img",{attrs:{src:a(385),alt:"Brick 1100's growth"}})]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("9.2K")]),e._v(" users downloaded the app from "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.visnalize.brick1100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Google Play"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("strong",[e._v("1.8K")]),e._v(" active devices that still have the app installed")]),e._v(" "),t("li",[e._v("An average of "),t("strong",[e._v("200")]),e._v(" daily active users")]),e._v(" "),t("li",[e._v("A user spent an average of "),t("strong",[e._v("7 mins")]),e._v(" with the app")]),e._v(" "),t("li",[t("strong",[e._v("300")]),e._v(" accounts created in the app")]),e._v(" "),t("li",[t("strong",[e._v("8")]),e._v(" version updates were released")]),e._v(" "),t("li",[t("strong",[e._v("$22")]),e._v(" gross revenue from ads")])]),e._v(" "),t("a-google-ad"),e._v(" "),t("h2",{attrs:{id:"other-accomplishments"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-accomplishments"}},[e._v("#")]),e._v(" Other accomplishments")]),e._v(" "),t("h3",{attrs:{id:"a-new-collaborator-for-win7-simu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-new-collaborator-for-win7-simu"}},[e._v("#")]),e._v(" A new collaborator for Win7 Simu")]),e._v(" "),t("p",[e._v("Since November of this year, you must have noticed Win7 Simu has been receiving several major UI enhancements and new themes. This is all thanks to "),t("a",{attrs:{href:"https://github.com/hohaicongthuan",target:"_blank",rel:"noopener noreferrer"}},[e._v("Thuan"),t("OutboundLink")],1),e._v(", a new collaborator that I had the pleasure to welcome and onboard to the Win7 Simu project. Thuan is a computer enthusiast, freelance developer and has a special interest in game development. Although he has little experience with the tech stack behind Win7 Simu, he has been able to quickly pick up the pace and contribute to the project without much guidance required. I am more than happy to have him onboard and look forward to continuing our collaboration in the future.")]),e._v(" "),t("h3",{attrs:{id:"new-feedback-channels-for-brick-1100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#new-feedback-channels-for-brick-1100"}},[e._v("#")]),e._v(" New feedback channels for Brick 1100")]),e._v(" "),t("p",[e._v("With the new beta release of Brick 1100, I have set up a new "),t("a",{attrs:{href:"https://discord.gg/6AQDnZa4Xm",target:"_blank",rel:"noopener noreferrer"}},[e._v("Discord server"),t("OutboundLink")],1),e._v(" for the community to hang out, discuss all things Brick 1100-related, and provide feedback to make Brick 1100 a better app. Additionally, there is also this "),t("a",{attrs:{href:"/brick1100/feedback"}},[e._v("feedback forum")]),e._v(" for those who don't want to use or are not familiar with Discord can provide feedback and suggestions, easily and anonymously without much hassle.")]),e._v(" "),t("h3",{attrs:{id:"a-new-chapter-in-life"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-new-chapter-in-life"}},[e._v("#")]),e._v(" A new chapter in life")]),e._v(" "),t("p",[e._v("I don't share my personal identity online much, but this is a big one so I make it an exception. In the early of 2023, I got married to my beautiful wife and later in the year, we welcomed our first child into the world, a healthy and handsome baby boy. It was a life-changing experience and a feeling that I can't describe in words. I am thankful to life for everything that I was given.")]),e._v(" "),t("h2",{attrs:{id:"looking-out-to-2024"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#looking-out-to-2024"}},[e._v("#")]),e._v(" Looking out to 2024")]),e._v(" "),t("p",[e._v("The coming year will be different in many ways, there will be new challenges, busy schedules, trying to balance out the time for family and work, and everything in between. I am unsure how much time I will be able to dedicate to Visnalize, bringing out more cool features and updates for Win7 Simu and launching the first production release of Brick 1100, but I will try my best to keep the projects going and make them better.")]),e._v(" "),t("p",[e._v("As always, I thank you for all your love and support so far, and I hope you will continue your support for me in the future. Happy new year and see you in 2024! 🎉")]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{383:function(e,t,a){e.exports=a.p+"assets/img/visnalize-com-growth.67fc9dc7.jpg"},384:function(e,t,a){e.exports=a.p+"assets/img/win7-simu-growth.6ba88ded.jpg"},385:function(e,t,a){e.exports=a.p+"assets/img/brick-1100-growth.cd8f231c.jpg"},507:function(e,t,a){"use strict";a.r(t);var r=a(13),i=Object(r.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"visnalize-year-in-review-2023"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#visnalize-year-in-review-2023"}},[e._v("#")]),e._v(" Visnalize year in review - 2023")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://images.unsplash.com/photo-1579952775264-625f17561a5d?auto=format&fit=crop&w=740&q=80",alt:"Ho Chi Minh new year firework"}})]),e._v(" "),t("p",[t("em",[e._v("Cover image by Streetwindy via "),t("a",{attrs:{href:"https://unsplash.com/photos/fireworks-display-over-city-buildings-during-night-time-rYIrNpFFilI",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unsplash"),t("OutboundLink")],1)])]),e._v(" "),t("p",[e._v('Last year, I initiated a habit of writing a "year in review" post for '),t("RouterLink",{attrs:{to:"/blog/win7-simu-year-in-review-2022.html"}},[e._v("Win7 Simu")]),e._v(". It was a great way to reflect on the year and see what I have accomplished. I decided to do it again this year, however, this time I will write about Visnalize as a whole, since we now have more than one product, it will probably be more interesting to have a look at a bigger picture.")],1),e._v(" "),t("p",[e._v("Let's not waste any more time and get right into it.")]),e._v(" "),t("h2",{attrs:{id:"the-amazing-numbers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-amazing-numbers"}},[e._v("#")]),e._v(" The amazing numbers")]),e._v(" "),t("h3",{attrs:{id:"visnalize-com"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#visnalize-com"}},[e._v("#")]),e._v(" Visnalize(.com)")]),e._v(" "),t("p",[t("img",{attrs:{src:a(383),alt:"Visnalize.com's growth"}})]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("6")]),e._v(" new blog posts published")]),e._v(" "),t("li",[e._v("An average of "),t("strong",[e._v("800")]),e._v(" daily active users")]),e._v(" "),t("li",[e._v("An average of "),t("strong",[e._v("1700")]),e._v(" daily page views")]),e._v(" "),t("li",[e._v("A total of "),t("strong",[e._v("$950")]),e._v(" in revenue (all from AdSense)")])]),e._v(" "),t("h3",{attrs:{id:"win7-simu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#win7-simu"}},[e._v("#")]),e._v(" "),t("RouterLink",{attrs:{to:"/win7simu/about.html"}},[e._v("Win7 Simu")])],1),e._v(" "),t("p",[t("img",{attrs:{src:a(384),alt:"Win7 Simu's growth"}})]),e._v(" "),t("p",[t("strong",[e._v("Android only")])]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("10.8M")]),e._v(" users downloaded the app from "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.visnalize.win7simu",target:"_blank",rel:"noopener noreferrer"}},[e._v("Google Play"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("strong",[e._v("670K")]),e._v(" active devices that still have the app installed")]),e._v(" "),t("li",[t("strong",[e._v("42.4K")]),e._v(" users gave an average rating of "),t("strong",[e._v("4.18/5")])]),e._v(" "),t("li",[t("strong",[e._v("20K")]),e._v(" users left a review")])]),e._v(" "),t("p",[t("strong",[e._v("Both versions")])]),e._v(" "),t("ul",[t("li",[e._v("An average of "),t("strong",[e._v("50K")]),e._v(" daily active users")]),e._v(" "),t("li",[e._v("A user spent an average of "),t("strong",[e._v("14 mins")]),e._v(" with the app")]),e._v(" "),t("li",[t("strong",[e._v("2.3M")]),e._v(" accounts created in the app")]),e._v(" "),t("li",[t("strong",[e._v("18")]),e._v(" version updates were released")]),e._v(" "),t("li",[t("strong",[e._v("$9.8K")]),e._v(" gross revenue from ads")]),e._v(" "),t("li",[t("strong",[e._v("$3.1K")]),e._v(" gross revenue from in-app purchases")]),e._v(" "),t("li",[t("strong",[e._v("$303")]),e._v(" gross revenue from partnerships")])]),e._v(" "),t("h3",{attrs:{id:"brick-1100-beta"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#brick-1100-beta"}},[e._v("#")]),e._v(" "),t("RouterLink",{attrs:{to:"/brick1100/about.html"}},[e._v("Brick 1100")]),e._v(" (Beta)")],1),e._v(" "),t("p",[t("img",{attrs:{src:a(385),alt:"Brick 1100's growth"}})]),e._v(" "),t("ul",[t("li",[t("strong",[e._v("9.2K")]),e._v(" users downloaded the app from "),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.visnalize.brick1100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Google Play"),t("OutboundLink")],1)]),e._v(" "),t("li",[t("strong",[e._v("1.8K")]),e._v(" active devices that still have the app installed")]),e._v(" "),t("li",[e._v("An average of "),t("strong",[e._v("200")]),e._v(" daily active users")]),e._v(" "),t("li",[e._v("A user spent an average of "),t("strong",[e._v("7 mins")]),e._v(" with the app")]),e._v(" "),t("li",[t("strong",[e._v("300")]),e._v(" accounts created in the app")]),e._v(" "),t("li",[t("strong",[e._v("8")]),e._v(" version updates were released")]),e._v(" "),t("li",[t("strong",[e._v("$22")]),e._v(" gross revenue from ads")])]),e._v(" "),t("a-google-ad"),e._v(" "),t("h2",{attrs:{id:"other-accomplishments"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#other-accomplishments"}},[e._v("#")]),e._v(" Other accomplishments")]),e._v(" "),t("h3",{attrs:{id:"a-new-collaborator-for-win7-simu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-new-collaborator-for-win7-simu"}},[e._v("#")]),e._v(" A new collaborator for Win7 Simu")]),e._v(" "),t("p",[e._v("Since November of this year, you must have noticed Win7 Simu has been receiving several major UI enhancements and new themes. This is all thanks to "),t("a",{attrs:{href:"https://github.com/hohaicongthuan",target:"_blank",rel:"noopener noreferrer"}},[e._v("Thuan"),t("OutboundLink")],1),e._v(", a new collaborator that I had the pleasure to welcome and onboard to the Win7 Simu project. Thuan is a computer enthusiast, freelance developer and has a special interest in game development. Although he has little experience with the tech stack behind Win7 Simu, he has been able to quickly pick up the pace and contribute to the project without much guidance required. I am more than happy to have him onboard and look forward to continuing our collaboration in the future.")]),e._v(" "),t("h3",{attrs:{id:"new-feedback-channels-for-brick-1100"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#new-feedback-channels-for-brick-1100"}},[e._v("#")]),e._v(" New feedback channels for Brick 1100")]),e._v(" "),t("p",[e._v("With the new beta release of Brick 1100, I have set up a new "),t("a",{attrs:{href:"https://discord.gg/6AQDnZa4Xm",target:"_blank",rel:"noopener noreferrer"}},[e._v("Discord server"),t("OutboundLink")],1),e._v(" for the community to hang out, discuss all things Brick 1100-related, and provide feedback to make Brick 1100 a better app. Additionally, there is also this "),t("a",{attrs:{href:"/brick1100/feedback"}},[e._v("feedback forum")]),e._v(" for those who don't want to use or are not familiar with Discord can provide feedback and suggestions, easily and anonymously without much hassle.")]),e._v(" "),t("h3",{attrs:{id:"a-new-chapter-in-life"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-new-chapter-in-life"}},[e._v("#")]),e._v(" A new chapter in life")]),e._v(" "),t("p",[e._v("I don't share my personal identity online much, but this is a big one so I make it an exception. In the early of 2023, I got married to my beautiful wife and later in the year, we welcomed our first child into the world, a healthy and handsome baby boy. It was a life-changing experience and a feeling that I can't describe in words. I am thankful to life for everything that I was given.")]),e._v(" "),t("h2",{attrs:{id:"looking-out-to-2024"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#looking-out-to-2024"}},[e._v("#")]),e._v(" Looking out to 2024")]),e._v(" "),t("p",[e._v("The coming year will be different in many ways, there will be new challenges, busy schedules, trying to balance out the time for family and work, and everything in between. I am unsure how much time I will be able to dedicate to Visnalize, bringing out more cool features and updates for Win7 Simu and launching the first production release of Brick 1100, but I will try my best to keep the projects going and make them better.")]),e._v(" "),t("p",[e._v("As always, I thank you for all your love and support so far, and I hope you will continue your support for me in the future. Happy new year and see you in 2024! 🎉")]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/29.8acd4b82.js b/assets/js/29.9c0f3287.js similarity index 91% rename from assets/js/29.8acd4b82.js rename to assets/js/29.9c0f3287.js index 28011e9e..77882740 100644 --- a/assets/js/29.8acd4b82.js +++ b/assets/js/29.9c0f3287.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{320:function(t,s,n){},419:function(t,s,n){"use strict";n(320)},472:function(t,s,n){"use strict";n.r(s);const r={banner:1,square:2};var e={props:{format:{type:String,default:"square"}},computed:{adUnitId(){return r[this.format]}}},i=(n(419),n(13)),a=Object(i.a)(e,(function(){var t=this._self._c;return t("div",{class:this.format,attrs:{id:"127550-"+this.adUnitId}},[t("script",{tag:"component",attrs:{src:"//ads.themoneytizer.com/s/gen.js?type="+this.adUnitId}}),this._v(" "),t("script",{tag:"component",attrs:{src:"//ads.themoneytizer.com/s/requestform.js?siteId=127550&formatId="+this.adUnitId}})],1)}),[],!1,null,"2685687c",null);s.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{320:function(t,s,n){},419:function(t,s,n){"use strict";n(320)},473:function(t,s,n){"use strict";n.r(s);const r={banner:1,square:2};var e={props:{format:{type:String,default:"square"}},computed:{adUnitId(){return r[this.format]}}},i=(n(419),n(13)),a=Object(i.a)(e,(function(){var t=this._self._c;return t("div",{class:this.format,attrs:{id:"127550-"+this.adUnitId}},[t("script",{tag:"component",attrs:{src:"//ads.themoneytizer.com/s/gen.js?type="+this.adUnitId}}),this._v(" "),t("script",{tag:"component",attrs:{src:"//ads.themoneytizer.com/s/requestform.js?siteId=127550&formatId="+this.adUnitId}})],1)}),[],!1,null,"2685687c",null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/4.2c6cea6d.js b/assets/js/4.cae2a299.js similarity index 99% rename from assets/js/4.2c6cea6d.js rename to assets/js/4.cae2a299.js index 1fbb9029..5c7c4c8d 100644 --- a/assets/js/4.2c6cea6d.js +++ b/assets/js/4.cae2a299.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{395:function(t,a,s){t.exports=s.p+"assets/img/snake-intro.eb93ba77.png"},396:function(t,a,s){t.exports=s.p+"assets/img/snake-gameplay.17189f88.png"},397:function(t,a,s){t.exports=s.p+"assets/img/brick-intro.9af9d339.png"},398:function(t,a,s){t.exports=s.p+"assets/img/brick-gameplay.e2169365.png"},399:function(t,a,s){t.exports=s.p+"assets/img/dino-intro.0794c934.png"},400:function(t,a,s){t.exports=s.p+"assets/img/dino-gameplay.12ab28dc.png"},401:function(t,a,s){t.exports=s.p+"assets/img/monogram-intro.835a6b4b.png"},402:function(t,a,s){t.exports=s.p+"assets/img/monogram-gameplay.bcc4ca97.png"},519:function(t,a,s){"use strict";s.r(a);var e=s(13),r=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"brick-1100-games"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#brick-1100-games"}},[t._v("#")]),t._v(" Brick 1100 Games")]),t._v(" "),a("m-social-links"),t._v(" "),a("h2",{attrs:{id:"snake"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#snake"}},[t._v("#")]),t._v(" Snake")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(395),alt:"Snake intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(396),alt:"Snake gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Make the snake grow longer by directing it to the food. The longer the snake gets, the more points you score.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"navi"}}),t._v(" / "),a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" - move clockwise\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" - move counter-clockwise\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"2"}}),t._v(" - move up\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"8"}}),t._v(" - move down\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"4"}}),t._v(" - move left\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"6"}}),t._v(" - move right\n")],1)])]),t._v(" "),a("h2",{attrs:{id:"brick-breaker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#brick-breaker"}},[t._v("#")]),t._v(" Brick Breaker")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(397),alt:"Brick breaker intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(398),alt:"Brick breaker gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Clear the screen by breaking all the bricks with the ball to advance to the next level.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"navi"}}),t._v(" / "),a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" / "),a("a-key",{attrs:{s:"1"}}),t._v(" / "),a("a-key",{attrs:{s:"4"}}),t._v(" / "),a("a-key",{attrs:{s:"7"}}),t._v(" - move paddle left\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" / "),a("a-key",{attrs:{s:"3"}}),t._v(" / "),a("a-key",{attrs:{s:"6"}}),t._v(" / "),a("a-key",{attrs:{s:"9"}}),t._v(" - move paddle right\n")],1)])]),t._v(" "),a("h2",{attrs:{id:"chrome-dino"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chrome-dino"}},[t._v("#")]),t._v(" Chrome Dino")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(399),alt:"Chrome Dino intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(400),alt:"Chrome Dino gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Control the T-Rex to overcome obstacles. The longer you survive, the higher your score.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" / "),a("a-key",{attrs:{s:"2"}}),t._v(" - jump\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" / "),a("a-key",{attrs:{s:"8"}}),t._v(" - duck\n")],1)])]),t._v(" "),a("h2",{attrs:{id:"monogram"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#monogram"}},[t._v("#")]),t._v(" Monogram")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(401),alt:"Monogram intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(402),alt:"Monogram gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Leave blank or fill the grid cells until a pixel image appears to advance to the next level.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"2"}}),t._v(" - move the cursor up\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"8"}}),t._v(" - move the cursor down\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"4"}}),t._v(" - move the cursor left\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"6"}}),t._v(" - move the cursor right\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" - move the cursor to the previous cell\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" - move the cursor to the next cell\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"navi"}}),t._v(" / "),a("a-key",{attrs:{s:"5"}}),t._v(" - toggle cell fill\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"aste"}}),t._v(" - toggle cell hints (shows the number of filled cells in the row/column)\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"0"}}),t._v(" - reset the grid\n")],1)])])],1)}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{395:function(t,a,s){t.exports=s.p+"assets/img/snake-intro.eb93ba77.png"},396:function(t,a,s){t.exports=s.p+"assets/img/snake-gameplay.17189f88.png"},397:function(t,a,s){t.exports=s.p+"assets/img/brick-intro.9af9d339.png"},398:function(t,a,s){t.exports=s.p+"assets/img/brick-gameplay.e2169365.png"},399:function(t,a,s){t.exports=s.p+"assets/img/dino-intro.0794c934.png"},400:function(t,a,s){t.exports=s.p+"assets/img/dino-gameplay.12ab28dc.png"},401:function(t,a,s){t.exports=s.p+"assets/img/monogram-intro.835a6b4b.png"},402:function(t,a,s){t.exports=s.p+"assets/img/monogram-gameplay.bcc4ca97.png"},518:function(t,a,s){"use strict";s.r(a);var e=s(13),r=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"brick-1100-games"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#brick-1100-games"}},[t._v("#")]),t._v(" Brick 1100 Games")]),t._v(" "),a("m-social-links"),t._v(" "),a("h2",{attrs:{id:"snake"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#snake"}},[t._v("#")]),t._v(" Snake")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(395),alt:"Snake intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(396),alt:"Snake gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Make the snake grow longer by directing it to the food. The longer the snake gets, the more points you score.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"navi"}}),t._v(" / "),a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" - move clockwise\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" - move counter-clockwise\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"2"}}),t._v(" - move up\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"8"}}),t._v(" - move down\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"4"}}),t._v(" - move left\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"6"}}),t._v(" - move right\n")],1)])]),t._v(" "),a("h2",{attrs:{id:"brick-breaker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#brick-breaker"}},[t._v("#")]),t._v(" Brick Breaker")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(397),alt:"Brick breaker intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(398),alt:"Brick breaker gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Clear the screen by breaking all the bricks with the ball to advance to the next level.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"navi"}}),t._v(" / "),a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" / "),a("a-key",{attrs:{s:"1"}}),t._v(" / "),a("a-key",{attrs:{s:"4"}}),t._v(" / "),a("a-key",{attrs:{s:"7"}}),t._v(" - move paddle left\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" / "),a("a-key",{attrs:{s:"3"}}),t._v(" / "),a("a-key",{attrs:{s:"6"}}),t._v(" / "),a("a-key",{attrs:{s:"9"}}),t._v(" - move paddle right\n")],1)])]),t._v(" "),a("h2",{attrs:{id:"chrome-dino"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#chrome-dino"}},[t._v("#")]),t._v(" Chrome Dino")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(399),alt:"Chrome Dino intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(400),alt:"Chrome Dino gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Control the T-Rex to overcome obstacles. The longer you survive, the higher your score.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" / "),a("a-key",{attrs:{s:"2"}}),t._v(" - jump\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" / "),a("a-key",{attrs:{s:"8"}}),t._v(" - duck\n")],1)])]),t._v(" "),a("h2",{attrs:{id:"monogram"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#monogram"}},[t._v("#")]),t._v(" Monogram")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Splash screen")]),t._v(" "),a("th",[t._v("Gameplay")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[a("img",{attrs:{src:s(401),alt:"Monogram intro"}})]),t._v(" "),a("td",[a("img",{attrs:{src:s(402),alt:"Monogram gameplay"}})])])])]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("Goal")]),t._v(" "),a("p",[t._v("Leave blank or fill the grid cells until a pixel image appears to advance to the next level.")])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("Controls")]),t._v(" "),a("ul",[a("li",[a("a-key",{attrs:{s:"clear"}}),t._v(" - pause game\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"2"}}),t._v(" - move the cursor up\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"8"}}),t._v(" - move the cursor down\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"4"}}),t._v(" - move the cursor left\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"6"}}),t._v(" - move the cursor right\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"up"}}),t._v(" - move the cursor to the previous cell\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"down"}}),t._v(" - move the cursor to the next cell\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"navi"}}),t._v(" / "),a("a-key",{attrs:{s:"5"}}),t._v(" - toggle cell fill\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"aste"}}),t._v(" - toggle cell hints (shows the number of filled cells in the row/column)\n")],1),t._v(" "),a("li",[a("a-key",{attrs:{s:"0"}}),t._v(" - reset the grid\n")],1)])])],1)}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/43.a30c9541.js b/assets/js/43.ce1c9168.js similarity index 72% rename from assets/js/43.a30c9541.js rename to assets/js/43.ce1c9168.js index 459073d6..3ce277b5 100644 --- a/assets/js/43.a30c9541.js +++ b/assets/js/43.ce1c9168.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{335:function(t,e,r){},437:function(t,e,r){"use strict";r(335)},486:function(t,e,r){"use strict";r.r(e);var i={computed:{features:()=>[{title:"Learn & Play",text:"A simple code playground for you to learn CSS"},{title:"Publish & Share",text:"Take pride in your creativity and share with others"},{title:"Admire & Enjoy",text:"Enjoy the creative crafts made by others"}]}},n=(r(437),r(13)),o=Object(n.a)(i,(function(){var t=this,e=t._self._c;return e("ul",t._l(t.features,(function(r){return e("li",{key:r.title},[e("h2",[t._v(t._s(r.title))]),t._v(" "),e("p",[t._v(t._s(r.text))])])})),0)}),[],!1,null,"59795e29",null);e.default=o.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{333:function(t,e,r){},434:function(t,e,r){"use strict";r(333)},485:function(t,e,r){"use strict";r.r(e);var i={computed:{features:()=>[{title:"Learn & Play",text:"A simple code playground for you to learn CSS"},{title:"Publish & Share",text:"Take pride in your creativity and share with others"},{title:"Admire & Enjoy",text:"Enjoy the creative crafts made by others"}]}},n=(r(434),r(13)),o=Object(n.a)(i,(function(){var t=this,e=t._self._c;return e("ul",t._l(t.features,(function(r){return e("li",{key:r.title},[e("h2",[t._v(t._s(r.title))]),t._v(" "),e("p",[t._v(t._s(r.text))])])})),0)}),[],!1,null,"59795e29",null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/46.d2ad64fb.js b/assets/js/46.162cf05d.js similarity index 97% rename from assets/js/46.d2ad64fb.js rename to assets/js/46.162cf05d.js index b06d7dd9..a0e969f9 100644 --- a/assets/js/46.d2ad64fb.js +++ b/assets/js/46.162cf05d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{373:function(e,t,a){e.exports=a.p+"assets/img/win7-simu-dau.3e6d196c.png"},374:function(e,t,a){e.exports=a.p+"assets/img/homepage-dau.e246c522.png"},501:function(e,t,a){"use strict";a.r(t);var o=a(13),i=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"turning-my-side-project-into-a-side-hustle"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#turning-my-side-project-into-a-side-hustle"}},[e._v("#")]),e._v(" Turning my side project into a side hustle")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://media.istockphoto.com/id/1349329446/photo/dollars-cash-money-and-paper-note-with-text-written-extra-income-concept-of-financial.jpg?s=1024x1024&w=is&k=20&c=RXsEpU41u0Yke-ol53PoirkXHTOliHGfvijnYipidtQ=",alt:"Side hustle cash"}})]),e._v(" "),t("p",[e._v("Today is November 11, 2023, it has been a year since I wrote my previous blog post "),t("RouterLink",{attrs:{to:"/blog/building-win7-simu.html"}},[e._v("sharing how I built Win7 Simu")]),e._v(" to celebrate a milestone of 5M Google Play downloads. We are now at "),t("strong",[e._v("10M downloads")]),e._v(" and again, to celebrate this milestone, I decided to sit down and write another blog post to share about how this "),t("s",[e._v("silly")]),e._v(" side project has turned into a side hustle and has been generating a decent amount of recurring revenue for me since. Yes, we are talking about "),t("em",[e._v("money")]),e._v(" here, a sensitive topic, but somehow I feel that it may be interesting, with some of the learnings that I have had along the way may be useful to you. However, bear in mind that what you are about to read is "),t("strong",[e._v("subjective")]),e._v(" and based on my own experience, so you are welcome to read with a grain of salt.")],1),e._v(" "),t("h2",{attrs:{id:"the-beginning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-beginning"}},[e._v("#")]),e._v(" The beginning")]),e._v(" "),t("h3",{attrs:{id:"the-idea-that-started-it-all"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-idea-that-started-it-all"}},[e._v("#")]),e._v(" The idea that started it all")]),e._v(" "),t("p",[e._v("I highly recommend reading "),t("RouterLink",{attrs:{to:"/blog/building-win7-simu.html"}},[e._v("my previous post")]),e._v(" first if you haven't to get to know more about this silly project and how it started, but if you don't want to, here is a brief summary:")],1),e._v(" "),t("p",[e._v("I had an idea of cloning Windows 7 UI to the web way back in mid-2019, to learn about front-end development. It was merely a code playground for me to learn and experiment and was rewritten a couple of times. The last rewrite attempt was in early 2020 using certain "),t("RouterLink",{attrs:{to:"/blog/building-win7-simu.html#the-tech-stack"}},[e._v("popular web techs")]),e._v(" at that time, and I decided to publish it to Google Play as an Android app. It somehow got popular and has received a lot of downloads and positive feedback. Since then, I have been pushing it further by rolling out new features and updates regularly.")],1),e._v(" "),t("p",[e._v("Till now, the app has had a total of "),t("strong",[e._v("10M downloads")]),e._v(" and approximately "),t("strong",[e._v("50K daily active users")]),e._v(", which can be easily considered a success for a side project. But do you know what makes it appear even more successful to me? It's the fact that it also generates some recurring revenue, monthly, stably, and kind of passively.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(373),alt:"Win7 Simu's daily active users stats"}})]),e._v(" "),t("a-google-ad"),e._v(" "),t("h3",{attrs:{id:"building-the-surroundings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-the-surroundings"}},[e._v("#")]),e._v(" Building the surroundings")]),e._v(" "),t("p",[e._v("After recognizing its potential, I decided to invest more time and effort into the project. With Win7 Simu at the center, I started to build the surroundings, things that I believe would help me grow this project into a brand and eventually turn it into a side hustle. Below are a couple of things that I have done so far.")]),e._v(" "),t("p",[t("strong",[e._v("Homepage + Blog")]),e._v(" ("),t("em",[t("strong",[e._v("visnalize.com")])]),e._v(") - this idea came to me as Google Play required me to provide a privacy policy URL for the app when I tried publishing it to their store. I decided to build a simple homepage for it with little to no content at the beginning, but it has been growing since then, from an average of barely 300 to more than 1000 daily active users. The homepage is now the place where I share more about my projects, the stories behind and some of the learnings I have had along the way.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(374),alt:"Homepage daily active users stats"}})]),e._v(" "),t("p",[t("em",[e._v("Homepage daily active users growth over time")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.youtube.com/@visnalize",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("YouTube channel")]),t("OutboundLink")],1),e._v(" - this idea, again, came to me only as Google Play required me to provide a YouTube trailer video for the app. Although I have had this channel for a while, I didn't really use it until then. After the trailer video for Win7 Simu, I started to upload more videos, still mostly revolving around the app, but also some other kinds of content that I think would be interesting to the viewers, but none of them has been seen as successful as the Win7 Simu-related ones. Since the beginning, the channel has been growing steadily, currently with more than 7200 subscribers and 100K+ monthly views. If you are interested, here is a video sharing more in-depth about the channel's growth:")]),e._v(" "),t("p"),t("div",{staticClass:"embed-responsive embed-responsive-16by9"},[t("iframe",{staticClass:"embed-responsive-item youtube-player",attrs:{type:"text/html",width:"640",height:"390",src:"https://www.youtube.com/embed/s6LfrKvq8n4",frameborder:"0",webkitallowfullscreen:"",mozallowfullscreen:"",allowfullscreen:""}})]),t("p"),e._v(" "),t("p",[t("strong",[e._v("Social networks")]),e._v(" ("),t("a",{attrs:{href:"https://github.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Github"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://twitter.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Twitter"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.facebook.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Facebook"),t("OutboundLink")],1),e._v(") - at some point after growing the homepage and the YouTube channel to a certain extent, I decided to expand to other social networks to gain more exposure and reach more people. Although the growth has been slow and the results are gloomy looking, I believe it is still worth the effort as it is not too time-consuming and the potential is still there.")]),e._v(" "),t("h2",{attrs:{id:"a-diverse-revenue-model"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-diverse-revenue-model"}},[e._v("#")]),e._v(" A diverse revenue model")]),e._v(" "),t("p",[e._v("Let's get to the main topic of this post, the revenue model. I have been trying out different ways to monetize the project, and here are some of them.")]),e._v(" "),t("h3",{attrs:{id:"ads"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ads"}},[e._v("#")]),e._v(" Ads")]),e._v(" "),t("blockquote",[t("p",[t("em",[e._v("Recommended read: "),t("RouterLink",{attrs:{to:"/blog/about-the-ads.html"}},[e._v("About the ads and how I implement them")])],1)])]),e._v(" "),t("p",[e._v("Due to the nature of the project, I thought that ads would be the most suitable way to monetize it. For the app version of Win7 Simu, I started out with "),t("strong",[e._v("Google Admob")]),e._v(", which appears to be the most popular ad network for mobile apps, however, due to certain issues with the network, I switched to "),t("strong",[e._v("Applovin")]),e._v(", which has been working well so far. For its web version, I have been using "),t("strong",[e._v("Google Adsense")]),e._v(" and it has been working well so far. Although at the beginning, I also had some problems setting it up due to the fact that Adsense is not designed and supported for web apps, but I managed to find a way around it by getting this homepage approved first, then I can serve ads on the web app as well, thanks to it being hosted on a subdomain of this homepage.")]),e._v(" "),t("p",[e._v("Some time later, I tried out the mediation feature of Applovin, which allows me to serve ads from whichever ad network that offers the highest eCPM (effective cost per mille) rate. Since using mediation, I have been seeing a significant boost in revenue by partnering with several external ad networks such as "),t("strong",[e._v("VDO.AI")]),e._v(", "),t("strong",[e._v("Appbroda")]),e._v(", and even "),t("strong",[e._v("Admob")]),e._v(", which I was unable to use their service as the primary platform. And until now, ads have been the main source of revenue for this project.")]),e._v(" "),t("p",[e._v("Aside from the mobile and web versions of Win7 Simu, I have also been serving ads on the homepage and turning on monetization for the YouTube channel. Although the revenue from these sources is not much, it is still a great addition to the overall revenue.")]),e._v(" "),t("h3",{attrs:{id:"subscriptions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#subscriptions"}},[e._v("#")]),e._v(" Subscriptions")]),e._v(" "),t("p",[e._v("After seeing the positive revenue outputs from ads, and having received much feedback from users, I added a subscription feature to Win7 Simu's app version using "),t("strong",[e._v("Google Play Billing")]),e._v(" to allow users to experience the app without interruption by removing ads. The subscription is simple, having only 2 options available: monthly and yearly, with affordable prices. I honestly never expected it to be well-received, but it turned out to be working well, with a decent amount of subscribers and recurring revenue so far.")]),e._v(" "),t("p",[e._v("Likewise, I also added a subscription feature to the web version of Win7 Simu via "),t("strong",[e._v("Patreon")]),e._v(", which is a popular platform for creators to get paid by their fans/users. Despite the outlook not looking as positive as the app version, I still learned something there, and the experience can be useful for future projects.")]),e._v(" "),t("h3",{attrs:{id:"partnerships"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#partnerships"}},[e._v("#")]),e._v(" Partnerships")]),e._v(" "),t("p",[e._v("The last revenue source that I have had my hands on is new and unique in its own way (or rather unpopular in my opinion). It is a partnership with "),t("strong",[e._v("Gamezop")]),e._v(', a gaming platform that any websites/web apps can integrate to bring casual games for their users. The so-called "integration" is rather simple in my case, all I needed to do was just add a banner/icon in my app that leads to the Gamezop platform where my users can play a wide range of casual games. Half of the ad revenue generated from the platform would then be shared with me. The shared revenue is nowhere near the amount that I get from the main revenue source, but it still has been decently and consistently contributing to the overall revenue.')]),e._v(" "),t("a-google-ad"),e._v(" "),t("h2",{attrs:{id:"disclosing-the-numbers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disclosing-the-numbers"}},[e._v("#")]),e._v(" Disclosing the numbers")]),e._v(" "),t("p",[e._v('"I don\'t give a sh*t about your story, just show me the numbers" - if that is what you are thinking, then I will cut to the chase and show you the numbers. Below is a list of the MRR (monthly recurring revenue) breakdown for all of the revenue sources that I have mentioned above from the latest month (October 2023).')]),e._v(" "),t("ul",[t("li",[e._v("Ads:\n"),t("ul",[t("li",[e._v("Applovin: "),t("strong",[e._v("~400$")])]),e._v(" "),t("li",[e._v("Admob: "),t("strong",[e._v("~300$")])]),e._v(" "),t("li",[e._v("VDO: "),t("strong",[e._v("~60$")])]),e._v(" "),t("li",[e._v("Appbroda: "),t("strong",[e._v("~40$")])]),e._v(" "),t("li",[e._v("Adsense: "),t("strong",[e._v("~300$")])])])]),e._v(" "),t("li",[e._v("Subscriptions:\n"),t("ul",[t("li",[e._v("In-app purchase: "),t("strong",[e._v("~200$")])]),e._v(" "),t("li",[e._v("Patreon: "),t("strong",[e._v("1.67$")])])])]),e._v(" "),t("li",[e._v("Partnership (Gamezop): "),t("strong",[e._v("~20$")])])]),e._v(" "),t("p",[e._v("In total, after subtracting all the costs and expenses, the MRR is around "),t("strong",[e._v("1000$")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"final-thoughts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#final-thoughts"}},[e._v("#")]),e._v(" Final thoughts")]),e._v(" "),t("p",[e._v("So how do you feel about that number? Is it a lot? Is it just a little? The answer likely depends on from which part of the world you are looking at it, but for me, it is a lot, especially for something that I started out as a side project for learning. With that said, it is still unlikely that I will receive this exact amount every month, there might be ups and downs, there might be happy days when I receive more, and there might be a chance I lose it all like waking up from a sweet dream, but I am still happy with what I have achieved so far.")]),e._v(" "),t("p",[e._v("A few key takeaways that you may find useful from my story:")]),e._v(" "),t("ul",[t("li",[e._v("I was lucky to be able to turn my learning process into a side project, and eventually a side hustle.")]),e._v(" "),t("li",[e._v("I diversified the revenue sources to minimize the risk of losing it all and to maximize the potential of earning more.")]),e._v(" "),t("li",[e._v("I kept grinding and pushing it further, even when I didn't feel like it, and it paid off.")]),e._v(" "),t("li",[e._v("I was, I am, and I will still learning, and applying what I learned to make good use of every opportunity.")])]),e._v(" "),t("p",[e._v("And as I said at the beginning of this post, this is a very subjective story, what worked out for me may not work out for you, and even this little success might not repeat itself for my other projects. But I hope through this post, you have learned something new and useful, and I wish you all the best with your projects.")]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{377:function(e,t,a){e.exports=a.p+"assets/img/win7-simu-dau.3e6d196c.png"},378:function(e,t,a){e.exports=a.p+"assets/img/homepage-dau.e246c522.png"},502:function(e,t,a){"use strict";a.r(t);var o=a(13),i=Object(o.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"turning-my-side-project-into-a-side-hustle"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#turning-my-side-project-into-a-side-hustle"}},[e._v("#")]),e._v(" Turning my side project into a side hustle")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://media.istockphoto.com/id/1349329446/photo/dollars-cash-money-and-paper-note-with-text-written-extra-income-concept-of-financial.jpg?s=1024x1024&w=is&k=20&c=RXsEpU41u0Yke-ol53PoirkXHTOliHGfvijnYipidtQ=",alt:"Side hustle cash"}})]),e._v(" "),t("p",[e._v("Today is November 11, 2023, it has been a year since I wrote my previous blog post "),t("RouterLink",{attrs:{to:"/blog/building-win7-simu.html"}},[e._v("sharing how I built Win7 Simu")]),e._v(" to celebrate a milestone of 5M Google Play downloads. We are now at "),t("strong",[e._v("10M downloads")]),e._v(" and again, to celebrate this milestone, I decided to sit down and write another blog post to share about how this "),t("s",[e._v("silly")]),e._v(" side project has turned into a side hustle and has been generating a decent amount of recurring revenue for me since. Yes, we are talking about "),t("em",[e._v("money")]),e._v(" here, a sensitive topic, but somehow I feel that it may be interesting, with some of the learnings that I have had along the way may be useful to you. However, bear in mind that what you are about to read is "),t("strong",[e._v("subjective")]),e._v(" and based on my own experience, so you are welcome to read with a grain of salt.")],1),e._v(" "),t("h2",{attrs:{id:"the-beginning"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-beginning"}},[e._v("#")]),e._v(" The beginning")]),e._v(" "),t("h3",{attrs:{id:"the-idea-that-started-it-all"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#the-idea-that-started-it-all"}},[e._v("#")]),e._v(" The idea that started it all")]),e._v(" "),t("p",[e._v("I highly recommend reading "),t("RouterLink",{attrs:{to:"/blog/building-win7-simu.html"}},[e._v("my previous post")]),e._v(" first if you haven't to get to know more about this silly project and how it started, but if you don't want to, here is a brief summary:")],1),e._v(" "),t("p",[e._v("I had an idea of cloning Windows 7 UI to the web way back in mid-2019, to learn about front-end development. It was merely a code playground for me to learn and experiment and was rewritten a couple of times. The last rewrite attempt was in early 2020 using certain "),t("RouterLink",{attrs:{to:"/blog/building-win7-simu.html#the-tech-stack"}},[e._v("popular web techs")]),e._v(" at that time, and I decided to publish it to Google Play as an Android app. It somehow got popular and has received a lot of downloads and positive feedback. Since then, I have been pushing it further by rolling out new features and updates regularly.")],1),e._v(" "),t("p",[e._v("Till now, the app has had a total of "),t("strong",[e._v("10M downloads")]),e._v(" and approximately "),t("strong",[e._v("50K daily active users")]),e._v(", which can be easily considered a success for a side project. But do you know what makes it appear even more successful to me? It's the fact that it also generates some recurring revenue, monthly, stably, and kind of passively.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(377),alt:"Win7 Simu's daily active users stats"}})]),e._v(" "),t("a-google-ad"),e._v(" "),t("h3",{attrs:{id:"building-the-surroundings"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#building-the-surroundings"}},[e._v("#")]),e._v(" Building the surroundings")]),e._v(" "),t("p",[e._v("After recognizing its potential, I decided to invest more time and effort into the project. With Win7 Simu at the center, I started to build the surroundings, things that I believe would help me grow this project into a brand and eventually turn it into a side hustle. Below are a couple of things that I have done so far.")]),e._v(" "),t("p",[t("strong",[e._v("Homepage + Blog")]),e._v(" ("),t("em",[t("strong",[e._v("visnalize.com")])]),e._v(") - this idea came to me as Google Play required me to provide a privacy policy URL for the app when I tried publishing it to their store. I decided to build a simple homepage for it with little to no content at the beginning, but it has been growing since then, from an average of barely 300 to more than 1000 daily active users. The homepage is now the place where I share more about my projects, the stories behind and some of the learnings I have had along the way.")]),e._v(" "),t("p",[t("img",{attrs:{src:a(378),alt:"Homepage daily active users stats"}})]),e._v(" "),t("p",[t("em",[e._v("Homepage daily active users growth over time")])]),e._v(" "),t("p",[t("a",{attrs:{href:"https://www.youtube.com/@visnalize",target:"_blank",rel:"noopener noreferrer"}},[t("strong",[e._v("YouTube channel")]),t("OutboundLink")],1),e._v(" - this idea, again, came to me only as Google Play required me to provide a YouTube trailer video for the app. Although I have had this channel for a while, I didn't really use it until then. After the trailer video for Win7 Simu, I started to upload more videos, still mostly revolving around the app, but also some other kinds of content that I think would be interesting to the viewers, but none of them has been seen as successful as the Win7 Simu-related ones. Since the beginning, the channel has been growing steadily, currently with more than 7200 subscribers and 100K+ monthly views. If you are interested, here is a video sharing more in-depth about the channel's growth:")]),e._v(" "),t("p"),t("div",{staticClass:"embed-responsive embed-responsive-16by9"},[t("iframe",{staticClass:"embed-responsive-item youtube-player",attrs:{type:"text/html",width:"640",height:"390",src:"https://www.youtube.com/embed/s6LfrKvq8n4",frameborder:"0",webkitallowfullscreen:"",mozallowfullscreen:"",allowfullscreen:""}})]),t("p"),e._v(" "),t("p",[t("strong",[e._v("Social networks")]),e._v(" ("),t("a",{attrs:{href:"https://github.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Github"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://twitter.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Twitter"),t("OutboundLink")],1),e._v(", "),t("a",{attrs:{href:"https://www.facebook.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Facebook"),t("OutboundLink")],1),e._v(") - at some point after growing the homepage and the YouTube channel to a certain extent, I decided to expand to other social networks to gain more exposure and reach more people. Although the growth has been slow and the results are gloomy looking, I believe it is still worth the effort as it is not too time-consuming and the potential is still there.")]),e._v(" "),t("h2",{attrs:{id:"a-diverse-revenue-model"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#a-diverse-revenue-model"}},[e._v("#")]),e._v(" A diverse revenue model")]),e._v(" "),t("p",[e._v("Let's get to the main topic of this post, the revenue model. I have been trying out different ways to monetize the project, and here are some of them.")]),e._v(" "),t("h3",{attrs:{id:"ads"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ads"}},[e._v("#")]),e._v(" Ads")]),e._v(" "),t("blockquote",[t("p",[t("em",[e._v("Recommended read: "),t("RouterLink",{attrs:{to:"/blog/about-the-ads.html"}},[e._v("About the ads and how I implement them")])],1)])]),e._v(" "),t("p",[e._v("Due to the nature of the project, I thought that ads would be the most suitable way to monetize it. For the app version of Win7 Simu, I started out with "),t("strong",[e._v("Google Admob")]),e._v(", which appears to be the most popular ad network for mobile apps, however, due to certain issues with the network, I switched to "),t("strong",[e._v("Applovin")]),e._v(", which has been working well so far. For its web version, I have been using "),t("strong",[e._v("Google Adsense")]),e._v(" and it has been working well so far. Although at the beginning, I also had some problems setting it up due to the fact that Adsense is not designed and supported for web apps, but I managed to find a way around it by getting this homepage approved first, then I can serve ads on the web app as well, thanks to it being hosted on a subdomain of this homepage.")]),e._v(" "),t("p",[e._v("Some time later, I tried out the mediation feature of Applovin, which allows me to serve ads from whichever ad network that offers the highest eCPM (effective cost per mille) rate. Since using mediation, I have been seeing a significant boost in revenue by partnering with several external ad networks such as "),t("strong",[e._v("VDO.AI")]),e._v(", "),t("strong",[e._v("Appbroda")]),e._v(", and even "),t("strong",[e._v("Admob")]),e._v(", which I was unable to use their service as the primary platform. And until now, ads have been the main source of revenue for this project.")]),e._v(" "),t("p",[e._v("Aside from the mobile and web versions of Win7 Simu, I have also been serving ads on the homepage and turning on monetization for the YouTube channel. Although the revenue from these sources is not much, it is still a great addition to the overall revenue.")]),e._v(" "),t("h3",{attrs:{id:"subscriptions"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#subscriptions"}},[e._v("#")]),e._v(" Subscriptions")]),e._v(" "),t("p",[e._v("After seeing the positive revenue outputs from ads, and having received much feedback from users, I added a subscription feature to Win7 Simu's app version using "),t("strong",[e._v("Google Play Billing")]),e._v(" to allow users to experience the app without interruption by removing ads. The subscription is simple, having only 2 options available: monthly and yearly, with affordable prices. I honestly never expected it to be well-received, but it turned out to be working well, with a decent amount of subscribers and recurring revenue so far.")]),e._v(" "),t("p",[e._v("Likewise, I also added a subscription feature to the web version of Win7 Simu via "),t("strong",[e._v("Patreon")]),e._v(", which is a popular platform for creators to get paid by their fans/users. Despite the outlook not looking as positive as the app version, I still learned something there, and the experience can be useful for future projects.")]),e._v(" "),t("h3",{attrs:{id:"partnerships"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#partnerships"}},[e._v("#")]),e._v(" Partnerships")]),e._v(" "),t("p",[e._v("The last revenue source that I have had my hands on is new and unique in its own way (or rather unpopular in my opinion). It is a partnership with "),t("strong",[e._v("Gamezop")]),e._v(', a gaming platform that any websites/web apps can integrate to bring casual games for their users. The so-called "integration" is rather simple in my case, all I needed to do was just add a banner/icon in my app that leads to the Gamezop platform where my users can play a wide range of casual games. Half of the ad revenue generated from the platform would then be shared with me. The shared revenue is nowhere near the amount that I get from the main revenue source, but it still has been decently and consistently contributing to the overall revenue.')]),e._v(" "),t("a-google-ad"),e._v(" "),t("h2",{attrs:{id:"disclosing-the-numbers"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#disclosing-the-numbers"}},[e._v("#")]),e._v(" Disclosing the numbers")]),e._v(" "),t("p",[e._v('"I don\'t give a sh*t about your story, just show me the numbers" - if that is what you are thinking, then I will cut to the chase and show you the numbers. Below is a list of the MRR (monthly recurring revenue) breakdown for all of the revenue sources that I have mentioned above from the latest month (October 2023).')]),e._v(" "),t("ul",[t("li",[e._v("Ads:\n"),t("ul",[t("li",[e._v("Applovin: "),t("strong",[e._v("~400$")])]),e._v(" "),t("li",[e._v("Admob: "),t("strong",[e._v("~300$")])]),e._v(" "),t("li",[e._v("VDO: "),t("strong",[e._v("~60$")])]),e._v(" "),t("li",[e._v("Appbroda: "),t("strong",[e._v("~40$")])]),e._v(" "),t("li",[e._v("Adsense: "),t("strong",[e._v("~300$")])])])]),e._v(" "),t("li",[e._v("Subscriptions:\n"),t("ul",[t("li",[e._v("In-app purchase: "),t("strong",[e._v("~200$")])]),e._v(" "),t("li",[e._v("Patreon: "),t("strong",[e._v("1.67$")])])])]),e._v(" "),t("li",[e._v("Partnership (Gamezop): "),t("strong",[e._v("~20$")])])]),e._v(" "),t("p",[e._v("In total, after subtracting all the costs and expenses, the MRR is around "),t("strong",[e._v("1000$")]),e._v(".")]),e._v(" "),t("h2",{attrs:{id:"final-thoughts"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#final-thoughts"}},[e._v("#")]),e._v(" Final thoughts")]),e._v(" "),t("p",[e._v("So how do you feel about that number? Is it a lot? Is it just a little? The answer likely depends on from which part of the world you are looking at it, but for me, it is a lot, especially for something that I started out as a side project for learning. With that said, it is still unlikely that I will receive this exact amount every month, there might be ups and downs, there might be happy days when I receive more, and there might be a chance I lose it all like waking up from a sweet dream, but I am still happy with what I have achieved so far.")]),e._v(" "),t("p",[e._v("A few key takeaways that you may find useful from my story:")]),e._v(" "),t("ul",[t("li",[e._v("I was lucky to be able to turn my learning process into a side project, and eventually a side hustle.")]),e._v(" "),t("li",[e._v("I diversified the revenue sources to minimize the risk of losing it all and to maximize the potential of earning more.")]),e._v(" "),t("li",[e._v("I kept grinding and pushing it further, even when I didn't feel like it, and it paid off.")]),e._v(" "),t("li",[e._v("I was, I am, and I will still learning, and applying what I learned to make good use of every opportunity.")])]),e._v(" "),t("p",[e._v("And as I said at the beginning of this post, this is a very subjective story, what worked out for me may not work out for you, and even this little success might not repeat itself for my other projects. But I hope through this post, you have learned something new and useful, and I wish you all the best with your projects.")]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/47.2c170ab2.js b/assets/js/47.52511ab3.js similarity index 97% rename from assets/js/47.2c170ab2.js rename to assets/js/47.52511ab3.js index 24b3442c..c6aa0e17 100644 --- a/assets/js/47.2c170ab2.js +++ b/assets/js/47.52511ab3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{388:function(e,t,o){e.exports=o.p+"assets/img/win7-simu-computer.b9265f50.png"},389:function(e,t,o){e.exports=o.p+"assets/img/win7-simu-indexeddb.f8841da2.png"},509:function(e,t,o){"use strict";o.r(t);var i=o(13),a=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"implementing-file-explorer-in-win7-simu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementing-file-explorer-in-win7-simu"}},[e._v("#")]),e._v(" Implementing File Explorer in Win7 Simu")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://images.unsplash.com/photo-1544396821-4dd40b938ad3?auto=format&fit=crop&w=740&q=80",alt:"Files and folders"}})]),e._v(" "),t("p",[t("em",[e._v("Cover image by Viktor Talashuk via "),t("a",{attrs:{href:"https://unsplash.com/photos/05HLFQu8bFw",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unsplash"),t("OutboundLink")],1)])]),e._v(" "),t("p",[t("strong",[e._v("File Explorer")]),e._v(" has always been one of the vital features in any operating system, as a Windows simulator, to no surprise that it's also among the most demanded features to be added in Win7 Simu. However, I have been procrastinating its implementation as, besides my skillset limitations, there are quite a lot of complexities and technical constraints involved. Now that I have finally been able to implement it properly, let's read through some technical decisions I made and how it deviates from the actual File Explorer of Windows.")]),e._v(" "),t("h2",{attrs:{id:"some-difficulties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#some-difficulties"}},[e._v("#")]),e._v(" Some difficulties")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Self-skillset limitation")]),e._v(" - as this simulator has been a work of a one-man development team, sometimes it is tough when you get stuck and there is nobody to support, or at least just to talk it out")]),e._v(" "),t("li",[t("em",[e._v("Work-life balance disruption")]),e._v(" - as I have a family and a 9-to-5 job, trying to find a time slot in between for hobbyist projects is tough")]),e._v(" "),t("li",[t("em",[e._v("Disheartening moments")]),e._v(" - having to spend a long long time working on something out of your capability, and stay committed to it is also tough")]),e._v(" "),t("li",[t("em",[e._v("Too many unknowns")]),e._v(" - libraries, frameworks, techs, platforms, devices, or even just the languages you are not in control may slow you down, kill your time and still you couldn't figure out how to resolve the issue.")])]),e._v(" "),t("p",[e._v("Yes, those are, but not all the difficulties I have been dealing with when developing the File Explorer functionalities, or in general, this simulator. Just a little bit of a sharing before we get into the technical stuff, so you may know that there is no shortcut to achievements.")]),e._v(" "),t("p",[e._v("Despite only a few capabilities being rolled out for the File Explorer in "),t("RouterLink",{attrs:{to:"/win7simu/changelog.html#_3-0-0-may-20-2023"}},[e._v("v3.0.0")]),e._v(", it actually took me months to come up, put the stuff together, and do thorough testing before releasing to you. It was not easy, at all, with several late nights and weekends burned onto it, having to face constant challenges and struggling to break through my own limits. However, the hard work finally paid off, it has come to fruition 😌")],1),e._v(" "),t("h2",{attrs:{id:"implementing-the-file-explorer-functionalities"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementing-the-file-explorer-functionalities"}},[e._v("#")]),e._v(" Implementing the File Explorer functionalities")]),e._v(" "),t("p",[t("img",{attrs:{src:o(388),alt:"Win7 Simu File Explorer"}})]),e._v(" "),t("p",[e._v("In v3.0.0, the minimum viable version of File Explorer supports basic operations on files and folders such as creating, opening, editing, renaming, moving, copying, and pasting. And an integral part of this is the trash/delete mechanism which is also supported. As the simulator has to support both Web and Android platforms, there are some challenges to solve for each, and the implementation approach also differs. I will break down some key notes for each.")]),e._v(" "),t("a-google-ad"),e._v(" "),t("h3",{attrs:{id:"implementation-for-android"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementation-for-android"}},[e._v("#")]),e._v(" Implementation for Android")]),e._v(" "),t("p",[e._v("With Android already having its own file management system to help organize and manage data from memory cards, I only needed to leverage this capability and hook up to Win7 Simu. However, as easy as it may sound, for someone who has very little knowledge of any programming languages other than JavaScript, it was time-consuming to be able to write a simple piece of code that just works without many issues.")]),e._v(" "),t("p",[e._v("Anyway, the key thing I'm trying to get across here is that, as an operating system, Android has its own way of organizing files and folders, where there is no concept of disk drives or the like as in Windows. And to make it worse, even the different Android versions have a slight difference to handle this among themselves 🤦‍♂️ Therefore, to mimic the disk-drive-driven structure, I needed to build a tree hierarchy from the app directory (a user-friendly path is something like: "),t("code",[e._v("Android/data/win7simu.visnalize.com/files")]),e._v("), which does not require any permission to perform read/write operations on, in case you are doubtful to grant this app access to your data. To put it simply, the app directory acts as the File Explorer system root, with the path hierarchy as follows:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("Android/data/win7simu.visnalize.com/files\n└── computer/\n └── drive0/\n ├── Program Files/\n ├── Users/\n │ ├── Guest\n │ │ ├── AppData\n │ │ │ └── Roaming\n │ │ │ └── Visnalize\n │ │ │ └── Windows\n │ │ │ └── RecycleBin\n │ │ ├── Downloads\n │ │ ├── Music\n │ │ └── Videos\n │ └── \n │ ├── AppData\n │ ├── Desktop\n │ └── ...\n └── Windows/\n")])])]),t("p",[e._v("Moreover, there is a separate Android drive where you can access all the data available from the root of the memory card. However, due to the strict permission policies, an app is only allowed a certain level of access to the data outside of that app's directory, especially on later Android versions, so please do not expect the Win7 Simu's File Explorer to be as robust as the system default one. Ultimately, its sole purpose is not to be a complete functional emulator, but just to experience, to explore certain limited simulated features of Windows 7.")]),e._v(" "),t("h3",{attrs:{id:"implementation-for-web"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementation-for-web"}},[e._v("#")]),e._v(" Implementation for Web")]),e._v(" "),t("p",[e._v("For the Web, the approach was literally built from the ground up, with the IndexedDB API utilized as the source for storing the item paths and organizing them into a hierarchical tree. "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("IndexedDB"),t("OutboundLink")],1),e._v(" is a powerful solution that allows storing large amounts of data with high-performance search capability based on indexed keys. If you're a curious person with some coding experience, you may check out the web version of Win7 Simu from the dev tools and you may see something like this:")]),e._v(" "),t("p",[t("img",{attrs:{src:o(389),alt:"Win7 Simu File Explorer structure in IndexedDB"}})]),e._v(" "),t("p",[e._v("That is how the File Explorer is structured under the hood from the IndexedDB view. Each file/folder's path corresponds to an index key, with the value containing the metadata and content of that item. For every operation performed against this structure, such as creating, modifying or deleting an item... a corresponding path or key reacts to it. The whole structure is then processed and displayed accordingly on the File Explorer interface.")]),e._v(" "),t("p",[e._v("And of course, be cautious not to mess with it, otherwise, you will lose all your data (hopefully not so important, but I guess who would put important stuff in a simulator, right?).")]),e._v(" "),t("h2",{attrs:{id:"so-what-s-next"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#so-what-s-next"}},[e._v("#")]),e._v(" So, what's next")]),e._v(" "),t("p",[e._v("As the released version of the File Explorer is roughly just a minimum viable version, there are still plenty of rooms for improvements and addon features, namely:")]),e._v(" "),t("ul",[t("li",[e._v("Support multiple item selection")]),e._v(" "),t("li",[e._v("Support quick navigation from the address bar")]),e._v(" "),t("li",[e._v("Support files/folders search")]),e._v(" "),t("li",[e._v("Support sorting items, various view modes (thumbnail, list, details)")]),e._v(" "),t("li",[e._v("Support storage allocation, add volumes, modify drive labels")])]),e._v(" "),t("p",[e._v("And many more that, depending on the number of demands and requests, I might get my hands onto them, some may get implemented very soon, late or will never get implemented at all.")]),e._v(" "),t("p",[e._v("If you enjoy my work and it has somehow helped you in any way, get in touch with me via my email, or simply leave a comment to let me know, that will definitely lift my spirit and encourage me, or even better, become a financial supporter (via "),t("a",{attrs:{href:"https://www.patreon.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Patreon"),t("OutboundLink")],1),e._v(" or Play Store IAP) so I can constantly invest more time in it and roll out more cool features. Again, thank you for your support and stay tuned for more updates. ✌")]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{386:function(e,t,o){e.exports=o.p+"assets/img/win7-simu-computer.b9265f50.png"},387:function(e,t,o){e.exports=o.p+"assets/img/win7-simu-indexeddb.f8841da2.png"},509:function(e,t,o){"use strict";o.r(t);var i=o(13),a=Object(i.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"implementing-file-explorer-in-win7-simu"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementing-file-explorer-in-win7-simu"}},[e._v("#")]),e._v(" Implementing File Explorer in Win7 Simu")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://images.unsplash.com/photo-1544396821-4dd40b938ad3?auto=format&fit=crop&w=740&q=80",alt:"Files and folders"}})]),e._v(" "),t("p",[t("em",[e._v("Cover image by Viktor Talashuk via "),t("a",{attrs:{href:"https://unsplash.com/photos/05HLFQu8bFw",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unsplash"),t("OutboundLink")],1)])]),e._v(" "),t("p",[t("strong",[e._v("File Explorer")]),e._v(" has always been one of the vital features in any operating system, as a Windows simulator, to no surprise that it's also among the most demanded features to be added in Win7 Simu. However, I have been procrastinating its implementation as, besides my skillset limitations, there are quite a lot of complexities and technical constraints involved. Now that I have finally been able to implement it properly, let's read through some technical decisions I made and how it deviates from the actual File Explorer of Windows.")]),e._v(" "),t("h2",{attrs:{id:"some-difficulties"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#some-difficulties"}},[e._v("#")]),e._v(" Some difficulties")]),e._v(" "),t("ul",[t("li",[t("em",[e._v("Self-skillset limitation")]),e._v(" - as this simulator has been a work of a one-man development team, sometimes it is tough when you get stuck and there is nobody to support, or at least just to talk it out")]),e._v(" "),t("li",[t("em",[e._v("Work-life balance disruption")]),e._v(" - as I have a family and a 9-to-5 job, trying to find a time slot in between for hobbyist projects is tough")]),e._v(" "),t("li",[t("em",[e._v("Disheartening moments")]),e._v(" - having to spend a long long time working on something out of your capability, and stay committed to it is also tough")]),e._v(" "),t("li",[t("em",[e._v("Too many unknowns")]),e._v(" - libraries, frameworks, techs, platforms, devices, or even just the languages you are not in control may slow you down, kill your time and still you couldn't figure out how to resolve the issue.")])]),e._v(" "),t("p",[e._v("Yes, those are, but not all the difficulties I have been dealing with when developing the File Explorer functionalities, or in general, this simulator. Just a little bit of a sharing before we get into the technical stuff, so you may know that there is no shortcut to achievements.")]),e._v(" "),t("p",[e._v("Despite only a few capabilities being rolled out for the File Explorer in "),t("RouterLink",{attrs:{to:"/win7simu/changelog.html#_3-0-0-may-20-2023"}},[e._v("v3.0.0")]),e._v(", it actually took me months to come up, put the stuff together, and do thorough testing before releasing to you. It was not easy, at all, with several late nights and weekends burned onto it, having to face constant challenges and struggling to break through my own limits. However, the hard work finally paid off, it has come to fruition 😌")],1),e._v(" "),t("h2",{attrs:{id:"implementing-the-file-explorer-functionalities"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementing-the-file-explorer-functionalities"}},[e._v("#")]),e._v(" Implementing the File Explorer functionalities")]),e._v(" "),t("p",[t("img",{attrs:{src:o(386),alt:"Win7 Simu File Explorer"}})]),e._v(" "),t("p",[e._v("In v3.0.0, the minimum viable version of File Explorer supports basic operations on files and folders such as creating, opening, editing, renaming, moving, copying, and pasting. And an integral part of this is the trash/delete mechanism which is also supported. As the simulator has to support both Web and Android platforms, there are some challenges to solve for each, and the implementation approach also differs. I will break down some key notes for each.")]),e._v(" "),t("a-google-ad"),e._v(" "),t("h3",{attrs:{id:"implementation-for-android"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementation-for-android"}},[e._v("#")]),e._v(" Implementation for Android")]),e._v(" "),t("p",[e._v("With Android already having its own file management system to help organize and manage data from memory cards, I only needed to leverage this capability and hook up to Win7 Simu. However, as easy as it may sound, for someone who has very little knowledge of any programming languages other than JavaScript, it was time-consuming to be able to write a simple piece of code that just works without many issues.")]),e._v(" "),t("p",[e._v("Anyway, the key thing I'm trying to get across here is that, as an operating system, Android has its own way of organizing files and folders, where there is no concept of disk drives or the like as in Windows. And to make it worse, even the different Android versions have a slight difference to handle this among themselves 🤦‍♂️ Therefore, to mimic the disk-drive-driven structure, I needed to build a tree hierarchy from the app directory (a user-friendly path is something like: "),t("code",[e._v("Android/data/win7simu.visnalize.com/files")]),e._v("), which does not require any permission to perform read/write operations on, in case you are doubtful to grant this app access to your data. To put it simply, the app directory acts as the File Explorer system root, with the path hierarchy as follows:")]),e._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[e._v("Android/data/win7simu.visnalize.com/files\n└── computer/\n └── drive0/\n ├── Program Files/\n ├── Users/\n │ ├── Guest\n │ │ ├── AppData\n │ │ │ └── Roaming\n │ │ │ └── Visnalize\n │ │ │ └── Windows\n │ │ │ └── RecycleBin\n │ │ ├── Downloads\n │ │ ├── Music\n │ │ └── Videos\n │ └── \n │ ├── AppData\n │ ├── Desktop\n │ └── ...\n └── Windows/\n")])])]),t("p",[e._v("Moreover, there is a separate Android drive where you can access all the data available from the root of the memory card. However, due to the strict permission policies, an app is only allowed a certain level of access to the data outside of that app's directory, especially on later Android versions, so please do not expect the Win7 Simu's File Explorer to be as robust as the system default one. Ultimately, its sole purpose is not to be a complete functional emulator, but just to experience, to explore certain limited simulated features of Windows 7.")]),e._v(" "),t("h3",{attrs:{id:"implementation-for-web"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#implementation-for-web"}},[e._v("#")]),e._v(" Implementation for Web")]),e._v(" "),t("p",[e._v("For the Web, the approach was literally built from the ground up, with the IndexedDB API utilized as the source for storing the item paths and organizing them into a hierarchical tree. "),t("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API",target:"_blank",rel:"noopener noreferrer"}},[e._v("IndexedDB"),t("OutboundLink")],1),e._v(" is a powerful solution that allows storing large amounts of data with high-performance search capability based on indexed keys. If you're a curious person with some coding experience, you may check out the web version of Win7 Simu from the dev tools and you may see something like this:")]),e._v(" "),t("p",[t("img",{attrs:{src:o(387),alt:"Win7 Simu File Explorer structure in IndexedDB"}})]),e._v(" "),t("p",[e._v("That is how the File Explorer is structured under the hood from the IndexedDB view. Each file/folder's path corresponds to an index key, with the value containing the metadata and content of that item. For every operation performed against this structure, such as creating, modifying or deleting an item... a corresponding path or key reacts to it. The whole structure is then processed and displayed accordingly on the File Explorer interface.")]),e._v(" "),t("p",[e._v("And of course, be cautious not to mess with it, otherwise, you will lose all your data (hopefully not so important, but I guess who would put important stuff in a simulator, right?).")]),e._v(" "),t("h2",{attrs:{id:"so-what-s-next"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#so-what-s-next"}},[e._v("#")]),e._v(" So, what's next")]),e._v(" "),t("p",[e._v("As the released version of the File Explorer is roughly just a minimum viable version, there are still plenty of rooms for improvements and addon features, namely:")]),e._v(" "),t("ul",[t("li",[e._v("Support multiple item selection")]),e._v(" "),t("li",[e._v("Support quick navigation from the address bar")]),e._v(" "),t("li",[e._v("Support files/folders search")]),e._v(" "),t("li",[e._v("Support sorting items, various view modes (thumbnail, list, details)")]),e._v(" "),t("li",[e._v("Support storage allocation, add volumes, modify drive labels")])]),e._v(" "),t("p",[e._v("And many more that, depending on the number of demands and requests, I might get my hands onto them, some may get implemented very soon, late or will never get implemented at all.")]),e._v(" "),t("p",[e._v("If you enjoy my work and it has somehow helped you in any way, get in touch with me via my email, or simply leave a comment to let me know, that will definitely lift my spirit and encourage me, or even better, become a financial supporter (via "),t("a",{attrs:{href:"https://www.patreon.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("Patreon"),t("OutboundLink")],1),e._v(" or Play Store IAP) so I can constantly invest more time in it and roll out more cool features. Again, thank you for your support and stay tuned for more updates. ✌")]),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/48.19207380.js b/assets/js/48.783d655f.js similarity index 92% rename from assets/js/48.19207380.js rename to assets/js/48.783d655f.js index b3b91028..8c01c095 100644 --- a/assets/js/48.19207380.js +++ b/assets/js/48.783d655f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{386:function(e,t,s){e.exports=s.p+"assets/img/safari-share.cb037921.png"},387:function(e,t,s){e.exports=s.p+"assets/img/add-to-home-screen.5611989b.png"},508:function(e,t,s){"use strict";s.r(t);var a=s(13),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"win7-simu-versus-mobile-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#win7-simu-versus-mobile-devices"}},[e._v("#")]),e._v(" Win7 Simu versus mobile devices")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://images.unsplash.com/photo-1616353071855-2c045c4458ae?auto=format&fit=crop&w=740&q=80",alt:"Apple devices"}})]),e._v(" "),t("p",[t("em",[e._v("Cover image by Brandon Romanchuk via "),t("a",{attrs:{href:"https://unsplash.com/photos/VXcJYnVjev8",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unsplash"),t("OutboundLink")],1)])]),e._v(" "),t("p",[e._v("Recently, I have received some feedback about making Win7 Simu easily accessible on mobile devices for those who do not own an Android device and cannot grab the installer from the Google Play Store (primarily iOS users). Therefore, in this post, I'm gonna show you how you can install the web version of Win7 Simu on your mobile device and access it just like a native mobile app!")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("This guide primarily aims at iOS users, however, Android and other mobile OSes in general might be able to achieve the same result with a similar method.")])]),e._v(" "),t("h2",{attrs:{id:"step-by-step-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-by-step-guide"}},[e._v("#")]),e._v(" Step-by-step guide")]),e._v(" "),t("h3",{attrs:{id:"_1-open-win7-simu-with-safari"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-open-win7-simu-with-safari"}},[e._v("#")]),e._v(" 1. Open Win7 Simu with Safari")]),e._v(" "),t("p",[e._v("Safari is the default browser on iOS devices and the only browser that enables what we're trying to achieve. So, open up your Safari and navigate to the "),t("a",{attrs:{href:"https://win7simu.visnalize.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Win7 Simu website"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Click on the Share icon as shown in the screenshot below.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(386),alt:"Safari share icon"}})]),e._v(" "),t("h3",{attrs:{id:"_2-add-to-home-screen"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-add-to-home-screen"}},[e._v("#")]),e._v(" 2. Add to Home Screen")]),e._v(" "),t("p",[e._v('From the popup, scroll down until you see the "Add to Home Screen" option as shown in the screenshot below and tap it. Optionally, customize the name of the app by editing the text in the field provided.')]),e._v(" "),t("p",[t("img",{attrs:{src:s(387),alt:"Add to home screen"}})]),e._v(" "),t("h3",{attrs:{id:"_3-enjoy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-enjoy"}},[e._v("#")]),e._v(" 3. Enjoy")]),e._v(" "),t("p",[e._v("Once that's done, you will see the Win7 Simu icon show up on your home screen. And that's it! You've successfully installed Win7 Simu from Safari. Now you can enjoy the app-like experience without the need to download it from the App Store.")]),e._v(" "),t("h2",{attrs:{id:"some-notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#some-notes"}},[e._v("#")]),e._v(" Some notes")]),e._v(" "),t("p",[e._v("Despite the app-like experience, please keep in mind that it is just a website by nature, and therefore still has certain limitations as listed "),t("RouterLink",{attrs:{to:"/win7simu/about.html#web-version"}},[e._v("here")]),e._v(". However, the situation might change in the near future as the technology that empowers this capability receives more robust support from mobile vendors. So stay tuned and keep supporting me, either in spirit or "),t("a",{attrs:{href:"https://www.patreon.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("financial"),t("OutboundLink")],1),e._v(" 🤩")],1),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{388:function(e,t,s){e.exports=s.p+"assets/img/safari-share.cb037921.png"},389:function(e,t,s){e.exports=s.p+"assets/img/add-to-home-screen.5611989b.png"},510:function(e,t,s){"use strict";s.r(t);var a=s(13),i=Object(a.a)({},(function(){var e=this,t=e._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h1",{attrs:{id:"win7-simu-versus-mobile-devices"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#win7-simu-versus-mobile-devices"}},[e._v("#")]),e._v(" Win7 Simu versus mobile devices")]),e._v(" "),t("m-blog-meta"),e._v(" "),t("p",[t("img",{attrs:{src:"https://images.unsplash.com/photo-1616353071855-2c045c4458ae?auto=format&fit=crop&w=740&q=80",alt:"Apple devices"}})]),e._v(" "),t("p",[t("em",[e._v("Cover image by Brandon Romanchuk via "),t("a",{attrs:{href:"https://unsplash.com/photos/VXcJYnVjev8",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unsplash"),t("OutboundLink")],1)])]),e._v(" "),t("p",[e._v("Recently, I have received some feedback about making Win7 Simu easily accessible on mobile devices for those who do not own an Android device and cannot grab the installer from the Google Play Store (primarily iOS users). Therefore, in this post, I'm gonna show you how you can install the web version of Win7 Simu on your mobile device and access it just like a native mobile app!")]),e._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[e._v("Note")]),e._v(" "),t("p",[e._v("This guide primarily aims at iOS users, however, Android and other mobile OSes in general might be able to achieve the same result with a similar method.")])]),e._v(" "),t("h2",{attrs:{id:"step-by-step-guide"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#step-by-step-guide"}},[e._v("#")]),e._v(" Step-by-step guide")]),e._v(" "),t("h3",{attrs:{id:"_1-open-win7-simu-with-safari"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_1-open-win7-simu-with-safari"}},[e._v("#")]),e._v(" 1. Open Win7 Simu with Safari")]),e._v(" "),t("p",[e._v("Safari is the default browser on iOS devices and the only browser that enables what we're trying to achieve. So, open up your Safari and navigate to the "),t("a",{attrs:{href:"https://win7simu.visnalize.com/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Win7 Simu website"),t("OutboundLink")],1),e._v(".")]),e._v(" "),t("p",[e._v("Click on the Share icon as shown in the screenshot below.")]),e._v(" "),t("p",[t("img",{attrs:{src:s(388),alt:"Safari share icon"}})]),e._v(" "),t("h3",{attrs:{id:"_2-add-to-home-screen"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-add-to-home-screen"}},[e._v("#")]),e._v(" 2. Add to Home Screen")]),e._v(" "),t("p",[e._v('From the popup, scroll down until you see the "Add to Home Screen" option as shown in the screenshot below and tap it. Optionally, customize the name of the app by editing the text in the field provided.')]),e._v(" "),t("p",[t("img",{attrs:{src:s(389),alt:"Add to home screen"}})]),e._v(" "),t("h3",{attrs:{id:"_3-enjoy"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_3-enjoy"}},[e._v("#")]),e._v(" 3. Enjoy")]),e._v(" "),t("p",[e._v("Once that's done, you will see the Win7 Simu icon show up on your home screen. And that's it! You've successfully installed Win7 Simu from Safari. Now you can enjoy the app-like experience without the need to download it from the App Store.")]),e._v(" "),t("h2",{attrs:{id:"some-notes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#some-notes"}},[e._v("#")]),e._v(" Some notes")]),e._v(" "),t("p",[e._v("Despite the app-like experience, please keep in mind that it is just a website by nature, and therefore still has certain limitations as listed "),t("RouterLink",{attrs:{to:"/win7simu/about.html#web-version"}},[e._v("here")]),e._v(". However, the situation might change in the near future as the technology that empowers this capability receives more robust support from mobile vendors. So stay tuned and keep supporting me, either in spirit or "),t("a",{attrs:{href:"https://www.patreon.com/visnalize",target:"_blank",rel:"noopener noreferrer"}},[e._v("financial"),t("OutboundLink")],1),e._v(" 🤩")],1),e._v(" "),t("m-blog-tag-list",{attrs:{tags:e.$page.frontmatter.tag,showIcon:""}})],1)}),[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/49.d074102d.js b/assets/js/49.57c00e1e.js similarity index 99% rename from assets/js/49.d074102d.js rename to assets/js/49.57c00e1e.js index e5c7aab2..44e171f9 100644 --- a/assets/js/49.d074102d.js +++ b/assets/js/49.57c00e1e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{390:function(t,a,s){t.exports=s.p+"assets/img/wmc-homescreen-win7simu.d3a11197.png"},391:function(t,a,s){t.exports=s.p+"assets/img/wmc-homescreen-original.23635b07.png"},510:function(t,a,s){"use strict";s.r(a);var e=s(13),n=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"implementing-windows-media-center-in-win7-simu"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#implementing-windows-media-center-in-win7-simu"}},[t._v("#")]),t._v(" Implementing Windows Media Center in Win7 Simu")]),t._v(" "),a("m-blog-meta"),t._v(" "),a("p",[a("img",{attrs:{src:"/assets/covers/win7-simu-windows-media-center.jpg",alt:"Windows Media Center Intro"}})]),t._v(" "),a("p",[a("strong",[t._v("Windows Media Center")]),t._v(" (WMC for short) is a media player program created and first introduced to Windows XP Media Center Edition in 2002 by Microsoft. It can play slide shows, music, videos, CDs, and DVDs, you can even watch live TV and record it. For many of us, it was part of childhood bringing back a lot of memories from the good old days.")]),t._v(" "),a("p",[t._v("Unfortunately, shortly after the release of WMC in Windows 7 in 2009, Microsoft no longer worked on it and eventually it was announced discontinued on Windows 10. It was devastating to see a such good program with a stunning user interface go.")]),t._v(" "),a("p",[t._v("Of course, with the joy of bringing back the nostalgia, we would love to bring WMC back in Win7 Simu.")]),t._v(" "),a("h2",{attrs:{id:"the-scope"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-scope"}},[t._v("#")]),t._v(" The Scope")]),t._v(" "),a("p",[t._v("The original WMC in Windows 7 can do many things like playing live TV, slide shows, music, video, CD, DVD and more. Because Win7 Simu is a simulator built on the "),a("RouterLink",{attrs:{to:"/blog/building-win7-simu.html#the-tech-stack"}},[t._v("web technologies")]),t._v(", we're not going to replicate the whole program and this project is obviously not intended to replace the original.")],1),t._v(" "),a("p",[t._v("For that reason, the scope of the project will be implementing a basic version of WMC that lets you browse your favorite photos, and play music and videos. Basically, it will be a stripped-down version of the original.")]),t._v(" "),a("h2",{attrs:{id:"the-implementation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-implementation"}},[t._v("#")]),t._v(" The Implementation")]),t._v(" "),a("h3",{attrs:{id:"resource-files"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#resource-files"}},[t._v("#")]),t._v(" Resource Files")]),t._v(" "),a("p",[t._v("Most of the resource files are extracted from the "),a("code",[t._v(".DLL")]),t._v(" files in the original WMC. It contains everything we need to faithfully recreate WMC so we don't have to make everything from scratch (hope we will not get in trouble for using those resource files 👀).")]),t._v(" "),a("p",[t._v("We didn't use the font files in the original because those files are huge, it'll bloat the app install size up which we don't want.")]),t._v(" "),a("h3",{attrs:{id:"the-intro-screen"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-intro-screen"}},[t._v("#")]),t._v(" The Intro Screen")]),t._v(" "),a("p",[t._v("The intro screen might be the most time-consuming part because of the sheer amount of animation keyframes it has, though it's not too difficult to implement it.")]),t._v(" "),a("p",[t._v("Inside the resource files, there are "),a("a",{attrs:{href:"https://learn.microsoft.com/en-us/previous-versions/windows/desktop/windows-media-center-sdk/bb189388(v=msdn.10)",target:"_blank",rel:"noopener noreferrer"}},[a("code",[t._v(".MCML")]),a("OutboundLink")],1),t._v(" files that describe a lot of the animation keyframes so we just had to translate it to the equivalents in CSS, though it still needed a lot of adjustments.")]),t._v(" "),a("p",[t._v("Here is what an animation in the "),a("code",[t._v(".MCML")]),t._v(" looks like. The animation has a name and a bunch of following keyframes and it's fairly straightforward to translate it to CSS.")]),t._v(" "),a("div",{staticClass:"language-xml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Animation")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Name")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Launch.Text.MotionBlur"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("Keyframes")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ScaleKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("3.0, 3.0, 1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Interpolation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("EaseIn, 2.0, 0.80"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ScaleKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.0,1.0, 1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ScaleKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2.2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.85,0.85, 1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("ScaleKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2.7"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.75, 0.75, 1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("AlphaKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("AlphaKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.133"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Interpolation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("SCurve"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("AlphaKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.833"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.75"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("AlphaKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.5"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Interpolation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("SCurve"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("AlphaKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("AlphaKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2.7"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.00"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("RelativeTo")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("Absolute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("PositionKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("50,600,0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Interpolation")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("EaseIn, 2.0, 0.80"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("PositionKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("1.0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0,200,0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("PositionKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2.2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0,170,0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("PositionKeyframe")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Time")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("2.7"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[a("span",{pre:!0,attrs:{class:"token punctuation attr-equals"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')]),t._v("0,150,0"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v('"')])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("/>")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])])]),a("p",[t._v("Lucky for us, Microsoft still keeps the documentation of the "),a("a",{attrs:{href:"https://learn.microsoft.com/en-us/previous-versions/windows/desktop/windows-media-center-sdk/ms818424(v=msdn.10)",target:"_blank",rel:"noopener noreferrer"}},[t._v("Windows Media Center SDK"),a("OutboundLink")],1),t._v(" so we, at least, have something to reference.")]),t._v(" "),a("h3",{attrs:{id:"the-home-screen"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-home-screen"}},[t._v("#")]),t._v(" The Home Screen")]),t._v(" "),a("p",[t._v("The home screen might be one of the challenging parts when making WMC. There are a lot of animations and masking, and magnifying effects (I don't know what it's called, alright). We couldn't understand most of the information in the "),a("code",[t._v(".MCML")]),t._v(" files to recreate it so we decided to use the power of observation and use what we can use in CSS and go with our guts.")]),t._v(" "),a("p",[t._v("The result home screen is quite good and comparable to the original, in our opinion. Though it doesn't look like a 1-to-1 replication.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"center"}},[t._v("WMC Home Screen in Win7 Simu")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("Original WMC Home Screen")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"center"}},[a("img",{attrs:{src:s(390),alt:"Windows Media Center Home Screen in Win7 Simu"}})]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[a("img",{attrs:{src:s(391),alt:"Original Windows Media Center Home Screen in Windows 7"}})])])])]),t._v(" "),a("h3",{attrs:{id:"the-photos-videos-libraries"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#the-photos-videos-libraries"}},[t._v("#")]),t._v(" The Photos + Videos Libraries")]),t._v(" "),a("p",[t._v("The WMC in Win7 Simu searches for photos in "),a("code",[t._v("C:\\Users\\\\Pictures")]),t._v(" (for now) and displays all the photos and folders it found. Each thumbnail can be easily rendered by getting the blob URL of the image and using it in the "),a("code",[t._v("")]),t._v(" tag. The downside of this approach is that it might be slow if the image is too large.")]),t._v(" "),a("p",[t._v("For the video library, it's a tad trickier. Each video thumbnail is an HTML5 "),a("code",[t._v("
Last Updated: 9/3/2024, 8:15:04 AM

Comments

- + diff --git a/blog/building-visnalize-com.html b/blog/building-visnalize-com.html index f92474e3..b84d86c7 100644 --- a/blog/building-visnalize-com.html +++ b/blog/building-visnalize-com.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/building-win7-simu.html b/blog/building-win7-simu.html index 8c2655e0..3d286050 100644 --- a/blog/building-win7-simu.html +++ b/blog/building-win7-simu.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/concealing-online-identity.html b/blog/concealing-online-identity.html index 5893e40b..8a4feb7c 100644 --- a/blog/concealing-online-identity.html +++ b/blog/concealing-online-identity.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/from-codepen-to-app.html b/blog/from-codepen-to-app.html index a6b363f3..89e87cf2 100644 --- a/blog/from-codepen-to-app.html +++ b/blog/from-codepen-to-app.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/from-side-project-to-side-hustle.html b/blog/from-side-project-to-side-hustle.html index b8f8d728..83e51020 100644 --- a/blog/from-side-project-to-side-hustle.html +++ b/blog/from-side-project-to-side-hustle.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/game-stick-lite-4k-adding-games.html b/blog/game-stick-lite-4k-adding-games.html index f94805b8..6b8ce8dd 100644 --- a/blog/game-stick-lite-4k-adding-games.html +++ b/blog/game-stick-lite-4k-adding-games.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/index.html b/blog/index.html index 1eb547a7..415579dd 100644 --- a/blog/index.html +++ b/blog/index.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/load-any-websites-in-iframes.html b/blog/load-any-websites-in-iframes.html index 733fb6cc..84b071a5 100644 --- a/blog/load-any-websites-in-iframes.html +++ b/blog/load-any-websites-in-iframes.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/simulator-vs-emulator.html b/blog/simulator-vs-emulator.html index 0110f8b6..4f72e3c0 100644 --- a/blog/simulator-vs-emulator.html +++ b/blog/simulator-vs-emulator.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/tag/brick-1100/index.html b/blog/tag/brick-1100/index.html index cbc7b9d4..d6f48f07 100644 --- a/blog/tag/brick-1100/index.html +++ b/blog/tag/brick-1100/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/index.html b/blog/tag/index.html index 7df5645f..cf8ff97f 100644 --- a/blog/tag/index.html +++ b/blog/tag/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/random/index.html b/blog/tag/random/index.html index 770f40da..626b748a 100644 --- a/blog/tag/random/index.html +++ b/blog/tag/random/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/review/index.html b/blog/tag/review/index.html index dff3afa1..dc028612 100644 --- a/blog/tag/review/index.html +++ b/blog/tag/review/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/sharing/index.html b/blog/tag/sharing/index.html index 9001c385..d92d51dd 100644 --- a/blog/tag/sharing/index.html +++ b/blog/tag/sharing/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/technical/index.html b/blog/tag/technical/index.html index b4a43273..83c4189c 100644 --- a/blog/tag/technical/index.html +++ b/blog/tag/technical/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/tips/index.html b/blog/tag/tips/index.html index 4cf173ad..1cd1bff5 100644 --- a/blog/tag/tips/index.html +++ b/blog/tag/tips/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/tools/index.html b/blog/tag/tools/index.html index 4aebe76c..84d6579d 100644 --- a/blog/tag/tools/index.html +++ b/blog/tag/tools/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/tag/win7-simu/index.html b/blog/tag/win7-simu/index.html index 2194043b..dcab037d 100644 --- a/blog/tag/win7-simu/index.html +++ b/blog/tag/win7-simu/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/blog/visnalize-year-in-review-2023.html b/blog/visnalize-year-in-review-2023.html index 93bb0d5e..7820ca69 100644 --- a/blog/visnalize-year-in-review-2023.html +++ b/blog/visnalize-year-in-review-2023.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/why-side-hustle.html b/blog/why-side-hustle.html index c7cd9349..e5f12919 100644 --- a/blog/why-side-hustle.html +++ b/blog/why-side-hustle.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/win7-icons-viewer-downloader.html b/blog/win7-icons-viewer-downloader.html index ff304b9a..2f88f76d 100644 --- a/blog/win7-icons-viewer-downloader.html +++ b/blog/win7-icons-viewer-downloader.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/win7-simu-file-explorer.html b/blog/win7-simu-file-explorer.html index dd95515e..5c3263b5 100644 --- a/blog/win7-simu-file-explorer.html +++ b/blog/win7-simu-file-explorer.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/win7-simu-mobile-devices.html b/blog/win7-simu-mobile-devices.html index a224e704..63814198 100644 --- a/blog/win7-simu-mobile-devices.html +++ b/blog/win7-simu-mobile-devices.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/win7-simu-windows-media-center.html b/blog/win7-simu-windows-media-center.html index 4227da87..af0c5520 100644 --- a/blog/win7-simu-windows-media-center.html +++ b/blog/win7-simu-windows-media-center.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/win7-simu-year-in-review-2022.html b/blog/win7-simu-year-in-review-2022.html index d304f7ab..2bf9ba34 100644 --- a/blog/win7-simu-year-in-review-2022.html +++ b/blog/win7-simu-year-in-review-2022.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/blog/win7-ui-introduction.html b/blog/win7-ui-introduction.html index af784fc9..ce590818 100644 --- a/blog/win7-ui-introduction.html +++ b/blog/win7-ui-introduction.html @@ -35,8 +35,8 @@ - - + +
- +
Last Updated: 9/3/2024, 8:15:04 AM

Comments

+ diff --git a/blog/windows-resources.html b/blog/windows-resources.html index 0c44ea5e..af662c2b 100644 --- a/blog/windows-resources.html +++ b/blog/windows-resources.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/brick1100/about.html b/brick1100/about.html index 0e36d46e..62182a08 100644 --- a/brick1100/about.html +++ b/brick1100/about.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/brick1100/builders.html b/brick1100/builders.html index f1d72edf..ea88b534 100644 --- a/brick1100/builders.html +++ b/brick1100/builders.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/brick1100/changelog.html b/brick1100/changelog.html index 7c4a77c1..c9ae0a8f 100644 --- a/brick1100/changelog.html +++ b/brick1100/changelog.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/brick1100/deep-links.html b/brick1100/deep-links.html index b24687fa..14c8c861 100644 --- a/brick1100/deep-links.html +++ b/brick1100/deep-links.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/brick1100/games.html b/brick1100/games.html index 42e467e4..1ff7d652 100644 --- a/brick1100/games.html +++ b/brick1100/games.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/brick1100/index.html b/brick1100/index.html index d0aa09de..9163c1af 100644 --- a/brick1100/index.html +++ b/brick1100/index.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/brick1100/privacy.html b/brick1100/privacy.html index f39cdbf1..05e808e9 100644 --- a/brick1100/privacy.html +++ b/brick1100/privacy.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/contact.html b/contact.html index 36a9c425..3d65b751 100644 --- a/contact.html +++ b/contact.html @@ -31,8 +31,8 @@ - - + +
- + diff --git a/feed.atom b/feed.atom index 00174a41..7c0fc348 100644 --- a/feed.atom +++ b/feed.atom @@ -2,7 +2,7 @@ https://visnalize.com Visnalize - 2024-09-11T10:15:34.963Z + 2024-09-12T01:10:08.933Z https://github.com/webmasterish/vuepress-plugin-feed @@ -11,7 +11,7 @@ https://visnalize.com/blog/about-the-ads.html - 2024-09-11T10:15:34.958Z + 2024-09-12T01:10:08.928Z @@ -19,7 +19,7 @@ https://visnalize.com/blog/building-win7-simu.html - 2024-09-11T10:15:34.959Z + 2024-09-12T01:10:08.929Z @@ -27,135 +27,135 @@ https://visnalize.com/blog/building-visnalize-com.html - 2024-09-11T10:15:34.959Z + 2024-09-12T01:10:08.929Z - - <![CDATA[Why I choose to conceal my online identity]]> - https://visnalize.com/blog/concealing-online-identity.html - - - 2024-09-11T10:15:34.960Z - - <![CDATA[Turning my CodePen into an actual app]]> https://visnalize.com/blog/from-codepen-to-app.html - 2024-09-11T10:15:34.960Z + 2024-09-12T01:10:08.929Z - <![CDATA[Turning my side project into a side hustle]]> - https://visnalize.com/blog/from-side-project-to-side-hustle.html - + <![CDATA[Why I choose to conceal my online identity]]> + https://visnalize.com/blog/concealing-online-identity.html + - 2024-09-11T10:15:34.960Z - + 2024-09-12T01:10:08.930Z + <![CDATA[How to add more games to Game Stick Lite 4K]]> https://visnalize.com/blog/game-stick-lite-4k-adding-games.html - 2024-09-11T10:15:34.960Z + 2024-09-12T01:10:08.930Z + + <![CDATA[Turning my side project into a side hustle]]> + https://visnalize.com/blog/from-side-project-to-side-hustle.html + + + 2024-09-12T01:10:08.930Z + + <![CDATA[How to get iframes to load any websites]]> https://visnalize.com/blog/load-any-websites-in-iframes.html - 2024-09-11T10:15:34.960Z + 2024-09-12T01:10:08.930Z - - <![CDATA[📝 Blog]]> - https://visnalize.com/blog/ - - - 2024-09-11T10:15:34.960Z - - <![CDATA[Simulators and Emulators: What's the difference?]]> https://visnalize.com/blog/simulator-vs-emulator.html - 2024-09-11T10:15:34.960Z + 2024-09-12T01:10:08.930Z - <![CDATA[Visnalize year in review - 2023]]> - https://visnalize.com/blog/visnalize-year-in-review-2023.html - + <![CDATA[📝 Blog]]> + https://visnalize.com/blog/ + - 2024-09-11T10:15:34.960Z - + 2024-09-12T01:10:08.930Z + <![CDATA[Why you should have a side hustle]]> https://visnalize.com/blog/why-side-hustle.html - 2024-09-11T10:15:34.960Z + 2024-09-12T01:10:08.930Z - <![CDATA[Win7 Simu versus mobile devices]]> - https://visnalize.com/blog/win7-simu-mobile-devices.html - + <![CDATA[Visnalize year in review - 2023]]> + https://visnalize.com/blog/visnalize-year-in-review-2023.html + - 2024-09-11T10:15:34.960Z - + 2024-09-12T01:10:08.930Z + + + + <![CDATA[Windows 7 icon Viewer/Downloader]]> + https://visnalize.com/blog/win7-icons-viewer-downloader.html + + + 2024-09-12T01:10:08.930Z + <![CDATA[Implementing File Explorer in Win7 Simu]]> https://visnalize.com/blog/win7-simu-file-explorer.html - 2024-09-11T10:15:34.961Z + 2024-09-12T01:10:08.930Z + + <![CDATA[Win7 Simu versus mobile devices]]> + https://visnalize.com/blog/win7-simu-mobile-devices.html + + + 2024-09-12T01:10:08.930Z + + <![CDATA[Implementing Windows Media Center in Win7 Simu]]> https://visnalize.com/blog/win7-simu-windows-media-center.html - 2024-09-11T10:15:34.961Z + 2024-09-12T01:10:08.930Z - - <![CDATA[Windows 7 icon Viewer/Downloader]]> - https://visnalize.com/blog/win7-icons-viewer-downloader.html - - - 2024-09-11T10:15:34.961Z - - <![CDATA[Win7 Simu year in review - 2022]]> https://visnalize.com/blog/win7-simu-year-in-review-2022.html - 2024-09-11T10:15:34.961Z + 2024-09-12T01:10:08.931Z - - <![CDATA[Introducing Win7 UI]]> - https://visnalize.com/blog/win7-ui-introduction.html - - - 2024-09-11T10:15:34.961Z - - <![CDATA[How to get Windows resources]]> https://visnalize.com/blog/windows-resources.html - 2024-09-11T10:15:34.961Z + 2024-09-12T01:10:08.931Z + + <![CDATA[Introducing Win7 UI]]> + https://visnalize.com/blog/win7-ui-introduction.html + + + 2024-09-12T01:10:08.931Z + + \ No newline at end of file diff --git a/feed.json b/feed.json index f34f7c88..811638ea 100644 --- a/feed.json +++ b/feed.json @@ -10,7 +10,7 @@ "title": "About the ads and how I implement them", "summary": "A couple of things about ads and how I implement them within my websites and apps", "image": "https://images.unsplash.com/photo-1546142711-1e28c0540deb?auto=format&fit=crop&w=740&q=80", - "date_modified": "2024-09-11T10:15:34.958Z" + "date_modified": "2024-09-12T01:10:08.928Z" }, { "id": "https://visnalize.com/blog/building-win7-simu.html", @@ -18,7 +18,7 @@ "title": "How I built Win7 Simu", "summary": "Read about my journey with Win7 Simu, how it all started and unveiling some boring technical stuff behind the scene", "image": "https://visnalize.com/assets/covers/building-win7-simu.jpg", - "date_modified": "2024-09-11T10:15:34.959Z" + "date_modified": "2024-09-12T01:10:08.929Z" }, { "id": "https://visnalize.com/blog/building-visnalize-com.html", @@ -26,15 +26,7 @@ "title": "How I built visnalize.com", "summary": "Read about the progress and how I built the visnalize.com website for my own brand", "image": "https://images.unsplash.com/photo-1461749280684-dccba630e2f6?auto=format&fit=crop&w=740&q=80", - "date_modified": "2024-09-11T10:15:34.959Z" - }, - { - "id": "https://visnalize.com/blog/concealing-online-identity.html", - "url": "https://visnalize.com/blog/concealing-online-identity.html", - "title": "Why I choose to conceal my online identity", - "summary": "My takes on internet privacy and why I choose to conceal mine.", - "image": "https://visnalize.com/assets/covers/concealing-online-identity.jpg", - "date_modified": "2024-09-11T10:15:34.960Z" + "date_modified": "2024-09-12T01:10:08.929Z" }, { "id": "https://visnalize.com/blog/from-codepen-to-app.html", @@ -42,15 +34,15 @@ "title": "Turning my CodePen into an actual app", "summary": "From a simple idea, what merely looked like a playful demo on CodePen, but turned into a full-fledged app", "image": "https://visnalize.com/assets/covers/from-codepen-to-app.png", - "date_modified": "2024-09-11T10:15:34.960Z" + "date_modified": "2024-09-12T01:10:08.929Z" }, { - "id": "https://visnalize.com/blog/from-side-project-to-side-hustle.html", - "url": "https://visnalize.com/blog/from-side-project-to-side-hustle.html", - "title": "Turning my side project into a side hustle", - "summary": "From a side project for learning to a side hustle with recurring revenue, read about how I did it, the process, the tools, the tips and tricks.", - "image": "https://media.istockphoto.com/id/1349329446/photo/dollars-cash-money-and-paper-note-with-text-written-extra-income-concept-of-financial.jpg?s=1024x1024&w=is&k=20&c=RXsEpU41u0Yke-ol53PoirkXHTOliHGfvijnYipidtQ=", - "date_modified": "2024-09-11T10:15:34.960Z" + "id": "https://visnalize.com/blog/concealing-online-identity.html", + "url": "https://visnalize.com/blog/concealing-online-identity.html", + "title": "Why I choose to conceal my online identity", + "summary": "My takes on internet privacy and why I choose to conceal mine.", + "image": "https://visnalize.com/assets/covers/concealing-online-identity.jpg", + "date_modified": "2024-09-12T01:10:08.930Z" }, { "id": "https://visnalize.com/blog/game-stick-lite-4k-adding-games.html", @@ -58,7 +50,15 @@ "title": "How to add more games to Game Stick Lite 4K", "summary": "How to add games to Game Stick Lite 4K and enjoy more of your childhood games", "image": "https://visnalize.com/assets/covers/game-stick-4k-lite.jpg", - "date_modified": "2024-09-11T10:15:34.960Z" + "date_modified": "2024-09-12T01:10:08.930Z" + }, + { + "id": "https://visnalize.com/blog/from-side-project-to-side-hustle.html", + "url": "https://visnalize.com/blog/from-side-project-to-side-hustle.html", + "title": "Turning my side project into a side hustle", + "summary": "From a side project for learning to a side hustle with recurring revenue, read about how I did it, the process, the tools, the tips and tricks.", + "image": "https://media.istockphoto.com/id/1349329446/photo/dollars-cash-money-and-paper-note-with-text-written-extra-income-concept-of-financial.jpg?s=1024x1024&w=is&k=20&c=RXsEpU41u0Yke-ol53PoirkXHTOliHGfvijnYipidtQ=", + "date_modified": "2024-09-12T01:10:08.930Z" }, { "id": "https://visnalize.com/blog/load-any-websites-in-iframes.html", @@ -66,15 +66,7 @@ "title": "How to get iframes to load any websites", "summary": "The most effective way to get iframes embedded in your web apps to load any websites", "image": "https://visnalize.com/assets/covers/load-any-websites-in-iframes.png", - "date_modified": "2024-09-11T10:15:34.960Z" - }, - { - "id": "https://visnalize.com/blog/", - "url": "https://visnalize.com/blog/", - "title": "📝 Blog", - "summary": "Helpful insights, sharing, tips and tricks on various topics from Visnalize, the creator of Win7 Simu, Brick 1100, and more", - "image": "https://image.social/get?url=visnalize.com/blog/", - "date_modified": "2024-09-11T10:15:34.960Z" + "date_modified": "2024-09-12T01:10:08.930Z" }, { "id": "https://visnalize.com/blog/simulator-vs-emulator.html", @@ -82,15 +74,15 @@ "title": "Simulators and Emulators: What's the difference?", "summary": "Understand the differences between simulators and emulators, what they mean for Win7 Simu.", "image": "https://visnalize.com/assets/covers/simulators-vs-emulators.png", - "date_modified": "2024-09-11T10:15:34.960Z" + "date_modified": "2024-09-12T01:10:08.930Z" }, { - "id": "https://visnalize.com/blog/visnalize-year-in-review-2023.html", - "url": "https://visnalize.com/blog/visnalize-year-in-review-2023.html", - "title": "Visnalize year in review - 2023", - "summary": "Look back at some amazing achievements from Visnalize in 2023.", - "image": "https://images.unsplash.com/photo-1579952775264-625f17561a5d?auto=format&fit=crop&w=740&q=80", - "date_modified": "2024-09-11T10:15:34.960Z" + "id": "https://visnalize.com/blog/", + "url": "https://visnalize.com/blog/", + "title": "📝 Blog", + "summary": "Helpful insights, sharing, tips and tricks on various topics from Visnalize, the creator of Win7 Simu, Brick 1100, and more", + "image": "https://image.social/get?url=visnalize.com/blog/", + "date_modified": "2024-09-12T01:10:08.930Z" }, { "id": "https://visnalize.com/blog/why-side-hustle.html", @@ -98,15 +90,23 @@ "title": "Why you should have a side hustle", "summary": "Some personal sharing about reasons and benefits of having a side hustle.", "image": "https://visnalize.com/assets/covers/why-side-hustle.jpg", - "date_modified": "2024-09-11T10:15:34.960Z" + "date_modified": "2024-09-12T01:10:08.930Z" }, { - "id": "https://visnalize.com/blog/win7-simu-mobile-devices.html", - "url": "https://visnalize.com/blog/win7-simu-mobile-devices.html", - "title": "Win7 Simu versus mobile devices", - "summary": "How to install Win7 Simu on mobile devices without downloading from any App Stores.", - "image": "https://images.unsplash.com/photo-1616353071855-2c045c4458ae?auto=format&fit=crop&w=740&q=80", - "date_modified": "2024-09-11T10:15:34.960Z" + "id": "https://visnalize.com/blog/visnalize-year-in-review-2023.html", + "url": "https://visnalize.com/blog/visnalize-year-in-review-2023.html", + "title": "Visnalize year in review - 2023", + "summary": "Look back at some amazing achievements from Visnalize in 2023.", + "image": "https://images.unsplash.com/photo-1579952775264-625f17561a5d?auto=format&fit=crop&w=740&q=80", + "date_modified": "2024-09-12T01:10:08.930Z" + }, + { + "id": "https://visnalize.com/blog/win7-icons-viewer-downloader.html", + "url": "https://visnalize.com/blog/win7-icons-viewer-downloader.html", + "title": "Windows 7 icon Viewer/Downloader", + "summary": "A simple tool to view and download Windows 7 icon collection.", + "image": "https://visnalize.com/assets/covers/win7-icons-viewer-downloader.jpg", + "date_modified": "2024-09-12T01:10:08.930Z" }, { "id": "https://visnalize.com/blog/win7-simu-file-explorer.html", @@ -114,7 +114,15 @@ "title": "Implementing File Explorer in Win7 Simu", "summary": "Some key points to share about how Win7 Simu's File Explorer is implemented.", "image": "https://images.unsplash.com/photo-1544396821-4dd40b938ad3?auto=format&fit=crop&w=740&q=80", - "date_modified": "2024-09-11T10:15:34.961Z" + "date_modified": "2024-09-12T01:10:08.930Z" + }, + { + "id": "https://visnalize.com/blog/win7-simu-mobile-devices.html", + "url": "https://visnalize.com/blog/win7-simu-mobile-devices.html", + "title": "Win7 Simu versus mobile devices", + "summary": "How to install Win7 Simu on mobile devices without downloading from any App Stores.", + "image": "https://images.unsplash.com/photo-1616353071855-2c045c4458ae?auto=format&fit=crop&w=740&q=80", + "date_modified": "2024-09-12T01:10:08.930Z" }, { "id": "https://visnalize.com/blog/win7-simu-windows-media-center.html", @@ -122,15 +130,7 @@ "title": "Implementing Windows Media Center in Win7 Simu", "summary": "Sharing on how Windows Media Center was implemented in Win7 Simu.", "image": "https://visnalize.com/assets/covers/win7-simu-windows-media-center.jpg", - "date_modified": "2024-09-11T10:15:34.961Z" - }, - { - "id": "https://visnalize.com/blog/win7-icons-viewer-downloader.html", - "url": "https://visnalize.com/blog/win7-icons-viewer-downloader.html", - "title": "Windows 7 icon Viewer/Downloader", - "summary": "A simple tool to view and download Windows 7 icon collection.", - "image": "https://visnalize.com/assets/covers/win7-icons-viewer-downloader.jpg", - "date_modified": "2024-09-11T10:15:34.961Z" + "date_modified": "2024-09-12T01:10:08.930Z" }, { "id": "https://visnalize.com/blog/win7-simu-year-in-review-2022.html", @@ -138,15 +138,7 @@ "title": "Win7 Simu year in review - 2022", "summary": "Look back at some amazing numbers for Win7 Simu in 2022.", "image": "https://images.unsplash.com/photo-1651377731759-fe736975a6e9?auto=format&fit=crop&w=740&q=80", - "date_modified": "2024-09-11T10:15:34.961Z" - }, - { - "id": "https://visnalize.com/blog/win7-ui-introduction.html", - "url": "https://visnalize.com/blog/win7-ui-introduction.html", - "title": "Introducing Win7 UI", - "summary": "The open-source UI library that powers Win7 Simu behind the scenes.", - "image": "https://visnalize.com/assets/covers/win7-ui-hero.jpg", - "date_modified": "2024-09-11T10:15:34.961Z" + "date_modified": "2024-09-12T01:10:08.931Z" }, { "id": "https://visnalize.com/blog/windows-resources.html", @@ -154,7 +146,15 @@ "title": "How to get Windows resources", "summary": "Ways that you can retrieve Windows resources such as wallpapers, icons, audio files etc.", "image": "https://images.unsplash.com/photo-1624571409108-e9a41746af53?auto=format&fit=crop&w=740&q=80", - "date_modified": "2024-09-11T10:15:34.961Z" + "date_modified": "2024-09-12T01:10:08.931Z" + }, + { + "id": "https://visnalize.com/blog/win7-ui-introduction.html", + "url": "https://visnalize.com/blog/win7-ui-introduction.html", + "title": "Introducing Win7 UI", + "summary": "The open-source UI library that powers Win7 Simu behind the scenes.", + "image": "https://visnalize.com/assets/covers/win7-ui-hero.jpg", + "date_modified": "2024-09-12T01:10:08.931Z" } ] } \ No newline at end of file diff --git a/index.html b/index.html index 982dc0ed..ee3a8048 100644 --- a/index.html +++ b/index.html @@ -34,8 +34,8 @@ - - + +
- + diff --git a/rss.xml b/rss.xml index fb646d62..ab53e70f 100644 --- a/rss.xml +++ b/rss.xml @@ -4,7 +4,7 @@ Visnalize https://visnalize.com - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT http://blogs.law.harvard.edu/tech/rss https://github.com/webmasterish/vuepress-plugin-feed @@ -12,7 +12,7 @@ <![CDATA[About the ads and how I implement them]]> https://visnalize.com/blog/about-the-ads.html https://visnalize.com/blog/about-the-ads.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT @@ -21,7 +21,7 @@ <![CDATA[How I built Win7 Simu]]> https://visnalize.com/blog/building-win7-simu.html https://visnalize.com/blog/building-win7-simu.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT @@ -30,154 +30,154 @@ <![CDATA[How I built visnalize.com]]> https://visnalize.com/blog/building-visnalize-com.html https://visnalize.com/blog/building-visnalize-com.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT - - <![CDATA[Why I choose to conceal my online identity]]> - https://visnalize.com/blog/concealing-online-identity.html - https://visnalize.com/blog/concealing-online-identity.html - Wed, 11 Sep 2024 10:15:34 GMT - - - - <![CDATA[Turning my CodePen into an actual app]]> https://visnalize.com/blog/from-codepen-to-app.html https://visnalize.com/blog/from-codepen-to-app.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT - <![CDATA[Turning my side project into a side hustle]]> - https://visnalize.com/blog/from-side-project-to-side-hustle.html - https://visnalize.com/blog/from-side-project-to-side-hustle.html - Wed, 11 Sep 2024 10:15:34 GMT - - + <![CDATA[Why I choose to conceal my online identity]]> + https://visnalize.com/blog/concealing-online-identity.html + https://visnalize.com/blog/concealing-online-identity.html + Thu, 12 Sep 2024 01:10:08 GMT + + <![CDATA[How to add more games to Game Stick Lite 4K]]> https://visnalize.com/blog/game-stick-lite-4k-adding-games.html https://visnalize.com/blog/game-stick-lite-4k-adding-games.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT + + <![CDATA[Turning my side project into a side hustle]]> + https://visnalize.com/blog/from-side-project-to-side-hustle.html + https://visnalize.com/blog/from-side-project-to-side-hustle.html + Thu, 12 Sep 2024 01:10:08 GMT + + + + <![CDATA[How to get iframes to load any websites]]> https://visnalize.com/blog/load-any-websites-in-iframes.html https://visnalize.com/blog/load-any-websites-in-iframes.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT - - <![CDATA[📝 Blog]]> - https://visnalize.com/blog/ - https://visnalize.com/blog/ - Wed, 11 Sep 2024 10:15:34 GMT - - - - <![CDATA[Simulators and Emulators: What's the difference?]]> https://visnalize.com/blog/simulator-vs-emulator.html https://visnalize.com/blog/simulator-vs-emulator.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT - <![CDATA[Visnalize year in review - 2023]]> - https://visnalize.com/blog/visnalize-year-in-review-2023.html - https://visnalize.com/blog/visnalize-year-in-review-2023.html - Wed, 11 Sep 2024 10:15:34 GMT - - + <![CDATA[📝 Blog]]> + https://visnalize.com/blog/ + https://visnalize.com/blog/ + Thu, 12 Sep 2024 01:10:08 GMT + + <![CDATA[Why you should have a side hustle]]> https://visnalize.com/blog/why-side-hustle.html https://visnalize.com/blog/why-side-hustle.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT - <![CDATA[Win7 Simu versus mobile devices]]> - https://visnalize.com/blog/win7-simu-mobile-devices.html - https://visnalize.com/blog/win7-simu-mobile-devices.html - Wed, 11 Sep 2024 10:15:34 GMT - - + <![CDATA[Visnalize year in review - 2023]]> + https://visnalize.com/blog/visnalize-year-in-review-2023.html + https://visnalize.com/blog/visnalize-year-in-review-2023.html + Thu, 12 Sep 2024 01:10:08 GMT + + + + + + <![CDATA[Windows 7 icon Viewer/Downloader]]> + https://visnalize.com/blog/win7-icons-viewer-downloader.html + https://visnalize.com/blog/win7-icons-viewer-downloader.html + Thu, 12 Sep 2024 01:10:08 GMT + + <![CDATA[Implementing File Explorer in Win7 Simu]]> https://visnalize.com/blog/win7-simu-file-explorer.html https://visnalize.com/blog/win7-simu-file-explorer.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT + + <![CDATA[Win7 Simu versus mobile devices]]> + https://visnalize.com/blog/win7-simu-mobile-devices.html + https://visnalize.com/blog/win7-simu-mobile-devices.html + Thu, 12 Sep 2024 01:10:08 GMT + + + + <![CDATA[Implementing Windows Media Center in Win7 Simu]]> https://visnalize.com/blog/win7-simu-windows-media-center.html https://visnalize.com/blog/win7-simu-windows-media-center.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT - - <![CDATA[Windows 7 icon Viewer/Downloader]]> - https://visnalize.com/blog/win7-icons-viewer-downloader.html - https://visnalize.com/blog/win7-icons-viewer-downloader.html - Wed, 11 Sep 2024 10:15:34 GMT - - - - <![CDATA[Win7 Simu year in review - 2022]]> https://visnalize.com/blog/win7-simu-year-in-review-2022.html https://visnalize.com/blog/win7-simu-year-in-review-2022.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT - - <![CDATA[Introducing Win7 UI]]> - https://visnalize.com/blog/win7-ui-introduction.html - https://visnalize.com/blog/win7-ui-introduction.html - Wed, 11 Sep 2024 10:15:34 GMT - - - - <![CDATA[How to get Windows resources]]> https://visnalize.com/blog/windows-resources.html https://visnalize.com/blog/windows-resources.html - Wed, 11 Sep 2024 10:15:34 GMT + Thu, 12 Sep 2024 01:10:08 GMT + + <![CDATA[Introducing Win7 UI]]> + https://visnalize.com/blog/win7-ui-introduction.html + https://visnalize.com/blog/win7-ui-introduction.html + Thu, 12 Sep 2024 01:10:08 GMT + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 5b8a3954..1b6d76c3 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://visnalize.com/about.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/about-the-ads.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/building-win7-simu.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/building-visnalize-com.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/concealing-online-identity.html2024-08-24T11:23:04.000Zdailyhttps://visnalize.com/blog/from-codepen-to-app.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/from-side-project-to-side-hustle.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/game-stick-lite-4k-adding-games.html2024-03-10T08:28:45.000Zdailyhttps://visnalize.com/blog/load-any-websites-in-iframes.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/blog/simulator-vs-emulator.html2024-02-21T11:02:25.000Zdailyhttps://visnalize.com/blog/visnalize-year-in-review-2023.html2024-09-05T16:51:57.000Zdailyhttps://visnalize.com/blog/why-side-hustle.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/win7-simu-mobile-devices.html2023-06-26T12:53:04.000Zdailyhttps://visnalize.com/blog/win7-simu-file-explorer.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/win7-simu-windows-media-center.html2024-04-15T12:21:04.000Zdailyhttps://visnalize.com/blog/win7-icons-viewer-downloader.html2023-06-26T12:53:04.000Zdailyhttps://visnalize.com/blog/win7-simu-year-in-review-2022.html2023-06-26T12:53:04.000Zdailyhttps://visnalize.com/blog/win7-ui-introduction.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/windows-resources.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/brick1100/about.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/brick1100/builders.html2024-09-08T16:39:40.000Zdailyhttps://visnalize.com/brick1100/changelog.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/brick1100/deep-links.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/brick1100/games.html2024-09-05T16:51:57.000Zdailyhttps://visnalize.com/brick1100/2023-11-02T17:52:36.000Zdailyhttps://visnalize.com/contact.html2023-11-02T17:52:36.000Zdailyhttps://visnalize.com/brick1100/privacy.html2024-06-01T06:49:33.000Zdailyhttps://visnalize.com/2024-09-03T09:12:11.000Zdailyhttps://visnalize.com/win7simu/changelog.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/faq.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/win7simu/about.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/2023-11-02T17:52:36.000Zdailyhttps://visnalize.com/win7simu/privacy.html2024-06-01T06:49:33.000Zdailyhttps://visnalize.com/win7simu/simulated/bios.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/calculator.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/chrome.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/fileexplorer.html2024-09-01T03:54:23.000Zdailyhttps://visnalize.com/win7simu/simulated/cmd.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/cpanel.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/gadgets.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/2024-08-30T10:09:03.000Zdailyhttps://visnalize.com/win7simu/simulated/magnifier.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/ie.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/media-player.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/minesweeper.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/notepad.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/paint.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/personalize.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/programs.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/recorder.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/purbleplace.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/snipping.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/solitaire.html2024-09-01T03:54:23.000Zdailyhttps://visnalize.com/win7simu/simulated/sticky.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/taskmgr.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/wordpad.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/themestudio/changelog.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/win7simu/themestudio/in-depth-guide.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/simulated/wmc.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/themestudio/quick-guide.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/themestudio/2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/tag/dailyhttps://visnalize.com/blog/tag/tips/dailyhttps://visnalize.com/blog/tag/sharing/dailyhttps://visnalize.com/blog/tag/win7-simu/dailyhttps://visnalize.com/blog/tag/technical/dailyhttps://visnalize.com/blog/tag/random/dailyhttps://visnalize.com/blog/tag/brick-1100/dailyhttps://visnalize.com/blog/tag/review/dailyhttps://visnalize.com/blog/tag/tools/daily \ No newline at end of file +https://visnalize.com/about.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/about-the-ads.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/building-win7-simu.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/building-visnalize-com.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/from-codepen-to-app.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/concealing-online-identity.html2024-08-24T11:23:04.000Zdailyhttps://visnalize.com/blog/game-stick-lite-4k-adding-games.html2024-03-10T08:28:45.000Zdailyhttps://visnalize.com/blog/from-side-project-to-side-hustle.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/load-any-websites-in-iframes.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/simulator-vs-emulator.html2024-02-21T11:02:25.000Zdailyhttps://visnalize.com/blog/2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/blog/why-side-hustle.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/visnalize-year-in-review-2023.html2024-09-05T16:51:57.000Zdailyhttps://visnalize.com/blog/win7-icons-viewer-downloader.html2023-06-26T12:53:04.000Zdailyhttps://visnalize.com/blog/win7-simu-file-explorer.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/blog/win7-simu-mobile-devices.html2023-06-26T12:53:04.000Zdailyhttps://visnalize.com/blog/win7-simu-windows-media-center.html2024-04-15T12:21:04.000Zdailyhttps://visnalize.com/blog/win7-simu-year-in-review-2022.html2023-06-26T12:53:04.000Zdailyhttps://visnalize.com/blog/windows-resources.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/brick1100/builders.html2024-09-08T16:39:40.000Zdailyhttps://visnalize.com/brick1100/about.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/blog/win7-ui-introduction.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/brick1100/changelog.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/brick1100/games.html2024-09-05T16:51:57.000Zdailyhttps://visnalize.com/brick1100/2023-11-02T17:52:36.000Zdailyhttps://visnalize.com/brick1100/privacy.html2024-06-01T06:49:33.000Zdailyhttps://visnalize.com/contact.html2023-11-02T17:52:36.000Zdailyhttps://visnalize.com/win7simu/about.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/changelog.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/faq.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/2024-09-03T09:12:11.000Zdailyhttps://visnalize.com/win7simu/2023-11-02T17:52:36.000Zdailyhttps://visnalize.com/win7simu/privacy.html2024-06-01T06:49:33.000Zdailyhttps://visnalize.com/brick1100/deep-links.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/simulated/bios.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/calculator.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/chrome.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/cmd.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/gadgets.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/cpanel.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/ie.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/fileexplorer.html2024-09-01T03:54:23.000Zdailyhttps://visnalize.com/win7simu/simulated/2024-08-30T10:09:03.000Zdailyhttps://visnalize.com/win7simu/simulated/magnifier.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/media-player.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/minesweeper.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/personalize.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/programs.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/purbleplace.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/recorder.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/notepad.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/snipping.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/solitaire.html2024-09-01T03:54:23.000Zdailyhttps://visnalize.com/win7simu/simulated/sticky.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/wmc.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/taskmgr.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/simulated/wordpad.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/win7simu/themestudio/changelog.html2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/win7simu/themestudio/in-depth-guide.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/themestudio/2024-09-03T08:15:04.000Zdailyhttps://visnalize.com/win7simu/themestudio/quick-guide.html2024-09-08T08:36:48.000Zdailyhttps://visnalize.com/win7simu/simulated/paint.html2024-08-31T13:10:28.000Zdailyhttps://visnalize.com/blog/tag/dailyhttps://visnalize.com/blog/tag/tips/dailyhttps://visnalize.com/blog/tag/sharing/dailyhttps://visnalize.com/blog/tag/win7-simu/dailyhttps://visnalize.com/blog/tag/technical/dailyhttps://visnalize.com/blog/tag/brick-1100/dailyhttps://visnalize.com/blog/tag/random/dailyhttps://visnalize.com/blog/tag/review/dailyhttps://visnalize.com/blog/tag/tools/daily \ No newline at end of file diff --git a/win7simu/about.html b/win7simu/about.html index b7ed0072..b8f0c13e 100644 --- a/win7simu/about.html +++ b/win7simu/about.html @@ -35,8 +35,8 @@ - - + +
- + diff --git a/win7simu/changelog.html b/win7simu/changelog.html index 431a61db..0e04dae7 100644 --- a/win7simu/changelog.html +++ b/win7simu/changelog.html @@ -35,8 +35,8 @@ - - + +