Compare commits
16 Commits
add_glossa
...
master
Author | SHA1 | Date | |
---|---|---|---|
cd7bfe5c42 | |||
34ed0a2168 | |||
b24daeec6e | |||
40c147e9c1 | |||
0bf7192ac0 | |||
2832a21d7d | |||
5b7ee353a0 | |||
ba55447149 | |||
957f6a66c7 | |||
3bdd79de62 | |||
e68f94ae24 | |||
0490e56c06 | |||
4ccbd14d2f | |||
971e5d4907 | |||
3a47c81af6 | |||
f6ead0ddc5 |
1833
Cargo.lock
generated
1833
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
16
Cargo.toml
16
Cargo.toml
@ -1,22 +1,14 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mycelial_technology"
|
name = "mycelial_technology"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
authors = ["glyph <glyph@mycelial.technology>"]
|
authors = ["glyph <glyph@mycelial.technology>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
regex = "1"
|
regex = "1"
|
||||||
rocket = "0.4"
|
rocket = "0.5.0-rc.1"
|
||||||
|
rocket_dyn_templates = { version = "0.1.0-rc.1", features = ["tera"] }
|
||||||
rss = "1"
|
rss = "1"
|
||||||
serde = "1"
|
miniserde = "0.1"
|
||||||
serde_derive = "1"
|
|
||||||
serde_json = "1"
|
|
||||||
tera = "1"
|
tera = "1"
|
||||||
|
|
||||||
[dependencies.rocket_contrib]
|
|
||||||
version = "0.4"
|
|
||||||
default-features = false
|
|
||||||
features = ["json", "tera_templates"]
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
extern crate regex;
|
extern crate regex;
|
||||||
extern crate rss;
|
extern crate rss;
|
||||||
|
|
||||||
|
use regex::Regex;
|
||||||
|
use rss::{ChannelBuilder, Item};
|
||||||
use std::error;
|
use std::error;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use regex::Regex;
|
|
||||||
use rss::{ChannelBuilder, Item};
|
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn error::Error>> {
|
fn main() -> Result<(), Box<dyn error::Error>> {
|
||||||
// create rss channel for mycelial.technology
|
// create rss channel for mycelial.technology
|
||||||
@ -25,11 +25,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
let plants = "./templates/plants";
|
let plants = "./templates/plants";
|
||||||
|
|
||||||
// add directories to a vector
|
// add directories to a vector
|
||||||
let mut dirs = Vec::new();
|
let dirs = vec![bacteria, computers, fungi, plants];
|
||||||
dirs.push(bacteria);
|
|
||||||
dirs.push(computers);
|
|
||||||
dirs.push(fungi);
|
|
||||||
dirs.push(plants);
|
|
||||||
|
|
||||||
// create vectors for item fields
|
// create vectors for item fields
|
||||||
let mut titles = Vec::new();
|
let mut titles = Vec::new();
|
||||||
@ -46,8 +42,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
// populate item url vector from article filenames
|
// populate item url vector from article filenames
|
||||||
let re_url = Regex::new("./templates/(.*).html.tera")?;
|
let re_url = Regex::new("./templates/(.*).html.tera")?;
|
||||||
let caps_url = re_url.captures(
|
let caps_url = re_url.captures(
|
||||||
&path
|
path.to_str()
|
||||||
.to_str()
|
|
||||||
.expect("Failed to convert file path to string slice for regex capture"),
|
.expect("Failed to convert file path to string slice for regex capture"),
|
||||||
);
|
);
|
||||||
if let Some(url) = caps_url {
|
if let Some(url) = caps_url {
|
||||||
|
95
src/main.rs
95
src/main.rs
@ -1,18 +1,16 @@
|
|||||||
#![feature(proc_macro_hygiene, decl_macro)]
|
#![feature(proc_macro_hygiene, decl_macro)]
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate log;
|
extern crate log;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
extern crate rocket_contrib;
|
|
||||||
#[macro_use]
|
|
||||||
extern crate serde_derive;
|
|
||||||
extern crate tera;
|
extern crate tera;
|
||||||
|
|
||||||
use std::path::{Path, PathBuf};
|
use miniserde::{json, Serialize};
|
||||||
|
use rocket::{
|
||||||
use rocket::response::NamedFile;
|
fs::{relative, FileServer},
|
||||||
use rocket_contrib::templates::Template;
|
get, routes,
|
||||||
|
};
|
||||||
|
use rocket_dyn_templates::Template;
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
struct FlashContext {
|
struct FlashContext {
|
||||||
@ -20,18 +18,13 @@ struct FlashContext {
|
|||||||
flash_msg: Option<String>,
|
flash_msg: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/<file..>")]
|
|
||||||
fn files(file: PathBuf) -> Option<NamedFile> {
|
|
||||||
NamedFile::open(Path::new("static/").join(file)).ok()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/art")]
|
#[get("/art")]
|
||||||
fn art() -> Template {
|
fn art() -> Template {
|
||||||
let context = FlashContext {
|
let context = FlashContext {
|
||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("art", &context)
|
Template::render("art", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/background")]
|
#[get("/background")]
|
||||||
@ -40,7 +33,7 @@ fn background() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("background", &context)
|
Template::render("background", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/bacteria")]
|
#[get("/bacteria")]
|
||||||
@ -49,7 +42,7 @@ fn bacteria() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("bacteria", &context)
|
Template::render("bacteria", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/bacteria/sauerkraut-beginnings")]
|
#[get("/bacteria/sauerkraut-beginnings")]
|
||||||
@ -58,7 +51,7 @@ fn bacteria_sauerkraut_beginnings() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("bacteria/sauerkraut_beginnings", &context)
|
Template::render("bacteria/sauerkraut_beginnings", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/bacteria/sauerkraut-bottled")]
|
#[get("/bacteria/sauerkraut-bottled")]
|
||||||
@ -67,7 +60,7 @@ fn bacteria_sauerkraut_bottled() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("bacteria/sauerkraut_bottled", &context)
|
Template::render("bacteria/sauerkraut_bottled", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/computers")]
|
#[get("/computers")]
|
||||||
@ -76,7 +69,7 @@ fn computers() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("computers", &context)
|
Template::render("computers", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/computers/esp8266-dht11")]
|
#[get("/computers/esp8266-dht11")]
|
||||||
@ -85,7 +78,7 @@ fn computers_esp8266_dht11() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("computers/esp8266_dht11", &context)
|
Template::render("computers/esp8266_dht11", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/computers/i2c-adventures")]
|
#[get("/computers/i2c-adventures")]
|
||||||
@ -94,7 +87,7 @@ fn computers_i2c_adventures() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("computers/i2c_adventures", &context)
|
Template::render("computers/i2c_adventures", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/computers/rust-compilation")]
|
#[get("/computers/rust-compilation")]
|
||||||
@ -103,7 +96,7 @@ fn computers_rust_compilation() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("computers/rust_compilation", &context)
|
Template::render("computers/rust_compilation", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi")]
|
#[get("/fungi")]
|
||||||
@ -112,7 +105,7 @@ fn fungi() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi", &context)
|
Template::render("fungi", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi/design-patterns")]
|
#[get("/fungi/design-patterns")]
|
||||||
@ -121,7 +114,7 @@ fn fungi_design_patterns() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi/design_patterns", &context)
|
Template::render("fungi/design_patterns", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi/glossary")]
|
#[get("/fungi/glossary")]
|
||||||
@ -130,7 +123,7 @@ fn fungi_glossary() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi/glossary", &context)
|
Template::render("fungi/glossary", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi/grow-forests")]
|
#[get("/fungi/grow-forests")]
|
||||||
@ -139,7 +132,7 @@ fn fungi_grow_forests() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi/grow_forests", &context)
|
Template::render("fungi/grow_forests", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi/grow-together")]
|
#[get("/fungi/grow-together")]
|
||||||
@ -148,7 +141,7 @@ fn fungi_grow_together() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi/grow_together", &context)
|
Template::render("fungi/grow_together", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi/lichen-space")]
|
#[get("/fungi/lichen-space")]
|
||||||
@ -157,7 +150,7 @@ fn fungi_lichen_space() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi/lichen_space", &context)
|
Template::render("fungi/lichen_space", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi/network-resilience")]
|
#[get("/fungi/network-resilience")]
|
||||||
@ -166,7 +159,7 @@ fn fungi_network_resilience() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi/network_resilience", &context)
|
Template::render("fungi/network_resilience", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/fungi/photo-guide")]
|
#[get("/fungi/photo-guide")]
|
||||||
@ -175,7 +168,16 @@ fn fungi_photo_guide() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("fungi/photo_guide", &context)
|
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("/")]
|
#[get("/")]
|
||||||
@ -184,7 +186,7 @@ fn home() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("home", &context)
|
Template::render("home", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/lists")]
|
#[get("/lists")]
|
||||||
@ -193,7 +195,7 @@ fn lists() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("lists", &context)
|
Template::render("lists", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/meditation")]
|
#[get("/meditation")]
|
||||||
@ -202,7 +204,7 @@ fn meditation() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("meditation", &context)
|
Template::render("meditation", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/plants")]
|
#[get("/plants")]
|
||||||
@ -211,7 +213,7 @@ fn plants() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("plants", &context)
|
Template::render("plants", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/plants/aloe-there")]
|
#[get("/plants/aloe-there")]
|
||||||
@ -220,7 +222,7 @@ fn plants_aloe_there() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("plants/aloe_there", &context)
|
Template::render("plants/aloe_there", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/plants/blueberry-dance")]
|
#[get("/plants/blueberry-dance")]
|
||||||
@ -229,7 +231,7 @@ fn plants_blueberry_dance() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("plants/blueberry_dance", &context)
|
Template::render("plants/blueberry_dance", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/plants/botanical-deceptions")]
|
#[get("/plants/botanical-deceptions")]
|
||||||
@ -238,7 +240,7 @@ fn plants_botanical_deceptions() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("plants/botanical_deceptions", &context)
|
Template::render("plants/botanical_deceptions", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/plants/potato-tech")]
|
#[get("/plants/potato-tech")]
|
||||||
@ -247,7 +249,7 @@ fn plants_potato_tech() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("plants/potato_tech", &context)
|
Template::render("plants/potato_tech", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/projects")]
|
#[get("/projects")]
|
||||||
@ -256,7 +258,7 @@ fn projects() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("projects", &context)
|
Template::render("projects", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/support")]
|
#[get("/support")]
|
||||||
@ -265,7 +267,7 @@ fn support() -> Template {
|
|||||||
flash_name: None,
|
flash_name: None,
|
||||||
flash_msg: None,
|
flash_msg: None,
|
||||||
};
|
};
|
||||||
Template::render("support", &context)
|
Template::render("support", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[catch(404)]
|
#[catch(404)]
|
||||||
@ -275,15 +277,15 @@ fn not_found() -> Template {
|
|||||||
flash_name: Some("error".to_string()),
|
flash_name: Some("error".to_string()),
|
||||||
flash_msg: Some("No resource found for given URL".to_string()),
|
flash_msg: Some("No resource found for given URL".to_string()),
|
||||||
};
|
};
|
||||||
Template::render("not_found", context)
|
Template::render("not_found", json::to_string(&context))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
#[launch]
|
||||||
rocket::ignite()
|
fn rocket() -> _ {
|
||||||
|
rocket::build()
|
||||||
.mount(
|
.mount(
|
||||||
"/",
|
"/",
|
||||||
routes![
|
routes![
|
||||||
files,
|
|
||||||
art,
|
art,
|
||||||
background,
|
background,
|
||||||
bacteria,
|
bacteria,
|
||||||
@ -301,6 +303,7 @@ fn main() {
|
|||||||
fungi_lichen_space,
|
fungi_lichen_space,
|
||||||
fungi_network_resilience,
|
fungi_network_resilience,
|
||||||
fungi_photo_guide,
|
fungi_photo_guide,
|
||||||
|
fungi_reading_list,
|
||||||
home,
|
home,
|
||||||
lists,
|
lists,
|
||||||
meditation,
|
meditation,
|
||||||
@ -313,7 +316,7 @@ fn main() {
|
|||||||
support
|
support
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
.register(catchers![not_found])
|
.mount("/", FileServer::from(relative!("static")))
|
||||||
|
.register("/", catchers![not_found])
|
||||||
.attach(Template::fairing())
|
.attach(Template::fairing())
|
||||||
.launch();
|
|
||||||
}
|
}
|
||||||
|
BIN
static/art/archer.jpg
Normal file
BIN
static/art/archer.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 56 KiB |
BIN
static/art/beetle.jpg
Normal file
BIN
static/art/beetle.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
BIN
static/art/ninja.jpg
Normal file
BIN
static/art/ninja.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
BIN
static/art/xiao_wen_ju.jpg
Normal file
BIN
static/art/xiao_wen_ju.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
@ -2,16 +2,18 @@
|
|||||||
{% block title %}mycelial technology | art{% endblock title %}
|
{% block title %}mycelial technology | art{% endblock title %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>Art</h2>
|
<h2>Art</h2>
|
||||||
|
<h3>2020</h3>
|
||||||
<div class="flex-grid">
|
<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 a Japanese archer with a longbow" src="art/archer.jpg" title="Archer" />
|
||||||
<img class="col" alt="Line drawing of an American kestrel" src="art/kestrel.jpg" title="American kestrel" />
|
<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="Line drawing of a black oval surrounded by two rings of glyphs" src="art/obsidian_artifact.jpg" title="Obsidian Artifact" />
|
<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" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-grid">
|
<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="Inked portrait of a beautiful young person" src="art/xiao_wen_ju.jpg" title="Xiao Wen Ju" />
|
||||||
<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="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 meditating figure with haloes of glyphs surrounding them" src="art/halo.svg" title="Halo" />
|
<img class="col" alt="Line drawing of a woman in a hooded parka" src="art/parka.jpg" title="Parka" />
|
||||||
</div>
|
</div>
|
||||||
|
<h3>2019</h3>
|
||||||
<div class="flex-grid">
|
<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 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 monk ringing a bell" src="art/ring_monk.jpg" title="Ring" />
|
||||||
@ -27,9 +29,16 @@
|
|||||||
<img class="col" alt="Line drawing of a physalis fruit" src="art/physalis.jpg" title="Frail" />
|
<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 humyn hand reaching out to touch a mycelial network" src="art/hyphal_fusion.svg" title="Hyphal Fusion" />
|
||||||
</div>
|
</div>
|
||||||
|
<h3>2018</h3>
|
||||||
<div class="flex-grid">
|
<div class="flex-grid">
|
||||||
<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 an aloe plant" src="art/aloe.jpg" title="Aloe plant" />
|
||||||
<img class="col" alt="Line drawing of a woman in a hooded parka" src="art/parka.jpg" title="Parka" />
|
<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" />
|
||||||
|
</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" />
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="shortcut icon" type="image/png" href="favicon.png"/>
|
<link rel="shortcut icon" type="image/png" href="/favicon.png"/>
|
||||||
<title>{% block title %}{% endblock title %}</title>
|
<title>{% block title %}{% endblock title %}</title>
|
||||||
<meta name="author" content="glyph">
|
<meta name="author" content="glyph">
|
||||||
<meta name="description" content="The personal website of 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">
|
<meta name="keywords" content="botany, coding, electronics, fermentation, fungi, meditation, mycology, plants">
|
||||||
<style>
|
<style>
|
||||||
a {
|
a {
|
||||||
@ -58,6 +58,7 @@
|
|||||||
.col {
|
.col {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 400px) {
|
@media (max-width: 400px) {
|
||||||
|
@ -19,5 +19,11 @@
|
|||||||
<li><a href="/fungi/photo-guide">Photographing Mushrooms for Identification</a> - <i>25 August, 2020</i></li>
|
<li><a href="/fungi/photo-guide">Photographing Mushrooms for Identification</a> - <i>25 August, 2020</i></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<h3>Reading List</h3>
|
||||||
|
<div class="card">
|
||||||
|
<ul>
|
||||||
|
<li><a href="/fungi/reading-list">Mycology Reading List</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
55
templates/fungi/mycomaterials_guide.html.tera
Normal file
55
templates/fungi/mycomaterials_guide.html.tera
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
{% 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>
|
||||||
|
<h3>Introduction</h3>
|
||||||
|
<p>The blessing and curse of becoming known for your interest in a particular topic is the increasing number of questions you receive. As a keen mycophile, I am frequently sent photos of mushrooms and asked for assistance in identifying them. More often than not, I receive a single photo taken from directly above the mushroom, without any mention of contextual data such as where the photo was taken and during which season. This derth of data makes it very difficult to positively identify the mushroom to genus or species level. With that in mind, I thought it might be useful to write a short guide on photography for the purposes of mushroom identification.</p>
|
||||||
|
<p class="bordered"><i>When first beginning your journey into mushroom identification, it may be tempting to take a field guide with you to assist with identifications - I know this is how I started off. However, I've found that I prefer taking photos while in the field and doing the identification work and research at home. This allows me to focus on observation while in the field and avoid the frustration of paging through often-inadequate field guides. Find what works for you.</i></p>
|
||||||
|
<h3>Capturing Morphological Traits</h3>
|
||||||
|
<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" />
|
||||||
|
<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" />
|
||||||
|
<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" />
|
||||||
|
<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" />
|
||||||
|
<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" />
|
||||||
|
<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>
|
||||||
|
<h3>Capturing Ecological Context</h3>
|
||||||
|
<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" />
|
||||||
|
<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" />
|
||||||
|
<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 %}
|
24
templates/fungi/reading_list.html.tera
Executable file
24
templates/fungi/reading_list.html.tera
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
{% 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>: 117–124. *</li>
|
||||||
|
<li>Crowther TW, Boddy L, Maynard DS (2018). The use of artificial media in fungal ecology. <i>Fungal Ecology</i> <b>32</b>: 87–91.</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>: 338–346.</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): 163–173.</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 ant–fungus 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 %}
|
@ -2,7 +2,8 @@
|
|||||||
{% block title %}mycelial technology | glyph{% endblock title %}
|
{% block title %}mycelial technology | glyph{% endblock title %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<img src="glyph.svg" style="width: 175px;" />
|
<img src="glyph.svg" style="width: 175px;" />
|
||||||
<p>Welcome to the personal website of glyph.</p>
|
<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>
|
<h2>Contact Information</h2>
|
||||||
<ul style="padding: 0;">
|
<ul style="padding: 0;">
|
||||||
<li class="list-item">Email: <a href="mailto:glyph@mycelial.technology" title="glyph's Email address">glyph@mycelial.technology</a></li>
|
<li class="list-item">Email: <a href="mailto:glyph@mycelial.technology" title="glyph's Email address">glyph@mycelial.technology</a></li>
|
||||||
|
@ -5,12 +5,17 @@
|
|||||||
<h3>Books</h3>
|
<h3>Books</h3>
|
||||||
<p>Currently Reading</p>
|
<p>Currently Reading</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><i>A Closed and Common Orbit</i> - Becky Chambers</li>
|
<li><i>Finding the Mother Tree</i> - Suzanne Simard</li>
|
||||||
<li><i>Radical Mycology</i> - Peter McCoy</li>
|
<li><i>Radical Mycology</i> - Peter McCoy</li>
|
||||||
<li><i>Jonathan Strange & Mr Norrell</i> - Susanna Clarke</li>
|
<li><i>Jonathan Strange & Mr Norrell</i> - Susanna Clarke</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Previously Read</p>
|
<p>Previously Read</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><i>How to be Good</i> - Nick Hornby</li>
|
||||||
|
<li><i>Aurora</i> - Kim Stanley Robinson</li>
|
||||||
|
<li><i>Seveneves</i> - Neal Stephenson</li>
|
||||||
|
<li><i>Agency</i> - William Gibson</li>
|
||||||
|
<li><i>A Closed and Common Orbit</i> - Becky Chambers</li>
|
||||||
<li><i>Ready Player One</i> - Ernest Cline</li>
|
<li><i>Ready Player One</i> - Ernest Cline</li>
|
||||||
<li><i>Red Moon</i> - Kim Stanley Robinson</li>
|
<li><i>Red Moon</i> - Kim Stanley Robinson</li>
|
||||||
<li><i>Mythago Wood</i> - Robert Holdstock</li>
|
<li><i>Mythago Wood</i> - Robert Holdstock</li>
|
||||||
@ -18,7 +23,18 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<p>Wishlist</p>
|
<p>Wishlist</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><i>The Mushroom at the End of the World</i> - Anna Lowenhaupt Tsing</li>
|
<li><i>Earth Repair</i> - Leila Darwish</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Manga (漫画)</h3>
|
||||||
|
<p>Currently Reading</p>
|
||||||
|
<ul>
|
||||||
|
<li><i>Dragonball, Vol. 1</i> - 鳥山 明 (Akira Toriyama)</li>
|
||||||
|
<li><i>日常 (Nichijou), Vol. 2</i> - あらゐけいいち (Keiichi Arawi)</li>
|
||||||
|
</ul>
|
||||||
|
<p>Previously Read</p>
|
||||||
|
<ul>
|
||||||
|
<li><i>日常 (Nichijou), Vol. 1</i> - あらゐけいいち (Keiichi Arawi)</li>
|
||||||
|
<li><i>ナルト (Naruto), Vol. 1</i> - 岸本 斉史 (Masashi Kishimoto)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3>Graphic Novels</h3>
|
<h3>Graphic Novels</h3>
|
||||||
<p>Currently Reading</p>
|
<p>Currently Reading</p>
|
||||||
@ -28,6 +44,9 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<p>Previously Read</p>
|
<p>Previously Read</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><i>Seven to Eternity, Vol. 1</i> - Rick Remender, Jerome Opeña and Matt Hollingsworth</li>
|
||||||
|
<li><i>Extremity, Vol. 1</i> - Daniel Warren Johnson and Mike Spicer</li>
|
||||||
|
<li><i>Descender, Vol. 1</i> - Jeff Lemire and Dustin Nguyen</li>
|
||||||
<li><i>Invisible Kingdom, Vol. 1</i> - G. Willow Wilson and Christian Ward</li>
|
<li><i>Invisible Kingdom, Vol. 1</i> - G. Willow Wilson and Christian Ward</li>
|
||||||
<li><i>Isola, Vol. 1</i> - Brenden Fletcher and Karl Kerschl</li>
|
<li><i>Isola, Vol. 1</i> - Brenden Fletcher and Karl Kerschl</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -49,8 +68,12 @@
|
|||||||
<h3>Podcasts</h3>
|
<h3>Podcasts</h3>
|
||||||
<p>Currently Listening</p>
|
<p>Currently Listening</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://www.embedded.fm/" title="Embedded FM"><i>Embedded FM</i></a> - Elecia White and Chris White</li>
|
<li><a href="https://anchor.fm/sayurisaying" title="Everyday-Japanese Podcast"><i>Sayuri Saying Everyday-Japanese Podcast</i></a> - Sayuri</li>
|
||||||
<li><a href="https://www.indefenseofplants.com/podcast" title="In Defense of Plants podcast"><i>In Defense of Plants</i></a> - Matt</li>
|
<li><a href="https://www.indefenseofplants.com/podcast" title="In Defense of Plants podcast"><i>In Defense of Plants</i></a> - Matt</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<p>Previously Listened</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://www.embedded.fm/" title="Embedded FM"><i>Embedded FM</i></a> - Elecia White and Chris White</li>
|
||||||
|
</ul>
|
||||||
<hr>
|
<hr>
|
||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
@ -18,6 +18,6 @@
|
|||||||
</nav>
|
</nav>
|
||||||
{%- block content %}{%- endblock %}
|
{%- block content %}{%- endblock %}
|
||||||
<footer style="display: flex;">
|
<footer style="display: flex;">
|
||||||
<p>© 2020 glyph<p>
|
<p>© 2021 glyph<p>
|
||||||
</footer>
|
</footer>
|
||||||
{%- endblock %}
|
{%- endblock %}
|
||||||
|
@ -5,13 +5,14 @@
|
|||||||
<p>I'm a tortoise and I shuffle between projects in eccentric orbits; sometimes I complete one.</p>
|
<p>I'm a tortoise and I shuffle between projects in eccentric orbits; sometimes I complete one.</p>
|
||||||
<h3>Active</h3>
|
<h3>Active</h3>
|
||||||
<ul>
|
<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://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>
|
<li><a href="https://hyphalfusion.network">Hyphal Fusion Network</a>: a forum for distributed mycology research</li>
|
||||||
<li><a href="https://git.sr.ht/~glyph/myka">myka</a>: culture library & cultivation log for tracking the expansion of mycelia</li>
|
|
||||||
<li><a href="https://git.sr.ht/~glyph/spore">spore</a>: a manual for the mycelial arts</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<h3>On-hold</h3>
|
<h3>On-hold</h3>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="https://git.sr.ht/~glyph/myka">myka</a>: culture library & cultivation log for tracking the expansion of mycelia</li>
|
||||||
|
<li><a href="https://git.sr.ht/~glyph/spore">spore</a>: a manual for the mycelial arts</li>
|
||||||
<li><a href="https://two.camp.scuttlebutt.nz/">Scuttlecamp 2</a>: gathering of the Butts</li>
|
<li><a href="https://two.camp.scuttlebutt.nz/">Scuttlecamp 2</a>: gathering of the Butts</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3>Complete</h3>
|
<h3>Complete</h3>
|
||||||
|
@ -11,8 +11,7 @@
|
|||||||
<h2>Supporting</h2>
|
<h2>Supporting</h2>
|
||||||
<p>These are the projects and friends I currently contribute to:</p>
|
<p>These are the projects and friends I currently contribute to:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>@cel - $5 per month for <a href="https://celehner.com/projects.html" title="cel's Projects">Scuttlebutt</a> development</li>
|
<li>Yuki Kimura - $5 per month for <a href="https://cijapanese.com" title="Comprehensive Japanese">Comprehensive Japanese</a></li>
|
||||||
<li>@SoapDog - $5 per month for <a href="http://patchfox.org" title="PatchFox Website">PatchFox</a> development</li>
|
|
||||||
<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>
|
<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>
|
</ul>
|
||||||
<hr>
|
<hr>
|
||||||
|
Reference in New Issue
Block a user