{"data":{"allDemosYaml":{"nodes":[{"company":"November 2015 - January 2016","description":["This is an animated, interactive lesson about the shape of the universe complete with synchronized audio narration. It's built with Reveal.js, D3 and jQuery (which seriously pulled a ton of weight as an audio engine?!). This project involved a combination of project planning, writing, editing, recording, audio editing, performance testing, cartography and a whole lot of trigonometry."],"id":"ea069c26-2156-5050-b35e-de45a36a4159","title":"Lesson on Expansion","url":"https://chrisuehlinger.com/expansion-lesson","clips":[{"height":9,"id":"expansion-lesson-screen","src":"images/portfolio/expansion-lesson@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAAEbElEQVQ4y0XUf0zUdRzH8c9xx933vt/jfnJ3cMcd970v3AHRlKkBgpoSiRpaWRqmSZpuun5oJlqm2NRMJJVQlz9CXZmrsDKDoSvzRxqiY/7MVkubA9E2UadkKfBsR7Xe/7z/e7xfe//xEmFVRQ2H0cIqqqriDGuM0UK8leRhh2bjq1wDdQ/rWP+IgbWFJubnOMn1J5PmV0nTNEKqyn9GbIs+TFUJqmECmsamkJedDjOfFUncWWKk9x0brPVAbRCq3XQtNNI218wbBQlken1EY2j4f1TEkqXGroTDHAk42O6SkBIsPJ1vZWhIz0c1r8Otw9xt+wa62jmwaTY1xYLL8+1sLjWT7XWTlfZv0rCKiKVL0jS+Czpp8JgRigVZURB6hTEPSvyySIOdI7m3ZjDnHi+ms7Ifx1b6GTfATtkAB6FEiajbQ0Z6Wh8qXGGNylAy15Ml7IqMpCgoskypQ6Ftlkz7DCNbs/TU+IxsFYJ3B+ZC9ynu7w4QDbswWBIZoteRH/CTqmmIrLDKjYCVF20SQlZQFIWARWGeSWGyQWGpMLJBGFlksbPKYSczwcL0KTNo3zOc87V2djc00lhdzQSjgUgkHTEn5IMUE3mJFnSSGZtFwShbyA4ojM2ReXPqQ8ycMIxZ8XqOS2Y2x+lYJQQGt4OK8Q7aLp0nNjUFgxnkS0bU+50QkZgWNCMkCzarBUVvYcMkOz3vuen+oAi6m1m3/DWeVFPYX/U2p3JzKHFICL2VlpYTfeDR1aspls2IFm8CZEuUh8yYTDJ+m5Xn400cLOjH3b0VXBqr0HqilYaT5zg4SIZPq7ixbBpfBASj4+PprFzcB15samK8WUKc9VlBM7A82cJis8yCBAtPWK3s8vuZNmoYIb+L8qXbWfjULOYpguciXjpW2vm62EqTMNBVkNcHdjQ3M1mREadTrOCLo9WqUC9JbLLI1NmsNPuTKcgfSkIwgznrPmbLy0tpFYJxQnC6TqJhgpVPhJkfsqLUNzVxbONGyiQT4rDfDikGbhkEVUk+ikw2Fpniubq1liNb5vJSvpuHM9z8VOTgwtxy9i+dDEenMOnZQtw6E/1dTuIdDua4XJR53YiaVC9oMjw6hKubVzHlmShCCNZsqYMft3FnnmDFQCszo0n89n4JHWsLObR8HGUZEaxmGdnpJOh286okUZIaQIzJSKfXE0dPYyPc/hmaEvn8BT37Rri50volv24fxYXhBlZkJnNtx3SubFvG98JIV9TEiokuhNCRI5mocDrITtMQyZEoe70WmFjCX7Hvnl/Mnx8K9oz3QOfvtN/sQfUF2fvtAW4DZ5rq6Rhmp/UVM5GgoGhkKcuyH2C0JxE1PR3hV1UKMyLcdMVBbTW9wB+X93P6+C56OvbBvYssWFjBkrw8Wh4rZbbVyIZ+OkaEFCqr13PtyCHKPW4y07R/2iZNVfGENaZGw9xz6eiuqepDY9N7/STcbOZ+5zU6B/YHg4BUPd1jc7lx9gz3galDCsnyeginp/f14d8N17UK7NPc5QAAAABJRU5ErkJggg==","aspectRatio":1.2096774193548387,"src":"/static/2deda9476bfdbba57fefcc48760d7909/0a74d/expansion-lesson%402x.png","srcSet":"/static/2deda9476bfdbba57fefcc48760d7909/ba958/expansion-lesson%402x.png 75w,\n/static/2deda9476bfdbba57fefcc48760d7909/89761/expansion-lesson%402x.png 150w,\n/static/2deda9476bfdbba57fefcc48760d7909/0a74d/expansion-lesson%402x.png 300w,\n/static/2deda9476bfdbba57fefcc48760d7909/5498c/expansion-lesson%402x.png 450w,\n/static/2deda9476bfdbba57fefcc48760d7909/fa42c/expansion-lesson%402x.png 600w,\n/static/2deda9476bfdbba57fefcc48760d7909/542af/expansion-lesson%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"October 2015","description":["Crocus is Node.js based tool that visualizes how much space each part of your file tree takes up. Hover over an area of the graph to see a breadcrumb of its file path, along with how much space it is taking up. If something seems to be taking up a large amount of space, click on it to zoom in and get a more detailed look."],"id":"032ce46c-c44c-5e57-a6fc-1aa4e7f93bef","title":"Crocus","url":"https://chrisuehlinger.com/crocus","clips":[{"height":9,"id":"crocus-image","src":"images/portfolio/crocus@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAAC80lEQVQ4y32U+2/aVhTH/X/ul/22H/b7JlWTNk2dUqlbt2rNJkXK2rVbFZJUjECXEMA8zCMxEIfxSJoAZiShtFBqHB7hYX8mXp5pux3p+tr3fP2993vOPUfgf8w0zencHupEznJoWm/hmfqsMcdOhvBfRBOQMSesX7e4vbvBTjyPrMjU1PwCiGltMFsS3iOaeyazYRrT915Hx+/3sL3rZtO5TSQWolqr0O51Z6STf9494YIIG+nC+v0+R7EgmdAOYdGN2+vmNzFN7uIl4/F4Sb6wILFLndjAHFHXSpQTf1K5KpAt18nkXnCaCCFLXrY2HxOWs0vxsyTbF4wbHUY36H2drxLf8vzX22jpp0iXN8Sq1yTLTc5kieC+h7B8Mt/esA4kLGUJphLUbIFgtsozWeFGWqHkXeNZpkG42CD69zXH55cchEQ2kudkK0WqzbaVQGEpW+aQnpomlS3j8Hrwx/fYOLxgNXDOalDFka4hqW9JXegosRCru1s8iB9ydqVbmRbscrVOn2BC5gevwp1dBx45wFqswU/BEqtiifVYFf9pnWipRfQvhYOjNN3h8g2ZxdAwqDXfIiknREQ/jtQrPvEE+Fza5Knc4n6gyIOgynamwTc/P+GLdReOWJbHyRrxwgsw+7MoWoSmyWg0YmyMyRerPPGluOWT+cj1HdGCwo5yhfP4ikcuH59+/zt39rI8Cof52pfCnTwCczAltCVlJrnc0IlIUUKJECsHIp54gID3D0IJkR+3fHy57uL+82PWpFM2nS7yZyd0hwbDsWGVo7CI32g0pql16HQ1YodpUqpKOBnks4ciHzu3uBcocnfviF/2ZXIXdS5fa+QrL2m1r22FYZPM4koPOmiv32AOB1y+Urm3E2A/5cejVHF6RR5GMqzsFWA8mMKHo/FSuQr2D3ulzMBQqWZg0KLW6iAf5ynWmhwUcpi91r+NwVa6gtUv3iW2N4r5s6F3eaO1rbX3cEvty7rc5gfJpwVmGNNYmx/ALOwfj2/ndImc1uUAAAAASUVORK5CYII=","aspectRatio":1.1538461538461537,"src":"/static/573884c5a7d11fbbcde75d4d4b286712/0a74d/crocus%402x.png","srcSet":"/static/573884c5a7d11fbbcde75d4d4b286712/ba958/crocus%402x.png 75w,\n/static/573884c5a7d11fbbcde75d4d4b286712/89761/crocus%402x.png 150w,\n/static/573884c5a7d11fbbcde75d4d4b286712/0a74d/crocus%402x.png 300w,\n/static/573884c5a7d11fbbcde75d4d4b286712/5498c/crocus%402x.png 450w,\n/static/573884c5a7d11fbbcde75d4d4b286712/fa42c/crocus%402x.png 600w,\n/static/573884c5a7d11fbbcde75d4d4b286712/542af/crocus%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"September 2015","description":["<p>This is another AI experiment, this time using a game called <a href=\"http://www.amazon.com/Aristotles-Number-Classic-Wooden-Puzzle/dp/B0085JRADS\">Aristotle's puzzle</a>. The game is built using React, Redux and React Hot Loader. The AI uses a fairly brute-force approach, the challenge came in making the validation as predictive as possible in order to reduce the number of brute force tries the computer would attempt.</p>\n"],"id":"653e5acc-375f-5635-a3be-b48b0404e474","title":"Aristotle's Puzzle AI","url":"https://chrisuehlinger.com/aristotle-puzzle","clips":[{"height":9,"id":"aristotle-puzzle","src":"images/portfolio/aristotle-puzzle@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAACnElEQVQ4y21U207bQBDN/39D+9JISEi9PFRURaJBRDSIUiCoRSk3pSZx7LW99tqx17eEU52FdQnC0nhm7ZkzZ2Z2t4en5+Hhwej1eg2tNUpdoqkbtE1r7Kqs0NYt6qqGLjSWyyXquu5ibXzPGlZnywxZmmEhFrib3cHxHHjSg7NwcOPcIFABZCZRNzWyLEPTNBugvZcZmHnhL/B25w0+HXzEmXOGwXiArS9b2Dnawa26w+j8ACoMUGiNqqo2CPWeg5VliTzLMfEmcJWLKq+gYgW91GjKBpnKjNS6QiECqDgx7VmvVh1oV3Ke56ZXQgkcO8eYe3MIKYz4kY+ZN4MXelgIF/feDPPZFKE7Q6IUlFJYPYF2gCpVwAro7/YxvB5iIiY4nZ5i++s2Lr1LXMwvsPdzD/3PfQwvh/jl/8b7D+/wbXcXkZT/AfnigqU4oYOr8MqUGAQB0jQ105UyRhRJaF2aEsMwNMyqokAmBMIoQlEUj4AEk1JClxpHtyM487/IVGrAUqXg+z6SOEa+XEL4vgHjdBnjC4HYdbEuHxNxoD3uu4Xr4WT8A0fH+4ice2gpMdrfN86J6+LP+Tm+Dwa4Ho+RBwFODg8xGgzgT6fQQYAyisz+JQnDMI5j1FWFIi8QCGEYUVSSGFZsOodGW0aRWZOpEMIwJRhLNgxtDwlKIXWW1PWwqkwQARjE/1EUGV9uM/raf5tTVspoc+zKsgvgd2amkCWFiagJZg9D27abgHRgFq5pcxgMIEOCk4VNRpuseexYHRNs7EMLaoPpTPAkSUzptocslUJGBLE2e9idlJdnmSCWJW8TBpEZE9jyaRPk5Y3z6m1jB8GHzpyk7Q+T2V7Tn/art81zQGoyYP+oGUAmXLN/TEb7tauLDP8Bxn8P+CQ0p+EAAAAASUVORK5CYII=","aspectRatio":1.1538461538461537,"src":"/static/768e002c8ea30c464e7626e9aa4b9017/0a74d/aristotle-puzzle%402x.png","srcSet":"/static/768e002c8ea30c464e7626e9aa4b9017/ba958/aristotle-puzzle%402x.png 75w,\n/static/768e002c8ea30c464e7626e9aa4b9017/89761/aristotle-puzzle%402x.png 150w,\n/static/768e002c8ea30c464e7626e9aa4b9017/0a74d/aristotle-puzzle%402x.png 300w,\n/static/768e002c8ea30c464e7626e9aa4b9017/5498c/aristotle-puzzle%402x.png 450w,\n/static/768e002c8ea30c464e7626e9aa4b9017/fa42c/aristotle-puzzle%402x.png 600w,\n/static/768e002c8ea30c464e7626e9aa4b9017/542af/aristotle-puzzle%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"August 2015","description":["After my visit to the LHC in August 2015, I was inspired to make this fairly rough sketch that I may use later in a lesson about Quantum Mechanics. The two colored blobs can be dragged together, causing them to combine into a single purple blob. However, the two blobs are discrete, and can be separated by multitouch gestures even though they seem homogenous when combined."],"id":"c55824e1-79bb-50d2-a6e8-4ad99339758c","title":"Quantum Blob","url":"https://chrisuehlinger.com/quantum-blob","clips":[{"height":9,"id":"quantum-blob","src":"images/portfolio/quantum-blob@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAABYlAAAWJQFJUiTwAAACiElEQVQ4y42UzUtUURiHf3NnxlLUUmlZC4ky2weZFSohYm2iVbho1UYqSWoRtIpWBRLWojbRx3+gkrWMMgoEK01MkzQR8qN0VGbGe+954t47d7yaaQde3sP5eM77O+95jwibMRhjAu+6GNvGOE4w5k8Hc9s15WEh14NEFvhwx8lDzTZQETk53MiPScz9Tkx31xr4P6HKwzyJXudFD6a8DFfC9uzcWczY6F/QLSXnZX4ZwpSWBLBEgmwsxorE0u5dOAMD/hpjbx2pwmT4U02NGAknkSAtsSyxkEwyIzF7oiW/yVl1cRzjWzRpngnv0r2Bie9QuNOPLpuD/ZaYURET8cP0q5nBy92byvTAIVT5DHvgk8dxJDLJJCmJOVlMaR+DaqRX7XSokztH39PzeJHXr7J8eOOQTZt10PV3OP4N91AVGe/e4glmtJdx1fNOrTzXA25YXZxWHwf0lTL9pFgpao9kGRtdgyr6ZHzpc7PYpxpIqZBpNfEpfp1uPeKuermgfmqtUfZb0+yJzVNhLSFlqK5yWFzwKWtJIZfBXI/0zYeMqI0uPaVTfbTGRqjTFJWaoUK/KFOKUq1QkMwiuVxrNzlgtOw2VMriy0l6jn3koiap0TyVsRTlWqJMy1RohR1Ko5iNZKiuAns1BG6A+v2waoDhtzb1BzMUKENRLEOh0hQrQ1yrWJaLBA110QijtRtm3Ye62HZwyLMnBsnGitu+9ywedykowI/wXkcky5tCTfQ5GAY/GywZf3MyEXgvMs/X1hjSaTaPcD04sBB6tY0cBEqK4Uyz4fYtw/xcAHNdtgbmsLmXZXz5Vy4ZWs4bhoeCQ8I1HuyfkjfKD/7FELD2ITgu2DZ5mLf0D11lt04P4S9oAAAAAElFTkSuQmCC","aspectRatio":1.1029411764705883,"src":"/static/fe75b97ec0451726c3b300aaa51e8792/0a74d/quantum-blob%402x.png","srcSet":"/static/fe75b97ec0451726c3b300aaa51e8792/ba958/quantum-blob%402x.png 75w,\n/static/fe75b97ec0451726c3b300aaa51e8792/89761/quantum-blob%402x.png 150w,\n/static/fe75b97ec0451726c3b300aaa51e8792/0a74d/quantum-blob%402x.png 300w,\n/static/fe75b97ec0451726c3b300aaa51e8792/5498c/quantum-blob%402x.png 450w,\n/static/fe75b97ec0451726c3b300aaa51e8792/fa42c/quantum-blob%402x.png 600w,\n/static/fe75b97ec0451726c3b300aaa51e8792/542af/quantum-blob%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"May 2015","description":["This lesson prototype presents the student with a simple arithmetic problem. They can solve the problem by dragging one digit on top of another and performing operations on the \"combined\" digits. When they are done, a teacher can \"play back\" their work and see all the steps that were taken to get to the answer playing in realtime."],"id":"c7e340c7-d34f-5f33-b4f8-a516c3e978d1","title":"Touch Math","url":"https://chrisuehlinger.com/TouchMath/problem","clips":[{"height":9,"id":"touch-math","src":"images/portfolio/touch-math@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC40lEQVQ4y51UXU8aQRTd/+Yv6C/xxQdefKlNP0UTK1GQFGNaaIBCoSqNGkRAIA2Wglo+IixlpQSqVBvYAruzp9nZD5ZFfegkk5m9c+/MufecvQz+Y0iSdO8381CAvJr32nf2x28Eck30h+LEOQPZwTC1AEKI7qTtRULo2TfuBmtHNbw5riNa6lCbSCQV4R2XmVPSkatrMNeELVbF68MqwvmWAkBHOM6TBmiXcRyHra0tuN1u1Ot1VCoVtNttnJ0WsJHiwHX7uO4N8Wq/oqNTLiQiUN4GhAFQDGKkwlhcXITNZsP8/DzS6TR2d3dxcVHFx8AH/OwDmykW7i8car965hoSIGUFeh1IyZf0sN/rwWq1IpPJwOl0IhQKYXV1FQsLC7BYLA+yTlOWci7g6AkkzyNgcIWr7g1ePH+GZrMJr9cLn89Hnf1+P52UBFEhiphUwOhE8NeQ8m9B1JdarRbC4TDy+fydSMwEakcKQjlteWIcUC6X6VoqlegajUZp2vF4fEqjxsEYD2osC5fLhX6/j/X1dfA8D4/HQ2tpt9shiiKWl5cp40atTqWsGf1+H2ZmZrC3t4eVlRUaPDs7i6WlJSQSCeoTiUSQTCbVOoqqBolBNqbaNBoNfS/rT0ba6XQoQpZl4XA4wF1yuo9IxIla6qTIr50WCjjJZnF8nFT2JycIBoMoFouUoLm5OfotD37Ew3/hg/N8A5lWWkeqXygII8TiCYS3d/BpewcH0Rg+RyJU0HIJYrEYncmUkm6YDSHRVMpgP11Dd9A1sSyPQQsQ2oDUBfq1B1uYt/IetVvFJ1gNoH5bN6QsESoY8TIL8XtIWc8DkKsjjoa0HPIUBAGCKNBA9pbFxpkDB40DbBZdOjHMRGP404QUfwpp3wIp9lhtFmSqF2rBHb6DXOcr/gr8JMvjFqamXngHsIfqL0HGv4GBTe1Ss50xWVUtDAEiTNoMgUYxE2lS3MxUkPFlzX5Pw71r/AO4FSHK5u1TkAAAAABJRU5ErkJggg==","aspectRatio":0.974025974025974,"src":"/static/187fff64dfefdc7be750f4cf5733d44a/0a74d/touch-math%402x.png","srcSet":"/static/187fff64dfefdc7be750f4cf5733d44a/ba958/touch-math%402x.png 75w,\n/static/187fff64dfefdc7be750f4cf5733d44a/89761/touch-math%402x.png 150w,\n/static/187fff64dfefdc7be750f4cf5733d44a/0a74d/touch-math%402x.png 300w,\n/static/187fff64dfefdc7be750f4cf5733d44a/5498c/touch-math%402x.png 450w,\n/static/187fff64dfefdc7be750f4cf5733d44a/0f4bc/touch-math%402x.png 564w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"May 2015","description":["This lesson prototype takes the abstract concept bonding energy and makes it into a more visceral phenomenon. Atoms and molecules can be manipulated with multitouch gestures, with bonds breaking if they are stretched too far. The amount of stretching required varies with the energy of the bond."],"id":"0348055b-942d-56d6-840e-746c3ec80fb7","title":"Reactions","url":"https://chrisuehlinger.com/Reactions","clips":[{"height":9,"id":"reactions","src":"images/portfolio/reactions@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAACRElEQVQ4y3WTTU8TURSGZ+nWP+EPMe5cuHUhG93VmLjQxBUmLCQxJlU2fhvUCEqiAgnoxCgaIFEqjQQE2tKW1nZa2o6l35127jzmzkyHTqknubl3zvd5zzuKBWB2aGZStA80sITUIITAsmyrfVvOw/kGTz8oCsLkx6dvnL0xycjoJMlw2DZs3D1HSp1wAoVpHynZ1Sm2H15AOAZfUSdhucj50ecoV+ZRLs8yPjFtO2bDi2ibK25CGeh0fpgIEZ29TVf0uvQnVWhUGQtOcSIww8nANDNT8yA6tkMpV0CYgt60MrEUw4RivkDHtI6NrwjLopXTCN55wMtHL6BexXSNVb1EOa8d4SjVlknXFKRXX6OrNyluL3n4Oh268nU5xOflsIeNlHouxur1UzTyMWdRZte+KwcpKnMBau8uUlm8RrWse+PbCX/HNJ6pcZ5+jBPaSnub7BpNCltf6LYbXoCURq1CUR2jOXuJ4lKQttHpwxDYSeR4srDL44UI6zsZlzZ+SnjAuzgWMwnS6yqtZn1gy+4oW3savyJZOobRh5nlUKafj+673oaGga+I3eEwctq6XkJnE30FnOC9uXGy398e8bR/KfIhR5RnaAHJQ7PrBjkJo6+uoi1PHk/oG8et3iwkWbt1mnIm8t/uB5QeH5VhwBs1nf0PQXKJXQoHOrm9TVLqPTrNqudbKxWIqm8o7cd9+CpDOxiQcnKD0PgZWod5T/fn5wprIwqR9/d9//XQDm1MJWYuBMN8an914kvz6OmkPW6vw3/c2WtdD0OnvwAAAABJRU5ErkJggg==","aspectRatio":1.3636363636363635,"src":"/static/3e029e4a95aca2a69a0e2ca0a43eaad0/0a74d/reactions%402x.png","srcSet":"/static/3e029e4a95aca2a69a0e2ca0a43eaad0/ba958/reactions%402x.png 75w,\n/static/3e029e4a95aca2a69a0e2ca0a43eaad0/89761/reactions%402x.png 150w,\n/static/3e029e4a95aca2a69a0e2ca0a43eaad0/0a74d/reactions%402x.png 300w,\n/static/3e029e4a95aca2a69a0e2ca0a43eaad0/5498c/reactions%402x.png 450w,\n/static/3e029e4a95aca2a69a0e2ca0a43eaad0/fa42c/reactions%402x.png 600w,\n/static/3e029e4a95aca2a69a0e2ca0a43eaad0/542af/reactions%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"April 2015","description":["<p>Another next generation lesson prototype. This one is based on the awesome work by <a href=\"http://thoughtcafe.ca/\">ThoughtCafe</a> in the Crash Course World History lesson, the <a href=\"https://youtu.be/a6XtBLDmPA0?t=139\">Monsoon Marketplace</a>. Clicking or tapping on any of the cities will animate you into an article about the city and its role in the economic trade of the time (content from Wikipedia). Clicking the links to other cities will take you back to the map, where you'll be \"transported\" to the article about that city.</p>\n"],"id":"65fe544b-5c7e-5287-a57d-3f38aaf85b56","title":"Monsoon Marketplace","url":"https://chrisuehlinger.com/MonsoonMarketplace","clips":[{"height":9,"id":"monsoon-marketplace","src":"images/portfolio/monsoon-marketplace@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACIElEQVQoz3WRz08TQRzF+494M/FkjEYRJDHRGBM5GS9GTQzevIkHj3pUD1686EW9eMFoFIpCmyCGgCmEBItgAgoRdrvdlpaWpdv9NTP7MbMUaEmc5GUOM/OZ930vtVILmbV95ko+i9WAnO0zbXksVkK2ooAfjRLLjQrTTZuca1MMXZAKISVKqURSSlCKP36dVNWTlJuCUlPs70VXUPMkGWeDa8VxBp1VvChkLXQIpAAhCaKQOI6RxKg4Rq9JzybFf5aSgrrwyQdV5r0KTSlYcMtYvoMjQ4ghVjEoiKVqPYKU/qVD6IkUYRSBfhDDeNNK7q8F24nj68Wv1H2XUAqe15awwgZKKl5Ufx441KC4ZV0IsSslk4O8WybjrHOnPEWXkebYxgcG6795VV3iyN933C5NYnjb3LOm2kaOD4AN38MLgyTsSGcWw8jOOieMT/SaI5wxhrlqZum3JzllDHGxMMqDyix9VrbNoQ64BXy2tcC0W0xAusWi53CzMM5pM805c4QeDTXTiVutK1aWl7Vf3C/nDgN3wx0o53hdX27lAA/tGY6uv0/caVi3kU52Lf3BSWOIfusbjypznSOLFvBpNc/A5kzSmtYbZ4Xz5hcuFEY52wZrh+sYLhXGOkvZGznTMLhhT+y2HAmebM7zdmeVy4UxuozhDmCPkabbPIB2jLxXiisj+gpZMq4JEm4VJ7i7+X0/v8PqNT9zfOMjj7fy/AMHHghevZbXUgAAAABJRU5ErkJggg==","aspectRatio":1.7857142857142858,"src":"/static/934b7dec5843988a2e8f11a5600c3d7a/0a74d/monsoon-marketplace%402x.png","srcSet":"/static/934b7dec5843988a2e8f11a5600c3d7a/ba958/monsoon-marketplace%402x.png 75w,\n/static/934b7dec5843988a2e8f11a5600c3d7a/89761/monsoon-marketplace%402x.png 150w,\n/static/934b7dec5843988a2e8f11a5600c3d7a/0a74d/monsoon-marketplace%402x.png 300w,\n/static/934b7dec5843988a2e8f11a5600c3d7a/5498c/monsoon-marketplace%402x.png 450w,\n/static/934b7dec5843988a2e8f11a5600c3d7a/fa42c/monsoon-marketplace%402x.png 600w,\n/static/934b7dec5843988a2e8f11a5600c3d7a/542af/monsoon-marketplace%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"April 2015","description":["<p>A prototype for a new kind of geography lesson using D3. As you scroll to each country's section of the lesson, the globe swivels to show that country. This demo is built using content from the Wikipedia pages about the BRICS countries, Mike Bostock's <a href=\"http://bl.ocks.org/mbostock/4183330\">World Tour</a> demo and a JQuery plugin called <a href=\"http://imakewebthings.com/waypoints/\">Waypoints</a></p>\n"],"id":"3835397b-0820-513c-ad7a-609c2af53916","title":"BRICS","url":"https://chrisuehlinger.com/BRICS","clips":[{"height":9,"id":"brics","src":"images/portfolio/brics@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAACWklEQVQoz2WTS07jQBCGs2LJEq7ARbgIe2Z23AJxDVYjYHjESfx+xQnu2OQBIYEAcQJshhmEhBhsfyN3AgOipV+lVqu+/rurqhQ06sQnEXd3U5JkzGQymWss97e3Ca7rUC6XaTQanJ+fk+f5u4r1FotViqIuzUab4+MeQrSJIiFjIxghRJ+6P0JRTE5OIpnw9PRE+vo6A2XZF2jJ0O/Z25mw82PC/t41FaVJRfEpH9VR1Sq61qHVuuDsrMf19Q1pmvL74YGXLGNOIk9TGSXQsc84OmyiqQ61motp2miqi67XqVTKqKrLYDAizzOen5857/dRTJPmwT7TToc5lnzustRsBpimjuc5WJaB57lyb9sm1WoVx2kyHo+ls8KJIwTd7994WVzkz9IS2doadDry+dKhEALXtQgCD8/zcRwP2/bx/QhNU7Esk8FgIBNe0hRPUfi1sgKl0rvyQtvbb8AIQxeYhsBxXBk1tYNj96goAl07JUnueX39KxPukgRjd5fuxgb5wsIMuLxMfns7A4ZhkRTieV3iWBBFLQrX7XabIAiI45jpdDp78vzjL66u+On73K+uzoCbm/IPSdOibWIsSxDUT2k2TgnDiDBsEUURvu9L6HA4/AScFEDTpLu+Dltbs4LMz+cOT1DVHrXqJZbVwTJbOE5RJItaTZHNnH3ouaJIB4eH3Agh6/uxyUtheIymRpjGBYbex7a6mMYQTe3h2G1UNeTy8oYsSz8BWxLGl4kp+d4UTR1hW30MfYihD6Q0tbhgTKU8IY6vSNOX9/F6fHwkSZL/0/JhUv4BzxtFiMj5AC0AAAAASUVORK5CYII=","aspectRatio":1.6304347826086956,"src":"/static/218e6098ef205fc0361d362b62761837/0a74d/brics%402x.png","srcSet":"/static/218e6098ef205fc0361d362b62761837/ba958/brics%402x.png 75w,\n/static/218e6098ef205fc0361d362b62761837/89761/brics%402x.png 150w,\n/static/218e6098ef205fc0361d362b62761837/0a74d/brics%402x.png 300w,\n/static/218e6098ef205fc0361d362b62761837/5498c/brics%402x.png 450w,\n/static/218e6098ef205fc0361d362b62761837/fa42c/brics%402x.png 600w,\n/static/218e6098ef205fc0361d362b62761837/542af/brics%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"September 2014","description":["<p>This was a fork of <a href=\"https://stevekrouse.github.io/hs.js/\">λ Lessons</a>, a project by Jan Paul Posma and Steve Krouse. I \"redecorated\" the function editor so that each function application was a bubble, which could be \"popped\" to reveal the result. This was a lot of fun to make, and managed to land on the front page of Hacker News as well as /r/haskell</p>\n"],"id":"fbef5003-b343-5e7b-88fa-6dc6e68f7704","title":"λ Bubble Pop!","url":"https://chrisuehlinger.com/LambdaBubblePop","clips":[{"height":9,"id":"lambda-bubble-pop","src":"images/portfolio/lambda-bubble-pop@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAACh0lEQVQ4y12Ta08bVxCG9///h1b91DZNq6YoGNyq14SAiY1JMQ5gG5xgJ76svfc99/NEu94gkpEezbzvGc2XmROYNKWMY3SaIJMEGcdUHkrhlcRXWcodjUbKmi/8ulYEOsvqISJKycIt2TpEpBl1eL/jcXjPV84Xb0GVz+4KWv2If28UraHjv4mjOzW8GBv+GTlORwnH1zG9d4rjO8flOKM/yXn5dsvppKB7J+hNBXHpdgP/vtrww8mM/WFK61rRvpG0r0oOrgWHI82zsw/88nrGwduUw5HiZX9J+3zNTyfv2HuzZv8yZn8QscwsAUKCNlhp0aVGFQqZS1QmGkpMqWtUvtOiUHWfFQZdKHQuMYWkmhXIuCRdx5SbjHITIzcJNi3BeXAOrAfrGvxX+pFvPN54AmccRhqctiS5Y7U1JIVHWCg0KAfagbIgra+18aDtzq9wzZaqFHze2TrTfPNiw7cdwfevM747ivixJ3h6uuVJN6E9UHQGjj8Hkr2zkMPLnIOLlL1+xNVCN0tutlxFKR3Htzkn7zUnU8HRbU7nveLVJOPVXU73XvFmqulOS47GEZ1pQWeaczROuY/Mw+UEUgiUkGgpcVqjm9oqhamy1g+1VgKjdn2V95nqrZpREYRpyHw9ZxUvCKOPLLczkiIEHGAB0+THmEfsPONMTeDrn+BYZoLePOP/D5KLmWIwU1zcS26WltuVZrxQjBaSycowWWlu14bJ2nIx09ws9MOHCmx1GsAoLHgymNEaJjzrLvi1t+Dn0zntYULrfMF+/yPPz+a0ByG/X275Yxjx16jgt/NNrZWxeO8IhBFUaCsxTqGdRHtVY7xCWYlyO7RrdI1AWlH3Gy+RzZxPinAmpyQVrWsAAAAASUVORK5CYII=","aspectRatio":1.4423076923076923,"src":"/static/742eeddb76c8db1b6929e04660a55394/0a74d/lambda-bubble-pop%402x.png","srcSet":"/static/742eeddb76c8db1b6929e04660a55394/ba958/lambda-bubble-pop%402x.png 75w,\n/static/742eeddb76c8db1b6929e04660a55394/89761/lambda-bubble-pop%402x.png 150w,\n/static/742eeddb76c8db1b6929e04660a55394/0a74d/lambda-bubble-pop%402x.png 300w,\n/static/742eeddb76c8db1b6929e04660a55394/5498c/lambda-bubble-pop%402x.png 450w,\n/static/742eeddb76c8db1b6929e04660a55394/fa42c/lambda-bubble-pop%402x.png 600w,\n/static/742eeddb76c8db1b6929e04660a55394/542af/lambda-bubble-pop%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"May 2014","description":["<p>I forked Gabe Cirulli's hit game <a href=\"http://gabrielecirulli.github.io/2048/\">2048</a> to try to see if I could write an AI that would play the game. The resulting project taught me a lot about minimax algorithms and the limits of JavaScript performance (especially if you try to run the AI on mobile).</p>\n"],"id":"448e5716-c4d3-5083-b3d1-0b8886419b06","title":"2048 AI","url":"https://chrisuehlinger.com/2048","clips":[{"height":9,"id":"2048-ai","src":"images/portfolio/2048-ai@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAABYlAAAWJQFJUiTwAAAFEElEQVQ4y3WV21NbVRSH+XN89MEHZ/wv9MUH77Ve6m1qcew4VkdqrTO2trRWgXa09gKtQCAQSEJOuB1C0oQkhxQSwklCmjskIRcC5AL9dG9AW0cf1uy19jn59u+3zjonbc16ifpOkVIhyW4tT6WU4fHeFrvbBbbKWVqNMuHFebyzYwRcCv45C9q8FadiwKeOozksOG0GuSd+3yaAjd1NnLNWFPMgM8oonnk7drOBwb5fWYss8fCBgmoewKGMMG3qY3r0Lg6rAd/cBD7VyoMpE+r4fbarOdqEglp1nXHjPQmzWwwoZgPmkXsSqId81LfzbG7EpYtyMUm5kKBWyUoXO7W8XLer61JY25Hlow1xw+P9Gs1GWe6L63vNCnutKq1GhVazwv7eFpVikkREIxULyDWbCMr7JVBA1jMRNrIx1jNR0omwzNOJFXLpg/1MMkx0VSMS8sk+u+wGur89ye3Or7l1+StuXvyC6maKNqFKQIV1oUAoa8q8TLN+mDcPlDUPr+/v1aiW0mTiy+SSKzLWU+FDhY2ytJuILJKMLP7/qmskdT/JyMGaigbIPgqRiQcl+G/gfqvKRibCojpEKjhJKjTF6sI42uwQiWW73IsG7GgjP5HtbyfT/5kMv6mLaEAhuWwnHphAU41yzA6A6QgxzcZGdI6wd5ycrqL7rBTjTpZdI+QTHlYt19g1fcau6zrbxk8J226wmfIScpvI6bPofoVq6RC4no4QDyhENCuq5Q7r+hxRzUYyNIVt6AbFpJdV81XqY6dpLA6wM9LOqq2HzYQHxXCdVNBO5AgoxiGfifLQYSQVmpah+ywEHEaSwSlpOfZwksXxbtLGM6RGviE1fAbN+hvRsINHuoO1sErAZT6wLICFXIwZUy/OiUHmJwaYM9+Xtcjnrf3MTRhYuH+ZTNcHpLo+JHn9ExZ/O0fq/Iekv32XdMfbLN3tZGu7eAjMRpmf6MevjuGbNeGeHJYgn6hnRnGrFoK959nvfoPmnVM0bp4gdu0UjY5jtK60s3/2GGs3zlHZLT0BFIBZ09NAUR8Cl++eo3XrExrTN6lbO4l2fszupXYatnu0bnQQ7TlL9W9gLoY6fk+C3PYhnBMDzI714VIGZe5QhvH3/kDpyqsUfnmHQs97hHq+pHj+I0oXT1I+9z7h3y9Q3Sk+0cPRu1KVCAHzTBpZ9avomkrQM8mCfYiI20bMY0N/oLBo72LNfoK4IuJdgtOXqFXz/7IseziGyzZI2DtDOaOTDPsoJldY8c5QykZIrPrZzD4i6u6ipL1Ceel9Kg9fI+Y6y1Yl/989dNoGJDCla9iMfRQSIVYWplhfW0Ix9pJbCxN1/Ux56QxbsZvUIteIOc+zVdn4B+iw/MHC9IgMAQ95JtmIB0mseNlYWyLoniT/SNQL5BM6q+4eNpaOkw+eIB88RsT9/RMKczGmR+7I+RMheihCPCDP5PDBQzL18kAx4BEPzW7EPXCV+OXXiV95i/ilV1nqv0Btu/BfPTwYG6HYOzMqFXumjPIg6UBMwrwV7fp3tF5+ltYrz7H/4jPEfmyn0qj8o/Coh95/zeERVB4geiwOcNrQujtofHecuvk2zZ9PE7t4kmqjevguZ6Oo431SyZFFVY7OsIQLq+JVFLlHMeBSzXi7Otg99gI7n79E/c3n0S+cpFKv0Ca+xOVCUv5N+h0WGb4581O1/8l6zoxPWLYNovd2ot/5Ef32RUL2QXb+Guw/AcrCVu4SeP2SAAAAAElFTkSuQmCC","aspectRatio":0.8426966292134831,"src":"/static/675d0fc5cc3e4236c16569a2deff960b/0a74d/2048-ai%402x.png","srcSet":"/static/675d0fc5cc3e4236c16569a2deff960b/ba958/2048-ai%402x.png 75w,\n/static/675d0fc5cc3e4236c16569a2deff960b/89761/2048-ai%402x.png 150w,\n/static/675d0fc5cc3e4236c16569a2deff960b/0a74d/2048-ai%402x.png 300w,\n/static/675d0fc5cc3e4236c16569a2deff960b/5498c/2048-ai%402x.png 450w,\n/static/675d0fc5cc3e4236c16569a2deff960b/fa42c/2048-ai%402x.png 600w,\n/static/675d0fc5cc3e4236c16569a2deff960b/542af/2048-ai%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]},{"company":"August 2013","description":["<p>During my first semester teaching programming in Thailand, I built a study guide to help my students learn C. This was my first experience building a dynamic website, and included animated demonstrations of running code, as well as inline code editors where students could try out what they'd learned. I wrote about my experiences building this site on <a href=\"/blog/2014/02/26/learnable-programming-in-thailand\">my blog</a>.</p>\n"],"id":"f3733f15-e077-5ff0-bb7a-0110a350bc1e","title":"St. Gabriel's C Study Guide","url":"http://sg-study-c.appspot.com/","clips":[{"height":9,"id":"sg-study-c","src":"images/portfolio/sg-study-c@2x.png","type":"image","width":16,"image":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAABYlAAAWJQFJUiTwAAADBklEQVQ4y7WV60uTURzHf142t9k0tzlvm7O5yWRGuSTQ6GIXSjRFS83IehP0QgP/gC6EChVdXuRf0Ive9crSNFGTIEFScDNvoax07eZtE8HbvnGO25p4LeiBD99zzvN7vuc5z3n4HlpbW8Nu1/r6OlhNqO4Eu09OpxMTExMYGRnB+Pg4BgcHYTabufb19WFlZWXLJD4fw7cFZkperxcOhwNut5vjcrl43263c11YWACrCbC0tMQf3DBmzn71r4bm5uYwNTUFp9MBh8MOu/0XbLZpWK1Wbmiz2TA9Pc2VMTMzg50+Ezd88/otii7cQkVJHcqK7uJqcR3KS+pw5XItCs9VoyC/CgVnrwe5lF+FC6cqcP5keZCLpyuRZypE/YMXoPr7zyGkNEgl2VDLj0IhyQSRwo/cj8zfl4W0GfGcMEoEkQjlxbdBTxuboIjOhFKaBbksF4nKE9AmHEOa3Ai1wgR1XCZUMhPUMj3SlFl8TCUz4KAwAwfCtZxYoZ4b37xWC3rS2ARppBYxkToYjKXIMpbClJsPfc5xJCRkQZV+BCptNnQpOcjNLsBh/RkkxRqhlBohJg0kbHURWr6SGxU1oMcNrxAnyoBcbECyMo+TKNdDLNFAFJ4KUYQGYoGGTygTGxAXlQERaYJmTDcZNjx8iXBK4oVCUiGK1MHiAKwvolREUSrX0PEtb8h3hhSIEeg2mexF6KTbGMYjVqDb9s32Y75vw/3yHwzTuWH1JkOh/p/MGDGR6XwfqitrQI/uPQNRHKLDDvFdFpKaq8DfFlAKIigZkbvA/gwiKarK7oC+j02gpbkDba1daH3XwWlr6UT7h268b/6IjvYe9HT34lPXl030hNLdi86Ozxgyj4JcbhcGBvoxNGTB2Ngohoe/4cdPK1wuJ/r7v8Lr9eBvLmIZaLFYeFT9CU/At76Rcaurq5zl5WUsLi4G8zEwHgoLY27I0npycpKHKyuen5/nDzIC8c6ClaU7y0RWt91xwEyJFbKC2dlZeDwebsYmYUHKNPQs2eusYWfKb+tT8Mugf+VGAAAAAElFTkSuQmCC","aspectRatio":0.9615384615384616,"src":"/static/cb075be66f12a0982e788995e7809e4b/0a74d/sg-study-c%402x.png","srcSet":"/static/cb075be66f12a0982e788995e7809e4b/ba958/sg-study-c%402x.png 75w,\n/static/cb075be66f12a0982e788995e7809e4b/89761/sg-study-c%402x.png 150w,\n/static/cb075be66f12a0982e788995e7809e4b/0a74d/sg-study-c%402x.png 300w,\n/static/cb075be66f12a0982e788995e7809e4b/5498c/sg-study-c%402x.png 450w,\n/static/cb075be66f12a0982e788995e7809e4b/fa42c/sg-study-c%402x.png 600w,\n/static/cb075be66f12a0982e788995e7809e4b/542af/sg-study-c%402x.png 700w","sizes":"(max-width: 300px) 100vw, 300px"}}}}]}]}}}