better style, DOS colors, simplified content

This commit is contained in:
randogoth 2025-12-20 11:44:54 +02:00
parent c9b86ba012
commit 8338b702b4
12 changed files with 182 additions and 234 deletions

View file

@ -1,84 +1,27 @@
Title: Curriculum Vitae
Date: 2014-03-14 11:04
Date: 2025-12-20 10:06
Slug: cv
### Professional Fields
* planning and organisation of events
* video-animation, video-production, post-production, video-art, live-video performance
* screen-design, GUI-design
* cultural management
* project management
* development of custom multimedia applications and installations
* software development in python / C / C++ / JavaScript / Max/MSP
* teaching of IT related topics
* bartending
### Artistic Research
* photography
* live cinema
* ambient field recordings
* audiovisual dance performance
* video-animation, video-production, post-production, video-art, live-video
* creative coding
* node based graphical programming
* hardware controllers
* PCB design
* development of custom multimedia applications and installations
### Professional Career
* since 2020 project manager, developer, and consultant at Randonauts LLC
* 2006 - 2020 working as a freelance media artist
* 2013 - 2015 manager of kopiloten coworking space
* 2011 - 2013 coop culture & media office with Silke Müller as “kopiloten”
* 2010 - 2012 bartender at café & bar “Salon Schmück”
* 2005 - 2012 founding member of the management board of VC VisualBerlin e.V.
* 2009 - 2010 Lessing Gymnasium Berlin supervision of a group of students who form a „student company“ specialized on IT support
* 2007 - 2008 freelancer at GP. Gemeinschaftspraxis für Gestaltung
* 2007 multimedia programming for DEON GbR
* 2006 - 2007 freelance Flash work for Ableton AG
* 2004 - 2006 Ableton AG, Berlin, web-administration, graphic-design, Flash animations
* 2005 freelance web development work for Educational Design GmbH
* 2005 lectures and workshops for students on VJing, JuKuFa Brandenburg
* 2005 Fachhochschule Brandenburg Max/Jitter workshop for students
* 2005 Hochschule für Gestaltung Karlsruhe Max/Jitter workshop for students
* 2003-2004 eedo GmbH, Potsdam, content-management, Flash animations
* 2003 Labor Limbach, Heidelberg, inventory & logistics management
* 2003 freelance web developer for freedom2speak film project, Berlinale Film Fest.
* 2002-2003 garderobe23, Berlin, internship web-development, Max/MSP programming and live-video
* 2000-2001 Viviance GmbH, Potsdam, content-management, LaTeX scripting, graphic-design, Flash animations
* 2000 AV Media GmbH, Heidelberg, internship video-production, post-production, multimedia-design
* 1999-2000 geriatric hospital Bethanien, Heidelberg, social service as nurse in rehabilitation ward, temporary work in accounting department
### Artistic Career
* since 1998 media artist
* 2020 - now product manager, developer, and consultant at Randonauts LLC
* 2003 - 2020 freelance media artist and live video performer (VJ)
* 2011 - 2020 co-curator of the [Scope Sessions](http://scopesessions.org)
* 2003 - 2020 VJ / live video performer
* 2009 - 2014 technical consultant and assistant of audiovisual events at Collegium Hungaricum
* 2011 - 2012 assistant of the management of the video-arts association VisualBerlin e.V.
* 2005 2011 member of the management board of VisualBerlin e.V.
* 2010 head coordinator of the visualberlinFestival 2010
* 2010 - 2011 member of the interdisciplinary art collective Fax Nylon Opium Radikalisten
* 2010 member of the live cinema and arts collective übermutanty
* 2009 member of the audiovisual dance performance collective Instant Delay
* 2008 co-organiser of the µ:avit VJ festival
* 2006 co-organiser of the AVIT>C23 VJ festival
* 2005 co-founder of VisualBerlin e.V.
* 2005 - 2008 member of the VJ and Live Cinema collective =ff=
* 2013 - 2015 founder and manager of kopiloten coworking space
* 2011 - 2013 co-founder of kopiloten cultural management office
* 2010 - 2012 Salon Schmück, bartender & service
* 2005 2012 co-founder and member of the management board of VisualBerlin e.V.
* 2009 - 2010 Lessing Gymnasium Berlin, supervision of a student company specialized on IT support
* 2004 - 2007 Ableton AG, Berlin, web-administration, graphic-design, Flash animations
* 2005 - 3005 freelance web development work for Educational Design GmbH
* 2003 - 2004 eedo GmbH, Potsdam, content-management
* 2003 - 2003 Labor Limbach, Heidelberg, inventory & logistics management
* 2002 - 2003 garderobe23, Berlin, internship web-development, media art
* 2000 - 2001 Viviance GmbH, Potsdam, content-management
* 2000 - 2000 AV Media GmbH, Heidelberg, internship video-production
* 1999 - 2000 geriatric hospital Bethanien, Heidelberg, social service as nurse
### Education
* 2000-2009 studies of computer sciences with focus on digital media, Fachhochschule Brandenburg, Brandenburg an der Havel
* 1990-1999 private Gymnasium Englisches Institut Heidelberg, A-Levels (Abitur): 2,3
* 1996-1997 Northwest High School, Justin, TX, USA
* 1994-1996 Jugendkunstschule Heidelberg
* 1986-1990 Eichendorff Grundschule, Heidelberg
### Language Skills
* German (native speaker)
* English (fluent)
* French (basic)
* 2000 - 2009 Digital Media, Fachhochschule Brandenburg, Brandenburg an der Havel
* 1990 - 1999 Gymnasium Englisches Institut Heidelberg
* 1996 - 1997 Northwest High School, Justin, TX, USA
* 1986 - 1990 Eichendorff Grundschule, Heidelberg

View file

@ -2,11 +2,11 @@ Title: Connect
Save_as: connect.html
- <i class="nf nf-md-email_outline"></i> <SCRIPT LANGUAGE="JavaScript">user = 'kflux';site = 'posteo.de';document.write('<a href=\"\x6D\x61\x69\x6C\x74\x6F:' + user + '@' + site + '\">');document.write(user + '@' + site + '</a>');</SCRIPT>
- <i class="nf nf-md-mastodon"></i> [@randogoth](https://universeodon.com/@randogoth)
- <i class="nf nf-md-mastodon"></i> [@randogoth](https://mas.to/@randogoth)
- <i class="nf nf-fae-butterfly"></i> [@randogoth](https://bsky.app/profile/randogoth.bsky.social)
- <i class="nf nf-linux-codeberg"></i> [@randogoth](https://codeberg.org/randogoth)
- <i class="nf nf-cod-github_inverted"></i> [@randogoth](https://github.com/randogoth)
- <i class="nf nf-fae-telegram"></i> [@randogoth](https://t.me/randogoth)
- <i class="nf nf-md-discord"></i> [NN_Solex#1613](https://discordapp.com/users/380023043050962954)
- <i class="nf nf-md-instagram"></i> [@lastfluxunit](https://instagram.com/lastfluxunit)
- <i class="nf nf-fa-facebook_official"></i> [flux.tobias.raayoni.last](https://fb.com/flux.tobias.raayoni.last/)
- <i class="nf nf-fa-flickr"></i> [@kflux](https://www.flickr.com/photos/kflux)
- <i class="nf nf-md-discord"></i> [@randogoth](https://discordapp.com/users/380023043050962954)
- <i class="nf nf-md-instagram"></i> [@randogoth_](https://instagram.com/randogoth_)
- <i class="nf nf-md-linkedin"></i> [@lastfluxunit](https://www.linkedin.com/in/lastfluxunit/)

View file

@ -1,6 +0,0 @@
Title:
Slug: current
Date: 2023-07-05 19:00
Save_as: current.html
Besides my ongoing work for [Randonautica]({filename}../blog/randonautica.md) I am currently creating a project called *<i class="nf nf-md-nfc"></i>uminous Field Communication* that involves using NFC tags as medium for non-linear fiction and location-based storytelling.

View file

@ -10,16 +10,6 @@ Tobias Raayoni Last
- Roaming the borderlands of art and technology, magic and engineering
- Project Manager of the random journey adventure app [Randonautica]({filename}../blog/randonautica.md)
My artistic practice spans various disciplines, including [live video performance]({filename}../blog/kiritanflux.md), installations, [ambient sound]({filename}../blog/crystal-canyons.md) work, and the creation of code and [electronic devices]({filename}../blog/psithemius.md).
Spanning various disciplines, including [live video performance]({filename}../blog/kiritanflux.md), installations, [ambient music]({filename}../blog/crystal-canyons.md), the creation of code and [electronic devices]({filename}../blog/psithemius.md) my creative process often revolves around "*placeness*" and "*temporality*."
-----
<i class="nf nf-oct-location"></i> PLACENESS & TECHNOMANCY <i class="nf nf-md-crystal_ball"></i>
At the core of my creative process has always been the exploration of the interplay between "*placeness*" and "*temporality*." I use *place* as a fundamental agent to inform and shape the content and form of my work, usually by drawing upon the highly subjective concepts of *psychogeography* and the *spirit of place*.
In recent years I have started to incorporate *magical thinking* into my work, especially the more technical pieces. Through earnest and rigorous research in fields like ancient Greco-Egyptian sorcery, modern Chaos Magic, and other questionable practices I explore the boundaries between the material and immaterial and allow my artistic practice to expand into the spiritual.
<i class="nf nf-md-magnify"></i> CURATORSHIP & COLLABORATION <i class="nf nf-md-account_group"></i>
Besides creating and performing art myself I love collaboration, discussion and exchange with other artists. It led me to co-founding and managing an [artist association]({filename}../blog/visualberlin.md), several festivals, and a popular [monthly artist talk series]({filename}../blog/scope.md).
Using *place* as an active agent that informs and shapes both the content and form of my work, I draw on the highly subjective concepts of *psychogeography* and the *spirit of place*. I also incorporate *suspension of disbelief* and *magical thinking* within my practice to explore the boundaries between the material and the immaterial, allowing my creative work to expand into the *metaphysical*.

View file

@ -31,7 +31,7 @@ body {
font-size: 1.4em;
line-height: 1.2em;
text-align: left;
background: #090A0E;
background: #000;
color: #bbb;
height: 100vh;
overflow-x: hidden;
@ -115,7 +115,7 @@ th, td
a {
background-color: #bbb;
color:#090A0E;
color:#000;
padding: 0.2em 0.3em 0em 0.3em;
}
@ -164,10 +164,10 @@ hr
}
abbr {
color: #555;
display: inline;
text-decoration: none;
padding: 0;
float:left;
}
.hentry .entry-summary p {
@ -187,16 +187,6 @@ abbr {
padding: 0;
}
.post-info {
color: #555;
}
.author a {
padding: 0;
background: none;
color: #555;
}
@keyframes cursor-blink {
0% {
opacity: 0;
@ -206,6 +196,7 @@ abbr {
#root {
display: block;
margin-top: 2em;
margin-bottom: 2em;
}
[contenteditable="true"]:active,
@ -240,7 +231,7 @@ blockquote {
border: 1px solid;
margin: 0;
padding: 0 1em;
background: #222;
background: #555;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;

View file

@ -1,5 +1,35 @@
const randomColor = Math.floor(Math.random()*16777215).toString(16);
document.querySelector('#blog-title').firstElementChild.style.backgroundColor = '#' + randomColor;
function pickColors() {
const backgrounds = [
"#000000", // Black
"#0000AA", // Blue
];
const highlights = [
"#00AA00", // Green
"#00AAAA", // Cyan
"#AA00AA", // Magenta
"#AA5500", // Brown
"#AAAA00", // Yellow
"#AA0000", // Red
"#555555", // Dark Gray
"#5555FF", // Bright Blue
"#55FF55", // Bright Green
"#55FFFF", // Bright Cyan
"#FF5555", // Bright Red
"#FF55FF", // Bright Magenta
"#FFFF55", // Bright Yellow
];
return {
// background: backgrounds[Math.floor(Math.random() * backgrounds.length)],
highlight: highlights[Math.floor(Math.random() * highlights.length)],
};
}
const { background, highlight } = pickColors();
document.querySelector('.home').style.backgroundColor = background;
document.querySelector('#blog-title').firstElementChild.style.backgroundColor = highlight;
let scrollHeight = Math.max(
document.body.scrollHeight, document.documentElement.scrollHeight,
@ -28,115 +58,115 @@ window.addEventListener('scroll', () => {
}
});
//components
//console component
class Console{
comps=[];
input_received=false;
blocking_interval=null;
text_color="#bbb";
constructor(root){
this.elem=document.createElement("span");
this.elem.className="console";
root.appendChild(this.elem);
this.resetTextColor();
}
appendComponent(comp){
this.comps.push(comp);
this.elem.appendChild(comp.elem);
}
writeLine(txt){
let text=new Text(txt,this.text_color);
this.appendComponent(text);
}
async readLine(txt){
let text=new Text(txt,this.text_color);
this.appendComponent(text);
let input=new Input(this.text_color);
this.appendComponent(input);
input.elem.focus({ preventScroll: true});
return new Promise(resolve=>{
this.blocking_interval=setInterval(()=>{
if(this.input_received){
this.input_received=false;
clearInterval(this.blocking_interval);
resolve(input.elem.innerText);
}
},500);
})
}
setTextColor(color){
this.text_color=color;
}
resetTextColor(){
this.text_color="#bbb";
}
//helpers
get lastComp(){return this.comps[this.comps.length-1]};
}
//text component
class Text{
constructor(txt,color){
this.elem=document.createElement("span");
this.elem.className="text";
this.elem.style.color=color;
this.elem.innerText=txt;
}
}
//input component
class Input{
constructor(color){
this.elem=document.createElement("span");
this.elem.style.color=color;
this.elem.contentEditable=true;
this.elem.addEventListener('keydown',function(e){
let key=e.key;
if(key=="Enter"){
e.preventDefault();
cmd.input_received=true;
cmd.lastComp.elem.contentEditable=false;
cmd.lastComp.elem.style.borderWidth="0px";
}
});
}
}
// //components
// //console component
// class Console{
// comps=[];
// input_received=false;
// blocking_interval=null;
// text_color="#bbb";
// constructor(root){
// this.elem=document.createElement("span");
// this.elem.className="console";
// root.appendChild(this.elem);
// this.resetTextColor();
// }
// appendComponent(comp){
// this.comps.push(comp);
// this.elem.appendChild(comp.elem);
// }
// writeLine(txt){
// let text=new Text(txt,this.text_color);
// this.appendComponent(text);
// }
// async readLine(txt){
// let text=new Text(txt,this.text_color);
// this.appendComponent(text);
// let input=new Input(this.text_color);
// this.appendComponent(input);
// input.elem.focus({ preventScroll: true});
// return new Promise(resolve=>{
// this.blocking_interval=setInterval(()=>{
// if(this.input_received){
// this.input_received=false;
// clearInterval(this.blocking_interval);
// resolve(input.elem.innerText);
// }
// },500);
// })
// }
// setTextColor(color){
// this.text_color=color;
// }
// resetTextColor(){
// this.text_color="#bbb";
// }
// //helpers
// get lastComp(){return this.comps[this.comps.length-1]};
// }
// //text component
// class Text{
// constructor(txt,color){
// this.elem=document.createElement("span");
// this.elem.className="text";
// this.elem.style.color=color;
// this.elem.innerText=txt;
// }
// }
// //input component
// class Input{
// constructor(color){
// this.elem=document.createElement("span");
// this.elem.style.color=color;
// this.elem.contentEditable=true;
// this.elem.addEventListener('keydown',function(e){
// let key=e.key;
// if(key=="Enter"){
// e.preventDefault();
// cmd.input_received=true;
// cmd.lastComp.elem.contentEditable=false;
// cmd.lastComp.elem.style.borderWidth="0px";
// }
// });
// }
// }
/************************************/
let root=document.getElementById("root");
// /************************************/
// let root=document.getElementById("root");
let cmd=new Console(root);
let prompt = "C:\\>"
async function execute(){
let command= await cmd.readLine(prompt);
if ( command == "projects" ) window.location = "/current.html";
else if ( command == "blog" ) window.location = "/blog";
else if ( command == "archive" ) window.location = "/archive";
else if ( command == "dir" ) window.location = "/archive";
else if ( command == "home" ) window.location = "/";
else if ( command == "connect" ) window.location = "/connect.html";
else if ( command == "reboot" ) location.reload();
else if ( command == "a:" ) {
prompt = "A:\\>";
cmd.writeLine("\n");
cmd=new Console(root);
execute();
}
else if ( command == "b:" ) {
prompt = "B:\\>";
cmd.writeLine("\n");
cmd=new Console(root);
execute();
}
else if ( command == "c:" ) {
prompt = "C:\\>";
cmd.writeLine("\n");
cmd=new Console(root);
execute();
}
else {
cmd.writeLine("\nSyntax error\n");
cmd=new Console(root);
execute();
}
}
execute();
// let cmd=new Console(root);
// let prompt = "C:\\>"
// async function execute(){
// let command= await cmd.readLine(prompt);
// if ( command == "projects" ) window.location = "/current.html";
// else if ( command == "blog" ) window.location = "/blog";
// else if ( command == "archive" ) window.location = "/archive";
// else if ( command == "dir" ) window.location = "/archive";
// else if ( command == "home" ) window.location = "/";
// else if ( command == "connect" ) window.location = "/connect.html";
// else if ( command == "reboot" ) location.reload();
// else if ( command == "a:" ) {
// prompt = "A:\\>";
// cmd.writeLine("\n");
// cmd=new Console(root);
// execute();
// }
// else if ( command == "b:" ) {
// prompt = "B:\\>";
// cmd.writeLine("\n");
// cmd=new Console(root);
// execute();
// }
// else if ( command == "c:" ) {
// prompt = "C:\\>";
// cmd.writeLine("\n");
// cmd=new Console(root);
// execute();
// }
// else {
// cmd.writeLine("\nSyntax error\n");
// cmd=new Console(root);
// execute();
// }
// }
// execute();

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -7,11 +7,11 @@
{% for article in dates if article.category != 'blog' %}
<article class="hentry">
<abbr class="published" title="{{ article.date.isoformat() }}"> {{ article.locale_date }} </abbr>
<header>
<h2 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a>
</h2>
<abbr class="published" title="{{ article.date.isoformat() }}">[{{ article.locale_date }}]&nbsp;</abbr>
<span class="entry-summary">{{ article.summary }}</span>
</header>
</article>

View file

@ -69,7 +69,7 @@
{{ DESCRIPTION }}
</footer><!-- /#contentinfo -->
{% endif %}
<span id="root"></span>
<span id="root">&nbsp;</span>
{% if JS_OVERRIDE %}
<!-- Script specified by the user -->
{% for js in JS_OVERRIDE %}

View file

@ -7,11 +7,11 @@
{% for article in articles_page.object_list %}
<article class="hentry">
<abbr class="published" title="{{ article.date.isoformat() }}"> {{ article.locale_date }} </abbr>
<header>
<h2 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a>
</h2>
<abbr class="published" title="{{ article.date.isoformat() }}">[{{ article.locale_date }}]&nbsp;</abbr>
<span class="entry-summary">{{ article.summary }}</span>
</header>
</article>

View file

@ -38,14 +38,14 @@ MARKDOWN = {
ARTICLE_URL = "{category}/{slug}.html"
ARTICLE_SAVE_AS = "{category}/{slug}.html"
INDEX_SAVE_AS = "archive/all.html"
ARCHIVES_SAVE_AS = 'archive/index.html'
INDEX_SAVE_AS = "projects/all.html"
ARCHIVES_SAVE_AS = 'projects/index.html'
PATH = 'content'
ARTICLE_PATHS = ['blog',]
PAGE_PATHS = ['pages',]
MENUITEMS = [('Current', '/current.html'), ('Archive', '/archive/'), ('Blog', '/blog/'), ('Connect', '/connect.html'), ('CV', '/pages/cv.html')]
MENUITEMS = [('Projects', '/projects/'), ('Articles', '/blog/'), ('Connect', '/connect.html'), ('CV', '/pages/cv.html')]
SUMMARY_MAX_LENGTH = 0
DEFAULT_DATE_FORMAT = '%Y-%m-%d'