diff --git a/404.html b/404.html index 2c2907b..b31e4c8 100644 --- a/404.html +++ b/404.html @@ -15,8 +15,8 @@ - - + +
diff --git a/assets/index-mj3lo3PB.css b/assets/index-VGcrn3wW.css similarity index 90% rename from assets/index-mj3lo3PB.css rename to assets/index-VGcrn3wW.css index d08014e..127bd9e 100644 --- a/assets/index-mj3lo3PB.css +++ b/assets/index-VGcrn3wW.css @@ -1 +1 @@ -@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/Inter-Light.woff2) format("woff2"),url(/fonts/Inter-Light.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/Inter-Regular.woff2) format("woff2"),url(/fonts/Inter-Regular.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/Inter-Medium.woff2) format("woff2"),url(/fonts/Inter-Medium.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/Inter-Bold.woff2) format("woff2"),url(/fonts/Inter-Bold.woff) format("woff")}#header[data-v-1e5ccff0]{height:64px;width:100%}#grid[data-v-1e5ccff0]{--pad: 12px;display:grid;grid-template-columns:180px 1fr 100px 100px}#name[data-v-1e5ccff0]{grid-column:1 / 2;color:var(--dark-300);line-height:64px}#work[data-v-1e5ccff0]{grid-column:3 / 4}#work[data-v-1e5ccff0],#about[data-v-1e5ccff0]{color:var(--dark-300);text-align:center;line-height:62px;transition:all .15s ease}#work[data-v-1e5ccff0]:hover,#about[data-v-1e5ccff0]:hover,#work.active[data-v-1e5ccff0],#about.active[data-v-1e5ccff0]{color:var(--blue-100);font-weight:500}@media screen and (max-width: 768px){#grid[data-v-1e5ccff0]{grid-template-columns:180px 1fr 100px}#work[data-v-1e5ccff0]{display:none}#about[data-v-1e5ccff0]{text-align:right;grid-column:3 / 4}}a[data-v-637f64df]{display:inline-grid;gap:12px;cursor:pointer;transition:all .1s ease;border-radius:var(--radius);padding:12px 24px;background-color:var(--bg-color);align-items:center}[data-v-637f64df] svg,[data-v-637f64df] img{display:inline-block;max-width:var(--size);max-height:var(--size);vertical-align:top;fill:var(--icon-color)}[data-v-637f64df] svg{width:var(--size)}[data-v-637f64df] svg path{transition:all .2s ease}a[data-v-637f64df]:hover,a[data-v-637f64df]:active{background-color:var(--bg-hover-color)}a[data-v-637f64df] svg path{fill:var(--icon-color)}.text[data-v-637f64df]{line-height:var(--size)}@media screen and (max-width: 768px){a[data-v-637f64df]{--size: 24px !important}}.wrapper[data-v-4b352d11]{background-color:var(--dark-100)}p.body2[data-v-4b352d11]{color:var(--light-200);margin-bottom:24px}h4[data-v-4b352d11],h6[data-v-4b352d11]{color:#fff}.buttons[data-v-4b352d11]{display:flex;margin-bottom:24px}.buttons *[data-v-4b352d11]{margin-right:16px}.divider[data-v-4b352d11]{height:1px;background-color:var(--dark-300)}.footer[data-v-4b352d11]{margin-top:24px;margin-bottom:24px;display:grid;grid-template-columns:repeat(3,1fr)}.body1[data-v-4b352d11],.body2[data-v-4b352d11]{color:var(--light-200)}.greylink[data-v-4b352d11]{cursor:pointer;display:block}.greylink[data-v-4b352d11]:hover,.greylink[data-v-4b352d11]:active{color:#fff}.disclaimer[data-v-4b352d11]{margin-top:24px}@media screen and (max-width: 768px){.footer[data-v-4b352d11]{display:block}}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/Inter-Light.woff2) format("woff2"),url(/fonts/Inter-Light.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/Inter-Regular.woff2) format("woff2"),url(/fonts/Inter-Regular.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/Inter-Medium.woff2) format("woff2"),url(/fonts/Inter-Medium.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/Inter-Bold.woff2) format("woff2"),url(/fonts/Inter-Bold.woff) format("woff")}:root{--font-sans: "Inter", sans-serif;--content-padding: 30px;--blue-100: #2A4A8A;--blue-200: #355DAE;--blue-300: #4070D1;--blue-400: #4B83F5;--dark-100: #1A1C21;--dark-200: #353942;--dark-300: #525866;--light-100: #E6EAF2;--light-200: #C2C5CC;--shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);--radius: 8px;--radius-2: 16px ;--size-h1: 96px;--size-h2: 64px;--size-h3: 48px;--size-h4: 32px;--size-h5: 24px;--size-h6: 20px;--size-sub1: 16px;--size-sub2: 14px}body{font-family:var(--font-sans);color:var(--dark-100);margin:0;background:var(--light-100)}#app{display:grid;grid-template-rows:64px 1fr auto;height:100%}h1,h2,h3,h4,h5,h6{font-weight:500;color:var(--dark-100)}.regular{font-weight:400}h1,.h1{font-size:var(--size-h1);margin:112px 0 48px}h2,.h2{font-size:var(--size-h2);margin:72px 0 32px}h3,.h3{font-size:var(--size-h3);margin:60px 0 24px}h4,.h4{font-size:var(--size-h4);margin:40px 0 16px}h5,.h5{font-size:var(--size-h5);margin:32px 0 12px}h6,.h6{font-size:var(--size-h6);margin:24px 0 8px}.h1,.h2,.h3,.h4,.h5,.h6{margin:0}.subtitle1{font-size:var(--size-sub1);color:var(--dark-300)}.subtitle2{font-size:var(--size-sub2);color:var(--dark-300)}.body1{font-size:var(--size-sub1);line-height:24px;color:var(--dark-200)}.body2{font-size:var(--size-sub2);line-height:28px}.body1 p{margin:0 0 24px;line-height:32px}.body2 p{margin:6px 0;line-height:24px}.button{font-size:var(--size-sub1)}.button-lg{font-size:var(--size-h6)}@media screen and (max-width: 768px){.button-lg{font-size:var(--size-sub1)}}a{text-decoration:none;color:var(--dark-100)}p,ul,ol{max-width:700px}p{line-height:28px}ul{margin:0 0 24px}ul li,ol li{line-height:28px}.link{border-bottom:2px solid var(--blue-300)}.link:hover,.link:active{border-bottom:2px solid var(--blue-100)}.responsive{padding-left:var(--content-padding);padding-right:var(--content-padding);max-width:1220px;margin:0 auto}.cv>a[data-v-a5fc3b27]{margin-right:12px;margin-bottom:12px}#text>p[data-v-a5fc3b27]{font-size:20px;line-height:36px}.networks>a[data-v-a5fc3b27]{margin-right:12px;margin-bottom:12px}.tag[data-v-a5fc3b27]{padding:6px 12px;border-radius:var(--radius);display:inline-block;background:#fff;margin-right:8px;margin-bottom:8px}#about[data-v-a5fc3b27]{min-height:calc(100vh - 316px)}.responsive[data-v-a5fc3b27]{padding-top:48px;padding-bottom:48px}img[data-v-a5fc3b27]{width:100%;border-radius:var(--radius)}@media screen and (min-width: 768px){.responsive[data-v-a5fc3b27]{display:grid;grid-template-columns:1fr 2fr;gap:24px}h4[data-v-a5fc3b27]{margin-top:0}}.responsive[data-v-7c0f8bc3]{padding-top:64px;padding-bottom:32px}h2[data-v-7c0f8bc3],h5[data-v-7c0f8bc3]{margin:0}#name-container[data-v-7c0f8bc3]{margin-bottom:32px}#heading-container[data-v-7c0f8bc3]{display:grid;grid-template-rows:1fr 3fr;row-gap:4px;grid-auto-flow:column;max-width:700px;justify-content:space-between}@media screen and (max-width: 768px){#heading-container[data-v-7c0f8bc3]{row-gap:0px}h2[data-v-7c0f8bc3]{font-size:var(--size-h3)}h5[data-v-7c0f8bc3]{font-size:var(--size-h6)}.subtitle1[data-v-7c0f8bc3]{font-size:var(--size-sub2)}}#container[data-v-27d3b8ac]{display:block;padding-top:12px;margin-top:12px;margin-bottom:24px}.body2[data-v-27d3b8ac]{padding-top:12px;padding-bottom:12px;text-align:center;color:var(--dark-300)}.img-sm[data-v-27d3b8ac],.img-md[data-v-27d3b8ac],.img-lg[data-v-27d3b8ac]{margin-left:auto;margin-right:auto;display:block}.img-lg[data-v-27d3b8ac]{max-width:100%}@media screen and (max-width: 768px){.img-sm[data-v-27d3b8ac],.img-md[data-v-27d3b8ac]{max-width:100%}}@media screen and (min-width: 768px){.img-sm[data-v-27d3b8ac]{max-width:50%}.img-md[data-v-27d3b8ac]{max-width:70%}img.shadow[data-v-27d3b8ac],video.shadow[data-v-27d3b8ac]{-webkit-filter:drop-shadow(0 1px 3px #ccc);filter:drop-shadow(0 1px 3px #ccc)}}#projectArrows[data-v-ca97760c]{margin-top:64px;margin-bottom:64px;display:flex}#projectArrows>a[data-v-ca97760c]{font-size:var(--size-h6);color:var(--blue-200);border-radius:var(--radius);border:1px solid var(--blue-200);padding:6px 16px;background-size:200% 100%;transition:all .15s ease}#projectArrows *[data-v-ca97760c]:first-child{margin-right:8px}#projectArrows>a[data-v-ca97760c]:hover{color:#fff}svg[data-v-ca97760c] path{fill:var(--blue-200);transition:all .15s ease}.previous[data-v-ca97760c]{background:linear-gradient(to right,transparent 50%,var(--blue-200) 50%);background-position:left top}.previous[data-v-ca97760c]:hover{background-position:right top}.next[data-v-ca97760c]{background:linear-gradient(to left,transparent 50%,var(--blue-200) 50%);background-position:right top;float:right}.next>svg[data-v-ca97760c]{transform:rotate(180deg)}.next[data-v-ca97760c]:hover{background-position:left top}#projectArrows>a[data-v-ca97760c]:active{background-color:var(--blue-200);color:#fff}a:hover svg[data-v-ca97760c] path{fill:#fff}.flex-grow[data-v-ca97760c]{flex-grow:1}.tag[data-v-b0191d4a]{display:inline-block;padding:6px 12px;color:var(--light-100);border-radius:var(--radius)}.tile[data-v-d679ffa7]{background-color:var(--dark-100);border-radius:var(--radius-2);box-shadow:var(--shadow);--anim-dur: .1s;-webkit-transition:var(--anim-dur) ease;-moz-transition:var(--anim-dur) ease;-o-transition:var(--anim-dur) ease;transition:all .3s cubic-bezier(.25,.8,.25,1);color:#fff}.tile[data-v-d679ffa7]:hover{transform:scale(1.03);box-shadow:0 14px 28px #00000040,0 10px 10px #00000038}.img-container[data-v-d679ffa7]{display:inline-block;position:relative;width:100%}.img-container[data-v-d679ffa7]:after{padding-top:62.5%;display:block;content:""}img[data-v-d679ffa7]{position:absolute;top:0;bottom:0;right:0;left:0;width:100%;height:100%;object-fit:cover;border-radius:var(--radius-2) var(--radius-2) 0px 0px}.text[data-v-d679ffa7]{margin:24px 24px 48px}.h5[data-v-d679ffa7]{margin-bottom:16px}.text>.body1[data-v-d679ffa7]{color:var(--blue);padding:4px 8px;border-radius:var(--radius-2);border:1px solid var(--blue);display:inline-block}.tags div[data-v-d679ffa7]{margin-right:16px}@media screen and (max-width: 768px){.h5[data-v-d679ffa7]{font-size:var(--size-h6)}.text>.body1[data-v-d679ffa7]{font-size:var(--size-sub2)}}.responsive[data-v-29f0a935]{display:grid;grid-template-columns:1fr 1fr;margin-top:72px;gap:24px;align-items:end}img[data-v-29f0a935]{max-width:100%}.text[data-v-29f0a935]{margin:auto 0;display:grid;gap:24px}.text .body1[data-v-29f0a935]{color:var(--dark-200)}.buttons[data-v-29f0a935]{display:flex}.buttons a[data-v-29f0a935]:first-child{margin-right:24px}@media screen and (max-width: 768px){img[data-v-29f0a935]{margin-top:24px;margin-bottom:-5px;max-width:80%}.responsive[data-v-29f0a935]{display:block;margin-top:32px}.h2[data-v-29f0a935]{font-size:var(--size-h3)}}.h5[data-v-fa8148d2]{color:#fff;margin:auto 0}.body1[data-v-fa8148d2]{color:var(--light-200)}.grid[data-v-fa8148d2]{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.wrapper[data-v-fa8148d2]{background-color:var(--dark-100);padding-top:48px;padding-bottom:72px;fill:#fff}.tile[data-v-fa8148d2]{padding:24px;display:grid;grid-template-rows:2fr 1fr 2fr}.tile svg[data-v-fa8148d2]{margin:auto 0}@media screen and (max-width: 768px){.tile[data-v-fa8148d2]{grid-template-rows:auto;gap:16px}.wrapper[data-v-fa8148d2]{padding-top:32px;padding-bottom:64px}.grid[data-v-fa8148d2]{grid-template-columns:1fr;gap:0}}h4[data-v-df1f4932]{margin-bottom:32px}.grid[data-v-df1f4932]{display:grid;grid-template-columns:1fr;gap:32px;margin-bottom:100px}@media screen and (min-width: 768px){.grid[data-v-df1f4932]{grid-template-columns:repeat(2,1fr)}}#content[data-v-bf488d2e]{padding-bottom:24px}img[data-v-bf488d2e]{vertical-align:middle}#PageNotFound[data-v-f2755a3c]{padding-top:50px}h2[data-v-b94896ed]{font-size:14px;font-weight:700;color:var(--dark-100);margin:0 0 4px}p[data-v-b94896ed]{margin:0 0 24px}#download[data-v-b94896ed]{display:inline-block;margin-bottom:32px}#download>img[data-v-b94896ed]{vertical-align:middle} +@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/Inter-Light.woff2) format("woff2"),url(/fonts/Inter-Light.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/Inter-Regular.woff2) format("woff2"),url(/fonts/Inter-Regular.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/Inter-Medium.woff2) format("woff2"),url(/fonts/Inter-Medium.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/Inter-Bold.woff2) format("woff2"),url(/fonts/Inter-Bold.woff) format("woff")}#header[data-v-1e5ccff0]{height:64px;width:100%}#grid[data-v-1e5ccff0]{--pad: 12px;display:grid;grid-template-columns:180px 1fr 100px 100px}#name[data-v-1e5ccff0]{grid-column:1 / 2;color:var(--dark-300);line-height:64px}#work[data-v-1e5ccff0]{grid-column:3 / 4}#work[data-v-1e5ccff0],#about[data-v-1e5ccff0]{color:var(--dark-300);text-align:center;line-height:62px;transition:all .15s ease}#work[data-v-1e5ccff0]:hover,#about[data-v-1e5ccff0]:hover,#work.active[data-v-1e5ccff0],#about.active[data-v-1e5ccff0]{color:var(--blue-100);font-weight:500}@media screen and (max-width: 768px){#grid[data-v-1e5ccff0]{grid-template-columns:180px 1fr 100px}#work[data-v-1e5ccff0]{display:none}#about[data-v-1e5ccff0]{text-align:right;grid-column:3 / 4}}a[data-v-637f64df]{display:inline-grid;gap:12px;cursor:pointer;transition:all .1s ease;border-radius:var(--radius);padding:12px 24px;background-color:var(--bg-color);align-items:center}[data-v-637f64df] svg,[data-v-637f64df] img{display:inline-block;max-width:var(--size);max-height:var(--size);vertical-align:top;fill:var(--icon-color)}[data-v-637f64df] svg{width:var(--size)}[data-v-637f64df] svg path{transition:all .2s ease}a[data-v-637f64df]:hover,a[data-v-637f64df]:active{background-color:var(--bg-hover-color)}a[data-v-637f64df] svg path{fill:var(--icon-color)}.text[data-v-637f64df]{line-height:var(--size)}@media screen and (max-width: 768px){a[data-v-637f64df]{--size: 24px !important}}.wrapper[data-v-4b352d11]{background-color:var(--dark-100)}p.body2[data-v-4b352d11]{color:var(--light-200);margin-bottom:24px}h4[data-v-4b352d11],h6[data-v-4b352d11]{color:#fff}.buttons[data-v-4b352d11]{display:flex;margin-bottom:24px}.buttons *[data-v-4b352d11]{margin-right:16px}.divider[data-v-4b352d11]{height:1px;background-color:var(--dark-300)}.footer[data-v-4b352d11]{margin-top:24px;margin-bottom:24px;display:grid;grid-template-columns:repeat(3,1fr)}.body1[data-v-4b352d11],.body2[data-v-4b352d11]{color:var(--light-200)}.greylink[data-v-4b352d11]{cursor:pointer;display:block}.greylink[data-v-4b352d11]:hover,.greylink[data-v-4b352d11]:active{color:#fff}.disclaimer[data-v-4b352d11]{margin-top:24px}@media screen and (max-width: 768px){.footer[data-v-4b352d11]{display:block}}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/Inter-Light.woff2) format("woff2"),url(/fonts/Inter-Light.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/Inter-Regular.woff2) format("woff2"),url(/fonts/Inter-Regular.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/Inter-Medium.woff2) format("woff2"),url(/fonts/Inter-Medium.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/Inter-Bold.woff2) format("woff2"),url(/fonts/Inter-Bold.woff) format("woff")}:root{--font-sans: "Inter", sans-serif;--content-padding: 30px;--blue-100: #2A4A8A;--blue-200: #355DAE;--blue-300: #4070D1;--blue-400: #4B83F5;--dark-100: #1A1C21;--dark-200: #353942;--dark-300: #525866;--light-100: #E6EAF2;--light-200: #C2C5CC;--shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24);--radius: 8px;--radius-2: 16px ;--size-h1: 96px;--size-h2: 64px;--size-h3: 48px;--size-h4: 32px;--size-h5: 24px;--size-h6: 20px;--size-sub1: 16px;--size-sub2: 14px}body{font-family:var(--font-sans);color:var(--dark-100);margin:0;background:var(--light-100)}#app{display:grid;grid-template-rows:64px 1fr auto;height:100%}h1,h2,h3,h4,h5,h6{font-weight:500;color:var(--dark-100)}.regular{font-weight:400}h1,.h1{font-size:var(--size-h1);margin:112px 0 48px}h2,.h2{font-size:var(--size-h2);margin:72px 0 32px}h3,.h3{font-size:var(--size-h3);margin:60px 0 24px}h4,.h4{font-size:var(--size-h4);margin:40px 0 16px}h5,.h5{font-size:var(--size-h5);margin:32px 0 12px}h6,.h6{font-size:var(--size-h6);margin:24px 0 8px}.h1,.h2,.h3,.h4,.h5,.h6{margin:0}.subtitle1{font-size:var(--size-sub1);color:var(--dark-300)}.subtitle2{font-size:var(--size-sub2);color:var(--dark-300)}.body1{font-size:var(--size-sub1);line-height:24px;color:var(--dark-200)}.body2{font-size:var(--size-sub2);line-height:28px}.body1 p{margin:0 0 24px;line-height:32px}.body2 p{margin:6px 0;line-height:24px}.button{font-size:var(--size-sub1)}.button-lg{font-size:var(--size-h6)}@media screen and (max-width: 768px){.button-lg{font-size:var(--size-sub1)}}a{text-decoration:none;color:var(--dark-100)}p,ul,ol{max-width:700px}p{line-height:28px}ul{margin:0 0 24px}ul li,ol li{line-height:28px}.link{border-bottom:2px solid var(--blue-300)}.link:hover,.link:active{border-bottom:2px solid var(--blue-100)}.responsive{padding-left:var(--content-padding);padding-right:var(--content-padding);max-width:1220px;margin:0 auto}.cv>a[data-v-a5fc3b27]{margin-right:12px;margin-bottom:12px}#text>p[data-v-a5fc3b27]{font-size:20px;line-height:36px}.networks>a[data-v-a5fc3b27]{margin-right:12px;margin-bottom:12px}.tag[data-v-a5fc3b27]{padding:6px 12px;border-radius:var(--radius);display:inline-block;background:#fff;margin-right:8px;margin-bottom:8px}#about[data-v-a5fc3b27]{min-height:calc(100vh - 316px)}.responsive[data-v-a5fc3b27]{padding-top:48px;padding-bottom:48px}img[data-v-a5fc3b27]{width:100%;border-radius:var(--radius)}@media screen and (min-width: 768px){.responsive[data-v-a5fc3b27]{display:grid;grid-template-columns:1fr 2fr;gap:24px}h4[data-v-a5fc3b27]{margin-top:0}}.responsive[data-v-7c0f8bc3]{padding-top:64px;padding-bottom:32px}h2[data-v-7c0f8bc3],h5[data-v-7c0f8bc3]{margin:0}#name-container[data-v-7c0f8bc3]{margin-bottom:32px}#heading-container[data-v-7c0f8bc3]{display:grid;grid-template-rows:1fr 3fr;row-gap:4px;grid-auto-flow:column;max-width:700px;justify-content:space-between}@media screen and (max-width: 768px){#heading-container[data-v-7c0f8bc3]{row-gap:0px}h2[data-v-7c0f8bc3]{font-size:var(--size-h3)}h5[data-v-7c0f8bc3]{font-size:var(--size-h6)}.subtitle1[data-v-7c0f8bc3]{font-size:var(--size-sub2)}}#container[data-v-27d3b8ac]{display:block;padding-top:12px;margin-top:12px;margin-bottom:24px}.body2[data-v-27d3b8ac]{padding-top:12px;padding-bottom:12px;text-align:center;color:var(--dark-300)}.img-sm[data-v-27d3b8ac],.img-md[data-v-27d3b8ac],.img-lg[data-v-27d3b8ac]{margin-left:auto;margin-right:auto;display:block}.img-lg[data-v-27d3b8ac]{max-width:100%}@media screen and (max-width: 768px){.img-sm[data-v-27d3b8ac],.img-md[data-v-27d3b8ac]{max-width:100%}}@media screen and (min-width: 768px){.img-sm[data-v-27d3b8ac]{max-width:50%}.img-md[data-v-27d3b8ac]{max-width:70%}img.shadow[data-v-27d3b8ac],video.shadow[data-v-27d3b8ac]{-webkit-filter:drop-shadow(0 1px 3px #ccc);filter:drop-shadow(0 1px 3px #ccc)}}#projectArrows[data-v-ca97760c]{margin-top:64px;margin-bottom:64px;display:flex}#projectArrows>a[data-v-ca97760c]{font-size:var(--size-h6);color:var(--blue-200);border-radius:var(--radius);border:1px solid var(--blue-200);padding:6px 16px;background-size:200% 100%;transition:all .15s ease}#projectArrows *[data-v-ca97760c]:first-child{margin-right:8px}#projectArrows>a[data-v-ca97760c]:hover{color:#fff}svg[data-v-ca97760c] path{fill:var(--blue-200);transition:all .15s ease}.previous[data-v-ca97760c]{background:linear-gradient(to right,transparent 50%,var(--blue-200) 50%);background-position:left top}.previous[data-v-ca97760c]:hover{background-position:right top}.next[data-v-ca97760c]{background:linear-gradient(to left,transparent 50%,var(--blue-200) 50%);background-position:right top;float:right}.next>svg[data-v-ca97760c]{transform:rotate(180deg)}.next[data-v-ca97760c]:hover{background-position:left top}#projectArrows>a[data-v-ca97760c]:active{background-color:var(--blue-200);color:#fff}a:hover svg[data-v-ca97760c] path{fill:#fff}.flex-grow[data-v-ca97760c]{flex-grow:1}.tag[data-v-b0191d4a]{display:inline-block;padding:6px 12px;color:var(--light-100);border-radius:var(--radius)}.tile[data-v-d679ffa7]{background-color:var(--dark-100);border-radius:var(--radius-2);box-shadow:var(--shadow);--anim-dur: .1s;-webkit-transition:var(--anim-dur) ease;-moz-transition:var(--anim-dur) ease;-o-transition:var(--anim-dur) ease;transition:all .3s cubic-bezier(.25,.8,.25,1);color:#fff}.tile[data-v-d679ffa7]:hover{transform:scale(1.03);box-shadow:0 14px 28px #00000040,0 10px 10px #00000038}.img-container[data-v-d679ffa7]{display:inline-block;position:relative;width:100%}.img-container[data-v-d679ffa7]:after{padding-top:62.5%;display:block;content:""}img[data-v-d679ffa7]{position:absolute;top:0;bottom:0;right:0;left:0;width:100%;height:100%;object-fit:cover;border-radius:var(--radius-2) var(--radius-2) 0px 0px}.text[data-v-d679ffa7]{margin:24px 24px 48px}.h5[data-v-d679ffa7]{margin-bottom:16px}.text>.body1[data-v-d679ffa7]{color:var(--blue);padding:4px 8px;border-radius:var(--radius-2);border:1px solid var(--blue);display:inline-block}.tags div[data-v-d679ffa7]{margin-right:16px}@media screen and (max-width: 768px){.h5[data-v-d679ffa7]{font-size:var(--size-h6)}.text>.body1[data-v-d679ffa7]{font-size:var(--size-sub2)}}.responsive[data-v-29f0a935]{display:grid;grid-template-columns:1fr 1fr;margin-top:72px;gap:24px;align-items:end}img[data-v-29f0a935]{max-width:100%}.text[data-v-29f0a935]{margin:auto 0;display:grid;gap:24px}.text .body1[data-v-29f0a935]{color:var(--dark-200)}.buttons[data-v-29f0a935]{display:flex}.buttons a[data-v-29f0a935]:first-child{margin-right:24px}@media screen and (max-width: 768px){img[data-v-29f0a935]{margin-top:24px;margin-bottom:-5px;max-width:80%}.responsive[data-v-29f0a935]{display:block;margin-top:32px}.h2[data-v-29f0a935]{font-size:var(--size-h3)}}.h5[data-v-fa8148d2]{color:#fff;margin:auto 0}.body1[data-v-fa8148d2]{color:var(--light-200)}.grid[data-v-fa8148d2]{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.wrapper[data-v-fa8148d2]{background-color:var(--dark-100);padding-top:48px;padding-bottom:72px;fill:#fff}.tile[data-v-fa8148d2]{padding:24px;display:grid;grid-template-rows:2fr 1fr 2fr}.tile svg[data-v-fa8148d2]{margin:auto 0}@media screen and (max-width: 768px){.tile[data-v-fa8148d2]{grid-template-rows:auto;gap:16px}.wrapper[data-v-fa8148d2]{padding-top:32px;padding-bottom:64px}.grid[data-v-fa8148d2]{grid-template-columns:1fr;gap:0}}.tile[data-v-73787f0d]{background-color:var(--dark-100);border-radius:var(--radius-2);color:#fff;padding:24px;display:grid;gap:24px}.text[data-v-73787f0d]{line-height:28px}.person[data-v-73787f0d]{display:grid;grid-template-columns:64px 1fr;column-gap:12px;align-items:center}img[data-v-73787f0d]{width:64px;height:64px;border-radius:32px;object-fit:cover}.name[data-v-73787f0d]{margin-bottom:4px}.position[data-v-73787f0d]{font-size:var(--size-sub2);color:var(--light-200)}h4[data-v-1a8cc63f]{margin-bottom:32px}.grid[data-v-1a8cc63f]{display:grid;grid-template-columns:1fr;gap:32px;margin-bottom:100px}@media screen and (min-width: 768px){.grid[data-v-1a8cc63f]{grid-template-columns:repeat(2,1fr)}}#content[data-v-bf488d2e]{padding-bottom:24px}img[data-v-bf488d2e]{vertical-align:middle}#PageNotFound[data-v-f2755a3c]{padding-top:50px}h2[data-v-b94896ed]{font-size:14px;font-weight:700;color:var(--dark-100);margin:0 0 4px}p[data-v-b94896ed]{margin:0 0 24px}#download[data-v-b94896ed]{display:inline-block;margin-bottom:32px}#download>img[data-v-b94896ed]{vertical-align:middle} diff --git a/assets/index-tV6eXGuM.js b/assets/index-tV6eXGuM.js deleted file mode 100644 index 2f06f42..0000000 --- a/assets/index-tV6eXGuM.js +++ /dev/null @@ -1,25 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();/** -* @vue/shared v3.4.15 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function ys(e,t){const n=new Set(e.split(","));return t?s=>n.has(s.toLowerCase()):s=>n.has(s)}const ie={},St=[],je=()=>{},or=()=>!1,Mn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Cs=e=>e.startsWith("onUpdate:"),pe=Object.assign,As=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ir=Object.prototype.hasOwnProperty,Z=(e,t)=>ir.call(e,t),H=Array.isArray,Mt=e=>En(e)==="[object Map]",Fo=e=>En(e)==="[object Set]",q=e=>typeof e=="function",de=e=>typeof e=="string",Nt=e=>typeof e=="symbol",re=e=>e!==null&&typeof e=="object",Bo=e=>(re(e)||q(e))&&q(e.then)&&q(e.catch),Do=Object.prototype.toString,En=e=>Do.call(e),rr=e=>En(e).slice(8,-1),qo=e=>En(e)==="[object Object]",xs=e=>de(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bn=ys(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Pn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ar=/-(\w)/g,qe=Pn(e=>e.replace(ar,(t,n)=>n?n.toUpperCase():"")),lr=/\B([A-Z])/g,Ht=Pn(e=>e.replace(lr,"-$1").toLowerCase()),Tn=Pn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Zn=Pn(e=>e?`on${Tn(e)}`:""),dt=(e,t)=>!Object.is(e,t),Gn=(e,t)=>{for(let n=0;nJohannes Schweig
Flemingstr 6, 10557 Berlin
VAT No.: DE363289149
Telephone: 030/60269851
E-Mail: hello@johannesschweig.de
Internetadresse: www.johannesschweig.de
Johannes Schweig
Flemingstr 6, 10557 Berlin
Accountability for content: The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this context, please note that we are accordingly not obliged to monitor merely the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the Telemedia Act (TMG).
Accountability for links: Responsibility for the content of external links (to web pages of third parties) lies solely with the operators of the linked pages. No violations were evident to us at the time of linking. Should any legal infringement become known to us, we will remove the respective link immediately.
Copyright: Our web pages and their contents are subject to German copyright law. Unless expressly permitted by law (§ 44a et seq. of the copyright law), every form of utilizing, reproducing or processing works subject to copyright protection on our web pages requires the prior consent of the respective owner of the rights. Individual reproductions of a work are allowed only for private use, so must not serve either directly or indirectly for earnings. Unauthorized utilization of copyrighted works is punishable (§ 106 of the copyright law).
Quelle: http://www.muster-vorlagen.net
Johannes Schweig
Flemingstr 6, 10557 Berlin
USt - IdNr: DE363289149
Telefon: 030/60269851
E-Mail: hello@johannesschweig.de
Internetadresse: www.johannesschweig.de
Johannes Schweig
Flemingstr 6, 10557 Berlin
In my free time I programmed a music player and expanded on it over the years. I learnt a lot about User-Centered Design, software engineering and making use of stackoverflow.
I was faced with the challenge of still having a lot of mp3s lying around but no suitable software to play and manage them. As streaming services such as Spotify take over traditional music players have shifted their focus (iTunes) or were abandoned all together (Winamp). So I decided to built a desktop music player suited for my own needs.
I tried to specify the context of use and the requirements for the music playing application. I identified the following:
After that, I studied competing products: iTunes, Winamp, MediaMonkey and Windows Media Player. In what way did they fulfill their goals? What are their shortcomings? All of these applications provide a lot of functionality (playlists, file management, tag writing, equalizer and additional settings) and the user is generally expected to actively cue in his/her songs (except Genius-playlists by iTunes). A lot of space in the user interfaces of these applications is taken up by toolbars, menus, cover previews and large context menus. Also, old UI concepts are still in use such as the tree view navigation. Colors and style are mainly aimed to transport the corporate identity of the manufacturing company (WMP by windows, iTunes by apple).
Apart from the common media control I implemented three core design features:
During the iterations of implementation-testing I learnt how to get more efficient in my own workflow and how to counterbalance design and functionality. The experience from my university courses and the job at UseTree about usability, UX and user-centered design guided me through this process. Furthermore, I learnt how to prioritze features and implement only the ones that were important, sustainable and time-efficient. Apart from that my software development skills improved dramatically as I got more proficient in the Java language, the JavaFX frontend framework, SQL and different libraries.
I prepared a semi-structured interview with around 10 questions asking about
I skipped questions that were not applicable for the participant or asked again if there was a chance to gain more insights by diving deeper into a topic.
We managed to recruit customers from four companies and I talked to three internal consultants. The interviews were audio recorded and transcribed later.
I printed out the interview protocols on paper and cut them into small snips of a few sentences each. Then I started a data wall where I grouped snips to broader topics. After that I removed smaller topics to focus on the big topics that started to emerge.
',8),Lp=l("h4",null,"Ideation/Creation",-1),jp=l("h5",null,"Present findings",-1),Rp=l("p",null,"I presented these topics to my product manager and we decided which topics we would prioritize for now.",-1),$p=l("h4",null,"Development",-1),Sp=l("p",null,"A couple of smaller features were developed right after concluding the validation with customers. A search functionality was added to the scenario manager to find items in the list faster. Also, a couple of visual tweaks were made to the scenario manager and a convenient keyboard shortcut for faster navigation was introduced.",-1),Mp=l("p",null,"We had a bigger feature idea about grouping similar assumptions together and making it easier to switch between them. This idea was further iterated and refined until it was ready to be developed and shipped.",-1),Ep=l("h4",null,"Learnings",-1),Pp=l("p",null,"In hindsight, I was proud and amazed at how often I would come back to my findings for related topics or just look at the written protocols if I vaguely remembered somebody having said something similar in one of the interviews. A powerful quote from a user really sticks in your head!",-1),Tp=l("p",null,"I also enjoyed passing back the positive feedback from the interviews to the developers. They certainly deserved it.",-1),Up=l("p",null,"The project also inspired lots of people involved in building the product and served as a source of feature ideas for the future.",-1),Op=l("p",null,"On the other hand, the problem statement could have been clearer. The broad scope of it allowed for a lot of valuable exploration to happen, but it also felt like it was not worth the effort at times. Changing something is very hard if it has been at the core of an application for many years. Usually, there are good reasons why it is the way it is and users are not happy to have their workflow changed.",-1);function zp(e,t,n,s,o,i){const r=S("project-header"),a=S("styled-image"),c=S("project-arrows");return E(),O("div",null,[_(r,{route:"/scenariomanager"}),l("div",wp,[yp,Cp,Ap,xp,kp,_(a,{src:i.buildURL("scenariomanager/project-plan.png"),alt:"Plan for the project"},null,8,["src"]),Ip,_(a,{src:i.buildURL("scenariomanager/snip-gif.mp4"),alt:"Data wall with snips moving into bigger topics"},null,8,["src"]),Lp,jp,Rp,_(a,{src:i.buildURL("scenariomanager/mass-ass-slide.jpg"),alt:"Mass of assumptions was one bigger topic"},null,8,["src"]),$p,Sp,Mp,_(a,{src:i.buildURL("scenariomanager/variants.jpg"),alt:'Assumptions are grouped using "variants"'},null,8,["src"]),Ep,Pp,Tp,Up,Op]),_(c,{route:"/scenariomanager"})])}const Vp=ne(vp,[["render",zp]]),Np={components:{"project-header":Ue,"styled-image":Ke,"project-arrows":Oe},methods:{buildURL(e){return ye(e)}}},Re=e=>(Qe("data-v-b94896ed"),e=e(),Ye(),e),Hp={class:"responsive"},Fp=Re(()=>l("h2",null,"TL;DR",-1)),Bp=Re(()=>l("p",null,"In my master thesis I examined the effects of wearing eyeglasses on eye tracking. I used methods from statistics and machine learning to correct for eyeglass-induced errors.",-1)),Dp=Re(()=>l("h2",null,"Background",-1)),qp=Re(()=>l("p",null,[W("Eye tracking is a useful method which is not only used in research and interactive systems but also in future technologies such as the "),l("a",{target:"_blank",href:"https://techcrunch.com/2016/12/28/the-eye-tribe-oculus/"},"foveated rendering for VR"),W(". Modern eye trackers use a combination of the pupil position and an infrared reflection to infer the point of gaze. Corrective eyeglasses, however, pose a challenge for the eyetracking system. They alter the image of the eye, thus causing errors in the eyetracking signal. These errors are related to the refractive strength of the eyeglasses. In my thesis, I tried to build a classification model that takes eye tracking data as input in order to output the refractive strength of the current user. On the basis of this classification, an error correction is applied that corrects the eye tracking data dependening on the refractive strength.")],-1)),Kp=Re(()=>l("h2",null,"Data collection",-1)),Wp=Re(()=>l("p",null,"I collected data using a head model with artificial eyes and different pairs of eyeglasses on various positions of the screen. Two datasets were obtained; one for training and testing the models and one dataset for validation. The validation dataset contained a portion of new data. Its aim was to assess how well the models could generalize on new data.",-1)),Zp=Re(()=>l("h2",null,"Classification",-1)),Gp=Re(()=>l("p",null,"I employed several popular machine learning algorithms (KNN, SVM, MLP,...) to build classification models. These models were adjusted on the data (hyperparameters) in a grid search paradigm with a 10-fold cross-validation. The final models were evaluated on training, test and validation set. The Multi-layer perceptron model (MLP) showed the highest performance with a fscore of .99 on the test set and a fscore of .73 on the validation set.",-1)),Xp=Re(()=>l("h2",null,"Error correction",-1)),Qp=Re(()=>l("p",null,"I built several models following a weighted-average and a regression approach. The weighted-average model was able to reduce the error by about 50% on the training and test set. The regression model reduced the error by about 25%. Both models performed equally on the validation set with a reduction of 45% in X direction and 10% in Y direction.",-1)),Yp=Re(()=>l("h2",null,"Reflection",-1)),Jp=Re(()=>l("p",null,"My thesis was the first major research project that I conducted from start to finish. I recognized the vitality of an early distinct and definite definition of the task. I learned a lot about the practical application of machine learning on real data and how to deal with problems of data quality like missing and noisy data. I learnt how to make reasonable deductions from preliminary work and how to support my own claims. Lastly, I learnt how to interpret results in the presence of ambiguity and uncertainty and how huge the effort is in order to make small progress in research.",-1)),e3=["href"],t3=["src"];function n3(e,t,n,s,o,i){const r=S("project-header"),a=S("styled-image"),c=S("project-arrows");return E(),O("div",null,[_(r,{route:"/thesis"}),l("div",Hp,[Fp,Bp,_(a,{src:i.buildURL("thesis/foveated-rendering.png"),alt:"Foveated rendering in a VR game"},null,8,["src"]),Dp,qp,Kp,Wp,_(a,{src:i.buildURL("thesis/data-coll.png"),alt:"Collected eye tracking data"},null,8,["src"]),Zp,Gp,_(a,{src:i.buildURL("thesis/gnb.png"),alt:"Confusion matrix of a trained model"},null,8,["src"]),Xp,Qp,_(a,{src:i.buildURL("thesis/regX.png"),alt:"3D Scatterplot with a regression plane for the X offset"},null,8,["src"]),Yp,Jp,l("a",{id:"download",target:"_blank",href:i.buildURL("thesis/thesis.pdf")},[l("img",{src:i.buildURL("thesis/download.png"),width:"32"},null,8,t3),W(" Download the pdf here ")],8,e3)]),_(c,{route:"/thesis"})])}const s3=ne(Np,[["render",n3],["__scopeId","data-v-b94896ed"]]),o3={data(){return{project:{route:"/phoenix"}}},components:{"project-header":Ue,"project-arrows":Oe,Button:cn},methods:{buildURL(e){return ye(e)}}},i3={class:"responsive"},r3=l("h4",null,"TL;DR",-1),a3=l("p",null,"I was the project lead for a big car rental company building a system that automatically processed traffic tickets.",-1),l3=l("p",null,[W("The nature of this work is confidential. "),l("a",{class:"link",href:"mailto:hello@johannesschweig.de"},"Contact me "),W("for the password.")],-1);function c3(e,t,n,s,o,i){const r=S("project-header"),a=S("Button"),c=S("project-arrows");return E(),O("div",null,[_(r,{route:"/trafficticket"}),l("div",i3,[r3,a3,l3,_(a,{type:"primary",bg:"light",size:"sm",text:"Download the PDF",href:i.buildURL("trafficticket/trafficticket.pdf")},null,8,["href"])]),_(c,{route:"/trafficticket"})])}const u3=ne(o3,[["render",c3]]),d3=o2({history:wc("/"),routes:[{path:"/",component:Qh},{path:"/about",component:Eu},{path:"/codesnippets",component:C1},{path:"/dubai",component:F1},{path:"/esgehtlos",component:od},{path:"/greenbox",component:Ad},{path:"/knimehub",component:qd},{path:"/legal",component:ff},{path:"/mechanics",component:Sf},{path:"/phoenix",component:Qf},{path:"/querybuilder",component:bp},{path:"/scenariomanager",component:Vp},{path:"/thesis",component:s3},{path:"/trafficticket",component:u3},{path:"/:pathMatch(.*)",name:"bad-not-found",component:Of}],scrollBehavior(e,t,n){return{top:0}}}),Fs=vl(nc);Fs.use(xl());Fs.use(d3);Fs.mount("#app"); diff --git a/assets/index-zrolZyV4.js b/assets/index-zrolZyV4.js new file mode 100644 index 0000000..addc142 --- /dev/null +++ b/assets/index-zrolZyV4.js @@ -0,0 +1,25 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&s(r)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function s(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();/** +* @vue/shared v3.4.15 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function ys(e,t){const n=new Set(e.split(","));return t?s=>n.has(s.toLowerCase()):s=>n.has(s)}const re={},St=[],je=()=>{},or=()=>!1,Pn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Cs=e=>e.startsWith("onUpdate:"),pe=Object.assign,As=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ir=Object.prototype.hasOwnProperty,Z=(e,t)=>ir.call(e,t),H=Array.isArray,Mt=e=>En(e)==="[object Map]",Fo=e=>En(e)==="[object Set]",q=e=>typeof e=="function",de=e=>typeof e=="string",Nt=e=>typeof e=="symbol",ae=e=>e!==null&&typeof e=="object",Bo=e=>(ae(e)||q(e))&&q(e.then)&&q(e.catch),Do=Object.prototype.toString,En=e=>Do.call(e),rr=e=>En(e).slice(8,-1),qo=e=>En(e)==="[object Object]",xs=e=>de(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bn=ys(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Tn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ar=/-(\w)/g,qe=Tn(e=>e.replace(ar,(t,n)=>n?n.toUpperCase():"")),lr=/\B([A-Z])/g,Ht=Tn(e=>e.replace(lr,"-$1").toLowerCase()),Un=Tn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Zn=Tn(e=>e?`on${Un(e)}`:""),dt=(e,t)=>!Object.is(e,t),Gn=(e,t)=>{for(let n=0;nJohannes Schweig
Flemingstr 6, 10557 Berlin
VAT No.: DE363289149
Telephone: 030/60269851
E-Mail: hello@johannesschweig.de
Internetadresse: www.johannesschweig.de
Johannes Schweig
Flemingstr 6, 10557 Berlin
Accountability for content: The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents' accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this context, please note that we are accordingly not obliged to monitor merely the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the Telemedia Act (TMG).
Accountability for links: Responsibility for the content of external links (to web pages of third parties) lies solely with the operators of the linked pages. No violations were evident to us at the time of linking. Should any legal infringement become known to us, we will remove the respective link immediately.
Copyright: Our web pages and their contents are subject to German copyright law. Unless expressly permitted by law (§ 44a et seq. of the copyright law), every form of utilizing, reproducing or processing works subject to copyright protection on our web pages requires the prior consent of the respective owner of the rights. Individual reproductions of a work are allowed only for private use, so must not serve either directly or indirectly for earnings. Unauthorized utilization of copyrighted works is punishable (§ 106 of the copyright law).
Quelle: http://www.muster-vorlagen.net
Johannes Schweig
Flemingstr 6, 10557 Berlin
USt - IdNr: DE363289149
Telefon: 030/60269851
E-Mail: hello@johannesschweig.de
Internetadresse: www.johannesschweig.de
Johannes Schweig
Flemingstr 6, 10557 Berlin
In my free time I programmed a music player and expanded on it over the years. I learnt a lot about User-Centered Design, software engineering and making use of stackoverflow.
I was faced with the challenge of still having a lot of mp3s lying around but no suitable software to play and manage them. As streaming services such as Spotify take over traditional music players have shifted their focus (iTunes) or were abandoned all together (Winamp). So I decided to built a desktop music player suited for my own needs.
I tried to specify the context of use and the requirements for the music playing application. I identified the following:
After that, I studied competing products: iTunes, Winamp, MediaMonkey and Windows Media Player. In what way did they fulfill their goals? What are their shortcomings? All of these applications provide a lot of functionality (playlists, file management, tag writing, equalizer and additional settings) and the user is generally expected to actively cue in his/her songs (except Genius-playlists by iTunes). A lot of space in the user interfaces of these applications is taken up by toolbars, menus, cover previews and large context menus. Also, old UI concepts are still in use such as the tree view navigation. Colors and style are mainly aimed to transport the corporate identity of the manufacturing company (WMP by windows, iTunes by apple).
Apart from the common media control I implemented three core design features:
During the iterations of implementation-testing I learnt how to get more efficient in my own workflow and how to counterbalance design and functionality. The experience from my university courses and the job at UseTree about usability, UX and user-centered design guided me through this process. Furthermore, I learnt how to prioritze features and implement only the ones that were important, sustainable and time-efficient. Apart from that my software development skills improved dramatically as I got more proficient in the Java language, the JavaFX frontend framework, SQL and different libraries.
I prepared a semi-structured interview with around 10 questions asking about
I skipped questions that were not applicable for the participant or asked again if there was a chance to gain more insights by diving deeper into a topic.
We managed to recruit customers from four companies and I talked to three internal consultants. The interviews were audio recorded and transcribed later.
I printed out the interview protocols on paper and cut them into small snips of a few sentences each. Then I started a data wall where I grouped snips to broader topics. After that I removed smaller topics to focus on the big topics that started to emerge.
',8),Fp=l("h4",null,"Ideation/Creation",-1),Bp=l("h5",null,"Present findings",-1),Dp=l("p",null,"I presented these topics to my product manager and we decided which topics we would prioritize for now.",-1),qp=l("h4",null,"Development",-1),Kp=l("p",null,"A couple of smaller features were developed right after concluding the validation with customers. A search functionality was added to the scenario manager to find items in the list faster. Also, a couple of visual tweaks were made to the scenario manager and a convenient keyboard shortcut for faster navigation was introduced.",-1),Wp=l("p",null,"We had a bigger feature idea about grouping similar assumptions together and making it easier to switch between them. This idea was further iterated and refined until it was ready to be developed and shipped.",-1),Zp=l("h4",null,"Learnings",-1),Gp=l("p",null,"In hindsight, I was proud and amazed at how often I would come back to my findings for related topics or just look at the written protocols if I vaguely remembered somebody having said something similar in one of the interviews. A powerful quote from a user really sticks in your head!",-1),Xp=l("p",null,"I also enjoyed passing back the positive feedback from the interviews to the developers. They certainly deserved it.",-1),Qp=l("p",null,"The project also inspired lots of people involved in building the product and served as a source of feature ideas for the future.",-1),Yp=l("p",null,"On the other hand, the problem statement could have been clearer. The broad scope of it allowed for a lot of valuable exploration to happen, but it also felt like it was not worth the effort at times. Changing something is very hard if it has been at the core of an application for many years. Usually, there are good reasons why it is the way it is and users are not happy to have their workflow changed.",-1);function Jp(e,t,n,s,o,i){const r=$("project-header"),a=$("styled-image"),c=$("project-arrows");return P(),U("div",null,[_(r,{route:"/scenariomanager"}),l("div",Tp,[Up,Op,zp,Vp,Np,_(a,{src:i.buildURL("scenariomanager/project-plan.png"),alt:"Plan for the project"},null,8,["src"]),Hp,_(a,{src:i.buildURL("scenariomanager/snip-gif.mp4"),alt:"Data wall with snips moving into bigger topics"},null,8,["src"]),Fp,Bp,Dp,_(a,{src:i.buildURL("scenariomanager/mass-ass-slide.jpg"),alt:"Mass of assumptions was one bigger topic"},null,8,["src"]),qp,Kp,Wp,_(a,{src:i.buildURL("scenariomanager/variants.jpg"),alt:'Assumptions are grouped using "variants"'},null,8,["src"]),Zp,Gp,Xp,Qp,Yp]),_(c,{route:"/scenariomanager"})])}const e3=se(Ep,[["render",Jp]]),t3={components:{"project-header":Ue,"styled-image":Ze,"project-arrows":Oe},methods:{buildURL(e){return ve(e)}}},Re=e=>(Ke("data-v-b94896ed"),e=e(),We(),e),n3={class:"responsive"},s3=Re(()=>l("h2",null,"TL;DR",-1)),o3=Re(()=>l("p",null,"In my master thesis I examined the effects of wearing eyeglasses on eye tracking. I used methods from statistics and machine learning to correct for eyeglass-induced errors.",-1)),i3=Re(()=>l("h2",null,"Background",-1)),r3=Re(()=>l("p",null,[W("Eye tracking is a useful method which is not only used in research and interactive systems but also in future technologies such as the "),l("a",{target:"_blank",href:"https://techcrunch.com/2016/12/28/the-eye-tribe-oculus/"},"foveated rendering for VR"),W(". Modern eye trackers use a combination of the pupil position and an infrared reflection to infer the point of gaze. Corrective eyeglasses, however, pose a challenge for the eyetracking system. They alter the image of the eye, thus causing errors in the eyetracking signal. These errors are related to the refractive strength of the eyeglasses. In my thesis, I tried to build a classification model that takes eye tracking data as input in order to output the refractive strength of the current user. On the basis of this classification, an error correction is applied that corrects the eye tracking data dependening on the refractive strength.")],-1)),a3=Re(()=>l("h2",null,"Data collection",-1)),l3=Re(()=>l("p",null,"I collected data using a head model with artificial eyes and different pairs of eyeglasses on various positions of the screen. Two datasets were obtained; one for training and testing the models and one dataset for validation. The validation dataset contained a portion of new data. Its aim was to assess how well the models could generalize on new data.",-1)),c3=Re(()=>l("h2",null,"Classification",-1)),u3=Re(()=>l("p",null,"I employed several popular machine learning algorithms (KNN, SVM, MLP,...) to build classification models. These models were adjusted on the data (hyperparameters) in a grid search paradigm with a 10-fold cross-validation. The final models were evaluated on training, test and validation set. The Multi-layer perceptron model (MLP) showed the highest performance with a fscore of .99 on the test set and a fscore of .73 on the validation set.",-1)),d3=Re(()=>l("h2",null,"Error correction",-1)),h3=Re(()=>l("p",null,"I built several models following a weighted-average and a regression approach. The weighted-average model was able to reduce the error by about 50% on the training and test set. The regression model reduced the error by about 25%. Both models performed equally on the validation set with a reduction of 45% in X direction and 10% in Y direction.",-1)),f3=Re(()=>l("h2",null,"Reflection",-1)),p3=Re(()=>l("p",null,"My thesis was the first major research project that I conducted from start to finish. I recognized the vitality of an early distinct and definite definition of the task. I learned a lot about the practical application of machine learning on real data and how to deal with problems of data quality like missing and noisy data. I learnt how to make reasonable deductions from preliminary work and how to support my own claims. Lastly, I learnt how to interpret results in the presence of ambiguity and uncertainty and how huge the effort is in order to make small progress in research.",-1)),g3=["href"],m3=["src"];function _3(e,t,n,s,o,i){const r=$("project-header"),a=$("styled-image"),c=$("project-arrows");return P(),U("div",null,[_(r,{route:"/thesis"}),l("div",n3,[s3,o3,_(a,{src:i.buildURL("thesis/foveated-rendering.png"),alt:"Foveated rendering in a VR game"},null,8,["src"]),i3,r3,a3,l3,_(a,{src:i.buildURL("thesis/data-coll.png"),alt:"Collected eye tracking data"},null,8,["src"]),c3,u3,_(a,{src:i.buildURL("thesis/gnb.png"),alt:"Confusion matrix of a trained model"},null,8,["src"]),d3,h3,_(a,{src:i.buildURL("thesis/regX.png"),alt:"3D Scatterplot with a regression plane for the X offset"},null,8,["src"]),f3,p3,l("a",{id:"download",target:"_blank",href:i.buildURL("thesis/thesis.pdf")},[l("img",{src:i.buildURL("thesis/download.png"),width:"32"},null,8,m3),W(" Download the pdf here ")],8,g3)]),_(c,{route:"/thesis"})])}const v3=se(t3,[["render",_3],["__scopeId","data-v-b94896ed"]]),b3={data(){return{project:{route:"/phoenix"}}},components:{"project-header":Ue,"project-arrows":Oe,Button:un},methods:{buildURL(e){return ve(e)}}},w3={class:"responsive"},y3=l("h4",null,"TL;DR",-1),C3=l("p",null,"I was the project lead for a big car rental company building a system that automatically processed traffic tickets.",-1),A3=l("p",null,[W("The nature of this work is confidential. "),l("a",{class:"link",href:"mailto:hello@johannesschweig.de"},"Contact me "),W("for the password.")],-1);function x3(e,t,n,s,o,i){const r=$("project-header"),a=$("Button"),c=$("project-arrows");return P(),U("div",null,[_(r,{route:"/trafficticket"}),l("div",w3,[y3,C3,A3,_(a,{type:"primary",bg:"light",size:"sm",text:"Download the PDF",href:i.buildURL("trafficticket/trafficticket.pdf")},null,8,["href"])]),_(c,{route:"/trafficticket"})])}const k3=se(b3,[["render",x3]]),I3=o2({history:wc("/"),routes:[{path:"/",component:ff},{path:"/about",component:Eu},{path:"/codesnippets",component:A1},{path:"/dubai",component:B1},{path:"/esgehtlos",component:id},{path:"/greenbox",component:xd},{path:"/knimehub",component:Kd},{path:"/legal",component:jf},{path:"/mechanics",component:Kf},{path:"/phoenix",component:hp},{path:"/querybuilder",component:Pp},{path:"/scenariomanager",component:e3},{path:"/thesis",component:v3},{path:"/trafficticket",component:k3},{path:"/:pathMatch(.*)",name:"bad-not-found",component:Yf}],scrollBehavior(e,t,n){return{top:0}}}),Fs=bl(nc);Fs.use(xl());Fs.use(I3);Fs.mount("#app"); diff --git a/assets/viraj-zDO__Xrj.jpeg b/assets/viraj-zDO__Xrj.jpeg new file mode 100644 index 0000000..e4a550a Binary files /dev/null and b/assets/viraj-zDO__Xrj.jpeg differ diff --git a/index.html b/index.html index 2c2907b..b31e4c8 100644 --- a/index.html +++ b/index.html @@ -15,8 +15,8 @@ - - + +