Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
cd7bfe5c42 | |||
34ed0a2168 | |||
b24daeec6e | |||
40c147e9c1 | |||
0bf7192ac0 | |||
2832a21d7d | |||
5b7ee353a0 | |||
ba55447149 | |||
957f6a66c7 | |||
3bdd79de62 | |||
e68f94ae24 |
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();
|
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<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="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="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.">
|
||||||
|
@ -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 %}
|
||||||
|
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 %}
|
@ -5,11 +5,16 @@
|
|||||||
<h3>Books</h3>
|
<h3>Books</h3>
|
||||||
<p>Currently Reading</p>
|
<p>Currently Reading</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<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>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>
|
||||||
@ -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