metamorphosis

This commit is contained in:
mycognosist 2021-11-21 15:54:30 +02:00
parent cd7bfe5c42
commit 1a37336a43
47 changed files with 375 additions and 2730 deletions

3
.gitignore vendored
View File

@ -1,3 +1,2 @@
/target
/screenshots
notes
/site

2005
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,17 @@
[package]
name = "mycelial_technology"
version = "0.2.0"
name = "website"
version = "0.3.0"
authors = ["glyph <glyph@mycelial.technology>"]
edition = "2018"
description = "glyph's personal website, html splicer and rss generator"
repository = "https://git.coopcloud.tech/glyph/website"
[dependencies]
log = "0.4"
regex = "1"
rocket = "0.5.0-rc.1"
rocket_dyn_templates = { version = "0.1.0-rc.1", features = ["tera"] }
rss = "1"
miniserde = "0.1"
tera = "1"
# optimize for size
[profile.release]
lto = true
opt-level = "z"
panic = "abort"

View File

@ -1,10 +1,28 @@
# mycelial.technology
Personal website of glyph.
_glyph's website_
Handwritten HTML and CSS organised into templates ([Tera](https://tera.netlify.app/)), served with [Rocket](https://rocket.rs/) and proxied through Nginx.
Handwritten CSS and HTML, images, an HTML splicer and an RSS generator.
Includes a custom RSS generator (`src/bin/generate_rss.rs`).
## Static Site Generator
`src/main.rs`
An opinionated, custom-built HTML splicer. It reads HTML templates, splices them into a base template and writes the output.
Templates are expected at `./templates` and output is written to `./site`. The `./site` directory will be created if it doesn't exist.
A base template is expected at `./templates/base.html`. It must contain two tags: `[[ title ]]` and `[[ content ]]`.
The root index template is expected at `./templates/index.html`. All other templates are expected to be in sub-directories; for example: `./templates/plants/index.html` or `./templates/fungi/entomopathogens.html`.
The splicer crawls the sub-directories of `./templates`, reads each HTML file, splices it into the `[[ content ]]` tag of the base HTML template and writes the output to the `./site` directory (preserving the sub-directory structure). The contents of the `<h2>` element are spliced into the `[[ title ]]` tag of the base HTML template for each sub-directory template.
## RSS Generator
`src/bin/generate_rss.rs`
A custom RSS generator. It crawls the template sub-directories containing articles for syndication, extracts relevant information and writes the items to `./static/feed.rss`.
## License

10
build.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
echo "[ compiling binaries ]"
cargo build --release
echo "[ stripping binaries ]"
strip target/release/website
strip target/release/generate_rss
echo "[ compressing binaries ]"
upx target/release/website
upx target/release/generate_rss

View File

@ -1,12 +1,15 @@
//! # RSS Generator
//!
//! A custom RSS generator. It crawls the template sub-directories containing
//! articles for syndication, extracts relevant information and writes the items
//! to `./static/feed.rss`.
//!
extern crate regex;
extern crate rss;
use regex::Regex;
use rss::{ChannelBuilder, Item};
use std::error;
use std::fs;
use std::fs::File;
use std::io::prelude::*;
use std::{error, fs, fs::File, io::prelude::*};
fn main() -> Result<(), Box<dyn error::Error>> {
// create rss channel for mycelial.technology
@ -19,10 +22,10 @@ fn main() -> Result<(), Box<dyn error::Error>> {
.build()?;
// list template directories containing articles for syndication
let bacteria = "./templates/bacteria";
let computers = "./templates/computers";
let fungi = "./templates/fungi";
let plants = "./templates/plants";
let bacteria = "./site/bacteria";
let computers = "./site/computers";
let fungi = "./site/fungi";
let plants = "./site/plants";
// add directories to a vector
let dirs = vec![bacteria, computers, fungi, plants];
@ -39,43 +42,45 @@ fn main() -> Result<(), Box<dyn error::Error>> {
let entry = entry?;
let path = entry.path();
// populate item url vector from article filenames
let re_url = Regex::new("./templates/(.*).html.tera")?;
let caps_url = re_url.captures(
path.to_str()
.expect("Failed to convert file path to string slice for regex capture"),
);
if let Some(url) = caps_url {
let article_url = url[1].replace("_", "-");
let full_url = format!("https://mycelial.technology/{}", article_url);
urls.push(full_url);
};
if !path.ends_with("index.html") {
// populate item url vector from article filenames
let re_url = Regex::new("./site/(.*).html")?;
let caps_url = re_url.captures(
path.to_str()
.expect("Failed to convert file path to string slice for regex capture"),
);
if let Some(url) = caps_url {
let article_url = url[1].replace("_", "-");
let full_url = format!("https://mycelial.technology/{}", article_url);
urls.push(full_url);
};
// open the file (article) and read it to a string
let mut file = File::open(path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
// open the file (article) and read it to a string
let mut file = File::open(path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
// populate item title vector from article heading
let re_h2 = Regex::new("<h2>(.*)</h2>")?;
let caps_h2 = re_h2.captures(&contents);
if let Some(title) = caps_h2 {
titles.push(title[1].to_string());
};
// populate item title vector from article heading
let re_h2 = Regex::new("<h2>(.*)</h2>")?;
let caps_h2 = re_h2.captures(&contents);
if let Some(title) = caps_h2 {
titles.push(title[1].to_string());
};
// populate pub_date vector from first italic element in article
let re_i = Regex::new("<i>(.*)</i>")?;
let caps_i = re_i.captures(&contents);
if let Some(date) = caps_i {
pub_dates.push(date[1].to_string());
};
// populate pub_date vector from first italic element in article
let re_i = Regex::new("<i>(.*)</i>")?;
let caps_i = re_i.captures(&contents);
if let Some(date) = caps_i {
pub_dates.push(date[1].to_string());
};
// populate article content vector from article element
let re_article = Regex::new(r"<article>[\s\S]*</article>")?;
let caps_article = re_article.captures(&contents);
if let Some(content) = caps_article {
articles.push(content[0].to_string());
};
// populate article content vector from article element
let re_article = Regex::new(r"<article>[\s\S]*</article>")?;
let caps_article = re_article.captures(&contents);
if let Some(content) = caps_article {
articles.push(content[0].to_string());
};
}
}
}
@ -99,7 +104,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
channel.set_items(items);
// write the channel to file
let rss_file = File::create("static/feed.rss")?;
let rss_file = File::create("./static/feed.rss")?;
channel.write_to(rss_file)?;
Ok(())

View File

@ -1,322 +1,102 @@
#![feature(proc_macro_hygiene, decl_macro)]
//! # mycelial.technology
//!
//! _glyph's static site generator_
//!
//! This is an opinionated, custom-built HTML splicer. It reads HTML templates, splices
//! them into a base template and writes the output.
//!
//! Templates are expected at `./templates` and output is written to `./site`. The `./site`
//! directory will be created if it doesn't exist.
//!
//! A base template is expected at `./templates/base.html`. It must contain two tags:
//! `[[ title ]]` and `[[ content ]]`.
//!
//! The root index template is expected at `./templates/index.html`. All other templates are
//! expected to be in sub-directories; for example: `./templates/plants/index.html` or
//! `./templates/fungi/entomopathogens.html`.
//!
//! The splicer crawls the sub-directories of `./templates`, reads each HTML file, splices
//! it into the `[[ content ]]` tag of the base HTML template and writes the output to the
//! `./site` directory (preserving the sub-directory structure). The contents of the `<h2>`
//! element are spliced into the `[[ title ]]` tag of the base HTML template for each
//! sub-directory template.
//!
use std::{error, fs, io, path::Path};
extern crate log;
#[macro_use]
extern crate rocket;
extern crate tera;
// define the path for the template directory
const TEMPLATE_DIR: &str = "./templates";
// define the path for the generated site output
const SITE_DIR: &str = "./site";
use miniserde::{json, Serialize};
use rocket::{
fs::{relative, FileServer},
get, routes,
};
use rocket_dyn_templates::Template;
fn main() -> Result<(), Box<dyn error::Error>> {
// read the base html template to a string
let base = format!("{}/base.html", TEMPLATE_DIR);
let base_path = Path::new(&base);
let base_html = fs::read_to_string(base_path)
.expect("couldn't read from templates/base.html; does it exist?");
#[derive(Debug, Serialize)]
struct FlashContext {
flash_name: Option<String>,
flash_msg: Option<String>,
}
#[get("/art")]
fn art() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("art", json::to_string(&context))
}
#[get("/background")]
fn background() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("background", json::to_string(&context))
}
#[get("/bacteria")]
fn bacteria() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("bacteria", json::to_string(&context))
}
#[get("/bacteria/sauerkraut-beginnings")]
fn bacteria_sauerkraut_beginnings() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("bacteria/sauerkraut_beginnings", json::to_string(&context))
}
#[get("/bacteria/sauerkraut-bottled")]
fn bacteria_sauerkraut_bottled() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("bacteria/sauerkraut_bottled", json::to_string(&context))
}
#[get("/computers")]
fn computers() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("computers", json::to_string(&context))
}
#[get("/computers/esp8266-dht11")]
fn computers_esp8266_dht11() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("computers/esp8266_dht11", json::to_string(&context))
}
#[get("/computers/i2c-adventures")]
fn computers_i2c_adventures() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("computers/i2c_adventures", json::to_string(&context))
}
#[get("/computers/rust-compilation")]
fn computers_rust_compilation() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("computers/rust_compilation", json::to_string(&context))
}
#[get("/fungi")]
fn fungi() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi", json::to_string(&context))
}
#[get("/fungi/design-patterns")]
fn fungi_design_patterns() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/design_patterns", json::to_string(&context))
}
#[get("/fungi/glossary")]
fn fungi_glossary() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/glossary", json::to_string(&context))
}
#[get("/fungi/grow-forests")]
fn fungi_grow_forests() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/grow_forests", json::to_string(&context))
}
#[get("/fungi/grow-together")]
fn fungi_grow_together() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/grow_together", json::to_string(&context))
}
#[get("/fungi/lichen-space")]
fn fungi_lichen_space() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/lichen_space", json::to_string(&context))
}
#[get("/fungi/network-resilience")]
fn fungi_network_resilience() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/network_resilience", json::to_string(&context))
}
#[get("/fungi/photo-guide")]
fn fungi_photo_guide() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/photo_guide", json::to_string(&context))
}
#[get("/fungi/reading-list")]
fn fungi_reading_list() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("fungi/reading_list", json::to_string(&context))
}
#[get("/")]
fn home() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("home", json::to_string(&context))
}
#[get("/lists")]
fn lists() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("lists", json::to_string(&context))
}
#[get("/meditation")]
fn meditation() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("meditation", json::to_string(&context))
}
#[get("/plants")]
fn plants() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("plants", json::to_string(&context))
}
#[get("/plants/aloe-there")]
fn plants_aloe_there() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("plants/aloe_there", json::to_string(&context))
}
#[get("/plants/blueberry-dance")]
fn plants_blueberry_dance() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("plants/blueberry_dance", json::to_string(&context))
}
#[get("/plants/botanical-deceptions")]
fn plants_botanical_deceptions() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("plants/botanical_deceptions", json::to_string(&context))
}
#[get("/plants/potato-tech")]
fn plants_potato_tech() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("plants/potato_tech", json::to_string(&context))
}
#[get("/projects")]
fn projects() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("projects", json::to_string(&context))
}
#[get("/support")]
fn support() -> Template {
let context = FlashContext {
flash_name: None,
flash_msg: None,
};
Template::render("support", json::to_string(&context))
}
#[catch(404)]
fn not_found() -> Template {
debug!("404 Page Not Found");
let context = FlashContext {
flash_name: Some("error".to_string()),
flash_msg: Some("No resource found for given URL".to_string()),
};
Template::render("not_found", json::to_string(&context))
}
#[launch]
fn rocket() -> _ {
rocket::build()
.mount(
"/",
routes![
art,
background,
bacteria,
bacteria_sauerkraut_beginnings,
bacteria_sauerkraut_bottled,
computers,
computers_esp8266_dht11,
computers_i2c_adventures,
computers_rust_compilation,
fungi,
fungi_design_patterns,
fungi_glossary,
fungi_grow_forests,
fungi_grow_together,
fungi_lichen_space,
fungi_network_resilience,
fungi_photo_guide,
fungi_reading_list,
home,
lists,
meditation,
plants,
plants_aloe_there,
plants_blueberry_dance,
plants_botanical_deceptions,
plants_potato_tech,
projects,
support
],
)
.mount("/", FileServer::from(relative!("static")))
.register("/", catchers![not_found])
.attach(Template::fairing())
// read the index html template to a string
let index = format!("{}/index.html", TEMPLATE_DIR);
let index_path = Path::new(&index);
let index_html = fs::read_to_string(index_path)
.expect("couldn't read from templates/index.html; does it exist?");
// create site directory if it doesn't already exist
let site_dir_path = Path::new(&SITE_DIR);
if !site_dir_path.is_dir() {
fs::create_dir(site_dir_path).expect("failed to create site output directory");
}
// integrate the content from the index template into the base template
let mut index_output = base_html.replace("[[ content ]]", &index_html);
// set the page title
index_output = index_output.replace("[[ title ]]", "mycelial technology");
let index_output_path = format!("{}/index.html", SITE_DIR);
// write the generated index html to file
fs::write(index_output_path, index_output.trim())
.expect("failed to write the root index.html file");
// walk the template directory and collect paths for all files and sub-directories
let template_files = fs::read_dir(TEMPLATE_DIR)?
.map(|res| res.map(|e| e.path()))
.collect::<Result<Vec<_>, io::Error>>()?;
// loop through each file and sub-directory
for entry in template_files {
if entry.is_dir() {
// replicate templates sub-directory structure in site output directory
let template_sub_dir_suffix = entry.strip_prefix(TEMPLATE_DIR)?;
let site_sub_dir = Path::new(SITE_DIR).join(template_sub_dir_suffix);
// create the sub-directory if it doesn't already exist
if !site_sub_dir.is_dir() {
fs::create_dir(site_sub_dir)?;
}
// read each file from the sub-diretory
for file in fs::read_dir(entry)? {
let file = file?;
let file_path = file.path();
let file_html = fs::read_to_string(&file_path)?;
// find the index of the h2 tag (represents the page title)
let mut title_start = file_html.find("<h2>").expect("<h2> tag not found");
// increment the index to represent the start of the title text
title_start += 4;
// find the index of the h2 closing tag
let title_end = file_html.find("</h2>").expect("</h2> tag not found");
// obtain the title text as a string slice
let title = &file_html[title_start..title_end];
// integrate the content from the template into the base template
let mut file_output = base_html.replace("[[ content ]]", &file_html);
// integrate the title of the page into the file output
file_output = file_output.replace("[[ title ]]", title);
// define the path to which the output html file will be written
let file_output_path = file_path.to_string_lossy();
// replace the template directory path with the site output path
let output_path = file_output_path.replace(TEMPLATE_DIR, SITE_DIR);
// trim whitespace from the end of the generated html and write to file
fs::write(output_path, file_output.trim())?
}
}
}
Ok(())
}

View File

@ -1,44 +1,40 @@
{% extends "nav" %}
{% block title %}mycelial technology | art{% endblock title %}
{% block content %}
<h2>Art</h2>
<h3>2020</h3>
<div class="flex-grid">
<img class="col" alt="Line drawing of a Japanese archer with a longbow" src="art/archer.jpg" title="Archer" />
<img class="col" alt="Pen and ink drawing of a tiger beetle with mesas and clouds in the background" src="art/beetle.jpg" title="Beetle" />
<img class="col" alt="Pen and ink drawing of a man standing with his hands in his pockets. He has a katana slung across his back and there are rocks scattered around and hills in the background" src="art/ninja.jpg" title="Ninja" />
<img class="col" alt="Line drawing of a Japanese archer with a longbow" src="/static/art/archer.jpg" title="Archer" />
<img class="col" alt="Pen and ink drawing of a tiger beetle with mesas and clouds in the background" src="/static/art/beetle.jpg" title="Beetle" />
<img class="col" alt="Pen and ink drawing of a man standing with his hands in his pockets. He has a katana slung across his back and there are rocks scattered around and hills in the background" src="/static/art/ninja.jpg" title="Ninja" />
</div>
<div class="flex-grid">
<img class="col" alt="Inked portrait of a beautiful young person" src="art/xiao_wen_ju.jpg" title="Xiao Wen Ju" />
<img class="col" alt="Black and white event poster of a spacecraft, astronaut and planet" src="art/extrasolar.jpg" title="Extrasolar" />
<img class="col" alt="Line drawing of a woman in a hooded parka" src="art/parka.jpg" title="Parka" />
<img class="col" alt="Inked portrait of a beautiful young person" src="/static/art/xiao_wen_ju.jpg" title="Xiao Wen Ju" />
<img class="col" alt="Black and white event poster of a spacecraft, astronaut and planet" src="/static/art/extrasolar.jpg" title="Extrasolar" />
<img class="col" alt="Line drawing of a woman in a hooded parka" src="/static/art/parka.jpg" title="Parka" />
</div>
<h3>2019</h3>
<div class="flex-grid">
<img class="col" alt="Line drawing of a humyn skull with mushrooms growing from it and text beneath reading 'Death is not the End'" src="art/death_is_not_the_end.jpg" title="Death is not the End" />
<img class="col" alt="Line drawing of a monk ringing a bell" src="art/ring_monk.jpg" title="Ring" />
<img class="col" alt="Line drawing of a man playing shakuhachi" src="art/shakuhachi.jpg" title="Mindless" />
<img class="col" alt="Line drawing of a humyn skull with mushrooms growing from it and text beneath reading 'Death is not the End'" src="/static/art/death_is_not_the_end.jpg" title="Death is not the End" />
<img class="col" alt="Line drawing of a monk ringing a bell" src="/static/art/ring_monk.jpg" title="Ring" />
<img class="col" alt="Line drawing of a man playing shakuhachi" src="/static/art/shakuhachi.jpg" title="Mindless" />
</div>
<div class="flex-grid">
<img class="col" alt="Line drawing of a pitcher plant" src="art/pitcher_plant.jpg" title="Bait" />
<img class="col" alt="Line drawing of a birch polypore mushroom with icicles growing from a birch tree" src="art/birch_polypore.jpg" title="Freeze" />
<img class="col" alt="Line drawing of a paper wasp on a small nest" src="art/wasp.jpg" title="Build" />
<img class="col" alt="Line drawing of a pitcher plant" src="/static/art/pitcher_plant.jpg" title="Bait" />
<img class="col" alt="Line drawing of a birch polypore mushroom with icicles growing from a birch tree" src="/static/art/birch_polypore.jpg" title="Freeze" />
<img class="col" alt="Line drawing of a paper wasp on a small nest" src="/static/art/wasp.jpg" title="Build" />
</div>
<div class="flex-grid">
<img class="col" alt="Line drawing of a young man standing next to a tree with mushrooms growing on it" src="art/enchanted_gano.jpg" title="Enchanted" />
<img class="col" alt="Line drawing of a physalis fruit" src="art/physalis.jpg" title="Frail" />
<img class="col" alt="Line drawing of a humyn hand reaching out to touch a mycelial network" src="art/hyphal_fusion.svg" title="Hyphal Fusion" />
<img class="col" alt="Line drawing of a young man standing next to a tree with mushrooms growing on it" src="/static/art/enchanted_gano.jpg" title="Enchanted" />
<img class="col" alt="Line drawing of a physalis fruit" src="/static/art/physalis.jpg" title="Frail" />
<img class="col" alt="Line drawing of a humyn hand reaching out to touch a mycelial network" src="/static/art/hyphal_fusion.svg" title="Hyphal Fusion" />
</div>
<h3>2018</h3>
<div class="flex-grid">
<img class="col" alt="Line drawing of an aloe plant" src="art/aloe.jpg" title="Aloe plant" />
<img class="col" alt="Line drawing of an American kestrel" src="art/kestrel.jpg" title="American kestrel" />
<img class="col" alt="Line drawing of a black oval surrounded by two rings of glyphs" src="art/obsidian_artifact.jpg" title="Obsidian Artifact" />
<img class="col" alt="Line drawing of an aloe plant" src="/static/art/aloe.jpg" title="Aloe plant" />
<img class="col" alt="Line drawing of an American kestrel" src="/static/art/kestrel.jpg" title="American kestrel" />
<img class="col" alt="Line drawing of a black oval surrounded by two rings of glyphs" src="/static/art/obsidian_artifact.jpg" title="Obsidian Artifact" />
</div>
<div class="flex-grid">
<img class="col" alt="Line drawing of a mountain with a teardrop-shaped symbol above it, with mountains and clouds in the background" src="art/mystic_mountain.jpg" title="Mystic Mountain" />
<img class="col" alt="Line drawing of an ant with a long, antenna-like mushroom growing from its thorax" src="art/cordyceps_ant.jpg" title="Ophiocordyceps unilateralis on ant host" />
<img class="col" alt="Line drawing of a meditating figure with haloes of glyphs surrounding them" src="art/halo.svg" title="Halo" />
<img class="col" alt="Line drawing of a mountain with a teardrop-shaped symbol above it, with mountains and clouds in the background" src="/static/art/mystic_mountain.jpg" title="Mystic Mountain" />
<img class="col" alt="Line drawing of an ant with a long, antenna-like mushroom growing from its thorax" src="/static/art/cordyceps_ant.jpg" title="Ophiocordyceps unilateralis on ant host" />
<img class="col" alt="Line drawing of a meditating figure with haloes of glyphs surrounding them" src="/static/art/halo.svg" title="Halo" />
</div>
<hr>
{%- endblock %}

View File

@ -1,13 +1,9 @@
{% extends "nav" %}
{% block title %}mycelial technology | background{% endblock title %}
{% block content %}
<article>
<h2>Background</h2>
<p>I was born and raised in the coastal city of Durban, South Africa, which lies between the Indian Ocean and Drakensberg Mountains. Following completion of high school I moved to Michigan, USA and completed a Bachelor of Science in anthropology (major) and biology (minor) at <a href="https://www.gvsu.edu/">Grand Valley State University</a>. I later returned to South Africa and completed a Master of Social Science in social anthropology at the <a href="http://www.uct.ac.za/">University of Cape Town</a>, with <a href="https://open.uct.ac.za/handle/11427/6795">research</a> focused on decentralised networks of medicinal plant harvesters and herbalists (Rasta bush doctors). I then went on to work as an applied anthropologist and ethnobotanist in the non-profit sector.</p>
<p>Following a year spent travelling in South America, I restructured my life and livelihood around my core interests: carbon-based and silicon-based technologies (biology and computers). In 2016 I co-founded <a href="https://harmonicmycology.com">Harmonic Mycology</a>, a mycology business based in Cape Town, and served as Creative Director until leaving to pursue personal and collective projects in 2020. I have developed mycelial medicines, cultivated edible and medicinal fungi and taught workshops on mushroom cultivation, biomaterials and medicinal fungi. My mycological work is now focused on encouraging the formation of humyn-fungal networks and practicing low-tech, ecologically-integrated cultivation.</p>
<p>In parallel to my mycological endeavours, I work as an autodidactic software developer on private and open-source projects; most-recently, <a href="https://opencollective.com/peachcloud">PeachCloud</a>. I also enjoy tinkering with electronics and have a couple of solar-powered projects in the works.</p>
<p>I hold a deep fascination with the processes through which humyns form relationships with other living beings. When not in the lab or behind a keyboard, you can find me looking at mushrooms, riding my bicycle or reading sci-fi. I'm dreaming of a three-month adventure across Japan ⛩.</p>
<img src="glyph_laetiporus.jpg" alt="A young man crouching beside a large orange chicken-of-the-woods mushroom growing from the trunk of an oak tree. Trees, shrubs and grasses fill the foreground and background." style="width: 100%;" />
<img src="/static/glyph_laetiporus.jpg" alt="A young man crouching beside a large orange chicken-of-the-woods mushroom growing from the trunk of an oak tree. Trees, shrubs and grasses fill the foreground and background." style="width: 100%;" />
</article>
<hr>
{%- endblock %}

View File

@ -1,10 +0,0 @@
{% extends "nav" %}
{% block title %}mycelial technology | bacteria{% endblock title %}
{% block content %}
<h2>Bacteria</h2>
<ul>
<li><a href="/bacteria/sauerkraut-bottled">Sauerkraut: Bottled</a> - <i>31 October, 2019</i></li>
<li><a href="/bacteria/sauerkraut-beginnings">Sauerkraut: Beginnings</a> - <i>22 October, 2019</i></li>
</ul>
<hr>
{%- endblock %}

View File

@ -0,0 +1,6 @@
<h2>Bacteria</h2>
<ul>
<li><a href="/bacteria/sauerkraut-bottled.html">Sauerkraut: Bottled</a> - <i>31 October, 2019</i></li>
<li><a href="/bacteria/sauerkraut-beginnings.html">Sauerkraut: Beginnings</a> - <i>22 October, 2019</i></li>
</ul>
<hr>

View File

@ -1,11 +1,8 @@
{% extends "nav" %}
{% block title %}mycelial technology | Sauerkraut: Beginnings{% endblock title %}
{% block content %}
<article>
<h2>Sauerkraut: Beginnings</h2>
<i>22 October, 2019</i>
<figure>
<img src="/bacteria/sauerkraut_jar.jpeg" alt="Colour photo in portrait orientation of a 3L jar filled with purple sauerkraut-in-the-making. The jar is on a wooden countertop and is covered by a blue and white cloth. A glass jar with water is visible inside the bigger jar. Bubbles can be seen forming on the surface of the sauerkraut mixture / solution." style="width: 100%;" />
<img src="/static/bacteria/sauerkraut_jar.jpeg" alt="Colour photo in portrait orientation of a 3L jar filled with purple sauerkraut-in-the-making. The jar is on a wooden countertop and is covered by a blue and white cloth. A glass jar with water is visible inside the bigger jar. Bubbles can be seen forming on the surface of the sauerkraut mixture / solution." style="width: 100%;" />
<figcaption>Counter-top fermentation factory.</figcaption>
</figure>
<p>I started my first batch of sauerkraut on Sunday - something Ive been meaning to do for a few months.</p>
@ -13,4 +10,3 @@
<p>Its already bubbling and smelling delicious. Fermentation is like hospitality management for microbes.
</article>
<hr>
{%- endblock %}

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | Sauerkraut: Bottled{% endblock title %}
{% block content %}
<article>
<h2>Sauerkraut: Bottled</h2>
<i>31 October, 2019</i>
@ -8,9 +5,8 @@
<p>Also transferred some chaga (Inonotus obliquus), reishi (Ganoderma lucidum) and turkey tail (Trametes versicolor)-infused coconut oil to a smaller jar.</p>
<p>All of it will be gifted to friends in the valley; gifted by the combined efforts of the sun, soil, water, plants, bacteria and humyns.</p>
<figure>
<img src="/bacteria/sauerkraut_mountain.jpeg" alt="Colour photo showing five glass jars, one small and four large, in a row on a wooden handrail. The first jar contains a cream-coloured mixture of coconut oil, while the other jars are filled with purple sauerkraut. Trees and a mountain can be seen in the background on the right. A brick building appears along the left margin of the photo." style="width: 100%;" />
<img src="/static/bacteria/sauerkraut_mountain.jpeg" alt="Colour photo showing five glass jars, one small and four large, in a row on a wooden handrail. The first jar contains a cream-coloured mixture of coconut oil, while the other jars are filled with purple sauerkraut. Trees and a mountain can be seen in the background on the right. A brick building appears along the left margin of the photo." style="width: 100%;" />
<figcaption>Vibrant delights in the valley.</figcaption>
</figure>
</article>
<hr>
{%- endblock %}

View File

@ -3,8 +3,8 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" type="image/png" href="/favicon.png"/>
<title>{% block title %}{% endblock title %}</title>
<link rel="shortcut icon" type="image/png" href="/static/favicon.png"/>
<title>[[ title ]]</title>
<meta name="author" content="glyph">
<meta name="description" content="Welcome to the personal website of glyph: a mycelial technologist coding and cultivating a decentralized, multispecies future. On my site you will find art, musings and projects relating to carbon-based and silicon-based technologies. Sowing seeds of symbiosis, weaving webs of wu wei.">
<meta name="keywords" content="botany, coding, electronics, fermentation, fungi, meditation, mycology, plants">
@ -38,11 +38,16 @@
.card {
border: 1px solid black;
box-shadow: 0.25rem 0.25rem;
width: max-content;
padding: 2rem;
margin-bottom: 2rem;
}
@media only screen and (min-width: 800px) {
.card {
width: max-content;
}
}
.card ul {
list-style-type: none;
margin: 0;
@ -129,10 +134,28 @@
border: solid 1px #111;
padding: 2rem;
}
</style>
</head>
<body>
{% block nav %}{% endblock %}
<h1><a href="/" style="text-decoration: none;">mycelial technology</a></h1>
<hr>
<nav>
<ol class="nav-bar">
<li class="nav-item"><a href="/art">art</a></li>
<li class="nav-item"><a href="/background">background</a></li>
<li class="nav-item"><a href="/bacteria">bacteria</a></li>
<li class="nav-item"><a href="/computers">computers</a></li>
<li class="nav-item"><a href="/fungi">fungi</a></li>
<li class="nav-item"><a href="/lists">lists</a></li>
<li class="nav-item"><a href="/meditation">meditation</a></li>
<li class="nav-item"><a href="/plants">plants</a></li>
<li class="nav-item"><a href="/projects">projects</a></li>
<li class="nav-item"><a href="/support">support</a></li>
</ol>
</nav>
[[ content ]]
<footer style="display: flex;">
<p>&#169; 2021 glyph<p>
</footer>
</body>
</html>

View File

@ -1,15 +0,0 @@
{% extends "nav" %}
{% block title %}mycelial technology | computers{% endblock title %}
{% block content %}
<h2>Computers</h2>
<p>You can find some of my code on <a href="https://github.com/mycognosist" title="glyph's GitHub repo">GitHub</a> and <a href="https://git.sr.ht/~glyph" title="glyph's Sourcehut repo">Sourcehut</a>.</p>
<h3>Posts</h3>
<div class="card">
<ul>
<li><a href="/computers/rust-compilation">Cross-Compiling Rust for Debian Buster on Raspberry Pi 3B+</a> - <i>18 May, 2020</i></li>
<li><a href="/computers/esp8266-dht11">ESP8266 with DHT11 and LCD Display</a> - <i>5 August, 2019</i></li>
<li><a href="/computers/i2c-adventures">Adventures with I²C</a> - <i>26 January, 2019</i></li>
</ul>
</div>
<hr>
{%- endblock %}

View File

@ -1,11 +1,9 @@
{% extends "nav" %}
{% block content %}
<article>
<h2>ESP8266 with DHT11 and LCD Display</h2>
<i>5 August, 2019</i>
<p>I had fun putting together a simple electronics project over the weekend: NodeMCU dev board (ESP8266) with a DHT11 temperature and humidity sensor and DF Robot RGB LCD display.</p>
<figure>
<img src="/computers/esp8266_temp.jpeg" alt="Black and white photo in portrait orientation showing electronics on a striped table-cloth. A NodeMCU dev board appears in the lower-right, DHT11 sensor in the top-left, and an LCD in the top-right. Text on the display reads: temp: 18.0 and humidity: 64. The display is propped-up by a white pyramid (mycelium) and a wooden floor is just visible in the background." style="width: 100%;" />
<img src="/static/computers/esp8266_temp.jpeg" alt="Black and white photo in portrait orientation showing electronics on a striped table-cloth. A NodeMCU dev board appears in the lower-right, DHT11 sensor in the top-left, and an LCD in the top-right. Text on the display reads: temp: 18.0 and humidity: 64. The display is propped-up by a white pyramid (mycelium) and a wooden floor is just visible in the background." style="width: 100%;" />
<figcaption>The basic setup.</figcaption>
</figure>
<p>The code is quite simple: connect to the local WiFi network and create a UDP server. Respond to UDP requests on port 3210 with a temperature and humidity reading from the sensor. Write the temperature and humidity to the display every two seconds.</p>
@ -19,4 +17,3 @@
<p>I did not know that. Rad.</p>
</article>
<hr>
{%- endblock %}

View File

@ -1,5 +1,3 @@
{% extends "nav" %}
{% block content %}
<article>
<h2>Adventures with I²C</h2>
<i>26 January, 2019</i>
@ -11,7 +9,7 @@
<blockquote>A Real Time Clock Module with battery backup using the easy to use DS1338 chip. The DS1338 is functionally the same as the popular DS1307 chip with the difference being that the DS1338 works at any voltage from 3V to 5V making it easy to use on either 3.3V and 5V systems without modification or logic level conversion. Ideal for your project including Arduino and Raspberry Pi projects.</blockquote>
<p>I received my first lesson in soldering last week and attached pins to the RTC. That made it a simple process to plug the module into my breadboard and connect it to the Pi. The module works on I²C and only requires 4 connecting wires (power, ground, SDA, SCL). The I²C pins on the Pi include a fixed 1.8 kohms pull-up resistor to 3.3v, meaning that no additional resistors needed to be included in the wiring setup.</p>
<figure>
<img src="/computers/pi_rtc.jpeg" alt="DS1338 RTC module plugged-into a breadboard & connected to a Raspberry Pi." style="width: 100%;" />
<img src="/static/computers/pi_rtc.jpeg" alt="DS1338 RTC module plugged-into a breadboard & connected to a Raspberry Pi." style="width: 100%;" />
<figcaption>DS1338 RTC module plugged-into a breadboard & connected to a Raspberry Pi.</figcaption>
</figure>
<p>Following the AdaFruit guide to <a href="https://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/set-up-and-test-i2c">Adding a Real Time Clock to Raspberry Pi</a> (with small additions), I was able to run an I²C scan and verify that the module was wired correctly to the Pi:</p>
@ -21,7 +19,7 @@
<p>The final command in the sequence prints an array to the console, with 68 denoting the presence of the RTC module. This is a sign that the device is properly wired and connected. Great! This is where things started to get tricky…</p>
<p>If we were running Raspbian for this project the next steps would be pretty simple. As it turns out, the process for Debian Buster ARM64 is quite a bit more complicated. A <a href="https://code.overdrivenetworks.com/blog/2018/07/debian-buster-on-a-raspberry-pi-3-model-b-plus/">blog post</a> I found last night neatly summarizes the pros and cons of this choice:</p>
<figure>
<img src="/computers/debian_pi_pros_cons.png" alt="List of advantages and disadvantages of running Debian Buster ARM64 on Raspberry Pi." style="width: 100%;" />
<img src="/static/computers/debian_pi_pros_cons.png" alt="List of advantages and disadvantages of running Debian Buster ARM64 on Raspberry Pi." style="width: 100%;" />
<figcaption>List of advantages and disadvantages of running Debian Buster ARM64 on Raspberry Pi.</figcaption>
</figure>
<p>No kidding! There were, however, a few crumbs along the way to sustain me over the course of the journey. These included <a href="https://raspberrypi.stackexchange.com/questions/41277/what-is-needed-to-get-i%c2%b2c-working-with-debian-jessie">What is needed to get I²C working with Debian Jessie?</a> and <a href="https://raspberrypi.stackexchange.com/questions/60084/i2c-transfer-failed-flooding-the-logs">"I2C transfer failed" flooding the logs.</a></p>
@ -40,10 +38,9 @@
<code>sudo modprobe rtc-ds1307</code>
<p>I ran <code>sudo i2cdetect -y 1</code> for the 234th time and bingo! It works! <i>Running around room celebrating.</i></p>
<figure>
<img src="/computers/i2c_working.jpeg" alt="Screenshot of terminal showing successful configuration of I²C RTC module." style="width: 100%;" />
<img src="/static/computers/i2c_working.jpeg" alt="Screenshot of terminal showing successful configuration of I²C RTC module." style="width: 100%;" />
<figcaption>Screenshot of terminal showing successful configuration of I²C RTC module.</figcaption>
</figure>
<p>This is really exciting because it opens the door to (relatively) easy integration of other I²C devices (sensors, LCD displays etc.). Next step will be to fine-tune the process so that everything loads correctly on boot. If you stuck with me this far - thanks for reading!</p>
</article>
<hr>
{%- endblock %}

View File

@ -0,0 +1,11 @@
<h2>Computers</h2>
<p>You can find some of my code on <a href="https://github.com/mycognosist" title="glyph's GitHub repo">GitHub</a> and <a href="https://git.sr.ht/~glyph" title="glyph's Sourcehut repo">Sourcehut</a>.</p>
<h3>Posts</h3>
<div class="card">
<ul>
<li><a href="/computers/rust-compilation.html">Cross-Compiling Rust for Debian Buster on Raspberry Pi 3B+</a> - <i>18 May, 2020</i></li>
<li><a href="/computers/esp8266-dht11.html">ESP8266 with DHT11 and LCD Display</a> - <i>5 August, 2019</i></li>
<li><a href="/computers/i2c-adventures.html">Adventures with I²C</a> - <i>26 January, 2019</i></li>
</ul>
</div>
<hr>

View File

@ -1,5 +1,3 @@
{% extends "nav" %}
{% block content %}
<article>
<h2>Cross-Compiling Rust for Debian Buster on Raspberry Pi 3B+</h2>
<i>18 May, 2020</i>
@ -18,4 +16,3 @@
<code>linker = "aarch64-linux-gnu-gcc"</code>
</article>
<hr>
{%- endblock %}

View File

@ -1,29 +0,0 @@
{% extends "nav" %}
{% block title %}mycelial technology | fungi{% endblock title %}
{% block content %}
<h2>Fungi</h2>
<h3>Articles</h3>
<div class="card">
<ul>
<li><a href="/fungi/lichen-space">Lichens in Space</a> - <i>28 May, 2020</i></li>
<li><a href="/fungi/grow-forests">Growing Forests</a> - <i>26 October, 2018</i></li>
<li><a href="/fungi/design-patterns">Mycelial Design Patterns</a> - <i>26 October, 2018</i></li>
<li><a href="/fungi/grow-together">Grow Together</a> - <i>29 March, 2018</i></li>
<li><a href="/fungi/network-resilience">Network Resilience: Woronin Bodies and the Scuttleverse</a> - <i>25 March, 2018</i></li>
</ul>
</div>
<h3>Guides</h3>
<div class="card">
<ul>
<li><a href="/fungi/glossary">Mycological Glossary</a> - <i>4 September, 2020</i></li>
<li><a href="/fungi/photo-guide">Photographing Mushrooms for Identification</a> - <i>25 August, 2020</i></li>
</ul>
</div>
<h3>Reading List</h3>
<div class="card">
<ul>
<li><a href="/fungi/reading-list">Mycology Reading List</a></li>
</ul>
</div>
<hr>
{%- endblock %}

View File

@ -1,10 +1,7 @@
{% extends "nav" %}
{% block title %}mycelial technology | Mycelial Design Patterns{% endblock title %}
{% block content %}
<article>
<h2>Mycelial Design Patterns</h2>
<i>26 October, 2018</i>
<p><i>This is the second part of a two-part essay which first appeared on Scuttlebutt [1] as an exploration of growing the ecosystem. Part one: <a href="/fungi/grow-forests">Growing Forests</a> [2].</i></p>
<p><i>This is the second part of a two-part essay which first appeared on Scuttlebutt [1] as an exploration of growing the ecosystem. Part one: <a href="/fungi/grow-forests.html">Growing Forests</a> [2].</i></p>
<p>1. <b>Think long-term.</b> Dream the future that will support as much diversity and interdependence as possible and then anchor it through integration, practice and reflection. This is already going on in the Scuttleverse so I wont expand further.</p>
<p>2. <b>Be experimental.</b> The saprotrophic (foraging / decomposing) fungi stream nuclei to their rapidly branching and elongating tips. These nuclei provide the compute resources to analyze external environmental conditions and respond accordingly. Fungi are capable of synthesizing some 200,000 unique compounds, many of which are acids and enzymes deployed to dissassmble metals, minerals, baceria etc. So, again, a diversity of approaches is best. Allocate some grants as small packages and let grantees scout the terrain of possibility. I think the $5k grants from Dfinity were a great practice of this kind of experimental embrace.</p>
<p>3. <b>Store energy when its plentiful.</b> Some species of fungi grow underground storage vessels known as sclerotia or truffles. These dense nuggets of mycelium provide sustenance in periods of prolonged adverse conditions (drought, lack of food etc.). I think efforts like the Open Collective etc. can play a role in facilitating this kind of saving. Times may come when we have no incoming funding and then the surplus of previous crops can keep us going. I think we should be wary of spending all available resources as they come in.</p>
@ -23,4 +20,3 @@
</ol>
</article>
<hr>
{%- endblock %}

View File

@ -0,0 +1,12 @@
<article>
<h2>Mycological Glossary</h2>
<ul>
<li><b>culture</b> - Mycelium of a particular strain and species, often grown in a petri dish or test tube for easy storage and replication.</li>
<li><b>liquid culture</b> - Mycelium grown in a nutrified solution such as 4% honey water, often in a glass jar or similar lidded vessel; simplifies cultivation in non-sterile conditions.</li>
<li><b>mushroom</b> - The fruiting body of a fungal network; a specialised structure grown to replicate and distribute the genetic information of the mycelium via spores.</li>
<li><b>mycelium</b> - The body of a fungus, made up of branching and interconnected threads of single cells (hyphae); often appears as a white, fluffy mass resembling tiny roots.</li>
<li><b>mycomaterial</b> - A substance or object grown out of mycelium, often using hemp hurd or similar woody substance as a base material. Mycomaterials hold great potential as replacements for plastic, styrofoam, leather etc.</li>
<li><b>spore</b> - A tiny reproductive bundle carrying the genetic information of the parent organism; germinates to restart the life-cycle of the fungus.</li>
</ul>
</article>
<hr>

View File

@ -1,14 +0,0 @@
{% extends "nav" %}
{% block title %}mycelial technology | fungal glossary{% endblock title %}
{% block content %}
<h2>Mycological Glossary</h2>
<ul>
<li><b>culture</b> - Mycelium of a particular strain and species, often grown in a petri dish or test tube for easy storage and replication.</li>
<li><b>liquid culture</b> - Mycelium grown in a nutrified solution such as 4% honey water, often in a glass jar or similar lidded vessel; simplifies cultivation in non-sterile conditions.</li>
<li><b>mushroom</b> - The fruiting body of a fungal network; a specialised structure grown to replicate and distribute the genetic information of the mycelium via spores.</li>
<li><b>mycelium</b> - The body of a fungus, made up of branching and interconnected threads of single cells (hyphae); often appears as a white, fluffy mass resembling tiny roots.</li>
<li><b>mycomaterial</b> - A substance or object grown out of mycelium, often using hemp hurd or similar woody substance as a base material. Mycomaterials hold great potential as replacements for plastic, styrofoam, leather etc.</li>
<li><b>spore</b> - A tiny reproductive bundle carrying the genetic information of the parent organism; germinates to restart the life-cycle of the fungus.</li>
</ul>
<hr>
{%- endblock %}

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | Growing Forests{% endblock title %}
{% block content %}
<article>
<h2>Growing Forests</h2>
<i>26 October, 2018</i>
@ -16,7 +13,7 @@
<p>In designing its local microbial community, the mycelium promotes the growth of some plants over others - shepherding the emergence of particular botanical communities. The mycelium itself, along with the mushrooms it produces, are food for insects, worms, birds and mammals. All of these creatures, plant and animal alike, can be thought of as biomass. The biomass ultimately feeds the fungus; falling branches are air-dropped takeout for the mycelial membranes below. You see this pattern in the contrast between grassland and forest eco-systems: grassland has bacterially-dominated soils while forests have fungal-dominated soil. What started off as a bit of humble bacteria farming grew into a complex and resilient system capable of supporting the mycelium and myriad other lifeforms. I think this is basically what were aiming for.</p>
<p>Thats all fascinating and stuff, but how do we apply this to @elavoies original question(s)?</p>
<p>Ill highlight a few patterns I see in mycelial biology and ecology which I think apply. I have written about some of these elsewhere in the Scuttleverse (apologies for not including references and images and such).</p>
<p>Part 2: <a href="/fungi/design-patterns">Mycelial Design Patterns</a>.</p>
<p>Part 2: <a href="/static/fungi/design-patterns">Mycelial Design Patterns</a>.</p>
<h3>Cypherlinks</h3>
<ol>
<li>Cypherlink to part 1: %RRp5H5obsNYHhjSa/2FAxcTiyGGVvhPKAUYYgZTj6hI=.sha256</li>
@ -25,4 +22,3 @@
</ol>
</article>
<hr>
{%- endblock %}

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | Grow Together{% endblock title %}
{% block content %}
<article>
<h2>Grow Together</h2>
<i>29 March, 2018</i>
@ -9,17 +6,16 @@
<p>It seems the onset of rains and cooler weather, along with - potentially - the death of the plant, have prompted the networks of this species to produce mushrooms. All of the ones I have found so far have been growing in association with lettuce. Lets practice the mycorrhizal way and nurture interdependence!</p>
<p>So much love for the House of Wu Wei and all the myriad creatures who live here!</p>
<figure>
<img src="/fungi/earthstar.jpeg" style="width: 100%;" />
<img src="/static/fungi/earthstar.jpeg" style="width: 100%;" />
<figcaption>You look interesting! I wonder whats going on…</figcaption>
</figure>
<figure>
<img src="/fungi/earthstar_roots.jpeg" style="width: 100%;" />
<img src="/static/fungi/earthstar_roots.jpeg" style="width: 100%;" />
<figcaption>Inter-species companionship.</figcaption>
</figure>
<figure>
<img src="/fungi/earthstar_mycelium.jpeg" style="width: 100%;" />
<img src="/static/fungi/earthstar_mycelium.jpeg" style="width: 100%;" />
<figcaption>Makes me wonder how long these species have been dancing one another into being?</figcaption>
</figure>
</article>
<hr>
{%- endblock %}

View File

@ -0,0 +1,25 @@
<h2>Fungi</h2>
<h3>Articles</h3>
<div class="card">
<ul>
<li><a href="/fungi/lichen-space.html">Lichens in Space</a> - <i>28 May, 2020</i></li>
<li><a href="/fungi/grow-forests.html">Growing Forests</a> - <i>26 October, 2018</i></li>
<li><a href="/fungi/design-patterns.html">Mycelial Design Patterns</a> - <i>26 October, 2018</i></li>
<li><a href="/fungi/grow-together.html">Grow Together</a> - <i>29 March, 2018</i></li>
<li><a href="/fungi/network-resilience.html">Network Resilience: Woronin Bodies and the Scuttleverse</a> - <i>25 March, 2018</i></li>
</ul>
</div>
<h3>Guides</h3>
<div class="card">
<ul>
<li><a href="/fungi/glossary.html">Mycological Glossary</a> - <i>4 September, 2020</i></li>
<li><a href="/fungi/photo-guide.html">Photographing Mushrooms for Identification</a> - <i>25 August, 2020</i></li>
</ul>
</div>
<h3>Reading List</h3>
<div class="card">
<ul>
<li><a href="/fungi/reading-list.html">Mycology Reading List</a></li>
</ul>
</div>
<hr>

View File

@ -1,11 +1,8 @@
{% extends "nav" %}
{% block title %}mycelial technology | Lichens in Space{% endblock title %}
{% block content %}
<article>
<h2>Lichens in Space</h2>
<i>28 May, 2020</i>
<figure>
<img src="/fungi/xanthoria_fun_dye.jpeg" style="width: 100%;" />
<img src="/static/fungi/xanthoria_fun_dye.jpeg" style="width: 100%;" />
<figcaption>Xanthoria elegans lichen in cross-section, stained with FUN-1 dye.</figcaption>
</figure>
<p>So I think many of us have a basic understanding of what a lichen is: a symbiotic mutualism between a fungus and algae / cyanobacteria. The fungus provides a cosy home for the algae, along with water, nutrients and anchorage; while the algae photosynthesises and provides the fungus with carbohydrates. As Trevor Goward puts it: “Lichens are fungi that have discovered agriculture”. Put another way, lichen are fungi with solar panels. But Ive only recently learned that the situation is far more complex than this simple 1:1 rendering of fungus and algae.</p>
@ -36,4 +33,3 @@
<p><a href="https://pdfs.semanticscholar.org/a8f6/a68e6db11f7b2bed133f434be742e1d4d390.pdf">Viability of the lichen Xanthoria elegans and its symbionts after 18 months of space exposure and simulated Mars conditions on the ISS - Brandt et al. (2015)</a></p>
</article>
<hr>
{%- endblock %}

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | Photographing Mushrooms{% endblock title %}
{% block content %}
<article>
<h2>Guide to Photographing Mushrooms for Identification</h2>
<i>25 August, 2020</i>
@ -11,28 +8,28 @@
<p>Mushrooms are often best identified by observing and listing their morphological traits. These may include the shape of the cap - both from above and in profile, the structure and colour of the hymenium, the colouration of the stem, the structure of the ring (if present) etc. Species within a genus often look identical at a glance and may require careful delineation based on a single characteristic. As such, it's very important to take clear photographs which collectively capture all of these characteristics (or the lack thereof). A minimum of three photos should do the trick:</p>
<p><b>Top-view</b>: captures the shape, colour and texture of the mushroom as seen from above.</p>
<figure>
<img src="/fungi/photo_guide/top_view.jpg" style="width: 100%;" alt="Large brown and white mushroom growing from a birch log on the forest floor. A black-gloved hand with fingers spread is next to the mushroom. The forest floor is covered with wet leaves and English ivy" />
<img src="/static/fungi/photo_guide/top_view.jpg" style="width: 100%;" alt="Large brown and white mushroom growing from a birch log on the forest floor. A black-gloved hand with fingers spread is next to the mushroom. The forest floor is covered with wet leaves and English ivy" />
<figcaption>Here we see a birch polypore mushroom (<i>Fomitopsis betulina</i>) from above, including a humyn hand for scale. As a bonus, we can also see the substrate from which the fungus is fruiting (a birch tree on the forest floor).</figcaption>
</figure>
<p><b>Side-view</b>: captures the profile of the cap, the cap margin and the shape and colour of the stem (including patterns and any bruising which might be present).</p>
<figure>
<img src="/fungi/photo_guide/side_view.jpg" style="width: 100%;" alt="Little brown mushroom (LBM) with a green clover attached to the base, as seen from the side on a white background" />
<img src="/static/fungi/photo_guide/side_view.jpg" style="width: 100%;" alt="Little brown mushroom (LBM) with a green clover attached to the base, as seen from the side on a white background" />
<figcaption>The profile of a single mushroom from the Panaeolus genus.</figcaption>
</figure>
<p><b>Bottom-view</b>: captures the colour and structure of the hymenium (gills, pores or teeth), as well as the way in which the cap is attached to the stem (if present).</p>
<figure>
<img src="/fungi/photo_guide/bottom_view.jpg" style="width: 100%;" alt="Mushroom with white gills and a beige stem" />
<img src="/static/fungi/photo_guide/bottom_view.jpg" style="width: 100%;" alt="Mushroom with white gills and a beige stem" />
<figcaption>The gills of a mushroom I've yet to identify, including the top part of the stem.</figcaption>
</figure>
<p>Your identification process will be further aided by taking the extra steps to capture two more photos:</p>
<p><b>Developmental diversity</b>: captures several examples of the mushroom at various phases of development, including a mature mushroom and primorida. Mushrooms can change colour and shape with age, and may lose key identification features - hence the utility of being able to identify using several phases of development.</p>
<figure>
<img src="/fungi/photo_guide/development.jpg" style="width: 100%;" alt="Tetraptych showing four phases in the development of coprinoid mushrooms amongst mulch; from primordium to mature fruitbody" />
<img src="/static/fungi/photo_guide/development.jpg" style="width: 100%;" alt="Tetraptych showing four phases in the development of coprinoid mushrooms amongst mulch; from primordium to mature fruitbody" />
<figcaption>Four phases in the development of a coprinoid mushroom.</figcaption>
</figure>
<p><b>Spore-print</b>: captures the colour of the spores (an important characteristic with which to narrow your search). You will probably have to take a mushroom cap home / back to your campsite to create the sporeprint (takes 12 - 24 hours).</p>
<figure>
<img src="/fungi/photo_guide/spore_print.jpg" style="width: 100%;" alt="Black sporeprint on white, ruled paper" />
<img src="/static/fungi/photo_guide/spore_print.jpg" style="width: 100%;" alt="Black sporeprint on white, ruled paper" />
<figcaption>Black spores from a mushroom in the Panaeolus genus.</figcaption>
</figure>
<p class="bordered"><i>Bear in mind that you don't need fancy equipment to photograph mushrooms for the purpose of identification. I've been using the same simple Sony digital point-and-shoot since 2011. Also, don't be afraid to get close-up to your subject (the mushroom). The details often prove to be very important!</i></p>
@ -40,16 +37,15 @@
<p>In addition to photos of the mushroom itself, it can be incredibly helpful to collect data concerning the context in which the mushroom is growing. The key considerations in this regard are the substrate and habitat: What is the mushroom growing on? Where is it growing? And what is growing or living around it? Having photos of these contextual factors can make a big difference when identifying a mushroom or genus or species-level. A minimum of two photos will suffice:</p>
<p><b>Substrate-attachment</b>: captures the substrate on which the mushroom is growing. Try to observe beyond the obvious: if it's growing from the ground, is it growing on mulch, dung or from beneath the soil?</p>
<figure>
<img src="/fungi/photo_guide/substrate.jpg" style="width: 100%;" alt="Cluster of mushrooms with beige-orange caps and brown stems, growing on a wet, decomposing log in a forest" />
<img src="/static/fungi/photo_guide/substrate.jpg" style="width: 100%;" alt="Cluster of mushrooms with beige-orange caps and brown stems, growing on a wet, decomposing log in a forest" />
<figcaption>A cluster of mushrooms growing on a wet, decomposing log.</figcaption>
</figure>
<p><b>Habitat</b>: captures the environmental conditions and some of the species which may be copresent with the mushroom.</p>
<figure>
<img src="/fungi/photo_guide/habitat.jpg" style="width: 100%;" alt="Birch forest with grass covering the forest floor" />
<img src="/static/fungi/photo_guide/habitat.jpg" style="width: 100%;" alt="Birch forest with grass covering the forest floor" />
<figcaption>A grassland birch forest.</figcaption>
</figure>
<h3>Conclusion</h3>
<p>There you have it, with 5 - 7 photos you can capture a great deal of data about a given species. Whether you're asking someone for help with identification or working through the process yourself, having these morphological and ecological data to draw on will enrich your learning experience and enhance your chances of making a successful identification. You may even notice things in the photos which you missed while in the field, for example, a beetle crawling amongst the gills (what ecological relationship might it have with the fungus?). I hope you've found this guide helpful and that it facilitates many fun identification forays in your near-future!</p>
</article>
<hr>
{%- endblock %}

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | Network Resilience{% endblock title %}
{% block content %}
<article>
<h2>Network Resilience: Woronin Bodies and the Scuttleverse</h2>
<i>25 March, 2018</i>
@ -17,4 +14,3 @@
<p>My understanding of SSB is far from adequate to even begin exploring these ideas in code, but I look forward to the day that dream takes shape around me; self-assembling structural proteins dancing as hyphal shards of The Greater Scuttleverse merge and diverge.</p>
</article>
<hr>
{%- endblock %}

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | Photographing Mushrooms{% endblock title %}
{% block content %}
<article>
<h2>Guide to Photographing Mushrooms for Identification</h2>
<i>25 August, 2020</i>
@ -11,28 +8,28 @@
<p>Mushrooms are often best identified by observing and listing their morphological traits. These may include the shape of the cap - both from above and in profile, the structure and colour of the hymenium, the colouration of the stem, the structure of the ring (if present) etc. Species within a genus often look identical at a glance and may require careful delineation based on a single characteristic. As such, it's very important to take clear photographs which collectively capture all of these characteristics (or the lack thereof). A minimum of three photos should do the trick:</p>
<p><b>Top-view</b>: captures the shape, colour and texture of the mushroom as seen from above.</p>
<figure>
<img src="/fungi/photo_guide/top_view.jpg" style="width: 100%;" alt="Large brown and white mushroom growing from a birch log on the forest floor. A black-gloved hand with fingers spread is next to the mushroom. The forest floor is covered with wet leaves and English ivy" />
<img src="/static/fungi/photo_guide/top_view.jpg" style="width: 100%;" alt="Large brown and white mushroom growing from a birch log on the forest floor. A black-gloved hand with fingers spread is next to the mushroom. The forest floor is covered with wet leaves and English ivy" />
<figcaption>Here we see a birch polypore mushroom (<i>Fomitopsis betulina</i>) from above, including a humyn hand for scale. As a bonus, we can also see the substrate from which the fungus is fruiting (a birch tree on the forest floor).</figcaption>
</figure>
<p><b>Side-view</b>: captures the profile of the cap, the cap margin and the shape and colour of the stem (including patterns and any bruising which might be present).</p>
<figure>
<img src="/fungi/photo_guide/side_view.jpg" style="width: 100%;" alt="Little brown mushroom (LBM) with a green clover attached to the base, as seen from the side on a white background" />
<img src="/static/fungi/photo_guide/side_view.jpg" style="width: 100%;" alt="Little brown mushroom (LBM) with a green clover attached to the base, as seen from the side on a white background" />
<figcaption>The profile of a single mushroom from the Panaeolus genus.</figcaption>
</figure>
<p><b>Bottom-view</b>: captures the colour and structure of the hymenium (gills, pores or teeth), as well as the way in which the cap is attached to the stem (if present).</p>
<figure>
<img src="/fungi/photo_guide/bottom_view.jpg" style="width: 100%;" alt="Mushroom with white gills and a beige stem" />
<img src="/static/fungi/photo_guide/bottom_view.jpg" style="width: 100%;" alt="Mushroom with white gills and a beige stem" />
<figcaption>The gills of a mushroom I've yet to identify, including the top part of the stem.</figcaption>
</figure>
<p>Your identification process will be further aided by taking the extra steps to capture two more photos:</p>
<p><b>Developmental diversity</b>: captures several examples of the mushroom at various phases of development, including a mature mushroom and primorida. Mushrooms can change colour and shape with age, and may lose key identification features - hence the utility of being able to identify using several phases of development.</p>
<figure>
<img src="/fungi/photo_guide/development.jpg" style="width: 100%;" alt="Tetraptych showing four phases in the development of coprinoid mushrooms amongst mulch; from primordium to mature fruitbody" />
<img src="/static/fungi/photo_guide/development.jpg" style="width: 100%;" alt="Tetraptych showing four phases in the development of coprinoid mushrooms amongst mulch; from primordium to mature fruitbody" />
<figcaption>Four phases in the development of a coprinoid mushroom.</figcaption>
</figure>
<p><b>Spore-print</b>: captures the colour of the spores (an important characteristic with which to narrow your search). You will probably have to take a mushroom cap home / back to your campsite to create the sporeprint (takes 12 - 24 hours).</p>
<figure>
<img src="/fungi/photo_guide/spore_print.jpg" style="width: 100%;" alt="Black sporeprint on white, ruled paper" />
<img src="/static/fungi/photo_guide/spore_print.jpg" style="width: 100%;" alt="Black sporeprint on white, ruled paper" />
<figcaption>Black spores from a mushroom in the Panaeolus genus.</figcaption>
</figure>
<p class="bordered"><i>Bear in mind that you don't need fancy equipment to photograph mushrooms for the purpose of identification. I've been using the same simple Sony digital point-and-shoot since 2011. Also, don't be afraid to get close-up to your subject (the mushroom). The details often prove to be very important!</i></p>
@ -40,16 +37,15 @@
<p>In addition to photos of the mushroom itself, it can be incredibly helpful to collect data concerning the context in which the mushroom is growing. The key considerations in this regard are the substrate and habitat: What is the mushroom growing on? Where is it growing? And what is growing or living around it? Having photos of these contextual factors can make a big difference when identifying a mushroom or genus or species-level. A minimum of two photos will suffice:</p>
<p><b>Substrate-attachment</b>: captures the substrate on which the mushroom is growing. Try to observe beyond the obvious: if it's growing from the ground, is it growing on mulch, dung or from beneath the soil?</p>
<figure>
<img src="/fungi/photo_guide/substrate.jpg" style="width: 100%;" alt="Cluster of mushrooms with beige-orange caps and brown stems, growing on a wet, decomposing log in a forest" />
<img src="/static/fungi/photo_guide/substrate.jpg" style="width: 100%;" alt="Cluster of mushrooms with beige-orange caps and brown stems, growing on a wet, decomposing log in a forest" />
<figcaption>A cluster of mushrooms growing on a wet, decomposing log.</figcaption>
</figure>
<p><b>Habitat</b>: captures the environmental conditions and some of the species which may be copresent with the mushroom.</p>
<figure>
<img src="/fungi/photo_guide/habitat.jpg" style="width: 100%;" alt="Birch forest with grass covering the forest floor" />
<img src="/static/fungi/photo_guide/habitat.jpg" style="width: 100%;" alt="Birch forest with grass covering the forest floor" />
<figcaption>A grassland birch forest.</figcaption>
</figure>
<h3>Conclusion</h3>
<p>There you have it, with 5 - 7 photos you can capture a great deal of data about a given species. Whether you're asking someone for help with identification or working through the process yourself, having these morphological and ecological data to draw on will enrich your learning experience and enhance your chances of making a successful identification. You may even notice things in the photos which you missed while in the field, for example, a beetle crawling amongst the gills (what ecological relationship might it have with the fungus?). I hope you've found this guide helpful and that it facilitates many fun identification forays in your near-future!</p>
</article>
<hr>
{%- endblock %}

View File

@ -0,0 +1,22 @@
<article>
<h2>Mycology Literature Reading List</h2>
<h3>2021</h3>
<p>I'm aiming to read 100 mycology journal articles and textbook chapters this year. Any entries marked with a * have been read and discussed as part of the Hyphal Fusion Reading Group.</p>
<ol>
<li>Hiscox J, O'Leary J, Boddy L (2018). Fungus wars: basidiomycete battles in wood decay. <i>Studies in Mycology</i> <b>89</b>: 117124. *</li>
<li>Crowther TW, Boddy L, Maynard DS (2018). The use of artificial media in fungal ecology. <i>Fungal Ecology</i> <b>32</b>: 8791.</li>
<li>Parfitt D, Hunt J, Dockrell D, <i>et al.</i> (2010). Do all trees carry the seeds of their own destruction? PCR reveals numerous wood decay fungi latently present in sapwood of a wide range of angiosperm trees. <i>Fungal Ecology</i>, <b>3</b>: 338346.</li>
<li>Boddy L, Crockatt ME, Ainsworth AM (2011). Ecology of Hericium cirrhatum, H. coralloides and H. erinaceus in the UK. <i>Fungal Ecology</i>, <b>4</b>(2): 163173.</li>
<li>Heaton L, Obara B, Grau V, <i>et al.</i> (2012). Analysis of fungal networks. <i>Fungal Biology Reviews</i>, <b>26</b>(1): 12-29.</i></li>
<li>Mueller U, Kardish M, Ishak H, <i>et al.</i> (2018). Phylogenetic patterns of antfungus associations indicate that farming strategies, not only a superior fungal cultivar, explain the ecological success of leafcutter ants. <i>Molecular Ecology</i>, <b>27</b>(10): 2414-2434.</li>
<li>Yang D, Liang J, Wang Y, <i>et al.</i> (2016). Tea waste: an effective and economic substrate for oyster mushroom cultivation. <i>Journal of the Science of Food and Agriculture</i>, <b>96</b>(2), 680-684.</li>
<li>Richter DL, Dixon TG, Smith JK (2016). Revival of saprotrophic and mycorrhizal basidiomycete cultures after 30 years in cold storage in sterile water. <i>Canadian Journal of Microbiology</i>, <b>62</b>(11), 932-937.</li>
<li>Schwartz MW, Hoeksema JD, Gehring CA, <i>et al.</i> (2006). The promise and the potential consequences of the global transport of mycorrhizal fungal inoculum. <i>Ecology Letters</i>, <b>9</b>(5), 501-515.</li>
<li>Kües U & Liu Y (2000). Fruiting body production in basidiomycetes. <i>Applied Microbiology and Biotechnology</i>, <b>54</b>(2), 141-152.</li>
<li>Jusino MA, Lindner DL, Banik MT, <i>et al.</i> (2016). Experimental evidence of a symbiosis between red-cockaded woodpeckers and fungi. <i>Proceedings of the Royal Society B: Biological Sciences</i>, <b>283</b>(1827).
<li>Garibay-Orijel R, Ramírez-Terrazo A & Ordaz-Velázquez M. (2012). Women care about local knowledge, experiences from ethnomycology. <i>Journal of Ethnobiology and Ethnomedicine</i>, <b>8</b>(1), 1-13.</li>
<li>Raudabaugh DB, Matheny PB, Hughes KW, <i>et al.</i> (2020). Where are they hiding? Testing the body snatchers hypothesis in pyrophilous fungi. <i>Fungal Ecology</i>, <b>43</b>, 100870.</li>
<li>Ingham CJ, Kalisman O, Finkelshtein A, Ben-Jacob E (2011). Mutually facilitated dispersal between the nonmotile fungus Aspergillus fumigatus and the swarming bacterium Paenibacillus vortex. <i>Proceedings of the National Academy of Sciences</i>, <b>108</b>(49):19731-6.</li>
</ol>
</article>
<hr>

View File

@ -1,24 +0,0 @@
{% extends "nav" %}
{% block title %}mycelial technology | reading list{% endblock title %}
{% block content %}
<h2>Mycology Literature Reading List</h2>
<h3>2021</h3>
<p>I'm aiming to read 100 mycology journal articles and textbook chapters this year. Any entries marked with a * have been read and discussed as part of the Hyphal Fusion Reading Group.</p>
<ol>
<li>Hiscox J, O'Leary J, Boddy L (2018). Fungus wars: basidiomycete battles in wood decay. <i>Studies in Mycology</i> <b>89</b>: 117124. *</li>
<li>Crowther TW, Boddy L, Maynard DS (2018). The use of artificial media in fungal ecology. <i>Fungal Ecology</i> <b>32</b>: 8791.</li>
<li>Parfitt D, Hunt J, Dockrell D, <i>et al.</i> (2010). Do all trees carry the seeds of their own destruction? PCR reveals numerous wood decay fungi latently present in sapwood of a wide range of angiosperm trees. <i>Fungal Ecology</i>, <b>3</b>: 338346.</li>
<li>Boddy L, Crockatt ME, Ainsworth AM (2011). Ecology of Hericium cirrhatum, H. coralloides and H. erinaceus in the UK. <i>Fungal Ecology</i>, <b>4</b>(2): 163173.</li>
<li>Heaton L, Obara B, Grau V, <i>et al.</i> (2012). Analysis of fungal networks. <i>Fungal Biology Reviews</i>, <b>26</b>(1): 12-29.</i></li>
<li>Mueller U, Kardish M, Ishak H, <i>et al.</i> (2018). Phylogenetic patterns of antfungus associations indicate that farming strategies, not only a superior fungal cultivar, explain the ecological success of leafcutter ants. <i>Molecular Ecology</i>, <b>27</b>(10): 2414-2434.</li>
<li>Yang D, Liang J, Wang Y, <i>et al.</i> (2016). Tea waste: an effective and economic substrate for oyster mushroom cultivation. <i>Journal of the Science of Food and Agriculture</i>, <b>96</b>(2), 680-684.</li>
<li>Richter DL, Dixon TG, Smith JK (2016). Revival of saprotrophic and mycorrhizal basidiomycete cultures after 30 years in cold storage in sterile water. <i>Canadian Journal of Microbiology</i>, <b>62</b>(11), 932-937.</li>
<li>Schwartz MW, Hoeksema JD, Gehring CA, <i>et al.</i> (2006). The promise and the potential consequences of the global transport of mycorrhizal fungal inoculum. <i>Ecology Letters</i>, <b>9</b>(5), 501-515.</li>
<li>Kües U & Liu Y (2000). Fruiting body production in basidiomycetes. <i>Applied Microbiology and Biotechnology</i>, <b>54</b>(2), 141-152.</li>
<li>Jusino MA, Lindner DL, Banik MT, <i>et al.</i> (2016). Experimental evidence of a symbiosis between red-cockaded woodpeckers and fungi. <i>Proceedings of the Royal Society B: Biological Sciences</i>, <b>283</b>(1827).
<li>Garibay-Orijel R, Ramírez-Terrazo A & Ordaz-Velázquez M. (2012). Women care about local knowledge, experiences from ethnomycology. <i>Journal of Ethnobiology and Ethnomedicine</i>, <b>8</b>(1), 1-13.</li>
<li>Raudabaugh DB, Matheny PB, Hughes KW, <i>et al.</i> (2020). Where are they hiding? Testing the body snatchers hypothesis in pyrophilous fungi. <i>Fungal Ecology</i>, <b>43</b>, 100870.</li>
<li>Ingham CJ, Kalisman O, Finkelshtein A, Ben-Jacob E (2011). Mutually facilitated dispersal between the nonmotile fungus Aspergillus fumigatus and the swarming bacterium Paenibacillus vortex. <i>Proceedings of the National Academy of Sciences</i>, <b>108</b>(49):19731-6.</li>
</ol>
<hr>
{%- endblock %}

View File

@ -1,7 +1,4 @@
{% extends "nav" %}
{% block title %}mycelial technology | glyph{% endblock title %}
{% block content %}
<img src="glyph.svg" style="width: 175px;" />
<img src="/static/glyph.svg" style="width: 175px;" />
<p>Welcome to the personal website of glyph: a mycelial technologist coding and cultivating a decentralized, multispecies future. On my site you will find art, musings and projects relating to carbon-based and silicon-based technologies.</p>
<p>[ sowing seeds of symbiosis | weaving webs of wu wei ]</p>
<h2>Contact Information</h2>
@ -11,4 +8,3 @@
<li class="list-item" style="word-wrap: break-word;" title="glyph's Scuttlebutt profile">Scuttlebutt: @HEqy940T6uB+T+d9Jaa58aNfRzLx9eRWqkZljBmnkmk=.ed25519</li>
</ul>
<hr>
{%- endblock %}

View File

@ -1,76 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>mycelial technology | glyph</title>
<meta name="author" content="glyph">
<meta name="description" content="The personal website of glyph.">
<meta name="keywords" content="mycology, fermentation, coding">
<style>
a {
color: #faf884;
text-decoration: none;
}
body {
max-width: 900px;
font-family: monospace;
}
html {
background-color: #111;
color: #777;
}
h1 {
color: #ccc;
}
h2 {
color: #ccc;
}
.navbar {
list-style-type: none;
display: inline-block;
padding-left: 0;
}
.nav-item {
color: #666;
display: inline-block;
padding: 0.5rem;
}
p {
padding: 0.5rem;
}
</style>
</head>
<body>
<h1>mycelial technology</h1>
<hr>
<nav>
<ol class="navbar">
<li class="nav-item">background</li>
<li class="nav-item">computers</li>
<li class="nav-item">drawing</li>
<li class="nav-item">fermentation</li>
<li class="nav-item">language</li>
<li class="nav-item">lists</li>
<li class="nav-item">movement</li>
<li class="nav-item">mycology</li>
<li class="nav-item">travel</li>
</ol>
</nav>
<p>Welcome to the personal website of glyph.</p>
<h2>Contact Information</h2>
<hr>
<ul style="padding: 0;">
<li style="list-style-type: none; padding: 0.5rem;">Email: <a href="mailto:gnomad@cryptolab.net">gnomad@cryptolab.net</a></li>
<li style="list-style-type: none; padding: 0.5rem;">Merveilles: <a href="https://merveilles.town/@glyph" title="@glyph@merveilles.town">@glyph</a></li>
<li style="list-style-type: none; padding: 0.5rem; word-wrap: break-word;">Scuttlebutt: @HEqy940T6uB+T+d9Jaa58aNfRzLx9eRWqkZljBmnkmk=.ed25519</li>
</ul>
</body>
</html>

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | lists{% endblock title %}
{% block content %}
<h2>Lists</h2>
<h3>Books</h3>
<p>Currently Reading</p>
@ -76,4 +73,3 @@
<li><a href="https://www.embedded.fm/" title="Embedded FM"><i>Embedded FM</i></a> - Elecia White and Chris White</li>
</ul>
<hr>
{%- endblock %}

View File

@ -1,11 +1,7 @@
{% extends "nav" %}
{% block title %}mycelial technology | meditation{% endblock title %}
{% block content %}
<article>
<h2>Meditation</h2>
<img src="meditation/fire_poi.jpg" style="width: 500px; max-width: 90%;" alt="Black and white, high-contrast photo of a young man spinning fire poi. His expression is calm and void-like." title="Fire poi meditation" />
<img src="/static/meditation/fire_poi.jpg" style="width: 500px; max-width: 90%;" alt="Black and white, high-contrast photo of a young man spinning fire poi. His expression is calm and void-like." title="Fire poi meditation" />
<p>Flow arts, and poi in particular, was the practice which first introduced me to the transformative capacity of movement and meditation. I began spinning in 2011 and practiced intensely for several years, eventually transitioning into club juggling. I still pick up my poi from time to time, but far less frequently than in years gone by. Flow arts help to pull me out of my head, down into my body, and out into community.</p>
<p>My current meditation practice includes the <i>Eight Pieces of Silk Brocade</i> qigong routine, which I move through each morning after waking, as well as semi-regular <i>suizen</i> (shakuhachi) and club juggling. My mycelial cultivation efforts form an interspecies meditation of sorts; observing and interacting with the hyphal pulses as we move together through spacetime.</p>
</article>
<hr>
{%- endblock %}

View File

@ -1,5 +0,0 @@
{% extends "nav" %}
{% block content %}
<h2>Movement</h2>
<hr>
{%- endblock %}

View File

@ -1,23 +0,0 @@
{% extends "base" %}
{% block nav -%}
<h1><a href="/" style="text-decoration: none;">mycelial technology</a></h1>
<hr>
<nav>
<ol class="nav-bar">
<li class="nav-item"><a href="/art">art</a></li>
<li class="nav-item"><a href="/background">background</a></li>
<li class="nav-item"><a href="/bacteria">bacteria</a></li>
<li class="nav-item"><a href="/computers">computers</a></li>
<li class="nav-item"><a href="/fungi">fungi</a></li>
<li class="nav-item"><a href="/lists">lists</a></li>
<li class="nav-item"><a href="/meditation">meditation</a></li>
<li class="nav-item"><a href="/plants">plants</a></li>
<li class="nav-item"><a href="/projects">projects</a></li>
<li class="nav-item"><a href="/support">support</a></li>
</ol>
</nav>
{%- block content %}{%- endblock %}
<footer style="display: flex;">
<p>&#169; 2021 glyph<p>
</footer>
{%- endblock %}

View File

@ -1,15 +0,0 @@
{% extends "nav" %}
{% block title %}mycelial technology | plants{% endblock title %}
{% block content %}
<h2>Plants</h2>
<h3>Articles</h3>
<div class="card">
<ul>
<li><a href="/plants/aloe-there">Aloe There</a> - <i>6 June, 2020</i></li>
<li><a href="/plants/botanical-deceptions">Botanical Deceptions</a> - <i>15 May, 2020</i></li>
<li><a href="/plants/potato-tech">Potato Tech</a> - <i>31 December, 2017</i></li>
<li><a href="/plants/blueberry-dance">I Have Been Invited Into a Dance by a Bush with Purple Berries</a> - <i>20 December, 2017</i></li>
</ul>
</div>
<hr>
{%- endblock %}

View File

@ -1,11 +1,8 @@
{% extends "nav" %}
{% block title %}mycelial technology | Aloe There{% endblock title %}
{% block content %}
<article>
<h2>Aloe There</h2>
<i>6 June, 2020</i>
<figure>
<img src="/plants/aloe_flowers.jpg" alt="Dense cones of golden, tubular flowers dominate the frame, with green succulent leaves at the bottom, a bright blue sky above, and a thatched-roof in the background. Bees can be seen amongst the flowers." style="width: 100%;" />
<img src="/static/plants/aloe_flowers.jpg" alt="Dense cones of golden, tubular flowers dominate the frame, with green succulent leaves at the bottom, a bright blue sky above, and a thatched-roof in the background. Bees can be seen amongst the flowers." style="width: 100%;" />
<figcaption>Sunshine in the winter time.</figcaption>
</figure>
<p>All the aloes are in full bloom right now and it makes me so happy. The bees are pretty stoked about it too, as are the sunbirds.</p>
@ -15,10 +12,9 @@
</blockquote>
<p>This is likely <i>Aloe ferox</i>, though it should be said that Im still learning to differentiate species. Its categorised as a solitary, non-branching tree aloe. There is another one nearby which is easily 5-6 meters tall. Some species have yellow flowers, while others are orange, red or pink. They are wonderful neighbours. I think I will devote a good portion of my life to caring for aloes and learning more about them. If my spirit has a colour, it is that of the flowers above.</p>
<figure>
<img src="/plants/tree_aloe.jpg" style="width: 100%;" />
<img src="/static/plants/tree_aloe.jpg" style="width: 100%;" />
<figcaption>Majestic tree aloe amongst the succulents.</figcaption>
</figure>
</article>
<p>An anecdote: I once drank <i>Huachuma</i> on a farm which had a cactus and succulent garden home to more than 1,000 species. After a good few hours drumming around a bonfire, my friends and I went to walk through the aforementioned garden. The moon was full, the night was still. Of all those species, the aloes were the only ones which appeared to me to be glowing blue-green. Not just reflecting the moonlight…glowing. I shall let the reader interpret that as they wish.</p>
<hr>
{%- endblock %}

View File

@ -1,11 +1,8 @@
{% extends "nav" %}
{% block title %}mycelial technology | I Have Been Invited Into a Dance by a Bush with Purple Berries{% endblock title %}
{% block content %}
<article>
<h2>I Have Been Invited Into a Dance by a Bush with Purple Berries</h2>
<i>20 December, 2017</i>
<figure>
<img src="/plants/blueberries.jpeg" style="width: 100%;" />
<img src="/static/plants/blueberries.jpeg" style="width: 100%;" />
<figcaption>Hand-picked blueberry snacks are where its at.</figcaption>
</figure>
<p>Today I thought about ripeness. How do you know when its just right? Well, its different for every plant I guess. With blueberries Im learning to evaluate ripeness based on sight (colour of berry) and touch (firmness when gently squeezed). When I first started picking them, just two weeks ago, I only used my eyes and thus tended to pick unripe, tangy berries. Now I get 'em when theyre oh-so-sweet! In the last few days Ive also started to notice the rate at which the berries ripen and can time my future visits more precisely.</p>
@ -14,4 +11,3 @@
<p>On a somewhat related note: Im making friends with The Jinj, a neighbourhood cat of the orange variety.</p>
</article>
<hr>
{%- endblock %}

View File

@ -1,11 +1,8 @@
{% extends "nav" %}
{% block title %}mycelial technology | Botanical Deceptions{% endblock title %}
{% block content %}
<article>
<h2>Botanical Deceptions</h2>
<i>15 May, 2020</i>
<figure>
<img src="/plants/ceropegia_sandersonii.jpeg" alt="An unusual flower which looks like an umbrella with a hollow, tapering stem. The top is white with green speckled petals and frilly egdes. A twisting, dark green vine is blurry in the background." style="width: 100%;" />
<img src="/static/plants/ceropegia_sandersonii.jpeg" alt="An unusual flower which looks like an umbrella with a hollow, tapering stem. The top is white with green speckled petals and frilly egdes. A twisting, dark green vine is blurry in the background." style="width: 100%;" />
<figcaption><i>Ceropegia sandersonii</i> flower. Photo credit: <a href="https://commons.wikimedia.org/wiki/User:Wildfeuer">Wildfeuer</a>. Shared under a Creative Commons Attribution 2.5 Generic (CC BY 2.5) license.</figcaption>
</figure>
<p>Ive been on a steady one-a-day listening spree of In Defense of Plants podcast episodes. Today I listened to <a href="https://www.indefenseofplants.com/podcast/2019/6/9/ep-216-dying-bees-wasp-venom-and-other-strange-floral-scents">Episode 216: Dying Bees, Wasp Venom, and other Strange Floral Scents</a>, featuring an interview with <a href="https://pollinationresearch.wordpress.com/dr-annemarie-heiduk/">Dr Annemarie Heiduk</a>. If you enjoy geeking out about plants, insects, chemistry or ecology, I highly recommend taking a listen!</p>
@ -15,9 +12,8 @@
<p>More info can be found on the <a href="https://en.wikipedia.org/wiki/Ceropegia_sandersonii">Wikipedia page for Ceropegia sandersonii</a> and in this article: <a href="http://www.the-scientist.com/?articles.view/articleNo/47214/title/To-Attract-Pollinators--Flower-Mimics-Wounded-Bee/#post143971">To Attract Pollinators, Flower Mimics Wounded Bee.</a></p>
<p>A friend of mine has a gorgeous vine growing as a potted plant at her house. Only while listening to this episode did I realise its a member of the Ceropegia! Now Im stoked to identify it to species level and ask her ever-so-sweetly if I might take a cutting (or seeds). The one she has looks very much like this <i>C. linearis sub. woodii</i>:</p>
<figure>
<img src="/plants/ceropegia_linearis.jpeg" alt="A grayish-pink vine with two heart-shaped, gray-green leaves and an unusual, hollow flower with furry black structures at the tip." style="width: 100%;" />
<img src="/static/plants/ceropegia_linearis.jpeg" alt="A grayish-pink vine with two heart-shaped, gray-green leaves and an unusual, hollow flower with furry black structures at the tip." style="width: 100%;" />
<figcaption><i>Ceropegia linearis</i> subspecies woodii flower. Photo credit: <a href="https://en.wikipedia.org/wiki/en:User:MidgleyDJ">Dr. David Midgley</a>. Shared under a Creative Commons Attribution-ShareAlike 2.5 Generic (CC BY-SA 2.5) license.</figcaption>
</figure>
</article>
<hr>
{%- endblock %}

View File

@ -0,0 +1,11 @@
<h2>Plants</h2>
<h3>Articles</h3>
<div class="card">
<ul>
<li><a href="/plants/aloe-there.html">Aloe There</a> - <i>6 June, 2020</i></li>
<li><a href="/plants/botanical-deceptions.html">Botanical Deceptions</a> - <i>15 May, 2020</i></li>
<li><a href="/plants/potato-tech.html">Potato Tech</a> - <i>31 December, 2017</i></li>
<li><a href="/plants/blueberry-dance.html">I Have Been Invited Into a Dance by a Bush with Purple Berries</a> - <i>20 December, 2017</i></li>
</ul>
</div>
<hr>

View File

@ -1,19 +1,15 @@
{% extends "nav" %}
{% block title %}mycelial technology | Potato Tech{% endblock title %}
{% block content %}
<article>
<h2>Potato Tech</h2>
<i>31 December, 2017</i>
<p>I shared lunch with some permaculture friends on Christmas day and they gifted me some of their seed potatoes. Today I planted them. Having seen how the plants thrived in my friends garden, and having learning more about potato diversity while I was in Peru, Im excited to experience my first attempt growing them. As I do so, I extend the line of humyns who have woven relationships with this plant over thousands and thousands of years; an honour and a privilege.</p>
<p>Seeing the potatoes like this is freakin rad! I got to appreciate the potato plant as an energy capture and storage technology: harness solar energy, grow a battery, redeploy solar panels from that battery months later. Beautiful.</p>
<figure>
<img src="/plants/potato_battery.jpeg" style="width: 100%;" />
<img src="/static/plants/potato_battery.jpeg" style="width: 100%;" />
<figcaption>Warning: battery is reaching critical levels.</figcaption>
</figure>
<figure>
<img src="/plants/potato_sprout.jpeg" style="width: 100%;" />
<img src="/static/plants/potato_sprout.jpeg" style="width: 100%;" />
<figcaption>The courageous potato perseveres in search of the light.</figcaption>
</figure>
</article>
<hr>
{%- endblock %}

View File

@ -1,11 +1,7 @@
{% extends "nav" %}
{% block title %}mycelial technology | projects{% endblock title %}
{% block content %}
<h2>Projects</h2>
<p>I'm a tortoise and I shuffle between projects in eccentric orbits; sometimes I complete one.</p>
<h3>Active</h3>
<ul>
<li><a href="https://github.com/ssb-ngi-pointer">Next Generation Internet (NGI) Pointer</a>: Scuttlebutt protocol upgrades</li>
<li><a href="https://opencollective.com/peachcloud">PeachCloud</a>: solarpunk social hardware with Scuttlebutt</li>
<li><a href="https://hyphalfusion.network">Hyphal Fusion Network</a>: a forum for distributed mycology research</li>
</ul>
@ -17,7 +13,7 @@
</ul>
<h3>Complete</h3>
<ul>
<li><a href="https://github.com/ssb-ngi-pointer">Next Generation Internet (NGI) Pointer</a>: Scuttlebutt protocol upgrades</li>
<li>An RSS generator for mycelial.technology (<a href="https://git.sr.ht/~glyph/website/tree/master/src/bin/generate_rss.rs" title="Rust source code for a custom RSS generator">source</a>)</li>
</ul>
<hr>
{%- endblock %}

View File

@ -1,6 +1,3 @@
{% extends "nav" %}
{% block title %}mycelial technology | support{% endblock title %}
{% block content %}
<h2>Support</h2>
<p>If you'd like to support my creative endeavours, please consider contributing in one of the following ways:</p>
<ul>
@ -15,4 +12,3 @@
<li>Joey Santore - $5 per month for <a href="https://www.patreon.com/CrimePaysButBotanyDoesnt" title="Crime Pays But Botany Doesn't Patreon">Crime Pays But Botany Doesn't</a></li>
</ul>
<hr>
{%- endblock %}

View File

@ -1,5 +0,0 @@
{% extends "nav" %}
{% block content %}
<h2>Travel</h2>
<hr>
{%- endblock %}