Help
RSS
API
Feed
Maltego
Contact
Domain > www.andyshora.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2014-06-17
192.31.186.19
(
ClassC
)
2024-08-30
52.9.166.110
(
ClassC
)
Port 443
HTTP/1.1 200 OKAccept-Ranges: bytesAge: 0Cache-Control: public,max-age0,must-revalidateCache-Status: Netlify Edge; fwdmissContent-Length: 93160Content-Type: text/html; charsetUTF-8Date: Fri, 30 Aug 2024 08:03:17 GMTEtag: cd60ecb106d8c2cd8516ab34ee1101b5-sslReferrer-Policy: same-originServer: NetlifyStrict-Transport-Security: max-age31536000X-Content-Type-Options: nosniffX-Frame-Options: DENYX-Nf-Request-Id: 01J6H4YRZXB37FQ0A3PHM8043KX-Xss-Protection: 1; modeblock !DOCTYPE html>html>head>meta charSetutf-8/>meta http-equivx-ua-compatible contentieedge/>meta nameviewport contentwidthdevice-width, initial-scale1, shrink-to-fitno/>meta namegenerator contentGatsby 5.12.12/>meta data-react-helmettrue propertyog:site_name contentandyshora.com/>meta data-react-helmettrue propertyog:type contentwebsite/>meta data-react-helmettrue propertyog:url contenthttps://www.andyshora.com//>meta data-react-helmettrue propertyog:image contenthttps://www.andyshora.com/img/og-2024.png/>meta data-react-helmettrue propertyog:title contentAndy Shora: AI, Engineering, Design. Innovation Leader./>meta data-react-helmettrue propertyog:description contentThis is my personal website where I publish experiments. I work as Head of TFG Labs at Twenty First Group - Driving Innovation in Sports Intelligence/>style>.gatsby-image-wrapper{position:relative;overflow:hidden}.gatsby-image-wrapper picture.object-fit-polyfill{position:static!important}.gatsby-image-wrapper img{bottom:0;height:100%;left:0;margin:0;max-width:none;padding:0;position:absolute;right:0;top:0;width:100%;object-fit:cover}.gatsby-image-wrapper data-main-image{opacity:0;transform:translateZ(0);transition:opacity .25s linear;will-change:opacity}.gatsby-image-wrapper-constrained{display:inline-block;vertical-align:top}/style>noscript>style>.gatsby-image-wrapper noscript data-main-image{opacity:1!important}.gatsby-image-wrapper data-placeholder-image{opacity:0!important}/style>/noscript>script typemodule>const eundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;e&&document.body.addEventListener(load,(function(e){const te.target;if(void 0t.dataset.mainImage)return;if(void 0t.dataset.gatsbyImageSsr)return;let anull,nt;for(;nulla&&n;)void 0!n.parentNode.dataset.gatsbyImageWrapper&&(an.parentNode),nn.parentNode;const oa.querySelector(data-placeholder-image),rnew Image;r.srct.currentSrc,r.decode().catch((()>{})).then((()>{t.style.opacity1,o&&(o.style.opacity0,o.style.transitionopacity 500ms linear)}))}),!0);/script>link relpreconnect hrefhttps://www.google-analytics.com/>link reldns-prefetch hrefhttps://www.google-analytics.com/>title data-react-helmettrue>Andy Shora: AI, Engineering, Design. Innovation Leader./title>link data-react-helmettrue relicon typeimage/png href/img/icon.png/>style data-styled data-styled-version6.1.1>.jbJblL{border-bottom:1px solid;color:rgb(250, 250, 250);background:rgb(250, 250, 250);height:260px;position:relative;}/*!sc*/.jbJblL a{text-decoration:none;}/*!sc*/data-styled.g1idHeaderstyles__HeaderWrapper-sc-1pnh5tv-0{content:jbJblL,}/*!sc*/.gUolLR{position:absolute;left:0;width:100%;height:100%;z-index:1;object-fit:cover;}/*!sc*/data-styled.g5idHeaderstyles__CellsVideo-sc-1pnh5tv-4{content:gUolLR,}/*!sc*/.eKiZnf{color:rgb(10, 10, 10);margin-bottom:0.25rem;font-size:3.6rem;white-space:nowrap;}/*!sc*/@media (min-width:1000px){.eKiZnf{font-size:4.6rem;}}/*!sc*/data-styled.g6idHeaderstyles__Logo-sc-1pnh5tv-5{content:eKiZnf,}/*!sc*/.glEXiQ{margin-top:0rem;margin-bottom:0.25rem;}/*!sc*/data-styled.g7idHeaderstyles__Subtitle-sc-1pnh5tv-6{content:glEXiQ,}/*!sc*/.cdiPgk{margin-top:0rem;margin-bottom:0.25rem;font-size:1.2rem;color:#3270eb;}/*!sc*/.cdiPgk >a{color:#3270eb;font-weight:bold;text-decoration:underline;}/*!sc*/data-styled.g8idHeaderstyles__Subtitle2-sc-1pnh5tv-7{content:cdiPgk,}/*!sc*/.kAXaMq{padding:1rem 2rem;height:300px;position:relative;z-index:2;color:rgb(10, 10, 10);}/*!sc*/.kAXaMq a{display:inline-block;}/*!sc*/@media (min-width:800px){.kAXaMq{height:300px;}}/*!sc*/@media (min-width:1000px){.kAXaMq{height:300px;}}/*!sc*/data-styled.g10idHeaderstyles__HeaderContent-sc-1pnh5tv-9{content:kAXaMq,}/*!sc*/.bJYORK{margin:4rem 2rem 2rem;height:1px;display:block;width:80px;background:#DACCD8;border:none;}/*!sc*/data-styled.g12idgenericstyles__HR-sc-bv0bnh-0{content:bJYORK,}/*!sc*/.jgPuUU{margin-left:auto;margin-right:auto;max-width:1000px;width:100%;padding:0 20px;}/*!sc*/data-styled.g14idgenericstyles__GutterWide-sc-bv0bnh-2{content:jgPuUU,}/*!sc*/.fEigZy{padding:2rem;}/*!sc*/.fEigZy a,.fEigZy a:hover,.fEigZy a:visited{color:#3b6465;}/*!sc*/data-styled.g15idgenericstyles__PageSection-sc-bv0bnh-3{content:fEigZy,}/*!sc*/.gEywOi{color:rgb(167, 144, 163);display:inline-block;margin:0;}/*!sc*/data-styled.g16idgenericstyles__Tags-sc-bv0bnh-4{content:gEywOi,}/*!sc*/.kolbhC{display:inline-block;margin:0 2rem 0 0;}/*!sc*/data-styled.g17idgenericstyles__ReadingTime-sc-bv0bnh-5{content:kolbhC,}/*!sc*/.dOnOOD >h3{display:inline-block;position:relative;margin-bottom:0rem;}/*!sc*/.dOnOOD >h3::after{content:NEW;width:32px;height:32px;display:none;align-items:center;justify-content:center;position:absolute;top:-16px;right:-36px;text-align:center;font-size:1rem;}/*!sc*/data-styled.g18idgenericstyles__PostWrapper-sc-bv0bnh-6{content:dOnOOD,}/*!sc*/.gatsby-resp-iframe-wrapper{background:black;margin:4rem 0 0!important;}/*!sc*/button,inputtypesubmit{border:1px solid black;font-size:1.5rem;padding:1rem;cursor:pointer;}/*!sc*/button:active,inputtypesubmit:active{background:#DACCD8;}/*!sc*/data-styled.g19idsc-global-cxBBTS1{content:sc-global-cxBBTS1,}/*!sc*/.plmHn{display:grid;grid-template-columns:100%;}/*!sc*/@media (min-width:600px){.plmHn{grid-template-columns:40% 60%;}}/*!sc*/data-styled.g21idBiostyles__BioWrapper-sc-1edkiqb-1{content:plmHn,}/*!sc*/.heEhuc{padding:1rem 2rem;}/*!sc*/@media (min-width:600px){.heEhuc{padding:0 2rem;}}/*!sc*/data-styled.g22idBiostyles__BioText-sc-1edkiqb-2{content:heEhuc,}/*!sc*/.fNjHNZ{margin-top:0rem;margin-bottom:0.25rem;}/*!sc*/.fNjHNZ >a{color:#3270eb;font-weight:bold;text-decoration:underline;}/*!sc*/data-styled.g23idBiostyles__Subtitle2-sc-1edkiqb-3{content:fNjHNZ,}/*!sc*/.dhccxm{background:white;color:black;border-top:1px solid lightGrey;padding:2rem 0;margin:4rem 0 0;color:rgb(10, 10, 10);background:rgb(243 245 246) url(/img/cellsvideo01_00032.png) center 68% no-repeat;background-size:auto 100%;}/*!sc*/@media (min-width:1000px){.dhccxm{background-size:100% auto;}}/*!sc*/.dhccxm a{color:black;}/*!sc*/.dhccxm >div{display:grid;grid-template-areas:a b c;}/*!sc*/@media (min-width:1000px){.dhccxm >div{grid-template-areas:a a b c;}}/*!sc*/.dhccxm >div >section{padding:1rem;}/*!sc*/data-styled.g24idFooterstyles__FooterWrapper-sc-n7ll61-0{content:dhccxm,}/*!sc*/.ckFjxt{grid-area:a;}/*!sc*/data-styled.g25idFooterstyles__BioSection-sc-n7ll61-1{content:ckFjxt,}/*!sc*/.fTmwMp{grid-area:c;}/*!sc*/data-styled.g26idFooterstyles__AboutSection-sc-n7ll61-2{content:fTmwMp,}/*!sc*/.eLqFSk{grid-area:b;}/*!sc*/data-styled.g27idFooterstyles__ContactSection-sc-n7ll61-3{content:eLqFSk,}/*!sc*/.gCTVNx{font-size:0.8rem;line-height:1rem;}/*!sc*/data-styled.g28idFooterstyles__LicenseText-sc-n7ll61-4{content:gCTVNx,}/*!sc*/.jcwJwj{width:100%;display:flex;flex-direction:column;justify-content:center;}/*!sc*/data-styled.g29idLayoutstyles__LayoutWrapper-sc-y5yt86-0{content:jcwJwj,}/*!sc*/*{box-sizing:border-box;-webkit-font-smoothing:antialiased;}/*!sc*/html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-size:62.5%;font-family:Arial,Helvetica Neue,Helvetica,sans-serif;}/*!sc*/body{margin:0;padding:0;min-width:375px;overflow-x:auto;line-height:2.2rem;font-size:1.5rem;color:rgb(12, 12, 12);font-family:Open Sans,sans-serif;font-weight:400;font-display:auto;}/*!sc*/h1{font-size:4.6rem;line-height:6rem;}/*!sc*/h2{font-size:3.2rem;line-height:4rem;}/*!sc*/h3{font-size:2.4rem;line-height:3.2rem;}/*!sc*/h4{font-size:1.8rem;line-height:2.9rem;}/*!sc*/h5{font-size:1.5rem;line-height:2.2rem;}/*!sc*/h1,h2,h3,h4,h5{font-family:Crimson Text,serif;font-weight:400;font-display:auto;}/*!sc*/p{line-height:2.4rem;font-size:1.5rem;font-weight:400;font-family:Open Sans,sans-serif;}/*!sc*/ul{padding-left:1rem;}/*!sc*/li{padding:0.5rem 0;}/*!sc*/a{color:white;}/*!sc*/data-styled.g33idsc-global-bStUXX1{content:sc-global-bStUXX1,}/*!sc*/.hbfwIk{margin:2rem auto;padding:0;display:grid;grid-template-columns:repeat(1,100%);grid-gap:1rem;grid-row-gap:3rem;}/*!sc*/@media (min-width:600px){.hbfwIk{grid-template-columns:repeat(2, 50%);}}/*!sc*/@media (min-width:800px){.hbfwIk{grid-template-columns:repeat(3, 33.3%);}}/*!sc*/data-styled.g50idindexstyles__PortfolioItems-sc-13sjfzw-0{content:hbfwIk,}/*!sc*/.hEfakQ{display:block;padding:0;margin:0;position:relative;overflow:hidden;min-height:500px;box-shadow:inset 0 0 10px rgba(0,0,0,0.1);display:grid;grid-template-rows:60% 40%;text-decoration:none;}/*!sc*/.hEfakQ >img{background:none;background-size:100% 100%;height:100%;}/*!sc*/.hEfakQ >div{padding:1rem 1rem 2rem;margin:0.5rem 0;display:flex;flex-direction:column;}/*!sc*/.hEfakQ >div >h3{margin:0;padding:0;font-size:1.7rem;text-trandform:upperecase;font-family:Open Sans,sans-serif;}/*!sc*/.hEfakQ >div >p{color:rgb(10, 10, 10);}/*!sc*/data-styled.g51idindexstyles__PortfolioItemWrapper-sc-13sjfzw-1{content:hEfakQ,}/*!sc*//style>/head>body>div id___gatsby>div styleoutline:none tabindex-1 idgatsby-focus-wrapper>div classLayoutstyles__LayoutWrapper-sc-y5yt86-0 jcwJwj>header classHeaderstyles__HeaderWrapper-sc-1pnh5tv-0 jbJblL>video src/vids/0001-0200.mp4 autoplay loop muted playsinline classHeaderstyles__CellsVideo-sc-1pnh5tv-4 gUolLR>/video>div classgenericstyles__GutterWide-sc-bv0bnh-2 jgPuUU>div filternone classHeaderstyles__HeaderContent-sc-1pnh5tv-9 kAXaMq>h1 classHeaderstyles__Logo-sc-1pnh5tv-5 eKiZnf>Andy Shora/h1>p classHeaderstyles__Subtitle-sc-1pnh5tv-6 glEXiQ>AI, Engineering and Innovation Leader/p>p classHeaderstyles__Subtitle2-sc-1pnh5tv-7 cdiPgk>Head of TFG Labs at!-- --> a hrefhttps://www.twentyfirstgroup.com/>Twenty First Group/a>/p>/div>/div>/header>div classgenericstyles__GutterWide-sc-bv0bnh-2 jgPuUU>section classgenericstyles__PageSection-sc-bv0bnh-3 fEigZy>h2>Writing/h2>p>A few recent articles:/p>div classgenericstyles__PostWrapper-sc-bv0bnh-6 dOnOOD>h3>a href/trust-in-ai/>Increasing Trust in AI/a>/h3>p>An exploration into how we can allow humans to fully embrace what AI has to offer./p>p>i classgenericstyles__ReadingTime-sc-bv0bnh-5 kolbhC>📖!-- -->10 mins/i> span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#trust #ai/span>/p>/div>div classgenericstyles__PostWrapper-sc-bv0bnh-6 dOnOOD>h3>a href/visualising-systems-of-trust/>Visualising Systems of Trust with Simulations of Vampire Bats./a>/h3>p>Trust explained using natural systems simulating colonies of vampire bats./p>p>i classgenericstyles__ReadingTime-sc-bv0bnh-5 kolbhC>📖!-- -->10 mins/i> span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#trust #dataviz #blockchain/span>/p>/div>/section>hr classgenericstyles__HR-sc-bv0bnh-0 bJYORK/>section classgenericstyles__PageSection-sc-bv0bnh-3 fEigZy>h2>Portfolio/h2>p>Here are few projects which I remembered to capture:/p>div classindexstyles__PortfolioItems-sc-13sjfzw-0 hbfwIk>a href/portfolio/personalisation-interactive-explainer titleFabriq classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'645'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/715f0825c312393392914dd8755c14bf/26172/fab-one.webp 150w,/static/715f0825c312393392914dd8755c14bf/b4147/fab-one.webp 300w,/static/715f0825c312393392914dd8755c14bf/7c641/fab-one.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/715f0825c312393392914dd8755c14bf/9bc85/fab-one.png data-srcset/static/715f0825c312393392914dd8755c14bf/89ad5/fab-one.png 150w,/static/715f0825c312393392914dd8755c14bf/e358e/fab-one.png 300w,/static/715f0825c312393392914dd8755c14bf/9bc85/fab-one.png 600w altFabriq/>/picture>noscript>picture>source typeimage/webp srcSet/static/715f0825c312393392914dd8755c14bf/26172/fab-one.webp 150w,/static/715f0825c312393392914dd8755c14bf/b4147/fab-one.webp 300w,/static/715f0825c312393392914dd8755c14bf/7c641/fab-one.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/715f0825c312393392914dd8755c14bf/9bc85/fab-one.png srcSet/static/715f0825c312393392914dd8755c14bf/89ad5/fab-one.png 150w,/static/715f0825c312393392914dd8755c14bf/e358e/fab-one.png 300w,/static/715f0825c312393392914dd8755c14bf/9bc85/fab-one.png 600w altFabriq/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Fabriq/h3>p>Interactive Explainer for Personalisation Platform Architecture/p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#3danimation #blender #illustration #react/span>/div>/div>/a>a href/portfolio/financial-visualisation-react titleNet Revenue Management Cockpit classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'461'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/0aa5a4ca33a4fd57252c02491c3b3294/48394/cockpit-dark-07.webp 150w,/static/0aa5a4ca33a4fd57252c02491c3b3294/19879/cockpit-dark-07.webp 300w,/static/0aa5a4ca33a4fd57252c02491c3b3294/ca09c/cockpit-dark-07.webp 600w,/static/0aa5a4ca33a4fd57252c02491c3b3294/843bd/cockpit-dark-07.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/0aa5a4ca33a4fd57252c02491c3b3294/55fd8/cockpit-dark-07.png data-srcset/static/0aa5a4ca33a4fd57252c02491c3b3294/e80de/cockpit-dark-07.png 150w,/static/0aa5a4ca33a4fd57252c02491c3b3294/c788c/cockpit-dark-07.png 300w,/static/0aa5a4ca33a4fd57252c02491c3b3294/55fd8/cockpit-dark-07.png 600w,/static/0aa5a4ca33a4fd57252c02491c3b3294/c108a/cockpit-dark-07.png 1200w altNet Revenue Management Cockpit/>/picture>noscript>picture>source typeimage/webp srcSet/static/0aa5a4ca33a4fd57252c02491c3b3294/48394/cockpit-dark-07.webp 150w,/static/0aa5a4ca33a4fd57252c02491c3b3294/19879/cockpit-dark-07.webp 300w,/static/0aa5a4ca33a4fd57252c02491c3b3294/ca09c/cockpit-dark-07.webp 600w,/static/0aa5a4ca33a4fd57252c02491c3b3294/843bd/cockpit-dark-07.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/0aa5a4ca33a4fd57252c02491c3b3294/55fd8/cockpit-dark-07.png srcSet/static/0aa5a4ca33a4fd57252c02491c3b3294/e80de/cockpit-dark-07.png 150w,/static/0aa5a4ca33a4fd57252c02491c3b3294/c788c/cockpit-dark-07.png 300w,/static/0aa5a4ca33a4fd57252c02491c3b3294/55fd8/cockpit-dark-07.png 600w,/static/0aa5a4ca33a4fd57252c02491c3b3294/c108a/cockpit-dark-07.png 1200w altNet Revenue Management Cockpit/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Net Revenue Management Cockpit/h3>p>Visualisation focusing on displaying change in a financial context. Made with React + SVG./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#react #SVG/span>/div>/div>/a>a href/portfolio/smartbanking-information-design titleSmart Banking Dashboards classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'564'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/f203c35893c54e5f334ff246feb55974/4179b/smartbanking-01.webp 150w,/static/f203c35893c54e5f334ff246feb55974/a3853/smartbanking-01.webp 300w,/static/f203c35893c54e5f334ff246feb55974/bb13e/smartbanking-01.webp 600w,/static/f203c35893c54e5f334ff246feb55974/2caeb/smartbanking-01.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/f203c35893c54e5f334ff246feb55974/1e2dc/smartbanking-01.png data-srcset/static/f203c35893c54e5f334ff246feb55974/f0775/smartbanking-01.png 150w,/static/f203c35893c54e5f334ff246feb55974/030af/smartbanking-01.png 300w,/static/f203c35893c54e5f334ff246feb55974/1e2dc/smartbanking-01.png 600w,/static/f203c35893c54e5f334ff246feb55974/43335/smartbanking-01.png 1200w altSmart Banking Dashboards/>/picture>noscript>picture>source typeimage/webp srcSet/static/f203c35893c54e5f334ff246feb55974/4179b/smartbanking-01.webp 150w,/static/f203c35893c54e5f334ff246feb55974/a3853/smartbanking-01.webp 300w,/static/f203c35893c54e5f334ff246feb55974/bb13e/smartbanking-01.webp 600w,/static/f203c35893c54e5f334ff246feb55974/2caeb/smartbanking-01.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/f203c35893c54e5f334ff246feb55974/1e2dc/smartbanking-01.png srcSet/static/f203c35893c54e5f334ff246feb55974/f0775/smartbanking-01.png 150w,/static/f203c35893c54e5f334ff246feb55974/030af/smartbanking-01.png 300w,/static/f203c35893c54e5f334ff246feb55974/1e2dc/smartbanking-01.png 600w,/static/f203c35893c54e5f334ff246feb55974/43335/smartbanking-01.png 1200w altSmart Banking Dashboards/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Smart Banking Dashboards/h3>p>Bringing some magic to a financial context, using React and SVG./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#svg #react #threejs/span>/div>/div>/a>a href/portfolio/supply-chain-batch-viz titleSupply Chain Components classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'624'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/88e7ded687f034343ef1aaf52f08f6ff/bdd96/sq.webp 150w,/static/88e7ded687f034343ef1aaf52f08f6ff/817a3/sq.webp 300w,/static/88e7ded687f034343ef1aaf52f08f6ff/566c0/sq.webp 600w,/static/88e7ded687f034343ef1aaf52f08f6ff/70c0d/sq.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/88e7ded687f034343ef1aaf52f08f6ff/75c20/sq.png data-srcset/static/88e7ded687f034343ef1aaf52f08f6ff/e1da4/sq.png 150w,/static/88e7ded687f034343ef1aaf52f08f6ff/76c32/sq.png 300w,/static/88e7ded687f034343ef1aaf52f08f6ff/75c20/sq.png 600w,/static/88e7ded687f034343ef1aaf52f08f6ff/65f1e/sq.png 1200w altSupply Chain Components/>/picture>noscript>picture>source typeimage/webp srcSet/static/88e7ded687f034343ef1aaf52f08f6ff/bdd96/sq.webp 150w,/static/88e7ded687f034343ef1aaf52f08f6ff/817a3/sq.webp 300w,/static/88e7ded687f034343ef1aaf52f08f6ff/566c0/sq.webp 600w,/static/88e7ded687f034343ef1aaf52f08f6ff/70c0d/sq.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/88e7ded687f034343ef1aaf52f08f6ff/75c20/sq.png srcSet/static/88e7ded687f034343ef1aaf52f08f6ff/e1da4/sq.png 150w,/static/88e7ded687f034343ef1aaf52f08f6ff/76c32/sq.png 300w,/static/88e7ded687f034343ef1aaf52f08f6ff/75c20/sq.png 600w,/static/88e7ded687f034343ef1aaf52f08f6ff/65f1e/sq.png 1200w altSupply Chain Components/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Supply Chain Components/h3>p>Developing components to highlight potential issues in a supply chain. Designed in code with React and SVG./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#svg #react/span>/div>/div>/a>a href/portfolio/aquarium-visualisation titleThe Aquarium - Employee Directory classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'620'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/ca3b011f1528ce8a765153b1de764363/476ff/selector.webp 150w,/static/ca3b011f1528ce8a765153b1de764363/d0339/selector.webp 300w,/static/ca3b011f1528ce8a765153b1de764363/a3ba1/selector.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/ca3b011f1528ce8a765153b1de764363/8cfdc/selector.png data-srcset/static/ca3b011f1528ce8a765153b1de764363/f82a3/selector.png 150w,/static/ca3b011f1528ce8a765153b1de764363/973cd/selector.png 300w,/static/ca3b011f1528ce8a765153b1de764363/8cfdc/selector.png 600w altThe Aquarium - Employee Directory/>/picture>noscript>picture>source typeimage/webp srcSet/static/ca3b011f1528ce8a765153b1de764363/476ff/selector.webp 150w,/static/ca3b011f1528ce8a765153b1de764363/d0339/selector.webp 300w,/static/ca3b011f1528ce8a765153b1de764363/a3ba1/selector.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/ca3b011f1528ce8a765153b1de764363/8cfdc/selector.png srcSet/static/ca3b011f1528ce8a765153b1de764363/f82a3/selector.png 150w,/static/ca3b011f1528ce8a765153b1de764363/973cd/selector.png 300w,/static/ca3b011f1528ce8a765153b1de764363/8cfdc/selector.png 600w altThe Aquarium - Employee Directory/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>The Aquarium - Employee Directory/h3>p>Visualisation using autonomous agents and WebGL - but actually a company directory./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#webgl #threejs #react/span>/div>/div>/a>a href/portfolio/blobstacles-3d-animation titleBlobstacles classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'600'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#a8a8a8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/c3a82c7d02008293e17631845e839073/4bee1/b-02.webp 150w,/static/c3a82c7d02008293e17631845e839073/78de2/b-02.webp 300w,/static/c3a82c7d02008293e17631845e839073/a0687/b-02.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/c3a82c7d02008293e17631845e839073/ecb3a/b-02.png data-srcset/static/c3a82c7d02008293e17631845e839073/1db4f/b-02.png 150w,/static/c3a82c7d02008293e17631845e839073/0e178/b-02.png 300w,/static/c3a82c7d02008293e17631845e839073/ecb3a/b-02.png 600w altBlobstacles/>/picture>noscript>picture>source typeimage/webp srcSet/static/c3a82c7d02008293e17631845e839073/4bee1/b-02.webp 150w,/static/c3a82c7d02008293e17631845e839073/78de2/b-02.webp 300w,/static/c3a82c7d02008293e17631845e839073/a0687/b-02.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/c3a82c7d02008293e17631845e839073/ecb3a/b-02.png srcSet/static/c3a82c7d02008293e17631845e839073/1db4f/b-02.png 150w,/static/c3a82c7d02008293e17631845e839073/0e178/b-02.png 300w,/static/c3a82c7d02008293e17631845e839073/ecb3a/b-02.png 600w altBlobstacles/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Blobstacles/h3>p>Short film animations for kids. Probably too violent./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#3danimation #blender #illustration/span>/div>/div>/a>a href/portfolio/car-parts titleVisualising Car Parts classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'312'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/a4c2372db00a6e32cbceccf6c98530b1/5be0d/viz.webp 150w,/static/a4c2372db00a6e32cbceccf6c98530b1/4742b/viz.webp 300w,/static/a4c2372db00a6e32cbceccf6c98530b1/e8615/viz.webp 600w,/static/a4c2372db00a6e32cbceccf6c98530b1/360d8/viz.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/a4c2372db00a6e32cbceccf6c98530b1/f6c24/viz.png data-srcset/static/a4c2372db00a6e32cbceccf6c98530b1/d7cf3/viz.png 150w,/static/a4c2372db00a6e32cbceccf6c98530b1/e337d/viz.png 300w,/static/a4c2372db00a6e32cbceccf6c98530b1/f6c24/viz.png 600w,/static/a4c2372db00a6e32cbceccf6c98530b1/57a6b/viz.png 1200w altVisualising Car Parts/>/picture>noscript>picture>source typeimage/webp srcSet/static/a4c2372db00a6e32cbceccf6c98530b1/5be0d/viz.webp 150w,/static/a4c2372db00a6e32cbceccf6c98530b1/4742b/viz.webp 300w,/static/a4c2372db00a6e32cbceccf6c98530b1/e8615/viz.webp 600w,/static/a4c2372db00a6e32cbceccf6c98530b1/360d8/viz.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/a4c2372db00a6e32cbceccf6c98530b1/f6c24/viz.png srcSet/static/a4c2372db00a6e32cbceccf6c98530b1/d7cf3/viz.png 150w,/static/a4c2372db00a6e32cbceccf6c98530b1/e337d/viz.png 300w,/static/a4c2372db00a6e32cbceccf6c98530b1/f6c24/viz.png 600w,/static/a4c2372db00a6e32cbceccf6c98530b1/57a6b/viz.png 1200w altVisualising Car Parts/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Visualising Car Parts/h3>p>Visualising interactions during the manufacturing process of a luxury car (favoured by 007)./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#threejs #webgl #dataviz/span>/div>/div>/a>a href/portfolio/ai-patent-information-design titlePatent for AI Financial Algorithm classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'560'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/babc8b9117a2fb267c9d7ec0246c6ba5/11a0f/patent-step2-v03-01.webp 150w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/218f1/patent-step2-v03-01.webp 300w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/b3f3f/patent-step2-v03-01.webp 600w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/7c6a0/patent-step2-v03-01.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/babc8b9117a2fb267c9d7ec0246c6ba5/53f93/patent-step2-v03-01.png data-srcset/static/babc8b9117a2fb267c9d7ec0246c6ba5/13888/patent-step2-v03-01.png 150w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/22882/patent-step2-v03-01.png 300w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/53f93/patent-step2-v03-01.png 600w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/8a2e5/patent-step2-v03-01.png 1200w altPatent for AI Financial Algorithm/>/picture>noscript>picture>source typeimage/webp srcSet/static/babc8b9117a2fb267c9d7ec0246c6ba5/11a0f/patent-step2-v03-01.webp 150w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/218f1/patent-step2-v03-01.webp 300w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/b3f3f/patent-step2-v03-01.webp 600w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/7c6a0/patent-step2-v03-01.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/babc8b9117a2fb267c9d7ec0246c6ba5/53f93/patent-step2-v03-01.png srcSet/static/babc8b9117a2fb267c9d7ec0246c6ba5/13888/patent-step2-v03-01.png 150w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/22882/patent-step2-v03-01.png 300w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/53f93/patent-step2-v03-01.png 600w,/static/babc8b9117a2fb267c9d7ec0246c6ba5/8a2e5/patent-step2-v03-01.png 1200w altPatent for AI Financial Algorithm/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Patent for AI Financial Algorithm/h3>p>Information Design for an AI Patent/p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#informationdesign #graphicdesign #AI/span>/div>/div>/a>a href/portfolio/blockchain titleVisualising Blockchain classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'473.99999999999994'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#281838;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/a0aa33679eacedede8ece7e2617d7600/38016/state.webp 150w,/static/a0aa33679eacedede8ece7e2617d7600/02eb2/state.webp 300w,/static/a0aa33679eacedede8ece7e2617d7600/3637c/state.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/a0aa33679eacedede8ece7e2617d7600/8b97f/state.png data-srcset/static/a0aa33679eacedede8ece7e2617d7600/52417/state.png 150w,/static/a0aa33679eacedede8ece7e2617d7600/842c0/state.png 300w,/static/a0aa33679eacedede8ece7e2617d7600/8b97f/state.png 600w altVisualising Blockchain/>/picture>noscript>picture>source typeimage/webp srcSet/static/a0aa33679eacedede8ece7e2617d7600/38016/state.webp 150w,/static/a0aa33679eacedede8ece7e2617d7600/02eb2/state.webp 300w,/static/a0aa33679eacedede8ece7e2617d7600/3637c/state.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/a0aa33679eacedede8ece7e2617d7600/8b97f/state.png srcSet/static/a0aa33679eacedede8ece7e2617d7600/52417/state.png 150w,/static/a0aa33679eacedede8ece7e2617d7600/842c0/state.png 300w,/static/a0aa33679eacedede8ece7e2617d7600/8b97f/state.png 600w altVisualising Blockchain/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Visualising Blockchain/h3>p>Experiments with React and SVG. Bringing our blockchain architecture to life in applications./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#svg #react #threejs/span>/div>/div>/a>a href/portfolio/data-science-tools titleVisualising the Data Science Process classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'452.99999999999994'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#182838;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/f89108302fa852fb9061bba5225266a4/0446c/data-sources.webp 150w,/static/f89108302fa852fb9061bba5225266a4/b3470/data-sources.webp 300w,/static/f89108302fa852fb9061bba5225266a4/ef66a/data-sources.webp 600w,/static/f89108302fa852fb9061bba5225266a4/80803/data-sources.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/f89108302fa852fb9061bba5225266a4/2c763/data-sources.png data-srcset/static/f89108302fa852fb9061bba5225266a4/ea564/data-sources.png 150w,/static/f89108302fa852fb9061bba5225266a4/2b4e7/data-sources.png 300w,/static/f89108302fa852fb9061bba5225266a4/2c763/data-sources.png 600w,/static/f89108302fa852fb9061bba5225266a4/79496/data-sources.png 1200w altVisualising the Data Science Process/>/picture>noscript>picture>source typeimage/webp srcSet/static/f89108302fa852fb9061bba5225266a4/0446c/data-sources.webp 150w,/static/f89108302fa852fb9061bba5225266a4/b3470/data-sources.webp 300w,/static/f89108302fa852fb9061bba5225266a4/ef66a/data-sources.webp 600w,/static/f89108302fa852fb9061bba5225266a4/80803/data-sources.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/f89108302fa852fb9061bba5225266a4/2c763/data-sources.png srcSet/static/f89108302fa852fb9061bba5225266a4/ea564/data-sources.png 150w,/static/f89108302fa852fb9061bba5225266a4/2b4e7/data-sources.png 300w,/static/f89108302fa852fb9061bba5225266a4/2c763/data-sources.png 600w,/static/f89108302fa852fb9061bba5225266a4/79496/data-sources.png 1200w altVisualising the Data Science Process/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Visualising the Data Science Process/h3>p>Various tools created with React and SVG, designed to give an insight into QB's Data Science process./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#svg #react #redux #d3 #gsap/span>/div>/div>/a>a href/portfolio/svg-graph-experiments titleSVG Radial Graphs classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'382'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#182838;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/e419159f38be5c4b43ab082676d7c700/f2575/tree-2.webp 150w,/static/e419159f38be5c4b43ab082676d7c700/85c27/tree-2.webp 300w,/static/e419159f38be5c4b43ab082676d7c700/ee620/tree-2.webp 600w,/static/e419159f38be5c4b43ab082676d7c700/40661/tree-2.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/e419159f38be5c4b43ab082676d7c700/674e7/tree-2.png data-srcset/static/e419159f38be5c4b43ab082676d7c700/bc6ce/tree-2.png 150w,/static/e419159f38be5c4b43ab082676d7c700/ba837/tree-2.png 300w,/static/e419159f38be5c4b43ab082676d7c700/674e7/tree-2.png 600w,/static/e419159f38be5c4b43ab082676d7c700/620ba/tree-2.png 1200w altSVG Radial Graphs/>/picture>noscript>picture>source typeimage/webp srcSet/static/e419159f38be5c4b43ab082676d7c700/f2575/tree-2.webp 150w,/static/e419159f38be5c4b43ab082676d7c700/85c27/tree-2.webp 300w,/static/e419159f38be5c4b43ab082676d7c700/ee620/tree-2.webp 600w,/static/e419159f38be5c4b43ab082676d7c700/40661/tree-2.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/e419159f38be5c4b43ab082676d7c700/674e7/tree-2.png srcSet/static/e419159f38be5c4b43ab082676d7c700/bc6ce/tree-2.png 150w,/static/e419159f38be5c4b43ab082676d7c700/ba837/tree-2.png 300w,/static/e419159f38be5c4b43ab082676d7c700/674e7/tree-2.png 600w,/static/e419159f38be5c4b43ab082676d7c700/620ba/tree-2.png 1200w altSVG Radial Graphs/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>SVG Radial Graphs/h3>p>Figuring out ways to explore huge hierarchical data structures with SVG and JavaScript./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#svg #react/span>/div>/div>/a>a href/portfolio/physicians-network titleVisualising Physicians classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'377'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/3c982214459b9c173f363acd5611539a/b4092/physicians-2.webp 150w,/static/3c982214459b9c173f363acd5611539a/c646c/physicians-2.webp 300w,/static/3c982214459b9c173f363acd5611539a/20e71/physicians-2.webp 600w,/static/3c982214459b9c173f363acd5611539a/9c73c/physicians-2.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/3c982214459b9c173f363acd5611539a/4cd0d/physicians-2.png data-srcset/static/3c982214459b9c173f363acd5611539a/09ca7/physicians-2.png 150w,/static/3c982214459b9c173f363acd5611539a/93de7/physicians-2.png 300w,/static/3c982214459b9c173f363acd5611539a/4cd0d/physicians-2.png 600w,/static/3c982214459b9c173f363acd5611539a/9c4ac/physicians-2.png 1200w altVisualising Physicians/>/picture>noscript>picture>source typeimage/webp srcSet/static/3c982214459b9c173f363acd5611539a/b4092/physicians-2.webp 150w,/static/3c982214459b9c173f363acd5611539a/c646c/physicians-2.webp 300w,/static/3c982214459b9c173f363acd5611539a/20e71/physicians-2.webp 600w,/static/3c982214459b9c173f363acd5611539a/9c73c/physicians-2.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/3c982214459b9c173f363acd5611539a/4cd0d/physicians-2.png srcSet/static/3c982214459b9c173f363acd5611539a/09ca7/physicians-2.png 150w,/static/3c982214459b9c173f363acd5611539a/93de7/physicians-2.png 300w,/static/3c982214459b9c173f363acd5611539a/4cd0d/physicians-2.png 600w,/static/3c982214459b9c173f363acd5611539a/9c4ac/physicians-2.png 1200w altVisualising Physicians/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Visualising Physicians/h3>p>Visualising the spread of a new drug via a national network of Physicians./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#threejs #webgl #dataviz #highperformance/span>/div>/div>/a>a href/portfolio/f1 titleF1 Dashboard classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'450'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/3aa7942efb7dd6512ab9e7557adad00c/0446c/iPad-Landscape-2-01.webp 150w,/static/3aa7942efb7dd6512ab9e7557adad00c/32b17/iPad-Landscape-2-01.webp 300w,/static/3aa7942efb7dd6512ab9e7557adad00c/60d2a/iPad-Landscape-2-01.webp 600w,/static/3aa7942efb7dd6512ab9e7557adad00c/b49cb/iPad-Landscape-2-01.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/3aa7942efb7dd6512ab9e7557adad00c/89ca4/iPad-Landscape-2-01.png data-srcset/static/3aa7942efb7dd6512ab9e7557adad00c/ea564/iPad-Landscape-2-01.png 150w,/static/3aa7942efb7dd6512ab9e7557adad00c/32393/iPad-Landscape-2-01.png 300w,/static/3aa7942efb7dd6512ab9e7557adad00c/89ca4/iPad-Landscape-2-01.png 600w,/static/3aa7942efb7dd6512ab9e7557adad00c/43702/iPad-Landscape-2-01.png 1200w altF1 Dashboard/>/picture>noscript>picture>source typeimage/webp srcSet/static/3aa7942efb7dd6512ab9e7557adad00c/0446c/iPad-Landscape-2-01.webp 150w,/static/3aa7942efb7dd6512ab9e7557adad00c/32b17/iPad-Landscape-2-01.webp 300w,/static/3aa7942efb7dd6512ab9e7557adad00c/60d2a/iPad-Landscape-2-01.webp 600w,/static/3aa7942efb7dd6512ab9e7557adad00c/b49cb/iPad-Landscape-2-01.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/3aa7942efb7dd6512ab9e7557adad00c/89ca4/iPad-Landscape-2-01.png srcSet/static/3aa7942efb7dd6512ab9e7557adad00c/ea564/iPad-Landscape-2-01.png 150w,/static/3aa7942efb7dd6512ab9e7557adad00c/32393/iPad-Landscape-2-01.png 300w,/static/3aa7942efb7dd6512ab9e7557adad00c/89ca4/iPad-Landscape-2-01.png 600w,/static/3aa7942efb7dd6512ab9e7557adad00c/43702/iPad-Landscape-2-01.png 1200w altF1 Dashboard/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>F1 Dashboard/h3>p>Displaying real-time live event streams for Formula One teams and Race Commentators./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#react #redux #svg #highperformance/span>/div>/div>/a>a href/portfolio/google-year-in-search titleGoogle Year in Search 2014 classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'625'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/8996df0de12a4508236bf4654b8a3601/bdd96/yis.webp 150w,/static/8996df0de12a4508236bf4654b8a3601/89234/yis.webp 300w,/static/8996df0de12a4508236bf4654b8a3601/ff814/yis.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/8996df0de12a4508236bf4654b8a3601/a99ea/yis.png data-srcset/static/8996df0de12a4508236bf4654b8a3601/e1da4/yis.png 150w,/static/8996df0de12a4508236bf4654b8a3601/332a2/yis.png 300w,/static/8996df0de12a4508236bf4654b8a3601/a99ea/yis.png 600w altGoogle Year in Search 2014/>/picture>noscript>picture>source typeimage/webp srcSet/static/8996df0de12a4508236bf4654b8a3601/bdd96/yis.webp 150w,/static/8996df0de12a4508236bf4654b8a3601/89234/yis.webp 300w,/static/8996df0de12a4508236bf4654b8a3601/ff814/yis.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/8996df0de12a4508236bf4654b8a3601/a99ea/yis.png srcSet/static/8996df0de12a4508236bf4654b8a3601/e1da4/yis.png 150w,/static/8996df0de12a4508236bf4654b8a3601/332a2/yis.png 300w,/static/8996df0de12a4508236bf4654b8a3601/a99ea/yis.png 600w altGoogle Year in Search 2014/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Google Year in Search 2014/h3>p>Showcasing Google Trends data for the big events which happened during the year/p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#python #googleclosure #highperformance/span>/div>/div>/a>a href/portfolio/nutrition-app titleNutrition Website classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'450'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#a82828;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/803abf799badf544be37412d6d99d63b/f7833/toomanykiwis.webp 150w,/static/803abf799badf544be37412d6d99d63b/32b17/toomanykiwis.webp 300w,/static/803abf799badf544be37412d6d99d63b/60d2a/toomanykiwis.webp 600w,/static/803abf799badf544be37412d6d99d63b/b49cb/toomanykiwis.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/803abf799badf544be37412d6d99d63b/89ca4/toomanykiwis.png data-srcset/static/803abf799badf544be37412d6d99d63b/f1aef/toomanykiwis.png 150w,/static/803abf799badf544be37412d6d99d63b/32393/toomanykiwis.png 300w,/static/803abf799badf544be37412d6d99d63b/89ca4/toomanykiwis.png 600w,/static/803abf799badf544be37412d6d99d63b/43702/toomanykiwis.png 1200w altNutrition Website/>/picture>noscript>picture>source typeimage/webp srcSet/static/803abf799badf544be37412d6d99d63b/f7833/toomanykiwis.webp 150w,/static/803abf799badf544be37412d6d99d63b/32b17/toomanykiwis.webp 300w,/static/803abf799badf544be37412d6d99d63b/60d2a/toomanykiwis.webp 600w,/static/803abf799badf544be37412d6d99d63b/b49cb/toomanykiwis.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/803abf799badf544be37412d6d99d63b/89ca4/toomanykiwis.png srcSet/static/803abf799badf544be37412d6d99d63b/f1aef/toomanykiwis.png 150w,/static/803abf799badf544be37412d6d99d63b/32393/toomanykiwis.png 300w,/static/803abf799badf544be37412d6d99d63b/89ca4/toomanykiwis.png 600w,/static/803abf799badf544be37412d6d99d63b/43702/toomanykiwis.png 1200w altNutrition Website/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Nutrition Website/h3>p>I ate too many kiwis and my appendix exploded. I then went on a journey to make a useable nutrition website./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#react #gatsbyjs #gsap/span>/div>/div>/a>a href/portfolio/google-world-cup titleGoogle FIFA World Cup 2014 classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'645'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/26172/wc.webp 150w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/b4147/wc.webp 300w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/7c641/wc.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/9bc85/wc.png data-srcset/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/89ad5/wc.png 150w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/e358e/wc.png 300w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/9bc85/wc.png 600w altGoogle FIFA World Cup 2014/>/picture>noscript>picture>source typeimage/webp srcSet/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/26172/wc.webp 150w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/b4147/wc.webp 300w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/7c641/wc.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/9bc85/wc.png srcSet/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/89ad5/wc.png 150w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/e358e/wc.png 300w,/static/678a9f2b03ebbb5ac687fd1ab93fdcdb/9bc85/wc.png 600w altGoogle FIFA World Cup 2014/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Google FIFA World Cup 2014/h3>p>Displaying Live Events and Google Trends during the FIFA World Cup in Brasil/p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#python #googleclosure #highperformance/span>/div>/div>/a>a href/portfolio/nike-fuelfest titleNike Fuelfest Event Wall classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'400'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/8137761ae8f06f1718f66c747571e36c/c25aa/fuelfest.webp 150w,/static/8137761ae8f06f1718f66c747571e36c/b7239/fuelfest.webp 300w,/static/8137761ae8f06f1718f66c747571e36c/9405c/fuelfest.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/8137761ae8f06f1718f66c747571e36c/ce2cb/fuelfest.png data-srcset/static/8137761ae8f06f1718f66c747571e36c/be0f7/fuelfest.png 150w,/static/8137761ae8f06f1718f66c747571e36c/9141a/fuelfest.png 300w,/static/8137761ae8f06f1718f66c747571e36c/ce2cb/fuelfest.png 600w altNike Fuelfest Event Wall/>/picture>noscript>picture>source typeimage/webp srcSet/static/8137761ae8f06f1718f66c747571e36c/c25aa/fuelfest.webp 150w,/static/8137761ae8f06f1718f66c747571e36c/b7239/fuelfest.webp 300w,/static/8137761ae8f06f1718f66c747571e36c/9405c/fuelfest.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/8137761ae8f06f1718f66c747571e36c/ce2cb/fuelfest.png srcSet/static/8137761ae8f06f1718f66c747571e36c/be0f7/fuelfest.png 150w,/static/8137761ae8f06f1718f66c747571e36c/9141a/fuelfest.png 300w,/static/8137761ae8f06f1718f66c747571e36c/ce2cb/fuelfest.png 600w altNike Fuelfest Event Wall/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Nike Fuelfest Event Wall/h3>p>Pulling in tagged images from twitter to provide ambience for cool kids while they buy expensive trainers./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#angularjs/span>/div>/div>/a>a href/portfolio/nike-fuelband-apple-stores titleNike Fuelband App for Apple Employees classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'340'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#2878b8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/1e4afcf995faab7ce49527c9f17722de/f962c/fuelband-apple-stores.webp 150w,/static/1e4afcf995faab7ce49527c9f17722de/6cabd/fuelband-apple-stores.webp 300w,/static/1e4afcf995faab7ce49527c9f17722de/3bcfc/fuelband-apple-stores.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/1e4afcf995faab7ce49527c9f17722de/8b206/fuelband-apple-stores.png data-srcset/static/1e4afcf995faab7ce49527c9f17722de/b0a56/fuelband-apple-stores.png 150w,/static/1e4afcf995faab7ce49527c9f17722de/d67f3/fuelband-apple-stores.png 300w,/static/1e4afcf995faab7ce49527c9f17722de/8b206/fuelband-apple-stores.png 600w altNike Fuelband App for Apple Employees/>/picture>noscript>picture>source typeimage/webp srcSet/static/1e4afcf995faab7ce49527c9f17722de/f962c/fuelband-apple-stores.webp 150w,/static/1e4afcf995faab7ce49527c9f17722de/6cabd/fuelband-apple-stores.webp 300w,/static/1e4afcf995faab7ce49527c9f17722de/3bcfc/fuelband-apple-stores.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/1e4afcf995faab7ce49527c9f17722de/8b206/fuelband-apple-stores.png srcSet/static/1e4afcf995faab7ce49527c9f17722de/b0a56/fuelband-apple-stores.png 150w,/static/1e4afcf995faab7ce49527c9f17722de/d67f3/fuelband-apple-stores.png 300w,/static/1e4afcf995faab7ce49527c9f17722de/8b206/fuelband-apple-stores.png 600w altNike Fuelband App for Apple Employees/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Nike Fuelband App for Apple Employees/h3>p>A competition app to get Apple Store employees moving around more!/p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#angularjs #dataviz/span>/div>/div>/a>a href/portfolio/nike-fuelband-apple-stores-cms titleNike Fuelband Competition CMS classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'347'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/c41fe2c1d65bc18a56428981e67ca939/6f82c/fuelband-cms.webp 150w,/static/c41fe2c1d65bc18a56428981e67ca939/99850/fuelband-cms.webp 300w,/static/c41fe2c1d65bc18a56428981e67ca939/e4910/fuelband-cms.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/c41fe2c1d65bc18a56428981e67ca939/128c4/fuelband-cms.png data-srcset/static/c41fe2c1d65bc18a56428981e67ca939/f2a43/fuelband-cms.png 150w,/static/c41fe2c1d65bc18a56428981e67ca939/194a5/fuelband-cms.png 300w,/static/c41fe2c1d65bc18a56428981e67ca939/128c4/fuelband-cms.png 600w altNike Fuelband Competition CMS/>/picture>noscript>picture>source typeimage/webp srcSet/static/c41fe2c1d65bc18a56428981e67ca939/6f82c/fuelband-cms.webp 150w,/static/c41fe2c1d65bc18a56428981e67ca939/99850/fuelband-cms.webp 300w,/static/c41fe2c1d65bc18a56428981e67ca939/e4910/fuelband-cms.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/c41fe2c1d65bc18a56428981e67ca939/128c4/fuelband-cms.png srcSet/static/c41fe2c1d65bc18a56428981e67ca939/f2a43/fuelband-cms.png 150w,/static/c41fe2c1d65bc18a56428981e67ca939/194a5/fuelband-cms.png 300w,/static/c41fe2c1d65bc18a56428981e67ca939/128c4/fuelband-cms.png 600w altNike Fuelband Competition CMS/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Nike Fuelband Competition CMS/h3>p>A CMS for the fuelband competition app./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#angularjs/span>/div>/div>/a>a href/portfolio/google-glass-app titleThe First Google Glass App classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'331'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/2edc1f3f6564e9ef61a5484457ddb65b/1f046/google-glass-outside.webp 150w,/static/2edc1f3f6564e9ef61a5484457ddb65b/acde3/google-glass-outside.webp 300w,/static/2edc1f3f6564e9ef61a5484457ddb65b/4eacf/google-glass-outside.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/2edc1f3f6564e9ef61a5484457ddb65b/2f37b/google-glass-outside.png data-srcset/static/2edc1f3f6564e9ef61a5484457ddb65b/f7149/google-glass-outside.png 150w,/static/2edc1f3f6564e9ef61a5484457ddb65b/ae494/google-glass-outside.png 300w,/static/2edc1f3f6564e9ef61a5484457ddb65b/2f37b/google-glass-outside.png 600w altThe First Google Glass App/>/picture>noscript>picture>source typeimage/webp srcSet/static/2edc1f3f6564e9ef61a5484457ddb65b/1f046/google-glass-outside.webp 150w,/static/2edc1f3f6564e9ef61a5484457ddb65b/acde3/google-glass-outside.webp 300w,/static/2edc1f3f6564e9ef61a5484457ddb65b/4eacf/google-glass-outside.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/2edc1f3f6564e9ef61a5484457ddb65b/2f37b/google-glass-outside.png srcSet/static/2edc1f3f6564e9ef61a5484457ddb65b/f7149/google-glass-outside.png 150w,/static/2edc1f3f6564e9ef61a5484457ddb65b/ae494/google-glass-outside.png 300w,/static/2edc1f3f6564e9ef61a5484457ddb65b/2f37b/google-glass-outside.png 600w altThe First Google Glass App/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>The First Google Glass App/h3>p>Dictate what you want to do, and this app will provide suggestions, and directions. A breakthrough, at the time./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#androidsdk/span>/div>/div>/a>a href/portfolio/fitbit titleFitbit Event Dashboard classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'338'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#1858a8;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/35720d58f97401abc848d9746bfe5549/3f258/fitbit-api.webp 150w,/static/35720d58f97401abc848d9746bfe5549/ef948/fitbit-api.webp 300w,/static/35720d58f97401abc848d9746bfe5549/e2808/fitbit-api.webp 600w,/static/35720d58f97401abc848d9746bfe5549/1edd2/fitbit-api.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/35720d58f97401abc848d9746bfe5549/b3d95/fitbit-api.jpg data-srcset/static/35720d58f97401abc848d9746bfe5549/6f4f7/fitbit-api.jpg 150w,/static/35720d58f97401abc848d9746bfe5549/ba956/fitbit-api.jpg 300w,/static/35720d58f97401abc848d9746bfe5549/b3d95/fitbit-api.jpg 600w,/static/35720d58f97401abc848d9746bfe5549/67eaf/fitbit-api.jpg 1200w altFitbit Event Dashboard/>/picture>noscript>picture>source typeimage/webp srcSet/static/35720d58f97401abc848d9746bfe5549/3f258/fitbit-api.webp 150w,/static/35720d58f97401abc848d9746bfe5549/ef948/fitbit-api.webp 300w,/static/35720d58f97401abc848d9746bfe5549/e2808/fitbit-api.webp 600w,/static/35720d58f97401abc848d9746bfe5549/1edd2/fitbit-api.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/35720d58f97401abc848d9746bfe5549/b3d95/fitbit-api.jpg srcSet/static/35720d58f97401abc848d9746bfe5549/6f4f7/fitbit-api.jpg 150w,/static/35720d58f97401abc848d9746bfe5549/ba956/fitbit-api.jpg 300w,/static/35720d58f97401abc848d9746bfe5549/b3d95/fitbit-api.jpg 600w,/static/35720d58f97401abc848d9746bfe5549/67eaf/fitbit-api.jpg 1200w altFitbit Event Dashboard/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Fitbit Event Dashboard/h3>p>Activity monitors turned into a live race track to spice up corporate event days./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#d3 #react/span>/div>/div>/a>a href/portfolio/the-city-awards titleThe City Awards classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'600'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/4bee1/city-awards.webp 150w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/78de2/city-awards.webp 300w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/a0687/city-awards.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/ecb3a/city-awards.png data-srcset/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/1db4f/city-awards.png 150w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/0e178/city-awards.png 300w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/ecb3a/city-awards.png 600w altThe City Awards/>/picture>noscript>picture>source typeimage/webp srcSet/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/4bee1/city-awards.webp 150w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/78de2/city-awards.webp 300w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/a0687/city-awards.webp 600w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/ecb3a/city-awards.png srcSet/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/1db4f/city-awards.png 150w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/0e178/city-awards.png 300w,/static/bb4fa2f30a9e5897f3ecc081fdaf4ca6/ecb3a/city-awards.png 600w altThe City Awards/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>The City Awards/h3>p>Find the best X in Y. Give awards with cute badges. One of the first apps to harness Instagram location images./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#angularjs #nodejs #mongodb/span>/div>/div>/a>a href/portfolio/stacks titleStackey classindexstyles__PortfolioItemWrapper-sc-13sjfzw-1 hEfakQ>div data-gatsby-image-wrapper classgatsby-image-wrapper gatsby-image-wrapper-constrained>div stylemax-width:600px;display:block>img alt rolepresentation aria-hiddentrue srcdata:image/svg+xml;charsetutf-8,%3Csvg%20height'600'%20width'600'%20xmlns'http://www.w3.org/2000/svg'%20version'1.1'%3E%3C/svg%3E stylemax-width:100%;display:block;position:static/>/div>div aria-hiddentrue data-placeholder-image styleopacity:1;transition:opacity 500ms linear;background-color:#984828;position:absolute;top:0;left:0;bottom:0;right:0>/div>picture>source typeimage/webp data-srcset/static/9b31fea4ec07defb7bc06c5d3de7c7f7/4bee1/stack-2.webp 150w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/78de2/stack-2.webp 300w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/a0687/stack-2.webp 600w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/d7dc0/stack-2.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy data-src/static/9b31fea4ec07defb7bc06c5d3de7c7f7/4e38f/stack-2.jpg data-srcset/static/9b31fea4ec07defb7bc06c5d3de7c7f7/db3a2/stack-2.jpg 150w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/bd618/stack-2.jpg 300w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/4e38f/stack-2.jpg 600w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/78d4b/stack-2.jpg 1200w altStackey/>/picture>noscript>picture>source typeimage/webp srcSet/static/9b31fea4ec07defb7bc06c5d3de7c7f7/4bee1/stack-2.webp 150w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/78de2/stack-2.webp 300w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/a0687/stack-2.webp 600w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/d7dc0/stack-2.webp 1200w sizes(min-width: 600px) 600px, 100vw/>img data-gatsby-image-ssr data-main-image styleopacity:0 sizes(min-width: 600px) 600px, 100vw decodingasync loadinglazy src/static/9b31fea4ec07defb7bc06c5d3de7c7f7/4e38f/stack-2.jpg srcSet/static/9b31fea4ec07defb7bc06c5d3de7c7f7/db3a2/stack-2.jpg 150w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/bd618/stack-2.jpg 300w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/4e38f/stack-2.jpg 600w,/static/9b31fea4ec07defb7bc06c5d3de7c7f7/78d4b/stack-2.jpg 1200w altStackey/>/picture>/noscript>script typemodule>const tundefined!typeof HTMLImageElement&&loadingin HTMLImageElement.prototype;if(t){const tdocument.querySelectorAll(imgdata-main-image);for(let e of t){e.dataset.src&&(e.setAttribute(src,e.dataset.src),e.removeAttribute(data-src)),e.dataset.srcset&&(e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset));const te.parentNode.querySelectorAll(sourcedata-srcset);for(let e of t)e.setAttribute(srcset,e.dataset.srcset),e.removeAttribute(data-srcset);e.complete&&(e.style.opacity1,e.parentNode.parentNode.querySelector(data-placeholder-image).style.opacity0)}}/script>/div>div>h3>Stackey/h3>p>An app to curate stacks of things. I still want this in my life./p>div>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#angularjs #gsap/span>/div>/div>/a>/div>/section>hr classgenericstyles__HR-sc-bv0bnh-0 bJYORK/>section classgenericstyles__PageSection-sc-bv0bnh-3 fEigZy>h2>Active Projects/h2>p>I say active, because most projects die. These however, currently prosper:/p>div classgenericstyles__PostWrapper-sc-bv0bnh-6 dOnOOD>h3>a hrefhttps://www.toomanykiwis.com/ titleNutrition website>Too Many Kiwis/a>/h3>p>A nutrition website which doesn't suck. Named after I ate too many kiwis and my appendix exploded./p>p>span classgenericstyles__Tags-sc-bv0bnh-4 gEywOi>#nutrition #superfoods/span>/p>/div>/section>hr classgenericstyles__HR-sc-bv0bnh-0 bJYORK/>section classgenericstyles__PageSection-sc-bv0bnh-3 fEigZy>h2>Archive/h2>p>This stuff is way old! Please forgive me for the lack of housekeeping in here./p>ul>li>a href/easy-paper-js-tutorial.html titleThe Easy Paper.js Tutorial>The Easy Paper.js Tutorial/a>/li>li>a href/tweening-shapes-paths-d3-js.html titleTweening Custom Shapes and Paths in D3.js>Tweening Custom Shapes and Paths in D3.js/a>/li>li>a href/css-image-container-padding-hack.html titleSizing Fluid Image Containers with a Little CSS Padding Hack>Sizing Fluid Image Containers with a Little CSS Padding Hack/a>/li>li>a href/promises-angularjs-explained-as-cartoon.html titlePromises in AngularJS, Explained as a Cartoon>Promises in AngularJS, Explained as a Cartoon/a>/li>li>a href/unit-testing-best-practices-angularjs.html titleUnit and Integration Testing Best Practices in AngularJS>Unit and Integration Testing Best Practices in AngularJS/a>/li>li>a href/full-stack-developers.html titleThe Myth of the Full-stack Developer>The Myth of the Full-stack Developer/a>/li>/ul>/section>/div>footer classFooterstyles__FooterWrapper-sc-n7ll61-0 dhccxm>div classgenericstyles__GutterWide-sc-bv0bnh-2 jgPuUU>section classFooterstyles__BioSection-sc-n7ll61-1 ckFjxt>div classBiostyles__BioWrapper-sc-1edkiqb-1 plmHn>picture>source srcSet/img/andyshora-2024.webp typeimage/webp altAndy Shora src/img/andyshora-2024.jpg stylewidth:100%;max-width:200px;box-shadow:0 0 1px rgba(0, 0, 0, 0.5)/>source srcSet/img/andyshora-2024.png typeimage/png altAndy Shora src/img/andyshora-2024.jpg stylewidth:100%;max-width:200px;box-shadow:0 0 1px rgba(0, 0, 0, 0.5)/>img src/img/andyshora-2024.jpg altAndy Shora stylewidth:100%;max-width:200px;box-shadow:0 0 1px rgba(0, 0, 0, 0.5)/>/picture>aside classBiostyles__BioText-sc-1edkiqb-2 heEhuc>h4>Hi, I'm strong>Andy Shora/strong>./h4>p classBiostyles__Subtitle2-sc-1edkiqb-3 fNjHNZ>I work as Head of TFG Labs at!-- --> a hrefhttps://www.twentyfirstgroup.com/>Twenty First Group/a>/p>p>I can be found tweeting at!-- --> a titleAndy Shora on Twitter hrefhttps://twitter.com/andyshora>@andyshora/a>/p>/aside>/div>/section>section classFooterstyles__ContactSection-sc-n7ll61-3 eLqFSk>h4>Contact Me/h4>ul>li>a title@andyshora on Twitter target_blank hrefhttps://twitter.com/andyshora>twitter.com/andyshora/a>/li>li>a titleAndy Shora on LinkedIn target_blank hrefhttps://www.linkedin.com/in/andyshora/>linkedin.com/in/andyshora//a>/li>li>a titleandyshora on Github target_blank hrefhttps://github.com/andyshora>github.com/andyshora/a>/li>/ul>/section>section classFooterstyles__AboutSection-sc-n7ll61-2 fTmwMp>h4>About this website/h4>p>I made this website in a few hours with a titleGatsbyJS hrefhttps://www.gatsbyjs.org/>GatsbyJS/a>, and I serve it using a hrefhttps://www.netlify.com/ titleNetlift>Netlify/a>./p>p>You can fork the original source code for free, a titleStart a gatsby project like this. hrefhttps://github.com/gatsbyjs/gatsby-starter-blog>here./a>/p>p classFooterstyles__LicenseText-sc-n7ll61-4 gCTVNx>© 2024 – the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code samples are licensed under the Apache 2.0 License./p>/section>/div>/footer>/div>/div>div idgatsby-announcer styleposition:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0 aria-liveassertive aria-atomictrue>/div>/div>script> if(true) { (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,https://www.google-analytics.com/analytics.js,ga); } if (typeof ga function) { ga(create, UA-17716290-10, auto, {}); }/script>script idgatsby-script-loader>/*!CDATA*/window.pagePath/;/*>*//script>!-- slice-start id_gatsby-scripts-1 --> script idgatsby-chunk-mapping > window.___chunkMapping{\app\:\/app-5666f78a7e3247497a4b.js\,\component---src-pages-404-js\:\/component---src-pages-404-js-7c68ea9f61203161c745.js\,\component---src-pages-index-js\:\/component---src-pages-index-js-3843c31002e85c105b2c.js\,\component---src-templates-blog-post-template-js\:\/component---src-templates-blog-post-template-js-5afb20be8e0263eff089.js\,\component---src-templates-portfolio-post-template-js\:\/component---src-templates-portfolio-post-template-js-29f4aa5af32dd1c6a50c.js\}; /script> script>window.___webpackCompilationHash173709f5135dfe97d86d;/script>script src/webpack-runtime-92c3886bb24f91522bbd.js async>/script>script src/framework-b3349538747c9fbdab91.js async>/script>script src/app-5666f78a7e3247497a4b.js async>/script>!-- slice-end id_gatsby-scripts-1 -->/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]