diff --git a/README.md b/README.md index 0b15853..9943b66 100755 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # work.suroh.tk -This is the repo for my homepage. \ No newline at end of file +This is the repo for my homepage. diff --git a/css/master.css b/css/master.css index cbedbb3..da209e0 100644 --- a/css/master.css +++ b/css/master.css @@ -4,7 +4,8 @@ /* --> BASE STYLES <-- */ body { font-family: 'fira code', monospace; - font-size: 1.2em; + font-size: 19px; + line-height: 24px; color: #1e1e3cff; margin: 0; padding: 0; @@ -12,12 +13,37 @@ body { a, a:visited { color: #1e1e3cff; + padding-bottom: 2px; text-decoration: none; + border-bottom: 1px #1e1e3c50 dashed; + transition: color ease 0.5s, border ease 0.2s; +} + +a:hover { + border-bottom: 1px #1e1e3cff solid; + transition: color ease 0.5s, border ease 0.2s; +} + +/* --> LISTS <-- */ +ul { + list-style: none; + margin-left: 16px; + padding-left: 0; +} + +li { + padding: 0.2em 0 0.2em 1em; + text-indent: -0.5em; +} + +li:before { + content: "▸"; + padding-right: 16px; } /* --> NAVIGATION <-- */ nav { - margin: 20px; + margin: 23px 23px 8px; } nav>span { @@ -45,25 +71,24 @@ nav>span.active::after { h1#menuItem { position: absolute; - left: 20px; - bottom: 20px; + line-height: inherit; + bottom: 0; margin: 0; padding: 0; - font-size: 32vw; + font-size: 33vw; opacity: 0; - transform: translateY(300px); + transform: translateY(100px); + transform-origin: bottom left; transition: opacity ease-in-out 0.1s, transform ease-in-out 0.1s; } h1#menuItem.active { opacity: 1 !important; - transform: translateY(0px) !important; + transform: translateY(-100px) !important; } /* --> MAINPAGE CONSTRUCTION <-- */ - section.content { - display: grid; margin: 0; padding: 0; opacity: 0; @@ -79,19 +104,60 @@ section.content.visible { overflow: inherit; } -section.content ul.subMenu { +section.content ul.subMenu { margin: 0; padding: 0; - list-style: none; + list-style: none !important; font-size: 1.5em; } -section.content ul.subMenu li { +section.content ul.subMenu li { border-left: thin solid #d2d2d8; padding: 5px 10px; } -section.content ul.subMenu li:hover { +section.content ul.subMenu li:before { + content: ""; + padding-right: 16px; +} + +section.content ul.subMenu li:hover { background: #d2d2d8; cursor: pointer; } + +/* --> SUBCONTENT CONSTRUCTION <-- */ +section.content.page { + max-width: 1960px; + display: grid; + grid-template-columns: repeat(5, 1fr); + grid-template-rows: repeat(16, 1fr); + grid-gap: 24px; +} + +section.page h1 { + font-size: 8em; + margin: 0px; + padding: 0px; + line-height: 0.95em; +} + +section.content.page div.imgFeat { + grid-column: span 5; + grid-row: 1 / 4: +} + +section.content.page section.imgs { + grid-column: 4 / span 2; + grid-row: 2: +} + +section.content.page section.imgs>img { + max-width: 100%; + height: auto; +} + +section.content.page section.text { + grid-column: 1 / span 3; + grid-row: 2; +} diff --git a/index.html b/index.html index e86684c..dab861c 100755 --- a/index.html +++ b/index.html @@ -24,7 +24,7 @@ -
+

@@ -34,12 +34,155 @@
+ +
+
+
+

fragile mastery

+ +

Fragile Mastery is structured around conversations I had with my peers who are improvising musicians, supported by research on software, improvisation, and collective practices. These bodies of research are applied to my own works and my improvisational practice involving software and music. My interest in software and improvisation has lead me to ask, how can improvisation augment my practice involving music and software?

+ +

Fragile Mastery is the title of my master's thesis which now forms the basis of my work outside of a performance practice. Manifestations of this research have taken the form of printed material, digital intrusions into music performance tools and spaces, installations, and sound recordings. It also heavily influences my pedagogical pursuits where I try and re-consider implications of mastery and value within the insitutions of a university, classroom, workshop or residency.

+ +

My thesis is freely available ony my git repository. It was designed for print using all open source tools, and generated using custom scripts which can also be found on my git.

+ + +
+ + +
+ +
+
+ + +
+
+
+
+ +
+

Euclid

+ +

Tetra Gamma Circulaire 3 was a collaborative work between De Player and the Experimental Publishing Master's path at the Piet Zwart Institute.

+ +

The core theme of the publication was the investigation on score. What is a score's function, historically, and how it can be interpreted today.

+ +

I drew on previous experience with music performance, theory and composition, and decided to continue to explore themes that I had previously been investigating - primarily improvisation.

+ + + +

My piece, Euclid, is an improvisational instrument that aims to explore musical improvisational exploration. It is designed to allow the player to explore its musical possibilities, while requiring active experimentation to master its interface. The music produced by Euclid are based upon Euclidian rhythms, a mathematical system that generates traditional rhythmic patterns. Rather than a noise instrument, the musicality encourages continuous compositional exploration and creates a dialogue between performer and instrument.

+ +

The instrument is controlled via a series of touch conductive points. These points work very differently depending on the environmental, and individual conductivity of the player. The instrument therefore has been designed to adjust and learn from the player as the performance progresses. In turn the performer must learn the unique situationally affected intricacies of the instrument, as well as their own affects, allowing for very different performances of the instrument each time.

+ +

The end result was an interactive, improvisational, chaotic music machine. Its score, a mash of software and numbers, humanly unintelligible, and musically irreproducible.

+ +

This project was the catalyst for my Master's thesis, final project and now forms the base of my current practice and research.

+
+ +
+ + + + + + +
+
+ +
+
+ +
+ + +
+

Autonomous Archive

+ +

The Autonomous Archive was a collaborative project with Giulia de Giovanelli and Franc Gonzalez. Its goal was to build a local “archival-machine” for the historical living-community Vereniging Poortgebouw, based in Rotterdam. By converting the already extensive paper archive onto a digital system, we aimed to encourage further collaborative collection of materials to maps the legality of the Poortgebouw past, present and future.

+ +

The Autonomous Archive is built upon open source software and designed in a way to allow people to interact with the archive and re-activate the documents held within it. It is designed to allow for new interactions and understandings of the archival material, and to develop further outputs.

+ +

The final form of this project manifested in a custom built server using parts sourced from within the community, custom build software to add to the archive, as well as a possible example of the how to re-activate its contents. The server is a Linux system running Debian which hosts a Mediawiki which serves as an interface to the documents in the archive only accessible within the Poortgebouw. Documents are entered into the archive through a command line interface on the server itself, which asks the archivist questions about the document being added, such as categoies, themes, players involved, and the date. The Autonomous Archive then scans the document, and through Optical Character Recognition (OCR) translates the grpahic into editable text, translates it from dutch to english and uploads it onto the wiki in its various new formats.

+ +

As an example of a possible re-activation of the archive, we also developed a way to print a booklet which includes all the content of the wiki. As the Autonomous Archive is only accessible from within the living community, this generated document acted as a way we were able to distribute our ideologies and methodologies employed within the creation and application of the Autonomous Archive.

+ +

This project is still alive today, and has since manifested in a Master's project within the Experimental Publishing pathway at the Piet Zwart institute in their 4th Special Issue, and presented again within the Temporary Autonomous Bureau in 2018 at TENT gallery in Rotterdam.

+ + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+
+ + +
+
+
+
+ +
+

Adelaïde

+ +

Adelaïde is a reactive music video developed in Processing in 24hrs. It was part of a 24 hour music video challenge in collaboration with Le Gaité Lyrique, and french band Requin Chagrin.

+ +

The work was done in collaboration with Sanet Stegmann. The visual style was inspired by the Memphis group of artists and designers from the 1960s. All the forms and patterns were generated in processing and were designed to be animated for the video as well as printed.

+ + + + + +
+ +
+ + + + + +
+
+
@@ -49,14 +192,12 @@
  • postoast
  • -
    +
    - << home - -
    +

    Solo

    My solo practice embraces the unstable nature of improvisation in software and in music. I aim to examine the agency that improvisation can provide in the context of creative software and performance. I build custom software that acts both as an instrument and collaborator which I perform alongside with a combination of digital hardware and traditional musical instruments. Through the employment of these tools I challenge my ingrained jazz improvisational training, and examine creative relationships we can have with machines.

    @@ -73,20 +214,53 @@
    -
    +
    + +
    +
    + +
    + +
    +

    POST TOAST

    + + + +

    Post Toast is an electronic duo currently playing a live meld of hypnotic improvised electronica, techno, hip-hop neo-classical music and down-tempo dystopian futurism. Meeting during our Master's studies Ryan Cherewaty and I found intersecting interests in musical tastes and instrumentation and decided to join forces in our living room.

    + +

    This side project extends my methodology of improvisation in and with software, forcing me further to break from my musical academic training and aesthetics. Post Toast is a moment where I experiment with my ideologies outside of an art music/performance realm. It has since developed from a casual hobby to a formative part of my improvised, software performance practice.

    + + + +
    + +
    + +
    +
    +
    -
    +
    -

    teach content

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute - irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    teaching

    +

    I'm currently engaged in teaching at Paris College of Art & EEMI (l'école éuropéene des métiers de l'internet) in Paris, FR.

    + +

    Experimenting in the realms of design, art, the web, interfaces, music and sound, with undergraduate and master's level students. Some links of our research and work can be found below.

    + +
    diff --git a/js/interaction.js b/js/interaction.js index 06323dd..49bb3a3 100644 --- a/js/interaction.js +++ b/js/interaction.js @@ -1,33 +1,75 @@ // interaction - const primaryNav = document.querySelector('nav') const menuItem = document.querySelector('#menuItem') -const content = document.querySelectorAll('.content') // TODO: (create voice class per button) let menuVoices = [] -const subMenu = (activePage) => { - let menu = document.querySelector(`\#${activePage} \.subMenu`) +const subContent = (active) => { + let parent = document.querySelector(`\#${active}`) + let menu = parent.querySelector(`\.subMenu`) if (menu) { - return menu + return { menu: menu, parent: parent } } else { return null } } -const showContent = (section) => { - for (let sect of content) { - if (c.dataset.link == sect.id) { - sect.className = 'content visible' - } else if (!c.dataset.link) { - sect.className = 'content' +const subMenuListeners = (active) => { + let sc = subContent(active) + if (sc.menu) { + console.log(`You are on ${active} w\/ a menu`) + for (let s of sc.menu.children) { + console.log(s) + s.addEventListener('click', () => { + showContent(s.dataset.link, sc.parent) + }) + } + } else { + console.log(`${active} has no menu`) + } +} + +const showContent = (section, parent = false) => { + console.log(`section: ${section}\nparent: ${parent ? true : false}`) + let query + if (parent) { + console.log(parent) + query = parent.querySelectorAll('.content') + className = `content page` + } else { + query = document.querySelectorAll(`.content`) + className = `content` + } + + console.log(query) + + for (let q of query) { + if (q.id == section) { + console.log(`active id : ${section}`) + subQ = q + q.className = `${className} visible` } else { - sect.className = 'content' + console.log('hiding divs') + q.className = `${className}` + } + } + + console.log(content) +} + +const findContent = (domElement, id) => { + for (let sect of domElement) { + if (id == sect.id) { + return sect + } else { + return null } } } +// --> PRIMARY NAVIGATION +// for (let c of primaryNav.children) { // TODO: (create voice class per button) menuVoices[c.dataset.link] = new Synth(audioEngine) @@ -39,28 +81,17 @@ for (let c of primaryNav.children) { for (let _c of primaryNav.children) { if (c === _c && c.dataset.link != '~') { c.className = 'active' - - if (subMenu(c.dataset.link)) { - for (let s of subMenu(c.dataset.link).children) { - s.addEventListener('click', () => { - console.log(`clicked : ${s.dataset.link}`) - }) - } - } + activePage = c.dataset.link } else { _c.className = '' } } - for (let sect of content) { - if (c.dataset.link == sect.id) { - sect.className = 'content visible' - } else if (!c.dataset.link) { - sect.className = 'content' - } else { - sect.className = 'content' - } - } + // SHOW CONTENT FUNCTION + showContent(c.dataset.link) + + // subPage Render + subMenuListeners(c.dataset.link) }) c.addEventListener('mouseenter', () => { @@ -80,3 +111,14 @@ for (let c of primaryNav.children) { } }) } + +// --> SECONDARY NAVIGATION +// +if (activePage) { + console.log(activePage) + for (let s of subContent(activePage).menu.children) { + s.addEventListener('click', () => { + console.log(`sub menu click \: ${s.dataset.link}`) + }) + } +}