301 status code means that the requested resource has been permanently moved to a new URL. All future requests should use the new address.
The browser will automatically redirect the user to the new address, and search engines will update their indexes.
200 status code is a standard successful HTTP server response. It means that the client’s request (e.g., from a browser) was successfully processed, and the server is delivering the requested data.
The user receives content without errors, and the page or application functions properly. If Code 200 is accompanied by data, the browser or program processes and displays it to the user.
GET / HTTP/1.1 Host: admhh.com Accept: */* User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
<!DOCTYPE html> <html lang="en"> <head> <title>Adam Howard</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta property="og:url" content="https://admhh.com"> <meta name="description" content="A Computer Science graduate from the University of Bath."> <link rel="icon" href="imgs/favicons/green.png"> <link rel="stylesheet" href="index.css"> <script type="importmap"> { "imports": { "three": "https://cdn.jsdelivr.net/npm/[email protected]/build/three.module.js", "three/addons/": "https://cdn.jsdelivr.net/npm/[email protected]/examples/jsm/" } } </script> <!-- import mesh-view.js function --> <script type="02119b18052e9bef4a5439d5-module"> import { createScene } from "/three-js/mesh-view.js" window.createScene = createScene; </script> <!-- import p5.js --> <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.4/p5.min.js" type="02119b18052e9bef4a5439d5-text/javascript"></script> <script src="/p5-js/sliding-grids.js" defer type="02119b18052e9bef4a5439d5-text/javascript"></script> <!-- load colour picker script --> <script src="colour-picker.js" type="02119b18052e9bef4a5439d5-text/javascript"></script> </head> <body> <div class="navbar"> <div class="link-outer active" id="main-link-outer"> <button class="link active" id="main-link" onclick="if (!window.__cfRLUnblockHandlers) return false; showPage('main')" data-cf-modified-02119b18052e9bef4a5439d5-=""> <p class="link-text" id="main-link-text">ADAM HOWARD</p> </button> </div> <div class="link-outer" id="work-link-outer"> <button class="link" id="work-link" onclick="if (!window.__cfRLUnblockHandlers) return false; showPage('work')" data-cf-modified-02119b18052e9bef4a5439d5-=""> <p class="link-text" id="work-link-text">WORK</p> </button> </div> <div class="link-outer" id="music-link-outer"> <button class="link" id="music-link" onclick="if (!window.__cfRLUnblockHandlers) return false; showPage('music')" data-cf-modified-02119b18052e9bef4a5439d5-=""> <p class="link-text" id="music-link-text">MUSIC</p> </button> </div> <div class="link-outer" id="contact-link-outer"> <button class="link" id="contact-link" onclick="if (!window.__cfRLUnblockHandlers) return false; showPage('contact')" data-cf-modified-02119b18052e9bef4a5439d5-=""> <p class="link-text" id="contact-link-text">CONTACT</p> </button> </div> </div> <div class="content" id="content"> <div class="content-container" id="main" style="display: block;"> <!-- <div class="body-text"> <svg viewBox="0 0 200 250" xmlns="http://www.w3.org/2000/svg"> <path d="M70 200 L100 50 L130 200 L115 200 L100 130 L85 200 Z" fill="black" /> <circle cx="100" cy="100" r="50" fill="none" stroke="black" stroke-width="10" /> <circle cx="100" cy="100" r="70" fill="none" stroke="black" stroke-width="10" stroke-dasharray="20" /> <circle cx="100" cy="100" r="90" fill="none" stroke="black" stroke-width="10" stroke-dasharray="20 20" /> </svg> </div> --> <div class="map-container"> <iframe title="Map" src="https://www.google.com/maps/embed?pb=!4v1718916173490!6m8!1m7!1s4jC_4hD2FffnyvyU_6Zk6A!2m2!1d51.47191832062975!2d-0.0934459344137624!3f300.68293509124874!4f-1.9836919319311335!5f0.7820865974627469" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade" class="map"></iframe> </div> </div> <div class="content-container" id="work" style="display: none;"> <div class="body-text"> <!-- <h1> CV </h1> <p> Download CV <a href="files/Adam Howard CV.pdf" target="_blank">here</a>. </p> --> <h1 id="connections" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('connections')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Connections </h1> <div class="content-collapsible" id="connections-collapsible"> <p>Play some custom games of <a href="https://www.nytimes.com/games/connections" target="_blank">NYT Connections</a>.</p> <ul> <li><a href="/connections/puzzle-1.html" class="colourable">Play Connections 1</a></li> <li><a href="/connections/puzzle-2.html" class="colourable">Play Connections 2</a></li> <li><a href="/connections/puzzle-3.html" class="colourable">Play Connections 3</a></li> <li><a href="/connections/puzzle-4.html" class="colourable">Play Connections 4</a></li> <li><a href="/connections/puzzle-5.html" class="colourable">Play Connections 5</a></li> <li><a href="/connections/puzzle-6.html" class="colourable">Play Connections 6</a></li> </ul> </div> <h1 id="128kb" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('128kb')" data-cf-modified-02119b18052e9bef4a5439d5-=""> 128kb </h1> <div class="content-collapsible" id="128kb-collapsible"> <img class="image-small" style="image-rendering: pixelated;" src="/imgs/sliding-grids.gif" loading="lazy" id="sliding-grids-gif"> <p> "Sliding Grids". 128x128 GIF, 128 frames. Created with <a href="https://p5js.org/" target="_blank">p5.js</a>. </p> <p> Submission for the <a href="https://128kb.timrodenbroeker.de/" target="_blank">128kb exhibition</a> by <a href="https://timrodenbroeker.de/" target="_blank">Tim Rodenbröker</a>. </p> <p> Try it out below! </p> <div id="sliding-grids-interactive" style="display: flex; align-items: center;"> <div style="width: 55%;"> <canvas class="image-small" id="sliding-grids-canvas" style="margin: auto;"></canvas> </div> <div style="width:45%; padding: 20px;"> <div style="display: flex; flex-direction: column; align-items: center; height: auto; gap: 10px;"> <p style="margin: auto; text-align: center;"> <input class="text-input" autocomplete="off" id="sliding-grids-pattern-input" type="text" style="width: 100%; margin: auto; text-align: center;" placeholder="Write something"></p> <div style="display: flex; gap: 30px;"> <div id="colour-picker-wrapper-sliding-grids-main" style="width: 25px; height: 25px; cursor: pointer; background-color: var(--main-colour); border: 2px solid var(--main-colour);"> <input type="color" id="colour-picker-sliding-grids-main"style="width: 25px; height: 25px; cursor: pointer; opacity: 0; border: 2px solid var(--main-colour);"> </div> <div id="colour-picker-wrapper-sliding-grids-background" style="width: 25px; height: 25px; cursor: pointer; background-color: var(--secondary-colour); border: 2px solid var(--main-colour);"> <input type="color" id="colour-picker-sliding-grids-background"style="width: 25px; height: 25px; cursor: pointer; opacity: 0; border: 2px solid var(--main-colour);"> </div> </div> <div id="sliding-grids-play" style="width: 25px; margin: auto;"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="-22 -25 500.88 500.51" style="cursor: pointer;"><title>Play Sequence</title> <path d="M393.538,203.629L102.557,5.543c-9.793-6.666-22.468-7.372-32.94-1.832c-10.472,5.538-17.022,16.413-17.022,28.26v396.173 c0,11.846,6.55,22.721,17.022,28.26c10.471,5.539,23.147,4.834,32.94-1.832l290.981-198.087 c8.746-5.954,13.98-15.848,13.98-26.428C407.519,219.477,402.285,209.582,393.538,203.629z" fill="var(--main-colour)" /> </svg> </div> </div> </div> </div> </div> <h1 id="dissertation" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('dissertation')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Dissertation Project </h1> <div class="content-collapsible" id="dissertation-collapsible"> <h2> Robust Photometric Stereo for Specular and Shadowed Objects Under Noise </h2> <p> The report for the project can be downloaded <a href="https://admh-dissertation.s3.eu-west-2.amazonaws.com/Dissertation+AH.pdf" target="_blank">here</a>. </p> <p> The accompanying code is available <a href="https://github.com/admhh/robust-photometric-stereo" target="_blank">here</a>. </p> <p> Photometric Stereo is a technique concerned with extracting the <i>geometry</i> (normals) of a surface given a series of photographs captured under different lighting directions (<a href="https://www.cs.ubc.ca/~woodham/papers/Woodham80c.pdf" target="_blank">Woodham, 1980</a>). Once a normal field is reconstructed, it can be integrated to give a surface. </p> <div style="display: flex; align-items: center;"> <div style="justify-content: center; display: flex; width: 50%;"> <p style="margin: auto;" id="frog-input-label">Input [1/20]</p> </div> <div style="justify-content: center; display: flex; width: 50%;"> <p style="margin: auto;">Output</p> </div> </div> <div id="frog-container" style="display: flex; margin-right: 10%; margin-left: 10%; width:80%; justify-content: center;"> <img src="imgs/frogs/0.png" alt="A photo of a model frog." class="image-small" style="margin-left: 10%; margin-right: 10%; cursor:pointer;" loading="lazy" id="dissertation-frog-image" onclick="if (!window.__cfRLUnblockHandlers) return false; cycleFrog()" data-cf-modified-02119b18052e9bef4a5439d5-=""> </div> <!-- <div style="display: flex; gap: 15px; justify-content: center; width: 100%; align-self: center; padding-top: 20px;"> --> <div style="display: flex; flex-direction: column; align-items: center; padding-top: 15px; width: 100%; justify-content: center; gap: 10px;"> <div style="justify-content: center; display: flex; width: 20%;"> <button class="selected" id="frog-original-button" style="font-size: 15px; width: 100px; text-align: center;">Original</button> </div> <div style="justify-content: center; display: flex; width: 20%;"> <button id="frog-corrupted-button" style="font-size: 15px; width: 100px; text-align: center; justify-content: center; display: flex;">Corrupted</button> </div> </div> <p> Input images on the left are taken from <a href="https://vision.seas.harvard.edu/qsfs/index.html" target="_blank">Xiong et al., 2012</a> (click image to cycle through). Corrupted versions were generated as part of the project. The reconstructed surface is shown on the right (drag to rotate). </p> <p> The basic photometric stereo method assumes that surfaces are perfectly <i>Lambertian</i>, and as such suffers in the presence of image noise and <i>specular</i> (shiny) surfaces. The project aims to derive, implement and evaluate a robust algorithm on these trickier cases. <br><br> The codebase contains three main features: <ul> <li>A pipeline for "corrupting" images with image noise and specular highlights.</li> <li>A robust Sparse Bayesian Learning solver for Photometric Stereo (<a href="https://ieeexplore.ieee.org/abstract/document/6247691" target="_blank">Ikehata et al., 2012</a>).</li> <li>A normal smoothing algorithm derived from <a href="https://ieeexplore.ieee.org/abstract/document/1310211" target="_blank">Jones, Durand and Zweiker (2004)</a>.</li> </ul> </p> </div> <!-- <img src="imgs/admh.jpg" class="image-smaller" style="margin-top: 25px;"> --> </div> </div> <div class="content-container" id="music" style="display: none;"> <div class="body-text"> <h1 id="music-spotlight" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('spotlight')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Spotlight </h1> <div class="content-collapsible" id="spotlight-collapsible"> <iframe width="100%" height="600" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2060612940&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/admh" title="adm" target="_blank" style="color: #cccccc; text-decoration: none;">adm</a> · <a href="https://soundcloud.com/admh/zoning-mix-250322" title="Zoning Mix 250322" target="_blank" style="color: #cccccc; text-decoration: none;">Zoning Mix 250322</a></div> </div> <h1 id="artist" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('artist')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Profile </h1> <div class="content-collapsible" id="artist-collapsible"> <img src="imgs/amber.jpeg" alt="adm Artist Picture" class="image-small" loading="lazy"> <div class="icons"> <!-- spotify --> <a href="https://open.spotify.com/artist/0cgkCGZA8SOxUVvg0eTc4k?si=POLiC3HKRN2oZC7ysMNOIw" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="25 50 250 250" width="100%" height="100%"> <path d="M 103.569 73.799 L 178.953 30.771 L 179.62 61.791 L 287.358 38.109 L 266.344 150.517 L 304.37 137.175 L 286.691 229.903 L 189.293 274.6 L 207.305 230.57 L 118.579 289.61 L 50.867 256.254 L 71.548 246.581 L 9.84 152.518 L 30.187 160.857 L 25.517 55.787 L 103.569 73.799 Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-20 -10 100 100" width="100%" height="100%"> <path d="M32 0C14.3 0 0 14.337 0 32c0 17.7 14.337 32 32 32 17.7 0 32-14.337 32-32S49.663 0 32 0zm14.68 46.184c-.573.956-1.797 1.223-2.753.65-7.532-4.588-16.975-5.62-28.14-3.097-1.07.23-2.14-.42-2.37-1.49s.42-2.14 1.49-2.37c12.196-2.79 22.67-1.606 31.082 3.556a2 2 0 0 1 .688 2.753zm3.9-8.717c-.726 1.185-2.256 1.53-3.44.84-8.602-5.276-21.716-6.805-31.885-3.747-1.338.382-2.714-.344-3.097-1.644-.382-1.338.344-2.714 1.682-3.097 11.622-3.517 26.074-1.835 35.976 4.244 1.147.688 1.49 2.217.765 3.403zm.344-9.1c-10.323-6.117-27.336-6.69-37.2-3.708-1.568.497-3.25-.42-3.747-1.988s.42-3.25 1.988-3.747c11.317-3.44 30.127-2.753 41.98 4.282 1.415.84 1.873 2.676 1.032 4.09-.765 1.453-2.638 1.912-4.053 1.07z" ></path> </svg> </a> <!-- apple music --> <a href="https://music.apple.com/za/artist/adm/1482498362" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-20 45 400 400" width="100%" height="100%"> <path d="M 82.221 102.151 L 47.198 39.109 L 113.242 18.429 L 204.636 16.428 L 106.905 59.79 L 139.26 87.809 L 276.017 54.787 L 294.696 116.828 L 354.736 16.094 L 390.427 127.502 L 263.342 183.205 L 392.095 181.871 L 407.438 154.186 L 354.069 285.607 L 326.384 223.899 L 242.995 298.616 L 307.705 325.3 L 297.698 404.019 L 121.915 426.368 L 53.202 327.302 L 81.554 283.939 L 16.845 332.305 L 7.171 41.444 L 82.221 102.151 Z"> </path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-400 -150 1670 1670" width="100%" height="100%"> <path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z" ></path> </svg> </a> <!-- youtube --> <a href="https://www.youtube.com/channel/UCKGXOmDSEYUAPw2jx0egGyg" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="30 50 230 230" width="100%" height="100%"> <path d="M 93.896 107.822 L 52.535 46.114 L 144.263 79.47 L 233.656 54.453 L 208.973 97.482 L 281.688 71.464 L 281.021 168.863 L 223.316 223.566 L 186.291 188.209 L 222.315 239.576 L 80.22 244.913 L 92.562 230.904 L 25.183 207.555 L 27.185 171.197 L 16.177 158.522 L 42.195 152.185 L 29.52 23.432 L 93.896 107.822 Z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M27.9727 3.12324C27.6435 1.89323 26.6768 0.926623 25.4468 0.597366C23.2197 2.24288e-07 14.285 0 14.285 0C14.285 0 5.35042 2.24288e-07 3.12323 0.597366C1.89323 0.926623 0.926623 1.89323 0.597366 3.12324C2.24288e-07 5.35042 0 10 0 10C0 10 2.24288e-07 14.6496 0.597366 16.8768C0.926623 18.1068 1.89323 19.0734 3.12323 19.4026C5.35042 20 14.285 20 14.285 20C14.285 20 23.2197 20 25.4468 19.4026C26.6768 19.0734 27.6435 18.1068 27.9727 16.8768C28.5701 14.6496 28.5701 10 28.5701 10C28.5701 10 28.5677 5.35042 27.9727 3.12324Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M11.4253 14.2854L18.8477 10.0004L11.4253 5.71533V14.2854Z" ></path> </svg> </a> <!-- soundcloud --> <a href="https://soundcloud.com/admh?utm_source=clipboard&utm_medium=text&utm_campaign=social_sharing" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="40 40 350 350" width="100%" height="100%"> <path d="M 95.564 130.837 L 77.885 98.482 L 159.94 133.839 L 273.682 91.478 L 358.406 103.152 L 413.442 172.198 L 367.745 253.586 L 405.437 278.269 L 283.689 279.937 L 330.387 403.352 L 242.328 287.275 L 169.28 314.293 L 234.99 373.999 L 95.564 348.983 L 138.592 256.921 L 56.871 335.64 L 15.51 244.246 L 95.564 130.837 Z"> </path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-70 -20 400 400" width="100%" height="100%"> <g id="XMLID_526_"> <path id="XMLID_527_" d="M14.492,208.896c0.619,0,1.143-0.509,1.232-1.226l3.365-26.671l-3.355-27.278 c-0.1-0.717-0.623-1.23-1.242-1.23c-0.635,0-1.176,0.524-1.26,1.23l-2.941,27.278l2.941,26.662 C13.316,208.377,13.857,208.896,14.492,208.896z"/> <path id="XMLID_530_" d="M3.397,198.752c0.608,0,1.101-0.473,1.19-1.18l2.608-16.574l-2.608-16.884 c-0.09-0.685-0.582-1.18-1.19-1.18c-0.635,0-1.127,0.495-1.217,1.19L0,180.999l2.18,16.569 C2.27,198.269,2.762,198.752,3.397,198.752z"/> <path id="XMLID_531_" d="M27.762,148.644c-0.08-0.867-0.715-1.5-1.503-1.5c-0.782,0-1.418,0.633-1.491,1.5l-2.811,32.355 l2.811,31.174c0.073,0.862,0.709,1.487,1.491,1.487c0.788,0,1.423-0.625,1.503-1.487l3.18-31.174L27.762,148.644z"/> <path id="XMLID_532_" d="M38.152,214.916c0.922,0,1.668-0.759,1.758-1.751l3.005-32.156l-3.005-33.258 c-0.09-0.999-0.836-1.749-1.758-1.749c-0.935,0-1.692,0.751-1.756,1.754l-2.656,33.253l2.656,32.156 C36.46,214.158,37.217,214.916,38.152,214.916z"/> <path id="XMLID_533_" d="M50.127,215.438c1.074,0,1.936-0.86,2.025-2.011l-0.01,0.008l2.83-32.426l-2.83-30.857 c-0.08-1.132-0.941-2.005-2.016-2.005c-1.09,0-1.947,0.873-2.012,2.014l-2.502,30.849l2.502,32.418 C48.18,214.578,49.037,215.438,50.127,215.438z"/> <path id="XMLID_534_" d="M67.132,181.017l-2.655-50.172c-0.074-1.272-1.065-2.286-2.281-2.286c-1.207,0-2.195,1.013-2.269,2.286 l-2.35,50.172l2.35,32.418c0.074,1.278,1.063,2.278,2.269,2.278c1.217,0,2.207-1,2.281-2.278v0.009L67.132,181.017z"/> <path id="XMLID_535_" d="M74.386,215.766c1.339,0,2.45-1.111,2.513-2.529v0.021l2.482-32.233l-2.482-61.656 c-0.063-1.418-1.174-2.529-2.513-2.529c-1.37,0-2.471,1.111-2.545,2.529l-2.185,61.656l2.195,32.222 C71.915,214.655,73.016,215.766,74.386,215.766z"/> <path id="XMLID_536_" d="M86.645,111.435c-1.508,0-2.725,1.238-2.787,2.799l-2.033,66.801l2.033,31.884 c0.063,1.553,1.279,2.783,2.787,2.783c1.504,0,2.73-1.22,2.783-2.788v0.016l2.307-31.895l-2.307-66.801 C89.375,112.663,88.148,111.435,86.645,111.435z"/> <path id="XMLID_782_" d="M99.01,215.766c1.656,0,2.975-1.336,3.037-3.056v0.019l2.133-31.693l-2.133-69.045 c-0.063-1.714-1.381-3.056-3.037-3.056c-1.666,0-3.005,1.342-3.031,3.056l-1.916,69.045l1.916,31.693 C96.005,214.43,97.344,215.766,99.01,215.766z"/> <path id="XMLID_783_" d="M111.477,215.734c1.787,0,3.237-1.463,3.291-3.318v0.029l1.963-31.404l-1.963-67.289 c-0.054-1.854-1.504-3.311-3.291-3.311c-1.8,0-3.25,1.456-3.303,3.311l-1.725,67.289l1.736,31.389 C108.227,214.271,109.677,215.734,111.477,215.734z"/> <path id="XMLID_784_" d="M129.359,181.041l-1.777-64.836c-0.043-2-1.609-3.571-3.551-3.571c-1.947,0-3.514,1.571-3.555,3.584 l-1.594,64.823l1.594,31.198c0.041,1.984,1.607,3.556,3.555,3.556c1.941,0,3.508-1.572,3.551-3.585v0.029L129.359,181.041z"/> <path id="XMLID_785_" d="M136.682,215.853c2.064,0,3.773-1.717,3.805-3.828v0.017l1.613-30.984l-1.613-77.153 c-0.031-2.119-1.74-3.833-3.805-3.833c-2.063,0-3.767,1.722-3.809,3.844l-1.434,77.111l1.434,31.016 C132.915,214.136,134.619,215.853,136.682,215.853z"/> <path id="XMLID_786_" d="M149.291,92.814c-2.229,0-4.037,1.849-4.074,4.103l-1.667,84.151l1.677,30.526 c0.027,2.225,1.836,4.068,4.064,4.068c2.195,0,4.037-1.844,4.047-4.105v0.037l1.82-30.526l-1.82-84.151 C153.328,94.655,151.486,92.814,149.291,92.814z"/> <path id="XMLID_787_" d="M160.82,215.882c0.09,0.008,101.623,0.056,102.275,0.056c20.385,0,36.904-16.722,36.904-37.357 c0-20.624-16.52-37.349-36.904-37.349c-5.059,0-9.879,1.034-14.275,2.907c-2.922-33.671-30.815-60.077-64.842-60.077 c-8.318,0-16.429,1.662-23.593,4.469c-2.788,1.09-3.534,2.214-3.556,4.392v118.539C156.861,213.752,158.607,215.655,160.82,215.882 z"/> </g> </svg> </a> </div> </div> <h1 id="music-releases" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('releases')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Releases </h1> <div class="content-collapsible" id="releases-collapsible"> <h2 id="aquae" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('aquae')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Aquae </h2> <div class="content-collapsible" id="aquae-collapsible"> <iframe style="border-radius:12px" src="https://open.spotify.com/embed/album/42WqBRIrvpebuy2qOKHIGt?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe> <p> MCADM0 - 1:06 // MCADM1 - 1:57 // MCADM2 - 2:20 // Yep (You Win) - 3:11 // Movie Scene - 0:50 // Pigeon - 3:09 // Bulb - 0:56 // Oza - 2:51 // Tumbler - 0:50 // Time - 2:36 // Dew - 0:47 // Aquae - 2:10 </p> <div class="icons"> <!-- spotify --> <a href="https://open.spotify.com/album/42WqBRIrvpebuy2qOKHIGt?si=GR44E7FLTQ2rAmfUtsU9SQ" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="25 50 250 250" width="100%" height="100%"> <path d="M 103.569 73.799 L 178.953 30.771 L 179.62 61.791 L 287.358 38.109 L 266.344 150.517 L 304.37 137.175 L 286.691 229.903 L 189.293 274.6 L 207.305 230.57 L 118.579 289.61 L 50.867 256.254 L 71.548 246.581 L 9.84 152.518 L 30.187 160.857 L 25.517 55.787 L 103.569 73.799 Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-20 -10 100 100" width="100%" height="100%"> <path d="M32 0C14.3 0 0 14.337 0 32c0 17.7 14.337 32 32 32 17.7 0 32-14.337 32-32S49.663 0 32 0zm14.68 46.184c-.573.956-1.797 1.223-2.753.65-7.532-4.588-16.975-5.62-28.14-3.097-1.07.23-2.14-.42-2.37-1.49s.42-2.14 1.49-2.37c12.196-2.79 22.67-1.606 31.082 3.556a2 2 0 0 1 .688 2.753zm3.9-8.717c-.726 1.185-2.256 1.53-3.44.84-8.602-5.276-21.716-6.805-31.885-3.747-1.338.382-2.714-.344-3.097-1.644-.382-1.338.344-2.714 1.682-3.097 11.622-3.517 26.074-1.835 35.976 4.244 1.147.688 1.49 2.217.765 3.403zm.344-9.1c-10.323-6.117-27.336-6.69-37.2-3.708-1.568.497-3.25-.42-3.747-1.988s.42-3.25 1.988-3.747c11.317-3.44 30.127-2.753 41.98 4.282 1.415.84 1.873 2.676 1.032 4.09-.765 1.453-2.638 1.912-4.053 1.07z" ></path> </svg> </a> <!-- youtube --> <a href="https://www.youtube.com/playlist?list=OLAK5uy_kmITMausddxCMFGChrw5n13DNnaKz3qsM" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="30 50 230 230" width="100%" height="100%"> <path d="M 93.896 107.822 L 52.535 46.114 L 144.263 79.47 L 233.656 54.453 L 208.973 97.482 L 281.688 71.464 L 281.021 168.863 L 223.316 223.566 L 186.291 188.209 L 222.315 239.576 L 80.22 244.913 L 92.562 230.904 L 25.183 207.555 L 27.185 171.197 L 16.177 158.522 L 42.195 152.185 L 29.52 23.432 L 93.896 107.822 Z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M27.9727 3.12324C27.6435 1.89323 26.6768 0.926623 25.4468 0.597366C23.2197 2.24288e-07 14.285 0 14.285 0C14.285 0 5.35042 2.24288e-07 3.12323 0.597366C1.89323 0.926623 0.926623 1.89323 0.597366 3.12324C2.24288e-07 5.35042 0 10 0 10C0 10 2.24288e-07 14.6496 0.597366 16.8768C0.926623 18.1068 1.89323 19.0734 3.12323 19.4026C5.35042 20 14.285 20 14.285 20C14.285 20 23.2197 20 25.4468 19.4026C26.6768 19.0734 27.6435 18.1068 27.9727 16.8768C28.5701 14.6496 28.5701 10 28.5701 10C28.5701 10 28.5677 5.35042 27.9727 3.12324Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M11.4253 14.2854L18.8477 10.0004L11.4253 5.71533V14.2854Z" ></path> </svg> </a> <!-- apple music --> <a href="https://music.apple.com/gb/album/aquae/1763563135" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-20 45 400 400" width="100%" height="100%"> <path d="M 82.221 102.151 L 47.198 39.109 L 113.242 18.429 L 204.636 16.428 L 106.905 59.79 L 139.26 87.809 L 276.017 54.787 L 294.696 116.828 L 354.736 16.094 L 390.427 127.502 L 263.342 183.205 L 392.095 181.871 L 407.438 154.186 L 354.069 285.607 L 326.384 223.899 L 242.995 298.616 L 307.705 325.3 L 297.698 404.019 L 121.915 426.368 L 53.202 327.302 L 81.554 283.939 L 16.845 332.305 L 7.171 41.444 L 82.221 102.151 Z"> </path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-400 -150 1670 1670" width="100%" height="100%"> <path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z" ></path> </svg> </a> </div> <img src="imgs/aquae grids tracks.jpg" alt="Aquae Tracklist" class="image" loading="lazy"> </div> <h2 id="jet-black" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('jet-black')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Jet Black </h2> <!-- <img src="imgs/jet black.jpg" alt="Jet Black Cover Art" class="image" loading="lazy"> --> <div class="content-collapsible" id="jet-black-collapsible"> <iframe style="border-radius:12px" src="https://open.spotify.com/embed/album/5UjAwzgyuEm1s0TqR912ac?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe> <p> Big L (Intro) - 2:14 // Ahmad Also Impressed Me - 2:44 // Tempo - 1:36 // Olhool - 2:22 // Alsemanche - 3:33 // Astro Black x3 - 3:06 // Hunter - 2:50 </p> <div class="icons"> <!-- spotify --> <a href="https://open.spotify.com/album/5UjAwzgyuEm1s0TqR912ac?si=wGn5DtKxT-6XfayFP36RoQ" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="25 50 250 250" width="100%" height="100%"> <path d="M 103.569 73.799 L 178.953 30.771 L 179.62 61.791 L 287.358 38.109 L 266.344 150.517 L 304.37 137.175 L 286.691 229.903 L 189.293 274.6 L 207.305 230.57 L 118.579 289.61 L 50.867 256.254 L 71.548 246.581 L 9.84 152.518 L 30.187 160.857 L 25.517 55.787 L 103.569 73.799 Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-20 -10 100 100" width="100%" height="100%"> <path d="M32 0C14.3 0 0 14.337 0 32c0 17.7 14.337 32 32 32 17.7 0 32-14.337 32-32S49.663 0 32 0zm14.68 46.184c-.573.956-1.797 1.223-2.753.65-7.532-4.588-16.975-5.62-28.14-3.097-1.07.23-2.14-.42-2.37-1.49s.42-2.14 1.49-2.37c12.196-2.79 22.67-1.606 31.082 3.556a2 2 0 0 1 .688 2.753zm3.9-8.717c-.726 1.185-2.256 1.53-3.44.84-8.602-5.276-21.716-6.805-31.885-3.747-1.338.382-2.714-.344-3.097-1.644-.382-1.338.344-2.714 1.682-3.097 11.622-3.517 26.074-1.835 35.976 4.244 1.147.688 1.49 2.217.765 3.403zm.344-9.1c-10.323-6.117-27.336-6.69-37.2-3.708-1.568.497-3.25-.42-3.747-1.988s.42-3.25 1.988-3.747c11.317-3.44 30.127-2.753 41.98 4.282 1.415.84 1.873 2.676 1.032 4.09-.765 1.453-2.638 1.912-4.053 1.07z" ></path> </svg> </a> <!-- youtube --> <a href="https://youtube.com/playlist?list=OLAK5uy_kE1MOHDgR-VYJP0CYpPYmHu95ywUXQxks&si=QRplIrsblBBsqO4Z" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="30 50 230 230" width="100%" height="100%"> <path d="M 93.896 107.822 L 52.535 46.114 L 144.263 79.47 L 233.656 54.453 L 208.973 97.482 L 281.688 71.464 L 281.021 168.863 L 223.316 223.566 L 186.291 188.209 L 222.315 239.576 L 80.22 244.913 L 92.562 230.904 L 25.183 207.555 L 27.185 171.197 L 16.177 158.522 L 42.195 152.185 L 29.52 23.432 L 93.896 107.822 Z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M27.9727 3.12324C27.6435 1.89323 26.6768 0.926623 25.4468 0.597366C23.2197 2.24288e-07 14.285 0 14.285 0C14.285 0 5.35042 2.24288e-07 3.12323 0.597366C1.89323 0.926623 0.926623 1.89323 0.597366 3.12324C2.24288e-07 5.35042 0 10 0 10C0 10 2.24288e-07 14.6496 0.597366 16.8768C0.926623 18.1068 1.89323 19.0734 3.12323 19.4026C5.35042 20 14.285 20 14.285 20C14.285 20 23.2197 20 25.4468 19.4026C26.6768 19.0734 27.6435 18.1068 27.9727 16.8768C28.5701 14.6496 28.5701 10 28.5701 10C28.5701 10 28.5677 5.35042 27.9727 3.12324Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M11.4253 14.2854L18.8477 10.0004L11.4253 5.71533V14.2854Z" ></path> </svg> </a> <!-- apple music --> <a href="https://music.apple.com/ca/album/jet-black/1715095878" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-20 45 400 400" width="100%" height="100%"> <path d="M 82.221 102.151 L 47.198 39.109 L 113.242 18.429 L 204.636 16.428 L 106.905 59.79 L 139.26 87.809 L 276.017 54.787 L 294.696 116.828 L 354.736 16.094 L 390.427 127.502 L 263.342 183.205 L 392.095 181.871 L 407.438 154.186 L 354.069 285.607 L 326.384 223.899 L 242.995 298.616 L 307.705 325.3 L 297.698 404.019 L 121.915 426.368 L 53.202 327.302 L 81.554 283.939 L 16.845 332.305 L 7.171 41.444 L 82.221 102.151 Z"> </path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-400 -150 1670 1670" width="100%" height="100%"> <path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z" ></path> </svg> </a> </div> </div> <h2 id="astro-white" class="section-head" onclick="if (!window.__cfRLUnblockHandlers) return false; toggleCollapsible('astro-white')" data-cf-modified-02119b18052e9bef4a5439d5-=""> Astro White </h2> <!-- <img src="imgs/astro white.jpg" alt="Astro White Cover Art" class="image" loading="lazy"> --> <div class="content-collapsible" id="astro-white-collapsible"> <iframe style="border-radius:12px" src="https://open.spotify.com/embed/album/3gPAFIxS7lFZRJY9Cqcuw9?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe> <p> 84_shyne_21-11-09 - 2:05 // mulch (cou.1) - 1:56 // IYA_92.5 - 2.11 // 211212.iwywh.93 - 2:28 // 87_grit_v1 - 1:57 // fuzz_long_ver_89 - 2:44 // 220606.down_v2 (new drums) - 1:58 // studio.94 - 1:30 // static_v2_92 - 1:03 // duster - 2:47 </p> <div class="icons"> <!-- spotify --> <a href="https://open.spotify.com/album/3gPAFIxS7lFZRJY9Cqcuw9?si=ddmH-lXPT3CY0rcb8j-BOQ" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="25 50 250 250" width="100%" height="100%"> <path d="M 103.569 73.799 L 178.953 30.771 L 179.62 61.791 L 287.358 38.109 L 266.344 150.517 L 304.37 137.175 L 286.691 229.903 L 189.293 274.6 L 207.305 230.57 L 118.579 289.61 L 50.867 256.254 L 71.548 246.581 L 9.84 152.518 L 30.187 160.857 L 25.517 55.787 L 103.569 73.799 Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-20 -10 100 100" width="100%" height="100%"> <path d="M32 0C14.3 0 0 14.337 0 32c0 17.7 14.337 32 32 32 17.7 0 32-14.337 32-32S49.663 0 32 0zm14.68 46.184c-.573.956-1.797 1.223-2.753.65-7.532-4.588-16.975-5.62-28.14-3.097-1.07.23-2.14-.42-2.37-1.49s.42-2.14 1.49-2.37c12.196-2.79 22.67-1.606 31.082 3.556a2 2 0 0 1 .688 2.753zm3.9-8.717c-.726 1.185-2.256 1.53-3.44.84-8.602-5.276-21.716-6.805-31.885-3.747-1.338.382-2.714-.344-3.097-1.644-.382-1.338.344-2.714 1.682-3.097 11.622-3.517 26.074-1.835 35.976 4.244 1.147.688 1.49 2.217.765 3.403zm.344-9.1c-10.323-6.117-27.336-6.69-37.2-3.708-1.568.497-3.25-.42-3.747-1.988s.42-3.25 1.988-3.747c11.317-3.44 30.127-2.753 41.98 4.282 1.415.84 1.873 2.676 1.032 4.09-.765 1.453-2.638 1.912-4.053 1.07z" ></path> </svg> </a> <!-- youtube --> <a href="https://youtube.com/playlist?list=OLAK5uy_mfaV0mbP4ApKWb5T33l20j1mRHPgjzeJM&si=f1MDvEmgtVFGRzL3" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="30 50 230 230" width="100%" height="100%"> <path d="M 93.896 107.822 L 52.535 46.114 L 144.263 79.47 L 233.656 54.453 L 208.973 97.482 L 281.688 71.464 L 281.021 168.863 L 223.316 223.566 L 186.291 188.209 L 222.315 239.576 L 80.22 244.913 L 92.562 230.904 L 25.183 207.555 L 27.185 171.197 L 16.177 158.522 L 42.195 152.185 L 29.52 23.432 L 93.896 107.822 Z"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M27.9727 3.12324C27.6435 1.89323 26.6768 0.926623 25.4468 0.597366C23.2197 2.24288e-07 14.285 0 14.285 0C14.285 0 5.35042 2.24288e-07 3.12323 0.597366C1.89323 0.926623 0.926623 1.89323 0.597366 3.12324C2.24288e-07 5.35042 0 10 0 10C0 10 2.24288e-07 14.6496 0.597366 16.8768C0.926623 18.1068 1.89323 19.0734 3.12323 19.4026C5.35042 20 14.285 20 14.285 20C14.285 20 23.2197 20 25.4468 19.4026C26.6768 19.0734 27.6435 18.1068 27.9727 16.8768C28.5701 14.6496 28.5701 10 28.5701 10C28.5701 10 28.5677 5.35042 27.9727 3.12324Z" ></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-4 -5 35 35" width="100%" height="100%"> <path d="M11.4253 14.2854L18.8477 10.0004L11.4253 5.71533V14.2854Z" ></path> </svg> </a> <!-- apple music --> <a href="https://music.apple.com/za/album/astro-white/1650860764" target="_blank" class="logo-container"> <svg xmlns="http://www.w3.org/2000/svg" class="logo2" preserveAspectRatio="xMidYMid meet" viewBox="-20 45 400 400" width="100%" height="100%"> <path d="M 82.221 102.151 L 47.198 39.109 L 113.242 18.429 L 204.636 16.428 L 106.905 59.79 L 139.26 87.809 L 276.017 54.787 L 294.696 116.828 L 354.736 16.094 L 390.427 127.502 L 263.342 183.205 L 392.095 181.871 L 407.438 154.186 L 354.069 285.607 L 326.384 223.899 L 242.995 298.616 L 307.705 325.3 L 297.698 404.019 L 121.915 426.368 L 53.202 327.302 L 81.554 283.939 L 16.845 332.305 L 7.171 41.444 L 82.221 102.151 Z"> </path> </svg> <svg xmlns="http://www.w3.org/2000/svg" class="logo" preserveAspectRatio="xMidYMid meet" viewBox="-400 -150 1670 1670" width="100%" height="100%"> <path d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z" ></path> </svg> </a> </div> </div> </div> </div> </div> <div class="content-container" id="contact" style="display: none;"> <div class="body-text"> <h1> Contact </h1> <p> Email: <a href="/cdn-cgi/l/email-protection#533237323e1332373e3b3b7d303c3e"><span class="__cf_email__" data-cfemail="1475707579547570797c7c3a777b79">[email protected]</span></a> </p> <p> Website: <a onclick="if (!window.__cfRLUnblockHandlers) return false; recurseSite()" data-cf-modified-02119b18052e9bef4a5439d5-="">https://admhh.com</a> </p> </div> </div> <button class="colour-box" onclick="if (!window.__cfRLUnblockHandlers) return false; chooseColour()" id="colour-box" title="colour-picker" data-cf-modified-02119b18052e9bef4a5439d5-=""></button> <div class="colour-picker" style="display: none;"> <button id="colour-red" onclick="if (!window.__cfRLUnblockHandlers) return false; setColour('red')" style="position: fixed; bottom: 90px; right: 50px; width: 40px; height: 40px; cursor: pointer; background-color: var(--colour-red); border: none;" data-cf-modified-02119b18052e9bef4a5439d5-=""></button> <button id="colour-green" onclick="if (!window.__cfRLUnblockHandlers) return false; setColour('green')" style="position: fixed; bottom: 90px; right: 10px; width: 40px; height: 40px; cursor: pointer; background-color: var(--colour-green); border: none;" data-cf-modified-02119b18052e9bef4a5439d5-=""></button> <button id="colour-blue" onclick="if (!window.__cfRLUnblockHandlers) return false; setColour('blue')" style="position: fixed; bottom: 50px; right: 50px; width: 40px; height: 40px; cursor: pointer; background-color: var(--colour-blue); border: none;" data-cf-modified-02119b18052e9bef4a5439d5-=""></button> <!-- https://stackoverflow.com/questions/11167281/webkit-css-to-control-the-box-around-the-color-in-an-inputtype-color --> <div id="colour-picker-wrapper" style="position: fixed; bottom: 50px; right: 10px; width: 40px; height: 40px; cursor: pointer; background-color: var(--custom-colour); border: none;"> <input type="color" id="colour-custom" value="#535353" onclick="if (!window.__cfRLUnblockHandlers) return false; setColour(this.value, false)" oninput="if (!window.__cfRLUnblockHandlers) return false; setColour(this.value, false)" onblur="if (!window.__cfRLUnblockHandlers) return false; setColour(this.value, true)" style="position: fixed; bottom: 50px; right: 10px; width: 40px; height: 40px; cursor: pointer; background-color: var(--custom-colour); border: none; opacity: 0;" data-cf-modified-02119b18052e9bef4a5439d5-=""> <svg id="colour-picker-pen" xmlns="http://www.w3.org/2000/svg" viewBox="-22 -25 162.88 161.51"><title>Pick Colour</title> <path d="M28.66,1.64H58.88L44.46,16.71H28.66a13.52,13.52,0,0,0-9.59,4l0,0a13.52,13.52,0,0,0-4,9.59v76.14H91.21a13.5,13.5,0,0,0,9.59-4l0,0a13.5,13.5,0,0,0,4-9.59V77.3l15.07-15.74V92.85a28.6,28.6,0,0,1-8.41,20.22l0,.05a28.58,28.58,0,0,1-20.2,8.39H11.5a11.47,11.47,0,0,1-8.1-3.37l0,0A11.52,11.52,0,0,1,0,110V30.3A28.58,28.58,0,0,1,8.41,10.09L8.46,10a28.58,28.58,0,0,1,20.2-8.4ZM73,76.47l-29.42,6,4.25-31.31L73,76.47ZM57.13,41.68,96.3.91A2.74,2.74,0,0,1,99.69.38l22.48,21.76a2.39,2.39,0,0,1-.19,3.57L82.28,67,57.13,41.68Z" fill="var(--secondary-colour)" /> </svg> </div> </div> </div> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script language="JavaScript" type="02119b18052e9bef4a5439d5-text/javascript"> // Get the root element var r = document.querySelector(':root'); // trackers for frog image document.frog_index = 0; document.frog_prefix = ''; // do links work? var navigation_enabled = true; // current page var current_page = 'main'; // is navbar open var navbar_open = true; // decide whether to render in portrait (mobile) or landscape (desktop) document.getOrientation = function() { if (window.innerWidth <= 700 || (window.innerHeight / window.innerWidth) >= 2) { return 'portrait'; } else { return 'landscape'; } } function resize_links() { const orientation = document.getOrientation(); if (orientation == 'portrait') { // hide all other navigation buttons var links_outer = document.querySelectorAll(".link-outer"); for (var i = 0; i < links_outer.length; i++) { if (links_outer[i].id == current_page + "-link-outer") { links_outer[i].style.display = "flex" } else { links_outer[i].style.display = "none" } } navbar_open = false; } else { // show all navigation buttons var links_outer = document.querySelectorAll(".link-outer"); for (var i = 0; i < links_outer.length; i++) { links_outer[i].style.display = "flex" } } var radius = 25; var link_height = 80; var link_width = Math.round(window.innerWidth / 5); if (orientation == 'portrait') { link_width = window.innerWidth - 100; var navbars = document.querySelectorAll(".navbar"); // set navbar to vertical for (var i = 0; i < navbars.length; i++) { navbars[i].style.flexDirection = "column"; } } else { var navbars = document.querySelectorAll(".navbar"); // set navbar to horizonal for (var i = 0; i < navbars.length; i++) { navbars[i].style.flexDirection = "row"; } } var links_outer = document.querySelectorAll(".link-outer"); for (var i = 0; i < links_outer.length; i++) { links_outer[i].style.width = link_width + "px"; links_outer[i].style.borderRadius = radius + "px"; links_outer[i].style.height = link_height + "px"; // center links if the screen is below a certain resolution if (window.innerWidth <= 700) { links_outer[i].style.margin = "auto"; } else { links_outer[i].style.margin = "0px"; } } var links = document.querySelectorAll(".link"); for (var i = 0; i < links.length; i++) { links[i].style.width = ( link_width - (2 * (radius - (radius / Math.sqrt(2)))) + 2 ) + "px"; links[i].style.height = (link_height - (2 * (radius - (radius / Math.sqrt(2)))) + 2) + "px"; const link_text = links[i].childNodes[1]; link_text.innerText = link_text.innerText.replace(' ▼', ''); // add / remove triangles if (links[i].id == current_page + "-link") { links[i].className = "link active" if (orientation == 'portrait' && !navbar_open) { link_text.innerText += ' ▼'; } } else { links[i].className = "link" } } var navbars = document.querySelectorAll(".navbar"); for (var i = 0; i < navbars.length; i++) { navbars[i].style.height = window.innerHeight; } // fudge wrapping of text in links // this is not very robust - only works at regular text size text = document.getElementById("main-link-text"); if ((window.innerWidth <= 1072 && orientation == 'landscape') || window.innerWidth <= 345) { text.style.paddingTop = "0.24em"; } else { text.style.paddingTop = "1.2em"; } // text = document.getElementById("work-link-text"); // if ((window.innerWidth <= 777 && orientation == 'landscape') || window.innerWidth <= 255) { // text.style.paddingTop = "0.24em"; // } else { // text.style.paddingTop = "1.2em"; // } } function showPage(key) { if (navigation_enabled) { // if in portrait mode, hide other headers const orientation = document.getOrientation(); if (orientation == 'portrait' && navbar_open) { // hide all other navigation buttons var links_outer = document.querySelectorAll(".link-outer"); for (var i = 0; i < links_outer.length; i++) { if (links_outer[i].id == key + "-link-outer") { links_outer[i].style.display = "flex" } else { links_outer[i].style.display = "none" const arrow = document.getElementById('nav-arrow'); if (arrow != null && links_outer[i].id == key + "-link-outer") { links_outer[i].removeChild(arrow); } } } navbar_open = false; } else { // show all navigation buttons var links_outer = document.querySelectorAll(".link-outer"); for (var i = 0; i < links_outer.length; i++) { links_outer[i].style.display = "flex" } navbar_open = true; } // update appearance of nav links var links = document.querySelectorAll(".link"); for (var i = 0; i < links.length; i++) { const link_text = links[i].childNodes[1]; link_text.innerText = link_text.innerText.replace(' ▼', ''); if (links[i].id == key + "-link") { links[i].className = "link active" if (orientation == 'portrait' && !navbar_open) { link_text.innerText += ' ▼'; } } else { links[i].className = "link" } } var links_outer = document.querySelectorAll(".link-outer"); for (var i = 0; i < links_outer.length; i++) { if (links_outer[i].id == key + "-link-outer") { links_outer[i].className = "link-outer active" } else { links_outer[i].className = "link-outer" } } // show / hide appropriate content var content_containers = document.querySelectorAll(".content-container"); for (var i = 0; i < content_containers.length; i++) { if (content_containers[i].id == key) { content_containers[i].style.display = "block" } else { content_containers[i].style.display = "none" } } if (key == "work") { window.createScene(); } } current_page = key; setCollapsibleHeights(false); } function cycleFrog() { const image = document.getElementById("dissertation-frog-image"); document.frog_index += 1; if (document.frog_index > 19) { document.frog_index = 0; } image.src = "/imgs/frogs/" + document.frog_prefix + document.frog_index + ".png"; const label = document.getElementById("frog-input-label"); label.innerText = "Input [" + (document.frog_index + 1) + "/20]"; } window.onresize = function() { resize_links(); }; window.onload = function() { // handle url params const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); const colour = urlParams.get('colour'); if (colour != null ) { setColour(colour); } const page = urlParams.get('page'); if (page != null && ( page == 'main' || page == 'work' || page == 'music' || page == 'contact' )) { showPage(page); } else { // defaults to main showPage(current_page); } // scroll to an element const target = urlParams.get('target'); if (target != null) { // get the element const element = document.getElementById(target); if (element != null) { element.scrollIntoView({block: "start", inline: "nearest"}); } } resize_links(); setCollapsibleHeights(); }; function toggleCollapsible(id) { const collapsible = document.getElementById(id + '-collapsible') if (collapsible.classList.contains('closed')) { // collapsible.style.height = 'auto' collapsible.style.maxHeight = collapsible.scrollHeight + 'px' // collapsible.style.display = 'block' collapsible.classList.remove('closed') } else { // collapsible.style.height = '0px' // collapsible.style.maxHeight = collapsible.scrollHeight + 'px' collapsible.style.maxHeight = '0px' // collapsible.style.display = 'none' collapsible.classList.add('closed') } } function setCollapsibleHeights(useTransition=true) { const collapsibles = document.querySelectorAll(".content-collapsible"); for (var i = 0; i < collapsibles.length; i++) { const transition = collapsibles[i].style.transition if (!useTransition) { collapsibles[i].style.transition = '' } // collapsibles[i].style.maxHeight = collapsibles[i].scrollHeight + 'px' collapsibles[i].style.maxHeight = '10000px' collapsibles[i].style.transition = transition } } function recurseSite() { // turtles all the way down navigation_enabled = false; var content_containers = document.querySelectorAll(".content-container"); for (var i = 0; i < content_containers.length; i++) { content_containers[i].style.display = "none" } var container = document.createElement('div'); container.style.display = "block"; container.style.textAlign = "center"; container.style.paddingTop = '1.3em' var ifrm = document.createElement('iframe'); const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); var depth = urlParams.get('depth'); if (depth == null) { depth = 0; } ifrm.src = "/index.html?depth=" + (depth+1) + "&colour=" + current_colour; ifrm.style.width = "80%"; ifrm.style.height = "80vh"; ifrm.margin = "10%"; ifrm.display = "block"; ifrm.style.border = "0.1em solid var(--main-colour)"; var quit = document.createElement('a'); // cross character // quit.innerText = '\u{2716}'; quit.innerText = 'x'; quit.style.textAlign = 'center'; quit.classList.add('link-general'); quit.style.marginLeft = 'calc(90% + 0px)'; quit.style.marginRight = '10%'; quit.style.marginBottom = '10px'; quit.style.paddingRight = '6px'; quit.style.paddingLeft = '6px'; quit.style.marginTop = '-1.5em'; quit.style.fontSize = 'larger'; quit.onclick = function () { document.body.removeChild(container); navigation_enabled = true; showPage('contact'); } quit.style.border = "0.07em solid var(--main-colour)"; quit.style.textDecoration = 'none'; container.appendChild(quit); container.appendChild(ifrm); document.body.appendChild(container); } </script> <foreignObject><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="02119b18052e9bef4a5439d5-|49" defer></script></foreignObject></body> </html>