2:I[6379,["231","static/chunks/231-ef201d9091b1ab11.js","558","static/chunks/558-a7d0542010e27d7e.js","605","static/chunks/app/tags/%5Btag%5D/page-a7dc6715e1168e89.js"],"default"] 3:I[9275,[],""] 5:I[1343,[],""] 6:I[8700,["231","static/chunks/231-ef201d9091b1ab11.js","473","static/chunks/473-028acc0f4f91144a.js","185","static/chunks/app/layout-17cde397e4c9c21a.js"],"ThemeProviders"] 7:I[9032,["231","static/chunks/231-ef201d9091b1ab11.js","473","static/chunks/473-028acc0f4f91144a.js","185","static/chunks/app/layout-17cde397e4c9c21a.js"],"KBarSearchProvider"] 8:I[231,["231","static/chunks/231-ef201d9091b1ab11.js","904","static/chunks/app/tags/page-99b61aaaa04c1919.js"],""] a:I[509,["231","static/chunks/231-ef201d9091b1ab11.js","473","static/chunks/473-028acc0f4f91144a.js","185","static/chunks/app/layout-17cde397e4c9c21a.js"],"KBarButton"] b:I[1398,["231","static/chunks/231-ef201d9091b1ab11.js","473","static/chunks/473-028acc0f4f91144a.js","185","static/chunks/app/layout-17cde397e4c9c21a.js"],"default"] c:I[8976,["231","static/chunks/231-ef201d9091b1ab11.js","473","static/chunks/473-028acc0f4f91144a.js","185","static/chunks/app/layout-17cde397e4c9c21a.js"],"default"] 4:["tag","tech","d"] 9:T1515,M2.148 18.945v-1.074q-.097-.781-.341-1.416l-.257-.671-.28-.745a22 22 0 0 1-.626-1.704 26 26 0 0 1-.253-.835 9.5 9.5 0 0 1-.279-1.377Q0 10.27 0 9.277q.165-.825.4-1.267a2 2 0 0 1 .088-.149q.268-.4.535-.679l.051-.053.391-1.758H2.93a13 13 0 0 0 1.611.098h1.611q3.711 0 7.618-.293 3.906-.293 8.007-.684a123 123 0 0 1 5.883-.618 151 151 0 0 1 3.785-.261q.474-1.041.626-1.348l.009-.019.342-.683 1.074-.586q2.246-.098 3.125.537a10 10 0 0 1 .604.469q.286.241.513.474a5 5 0 0 1 .25.277q2.539-.195 5.176-.537t5.469-.732a2654 2654 0 0 1 7.91-.977 65 65 0 0 1 7.336-.486L64.355 0q1.661 0 3.125.098a38 38 0 0 1 2.489.245l.344.048 1.171.879a6 6 0 0 0 .977 1.269 11 11 0 0 0 .721.659 15 15 0 0 0 .646.513q1.465 1.172 2.881 2.93 1.416 1.757 1.025 5.175l-.488.977a5 5 0 0 1-.409.366q-.222.18-.486.36l-.081.055-.977 1.27h-1.074a11 11 0 0 0-.511.011q-.462.023-.776.09a2 2 0 0 0-.178.045q-.336.101-.764.271a16 16 0 0 0-.408.169 5 5 0 0 1-.498.214 6 6 0 0 1-.381.127 32 32 0 0 0-.513.159 43 43 0 0 0-.561.183q-.885-.08-1.439-.094l-.221-.003h-1.367a51 51 0 0 0-3.451.123 64 64 0 0 0-2.897.267 183 183 0 0 0-6.59.872l-.051.007a418 418 0 0 1-3.405.412l-1.087.125-2.051.232-1.855.208a453 453 0 0 1-.817 2.109q-.376.963-.717 1.822l-.224.561q-.781 1.953-1.66 3.906t-1.66 3.955a43 43 0 0 0-.848 2.391 55 55 0 0 0-.617 2.053 32 32 0 0 0-1.074 1.721 25 25 0 0 0-.879 1.648 16 16 0 0 0-.786 1.952 21 21 0 0 0-.484 1.71 10.5 10.5 0 0 0-1.677 2.538 10 10 0 0 0-.422 1.075 170 170 0 0 1-.456 1.383q-.181.541-.348 1.026a86 86 0 0 1-.319.911l-.391 1.465q-.507.507-.719.853a1.3 1.3 0 0 0-.111.222q-.107.283-.342.619a5 5 0 0 1-.195.259q-.293 1.27-.781 2.442a34 34 0 0 0-.293.76l-.098.265a3 3 0 0 0-.069.213q-.086.313-.051.525a1 1 0 0 0 .022.092 7 7 0 0 1-.149.653q-.087.307-.196.559a3 3 0 0 1-.241.448 7 7 0 0 1-.097 1.172l-.196 1.172a16 16 0 0 0-.152.57q-.064.262-.111.497l-.03.154a2 2 0 0 0-.032.353 1.8 1.8 0 0 0 .13.672l.586.782a3 3 0 0 1 .268.439q.107.214.195.465l.025.072a1.2 1.2 0 0 0 .357.242 1 1 0 0 0 .132.051 1.3 1.3 0 0 1 .298.141 1 1 0 0 1 .19.152 5 5 0 0 0 .479.37q.258.172.504.275a2 2 0 0 0 .482.136l.976 1.172q.326 1.953-.042 3.423a5 5 0 0 1-1.032 2.046q-1.439 1.838-4.447 2.172a13 13 0 0 1-1.412.074l-1.368-.098-.235-.239q-.466-.481-.546-.64l-.421-.186q-.564-.248-.985-.424l-.059-.024a2.1 2.1 0 0 1-.561-.354q-.269-.232-.513-.574a.86.86 0 0 0-.443-.236l-.045-.008a.9.9 0 0 1-.304-.105.8.8 0 0 1-.184-.139q-.726-.218-1.236-.49a4 4 0 0 1-.327-.194l-1.074-.586.042-.448q.055-.625.055-.919a9 9 0 0 1-1.22-2.344 22 22 0 0 1-.733-2.637l-.28-1.025-.257-.928a5 5 0 0 0-.477-1.162 5 5 0 0 0-.255-.4 55 55 0 0 1-.023-1.578q0-5.804 1.292-9.897a129 129 0 0 1 3.223-9.033 104 104 0 0 0 1.855-4.785 63 63 0 0 0 1.563-4.981l1.074-1.074.239-.202q.357-.298.536-.419a1 1 0 0 1 .104-.062 6.7 6.7 0 0 1 .488-2.491 52 52 0 0 1 .93-2.173l.145-.317a34 34 0 0 0 .732-1.562 8 8 0 0 0 .222-.559q.097-.273.157-.517a4 4 0 0 0 .06-.292q-.638 0-1.148.043l-.072.006a15 15 0 0 0-.824.1l-.299.047a11.4 11.4 0 0 1-1.681.263 10 10 0 0 1-.761.03 13 13 0 0 1-.409-.006q-.567-.019-.86-.092a5 5 0 0 1-.654.273q-.362.119-.701.156l-.11.011a19 19 0 0 1-1.367.048h-2.344q-.763 0-1.319.124a3 3 0 0 0-.536.169H8.789a10 10 0 0 1-.775-.032q-.464-.036-.983-.114-.969-.146-2.035-.724l-.016-.009-.683-.781q-.559-1.025-1.03-1.161l-.044-.011zm63.038 40.137a17.2 17.2 0 0 0 4.638 5.371l.053.014q1.916.49 3.072 1.597 1.172 1.124 2.246 2.393a87 87 0 0 0 4.239 1.316 106 106 0 0 0 7.675 1.858q6.446 1.318 12.598 1.514a9 9 0 0 1 2.49-.635 24 24 0 0 1 2.637-.147l.41.003a31 31 0 0 1 2.129.095q.877.07 1.578.039a8 8 0 0 0 .522-.039 311 311 0 0 0 3.906-2.979 38 38 0 0 0 3.613-3.173q.293-1.954-.244-3.37l-.086-.219a8.2 8.2 0 0 0-1.379-2.271l-.242-.276a25 25 0 0 0-1.809-1.823 16 16 0 0 1-2.002-2.198q-8.593-.097-17.334-.634a81 81 0 0 1-2.17-.163 72 72 0 0 1-14.382-2.718 201 201 0 0 1-1.319-2.686l-.097-.212q-.29-.658-.478-1.441a12 12 0 0 1-.255-1.521q.684-.879 1.27-1.757a3 3 0 0 0 .353-.756q.233-.737.233-1.784a366 366 0 0 0 3.515-3.564q1.758-1.807 3.663-3.467a32 32 0 0 1 4.101-3.027 18 18 0 0 1 1.352-.76 20 20 0 0 1 3.58-1.389l.024-.027a16.9 16.9 0 0 1 3.638-3.049q2.099-1.318 4.492-2.295a56 56 0 0 1 4.98-1.757q2.588-.782 5.616-1.563a9.5 9.5 0 0 0 2.302-.963 11.4 11.4 0 0 0 2.336-1.82 13 13 0 0 0 1.077-1.212 10.6 10.6 0 0 0 1.804-3.378 8 8 0 0 0 .109-.379q.238-.911.238-1.796a6.6 6.6 0 0 0-.542-2.61q-.702-1.65-2.716-2.668a11 11 0 0 0-1.776-.701q.097-.684.293-.977a.32.32 0 0 0 .056-.183q0-.191-.205-.44a2 2 0 0 0-.144-.158q-.876-.125-1.451-.391a2.4 2.4 0 0 1-.551-.342 1.6 1.6 0 0 0-.46-.276q-.499-.196-1.152-.065l.044-.085q.117-.218.396-.697a1 1 0 0 0 .052-.1q.187-.419-.297-.547a2 2 0 0 0-.195-.036l-.065.144q-.255.528-.472.442l-.066-.031q-.223-.112-.52-.409-.341-.341-.732-.634a1 1 0 0 0-.31-.162q-.216-.071-.475-.056a2 2 0 0 0-.192.022 18 18 0 0 1-.927.281 24 24 0 0 1-1.026.256q-1.074.244-1.66-.537-.781 1.172-2.002 1.856a31 31 0 0 1-2.539 1.269 49 49 0 0 0-2.637 1.27 9 9 0 0 0-.744.431 7.3 7.3 0 0 0-1.453 1.229 19 19 0 0 0-1.818.532 14.6 14.6 0 0 0-2.479 1.128 43 43 0 0 0-3.613 2.344q-1.758 1.269-3.662 2.344a15 15 0 0 1-1.702.819 18.3 18.3 0 0 1-2.644.841 5.9 5.9 0 0 1-1.465 1.513l-1.757 1.27a13.6 13.6 0 0 0-1.661 1.416 5 5 0 0 0-1.171 1.855q-.489-.293-1.075-.293a180 180 0 0 1-3.369 3.663 53 53 0 0 0-3.271 3.808q-1.563 2.002-2.832 4.199a24 24 0 0 0-.647 1.199 27 27 0 0 0-1.502 3.635q-.097 3.516.244 7.373.342 3.858 1.368 7.471a31.5 31.5 0 0 0 2.832 6.836Z0:["yxvcy2smkTACFqS_PqEPH",[[["",{"children":["tags",{"children":[["tag","tech","d"],{"children":["__PAGE__?{\"tag\":\"tech\"}",{}]}]}]},"$undefined","$undefined",true],["",{"children":["tags",{"children":[["tag","tech","d"],{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"posts":[{"title":"Putting What I Learned All Together","date":"2024-08-15T06:00:00.000Z","tags":["finance","tech","medicine","puclic-health","management","technical-analysis"],"lastmod":"2024-08-15T00:00:00.000Z","draft":false,"summary":"The title is the goal, currently I'm just glad that I get to use what I learned years ago, whether it was self-taught or self-taught-in-class.","images":["/static/images/"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.665,"time":399900,"words":1333},"slug":"putting-it-all-together","path":"blog/putting-it-all-together","filePath":"blog/putting-it-all-together.mdx","toc":[{"value":"Technical Skills","url":"#technical-skills","depth":2},{"value":"Finance (and Econ)","url":"#finance-and-econ","depth":2},{"value":"Technical Analysis of Securities (證券投資分析)","url":"#technical-analysis-of-securities-證券投資分析","depth":3},{"value":"SEC Practitioner Licenses","url":"#sec-practitioner-licenses","depth":3},{"value":"Management","url":"#management","depth":2},{"value":"Medicine","url":"#medicine","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Putting What I Learned All Together","datePublished":"2024-08-15T06:00:00.000Z","dateModified":"2024-08-15T00:00:00.000Z","description":"The title is the goal, currently I'm just glad that I get to use what I learned years ago, whether it was self-taught or self-taught-in-class.","image":"/static/images/","url":"https://teddysc.me/blog/putting-it-all-together"}},{"title":"List of My Recent Technical Migrations","date":"2024-08-03T06:00:00.000Z","tags":["tech","migrations","list"],"lastmod":"2024-08-03T00:00:00.000Z","draft":false,"summary":"Things change. Tools went unmaintained. Commercial services shut down. Better options available. All are my reasons to switch from one tool or service to another.","images":["/static/images/"],"type":"Blog","readingTime":{"text":"2 min read","minutes":1.995,"time":119700,"words":399},"slug":"list/tech-migrations","path":"blog/list/tech-migrations","filePath":"blog/list/tech-migrations.mdx","toc":[{"value":"SecretOps: envchain -> Doppler & Infisical","url":"#secretops-envchain---doppler--infisical","depth":2},{"value":"TOTP: Authy -> Ente Auth","url":"#totp-authy---ente-auth","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"List of My Recent Technical Migrations","datePublished":"2024-08-03T06:00:00.000Z","dateModified":"2024-08-03T00:00:00.000Z","description":"Things change. Tools went unmaintained. Commercial services shut down. Better options available. All are my reasons to switch from one tool or service to another.","image":"/static/images/","url":"https://teddysc.me/blog/list/tech-migrations"}},{"title":"List of Technical Posts on This Site","date":"2024-07-07T06:00:00.000Z","tags":["tech","list","data","projects","featured"],"lastmod":"2024-07-07T00:00:00.000Z","draft":false,"summary":"","images":["/static/images/"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.285,"time":17100,"words":57},"slug":"list/technical-posts","path":"blog/list/technical-posts","filePath":"blog/list/technical-posts.mdx","toc":[{"value":"Tags","url":"#tags","depth":2},{"value":"See Also","url":"#see-also-16","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"List of Technical Posts on This Site","datePublished":"2024-07-07T06:00:00.000Z","dateModified":"2024-07-07T00:00:00.000Z","description":"","image":"/static/images/","url":"https://teddysc.me/blog/list/technical-posts"}},{"title":"Fun with Unicode","date":"2024-06-04T06:00:00.000Z","tags":["unicode","tech"],"lastmod":"2024-06-04T00:00:00.000Z","draft":false,"summary":"Aegean numbers, Tibetan script, and zalgo text - oh my!","images":["/static/images/zalgo-gradio-screenshot.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.41,"time":24600,"words":82},"slug":"unicode","path":"blog/unicode","filePath":"blog/unicode.mdx","toc":[{"value":"Zalgo Text (Combining Diacritical Marks)","url":"#zalgo-text-combining-diacritical-marks","depth":2},{"value":"Other Fun Unicode Characters and Codepoint Ranges","url":"#other-fun-unicode-characters-and-codepoint-ranges","depth":2},{"value":"See Also","url":"#see-also-12","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Fun with Unicode","datePublished":"2024-06-04T06:00:00.000Z","dateModified":"2024-06-04T00:00:00.000Z","description":"Aegean numbers, Tibetan script, and zalgo text - oh my!","image":"/static/images/zalgo-gradio-screenshot.png","url":"https://teddysc.me/blog/unicode"}},{"title":"Fixing macOS with Google Santa","date":"2024-05-16T06:00:00.000Z","tags":["macos","sysadmin","tools","tech"],"lastmod":"2024-05-16T00:00:00.000Z","draft":false,"summary":"Santa is a fantastic binary blacklisting tool, and I use it to prevent annoying processes from running on macOS","images":["/static/images/santa-sleigh-256.png"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.215,"time":132900,"words":443},"slug":"google-santa","path":"blog/google-santa","filePath":"blog/google-santa.mdx","toc":[{"value":"What to Block","url":"#what-to-block","depth":2},{"value":"contactsd","url":"#contactsd","depth":3},{"value":"universalaccessd","url":"#universalaccessd","depth":3},{"value":"Apps that Like to Start Themselves","url":"#apps-that-like-to-start-themselves","depth":3},{"value":"Sketchy Apps","url":"#sketchy-apps","depth":3},{"value":"Other Great Tools","url":"#other-great-tools","depth":2},{"value":"Blocking App's Network Access","url":"#blocking-apps-network-access","depth":3},{"value":"Blocking App's File Access","url":"#blocking-apps-file-access","depth":3},{"value":"Conslusion","url":"#conslusion","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Fixing macOS with Google Santa","datePublished":"2024-05-16T06:00:00.000Z","dateModified":"2024-05-16T00:00:00.000Z","description":"Santa is a fantastic binary blacklisting tool, and I use it to prevent annoying processes from running on macOS","image":"/static/images/santa-sleigh-256.png","url":"https://teddysc.me/blog/google-santa"}},{"title":"Introducing GitHub Gist HTML Renderer","date":"2024-05-07T06:00:00.000Z","tags":["tech","cloudflare","cloudflare-workers","github","announcement"],"lastmod":"2024-05-07T00:00:00.000Z","draft":false,"summary":"A simple service that does a simple nice thing","images":["/static/images/a-simple-service.jpg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.065,"time":243900,"words":813},"slug":"introducing/github-gist-html-renderer","path":"blog/introducing/github-gist-html-renderer","filePath":"blog/introducing/github-gist-html-renderer.mdx","toc":[{"value":"Demo","url":"#demo-2","depth":2},{"value":"Single File Mode (Default)","url":"#single-file-mode-default","depth":3},{"value":"Multi-files Mode","url":"#multi-files-mode","depth":3},{"value":"Why","url":"#why-3","depth":2},{"value":"The Solution","url":"#the-solution","depth":2},{"value":"Usage","url":"#usage","depth":2},{"value":"Manual","url":"#manual","depth":3},{"value":"Script","url":"#script","depth":3},{"value":"What I use in my .zshrc","url":"#what-i-use-in-my-zshrc","depth":4},{"value":"Chrome Extension","url":"#chrome-extension","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introducing GitHub Gist HTML Renderer","datePublished":"2024-05-07T06:00:00.000Z","dateModified":"2024-05-07T00:00:00.000Z","description":"A simple service that does a simple nice thing","image":"/static/images/a-simple-service.jpg","url":"https://teddysc.me/blog/introducing/github-gist-html-renderer"}},{"title":"whatsapp-chat-analyze - Command Line Tool to Generate Pretty Charts from Whatsapp Exported Chats","date":"2024-05-05T06:00:00.000Z","tags":["tech","data","command-line","plotly","data-visualization"],"lastmod":"2024-05-05T00:00:00.000Z","draft":false,"summary":"Pretty interactive charts with plotly!","images":["/static/images/whatsapp-chat-analyze-screenshot.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.64,"time":38400,"words":128},"slug":"whatsapp-chat-analyze","path":"blog/whatsapp-chat-analyze","filePath":"blog/whatsapp-chat-analyze.mdx","toc":[{"value":"Demo","url":"#demo-1","depth":2},{"value":"Messages Per Day","url":"#messages-per-day","depth":3},{"value":"Messages Per Day by Author","url":"#messages-per-day-by-author","depth":3},{"value":"Total Char Count per Day","url":"#total-char-count-per-day","depth":3},{"value":"Total Char Count per Day by Author","url":"#total-char-count-per-day-by-author","depth":3},{"value":"Total Char Count by Party","url":"#total-char-count-by-party","depth":3},{"value":"Message Count by Party","url":"#message-count-by-party","depth":3},{"value":"See Also","url":"#see-also-13","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"whatsapp-chat-analyze - Command Line Tool to Generate Pretty Charts from Whatsapp Exported Chats","datePublished":"2024-05-05T06:00:00.000Z","dateModified":"2024-05-05T00:00:00.000Z","description":"Pretty interactive charts with plotly!","image":"/static/images/whatsapp-chat-analyze-screenshot.png","url":"https://teddysc.me/blog/whatsapp-chat-analyze"}},{"title":"Introducing Hokkien Converter","date":"2024-05-05T06:00:00.000Z","tags":["hokkien","languages","gradio","tech"],"lastmod":"2024-05-05T00:00:00.000Z","draft":false,"summary":"Hokkien to various romanization schemes online transliteration tool","images":["/static/images/hokkien-converter-screenshot.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.705,"time":42300,"words":141},"slug":"introducing/hokkien-converter","path":"blog/introducing/hokkien-converter","filePath":"blog/introducing/hokkien-converter.mdx","toc":[{"value":"Why?","url":"#why-4","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introducing Hokkien Converter","datePublished":"2024-05-05T06:00:00.000Z","dateModified":"2024-05-05T00:00:00.000Z","description":"Hokkien to various romanization schemes online transliteration tool","image":"/static/images/hokkien-converter-screenshot.png","url":"https://teddysc.me/blog/introducing/hokkien-converter"}},{"title":"Introducing Real-time System Scheduling and Visulazation App","date":"2024-05-05T06:00:00.000Z","tags":["gradio","tech","rts","projects"],"lastmod":"2024-05-05T00:00:00.000Z","draft":false,"summary":"Covering earliest-deadline-first, demand bound function and friends!","images":["/static/images/rts-app-screenshot-1.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.665,"time":39900,"words":133},"slug":"introducing/rts-scheduling-app","path":"blog/introducing/rts-scheduling-app","filePath":"blog/introducing/rts-scheduling-app.mdx","toc":[{"value":"Why?","url":"#why-5","depth":2},{"value":"Technical Details","url":"#technical-details","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introducing Real-time System Scheduling and Visulazation App","datePublished":"2024-05-05T06:00:00.000Z","dateModified":"2024-05-05T00:00:00.000Z","description":"Covering earliest-deadline-first, demand bound function and friends!","image":"/static/images/rts-app-screenshot-1.png","url":"https://teddysc.me/blog/introducing/rts-scheduling-app"}},{"title":"NCSU CSC Faculty Data - Analaysis and Visualization","date":"2024-05-03T06:00:00.000Z","tags":["data","tech","visualization","ncsu","ncsu-csc","plotly","data-visualization"],"lastmod":"2024-05-03T00:00:00.000Z","draft":false,"summary":"Interactive plots! Names, ethnicities, research areas, and more!","images":["/static/images/ncsu-csc-faculty-research-network.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.935,"time":56100,"words":187},"slug":"ncsu-csc-data","path":"blog/ncsu-csc-data","filePath":"blog/ncsu-csc-data.mdx","toc":[{"value":"Data Source","url":"#data-source","depth":2},{"value":"Ethnicity Makeup","url":"#ethnicity-makeup","depth":2},{"value":"Research Areas","url":"#research-areas","depth":2},{"value":"Research Interest Network + Ethnicity","url":"#research-interest-network--ethnicity","depth":2},{"value":"Number of Research Areas by Ethnicity","url":"#number-of-research-areas-by-ethnicity","depth":2},{"value":"Total Number of Research Areas, Stacked Bars","url":"#total-number-of-research-areas-stacked-bars","depth":3},{"value":"Average Number of Research Areas","url":"#average-number-of-research-areas","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"NCSU CSC Faculty Data - Analaysis and Visualization","datePublished":"2024-05-03T06:00:00.000Z","dateModified":"2024-05-03T00:00:00.000Z","description":"Interactive plots! Names, ethnicities, research areas, and more!","image":"/static/images/ncsu-csc-faculty-research-network.png","url":"https://teddysc.me/blog/ncsu-csc-data"}},{"title":"Fun with Datasette","date":"2024-05-01T06:00:00.000Z","tags":["data","datasette","tech"],"lastmod":"2024-05-01T00:00:00.000Z","draft":false,"summary":"Thank you, simonw, for making SQLite fun again!","images":["/static/images/kelly-datasette-highlight-demo.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.87,"time":52200,"words":174},"slug":"fun-with-datasette","path":"blog/fun-with-datasette","filePath":"blog/fun-with-datasette.mdx","toc":[{"value":"My Datasette Instances","url":"#my-datasette-instances","depth":2},{"value":"Personal","url":"#personal","depth":3},{"value":"Research","url":"#research","depth":3},{"value":"Just messing around","url":"#just-messing-around","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Fun with Datasette","datePublished":"2024-05-01T06:00:00.000Z","dateModified":"2024-05-01T00:00:00.000Z","description":"Thank you, simonw, for making SQLite fun again!","image":"/static/images/kelly-datasette-highlight-demo.png","url":"https://teddysc.me/blog/fun-with-datasette","author":[{"@type":"Person","name":"Teddy Xinyuan Chen"}]}},{"title":"List of Static Site Generators I've Used","date":"2024-04-15T06:00:00.000Z","tags":["tech","website","static-site-generator","featured","list","tools"],"lastmod":"2024-04-15T00:00:00.000Z","draft":false,"summary":"From Jekyll to Hugo to Next.js, from GitHub Pages to Netlify to Cloudflare Pages","images":["/static/images/jamstack-ssg-list-screenshot.png"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.84,"time":410400,"words":1368},"slug":"list/ssg","path":"blog/list/ssg","filePath":"blog/list/ssg.mdx","toc":[{"value":"Blogs","url":"#blogs","depth":2},{"value":"Jekyll, My First SSG","url":"#jekyll-my-first-ssg","depth":3},{"value":"Hugo","url":"#hugo","depth":3},{"value":"Next.js","url":"#nextjs","depth":3},{"value":"knitr, rMarkdown","url":"#knitr-rmarkdown","depth":3},{"value":"Quarto","url":"#quarto","depth":3},{"value":"Obvervable Framework","url":"#obvervable-framework","depth":3},{"value":"Other JS Based SSGs","url":"#other-js-based-ssgs","depth":3},{"value":"Other Non-JS Based SSGs","url":"#other-non-js-based-ssgs","depth":3},{"value":"Docs","url":"#docs","depth":2},{"value":"Notes","url":"#notes-1","depth":2},{"value":"Web Apps","url":"#web-apps","depth":2},{"value":"Slides","url":"#slides","depth":2},{"value":"Standalone HTML Filse","url":"#standalone-html-filse","depth":2},{"value":"Photo Gallery","url":"#photo-gallery","depth":2},{"value":"PITAs","url":"#pitas","depth":2},{"value":"See Also","url":"#see-also-15","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"List of Static Site Generators I've Used","datePublished":"2024-04-15T06:00:00.000Z","dateModified":"2024-04-15T00:00:00.000Z","description":"From Jekyll to Hugo to Next.js, from GitHub Pages to Netlify to Cloudflare Pages","image":"/static/images/jamstack-ssg-list-screenshot.png","url":"https://teddysc.me/blog/list/ssg"}},{"title":"Making events-api","date":"2024-04-04T06:00:00.000Z","tags":["tech","data","featured"],"lastmod":"2024-04-04T00:00:00.000Z","draft":false,"summary":"The quick and dirty, and the ugliness. Just do what works, and do repeat yourself, because pre-mature optimization considered harmful.","images":["/static/images/events-api-docs-wendy-screenshot.png"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.2,"time":252000,"words":840},"slug":"events-api","path":"blog/events-api","filePath":"blog/events-api.mdx","toc":[{"value":"Motivation","url":"#motivation","depth":2},{"value":"Tech Stack","url":"#tech-stack","depth":2},{"value":"The Ugliness","url":"#the-ugliness","depth":2},{"value":"DRY: Do Repeat Yourself","url":"#dry-do-repeat-yourself","depth":3},{"value":"JDWW: Just Do What Works","url":"#jdww-just-do-what-works","depth":3},{"value":"New Things Learned","url":"#new-things-learned","depth":2},{"value":"Conclusion","url":"#conclusion-1","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Making events-api","datePublished":"2024-04-04T06:00:00.000Z","dateModified":"2024-04-04T00:00:00.000Z","description":"The quick and dirty, and the ugliness. Just do what works, and do repeat yourself, because pre-mature optimization considered harmful.","image":"/static/images/events-api-docs-wendy-screenshot.png","url":"https://teddysc.me/blog/events-api"}},{"title":"List of Linux Distributions I've Used","date":"2024-04-04T06:00:00.000Z","tags":["tech","list","linux","distro"],"lastmod":"2024-04-04T00:00:00.000Z","draft":false,"summary":"and MW and DE's! BTW, I use ?","images":["/static/images/btw-i-use-arch.png"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.555,"time":153300,"words":511},"slug":"list/distros","path":"blog/list/distros","filePath":"blog/list/distros.mdx","toc":[{"value":"Archlinux","url":"#archlinux","depth":2},{"value":"Manjaro","url":"#manjaro","depth":2},{"value":"Ubuntu, Debian, and lots of other Debian-based distros","url":"#ubuntu-debian-and-lots-of-other-debian-based-distros","depth":2},{"value":"Fedora, CentOS, Rocky Linux, Amazon Linux, RHEL","url":"#fedora-centos-rocky-linux-amazon-linux-rhel","depth":2},{"value":"Gentoo, LFS, Void","url":"#gentoo-lfs-void","depth":2},{"value":"tails, Qubes, Whonix","url":"#tails-qubes-whonix","depth":2},{"value":"Raspbian, Archlinux ARM","url":"#raspbian-archlinux-arm","depth":2},{"value":"Kali, Black Arch, Parrot","url":"#kali-black-arch-parrot","depth":2},{"value":"Non-GNU/Linux","url":"#non-gnulinux","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"List of Linux Distributions I've Used","datePublished":"2024-04-04T06:00:00.000Z","dateModified":"2024-04-04T00:00:00.000Z","description":"and MW and DE's! BTW, I use ?","image":"/static/images/btw-i-use-arch.png","url":"https://teddysc.me/blog/list/distros"}},{"title":"List of Proxy Software I've Used","date":"2024-04-04T06:00:00.000Z","tags":["tech","proxy","list","tools"],"lastmod":"2024-04-04T00:00:00.000Z","draft":false,"summary":"shadowsocks and friends","images":["/static/images/"],"type":"Blog","readingTime":{"text":"0 min read","minutes":0,"time":0,"words":0},"slug":"list/proxy","path":"blog/list/proxy","filePath":"blog/list/proxy.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"List of Proxy Software I've Used","datePublished":"2024-04-04T06:00:00.000Z","dateModified":"2024-04-04T00:00:00.000Z","description":"shadowsocks and friends","image":"/static/images/","url":"https://teddysc.me/blog/list/proxy"}},{"title":"pandoc: Why It's Awesome, and How I Use It","date":"2024-04-03T06:00:00.000Z","tags":["tech","tools"],"lastmod":"2024-04-03T00:00:00.000Z","draft":false,"summary":"It has everything you can ask for","images":["/static/images/pandoc-homepage-screenshot.png"],"type":"Blog","readingTime":{"text":"2 min read","minutes":1.935,"time":116100,"words":387},"slug":"pandoc","path":"blog/pandoc","filePath":"blog/pandoc.mdx","toc":[{"value":"I love pandoc","url":"#i-love-pandoc","depth":2},{"value":"How I Use it","url":"#how-i-use-it","depth":2},{"value":"Ad-Hoc Format Conversion","url":"#ad-hoc-format-conversion","depth":3},{"value":"As a Static Site Generator","url":"#as-a-static-site-generator","depth":3},{"value":"For HW Assignments","url":"#for-hw-assignments","depth":3},{"value":"Academic Writing","url":"#academic-writing","depth":3},{"value":"Non-standard Uses","url":"#non-standard-uses","depth":3},{"value":"Shell Aliases I Have in my .*shrc","url":"#shell-aliases-i-have-in-my-shrc","depth":2},{"value":"See Also","url":"#see-also-10","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"pandoc: Why It's Awesome, and How I Use It","datePublished":"2024-04-03T06:00:00.000Z","dateModified":"2024-04-03T00:00:00.000Z","description":"It has everything you can ask for","image":"/static/images/pandoc-homepage-screenshot.png","url":"https://teddysc.me/blog/pandoc"}},{"title":"Blog Posts Data of This Site","date":"2024-02-29T06:00:00.000Z","tags":["meta","data","tech","featured"],"lastmod":"2024-02-29T00:00:00.000Z","draft":false,"summary":"Web apps for you to explore!","images":["/static/images/blog-posts-datasette-screenshot.png"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.545,"time":212700,"words":709},"slug":"meta/blog-posts-data","path":"blog/meta/blog-posts-data","filePath":"blog/meta/blog-posts-data.mdx","toc":[{"value":"Why I made these?","url":"#why-i-made-these","depth":2},{"value":"Explore them here!","url":"#explore-them-here","depth":2},{"value":"Datasette instances","url":"#datasette-instances","depth":3},{"value":"On the web","url":"#on-the-web","depth":4},{"value":"Using dclient","url":"#using-dclient","depth":4},{"value":"JSON API","url":"#json-api","depth":3},{"value":"Random Blog Post API","url":"#random-blog-post-api","depth":3},{"value":"Note","url":"#note","depth":2},{"value":"Techniqal Details","url":"#techniqal-details","depth":2},{"value":"Getting real add & mod times","url":"#getting-real-add--mod-times","depth":3},{"value":"Getting metadata in the frontmatter","url":"#getting-metadata-in-the-frontmatter","depth":3},{"value":"See also","url":"#see-also-17","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Blog Posts Data of This Site","datePublished":"2024-02-29T06:00:00.000Z","dateModified":"2024-02-29T00:00:00.000Z","description":"Web apps for you to explore!","image":"/static/images/blog-posts-datasette-screenshot.png","url":"https://teddysc.me/blog/meta/blog-posts-data","author":[{"@type":"Person","name":"Teddy Xinyuan Chen"}]}},{"title":"Gallery Data","date":"2024-02-29T06:00:00.000Z","tags":["meta","data","tech","gallery"],"lastmod":"2024-02-29T00:00:00.000Z","draft":false,"summary":"Web apps for you to explore!","images":["/static/images/gallery-datasette-screenshot.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.315,"time":18900,"words":63},"slug":"meta/gallery-data","path":"blog/meta/gallery-data","filePath":"blog/meta/gallery-data.mdx","toc":[{"value":"Datasette Instance","url":"#datasette-instance","depth":2},{"value":"JSON API","url":"#json-api-1","depth":2},{"value":"Random Images API","url":"#random-images-api","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Gallery Data","datePublished":"2024-02-29T06:00:00.000Z","dateModified":"2024-02-29T00:00:00.000Z","description":"Web apps for you to explore!","image":"/static/images/gallery-datasette-screenshot.png","url":"https://teddysc.me/blog/meta/gallery-data"}},{"title":"Microfeed Channel Data","date":"2024-02-29T06:00:00.000Z","tags":["meta","data","tech","microfeed"],"lastmod":"2024-02-29T00:00:00.000Z","draft":false,"summary":"Web apps for you to explore!","images":["/static/images/microfeed-random-api-curl-screenshot.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.24,"time":14400,"words":48},"slug":"meta/microfeed-data","path":"blog/meta/microfeed-data","filePath":"blog/meta/microfeed-data.mdx","toc":[{"value":"Datasette Instance","url":"#datasette-instance-1","depth":2},{"value":"JSON API","url":"#json-api-2","depth":2},{"value":"Random Channel Post API","url":"#random-channel-post-api","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Microfeed Channel Data","datePublished":"2024-02-29T06:00:00.000Z","dateModified":"2024-02-29T00:00:00.000Z","description":"Web apps for you to explore!","image":"/static/images/microfeed-random-api-curl-screenshot.png","url":"https://teddysc.me/blog/meta/microfeed-data"}},{"title":"Data Collection and Manipulation on the Command Line","date":"2024-02-27T06:00:00.000Z","tags":["command-line","tech","sql","data","sqlite","slurm","hpc","featured"],"lastmod":"2024-02-27T00:00:00.000Z","draft":false,"summary":"AKA \"How to grab the best GPU instance in a slurm-managed HPC cluster faster than anyone else\"","images":["/static/images/ncsu-arc-table-plus-query-screenshot.jpg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.065,"time":243900,"words":813},"slug":"data-manipulation-on-the-command-line","path":"blog/data-manipulation-on-the-command-line","filePath":"blog/data-manipulation-on-the-command-line.mdx","toc":[{"value":"Why","url":"#why","depth":2},{"value":"Demo","url":"#demo","depth":2},{"value":"The data","url":"#the-data","depth":2},{"value":"sinfo output","url":"#sinfo-output","depth":3},{"value":"The scripts","url":"#the-scripts","depth":2},{"value":"Directory structure","url":"#directory-structure","depth":3},{"value":"Collecting sinfo output into a CSV file","url":"#collecting-sinfo-output-into-a-csv-file","depth":3},{"value":"Creating nvidia-gpus.csv using LLM","url":"#creating-nvidia-gpuscsv-using-llm","depth":3},{"value":"Ingesting sinfo and NVIDIA GPU data into a Sqlite database","url":"#ingesting-sinfo-and-nvidia-gpu-data-into-a-sqlite-database","depth":3},{"value":"SQL on JOINed tables to get the node name with highest VRAM","url":"#sql-on-joined-tables-to-get-the-node-name-with-highest-vram","depth":3},{"value":"Result","url":"#result","depth":2},{"value":"Things I learned","url":"#things-i-learned","depth":2},{"value":"See also","url":"#see-also-4","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Data Collection and Manipulation on the Command Line","datePublished":"2024-02-27T06:00:00.000Z","dateModified":"2024-02-27T00:00:00.000Z","description":"AKA \"How to grab the best GPU instance in a slurm-managed HPC cluster faster than anyone else\"","image":"/static/images/ncsu-arc-table-plus-query-screenshot.jpg","url":"https://teddysc.me/blog/data-manipulation-on-the-command-line","author":[{"@type":"Person","name":"Teddy Xinyuan Chen"}]}},{"title":"Automated Cisco Anyconnect Connect + Duo HOTP Bypass","date":"2024-02-27T06:00:00.000Z","tags":["automation","tech"],"lastmod":"2024-02-27T00:00:00.000Z","draft":false,"summary":"Duo I'm never going to use you again. :)","images":["/static/images/cisco-anyconnect-ncsu-vpn-login-interface.png"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.625,"time":277500,"words":925},"slug":"ncsu-vpn-connect","path":"blog/ncsu-vpn-connect","filePath":"blog/ncsu-vpn-connect.mdx","toc":[{"value":"Why?","url":"#why-2","depth":2},{"value":"How?","url":"#how-1","depth":2},{"value":"Tools used","url":"#tools-used","depth":2},{"value":"Things I learned","url":"#things-i-learned-1","depth":2},{"value":"Some of the code","url":"#some-of-the-code","depth":2},{"value":"Connection log","url":"#connection-log","depth":3},{"value":"btw I also made this","url":"#btw-i-also-made-this","depth":3},{"value":"References","url":"#references","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Automated Cisco Anyconnect Connect + Duo HOTP Bypass","datePublished":"2024-02-27T06:00:00.000Z","dateModified":"2024-02-27T00:00:00.000Z","description":"Duo I'm never going to use you again. :)","image":"/static/images/cisco-anyconnect-ncsu-vpn-login-interface.png","url":"https://teddysc.me/blog/ncsu-vpn-connect"}},{"title":"Cloudflare Tunnel Hacks","date":"2024-02-04T06:00:00.000Z","tags":["cloudflare","tech"],"lastmod":"2024-02-04T00:00:00.000Z","draft":false,"summary":"Cloudflare Tunnel is a wonderful service. Wanna know some hacks that can make your life even easier? Read more!","images":["/static/images/cloudflare-tunnel.png"],"type":"Blog","readingTime":{"text":"2 min read","minutes":1.155,"time":69300,"words":231},"slug":"cf-tunnel-tips","path":"blog/cf-tunnel-tips","filePath":"blog/cf-tunnel-tips.mdx","toc":[{"value":"Installing and running remotely managed tunnel without root access","url":"#installing-and-running-remotely-managed-tunnel-without-root-access","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Cloudflare Tunnel Hacks","datePublished":"2024-02-04T06:00:00.000Z","dateModified":"2024-02-04T00:00:00.000Z","description":"Cloudflare Tunnel is a wonderful service. Wanna know some hacks that can make your life even easier? Read more!","image":"/static/images/cloudflare-tunnel.png","url":"https://teddysc.me/blog/cf-tunnel-tips"}},{"title":"Prompting Tips and Tricks","date":"2024-02-04T06:00:00.000Z","tags":["prompt-engineering","tech","llm"],"lastmod":"2024-02-04T00:00:00.000Z","draft":false,"summary":"Alt-thinking injection, model motivation, and 1st person instructions - Some of my personal tips to help you get the more out of the LLMs, besides Chain of Thought and RAG","images":["/static/images/tipping-gpt4.png"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.41,"time":144600,"words":482},"slug":"prompting-tips","path":"blog/prompting-tips","filePath":"blog/prompting-tips.mdx","toc":[{"value":"Injecting Alternative Thinking","url":"#injecting-alternative-thinking","depth":2},{"value":"Motivate Your Model","url":"#motivate-your-model","depth":2},{"value":"First-person Instructions","url":"#first-person-instructions","depth":2},{"value":"Other Prompt Engineering Resources","url":"#other-prompt-engineering-resources","depth":2},{"value":"Twitter","url":"#twitter","depth":3},{"value":"Guides","url":"#guides","depth":3},{"value":"Latest Development and Discoveries","url":"#latest-development-and-discoveries","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Prompting Tips and Tricks","datePublished":"2024-02-04T06:00:00.000Z","dateModified":"2024-02-04T00:00:00.000Z","description":"Alt-thinking injection, model motivation, and 1st person instructions - Some of my personal tips to help you get the more out of the LLMs, besides Chain of Thought and RAG","image":"/static/images/tipping-gpt4.png","url":"https://teddysc.me/blog/prompting-tips","author":[{"@type":"Person","name":"Teddy Xinyuan Chen"}]}},{"title":"Introducing My Personal Bookmark Site","date":"2024-02-01T06:00:00.000Z","tags":["announcement","tech","projects"],"lastmod":"2024-02-01T00:00:00.000Z","draft":false,"summary":"Introducing my new personal bookmark site with a single HTML file. If you live in Raleigh, you might find some of the links there useful. Check it out here: https://sm.teddysc.me","images":["/static/images/sm-teddysc-me-screenshot.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.445,"time":26700,"words":89},"slug":"introducing/sm-bookmark-site","path":"blog/introducing/sm-bookmark-site","filePath":"blog/introducing/sm-bookmark-site.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introducing My Personal Bookmark Site","datePublished":"2024-02-01T06:00:00.000Z","dateModified":"2024-02-01T00:00:00.000Z","description":"Introducing my new personal bookmark site with a single HTML file. If you live in Raleigh, you might find some of the links there useful. Check it out here: https://sm.teddysc.me","image":"/static/images/sm-teddysc-me-screenshot.png","url":"https://teddysc.me/blog/introducing/sm-bookmark-site"}},{"title":"Introducing Random Pages","date":"2024-01-17T06:00:00.000Z","tags":["announcement","cloudflare","tech"],"lastmod":"2024-01-17T00:00:00.000Z","draft":false,"summary":"Random posts and photos for fun!","images":["/static/images/random-photos-from-gallery.png"],"type":"Blog","readingTime":{"text":"2 min read","minutes":1.22,"time":73200,"words":244},"slug":"introducing/random","path":"blog/introducing/random","filePath":"blog/introducing/random.mdx","toc":[{"value":"How they're made","url":"#how-theyre-made","depth":2},{"value":"Tips","url":"#tips-1","depth":2},{"value":"Use in ChatGPT","url":"#use-in-chatgpt","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Introducing Random Pages","datePublished":"2024-01-17T06:00:00.000Z","dateModified":"2024-01-17T00:00:00.000Z","description":"Random posts and photos for fun!","image":"/static/images/random-photos-from-gallery.png","url":"https://teddysc.me/blog/introducing/random"}},{"title":"Automated Monitoring of NC DMV Reservation Availability","date":"2024-01-05T06:00:00.000Z","tags":["tech","automation"],"lastmod":"2024-01-05T00:00:00.000Z","draft":false,"summary":"Dealing with DMV is often a frustrating experience. But it doesn't have to be!","images":["/static/images/ncdmv-json.png"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.355,"time":141300,"words":471},"slug":"ncdmv-reservation","path":"blog/ncdmv-reservation","filePath":"blog/ncdmv-reservation.mdx","toc":[{"value":"Quick Start","url":"#quick-start","depth":2},{"value":"Installation","url":"#installation","depth":3},{"value":"Running","url":"#running","depth":3},{"value":"How it works","url":"#how-it-works","depth":2},{"value":"Continuous Monitoring","url":"#continuous-monitoring","depth":2},{"value":"On your local machine","url":"#on-your-local-machine","depth":3},{"value":"GitHub Actions","url":"#github-actions","depth":3},{"value":"Thoughts","url":"#thoughts","depth":2},{"value":"Links","url":"#links-1","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Automated Monitoring of NC DMV Reservation Availability","datePublished":"2024-01-05T06:00:00.000Z","dateModified":"2024-01-05T00:00:00.000Z","description":"Dealing with DMV is often a frustrating experience. But it doesn't have to be!","image":"/static/images/ncdmv-json.png","url":"https://teddysc.me/blog/ncdmv-reservation"}},{"title":"How I Listen to Music","date":"2024-01-01T06:00:00.000Z","tags":["music","tech"],"lastmod":"2024-01-01T00:00:00.000Z","draft":false,"summary":"with mpv, Navidrome, youtube-dl and friends.","images":["/static/images/"],"type":"Blog","readingTime":{"text":"0 min read","minutes":0,"time":0,"words":0},"slug":"how-i-listen-to-music","path":"blog/how-i-listen-to-music","filePath":"blog/how-i-listen-to-music.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"How I Listen to Music","datePublished":"2024-01-01T06:00:00.000Z","dateModified":"2024-01-01T00:00:00.000Z","description":"with mpv, Navidrome, youtube-dl and friends.","image":"/static/images/","url":"https://teddysc.me/blog/how-i-listen-to-music"}},{"title":"Super Fast Tools I Love","date":"2023-12-12T06:00:00.000Z","tags":["tech","tooling"],"lastmod":"2023-12-12T00:00:00.000Z","draft":false,"summary":"Besides fd, rg, dua, and exa that greatly improved my command line experience, here are some other blazing fast tools I love.","images":["/static/images/the-flash-logo.png"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.31,"time":18600,"words":62},"slug":"super-fast-tools","path":"blog/super-fast-tools","filePath":"blog/super-fast-tools.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Super Fast Tools I Love","datePublished":"2023-12-12T06:00:00.000Z","dateModified":"2023-12-12T00:00:00.000Z","description":"Besides fd, rg, dua, and exa that greatly improved my command line experience, here are some other blazing fast tools I love.","image":"/static/images/the-flash-logo.png","url":"https://teddysc.me/blog/super-fast-tools"}},{"title":"Making Rick and Morty Episodes Page","date":"2023-11-30T06:00:00.000Z","tags":["rick-n-morty","data","tech","command-line"],"lastmod":"2023-11-30T00:00:00.000Z","draft":false,"summary":"Scraping Wikipedia, R&M Wiki, and multiple free streaming sites!","images":["/static/images/the-old-man-and-the-seat-rnm.webp"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.35,"time":21000,"words":70},"slug":"rnm-episodes","path":"blog/rnm-episodes","filePath":"blog/rnm-episodes.mdx","toc":[{"value":"Summary","url":"#summary","depth":2},{"value":"See also","url":"#see-also-11","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Making Rick and Morty Episodes Page","datePublished":"2023-11-30T06:00:00.000Z","dateModified":"2023-11-30T00:00:00.000Z","description":"Scraping Wikipedia, R&M Wiki, and multiple free streaming sites!","image":"/static/images/the-old-man-and-the-seat-rnm.webp","url":"https://teddysc.me/blog/rnm-episodes"}},{"title":"Automating Captive Portal Login at SAP","date":"2022-05-30T06:00:00.000Z","tags":["automation","tech"],"lastmod":"2022-05-30T00:00:00.000Z","draft":false,"summary":"Goodbye SAP-Guest captive portal","images":["/static/images/sap-gui.png"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.845,"time":230700,"words":769},"slug":"automate-captive-portal-login","path":"blog/automate-captive-portal-login","filePath":"blog/automate-captive-portal-login.mdx","toc":[{"value":"Background","url":"#background","depth":2},{"value":"How","url":"#how","depth":2},{"value":"Selenium","url":"#selenium","depth":3},{"value":"Utility functions (Wi-Fi operations, Surge.app control, conneciton checking)","url":"#utility-functions-wi-fi-operations-surgeapp-control-conneciton-checking","depth":3},{"value":"main()","url":"#main","depth":3},{"value":"What I learned","url":"#what-i-learned","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Automating Captive Portal Login at SAP","datePublished":"2022-05-30T06:00:00.000Z","dateModified":"2022-05-30T00:00:00.000Z","description":"Goodbye SAP-Guest captive portal","image":"/static/images/sap-gui.png","url":"https://teddysc.me/blog/automate-captive-portal-login","author":[{"@type":"Person","name":"Teddy Xinyuan Chen"}]}},{"title":"My Love for the Command Line","date":"2019-02-02T06:00:00.000Z","tags":["tech","story"],"lastmod":"2019-02-02T00:00:00.000Z","draft":false,"summary":"This was the entrypoint that made me a geek and got me into coding","images":["/static/images/"],"type":"Blog","readingTime":{"text":"0 min read","minutes":0,"time":0,"words":0},"slug":"cli","path":"blog/cli","filePath":"blog/cli.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"My Love for the Command Line","datePublished":"2019-02-02T06:00:00.000Z","dateModified":"2019-02-02T00:00:00.000Z","description":"This was the entrypoint that made me a geek and got me into coding","image":"/static/images/","url":"https://teddysc.me/blog/cli"}},{"title":"Exploring In-Browser Data Analysis Solutions","date":"2018-01-01T06:00:00.000Z","tags":["tech","data","data-analysis","web","review","llm","list"],"lastmod":"2018-01-01T00:00:00.000Z","draft":false,"summary":"Subjective review of ChatGPT Code Interpreter, Observable, Apache Superset, Concord CODAP & Pretzel","images":["/static/images/codap-plot.png"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.955,"time":237300,"words":791},"slug":"in-browser-data-analysis","path":"blog/in-browser-data-analysis","filePath":"blog/in-browser-data-analysis.mdx","toc":[{"value":"Why?","url":"#why-1","depth":2},{"value":"ChatGPT Code Interpreter","url":"#chatgpt-code-interpreter","depth":2},{"value":"Observable","url":"#observable","depth":2},{"value":"Datasette","url":"#datasette","depth":2},{"value":"Apache Superset","url":"#apache-superset","depth":2},{"value":"Concord CODAP","url":"#concord-codap","depth":2},{"value":"Pretzel","url":"#pretzel","depth":2},{"value":"Conclusion","url":"#conclusion-2","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Exploring In-Browser Data Analysis Solutions","datePublished":"2018-01-01T06:00:00.000Z","dateModified":"2018-01-01T00:00:00.000Z","description":"Subjective review of ChatGPT Code Interpreter, Observable, Apache Superset, Concord CODAP & Pretzel","image":"/static/images/codap-plot.png","url":"https://teddysc.me/blog/in-browser-data-analysis"}},{"title":"How I Learn Tech Stuff","date":"1989-06-04T06:00:00.000Z","tags":["tech","learning"],"lastmod":"1989-06-04T00:00:00.000Z","draft":false,"summary":"It's all about finding the easiest ways & get your hands dirty","images":["/static/images/xkcd-tar.png"],"type":"Blog","readingTime":{"text":"2 min read","minutes":1.655,"time":99300,"words":331},"slug":"how-i-learn-tech-stuff","path":"blog/how-i-learn-tech-stuff","filePath":"blog/how-i-learn-tech-stuff.mdx","toc":[{"value":"RTFD","url":"#rtfd","depth":2},{"value":"Document browsers","url":"#document-browsers","depth":3},{"value":"Get your hands dirty","url":"#get-your-hands-dirty","depth":2},{"value":"But I don't have the hardware! And cloud computer is expensive!","url":"#but-i-dont-have-the-hardware-and-cloud-computer-is-expensive","depth":3},{"value":"Find an excuse to use the new tech","url":"#find-an-excuse-to-use-the-new-tech","depth":3},{"value":"Books","url":"#books","depth":2},{"value":"AI","url":"#ai","depth":2},{"value":"What about tar? I can never remember the arguments.","url":"#what-about-tar-i-can-never-remember-the-arguments","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"How I Learn Tech Stuff","datePublished":"1989-06-04T06:00:00.000Z","dateModified":"1989-06-04T00:00:00.000Z","description":"It's all about finding the easiest ways & get your hands dirty","image":"/static/images/xkcd-tar.png","url":"https://teddysc.me/blog/how-i-learn-tech-stuff","author":[{"@type":"Person","name":"Teddy Xinyuan Chen"}]}}],"title":"Tech"}]],null],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","tags","children","$4","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","tags","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},[["$","html",null,{"lang":"en-us","className":"__variable_36bd41 scroll-smooth","suppressHydrationWarning":true,"children":[["$","link",null,{"rel":"apple-touch-icon","sizes":"76x76","href":"/static/favicons/apple-touch-icon.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"32x32","href":"/static/favicons/favicon-32x32.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"16x16","href":"/static/favicons/favicon-16x16.png"}],["$","link",null,{"rel":"manifest","href":"/static/favicons/site.webmanifest"}],["$","link",null,{"rel":"mask-icon","href":"/static/favicons/safari-pinned-tab.svg","color":"#5bbad5"}],["$","meta",null,{"name":"msapplication-TileColor","content":"#000000"}],["$","meta",null,{"name":"theme-color","media":"(prefers-color-scheme: light)","content":"#fff"}],["$","meta",null,{"name":"theme-color","media":"(prefers-color-scheme: dark)","content":"#000"}],["$","link",null,{"rel":"alternate","type":"application/rss+xml","href":"/feed.xml"}],["$","body",null,{"className":"bg-white pl-[calc(100vw-100%)] text-black antialiased dark:bg-gray-950 dark:text-white","children":["$","$L6",null,{"children":[["$undefined","$undefined","$undefined","$undefined","$undefined","$undefined"],["$","section",null,{"className":"mx-auto max-w-3xl px-4 sm:px-6 xl:max-w-5xl xl:px-0","children":["$","div",null,{"className":"flex h-screen flex-col justify-between font-sans","children":[["$","$L7",null,{"kbarConfig":{"searchDocumentsPath":"search.json"},"children":[["$","header",null,{"className":"flex items-center justify-between py-10","children":[["$","div",null,{"children":["$","$L8",null,{"href":"/","aria-label":"Teddy's Site","children":["$","div",null,{"className":"flex items-center justify-between","children":[["$","div",null,{"className":"mr-3","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","width":50,"height":50,"fill":"currentColor","viewBox":"0 0 119.878 75","children":["$","path",null,{"fillRule":"evenodd","stroke":"currentColor","strokeLinecap":"round","strokeWidth":"1mm","d":"$9","fontSize":12,"style":{"strokeWidth":".1mm"},"vectorEffect":"non-scaling-stroke"}]}]}],["$","div",null,{"className":"hidden h-6 text-2xl font-semibold sm:block","children":"Teddy's Site"}]]}]}]}],["$","div",null,{"className":"flex items-center space-x-4 leading-5 sm:space-x-6","children":[[["$","$L8",null,{"href":"/blog","className":"hidden font-medium text-gray-900 sm:block dark:text-gray-100","children":"Blog"}],["$","$L8",null,{"href":"/tags","className":"hidden font-medium text-gray-900 sm:block dark:text-gray-100","children":"Tags"}],["$","$L8",null,{"href":"/projects","className":"hidden font-medium text-gray-900 sm:block dark:text-gray-100","children":"Projects"}],["$","$L8",null,{"href":"/apps","className":"hidden font-medium text-gray-900 sm:block dark:text-gray-100","children":"Apps"}],["$","$L8",null,{"href":"/random","className":"hidden font-medium text-gray-900 sm:block dark:text-gray-100","children":"Random"}],["$","$L8",null,{"href":"/about","className":"hidden font-medium text-gray-900 sm:block dark:text-gray-100","children":"About"}]],["$","$La",null,{"aria-label":"Search","children":["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","fill":"none","viewBox":"0 0 24 24","strokeWidth":1.5,"stroke":"currentColor","className":"h-6 w-6 text-gray-900 dark:text-gray-100","children":["$","path",null,{"strokeLinecap":"round","strokeLinejoin":"round","d":"M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z"}]}]}],["$","$Lb",null,{}],["$","$Lc",null,{}]]}]]}],["$","main",null,{"className":"mb-auto","children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":["$","div",null,{"className":"flex flex-col items-start justify-start md:mt-24 md:flex-row md:items-center md:justify-center md:space-x-6","children":[["$","div",null,{"className":"space-x-2 pb-8 pt-6 md:space-y-5","children":["$","h1",null,{"className":"text-6xl font-extrabold leading-9 tracking-tight text-gray-900 dark:text-gray-100 md:border-r-2 md:px-6 md:text-8xl md:leading-14","children":"404"}]}],["$","div",null,{"className":"max-w-md","children":[["$","p",null,{"className":"mb-4 text-xl font-bold leading-normal md:text-2xl","children":"Sorry we couldn't find this page."}],["$","p",null,{"className":"mb-8","children":"But dont worry, you can find plenty of other things on my homepage."}],["$","br",null,{}],["$","p",null,{"className":"mb-8","children":["Looking for a post that was"," ",["$","$L8",null,{"href":"/blog/list/take-downs","className":"text-blue-500 transition duration-200 hover:text-blue-800","children":"taken down"}],"? ",["$","$L8",null,{"href":"/contact-form","className":"text-blue-500 transition duration-200 hover:text-blue-800","children":"DM"}]," ","me and I can send you a copy."]}],["$","$L8",null,{"href":"/","className":"focus:shadow-outline-blue inline rounded-lg border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium leading-5 text-white shadow transition-colors duration-150 hover:bg-blue-700 focus:outline-none dark:hover:bg-blue-500","children":"Back to homepage"}]]}]]}],"notFoundStyles":[],"styles":null}]}]]}],["$","footer",null,{"children":["$","div",null,{"className":"mt-16 flex flex-col items-center","children":[["$","div",null,{"className":"mb-3 flex space-x-4","children":[null,["$","a",null,{"className":"text-sm text-gray-500 transition hover:text-gray-600","target":"_blank","rel":"noopener noreferrer","href":"https://github.com/tddschn","children":[["$","span",null,{"className":"sr-only","children":"github"}],["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","className":"fill-current text-gray-700 hover:text-primary-500 dark:text-gray-200 dark:hover:text-primary-400 h-6 w-6","children":[["$","title",null,{"children":"Github"}],["$","path",null,{"d":"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"}]]}]]}],null,["$","a",null,{"className":"text-sm text-gray-500 transition hover:text-gray-600","target":"_blank","rel":"noopener noreferrer","href":"https://www.youtube.com/@teddysc/playlists","children":[["$","span",null,{"className":"sr-only","children":"youtube"}],["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","className":"fill-current text-gray-700 hover:text-primary-500 dark:text-gray-200 dark:hover:text-primary-400 h-6 w-6","children":[["$","title",null,{"children":"Youtube"}],["$","path",null,{"d":"M23.499 6.203a3.008 3.008 0 00-2.089-2.089c-1.87-.501-9.4-.501-9.4-.501s-7.509-.01-9.399.501a3.008 3.008 0 00-2.088 2.09A31.258 31.26 0 000 12.01a31.258 31.26 0 00.523 5.785 3.008 3.008 0 002.088 2.089c1.869.502 9.4.502 9.4.502s7.508 0 9.399-.502a3.008 3.008 0 002.089-2.09 31.258 31.26 0 00.5-5.784 31.258 31.26 0 00-.5-5.808zm-13.891 9.4V8.407l6.266 3.604z"}]]}]]}],["$","a",null,{"className":"text-sm text-gray-500 transition hover:text-gray-600","target":"_blank","rel":"noopener noreferrer","href":"https://www.linkedin.com/in/tddschn","children":[["$","span",null,{"className":"sr-only","children":"linkedin"}],["$","svg",null,{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24","className":"fill-current text-gray-700 hover:text-primary-500 dark:text-gray-200 dark:hover:text-primary-400 h-6 w-6","children":[["$","title",null,{"children":"Linkedin"}],["$","path",null,{"d":"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"}]]}]]}],null,null,null,null]}],["$","div",null,{"className":"mb-2 flex space-x-2 text-sm text-gray-500 dark:text-gray-400","children":[["$","div",null,{"children":"Teddy Xinyuan Chen"}],["$","div",null,{"children":" • "}],["$","div",null,{"children":"© 2024"}],["$","div",null,{"children":" • "}],["$","$L8",null,{"href":"/","children":"Teddy's Homepage"}]]}]]}]}]]}]}]]}]}]]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/f0cdd4df7b8837e7.css","precedence":"next","crossOrigin":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/9797c0ab1ed88acd.css","precedence":"next","crossOrigin":"$undefined"}]],"$Ld"]]]] d:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"tech | Teddy's Homepage"}],["$","meta","3",{"name":"description","content":"Teddy's Homepage tech tagged content"}],["$","meta","4",{"name":"robots","content":"index, follow"}],["$","meta","5",{"name":"googlebot","content":"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"}],["$","link","6",{"rel":"canonical","href":"https://teddysc.me/tags/tech"}],["$","link","7",{"rel":"alternate","type":"application/rss+xml","href":"https://teddysc.me/tags/tech/feed.xml"}],["$","meta","8",{"property":"og:title","content":"tech | Teddy's Homepage"}],["$","meta","9",{"property":"og:description","content":"Teddy's Homepage tech tagged content"}],["$","meta","10",{"property":"og:url","content":"https://teddysc.me/tags/tech"}],["$","meta","11",{"property":"og:site_name","content":"Teddy's Homepage"}],["$","meta","12",{"property":"og:locale","content":"en_US"}],["$","meta","13",{"property":"og:image","content":"https://teddysc.me/static/images/teddys-site-twitter-card.png"}],["$","meta","14",{"property":"og:type","content":"website"}],["$","meta","15",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","16",{"name":"twitter:title","content":"tech | Teddy's Homepage"}],["$","meta","17",{"name":"twitter:description","content":"Teddy's Homepage tech tagged content"}],["$","meta","18",{"name":"twitter:image","content":"https://teddysc.me/static/images/teddys-site-twitter-card.png"}],["$","meta","19",{"name":"next-size-adjust"}]] 1:null