Compare commits
60 Commits
b25fcfed88
...
main
Author | SHA1 | Date | |
---|---|---|---|
0fe06d9390 | |||
8c06f6948a | |||
fb9945279b | |||
8a8d9e0063 | |||
91b20693d9 | |||
f230c182ac | |||
b8491ec460 | |||
29adbecffa | |||
32eae7cc8e | |||
dee49239f1 | |||
bfd48200d7 | |||
e591003a48 | |||
f21ef12a67 | |||
46a2c111ba | |||
7ef9e26166 | |||
f7bbe50ff7 | |||
d304994f1c | |||
782e0b4dfb | |||
b093a3d8c5 | |||
a151a9fe9d | |||
9806515bbc | |||
0ce42390ce | |||
befa2b8f4d | |||
c9eefa953c | |||
f20cc28349 | |||
bd702f8f51 | |||
e0546c0e2e | |||
18c2c898aa | |||
451e860697 | |||
b89373b478 | |||
b6f74485a4 | |||
5290772bce | |||
b33c8f409f | |||
25febf44a2 | |||
5cff4da500 | |||
8e5ccb77c6 | |||
54533f62e9 | |||
6be0bd3d7b | |||
fbc26ed89c | |||
255cd357c5 | |||
a0f84311d2 | |||
adbd294e30 | |||
93e66d5b5c | |||
80e9b781e5 | |||
84cf190a9c | |||
dc75eaa4e7 | |||
67866adb1a | |||
75114cdbbe | |||
ee5ca17e67 | |||
0494aacf1a | |||
fa2579bc08 | |||
ac88d5e4d0 | |||
49b2070f09 | |||
5456e5ccd8 | |||
8e615fa92b | |||
1b6df5e889 | |||
65d93c6d25 | |||
7c5307ea3f | |||
019dbd27fa | |||
88bebf37f3 |
67
.gitlab-ci.yml
Normal file
@ -0,0 +1,67 @@
|
||||
# Default image for jobs - contains Hugo Extended
|
||||
image:
|
||||
name: hugomods/hugo:node
|
||||
entrypoint: [""]
|
||||
|
||||
variables:
|
||||
HUGO_ENV: production
|
||||
# Tells GitLab Runner to initialize and update submodules recursively
|
||||
GIT_SUBMODULE_STRATEGY: recursive
|
||||
SURFER_SERVER: "https://protocol.ecologies.info/"
|
||||
|
||||
stages:
|
||||
- build # Added build stage
|
||||
- deploy
|
||||
|
||||
# Job to build the Hugo site
|
||||
build_site:
|
||||
stage: build
|
||||
before_script:
|
||||
- echo "installing NPM packages"
|
||||
- npm install
|
||||
script:
|
||||
- echo "Starting Hugo build..."
|
||||
- hugo version
|
||||
- hugo --minify --gc --cleanDestinationDir # Build the site
|
||||
- echo "Build completed. Public directory contents:"
|
||||
- ls -la public/
|
||||
artifacts:
|
||||
paths:
|
||||
- public/ # Pass the 'public' directory to the next stage
|
||||
expire_in: 1 hour # Optional: Set artifact expiry
|
||||
# Define when this job runs (e.g., only on the main branch)
|
||||
# Adjust 'only' or 'rules' as needed for your workflow
|
||||
only:
|
||||
- publish # Example: Run only on the main branch
|
||||
|
||||
# Job to deploy the built site using cloudron-surfer
|
||||
deploy_site:
|
||||
stage: deploy
|
||||
image: node:18 # Use Node.js image for cloudron-surfer
|
||||
needs: # Ensure 'build_site' job completes successfully first
|
||||
- job: build_site
|
||||
artifacts: true # Download artifacts from 'build_site'
|
||||
# No need for GIT_SUBMODULE_STRATEGY here if GIT_STRATEGY is none or repo isn't needed
|
||||
# If you need the repo source in this job, add GIT_SUBMODULE_STRATEGY here too.
|
||||
variables:
|
||||
GIT_STRATEGY: none # Optimization: Don't fetch repo source code for deploy job
|
||||
before_script:
|
||||
- echo "Installing cloudron-surfer..."
|
||||
- npm install -g cloudron-surfer
|
||||
script:
|
||||
- 'echo "Deploying to: $SURFER_SERVER"'
|
||||
# Verify artifact downloaded correctly
|
||||
- echo "Contents of downloaded artifact:"
|
||||
- ls -la public/ # Artifacts are extracted to the root of the job workspace
|
||||
- echo "Uploading files to server using surfer put..."
|
||||
- >-
|
||||
surfer put
|
||||
--token $SURFER_TOKEN
|
||||
--server $SURFER_SERVER
|
||||
public/* /
|
||||
- echo "Deployment completed successfully"
|
||||
# Define when this job runs (e.g., only on the main branch after build)
|
||||
# Adjust 'only' or 'rules' as needed for your workflow
|
||||
only:
|
||||
- publish # Example: Run only on the main branch
|
||||
|
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
||||
[submodule "themes/hugo-starter-tailwind-basic"]
|
||||
path = themes/hugo-starter-tailwind-basic
|
||||
url = https://github.com/bep/hugo-starter-tailwind-basic.git
|
69
README.md
@ -4,10 +4,77 @@ A project of the [Media Economies Design Lab](https://www.colorado.edu/lab/medla
|
||||
|
||||
Developed in Hugo.
|
||||
|
||||
## Usage
|
||||
## Development
|
||||
|
||||
Be sure to have a recent Hugo *extended* version installed.
|
||||
|
||||
Navigate to the project directory and:
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
Then, to serve the site locally:
|
||||
|
||||
```
|
||||
hugo server
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
Thanks to the [MEDLab Hugo template](https://git.medlab.host/dhorn/medlab-hugo-template), the site is set up to deploy automatically to the MEDLab server via GitLab CI. To do so, when developing locally, use these git commands:
|
||||
|
||||
```
|
||||
git push origin
|
||||
git push origin main:publish
|
||||
```
|
||||
|
||||
A push to `publish` should trigger a pipeline in GitLab to deploy the site. If it doesn't, check for errors in Gitea and GitLab.
|
||||
|
||||
## Interviews
|
||||
|
||||
see `/archetypes/interview.md` for the interview template. You can create a new interview with:
|
||||
|
||||
```
|
||||
hugo new content content/interviews/lastname-interview_title.md
|
||||
```
|
||||
|
||||
This will create a new interview in the `content/interviews` directory with the current date and the title you provide. You can then edit the file to add your content.
|
||||
|
||||
Alternately, you can manually add a file there in the proper format.
|
||||
|
||||
### Headshots
|
||||
|
||||
Optionally you can add a headshot photo to your interview. To do this:
|
||||
|
||||
1. Place your image file in the `/assets/headshots/` directory
|
||||
2. Add a `headshot` field to your interview's front matter with just the filename. For example:
|
||||
|
||||
```yaml
|
||||
headshot: "firstname_lastname.jpg"
|
||||
```
|
||||
|
||||
*Note: Name is case sensitive, might as well use lowercase letters and hyphens in your filename.*
|
||||
|
||||
### Narrator links
|
||||
|
||||
You can add links to an interview that relate to the narrator. To do this, add a `links` field to the front matter of the interview. The value should be a list of objects, each with a `text` and `url` field. For example:
|
||||
|
||||
```
|
||||
links:
|
||||
- text: "My Website"
|
||||
url: "https://example.com"
|
||||
- text: "My Twitter"
|
||||
url: "https://twitter.com/example"
|
||||
```
|
||||
This will include the links in the interview page. The links will be displayed as a list with the text as the link text and the URL as the link target.
|
||||
|
||||
### Open Graph Image
|
||||
|
||||
You can add Open Graph image (for social media sharing) to an interview. To do this, add a `ogImage` field to the front matter of the interview. The value should be the path to the image file. For example:
|
||||
|
||||
```yaml
|
||||
ogImage: "/images/my-image.jpg"
|
||||
```
|
||||
|
||||
*Note: The image should be at least 1200x630 pixels for best results. Make sure to place the image in `/static/images/` directory so it can be served correctly. The path should be relative to the static directory.*
|
||||
|
@ -1,6 +0,0 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
14
archetypes/interviews.md
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
narrator: ""
|
||||
subject: ""
|
||||
facilitator: ""
|
||||
date: {{ dateFormat "2006-01-02" .Date }} # YYYY-MM-DD
|
||||
approved: "" # YYYY-MM-DD
|
||||
summary: ""
|
||||
location: ""
|
||||
topics: []
|
||||
headshot: "placeholder-headshot.png"
|
||||
links:
|
||||
- text: ""
|
||||
url: ""
|
||||
---
|
50
assets/css/components/wompum.css
Normal file
@ -0,0 +1,50 @@
|
||||
.wompum-container {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.wompum-container .wompum-grid,
|
||||
.wompum-container .wompum-interview-grid {
|
||||
gap: 2px;
|
||||
height: 100%;
|
||||
min-height: 2px;
|
||||
grid-template-rows: repeat(var(--grid-rows, 5), 1fr);
|
||||
}
|
||||
|
||||
.wompum-container--wide-gap .wompum-grid,
|
||||
.wompum-container--wide-gap .wompum-interview-grid {
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.wompum-container--no-gap .wompum-grid,
|
||||
.wompum-container--no-gap .wompum-interview-grid {
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
.wompum-grid,
|
||||
.wompum-interview-grid {
|
||||
display: grid;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.wompum-cell {
|
||||
@apply dark:opacity-70 brightness-100;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transition: all 3s ease-in;
|
||||
}
|
||||
|
||||
.wompum-cell:hover {
|
||||
@apply dark:opacity-100 brightness-125;
|
||||
transition: all .3s ease;
|
||||
}
|
||||
|
||||
.wompum-cell[class*="900"]:hover {
|
||||
@apply brightness-200;
|
||||
}
|
||||
|
||||
.wompum-cell--narrator,
|
||||
.wompum-cell--subject,
|
||||
.wompum-cell--facilitator {
|
||||
min-height: unset;
|
||||
}
|
50
assets/css/interview.css
Normal file
@ -0,0 +1,50 @@
|
||||
.interviewer-question {
|
||||
font-style: italic;
|
||||
color: #444;
|
||||
margin-left: -1rem;
|
||||
}
|
||||
|
||||
.interview-title--single .interview-title__narrator {
|
||||
@apply mb-2 block font-light;
|
||||
}
|
||||
|
||||
.interview-title--single .interview-title__subject {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.interview-title--list {
|
||||
@apply text-2xl font-bold text-gray-900 group-hover:text-pine-900 underline underline-offset-5 decoration-sand-500 hover:decoration-pine-900
|
||||
dark:text-sand-100 dark:group-hover:text-sand-500 dark:decoration-sand-900 dark:hover:decoration-sand-500;
|
||||
}
|
||||
.interview-title--list .interview-title__narrator::after {
|
||||
content: ":";
|
||||
}
|
||||
|
||||
.interview-title--list .interview-title__subject {
|
||||
@apply font-light;
|
||||
}
|
||||
|
||||
.wompum-radial-grid {
|
||||
@apply absolute w-full h-full top-0 left-0;
|
||||
}
|
||||
|
||||
/* Narrator headshot */
|
||||
|
||||
.narrator__container {
|
||||
@apply relative w-48 mb-2 mx-auto md:mx-0 rounded-full border-4 bg-white border-white
|
||||
dark:bg-gray-950 dark:border-gray-950;
|
||||
}
|
||||
|
||||
.narrator__frame {
|
||||
@apply relative p-4;
|
||||
}
|
||||
|
||||
.narrator__frame img {
|
||||
@apply w-full rounded-full object-cover relative z-10 bg-white text-center border-4 border-white grid place-items-center
|
||||
dark:bg-gray-950 dark:border-gray-950;
|
||||
aspect-ratio: 1;
|
||||
}
|
||||
|
||||
.narrator__wompum {
|
||||
@apply absolute inset-0 w-full h-full;
|
||||
}
|
59
assets/css/main.css
Normal file
@ -0,0 +1,59 @@
|
||||
body {
|
||||
@apply font-garamond;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
@apply text-pine-900 dark:text-pine-100;
|
||||
}
|
||||
|
||||
.tag {
|
||||
@apply p-2 bg-sand-100 border border-transparent rounded-lg whitespace-nowrap no-underline
|
||||
hover:border-sand-500 hover:text-gray-900 hover:opacity-100
|
||||
dark:bg-gray-900 dark:text-sand-100 dark:border-gray-800 dark:hover:text-sand-100
|
||||
transition-all duration-200 ease-in-out;
|
||||
transition: border 2s ease-in;
|
||||
}
|
||||
|
||||
.tag:hover {
|
||||
transition: border 0.1s ease-out;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+1):hover {
|
||||
@apply border-blue-500 dark:border-blue-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+2):hover {
|
||||
@apply border-clay-500 dark:border-clay-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+3):hover {
|
||||
@apply border-cyan-500 dark:border-cyan-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+4):hover {
|
||||
@apply border-gold-500 dark:border-gold-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+5):hover {
|
||||
@apply border-red-500 dark:border-red-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+6):hover {
|
||||
@apply border-pine-500 dark:border-pine-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+7):hover {
|
||||
@apply border-pink-500 dark:border-pink-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+8):hover {
|
||||
@apply border-moss-500 dark:border-moss-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n+9):hover {
|
||||
@apply border-rust-500 dark:border-rust-900;
|
||||
}
|
||||
|
||||
.tag-cloud .tag:nth-child(10n):hover {
|
||||
@apply border-sand-500 dark:border-sand-900;
|
||||
}
|
53
assets/css/styles.css
Normal file
@ -0,0 +1,53 @@
|
||||
@import "tailwindcss";
|
||||
@plugin "@tailwindcss/typography";
|
||||
|
||||
/* allows for toggling dark mode */
|
||||
@custom-variant dark (&:where(.dark, .dark *));
|
||||
|
||||
/* Add safelist for all color variations */
|
||||
/* Wompum.js constructs class names dynamically and tailwind misses them */
|
||||
@source inline("{bg,text,border}-{blue,clay,cyan,gold,moss,pine,pink,red,rust,sand}-{100,500,900}");
|
||||
|
||||
@theme {
|
||||
--font-garamond: 'EB Garamond 12', 'Garamond', 'Baskerville', 'Baskerville Old Face', 'Hoefler Text', 'Times New Roman', serif;
|
||||
--font-iosevka: 'Iosevka', Consolas, 'Liberation Mono', Menlo, monospace;
|
||||
--color-blue-100: #c2cfe0;
|
||||
--color-blue-500: #6f88a3;
|
||||
--color-blue-900: #5d7691;
|
||||
--color-clay-100: #ead4c2;
|
||||
--color-clay-500: #c49b6f;
|
||||
--color-clay-900: #b17f48;
|
||||
--color-cyan-100: #c0dadd;
|
||||
--color-cyan-500: #6a9799;
|
||||
--color-cyan-900: #436668;
|
||||
--color-gold-100: #e6dac1;
|
||||
--color-gold-500: #bca66d;
|
||||
--color-gold-900: #a88b48;
|
||||
--color-moss-100: #d0ddc7;
|
||||
--color-moss-500: #919f71;
|
||||
--color-moss-900: #69734a;
|
||||
--color-pine-100: #c7ddd2;
|
||||
--color-pine-500: #7b9b85;
|
||||
--color-pine-900: #516b57;
|
||||
--color-pink-100: #ead4d2;
|
||||
--color-pink-500: #c0928a;
|
||||
--color-pink-900: #a7695a;
|
||||
--color-red-100: #e8c9c9;
|
||||
--color-red-500: #b87977;
|
||||
--color-red-900: #a35754;
|
||||
--color-rust-100: #eacec4;
|
||||
--color-rust-500: #c48a74;
|
||||
--color-rust-900: #af6649;
|
||||
--color-sand-100: #eee8dd;
|
||||
--color-sand-500: #d4c5aa;
|
||||
--color-sand-900: #b19360;
|
||||
}
|
||||
|
||||
body {
|
||||
@apply antialiased bg-sand-100/50 dark:bg-gray-950 dark:text-gray-200 transition-colors duration-200;
|
||||
}
|
||||
|
||||
@import "components/wompum.css";
|
||||
@import "fonts.css";
|
||||
@import "main.css";
|
||||
@import "interview.css";
|
BIN
assets/headshots/alinagwe_mwaselela.png
Normal file
After Width: | Height: | Size: 870 KiB |
BIN
assets/headshots/asia_dorsey.png
Normal file
After Width: | Height: | Size: 1004 KiB |
BIN
assets/headshots/bernie_mayer.png
Normal file
After Width: | Height: | Size: 855 KiB |
BIN
assets/headshots/camille_acey.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
assets/headshots/david_mayernik.jpg
Normal file
After Width: | Height: | Size: 394 KiB |
BIN
assets/headshots/edson_osorio.png
Normal file
After Width: | Height: | Size: 242 KiB |
BIN
assets/headshots/michael_zargham.png
Normal file
After Width: | Height: | Size: 896 KiB |
BIN
assets/headshots/mosud_mannan.png
Normal file
After Width: | Height: | Size: 918 KiB |
BIN
assets/headshots/placeholder-headshot.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
@ -14,7 +14,7 @@ class ColorCalculator {
|
||||
// Calculate shade based on influences
|
||||
const shade = this.calculateShade(influences);
|
||||
|
||||
return `var(--${colorFamily}-${shade})`;
|
||||
return `${colorFamily}-${shade}`;
|
||||
}
|
||||
|
||||
// Calculate shade based on surrounding influences
|
19
assets/js/darkmode.js
Normal file
@ -0,0 +1,19 @@
|
||||
// Set initial theme on page load
|
||||
(function() {
|
||||
const isDark = localStorage.theme === "dark" ||
|
||||
(!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches);
|
||||
document.documentElement.classList.toggle("dark", isDark);
|
||||
|
||||
// Update label on load
|
||||
const label = document.getElementById("darkmode-label");
|
||||
if (label) label.textContent = !isDark ? "Dark" : "Light";
|
||||
})();
|
||||
|
||||
// Toggle dark mode and update label/localStorage
|
||||
function toggleDarkMode() {
|
||||
const html = document.documentElement;
|
||||
const isDark = html.classList.toggle("dark");
|
||||
localStorage.theme = isDark ? "dark" : "light";
|
||||
const label = document.getElementById("darkmode-label");
|
||||
if (label) label.textContent = !isDark ? "Dark" : "Light";
|
||||
}
|
270
assets/js/wompum.js
Normal file
@ -0,0 +1,270 @@
|
||||
class WompumGrid {
|
||||
constructor(element) {
|
||||
this.gridElement = element;
|
||||
this.gridSize = {
|
||||
columns: parseInt(element.dataset.columns) || 7,
|
||||
rows: parseInt(element.dataset.rows) || 5
|
||||
};
|
||||
|
||||
// Set grid template columns and rows
|
||||
this.gridElement.style.gridTemplateColumns = `repeat(${this.gridSize.columns}, 1fr)`;
|
||||
this.gridElement.style.gridTemplateRows = `repeat(${this.gridSize.rows}, 1fr)`;
|
||||
|
||||
// Initialize color calculator
|
||||
this.colorCalculator = new ColorCalculator();
|
||||
|
||||
// Generate sigil from text content if provided
|
||||
const text = element.dataset.text || '';
|
||||
this.sigil = Sigil.generate(text);
|
||||
this.gridElement.dataset.sigil = JSON.stringify(this.sigil);
|
||||
}
|
||||
|
||||
// Get sigil digit for a cell based on its position
|
||||
getSigilDigit(position) {
|
||||
if (!this.sigil || !this.sigil.length) return 0;
|
||||
return this.sigil[position % this.sigil.length];
|
||||
}
|
||||
|
||||
// Get influences from adjacent cells
|
||||
getInfluences(column, row) {
|
||||
const influences = [];
|
||||
|
||||
// Check adjacent cells (up, down, left, right)
|
||||
const adjacentPositions = [
|
||||
[column, row - 1], // up
|
||||
[column, row + 1], // down
|
||||
[column - 1, row], // left
|
||||
[column + 1, row] // right
|
||||
];
|
||||
|
||||
for (const [adjCol, adjRow] of adjacentPositions) {
|
||||
if (adjCol >= 0 && adjCol < this.gridSize.columns &&
|
||||
adjRow >= 0 && adjRow < this.gridSize.rows) {
|
||||
const cell = this.gridElement.querySelector(
|
||||
`[data-column="${adjCol}"][data-row="${adjRow}"]`
|
||||
);
|
||||
if (cell && cell.dataset.sigilDigit) {
|
||||
influences.push(parseInt(cell.dataset.sigilDigit));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return influences;
|
||||
}
|
||||
|
||||
// Create basic grid cells
|
||||
createGrid() {
|
||||
const totalCells = this.gridSize.columns * this.gridSize.rows;
|
||||
|
||||
for (let i = 0; i < totalCells; i++) {
|
||||
const cell = document.createElement('div');
|
||||
const column = i % this.gridSize.columns;
|
||||
const row = Math.floor(i / this.gridSize.columns);
|
||||
|
||||
cell.className = 'wompum-cell';
|
||||
cell.setAttribute('data-cell-index', i);
|
||||
cell.setAttribute('data-column', column);
|
||||
cell.setAttribute('data-row', row);
|
||||
|
||||
// Set sigil digit based on cell position
|
||||
const sigilDigit = this.getSigilDigit(i);
|
||||
cell.setAttribute('data-sigil-digit', sigilDigit);
|
||||
|
||||
this.gridElement.appendChild(cell);
|
||||
}
|
||||
}
|
||||
|
||||
applyMetadataDesign() {
|
||||
const cells = this.gridElement.querySelectorAll('.wompum-cell');
|
||||
|
||||
cells.forEach(cell => {
|
||||
const column = parseInt(cell.dataset.column);
|
||||
const row = parseInt(cell.dataset.row);
|
||||
const sigilDigit = parseInt(cell.dataset.sigilDigit);
|
||||
|
||||
// Get influences from adjacent cells
|
||||
const influences = this.getInfluences(column, row);
|
||||
|
||||
// Calculate and apply color
|
||||
const color = this.colorCalculator.getColor(sigilDigit, influences);
|
||||
cell.classList.add(`bg-${color}`);
|
||||
});
|
||||
}
|
||||
|
||||
init() {
|
||||
if (!this.gridElement) return;
|
||||
this.createGrid();
|
||||
this.applyMetadataDesign();
|
||||
}
|
||||
}
|
||||
|
||||
class InterviewGrid extends WompumGrid {
|
||||
constructor(element, metadata) {
|
||||
super(element);
|
||||
this.metadata = metadata;
|
||||
|
||||
// Generate sigils for each metadata component
|
||||
this.sigils = {
|
||||
narrator: Sigil.generate(metadata.narrator),
|
||||
subject: Sigil.generate(metadata.subject),
|
||||
facilitator: Sigil.generate(metadata.facilitator)
|
||||
};
|
||||
|
||||
// Store sigils as data attributes
|
||||
Object.entries(this.sigils).forEach(([key, value]) => {
|
||||
this.gridElement.dataset[`${key}Sigil`] = JSON.stringify(value);
|
||||
});
|
||||
}
|
||||
|
||||
getSigilDigit(position, section) {
|
||||
const sigil = this.sigils[section];
|
||||
if (!sigil || !sigil.length) return 0;
|
||||
return sigil[position % sigil.length];
|
||||
}
|
||||
|
||||
createGrid() {
|
||||
const totalCells = this.gridSize.columns * this.gridSize.rows;
|
||||
const narratorColumns = 2;
|
||||
const facilitatorColumns = 2;
|
||||
|
||||
for (let i = 0; i < totalCells; i++) {
|
||||
const cell = document.createElement('div');
|
||||
const column = i % this.gridSize.columns;
|
||||
const row = Math.floor(i / this.gridSize.columns);
|
||||
|
||||
// Determine section based on column position
|
||||
let section;
|
||||
if (column < narratorColumns) section = 'narrator';
|
||||
else if (column >= this.gridSize.columns - facilitatorColumns) section = 'facilitator';
|
||||
else section = 'subject';
|
||||
|
||||
// Use BEM modifiers for sections
|
||||
cell.className = `wompum-cell wompum-cell--${section}`;
|
||||
cell.setAttribute('data-cell-index', i);
|
||||
cell.setAttribute('data-section', section);
|
||||
cell.setAttribute('data-column', column);
|
||||
cell.setAttribute('data-row', row);
|
||||
|
||||
// Set sigil digit based on section and position
|
||||
const sigilDigit = this.getSigilDigit(row, section);
|
||||
cell.setAttribute('data-sigil-digit', sigilDigit);
|
||||
|
||||
this.gridElement.appendChild(cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RadialWompumGrid {
|
||||
constructor(element, size = 10) {
|
||||
this.element = element; // Remove .parentElement
|
||||
this.segments = size;
|
||||
this.colorCalculator = new ColorCalculator();
|
||||
this.sigil = Sigil.generate(this.element.dataset.text || '');
|
||||
}
|
||||
|
||||
createSegment(index) {
|
||||
const angle = (360 / this.segments);
|
||||
// Add a small gap by reducing the arc angle
|
||||
const gap = 2; // degrees of gap
|
||||
const startAngle = (index * angle) + (gap / 2);
|
||||
const endAngle = ((index + 1) * angle) - (gap / 2);
|
||||
const outerRadius = 50;
|
||||
const innerRadius = 0;
|
||||
|
||||
const start = this.polarToCartesian(startAngle, outerRadius);
|
||||
const end = this.polarToCartesian(endAngle, outerRadius);
|
||||
const innerStart = this.polarToCartesian(startAngle, innerRadius);
|
||||
const innerEnd = this.polarToCartesian(endAngle, innerRadius);
|
||||
|
||||
const largeArcFlag = (angle - gap) > 180 ? 1 : 0;
|
||||
|
||||
const d = [
|
||||
`M ${start.x} ${start.y}`,
|
||||
`A ${outerRadius} ${outerRadius} 0 ${largeArcFlag} 1 ${end.x} ${end.y}`,
|
||||
`L ${innerEnd.x} ${innerEnd.y}`,
|
||||
`A ${innerRadius} ${innerRadius} 0 ${largeArcFlag} 0 ${innerStart.x} ${innerStart.y}`,
|
||||
'Z'
|
||||
].join(' ');
|
||||
|
||||
const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
|
||||
path.setAttribute('d', d);
|
||||
|
||||
const sigilDigit = this.getSigilDigit(index);
|
||||
// Pass empty array for influences since we don't need adjacent segments
|
||||
const color = this.colorCalculator.getColor(sigilDigit, []);
|
||||
path.setAttribute('fill', `var(--color-${color})`);
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
polarToCartesian(angle, radius) {
|
||||
const radian = (angle - 90) * Math.PI / 180.0;
|
||||
return {
|
||||
x: 50 + (radius * Math.cos(radian)),
|
||||
y: 50 + (radius * Math.sin(radian))
|
||||
};
|
||||
}
|
||||
|
||||
getSigilDigit(position) {
|
||||
if (!this.sigil || !this.sigil.length) return 0;
|
||||
return this.sigil[position % this.sigil.length];
|
||||
}
|
||||
|
||||
getInfluences(index) {
|
||||
const prev = (index - 1 + this.segments) % this.segments;
|
||||
const next = (index + 1) % this.segments;
|
||||
return [
|
||||
this.getSigilDigit(prev),
|
||||
this.getSigilDigit(next)
|
||||
];
|
||||
}
|
||||
|
||||
createSVG() {
|
||||
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
||||
svg.setAttribute('viewBox', '0 0 100 100');
|
||||
svg.setAttribute('class', 'wompum-radial-grid');
|
||||
|
||||
for (let i = 0; i < this.segments; i++) {
|
||||
svg.appendChild(this.createSegment(i));
|
||||
}
|
||||
|
||||
return svg;
|
||||
}
|
||||
|
||||
init() {
|
||||
if (!this.sigil || !this.sigil.length) {
|
||||
console.error('No sigil generated from text:', this.element.getAttribute('data-text'));
|
||||
return;
|
||||
}
|
||||
const svg = this.createSVG();
|
||||
this.element.insertBefore(svg, this.element.firstChild);
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize grids
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Initialize basic grids
|
||||
document.querySelectorAll('.wompum-grid').forEach(element => {
|
||||
const grid = new WompumGrid(element);
|
||||
grid.init();
|
||||
});
|
||||
|
||||
// Initialize interview grids
|
||||
document.querySelectorAll('.wompum-interview-grid').forEach(element => {
|
||||
let metadata = {};
|
||||
try {
|
||||
metadata = JSON.parse(element.dataset.metadata || '{}');
|
||||
} catch (e) {
|
||||
console.error('Error parsing metadata for interview grid:', e);
|
||||
}
|
||||
|
||||
const grid = new InterviewGrid(element, metadata);
|
||||
grid.init();
|
||||
});
|
||||
|
||||
// Initialize radial grids for profile images
|
||||
document.querySelectorAll('.narrator__container').forEach(element => {
|
||||
const grid = new RadialWompumGrid(element);
|
||||
grid.init();
|
||||
});
|
||||
});
|
@ -1,2 +0,0 @@
|
||||
$font-garamond: 'EB Garamond 12', 'Garamond', 'Baskerville', 'Baskerville Old Face', 'Hoefler Text', 'Times New Roman', serif;
|
||||
$font-iosevka: 'Iosevka', Consolas, 'Liberation Mono', Menlo, monospace;
|
@ -1,37 +0,0 @@
|
||||
.wompum {
|
||||
&-container {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
&-grid {
|
||||
display: grid;
|
||||
gap: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.single-default &-grid,
|
||||
.single-article &-grid {
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
&-cell {
|
||||
width: 100%;
|
||||
min-height: 30px;
|
||||
background-color: var(--sand-500);
|
||||
|
||||
// Create pseudo-random pattern using prime numbers
|
||||
&:nth-child(7n+1) {
|
||||
background-color: var(--sand-100);
|
||||
}
|
||||
|
||||
&:nth-child(5n+2) {
|
||||
background-color: var(--sand-900);
|
||||
}
|
||||
|
||||
&:nth-child(11n+3) {
|
||||
background-color: var(--sand-500);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
// Tailwind
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
// Variables
|
||||
@import "variables";
|
||||
|
||||
// Fonts
|
||||
@import "fonts";
|
||||
|
||||
// Components
|
||||
@import "components/wompum";
|
||||
|
||||
body {
|
||||
font-family: $font-garamond;
|
||||
}
|
||||
|
||||
.interviewer-question {
|
||||
font-style: italic;
|
||||
color: #444;
|
||||
margin-left: -1rem;
|
||||
}
|
44
config.toml
@ -1,12 +1,50 @@
|
||||
baseURL = 'http://example.org/'
|
||||
baseURL = 'https://protocol.ecologies.info/'
|
||||
languageCode = 'en-us'
|
||||
title = 'Protocol Oral History Project'
|
||||
theme = "hugo-starter-tailwind-basic"
|
||||
|
||||
[taxonomies]
|
||||
tag = "tags"
|
||||
topics = "topics"
|
||||
narrator = "narrator"
|
||||
facilitator = "facilitator"
|
||||
|
||||
[minify]
|
||||
minifyOutput = true
|
||||
|
||||
[params]
|
||||
description = "The Protocol Oral History Project chronicles the development of internet protocols and standards through interviews with key contributors."
|
||||
openGraphImage = "/images/og-default.jpg"
|
||||
footer = """
|
||||
A project of the [Media Economies Design Lab](https://www.colorado.edu/lab/medlab/)
|
||||
Available under the [Creative Commons Attribution License (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/)
|
||||
Website design by [Drew Hornbein](https://dhornbein.com)
|
||||
"""
|
||||
|
||||
[params.author]
|
||||
name = "Media Economies Design Lab"
|
||||
twitter = ""
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = false
|
||||
min = "0.128.0"
|
||||
[[module.mounts]]
|
||||
source = "assets"
|
||||
target = "assets"
|
||||
[[module.mounts]]
|
||||
source = "hugo_stats.json"
|
||||
target = "assets/watching/hugo_stats.json"
|
||||
|
||||
[build]
|
||||
writeStats = true
|
||||
[[build.cachebusters]]
|
||||
source = "assets/watching/hugo_stats\\.json"
|
||||
target = "styles\\.css"
|
||||
[[build.cachebusters]]
|
||||
source = "(postcss|tailwind)\\.config\\.js"
|
||||
target = "css"
|
||||
[[build.cachebusters]]
|
||||
source = "assets/.*\\.(js|ts|jsx|tsx)"
|
||||
target = "js"
|
||||
[[build.cachebusters]]
|
||||
source = "assets/.*\\.(.*)$"
|
||||
target = "$1"
|
@ -1,10 +1,11 @@
|
||||
---
|
||||
title: "About"
|
||||
include_partials: ["facilitator-list.html"]
|
||||
wompum: "About The Protocol Oral History Project"
|
||||
include_partials: ["facilitator-list.html","wompum-demo.html"]
|
||||
---
|
||||
|
||||
The Protocol Oral History Project is an effort to honor and share the stories of protocol artists—the skilled builders and stewards of the rules, standards, and norms that shape our lives in often invisible ways, ranging from technical standards and diplomatic practices to Indigenous traditions and radical subcultures.
|
||||
|
||||
The color scheme is inspired by _[Constitutional Wampum](http://n2t.net/ark:/65665/ws63912f5dd-e703-4759-8c31-33ac98b3c190)_ by Robert Houle.
|
||||
|
||||
The project is led by Nathan Schneider, director of the [Media Economies Design Lab](https://www.colorado.edu/lab/medlab/) at the University of Colorado Boulder. Website designed by [Drew Hornbein](https://www.dhornbein.com/). The project is made possible by support from the Siegel Family Endowment.
|
||||
|
||||
The Protocol Oral History Project is part of [Governance Ecologies](https://governance.ecologies.info), a family of projects "expanding the repertoires for community governance."
|
||||
|
198
content/interviews/acey-organizational_closures.md
Normal file
@ -0,0 +1,198 @@
|
||||
---
|
||||
narrator: Camille Acey
|
||||
subject: Organizational closures
|
||||
facilitator: Nathan Schneider
|
||||
date: 2025-05-06
|
||||
approved: 2025-05-09
|
||||
summary: "Organizations too often fail to prepare for their inevitable end; The Wind Down shares best practices for healthy closures."
|
||||
location: "Brooklyn, NYC, USA"
|
||||
headshot: "camille_acey.png"
|
||||
topics: ["open source", "organizations", "ritual"]
|
||||
links:
|
||||
- text: "Personal website"
|
||||
url: "https://camilleacey.com/"
|
||||
- text: "The Wind Down"
|
||||
url: "https://www.wind-down.org/"
|
||||
---
|
||||
|
||||
*How do you introduce yourself, particularly in the context of building and stewarding protocols?*
|
||||
|
||||
I don't know if I've ever presented myself in the context of building and stewarding. I just say my name.
|
||||
|
||||
I practice through an organization called The Wind Down, and I usually describe The Wind Down as having three pillars right now. One is the platform, which provides materials for people. It's an aggregator of information about other people and projects working on closures. I offer a hotline for people who are closing or in discernment around closure—it was free, but I'm trying to charge for it now.
|
||||
|
||||
The second is the community of practice, the composting and hospice community of practice that I facilitate. We have a Slack, and we meet once a month over Zoom.
|
||||
|
||||
The third is the newsletter that I put out called *Closing Remarks*, which is a roundup of notable or interesting closures, and commentary around the larger themes of closure, either globally or on a national scale. Those are the three main projects I sort of steward under the umbrella of The Wind Down.
|
||||
|
||||
*Can you outline the trajectory of your life and career, as it relates to this work of closure, of winding down?*
|
||||
|
||||
I was born in Berkeley, California. Both my parents were solidly middle-class workers committed to their respective unions and different sorts of organizing.
|
||||
|
||||
My father grew up in Newark, New Jersey, and came out of a Black radical tradition of organizing, working with Amiri Baraka and people like that. He grew up when there were the riots, and he was very informed by that sort of organizing and commitment to various types of political, social, and community engagement. That kind of work was instilled in my household.
|
||||
|
||||
I went to UC Berkeley, which has its own history of student organizing. I lived in the student housing cooperatives all four and a half years at Berkeley, and that was very formative for me in terms of seeing how democratic structures could work. We had students ranging from me—I was 16 when I moved into student co-ops—all the way to people in their fifties, and no one was in charge. We were all running it together.
|
||||
|
||||
I had to tackle challenges as a 16-year-old first starting there, then growing up in the co-ops, then moving up to working at the more central level, then joining the board at the North American Students of Cooperation level. It gave me a strong sense of self-determination and empowerment.
|
||||
|
||||
After college, I went in two different directions. I worked in tech and got very involved in open source. Some friends from UC Berkeley were early people who told me about Linux and open source. So I got involved in open source while staying true to my community organizing and cooperative roots.
|
||||
|
||||
I got involved in many different things, and over time some would end in super disappointing ways. I knew from the open-source space that there were protocols that could support better ways of working together. I was curious whether we could apply that to community organizing and have some protocol around how to close better.
|
||||
|
||||
I was part of a community called The Maintainers—I still am—and in 2019 I sent an email asking if anybody had a good playbook for closing things, because I was seeing closures happen all around me.
|
||||
|
||||
They sent me in a couple different directions—most notably to Cassie Robinson in the UK, who was building something called the Farewell Fund and the Care-full Closures project, which became Stewarding Loss. She was approaching the same questions from the philanthropic perspective: we give people money to start and grow things, but we're not giving people money to close things well.
|
||||
|
||||
Another person was Joe McLeod, who's British but lives in Sweden. He approaches these things from product and service design perspectives. He's written two books called *Ends.* and *Endineering*. He's a prophet of endings, and he constantly thinks about how to help things end better and also how we can be more honest with ourselves about disposal and recycling.
|
||||
|
||||
The third influence was an activist and scholar called Mariame Kaba, known for writing about conflict resolution, movements, and abolition in prison organizing. I'd been giving small donations to her Nia Project, which was an umbrella for different campaigns. What impressed me was that the campaigns were very discrete with clear desired outcomes and a strong commitment to ending once they achieved those outcomes. I hadn't seen organizing done that way, where it was time-boxed and clear. So those are the three main flows of inspiration that drove my work.
|
||||
|
||||
*As you began approaching that work, as you put that message out to the Maintainers list and started engaging in this practice and supporting others, what kinds of models did you draw on? What experiences in your life, what competencies that you had or saw in others, informed your sense of how this could be done well?*
|
||||
|
||||
I worked in open-source tech for a while, so I was inspired by this sense of openness and sharing, and the archival that's embodied in projects like Internet Archive and GitHub. I was thinking about how we can share more regularly.
|
||||
|
||||
In tech, we also have these cycles where you have retrospectives, postmortems—protocols that kick into place connected to where you are on a timeline. When a project ends, that triggers a retrospective.
|
||||
|
||||
I started a collective many years ago called CoLET, which was an attempt to be a hyper-local, radical feminist, tech intervention. We had big dreams after the first Trump administration. We were thinking about getting movement people to move off of Google and Microsoft and start using open-source tech. *What do we need to do to get these people to stop using surveillance technology?*
|
||||
|
||||
We approached it from a couple different places. One of the co-founders had been part of Occupy Wall Street's tech committee and Occupy Sandy, which had ended unceremoniously. People hid passwords from each other and all that. So she was coming in with a strong sense of keeping things as transparent as possible and overcommunicating if there's a problem.
|
||||
|
||||
Going back to what I learned from Mariame Kaba, we also built in what ending would look like from the beginning. We built out the process for ending at the start and had endings in mind, even if we didn't specifically say we're going to exist for five years. We wanted to have a clear "smash glass to exit" process.
|
||||
|
||||
I had been thinking for a while about how nonprofits and movement-based groups could adopt cadences, workflows, and processes where we can revisit things and say, "Do we want to keep doing this?"
|
||||
|
||||
I wanted to develop playbooks and take the learnings from working in tech and apply them to movement work, with a movement lens. I could hand people a book of things to do or a checklist. If you look at my website, there's a lot where I'm trying to systematize it. I don't want to do this work forever or maintain everything forever, but I want to push out a body of work because my bigger thrust is to encourage consciousness of endings much sooner.
|
||||
|
||||
A lot of times when organizations come to me, it's almost like *I didn't believe this could ever happen to me* energy. I think it's important for more people to be thinking about endings at the beginning, in the middle, all the time.
|
||||
|
||||
The other work that inspired how I designed The Wind Down comes out of another project called The Decelerator, which grew out of Stewarding Loss. They're a couple of hops ahead of me in their work. When I spoke to Iona Lawrence, who co-founded The Decelerator with Louise Armstrong, Iona pointed me in certain directions. She suggested the idea of a hotline, and she gave me everything they'd already developed for their hotline so I didn't have to start from zero.
|
||||
|
||||
That's how they were with all the materials on the Stewarding Loss website. They said, "*If anything is helpful, just take it and run with it."* They hadn't been formal about licensing—I don't know if they're familiar with that—but it was a "gentlewoman's agreement" that I could use it if I credit them, and they were happy for this work to proliferate. If things don't apply in the US context as they do in the UK context, I tweak things as needed. It felt very much in the spirit of an open source approach.
|
||||
|
||||
*When organizations approach you through the hotline or other means, how much do you find yourself leaning on common patterns as opposed to having to adjust your guidance to the particular situation? How much commonality do you think there is in these patterns of winding down?*
|
||||
|
||||
There's a lot of commonality and general themes. The more I do these hotline calls, the more I try to make it easier on myself. At the beginning I was doing calls and scribbling notes freehand. Then I started typing while muted, and then I would clean up what I typed and put it in a template I'd created based on what Iona was using in the UK for The Decelerator.
|
||||
|
||||
Recently I realized I could just type directly into the template I send people after the call. And then I thought, "Why don't I put all the questions in there too?" I have a "Wind Down Self-Assessment" on The Wind Down website with questions I tend to ask people every time. I just put it in the doc so I don't have to search or try to remember.
|
||||
|
||||
Sometimes I can get a few minutes into a call and characterize what type of closure it is. I have a few buckets or checkboxes for types of closure.
|
||||
|
||||
One popular type is founder/leader loss—when a founder leaves an organization and no one can really fill their boots. I recently talked with someone who wasn't the founder but was a charismatic leader who'd stepped back from the organization—and then came back because he thought they were in bad shape. He was pointing to other factors for the closure, and I asked, "Does your departure have anything to do with the state it's in now?" He paused and realized that it did. So I mentally checked that box—leader loss.
|
||||
|
||||
Early on, when I started the hotline, I saw many well-meaning organizations that were like, *"We're going to hire a Black woman as our executive director because George Floyd was killed and this is how we show we care"*—but she didn't get support, or maybe she was the wrong person. It was virtue signaling, and then everything exploded. I've seen far too many of those.
|
||||
|
||||
I'm seeing some decline in those and an increase in organizations saying, "Nobody wants anything to do with DEI anymore, so our services are no longer welcome and our business is imploding." They're probably both happening simultaneously, but I think the "we'll solve everything by getting a Black woman in charge" arc is on the downswing.
|
||||
|
||||
Even when I recognize a pattern, I wait and let the person speak it aloud. I don't say, "Oh, you're typical." The only time I might say that is when people ask, "Do I sound crazy?" or "Is this the worst closure you've ever heard about?" It never really is. When people ask that, I'll say, "It happens. I've heard about it."
|
||||
|
||||
I keep a spreadsheet with notes about the type of closure and the reasoning for it. The interesting thing is there is never one cause. It's usually like you brought in the wrong ED who doesn't know how to fundraise, so you ran out of money, and then whatever else.
|
||||
|
||||
Joe's book *Ends* has this idea of a "crack of doubt," which he learned from Helen Rose Ebaugh's book *Becoming An Ex*, about her experience in life when she was a nun and decided she didn't want to be anymore. She talks about this first moment of doubt, and how other things came on that crack and put pressure on it until it became a fracture. When I speak to organizations, I try to identify what that initial crack was, and then ask what other pressures came upon it.
|
||||
|
||||
I think the work I'm doing is really about helping people craft a coherent narrative. That's usually what I give them—I give them a readback of what I heard in a way that's a little bit more narrativized than the way they usually convey it to me. If I have multiple people, like three board members, and they had some conflicts arise while we were talking, I might highlight those. I give them resources, usually links to things, and then suggestions of what they might want to do next.
|
||||
|
||||
It's been really nice to templatize everything and have things as simplified as possible. I had imposter syndrome at the beginning, when I thought maybe I should take some courses on something. But people usually say, "We can find a lawyer very easily, we can find an accountant really easily. What you do—we don't know anybody else who does this." So they've been pretty appreciative of the time and space.
|
||||
|
||||
*Do you ever see situations where maybe people are too premature in declaring the end? Have you ever found yourself wanting to say, "Maybe it's not the end after all"?*
|
||||
|
||||
I always go into the call saying, "I'm not here to call balls and strikes." When people sign up for a closure call, the options are: "we already closed", "we are closing", "we are in discernment around closing", and maybe "I'm just curious about closures in general."
|
||||
|
||||
Of the people that have reached out to me, less than half actually closed. I never tell people it's time to close or not. I'm not the Grim Reaper. I'm just here to listen and make suggestions of next steps they might want to take. Not everybody closes.
|
||||
|
||||
Another thing I recommend sometimes is a pause. I think many people aren't familiar with what an operational pause might look like, so I wrote a blog post about the power of the pause. Sometimes you just need more time to think about thinking, to think about *possibly* closing.
|
||||
|
||||
I don't do the work of saving organizations. When you actually are closing, you can come back, or if you want to think about it more with me. I keep my focus pretty narrow, but I don't tell people they should close or not—what do I know?
|
||||
|
||||
People seem to be tarrying between "Should I ride this all the way to the cliff?" or "Is the honorable thing to do this while we have cash on hand?" Somebody's going to be mad at you either way, but I put those options on the table. People who've closed something years ago—in hindsight, nobody ever says, "I should have kept going." People usually say, "It went on too long."
|
||||
|
||||
I'm sometimes surprised. Someone just wrote me today saying, "We're not going to close; we're going to see what happens." I was surprised because the person had told me they were personally sick of doing the work, which doesn't bode well. But what do I know?
|
||||
|
||||
*Can you say a bit about the practical things that people don't tend to think about but that are important to surface?*
|
||||
|
||||
My most popular blog post was one called "Towards Your 'Tombstone Site.'" That was about the idea of your website's final state being a tombstone. Having looked at countless websites of closed NGOs for my Museum of Closed NGOs, I notice common themes—taking down your mailing list, taking down your donate button.
|
||||
|
||||
I met with somebody recently who was so good about this. They'd had four locations and downsized and closed them all in this process of winding down. She'd already removed all the other locations from their online presence.
|
||||
|
||||
Consistent messaging across all your platforms is important. If your website says you're closed but your Instagram says you're open, get it together. If I don't see consistent messaging where they clearly say they're closing, I won't write about it in the newsletter. If they're not clear, I'm not clear. Into that vacuum of information comes hearsay and gossip.
|
||||
|
||||
Another important thing is communicating with professional organizations—if there are groups that year after year you sponsor their conference, or always send a speaker, or have a table—making sure they know you're closing.
|
||||
|
||||
Something really cool I've seen is people saying, "Don't donate to us anymore, donate to this other group instead." Delegating to another group you want to direct people towards is valuable.
|
||||
|
||||
Other practical things include dealing with organizational credit cards that will be cut off—pay those bills. I've seen some people pay their website hosting five years in advance. And then forwarding addresses, forwarding emails, that kind of stuff. The rule of thumb is generally that for a good ending, you need to have six to nine months of operating capital on hand so you can pay people severance and settle your affairs.
|
||||
|
||||
I was just talking to Jess Meyerson from Educopia, and as part of their process of sunsetting fiscally sponsored organizations, they usually find another steward to hold on to things for a while. When people can do that, that's really good too.
|
||||
|
||||
*Is there anything you wish was out there in the world that could serve as infrastructure for closure? It's always striking to me that the domain name system isn't really well equipped for handling projects that might still need to exist but nobody's there to pay the fee. Is there anything you've found yourself wishing was structured differently to help make this sort of thing easier?*
|
||||
|
||||
It goes back to the beginning of the intervention that Cassie had—operational funds for dignified closures are still super lacking. Philanthropy needs to understand that funding closures is part of pushing forward the missions they claim to have. If you just let these things fall on the ground, it's money wasted.
|
||||
|
||||
That's the big one for me: dedicated operational funds for dignified closures that will pay for people like me, lawyers, accountants, and facilitators who can come into your organization and make this as pain-free as possible. Funds that can facilitate these grief cafes or grief dinner parties, destigmatize the whole thing, and bring that from the moment they start funding you—saying, "We're here to provide wraparound for you and your organization from birth to ending."
|
||||
|
||||
That's most critical. And then, of course, an end to capitalism in general—more important than better philanthropy is a better system.
|
||||
|
||||
*Why the end of capitalism?*
|
||||
|
||||
I think wealth hoarding is at the root of so many issues. Half the organizations I encounter wouldn't have to exist if people weren't hoarding wealth and then requiring appeals to those wealth stewards for a small percentage of their endowments. It's artificial scarcity.
|
||||
|
||||
Looking at my colleagues in Europe and UK, the challenges they face are different because they have social infrastructure. A lot of organizations in the US stay open longer than they should because people depend on them for health insurance. Without capitalism, we could turn our attention instead to other problems that aren't man-made.
|
||||
|
||||
*You've mentioned that you like to build in the open and share your resources. Why do you operate that way? Why not treat this stuff as proprietary intellectual property that you only share with paying clients?*
|
||||
|
||||
That open ethos got into my head very early on. I've been tinkering with the internet since I was a kid. The idea of discoverability for different ways of thinking—I just believe in the open sharing of information.
|
||||
|
||||
Also, I don't want to be a bottleneck. When I worked at one tech company, I once managed a team that went from Seattle to Auckland, and someone would always have to be in their pajamas off-camera to join. The idea that you can grab these materials at a convenient time in whatever time zone you're in and move forward without needing me is a relief.
|
||||
|
||||
A lot of these ideas grew out of other people's thinking, and I'm putting my remix on them. I don't feel comfortable hiding it from people. I want to see more good endings. If I can do this for a little bit more time and feel like the needle has moved and more people are talking about endings—which I already feel is happening—I'll feel good, and like I've achieved a lot of things I wanted to do.
|
||||
|
||||
Less of that would happen if I was just like, "Click here for more information and add your credit card number." I'm a connector by nature, transparent by nature, and I want to keep growing these ideas out in the open.
|
||||
|
||||
I used to work with an organization called Question Copyright. They were into open knowledge, open tech, open culture. One of our flagship projects was Nina Paley's film *Sita Sings the Blues*, and it was cool to facilitate people translating her work into different languages, letting it be open source, people taking her raw materials and remixing them.
|
||||
|
||||
I'm not evangelical about open source, open tech, open culture—it's not the revolution, but the revolution can't happen without it. The information has to be there. I also honor that in any space there should be some sacred knowledge that stays internal. I don't think everybody needs to put all their business on a public-access forum, but I'm here to share and think through things in community with other people.
|
||||
|
||||
*Are there any earlier traditions that you find yourself drawing on in developing this practice? Legacies that you're drawing narratives or experience from?*
|
||||
|
||||
My work grew in part out of the work from Stewarding Loss. That loss lens is really valuable for the British context, because they're not supposed to be emotional and have that stiff upper lip. Whereas in the US, our paradigm is really about failure and success, and striving in a way that isn't always good for you to do.
|
||||
|
||||
I've been playing with this idea of a workshop of storytelling through weaving. My mother's family is from Ghana, and we have *kente* culture—the fabric that people weave with storytelling in it. People put stories into the fabric, and images together mean something.
|
||||
|
||||
In Hawaii, they have a mat called *lauhala* that they weave. During the cleanup after the fires on Maui a few years ago, people would come at the end of the working day and share their grief and woes on the mat, then take the mat to the ocean and shake it out to purge it.
|
||||
|
||||
Iona from The Decelerator said something similar—she doesn't want to be a "pain sponge" or absorber in the hotline work. She wants to purge the world of that grief and pain, to be part of the process of throwing that out.
|
||||
|
||||
The other weaving tradition I think about is the AIDS Quilt—people weaving together a story of what happened, and that being a place of gathering, naming and shaming, remembrance.
|
||||
|
||||
I've been thinking of asking people going through an ending to assign colors and threads. If red and orange are happy, and purple and green are bad, what colors are you seeing here? How are you thinking about how the ending went? Something about narrative, storytelling, and putting things in context is what I'm drawing on loosely.
|
||||
|
||||
There's another nautical metaphor I don't mention much because it's kind of arcane. It's the idea of "scarpering," which is intentionally running your boat aground because it will help improve the coastline, so the next boat that comes won't run into the same thing. There's something about the intentional ending of something that's really valuable—what if we do this early and intentionally, with the next generations in mind?
|
||||
|
||||
*What would a world look like that more fully adopted these kinds of practices of taking endings seriously? What kinds of things that aren't normal would be normal?*
|
||||
|
||||
I don't know if I can talk about the world more broadly, but speaking about organizations or people doing mission work: I think more ritual in general—more ritual around beginnings and endings, clear processes so it's not just about that one big ending but many little ones along the way. Normalization of ritual around departures and arrivals.
|
||||
|
||||
I heard something recently about a culture where, when a friend is giving birth, they have a little funeral for them because they're losing their friend as a single friend, and that friend is becoming mother-friend. They cry and mourn, then bury something as a totem, and come back and reintroduce themselves to this friend in her new form.
|
||||
|
||||
So more ritual, more commemoration of big wins, and more gratitude for people giving themselves. Especially in the nonprofit world in the United States, it's not very well paid generally, often long hours, and people are seeing and hearing horrible things, then getting up and coming back and doing it again.
|
||||
|
||||
I think more appreciation. And maybe even term limits, where people say you shouldn't stay here and do this too long. I had a friend in South Africa who was working with AIDS widows, and at a certain point she had to dismiss herself. She said nobody should stay and do this work that long because the stories are too sad and scary.
|
||||
|
||||
What it would look like if groups formalized this and said you can only do a certain kind of work for two years, and then we have a cooling-off period where we take you to a spa and pamper you to scrub those stories and trauma off you. Some way of having a Peace Corps-like tour of duty—there's value in staying longer, but danger in staying too long. Rotation and ritual are important.
|
||||
|
||||
Another important thing is breaking that connection between impact and longevity. Taking a step back, doing an assessment---*what are you proud that you accomplished?* --- and letting that be your contribution to the mission or the movement, understanding that the organization is not the movement is not the goal. If there's a place we're driving towards, how did you move the needle, how did you move the vehicle forward in valuable ways? Is there value in you stopping what you're doing now?
|
||||
|
||||
In America, we're in this teenager mindset kind of culture where people are always like, "I will never die and we are going to strive until we're all rich." I mostly work with people who are left of center, so I'm familiar with their concerns and values around holistic consciousness and dignified closures. I wonder if I went to the Heritage Foundation whether people would care, or if they'd say, "We should run it to the cliff because who cares, life is cold, brutish, and short."
|
||||
|
||||
I've started finding people who have been through closures or are going through them, and I want to destigmatize it. People come to me usually because they don't know who to talk to about closures. People whisper about it, and there's a stigma. It's like a scarlet letter where people are like, "Oh God, you're closing, don't come over here." There is a web of people who've been through it before and are going through it that needs to be woven. I've spent the last year and a half just finding other people and asking them to tell me their story of closing, or waiting for them to find me.
|
||||
|
||||
*How has your practice of working on closures changed over time?*
|
||||
|
||||
I started from a place of thinking it's about communication and archiving. I came with a very tech practitioner's mindset: how can we get your data, share your data, make it GitHub-able, or put it on Internet Archive? But over time, I started thinking less about data and the archival, and more about it being a relational thing. Another part of the work is honoring that the people that start stuff are not the people that are really excited about closing stuff.
|
||||
|
||||
I've been collecting closures I love and closures that were nightmares. I have them in my back pocket to share with people. That's really where it's at—telling people, "Once upon a time there were some people that did this, they nailed it, and here's what was hard about nailing it. And here's what was hard about failing at failing."
|
||||
|
||||
I've moved away from some precious idea of tech utopianism around closures to just saying closures are messy. Even a compost heap is messy and smelly. The work of tending that heap and deriving whatever is nutritious or beneficial to the soil is its own kind of messy, smelly, mysterious work that not everybody is going to be called to do.
|
||||
|
||||
At the same time, I kind it a little annoying how this language of composting is dancing around the left, because we live in an industrialized society where most stuff isn't compostable. Let's be honest. Bruce Schneier talks about data as a toxic asset.
|
||||
|
||||
In any ending, I try to help people balance the emotional aspects with the project management stuff. I think about who they were before they came to the organization, who they were in the organization, who they hoped to become in the organization—all the time aspects of it. And then the other practical stuff like forwarding email addresses and those kinds of details. Part of it is just like being a mom—"I love you, and also go to the bathroom before we leave."
|
@ -6,7 +6,8 @@ date: 2025-03-18
|
||||
approved: 2025-03-20
|
||||
summary: "Drawing on many ancestral traditions and the experience of her own body, Asia Dorsey learns and teaches the pattern language of a healthy gut."
|
||||
location: "Denver CO"
|
||||
tags: [ancestors, food, health, indigeneity]
|
||||
topics: [ancestors, food, health, indigeneity]
|
||||
headshot: "asia_dorsey.png"
|
||||
links:
|
||||
- text: "Bugs Bones & Botany"
|
||||
url: "https://www.bonesbugsandbotany.com"
|
@ -1,65 +1,57 @@
|
||||
---
|
||||
narrator: Coraline Ada Ehmke
|
||||
subject: Contributor Covenant
|
||||
subject: Codes of conduct
|
||||
facilitator: Nathan Schneider
|
||||
date: 2024-10-10
|
||||
approved: 2024-10-11
|
||||
summary: "After widespread resistance to codes of conduct in open-source software communities, Coraline Ada Ehmke's Contributor Covenant became the most popular code of conduct in the ecosystem."
|
||||
location: "Chicago, USA"
|
||||
tags: [code of conduct, dispute resolution, gender, open source, organizations, software]
|
||||
#headshot: "placeholder-headshot.png"
|
||||
topics: [conflict, mediation, gender, open source, software]
|
||||
links:
|
||||
- text: "Personal website"
|
||||
url: "https://where.coraline.codes"
|
||||
- text: "Contributor Covenant"
|
||||
url: "https://www.contributor-covenant.org"
|
||||
- text: "Organization for Ethical Source"
|
||||
url: "https://www.contributor-covenant.org"
|
||||
---
|
||||
|
||||
{{< i >}}
|
||||
First of all, I want to begin with the question of how you how you prefer to introduce yourself.
|
||||
{{< /i >}}
|
||||
*First of all, I want to begin with the question of how you how you prefer to introduce yourself.*
|
||||
|
||||
My name is Coraline Ada Ehmke. I'm the founder and executive director of the Organization for Ethical Source. I'm also a software engineer, emerita, having spent about two and a half decades in the industry. I'm best known as the creator of Contributor Covenant, the first and most popular code of conduct in the world for open source communities and other digital communities. And I'm very happy to be here with you, Nathan.
|
||||
|
||||
{{< i >}}
|
||||
How would you outline the trajectory of your life and career? Where do you start? And where are you now?
|
||||
{{< /i >}}
|
||||
*How would you outline the trajectory of your life and career? Where do you start? And where are you now?*
|
||||
|
||||
Career-wise, I would start in 1994, when I was a kind of adrift kind of kid. I was working at an engineering company in Austin, Texas, because my girlfriend got her dad to give me a job there. Back then I'm a smoker, and I'm always having conversations with the other smokers, who, some of whom are software engineers and some of whom are IT folks. So I have a good relationship with them. And one day one of them comes up to me and says, "Coraline, did you hear the company's putting together a web team?" I was like, "Oh, that's amazing. Put the company on the Internet. That's great." And he said, "So what do you think that's going to do for your career?" And that is how I fell into software development as a college dropout.
|
||||
|
||||
Then fast forward a lot of years to about 2012, 2013. This is the point where I had made a decision to begin my gender transition. I was slowly waking up to realities of the world that had been conveniently easily ignored by me previously, and that were no longer ignorable. Things that I understood in principle, I was beginning to experience firsthand, and that made me angry. But it was a righteous fury, and I decided to look for ways that I could use my skills and my life experience to change things, change the world, change the sphere that I was operating in---the sphere of tech and the sphere of open source---to make it less awful for people. And over time I've graduated from less awful to actually, like, maybe pro-social. Maybe we can use technology to actually make a difference in the world, a positive difference in the world. So I am less righteous fury these days, and more hopeful, looking for visions of equitable futures. I guess that's my career in a nutshell.
|
||||
|
||||
{{< i >}}
|
||||
Does the does the world word "protocol" mean anything to you? Is that a word that you've used to describe aspects of your life, or that has been an important part of your work?
|
||||
{{< /i >}}
|
||||
*Does the does the world word "protocol" mean anything to you? Is that a word that you've used to describe aspects of your life, or that has been an important part of your work?*
|
||||
|
||||
It is, in multiple senses of the word. Back in the day I was giving a talk called "He Doesn't Work Here Anymore," which was about my experience of transitioning as an engineer, as a technologist. One of the things I pointed out was that I was learning that communication works very differently than the way I'd experienced it in the past. If you likened it to the HTTP protocol, women were including extra headers that indicated the kind of response that they were hoping to get by sharing a particular by communicating a certain thing. Men on the receiving end were ignoring those headers and answering in a way that was maybe solving a problem or something, but not what was wanted. Other women are sensitive to these headers that are embedded in the messages, and communicate more empathetically for that reason. I was using the HTTP protocol as a metaphor for humans communicating. So I think I've always had the notion of a protocol as a methodology for interactions, whether between human agents or pieces of code.
|
||||
|
||||
{{< i >}}
|
||||
I love that you brought up that context, and it reminds me, too, of the what you said earlier about the way in which things become visible in the context of transition. Things that are invisible otherwise visibilize themselves. And you know that, I think, is part of the behavior of protocols---to be invisible as infrastructures, and then to become visible when some kind of the inadequacy becomes clear.
|
||||
{{< /i >}}
|
||||
*I love that you brought up that context, and it reminds me, too, of the what you said earlier about the way in which things become visible in the context of transition. Things that are invisible otherwise visibilize themselves. And you know that, I think, is part of the behavior of protocols---to be invisible as infrastructures, and then to become visible when some kind of the inadequacy becomes clear.*
|
||||
|
||||
Sure, or a bad implementation. That's always a possibility as well. A protocol is only as good as its adaptations.
|
||||
|
||||
{{< i >}}
|
||||
You identified earlier with the Contributor Covenant. I wanted to focus this conversation as well, but feel free to bring in other projects as well, because I think other projects of yours are relevant. But starting with the Contributor Covenant, can you describe the story of your motivation for developing and then stewarding it, especially for people who are not familiar with what it is. Where did that story start for you?
|
||||
{{< /i >}}
|
||||
*You identified earlier with the Contributor Covenant. I wanted to focus this conversation as well, but feel free to bring in other projects as well, because I think other projects of yours are relevant. But starting with the Contributor Covenant, can you describe the story of your motivation for developing and then stewarding it, especially for people who are not familiar with what it is. Where did that story start for you?*
|
||||
|
||||
It was around 2013, I believe, 2013 or 2014, when a Twitter hashtag emerged from the Python [programming language] community, which was #COCPledge. Basically, conference speakers were pledging to not speak at conferences that didn't have an enforceable code of conduct. This is a time when we have a lot of new people coming into the industry, a lot of people who have seen the salaries that tech companies offer and can see the transformative power of being involved in that economy. And a lot of those people didn't look like the people who came before them. And a lot of those people faced challenges that the people who came before them didn't experience. Those challenges could seem invisible. So codes of conduct were becoming necessary for the peaceful operation of gatherings of technologists. But that was meeting with resistance. It was very controversial. This is something we take for granted now---even department stores have codes of conduct now. But it was very controversial at the time for conferences, and there was a lot of a lot of activism that was required to make it a norm.
|
||||
|
||||
In the midst of that, I saw that there are other places where technologists gathered, where their conduct also had the potential to be problematic. This was on Github, in the context of our open source communities and projects. The concept of a "community" was beginning to come into common usage to describe the group of people that coalesced around an open source project, and was not always a given. As we began to see projects as communities, we saw the need for shared values and norms to emerge. This led to the philosophy behind the Contributor Covenant, which was written as a way to establish shared values and norms for how people would interact in these open source communities. Over time, our understanding of what this means has developed and matured, and the Contributor Covenant has become a living document. The team is currently working on the tenth anniversary version 3.0, which will be modular to accommodate the novel use cases they've discovered, such as Discord servers, Slack communities, and even offline events. This evolution towards an "adapt versus adopt" approach is another way the concept of codes of conduct for digital communities is maturing to meet changing needs. The Contributor Covenant has always been a living document, accepting pull requests and being translated into more than twenty-five languages. With Contributor Covenant 3.0, the team is looking to expand their coverage of languages from the global south, in an effort to counteract the export of white western values that often go along with open source by default, and to be a force for decolonization. They have big plans for what a more globally oriented, norm-based instrument can do for the world.
|
||||
|
||||
{{< i >}}
|
||||
So, in telling that story, you began in passive voice---it was created---and then you switched to first-person plural. I wonder if you could describe a bit more about the design process for the Contributor Covenant at each stage? From the beginning, what was that process like and how has it evolved now?
|
||||
{{< /i >}}
|
||||
*So, in telling that story, you began in passive voice---it was created---and then you switched to first-person plural. I wonder if you could describe a bit more about the design process for the Contributor Covenant at each stage? From the beginning, what was that process like and how has it evolved now?*
|
||||
|
||||
Wow! That's a great question and a great observation. At the beginning, the Contributor Covenant was very much a social justice manifesto, and many critics of codes of conduct in general, and the Contributor Covenant in particular, regarded it as a political document pushing a certain political agenda. I was in full agreement with these critics that yes, the Contributor Covenant was attached to a social justice agenda. And why shouldn't it be? It was very confrontational, and the language was also confrontational, because they were confronting a status quo and a culture that was literally harmful. Of course, what they proposed was antagonistic and confrontational, because that was the context in which they were operating.
|
||||
|
||||
Over time, however, the Contributor Covenant has gotten less confrontational and less adversarial, and more reflective. I hope it is more reflective of changing values in our digital communities as well. With version 3.0, the emphasis is on the globalization of the Contributor Covenant as an instrument. To achieve this, we actually have to strip out a lot of the language that would typically be associated with some of the values they're talking about, because it's jargon---social justice jargon. When talking to people who don't speak English as a first language, or people who are from outside the white Western sphere, those words aren't going to make sense to them, and that's not acceptable anymore.
|
||||
|
||||
{{< i >}}
|
||||
Was it a collective project from the beginning?
|
||||
{{< /i >}}
|
||||
*Was it a collective project from the beginning?*
|
||||
|
||||
No, it was just me shepherding it, guiding it, and writing it for a number of years. I gifted contributor Covenant to OES, I believe, in 2021 or 2022.
|
||||
|
||||
{{< i >}}
|
||||
The Organization for Ethical Source.
|
||||
{{< /i >}}
|
||||
*The Organization for Ethical Source.*
|
||||
|
||||
Yes, I gifted the Contributor Covenant to the Organization for Ethical Source because I saw that it was too important to be under the control of just one person. I didn't want there to be a single person responsible for it.
|
||||
|
||||
@ -76,9 +68,7 @@ There's a reason it's called the Contributor Covenant instead of the Contributor
|
||||
|
||||
It's adopting a protocol, and that just made a lot more sense than a list of rules or regulations, or policies or manifestos. Not to say that those things don't have value, not to say that those things aren't related or interdependent. But it just makes sense to me as a really general, well-recognized form of social contract.
|
||||
|
||||
{{< i >}}
|
||||
Can you talk me through the way it functions? I think this connects to the distinction between code and covenant. How does it work? Maybe in an example or in general practice that you've seen? How does this function in the world?
|
||||
{{< /i >}}
|
||||
*Can you talk me through the way it functions? I think this connects to the distinction between code and covenant. How does it work? Maybe in an example or in general practice that you've seen? How does this function in the world?*
|
||||
|
||||
The Contributor Covenant begins with a preamble which is basically a list of protected classes from a human rights perspective. This establishes the intent right off the bat---it's saying we are intending our community to recognize, understand, and remediate issues that people who fit these criteria often experience. So first of all, we're prioritizing the safety of the most vulnerable and those with the least agency. We're saying that right from the beginning.
|
||||
|
||||
@ -88,9 +78,7 @@ From there, we go into some procedures around how to report a violation, and wha
|
||||
|
||||
At the end, we're hinting that we want people to adapt, not just adopt, by saying this code of conduct is adapted from the Contributor Covenant, with a link to the permanent URL. We're going to make that a little bit more explicit with Contributor Covenant 3.0, but that's basically how it works. It's setting up, "Here's what we value, here's how we treat each other, here's what we do in case of conflict." At a high level, that's the purpose of a lot of governance documents. Right? Here's what we value. Here's how we treat each other. Here's how we operate. Here's why. And here's how.
|
||||
|
||||
{{< i >}}
|
||||
How has this been adopted in practice? It's gone from being an insurgent project that encountered a lot of resistance, as you said, to becoming really widespread in the open source world. What kinds of doors opened? Were there particular moments you think of that revealed something about how the protocol was working?
|
||||
{{< /i >}}
|
||||
*How has this been adopted in practice? It's gone from being an insurgent project that encountered a lot of resistance, as you said, to becoming really widespread in the open source world. What kinds of doors opened? Were there particular moments you think of that revealed something about how the protocol was working?*
|
||||
|
||||
In the beginning, say for the first 5-6 years, the presence of a code of conduct was a signal that the project leaders, the community leaders, cared about these shared values, had the intention of making their community welcoming and safe. However, with the widespread adoption of codes of conduct, it's become something that people don't think too much about until they have to. It has also become less of a signal, because the adoption is less intentional. Now, the reverse is true. A project without a code of conduct is a stronger signal than a project with one.
|
||||
|
||||
@ -98,16 +86,12 @@ In a sense, this is a victory, because we have normalized something that once wa
|
||||
|
||||
Our relationship with equity has changed and gotten a little bit more complicated, and maybe a little bit more demanding. But the same could be said of governance across the board in digital communities---it requires a lot more work now than it did ten years ago. This is the reality we're facing, and it's something that needs to be continuously addressed and improved upon.
|
||||
|
||||
{{< i >}}
|
||||
Have you had experiences of capture? When, for instance, has the covenant been used in ways that you didn't expect, and that you objected to?
|
||||
{{< /i >}}
|
||||
*Have you had experiences of capture? When, for instance, has the covenant been used in ways that you didn't expect, and that you objected to?*
|
||||
|
||||
I've had questions about why certain communities have adopted it---communities whose work I think is not necessarily terribly pro-social. I've had mixed feelings about big adoptions by FAANG companies, for example. Facebook, Apple, Amazon, Netflix, Google. There have been companies whose business models are predicated on human rights abuses. I have mixed feelings about them using Contributor Covenant. But the way I reconcile it is that a lot of developers, a lot of technologists, and others are going to be interacting
|
||||
with the open source projects that these companies put out. I care more about the experience and equitable treatment of the people who are in a position where they are interacting with those projects, maybe because they have to. I care more about them than I care about Facebook itself, for instance. So objecting to Facebook's adoption would be negatively impactful on the tens of thousands of developers who use their frameworks.
|
||||
|
||||
{{< i >}}
|
||||
Referring to these companies makes me wonder about the question of economy. You've more recently worked to build an organization around this around this work. But what has been the experience so far around supporting the work that goes into developing this project? Was there funding at the beginning? What kind of economic journey has this project been on?
|
||||
{{< /i >}}
|
||||
*Referring to these companies makes me wonder about the question of economy. You've more recently worked to build an organization around this around this work. But what has been the experience so far around supporting the work that goes into developing this project? Was there funding at the beginning? What kind of economic journey has this project been on?*
|
||||
|
||||
The Organization for Ethical Source was founded with a grant from Omidyar, in conjunction with a partner organization. This interest was sparked by our work on the Hippocratic License, the Ethical Open Source license that's tied to the United Nations Declaration of Human Rights.
|
||||
|
||||
@ -119,9 +103,7 @@ I think it might be because the Contributor Covenant is now something that's tak
|
||||
|
||||
This has been a challenge, but luckily the Organization for Ethical Source is scrappy and we're volunteer-led, so we're not going to let that stop us.
|
||||
|
||||
{{< i >}}
|
||||
What have been some of the most important and material tasks or decisions over the course of the project? Were there particular pivot points?
|
||||
{{< /i >}}
|
||||
*What have been some of the most important and material tasks or decisions over the course of the project? Were there particular pivot points?*
|
||||
|
||||
The addition of the Enforcement Guidelines were a pretty big milestone for the Contributor Covenant. A lot of the critiques people had were around codes of conduct being very divisive, as I mentioned from the get-go. And while sometimes those opinions were expressed through violence and threats of violence, I always tried to listen to what people were saying behind those threats, to understand what they were afraid of and see if there was anything I could do to make them less afraid.
|
||||
|
||||
@ -133,9 +115,7 @@ Including the Enforcement Guidelines seemed to address a lot of the feedback and
|
||||
|
||||
Despite this pushback and even vitriol, I've tried to adapt to the changing conditions and demonstrate that, despite the Contributor Covenant's social justice origins, the underlying social justice concepts are pro-social and should not be controversial. I'm not asking someone to adopt an entire political agenda---I'm simply asking them not to discriminate against others and to treat each other as fellow human beings.
|
||||
|
||||
{{< i >}}
|
||||
You mentioned the license licensure work, the work with the ethical source licenses. Could you say a bit about how that next phase of protocol development came about for you?
|
||||
{{< /i >}}
|
||||
*You mentioned the license licensure work, the work with the ethical source licenses. Could you say a bit about how that next phase of protocol development came about for you?*
|
||||
|
||||
The impetus for creating the Hippocratic License 1.0, or even the alpha version that got so much attention in 2019, came from Mijente, the Latinx activist organization and immigrants' rights activist organization, and their "No Tech for ICE" campaign. This highlighted the issue for us. We saw that open source was being used and abused in ways that the open source community wouldn't accept, like an individual maintainer's software being used in extrajudicial killings. At least, we hoped they would be opposed to something like that.
|
||||
|
||||
@ -149,46 +129,34 @@ That's something we've contended with, and we've tried to address critiques of e
|
||||
|
||||
The Hippocratic License has actually become very popular---the most popular sector of adopters is academic researchers. That's fascinating to me, even though it's not the intended use case we had in mind. It's really interesting to see what's happening with it in the real world.
|
||||
|
||||
{{< i >}}
|
||||
You talked about the enforcement there, and that's a point of contrast between the two designs. Right? The Contributor Covenant relies largely on the assumption that there's either an organization or a maintainer, somebody who is exercising a kind of community-scale enforcement power, and they have the ability to remove people, whereas the the Hippocratic license, the ethical source licenses, rely on a level of legal enforcement. Can you say a bit about how that that kind of dependency, so to speak, affects the design of the protocol?
|
||||
{{< /i >}}
|
||||
*You talked about the enforcement there, and that's a point of contrast between the two designs. Right? The Contributor Covenant relies largely on the assumption that there's either an organization or a maintainer, somebody who is exercising a kind of community-scale enforcement power, and they have the ability to remove people, whereas the the Hippocratic license, the ethical source licenses, rely on a level of legal enforcement. Can you say a bit about how that that kind of dependency, so to speak, affects the design of the protocol?*
|
||||
|
||||
One of the key goals for the Ethical Source licenses that aligns perfectly with the Contributor Covenant's framework is to make the implicit explicit. The team wanted to ensure that the rights extended to the most vulnerable. Just like in the preamble of the Contributor Covenant, they are calling out specific protected classes as a priority for their community. The Hippocratic Code License 3 introduced an interesting provision on the enforcement side, which a lawyer would call a "supply chain impacted provision." This provision essentially states that if Facebook uses the code licensed under the Hippocratic License, and the use of that code results in human rights violations against a specific population, that population has the right to sue Facebook for damages. This inverts the power, giving the impacted people the opportunity to pursue legal action, which corporations would have to take seriously. As a maintainer of a JavaScript library, they would not sue Facebook for infringement of someone else's human rights. It wouldn't work. But if the people upon whom facial recognition software is used and abused choose to file a class-action lawsuit, that's something very different.
|
||||
|
||||
Licenses are the intersection of open source communities and corporations or institutions. Institutions can't be held to ethical standards that depend on their goodwill. Institutions have a different set of incentives than people do, and therefore the norms that we are establishing have to be incentivized differently. That means relying on legal regulation.
|
||||
|
||||
{{< i >}}
|
||||
The question of incentives has been running throughout the conversation. I hear that also in what you were describing about the signaling power of the Contributor Covenant. How much of that kind of thinking went into the design process explicitly? Or is it more a matter of observation after the fact?
|
||||
{{< /i >}}
|
||||
*The question of incentives has been running throughout the conversation. I hear that also in what you were describing about the signaling power of the Contributor Covenant. How much of that kind of thinking went into the design process explicitly? Or is it more a matter of observation after the fact?*
|
||||
|
||||
II would say it was after the fact. I started writing Contributor Covenant in a moment of inspiration and a desire for righteous retribution. I was riled up by the state of the world and wanted to make a big impact and a big change in the way things were done.
|
||||
|
||||
But things have changed since then, and I've become more deliberative. Now that we have an org, we're very deliberative, doing more strategic thinking and less reactionary stuff. And that's just the natural evolution of a project like this. We're still staying true to our roots, of course, and to the values that inspired the original version. But the technosocial context has changed, and we have to adapt with it. What worked at the beginning won't work anymore. And that reflects our changing way of maintaining it. I hope that answers your question.
|
||||
|
||||
{{< i >}}
|
||||
Yes, thank you. Finally, I'm curious about earlier legacies. You've talked in the context of the Contributor Covenant about earlier codes of conduct and with the licenses about the way open source in general is built on that foundation of licensing. But are there other kinds of precedents that you think of, that informed your motivation and your designs?
|
||||
{{< /i >}}
|
||||
*Yes, thank you. Finally, I'm curious about earlier legacies. You've talked in the context of the Contributor Covenant about earlier codes of conduct and with the licenses about the way open source in general is built on that foundation of licensing. But are there other kinds of precedents that you think of, that informed your motivation and your designs?*
|
||||
|
||||
When I look back on it, I wouldn't say that there were specific things that directly inspired the language of Contributor Covenant 1.0 beyond fluency and the concepts. But in retrospect, I guess the circles I was moving in had more explicit norms.
|
||||
|
||||
As a Gen Xer, I think we take a lot for granted. But through my interactions with later generations of technologists, I've found that people are more explicit about expressing boundaries verbally, introducing themselves, acknowledging their disabilities, and other norms that didn't happen when I was coming up. So the fact that these are norms with newer generations of technologists is inspiring and definitely influences what we're doing. It reminds us why we're trying to make the invisible visible and be open to different ways of expression and interaction as the world moves on. We have to adapt, you know?
|
||||
|
||||
{{< i >}}
|
||||
Is there anything else you want to bring up before we wrap up?
|
||||
{{< /i >}}
|
||||
*Is there anything else you want to bring up before we wrap up?*
|
||||
|
||||
Some protocols are very long-lived, and my favorite example is the MIDI protocol. It was established in 1983 and has only gone through one major revision, which was backwards compatible.
|
||||
|
||||
I think the most effective and long-lived protocols make the fewest assumptions, are the most explicit, and are just as simple as the complexity of their domain will allow them to be. And I think we can take inspiration from those aspects of successful technical protocols and apply them to social, interpersonal protocols as well.
|
||||
|
||||
{{< i >}}
|
||||
Is there a danger, though, in that narrowness of a tightly defined protocol, in the context of social protocols?
|
||||
{{< /i >}}
|
||||
*Is there a danger, though, in that narrowness of a tightly defined protocol, in the context of social protocols?*
|
||||
|
||||
You just want to make sure that the protocol is capable of expressing the things that need to be expressed. Simplicity is not necessarily the same as filtering or losing data or losing resolution, or anything like that. The messages can be very rich, meaning the activities can be very rich. What's passing through the protocol can be very rich, even with a simple protocol. Telephones operate on that principle. Telephones don't care what you say, but they're gonna get that voice communication across the wire right.
|
||||
|
||||
{{< i >}}
|
||||
Yeah, or the modem communication across the wire. You can do all sorts of things.
|
||||
{{< /i >}}
|
||||
*Yeah, or the modem communication across the wire. You can do all sorts of things.*
|
||||
|
||||
And that's the beauty of protocols: they're fundamental and they become infrastructure---if they're effective, they become infrastructure. Not to say that we don't want to pay attention to them. They require maintenance. All infrastructure requires maintenance. But you're successful when it becomes when it becomes a normal way of doing things.
|
@ -1,35 +1,31 @@
|
||||
---
|
||||
narrator: Amanda Kiessel
|
||||
subject: Good Market
|
||||
subject: Community standards
|
||||
facilitator: Nathan Schneider
|
||||
date: 2024-10-29
|
||||
approved: 2024-12-16
|
||||
summary: "Good Market is a digital commons for enterprises that prioritize people and the planet over profit. It enables communities to set and enforce their own standards for doing business."
|
||||
location: "Sri Lanka / United States"
|
||||
tags: [economics, organizations, ecology, standards]
|
||||
#headshot: "placeholder-headshot.png"
|
||||
topics: [economics, organizations, ecology, standards]
|
||||
links:
|
||||
- text: "Good Market"
|
||||
url: "https://goodmarket.global"
|
||||
---
|
||||
|
||||
{{< i >}}
|
||||
I want to begin with the question of how you like to introduce yourself. How do you introduce yourself to somebody you've just met? Where do you begin?
|
||||
{{< /i >}}
|
||||
*I want to begin with the question of how you like to introduce yourself. How do you introduce yourself to somebody you've just met? Where do you begin?*
|
||||
|
||||
It changes with every single context. But the general introduction for right now is that I'm part of Good Market, which is a digital commons. That's usually my introduction at the moment.
|
||||
|
||||
{{< i >}}
|
||||
Part of?
|
||||
{{< /i >}}
|
||||
*Part of?*
|
||||
|
||||
Yes, I say, "I'm part of." I'm a co-creator. This is a collective effort so "part of" feels more right.
|
||||
|
||||
{{< i >}}
|
||||
How would you outline the trajectory of your life and career? Where did you start? And where do you see yourself now?
|
||||
{{< /i >}}
|
||||
*How would you outline the trajectory of your life and career? Where did you start? And where do you see yourself now?*
|
||||
|
||||
I started with ecological systems. My training and early work was environmental toxicology and agroecology---what we would now call regenerative agriculture. I was very concerned about environmental problems, especially the intersections of environmental issues and social justice. So that was the earliest work.
|
||||
|
||||
{{< i >}}
|
||||
What were the specific contexts of that work?
|
||||
{{< /i >}}
|
||||
*What were the specific contexts of that work?*
|
||||
|
||||
I was involved in ecotoxicology research connected to a Superfund site. After that, I taught at a local university in rural Thailand for a couple of years and became more focused on agriculture issues and community development. I came back to the US briefly for a Masters program, and after that, I joined a local organization in Sri Lanka that primarily worked in agricultural areas.
|
||||
|
||||
@ -41,9 +37,7 @@ When I was in university, I was focused more on the ecological side of things, t
|
||||
|
||||
The current phase of my work pulls on all of those experiences, but it's much more about understanding our current economic system, looking at the root causes of our ecological and social issues, and finding leverage points that we can work on collectively to address those root causes. The work I'm doing now is very much around shifting economic systems so they are good for people and planet. So, that's the trajectory---ecological systems to social systems to economic systems.
|
||||
|
||||
{{< i >}}
|
||||
And what was the story of the creation of Good Market?
|
||||
{{< /i >}}
|
||||
*And what was the story of the creation of Good Market?*
|
||||
|
||||
It came out of experiences with the local organization in Sri Lanka. During the war, many of the communities we worked with were displaced. The organization was involved in emergency relief and resettlement work and became dependent on international aid. When the ceasefire was signed, they expected all of their funding to stop. I was asked to join to help with the transition to a more self-sustaining model, so they could continue the community work without international aid. I had some background in fair trade and what we now call social enterprise and I was supporting the local district teams. We were making good progress, but then after the tsunami and after the war restarted, the focus shifted back to emergency relief, and a new wave of international aid entered the country.
|
||||
|
||||
@ -55,21 +49,15 @@ That is the origin. It was realizing how big and interconnected this movement is
|
||||
|
||||
I wanted to work on something that wasn't donor-dependent or project-focused and I was interested in supporting groups that were working on social and environmental issues with self-sustaining models.
|
||||
|
||||
{{< i >}}
|
||||
How would you summarize what Good Market does?
|
||||
{{< /i >}}
|
||||
*How would you summarize what Good Market does?*
|
||||
|
||||
What we are doing now is making the broader movement of self-sustaining enterprises and networks more visible. We are making it easier for these groups to find and connect with each other, and to collaborate on systems change, whether that's changing the narrative or changing rules and policies. Our goal is to create a digital commons that is shared by all the groups using it.
|
||||
|
||||
{{< i >}}
|
||||
What do the groups have to do to be part of it?
|
||||
{{< /i >}}
|
||||
*What do the groups have to do to be part of it?*
|
||||
|
||||
It's a commons, so there's a very clear boundary. That's been there from the very beginning. There are community-owned minimum standards for each sector of the economy. There's a free online application form. It's free to be included, but the standards are a very critical part of the process. And then there's a crowdsourced monitoring system. So to be included, participants have to fill the free online form, meet the community-owned standards, and have a public profile on the site.
|
||||
|
||||
{{< i >}}
|
||||
Are those standards things that groups usually already have in place, and are monitoring? Is it something that they already have in place before they come to you, before you encounter these groups? Or are they developing these kinds of practices in relationship to the platform?
|
||||
{{< /i >}}
|
||||
*Are those standards things that groups usually already have in place, and are monitoring? Is it something that they already have in place before they come to you, before you encounter these groups? Or are they developing these kinds of practices in relationship to the platform?*
|
||||
|
||||
It varies. The minimum standards are designed to be accessible and work across regions, languages, and business types---social enterprises, cooperatives, not-for-profits, responsible businesses, and initiatives that aren't legally registered. For people signing up because they identify as part of the movement, meeting the standards is very straightforward. They are fully aligned with these values and they often go way beyond the minimum requirements.
|
||||
|
||||
@ -77,9 +65,7 @@ If people are signing up because they are trying to access a specific benefit or
|
||||
|
||||
For those who are already in this space, the minimum standards are a relatively easy bar to clear. For those who aren't thinking about their impact on people and the planet yet, the goal is to encourage them and support them on this journey.
|
||||
|
||||
{{< i >}}
|
||||
How would how would you characterize the difference between these kinds of standards and, say, the fair trade labels that people might be more familiar with?
|
||||
{{< /i >}}
|
||||
*How would how would you characterize the difference between these kinds of standards and, say, the fair trade labels that people might be more familiar with?*
|
||||
|
||||
These standards are just minimum standards that enable people to be part of the digital commons, but there are many networks that use the site that have additional criteria. To join their network pages, enterprises have to meet additional standards. For example, World Fair Trade Organization, Fair Trade Federation, and B Lab, which offers B Corp certification, all have network pages on the digital commons. Enterprises in those networks have all met additional standards and go through their verification or certification processes.
|
||||
|
||||
@ -89,9 +75,7 @@ The enterprises that have third-party certification only represent a small perce
|
||||
|
||||
This is set up as a minimum level of recognition. It's built in a neutral way that lots of people can use because it's shared infrastructure. It gets used in very different ways by different networks and communities.
|
||||
|
||||
{{< i >}}
|
||||
How involved were participating groups in designing the model?
|
||||
{{< /i >}}
|
||||
*How involved were participating groups in designing the model?*
|
||||
|
||||
The idea for an online platform came from discussions with all those groups I mentioned earlier, the people we visited in different countries. They wanted a space where they could be visible, connect, and share best practices. But software development can have high upfront costs, and because of the experiences during the tsunami and the war, we were very aware of the risks associated with different types of funding. We'd seen expensive donor-funded software platforms that became ghost towns after the project funding ran out. We'd also seen platforms that took on what gets called "impact investment" and were pushed to become more profit-oriented. We didn't want to take on funding that could lead to mission drift or cause it to become pulled away from the community.
|
||||
|
||||
@ -101,9 +85,7 @@ The intention was just to test the concept. We thought there would be about ten
|
||||
|
||||
Even after we had the initial software functionality, we told people we were beta testing in Sri Lanka. We wanted to make sure it worked across all sectors---agriculture, fishing, mining, renewable energy, tourism, tech, and all kinds of services. Once it began expanding globally, we focused on serving different enterprise networks. The enterprises signing up were usually invited by those networks or by other enterprises that used the site. Today, it includes enterprises across economic sectors, registration types, languages, and regions. The form can be filled in twenty-two languages and there are enterprises and networks from nearly 120 countries.
|
||||
|
||||
{{< i >}}
|
||||
What kinds of inputs informed the design of the marketplace?
|
||||
{{< /i >}}
|
||||
*What kinds of inputs informed the design of the marketplace?*
|
||||
|
||||
There were many co-creators, but there were three of us who really served as stewards and we all had been working for that same local organization for almost ten years. So we all had experience with community-based organizations like revolving loan funds, funeral societies, women's welfare associations, producer cooperatives, and groups managing natural resource commons. We had learned about mobilizing people for collective action, developing self-sustaining models, and building trust through transparency and clear community rules. These experiences informed the design process, even though we didn’t explicitly plan it that way. It was only much later when I was re-reading something from Elinor Ostrom that I realized our design followed the eight principles for governing common resources.
|
||||
|
||||
@ -111,9 +93,7 @@ Diversity was a big consideration. The goal was to increase visibility across di
|
||||
|
||||
Inclusion was also a crucial design consideration. It had to work for people who don’t speak English or use computers, but only have access to a mobile phone. We started by testing the software with people who lived in the city, had international exposure, and used computers, but we didn't consider it ready until we started getting applications submitted in Sinhala and Tamil by mobile phone from rural areas. That's when you know the design works.
|
||||
|
||||
{{< i >}}
|
||||
Have the standards been subject to ongoing evolution? How are those standards developed, and who governs them?
|
||||
{{< /i >}}
|
||||
*Have the standards been subject to ongoing evolution? How are those standards developed, and who governs them?*
|
||||
|
||||
There are a few basic principles that don't really change. Members prioritize people and the planet over short-term profit maximization, have a purpose that includes social or environmental goals, communicate about how they are good for people and planet, and have a sustainability strategy that goes beyond a one-time project or event.
|
||||
|
||||
@ -121,9 +101,7 @@ The minimum sector standards are standards for each sector of the economy and th
|
||||
|
||||
These minimum standards serve as the low bar, and from there, other certifications or networks can have higher levels of criteria. Networks are able to use the site to manage their networks and have their own additional standards and verification systems.
|
||||
|
||||
{{< i >}}
|
||||
What kinds of patterns have you noticed in the interactions among these these groups as they're setting standards? What kinds of dynamics emerge as people are developing and choosing their the standards that they're going to enforce for themselves?
|
||||
{{< /i >}}
|
||||
*What kinds of patterns have you noticed in the interactions among these these groups as they're setting standards? What kinds of dynamics emerge as people are developing and choosing their the standards that they're going to enforce for themselves?*
|
||||
|
||||
One pattern is that many groups start with a narrow focus in one area and then recognize the need to be more holistic in their approach as they engage in dialogue and explore the space further. For instance, some groups that were previously focused solely on social impact have started to recognize the connection between social and environmental aspects, leading to a more comprehensive approach.
|
||||
|
||||
@ -131,9 +109,7 @@ I've also noticed an increased openness to collaboration across what were once s
|
||||
|
||||
I can provide a specific example if it would be helpful.
|
||||
|
||||
{{< i >}}
|
||||
Please.
|
||||
{{< /i >}}
|
||||
*Please.*
|
||||
|
||||
The Social Enterprise World Forum works with social enterprise networks around the world. Most countries don't have a separate legal registration for social enterprises, so it can be difficult to identify them. SEWF worked with national networks to develop shared characteristics and a shared definition, and they wanted to establish a global verification for social enterprises that complemented existing local systems.
|
||||
|
||||
@ -143,9 +119,7 @@ After a community feedback and review process, they changed the name of the veri
|
||||
|
||||
I'm seeing this trend in many different spaces, where groups that were once focused on their own "tribe" are now recognizing the value of bridging across and working with other groups. Community identity and trust-building are still important within their group, but they're more open to collaboration and cooperation with others.
|
||||
|
||||
{{< i >}}
|
||||
How does the platform or the organization support the verification process?
|
||||
{{< /i >}}
|
||||
*How does the platform or the organization support the verification process?*
|
||||
|
||||
They use the minimum standards and the free online application as the first step of the process. This works well because it is a free first step. Even if an organization isn't eligible for verification yet, they still benefit from having a public profile. They have a positive feeling and something to work towards in the future.
|
||||
|
||||
@ -155,9 +129,7 @@ Because Good Market is a digital commons it's set up as a shared resource. When
|
||||
|
||||
Now, when other networks want to collect information or implement a verification or certification process, they can use the existing infrastructure. People and Planet First has also mobilized funds and invested in new functionality like activity tracking systems and the ability to download certificates, which benefits others using the system. This is how the shared infrastructure has been working, allowing different groups to contribute to and benefit from its development.
|
||||
|
||||
{{< i >}}
|
||||
How does it help uphold the standards that communities set? What is the process for enforcing those standards?
|
||||
{{< /i >}}
|
||||
*How does it help uphold the standards that communities set? What is the process for enforcing those standards?*
|
||||
|
||||
They are also able to use the crowdsourced monitoring system to flag the standards, but they have their own review process. I think that's a crucial aspect. Different contexts require different approaches. What works for one community may not work for another.
|
||||
|
||||
@ -165,9 +137,7 @@ By giving each group the autonomy to decide what works best for their community,
|
||||
|
||||
At the same time, having a common infrastructure allows them to keep their information organized and accessible, while still providing the flexibility to adapt and evolve their processes as needed. This balance between standardization and customization is key to making these systems effective and sustainable.
|
||||
|
||||
{{< i >}}
|
||||
Is there a particular moment when you saw this system being tested, when you saw it confront its own limits or face challenges that community had to rally around solving?
|
||||
{{< /i >}}
|
||||
*Is there a particular moment when you saw this system being tested, when you saw it confront its own limits or face challenges that community had to rally around solving?*
|
||||
|
||||
It has been non-stop, but that's what makes it fun. I don't see the obstacles as challenges, but rather as opportunities to learn and adapt. Every time something new comes up, it's a chance to think, "Okay, we hadn't thought of this. How can we address it?" It's a process of continuous learning and evolution.
|
||||
|
||||
@ -177,9 +147,7 @@ One of the key questions we had was whether the crowdsourced monitoring system w
|
||||
|
||||
It's been an evolution, with each new development and each new group that joins, we ask ourselves, "Does it work at this level? Does it work with this type of group?" It's been a fun and exciting journey, and I'm grateful to have been a part of it.
|
||||
|
||||
{{< i >}}
|
||||
In a context when somebody's flagging somebody else, what does the procedure look like?
|
||||
{{< /i >}}
|
||||
*In a context when somebody's flagging somebody else, what does the procedure look like?*
|
||||
|
||||
While it's less common now than it was in the early days, issues can still arise. The upfront process has improved significantly, making it more likely to catch potential problems early on. The initial application form has been refined and improved over time, reducing the likelihood of issues slipping through. That being said, there are still cases where a change in ownership, management, or governance, or a significant influx of financial capital, can cause a group to lose sight of their original values and mission. This is where crowdsourced monitoring comes in.
|
||||
|
||||
@ -189,9 +157,7 @@ We've had instances where workers have flagged their own organization, suppliers
|
||||
|
||||
When we first started, the concept was new and Sri Lankan enterprises were applying because they were trying to access market opportunities. Now, most applicants know the concept and they understand what the standards are before they sign up. This has reduced the number of flagging issues and makes them easier to resolve. Most groups are deeply committed to prioritizing people and planet. They are are more likely to take corrective action and resolve any problems that arise. They want to make it right. They care about it.
|
||||
|
||||
{{< i >}}
|
||||
In the fair trade movement, there has always been a give and take between a certain set of values and the temptation to compromise for adoption---especially when certification processes are funded by the certified organizations. There's always this threat of capture, of a certification being used in ways that the people who devised it didn't intend. Does that experience of capture resonate with you as something that you've had to deal with?
|
||||
{{< /i >}}
|
||||
*In the fair trade movement, there has always been a give and take between a certain set of values and the temptation to compromise for adoption---especially when certification processes are funded by the certified organizations. There's always this threat of capture, of a certification being used in ways that the people who devised it didn't intend. Does that experience of capture resonate with you as something that you've had to deal with?*
|
||||
|
||||
Yes, it resonates with my earlier experiences in both organic and fair trade. I've seen how certification systems can be co-opted by companies that don't necessarily share the values and principles that underpin the movement.
|
||||
|
||||
@ -201,9 +167,7 @@ Similarly, the early organic community had a deeply holistic approach and includ
|
||||
|
||||
These are patterns we need to learn from. It's part of the reason the People and Planet First verification was developed. The five standards that underpin the verification were designed to prevent co-optation. Verified enterprises have to exist to solve a social or environmental problem, reinvest the majority of their surplus towards their purpose, and have a structure that protects their purpose over time. Profit-maximizing companies aren't able to meet those criteria.
|
||||
|
||||
{{< i >}}
|
||||
Have you paid a price for setting the standards the way you have in terms of limiting your reach?
|
||||
{{< /i >}}
|
||||
*Have you paid a price for setting the standards the way you have in terms of limiting your reach?*
|
||||
|
||||
We haven't had to pay a price in terms of the actual standards. The entire purpose of the digital commons is to speed up the transition to an economy that's good for people and the planet. Having a clear boundary is critical for increasing the visibility of the movement. It builds trust and a sense of shared ownership and that has expanded reach.
|
||||
|
||||
@ -211,9 +175,7 @@ The price we've paid is more related to inclusion, which is common in this space
|
||||
|
||||
Financially, it would have been easier to pilot this type of initiative in a place like Europe or the US, but we chose to test in Sri Lanka because it needed to work for people who don't speak English and don't have access to computers. We were only able to start testing the revenue model once we began expanding to countries where more enterprises have the ability to pay.
|
||||
|
||||
{{< i >}}
|
||||
What is the platform's primary engine for economic sustainability?
|
||||
{{< /i >}}
|
||||
*What is the platform's primary engine for economic sustainability?*
|
||||
|
||||
This initiative is different from others I've been involved in. Most of the things I've worked on have been revenue-generating from the start. With software, there's a big upfront cost, but the cost to scale and sustain is relatively small. We've had to invest a lot to get the software up and running, but the revenue from the marketplace events and shops in Sri Lanka helped to subsidize the software development costs.
|
||||
|
||||
@ -223,9 +185,7 @@ It's also possible for approved enterprises to receive payments through the site
|
||||
|
||||
Subscriptions and marketplace transactions are growing, but that will take time. In the meantime, there are many networks wanting additional functionality. They're mobilizing funds to invest in software development, and that's helping to cover costs for now.
|
||||
|
||||
{{< i >}}
|
||||
What have been some of your most important decisions, you, either individually or collectively, in the in the process of building this framework and and an organization, and what prepared you for making those decisions?
|
||||
{{< /i >}}
|
||||
*What have been some of your most important decisions, you, either individually or collectively, in the in the process of building this framework and and an organization, and what prepared you for making those decisions?*
|
||||
|
||||
The key to building a community-driven initiative is recognizing that it's a never-ending, ongoing process. Every decision feels like the most important decision at the time. It requires being attuned to how things are evolving and changing, and being able to pivot and adapt constantly.
|
||||
|
||||
@ -235,9 +195,7 @@ This has made it easier to navigate challenges. It's about being present and lis
|
||||
|
||||
I could really feel the impact of these experiences during the pandemic, when I was talking to other organizations that were struggling. Having gone through so much change in the past, I was able to be in a good listening space and provide support to those who were trying to figure out transitions. I know how hard it is, and I was able to be more present for them.
|
||||
|
||||
{{< i >}}
|
||||
You're in some respects creating something new with a platform, a digital tool, but you're also building on existing communities. Do you see Good Market as continuous with or departing from pre-existing legacies in the communities you're working with?
|
||||
{{< /i >}}
|
||||
*You're in some respects creating something new with a platform, a digital tool, but you're also building on existing communities. Do you see Good Market as continuous with or departing from pre-existing legacies in the communities you're working with?*
|
||||
|
||||
I absolutely see our work as a continuation of the efforts of those who came before. We're building on the lessons learned from community organizing in Sri Lanka and other traditional communities. This way of working is not new, but we're adapting it to the current context and using digital tools to enable it.
|
||||
|
||||
@ -245,9 +203,7 @@ What's exciting about this approach is that allows for both bonding and bridging
|
||||
|
||||
The digital aspect of this work also enables bridging between communities and networks. Even if groups have different specialties or approaches, they may have shared interests or leverage points that can be used to drive change. The digital commons makes it possible for these groups to come together, share information, and collaborate on issues that matter to them. It also makes it easier to fill gaps. People can find products or services or solutions that aren't available in their area. That can be really fun.
|
||||
|
||||
{{< i >}}
|
||||
Is the language of "protocol" something that you've used in in this work? You're working across many languages. What kind of words do you use to describe Good Market? You talked earlier about the commons, for instance.
|
||||
{{< /i >}}
|
||||
*Is the language of "protocol" something that you've used in in this work? You're working across many languages. What kind of words do you use to describe Good Market? You talked earlier about the commons, for instance.*
|
||||
|
||||
When working with software engineers, I'll use more technical terms like "protocol." Beyond that, we try to use more accessible language that resonates with people. We talk about "community rules" and "minimum standards," which are more relatable and effective.
|
||||
|
||||
@ -257,9 +213,7 @@ Initially, it was hard to find the right words to describe the different types o
|
||||
|
||||
We use the term "network" to describe an enterprise that works with many other enterprises. This can include member organizations, certification bodies, and community-owned spaces. These terms have worked well, but it's taken time to find the right language that can bridge across different divides and be used effectively across the community.
|
||||
|
||||
{{< i >}}
|
||||
What is holding this kind of model back from becoming more widespread than it is?
|
||||
{{< /i >}}
|
||||
*What is holding this kind of model back from becoming more widespread than it is?*
|
||||
|
||||
We've seen a significant financialization of our economic system, resulting in a huge concentration of wealth and power. This has made it increasingly challenging to undertake this type of work. The current system's rules and regulations only exacerbate the difficulties. There are deep-seated, structural issues that make it hard to effect change.
|
||||
|
||||
@ -269,17 +223,13 @@ I think there are people who initially believed they could create change through
|
||||
|
||||
An example of a shared challenge is access to financing and appropriate financial services. Mainstream finance is focused on maximizing profits and endless growth. Even in the impact investment space, the dominant narrative is that it's possible to have social and environmental impact *and* market-rate returns. For many of the enterprises we're serving, this narrative is detrimental. They are looking for patient, non-extractive finance that serves their actual needs. While many enterprises are finding creative ways to generate revenue from the start, others---especially those working on large community infrastructure projects---require financing to get off the ground.
|
||||
|
||||
{{< i >}}
|
||||
Are there ways in which you've seen that developing shared standards can enable groups to get over those barriers?
|
||||
{{< /i >}}
|
||||
*Are there ways in which you've seen that developing shared standards can enable groups to get over those barriers?*
|
||||
|
||||
I feel like it's just beginning, and this is one of the things that excites me the most. In almost every sector, people are collaborating to find solutions to the challenges they're facing, and because they are working in different contexts, many diverse and innovative approaches are emerging. But when we look across all sectors, the biggest ecosystem gaps are in the finance sector. Finance is lagging behind.
|
||||
|
||||
I think the entry point is increasing the visibility of groups that are testing out new models of non-extractive finance and transformative finance and trying to do things differently. There are some very new efforts to increase collaboration and sharing in this space. That's the first step to developing shared language, shared standards, and a range of financing options that are better suited to the needs of next economy enterprises.
|
||||
|
||||
{{< i >}}
|
||||
Thank you. Is there anything else you want to make sure to include in this story, that you want people to understand about Good Market or about your your work?
|
||||
{{< /i >}}
|
||||
*Thank you. Is there anything else you want to make sure to include in this story, that you want people to understand about Good Market or about your your work?*
|
||||
|
||||
I'd like to offer some advice to others who are setting up protocols. Having been involved in and supported many groups in this process, I've learned that it's much easier to establish basic protocols at the beginning of an initiative. I've seen groups, such as marketplaces, that try to introduce protocols later on. It can be extremely challenging to add new protocols and boundaries when you have current members who wouldn't fit within those boundaries.
|
||||
|
@ -6,12 +6,10 @@ date: 2025-02-04
|
||||
approved: 2025-02-11
|
||||
summary: "Constructed languages, or conlangs, are the basis of a hobby, a science, and a community that now occupies a small corner of the entertainment industry."
|
||||
location: "Wellington, NZ"
|
||||
tags: [fiction, gender, language, open source, software]
|
||||
topics: [fiction, gender, language, open source, software]
|
||||
---
|
||||
|
||||
{{< i >}}
|
||||
Can you tell me a bit about how you like to introduce yourself?
|
||||
{{< /i >}}
|
||||
*Can you tell me a bit about how you like to introduce yourself?*
|
||||
|
||||
Hello! I'm Richard Littauer. I use he/him pronouns. I have chronic ADHD and am probably on the autism spectrum, which means introducing myself is impossible. I saw someone recently on Bluesky who said, "My hobby is having hobbies," and that definitely applies to me.
|
||||
|
||||
@ -21,17 +19,13 @@ I'm also a conlanger, which is the most common term I use. Sometimes I say const
|
||||
|
||||
Xenolinguist is another possibility I've used before---*xeno* as in alien languages, from the Greek word *xenos*. I sometimes introduce myself as a classicist because I have formal training in Latin and Greek. I did five years of Latin in high school and two years of Greek in university. *Linguist* kind of subsumes classicist under it for some definitions, but not for others. Usually one of these terms is how I introduce myself.
|
||||
|
||||
{{< i >}}
|
||||
How would you tell the story of your development as a conlanger? Where would you start that trajectory, and how did that beginning bring you to where you are now?
|
||||
{{< /i >}}
|
||||
*How would you tell the story of your development as a conlanger? Where would you start that trajectory, and how did that beginning bring you to where you are now?*
|
||||
|
||||
There's this funny book---it's red with a black stripe down the side---called *The Languages of Tolkien's Middle-Earth*. It's by Ruth Noel. I've had multiple versions because people keep giving it to me. There's an interesting bit where the author mentions that Tolkien's first conlang was the word *woc* for cow, which is just *cow* backwards. It's a really boring language since that's all we know. I'd argue that's not even a language---that's just a code word.
|
||||
|
||||
That particular reference to Tolkien often comes to mind when I think about where I started with languages. One of the first things we do as humans is talk. I've been working with languages my whole life. My parents didn't teach me French even though I was homeschooled, which was a shame. They would talk in French over me with my sisters about my birthday presents. I was paid a quarter for every Latin name of a plant I learned when I was around six to ten, which was a great incentive. I probably got an easy buck that way.
|
||||
|
||||
{{< i >}}
|
||||
Why was that important to them?
|
||||
{{< /i >}}
|
||||
*Why was that important to them?*
|
||||
|
||||
For my mother, being literary was always very important. She wanted me to become C.S. Lewis---a preacher or academic writer about the kingdom of God.
|
||||
|
||||
@ -55,9 +49,7 @@ I went viral in *The Sun*. I was a centerfold---they painted me and then libeled
|
||||
|
||||
Over time, people would reach out asking if I could make a conlang for their game. I also joined the Language Creation Society, dedicated to building these things together as a consultancy for movie studios. I bombed out pretty quick because I had to make money. I had a master's program in computational linguistics, and I needed to pay off my student loans---I'm an American, so I paid my way through college.
|
||||
|
||||
{{< i >}}
|
||||
Conlanging was not lucrative?
|
||||
{{< /i >}}
|
||||
*Conlanging was not lucrative?*
|
||||
|
||||
No way. At one point, I estimated I made maybe $2,000 total from all the Na'vi stuff, which included interviews on radio and getting flown to California. It wasn't a very good use of time, but it was incredibly fun.
|
||||
|
||||
@ -71,9 +63,7 @@ I also taught Latin at a small high school in Vermont, coming full circle. I tau
|
||||
|
||||
At this point, I'm about as professional a conlanger as you can be without being David Peterson, who does this full time for major film studios. I've got an IMDB profile---I had to make it, but legally I was allowed to. I'm in the credits.
|
||||
|
||||
{{< i >}}
|
||||
As somebody who has these dual interests of linguistics and computer systems, I'm curious about how you see parallels there. I see this concept of protocol as something that bridges both. Do you see working with computer languages as something parallel with building linguistic languages, or does it jog very different parts of your brain?
|
||||
{{< /i >}}
|
||||
*As somebody who has these dual interests of linguistics and computer systems, I'm curious about how you see parallels there. I see this concept of protocol as something that bridges both. Do you see working with computer languages as something parallel with building linguistic languages, or does it jog very different parts of your brain?*
|
||||
|
||||
I have to be careful here because a lot of people say, "Oh, you know languages, you must be very good at programming and computer languages." But computer programming languages are quite different from conlangs. Conlangs tend to look like human languages most of the time. There are some that aren't, like Lojban, the logical language. There are some that really do, like Esperanto, which has about 100,000 native speakers---kids who've learned this language from birth.
|
||||
|
||||
@ -85,17 +75,13 @@ What's interesting for me as a conlanger is that a lot of people discount constr
|
||||
|
||||
These Latin names have really strict ways of being presented together, and for me it's just making a conlang.
|
||||
|
||||
{{< i >}}
|
||||
By putting new rules around Latin names?
|
||||
{{< /i >}}
|
||||
*By putting new rules around Latin names?*
|
||||
|
||||
It's not Latin, right? It's something that looks like Latin and that uses the Latin dictionary, but the rules they have and the protocol that scientists follow isn't actually Latin. It's another subset of Latin based on particular rules they put out. For me, that's very similar to prescriptivism---like saying, "Oh, you can't say, 'Me and my friends went to the mall,' you have to say, 'My friends and I went.'" All those things are just trying to make subsets of language for specific usages, so I see them as identical in terms of computational tools.
|
||||
|
||||
It always becomes fuzzy for me because when I make conlangs, I use code to help me generate word lists and types of words by defining the phonotactic possibilities of the language. When I do that, I'm aware I'm making a subset of all possible languages that's actually unlike human languages, because human languages aren't perfect---we mess things up all the time. I live in an area of the world that has English as its language, New Zealand English, but there's also a suburb here called Ngaio because it's from Māori. You can't start words in English with "ng," but New Zealand doesn't care because it has Māori influences. That's kind of why conlangs aren't quite human---you try to set these strict structures.
|
||||
|
||||
{{< i >}}
|
||||
Can you describe some of the process of how you go about developing a language? You talked a little bit there about the way you use computers as part of that process, and you also talked about walking around the room, flapping like an elephant. So how do you do this? Where do you begin?
|
||||
{{< /i >}}
|
||||
*Can you describe some of the process of how you go about developing a language? You talked a little bit there about the way you use computers as part of that process, and you also talked about walking around the room, flapping like an elephant. So how do you do this? Where do you begin?*
|
||||
|
||||
Let me scope this to how I professionally make languages for other people. I don't make a lot of languages for myself at the moment---I would like to, but I'm doing other stuff with my time.
|
||||
|
||||
@ -115,17 +101,13 @@ Then I read out some sentences and translate basic things---"Joe saw the fox" or
|
||||
|
||||
Remember that bit about flopping around sounding like an elephant? It becomes very difficult if the speakers don't have human mouths, so I have to figure out how it's going to work. Or with whistle languages---I've made a few of those now. How am I going to write that down? How's that going to work? I have to figure all that out. It's actually quite fun.
|
||||
|
||||
{{< i >}}
|
||||
Have you done original written languages, like distinct alphabets?
|
||||
{{< /i >}}
|
||||
*Have you done original written languages, like distinct alphabets?*
|
||||
|
||||
I haven't done a lot of them. I will be doing it for one contract I'm on right now. Written orthographies are really variable and different---that's a whole other subset of making things that's really fun and interesting.
|
||||
|
||||
I made my own runes when I was an early teenager. I made my own set of futhark, but they were very dwarven. Let's face it, even Tolkien himself took all his stuff from other languages. A lot of conlangers just steal and then say, "Oh, I borrowed it." It's kind of fun.
|
||||
|
||||
{{< i >}}
|
||||
You talked some about social dynamics in this process---your relationship with a friend where you are developing these together, or relationships with clients. What makes for a good collaboration in this context?
|
||||
{{< /i >}}
|
||||
*You talked some about social dynamics in this process---your relationship with a friend where you are developing these together, or relationships with clients. What makes for a good collaboration in this context?*
|
||||
|
||||
I'm really bad at collaborating because I'm really scattered, and it takes me a while to get back to people. I've always been that way, and that's not going to change. I wish it could, but it's not. So I don't know what makes a good collaborator, except it's not me.
|
||||
|
||||
@ -139,15 +121,11 @@ It's always fun to try to make that balance work because I try to make languages
|
||||
|
||||
Trying to explain that to a client really helps. Back when I was a kid, it was the language that was most fun---we never actually bothered to make a world, we just made some languages and had a good time. The guy I did that mainly with went on to do a postgrad, and he's currently a postdoc at MIT studying gravity. You have to have a certain type of mind to really enjoy this sort of work. I just happened to know someone who had that kind of mind, which is great.
|
||||
|
||||
{{< i >}}
|
||||
So what makes a conlang great art? What do you appreciate about a really beautiful language? What do you look for? And I'm sorry, I know any variant of "what makes art good?" is a horrible question.
|
||||
{{< /i >}}
|
||||
*So what makes a conlang great art? What do you appreciate about a really beautiful language? What do you look for? And I'm sorry, I know any variant of "what makes art good?" is a horrible question.*
|
||||
|
||||
It's not a horrible question. I almost said "it's a good question," which is my least favorite thing to say when I'm interviewing.
|
||||
|
||||
{{< i >}}
|
||||
Usually when people say "that's a good question," it means it's a bad question.
|
||||
{{< /i >}}
|
||||
*Usually when people say "that's a good question," it means it's a bad question.*
|
||||
|
||||
It means they're stumped and don't know what to say. It's a really interesting question because it is hard to define the parameters of what makes art beautiful. I would say it depends on what I'm working on---it depends on what the goals are.
|
||||
|
||||
@ -155,15 +133,11 @@ For me, a good conlang doesn't feel like a conlang. It doesn't sound like anothe
|
||||
|
||||
A bad language is one where it's really difficult to pronounce. I made this language called Llérriésh (or Llama), and even I couldn't say it well. I mean, I tried really hard, but there were all these weird tone things going on. It was cool for me to do, and I think it ended up being kind of beautiful because it was really complex---I just wanted complexity at that point. But I would never curse anyone to try to learn that language, to try to speak it to other people. But it was beautiful to me.
|
||||
|
||||
{{< i >}}
|
||||
How do you teach, say, an actor who has to speak a language that you've created?
|
||||
{{< /i >}}
|
||||
*How do you teach, say, an actor who has to speak a language that you've created?*
|
||||
|
||||
First thing to do is go through some basic words and say, "Here's how this is pronounced, here's how that's pronounced." You have to make sure that your orthography is standard. You can't use English orthography because English orthography is the worst. You have to be like, "Okay, 'a' is always 'ah', it's never 'eh'."
|
||||
|
||||
{{< i >}}
|
||||
Do you use a phonetic alphabet?
|
||||
{{< /i >}}
|
||||
*Do you use a phonetic alphabet?*
|
||||
|
||||
Yeah, so I try to use a pseudo-IPA. I don't really give them IPA because that's too hard. But I try to say, "This is always like this, and that's always like that." The j's are always j's, they're never y's, something like that.
|
||||
|
||||
@ -171,25 +145,19 @@ It also involves accepting that when they mess up, that's part of the language.
|
||||
|
||||
It's definitely difficult for some things. English speakers have a lot of weird stuff going on. English is not a normal language---it's a unique language, just like every other language. Our r's---the American r is a really rare sound in the world. It's not a common sound. So trying to convince other people that "Oh no, every r is"---it's tough. You have to explain that over and over again, like "Oh no, it's not 'Sauron,' it's 'Saurrron.'"
|
||||
|
||||
{{< i >}}
|
||||
What are some of the most important decisions in creating a language?
|
||||
{{< /i >}}
|
||||
*What are some of the most important decisions in creating a language?*
|
||||
|
||||
How many vowels are there? Is it tonal? How many tones are you going to have? What's the syntax going to be? That's always a really common one. Is it SVO, is it VOS---verb, subject, etc.? What's the order of words? Is this a language that's going to be written or not? Is this a language that's going to have a lot of things translated in or not?
|
||||
|
||||
What format are you storing your lexicon in? How are other people going to be able to edit that format with you? How will you present the information to a client is one of the main things. I often use a tripartite interlinear gloss translation where I have the original writing, then each word written out with all the morphemes in it, then the translation. I always try to do that, at least, because otherwise you end up with them not knowing where to put the emphasis on words.
|
||||
|
||||
{{< i >}}
|
||||
Do you generally deliver a dictionary and a grammar? How do you---what do you deliver? Say more about that.
|
||||
{{< /i >}}
|
||||
*Do you generally deliver a dictionary and a grammar? How do you---what do you deliver? Say more about that.*
|
||||
|
||||
A .docx file, or maybe a Google Doc, with all the lines that have been translated or need to be translated, and a short dictionary of how it works, and maybe a short grammatical primer. Not massive. For the Mulefa language, I also had a whole two or three pages on how the finger movements should work for humans talking. I decided you just use your primary finger instead of a trunk---the great thing about humans is we don't have large proboscises. We don't have---it's really hard for me to signal with my nose "to the left." I don't know how I would do that, so it's like, just use your finger. So I had to explain how that works, and how the different variations would work---wiggling or harsh movements.
|
||||
|
||||
For another language I made, it was really important that I explained the different types of weird sounds that a goblin might make, and what clicks are, and how those work together, and how you would write that because I was giving it to sound people who then had to implement this.
|
||||
|
||||
{{< i >}}
|
||||
Is there a lot that you have to develop on the back-end that you don't show the client? Is there a more complex grammar?
|
||||
{{< /i >}}
|
||||
*Is there a lot that you have to develop on the back-end that you don't show the client? Is there a more complex grammar?*
|
||||
|
||||
Yes, but it's also smoke and mirrors. A lot of the time, because I'm a contractor and have to cut down on my hours at some point, I can't spend ages debating whether a word should be something. Sometimes I'm like, "Okay, here's the thing," and I just thought of that in two minutes---but that was the two minutes I had to give you.
|
||||
|
||||
@ -201,9 +169,7 @@ You have to write these things down. Otherwise you end up completely confused be
|
||||
|
||||
Writing all these things down really helps you out, and the best way I've learned how to do it is to do it ad hoc, but document it well. Then trust your earlier decisions and listen to them, and don't mess up.
|
||||
|
||||
{{< i >}}
|
||||
How constrained do you think of the range of linguistic possibilities as being? I'm thinking here about the old Chomsky debates about whether language is a kind of cognitive structure as opposed to something that is an infinite playground. Even when you've developed languages for non-human beings---do you think of it like, "Okay, here's a checklist, there's a structure, there are some rules that you can't break"?
|
||||
{{< /i >}}
|
||||
*How constrained do you think of the range of linguistic possibilities as being? I'm thinking here about the old Chomsky debates about whether language is a kind of cognitive structure as opposed to something that is an infinite playground. Even when you've developed languages for non-human beings---do you think of it like, "Okay, here's a checklist, there's a structure, there are some rules that you can't break"?*
|
||||
|
||||
Yes, there's always some rules you can't break, because otherwise you wouldn't be able to signal. I have not yet written a language that's entirely identical to the HTTP protocol---I could do that, that is a language, it's a way of signaling information.
|
||||
|
||||
@ -217,23 +183,17 @@ What helps me when I have to make these hard decisions around bizarre languages
|
||||
|
||||
I have also tried to make languages that are impossible.
|
||||
|
||||
{{< i >}}
|
||||
What do you mean by that?
|
||||
{{< /i >}}
|
||||
*What do you mean by that?*
|
||||
|
||||
The less we talk about that the better. I mean, it doesn't really work because I'm human and I use a human brain. Languages that don't make sense according to normal human structures---it doesn't work at the end of the day. I haven't found a way to make one that doesn't make a ton of sense.
|
||||
|
||||
Bird language is a good example. With whistling languages, humans are just never going to be able to do that well. I'm not pitch-perfect in the first place, but on top of that, it's just really difficult. You can make languages, but they're more like codes because they're never used to communicate effective things. I mean, Na'vi had a vocabulary of like 2,000 words last time I was using it, and we had long conversations. We translated *A Midsummer Night's Dream*-type things into it. But the conversations were mainly like "Hello! How are you? I'm good. I'm having some eggs with the rock that you get from the ocean where it is bitter"---because there's no word for salt, so you have to do these weird circumlocutions. We're always limited by our time and ability.
|
||||
|
||||
{{< i >}}
|
||||
Is there something that, if you had infinite time, you would love to be able to do someday?
|
||||
{{< /i >}}
|
||||
*Is there something that, if you had infinite time, you would love to be able to do someday?*
|
||||
|
||||
My immediate thought was, I would like to fix the International Code of Zoological Nomenclature.
|
||||
|
||||
{{< i >}}
|
||||
Tell us about why it's broken.
|
||||
{{< /i >}}
|
||||
*Tell us about why it's broken.*
|
||||
|
||||
Oh man, like there are agreement rules where adjectives have to agree with genera, but not if they're not a Latin or Greek word. And if it's a Greek word but it's been Latinized, then you have to change it---but they don't really talk about what Latinization is.
|
||||
|
||||
@ -247,9 +207,7 @@ In terms of other stuff, if I had infinite time and infinite play---because play
|
||||
|
||||
Malta is a really good example of what happens when you mix Italians and Arabs, and then you end up with Maltese. "Chocoholic" is one of my favorite words because it's the stem "chocolate" combined with "holik," which is Arabic. Why not make a whole language that's mixed like that? That would be really fun, just really weird. I'd like to have Algonquian languages spoken on the east coast again, so let's figure out how to do that really well. I like those sort of historical "what if?" questions. What if Hastings had never happened?
|
||||
|
||||
{{< i >}}
|
||||
You've talked about a lot of histories as you're doing this kind of work. How do you think of yourself as part of these earlier legacies? I mean, you talked about Tolkien, and you talked about zoology and taxonomy---whose shoulders are you standing on?
|
||||
{{< /i >}}
|
||||
*You've talked about a lot of histories as you're doing this kind of work. How do you think of yourself as part of these earlier legacies? I mean, you talked about Tolkien, and you talked about zoology and taxonomy---whose shoulders are you standing on?*
|
||||
|
||||
Everyone's shoulders. Patrick O'Brian wrote a really awesome series of books called the Master and Commander series---there's like twenty-one of them. I just finished reading them all for the first time a few months ago. They were truly exceptional, and one of the great things about the books is that they're character-driven. They're about the friendship of two men, Jack Aubrey and Stephen Maturin.
|
||||
|
||||
@ -263,9 +221,7 @@ I try to have more fun, because I think that people should have more fun in the
|
||||
|
||||
Fundamentally, I try to think of myself as not being much different than being a dude sitting next to a fire 10,000 years ago and telling a story to the person next to them. Because historically, I haven't changed much. Evolutionarily, I'm basically that same person---maybe I'm a bit stupider and a bit less tall. But that's what I want to do with my time.
|
||||
|
||||
{{< i >}}
|
||||
Finally, are there any lessons you think this practice of conlanging has to offer to the rest of the world? Is there anything that you wish other people understood that people in this world do understand?
|
||||
{{< /i >}}
|
||||
*Finally, are there any lessons you think this practice of conlanging has to offer to the rest of the world? Is there anything that you wish other people understood that people in this world do understand?*
|
||||
|
||||
I think about this interaction I had a lot. I went to a friend's house---she's a mother of three or four kids, she was a birder in Vermont. I was having tea on her back deck, and I saw this little common grackle come by, a bronzed grackle, and I said, "Quiscalus quiscula," or whatever it is.
|
||||
|
@ -6,12 +6,11 @@ date: 2024-12-13
|
||||
approved: 2025-03-04
|
||||
summary: "A diplomat for Bangladesh describes the role of protocol in high-profile international visits and treaty negotiations."
|
||||
location: "Dhaka, Bangladesh"
|
||||
tags: [diplomacy, government, friendship]
|
||||
headshot: "mosud_mannan.png"
|
||||
topics: [diplomacy, government, friendship]
|
||||
---
|
||||
|
||||
{{< i >}}
|
||||
How do you introduce yourself?
|
||||
{{< /i >}}
|
||||
*How do you introduce yourself?*
|
||||
|
||||
I am a career diplomat, a professional diplomat. I was with the Foreign Office of Bangladesh for 37 years and 9 months. I did an MA at the Fletcher School of Law and Diplomacy in Boston, USA, and completed trainings in New York, USA and in Japan. I also did a short course at the University of Westminster in London. I have been posted as ambassador to four capitals, beginning with Rabat, Morocco. Then I went to Berlin, Germany. After Germany I was posted to Tashkent, that was formerly part of the Soviet Union. After Central Asia, or you can say Middle Asia, I was posted to Turkey. Since Bangladesh doesn't have an embassy in all capitals, one embassy takes care of about six countries. Altogether I was appointed Ambassador of Bangladesh to 18 countries.
|
||||
|
||||
@ -25,9 +24,7 @@ This is, in a nutshell, my background as a career diplomat and ambassador. I was
|
||||
|
||||
I also did negotiations in the field of business and defense cooperation during my tenure as Ambassador in Turkey during the global Covid crisis.
|
||||
|
||||
{{< i >}}
|
||||
What does the word "protocol" mean for you in the diplomatic context?
|
||||
{{< /i >}}
|
||||
*What does the word "protocol" mean for you in the diplomatic context?*
|
||||
|
||||
Protocol has two meanings. Protocol can be a kind of document or agreement. It could be a treaty or a memorandum of understanding. Sometimes you can sign ordinary notes that might last for a few days or a few years. Protocol can also be a special understanding between two friendly countries.
|
||||
|
||||
@ -55,9 +52,7 @@ The then Prime Minister of Pakistan, Nawaz Sharif expressed a desire to see a Ro
|
||||
|
||||
One has to be very meticulous when offering protocol. This is the diplomatic protocol I'm talking about, not just signing a protocol. Signing a protocol is also interesting, but that is different. Many small things---the understanding and exchange of niceties, even the exchange of gifts---can be part of protocol. When a mayor offers a key of the city to a visiting dignitary, that is also part of diplomatic protocol.
|
||||
|
||||
{{< i >}}
|
||||
How much of the rules of diplomacy are understood to be universal, or are already in place, as opposed to the details that you have to work out?
|
||||
{{< /i >}}
|
||||
*How much of the rules of diplomacy are understood to be universal, or are already in place, as opposed to the details that you have to work out?*
|
||||
|
||||
First, basically, between two countries, or even in multilateral cases, you have the Vienna Convention, which sets some basic guidelines around embassies and treaties. Then there are diplomatic niceties. There are many formal things that you have to maintain. Protocol is not a light matter. There is no room for whimsicality.
|
||||
|
||||
@ -65,9 +60,7 @@ In protocol one has to work out all the details when you are organizing an event
|
||||
|
||||
Once in an embassy National Day event---I will not say which embassy---this was when I was in Tashkent, the CD player suddenly stopped, guests waited for the national anthem to resume, the ambassador turned red in the face. You understand, all the dignitaries were present and the national anthem had halted because of a technical glitch. I'm sure next day the person in charge, whether it was staff or junior officer, was packing his baggage and was headed back to his capital. In Bangladesh too, once when the Prime Minister came to attend a formal program, there was a technical problem that prevented the national anthem from being played, and the next day the chief of protocol was fired. These things happen. With protocol, you have to be extraordinarily careful, you have to be calm and collected under pressure, and you have to be well-trained on how to swiftly handle a *faux pas* or unmeditated disruptions. One has to understand the enormity of any failings and one has to always be on alert.
|
||||
|
||||
{{< i >}}
|
||||
How did you learn to develop that sense of detail?
|
||||
{{< /i >}}
|
||||
*How did you learn to develop that sense of detail? *
|
||||
|
||||
I took interest, that's the main thing. From the very beginning I knew this is one of the most interesting jobs because you will be meeting the heads of state and government, and at least the foreign ministers. My opportunity came as a junior officer to be a guide to a visiting minister---showing him around, taking him to the market, taking him to another ministry, just accompanying him---I was very alert from the onset. And I received very glowing commendations after the visit. No matter how difficult the task was, I never said ‘no’ to anybody---I tried to manage. That is another hallmark of a diplomat, protocol instills this quality because we are entrusted to create positivity and an atmosphere of confidence. The objective has to be achieved, no matter how difficult. At the same time the process has to go smoothly, almost seem effortless.
|
||||
|
||||
@ -77,9 +70,7 @@ One has to know all the key protocol people at the ministry or the visa section
|
||||
|
||||
Having a network of friends and contacts can help you in multifarious ways. When we were doing the negotiations in Hamburg, I found there many of my friends with whom I had worked in New York. They were posted as officers or judges in Hamburg. They were very understanding with regard to the Bangladesh position while Bangladesh and Myanmar were having this arbitration over the demarcation of the Bay of Bengal. It became easy for me. When you have a known face, they say, "Mosud, don't worry, we'll take care of that."
|
||||
|
||||
{{< i >}}
|
||||
What is the difference in your relationship to these protocols when you are the protocol officer as opposed to being the ambassador? Those are both roles you've held, but they seem distinct; one is designing the protocol, and one is performing it.
|
||||
{{< /i >}}
|
||||
*What is the difference in your relationship to these protocols when you are the protocol officer as opposed to being the ambassador? Those are both roles you've held, but they seem distinct; one is designing the protocol, and one is performing it.*
|
||||
|
||||
A protocol officer, or in my case the Deputy Chief of Protocol, generally doesn't sign any agreement. An Ambassador is authorized on behalf of the country to negotiate everything. I did it a couple of times.
|
||||
|
||||
@ -93,9 +84,7 @@ I remember a particular visit. Alberto Fujimori was the President of Peru. He wa
|
||||
|
||||
On another occasion, we were informed that Yasser Arafat was arriving in Dhaka in two hours. The Prime Minister's office called and told me our Prime Minister would be at the airport to receive Mr. Arafat. I was instructed to do the needful including arranging a lunch for one hundred people. I was enjoying my weekend with my son, showing him one of the Mughal era antiquities in Dhaka. I took the instructions and calculated how best to get all this done before the aircraft carrying Mr. Arafat arrived at Dhaka in less than two hours. I returned home scrambling to dress for the occasion and rushed to the airport before our Prime Minister arrived.
|
||||
|
||||
{{< i >}}
|
||||
When you're training younger people coming into this work, what kinds of skills do you focus on helping them develop?
|
||||
{{< /i >}}
|
||||
*When you're training younger people coming into this work, what kinds of skills do you focus on helping them develop? *
|
||||
|
||||
First and foremost, patience. In the dead of the night, you may have a call from the Prime Minister or President's office to do something right away. Let us say, for example, the Finance Minister from China will be landing shortly, and Mosud Mannan has to accompany. The price of one’s patience and dexterity is of course, sweet. You get to enjoy unique perks: as a young official I got to see the gold-plated interior of the royal jet of Saudi Arabia, and I shook hands with Mr. Nelson Mandela.
|
||||
|
||||
@ -115,9 +104,7 @@ You have to know your strength. First you negotiate through niceties, and then i
|
||||
|
||||
When Bangladesh was a member of the Security Council, I was one of the alternate representatives. Sometimes, the US permanent Representative to the UN would drop by to discuss things with my Ambassador. Behind closed doors, they would talk amongst themselves. Security Council votes mattered. Since I was part of many negotiations to gain votes for Bangladesh, I know how diplomats can accomplish these things. It is not as easy as it sounds. You have to know the game. You have to know international law. More than that, you have to know about history, and you have to make good friends. My Ambassador did all this, and I believe, I did too. It is not a bookish thing. It is not an academic thing. You have to have two or three options, and make sure that one will work.
|
||||
|
||||
{{< i >}}
|
||||
Have there been times when you've had to break the rules?
|
||||
{{< /i >}}
|
||||
*Have there been times when you've had to break the rules?*
|
||||
|
||||
Generally, countries like Bangladesh don't break the rules. The rules are generally not broken. I will say the rules are pushed apart by powerful countries, because they have other powers, because they are not only negotiating politically. They will push the rules by offering to give you some help, maybe in defense or commerce.
|
||||
|
||||
@ -135,15 +122,11 @@ In Bangladesh we don't train two hundred diplomats at a time. We take ten to fif
|
||||
|
||||
That's why I will say, I was given the best postings---London to begin with, then New York, during the Security Council, then ambassador to Germany, ambassador to Turkey, deputy head of mission in China. I went to Central Asia, which was very nice.
|
||||
|
||||
{{< i >}}
|
||||
What makes countries follow the international rules? It's not like there is a police officer that's going to put them in jail. What makes countries want to follow these norms and participate in the shared protocols?
|
||||
{{< /i >}}
|
||||
*What makes countries follow the international rules? It's not like there is a police officer that's going to put them in jail. What makes countries want to follow these norms and participate in the shared protocols?*
|
||||
|
||||
There is an incentive to follow the norms and uphold shared protocols. Things gain a certain clarity because of maintenance of protocol codes. You do not misread or misjudge situations. If you do not observe protocol, you will land in trouble. Others will not show respect to you because you have broken the rules. Generally, diplomats don't act on caprice and generally they will not act on their own whims to make another country upset. Even when situations between countries become hostile, terse or tense, protocol is observed. Countries diffuse situations or can improve relations by handling things on the basis of protocol requirements.
|
||||
|
||||
{{< i >}}
|
||||
After this career, do you have thoughts about what kinds of rules or protocols could make this international order fair?
|
||||
{{< /i >}}
|
||||
*After this career, do you have thoughts about what kinds of rules or protocols could make this international order fair?*
|
||||
|
||||
The world, to some extent, doesn't revolve around only protocol. It depends on whether we are fair or not. Whether we are fair or not fair will be decided by the culture you follow in your day-to-day life. If you're from the USA, a big, strong country, they have their own culture, they have their way of life, they have their wealth, and they have their might. In Russia, they have different culture and literature, a distinctive way of thinking. China is totally different. Chinese people have their own way of seeing things, their own ways of doing things.
|
||||
|
199
content/interviews/mayer-mediation.md
Normal file
@ -0,0 +1,199 @@
|
||||
---
|
||||
narrator: Bernard Mayer
|
||||
subject: Mediation
|
||||
facilitator: Nathan Schneider
|
||||
date: 2025-02-07
|
||||
approved: 2025-03-11
|
||||
location: "Kingsville, Ontario, Canada"
|
||||
summary: "Mediation developed as a professional field through experimentation and practice."
|
||||
headshot: "bernie_mayer.png"
|
||||
topics: [conflict, family, mediation, social work]
|
||||
---
|
||||
|
||||
*How do you like to introduce yourself?*
|
||||
|
||||
I'm Bernie Mayer. I'm an emeritus professor of conflict studies at Creighton University and a founding partner of CDR Associates in Boulder. I live with my wife and dog, who might join us, in Kingsville, Ontario. That's probably enough for the moment.
|
||||
|
||||
*There's more to come, because I'd love to hear how you outline your life and career. You can begin wherever you like. How do you trace the beginnings of your interest in conflict?*
|
||||
|
||||
A second formative fact was that my father was a director of a residential treatment center for children in a suburb of Cleveland, Ohio. We had a house on the grounds of it, and that's where I grew up. So I grew up in a suburb of Cleveland, and went to Cleveland Heights High School, but I lived in this community. It was not exactly an egalitarian community, but it was definitely a community with a purpose. It made me feel different in some ways, in a nice way---though not always nice. It had its hard moments too. A lot of hard things happened there over the years. But on the other hand, we had a much nicer house than we would have been able to afford, and I had access to baseball fields and gym and swimming pool and stuff like that that a social worker's kid normally didn't have.
|
||||
|
||||
A third formative factor was that I was also, and you probably know the term, a "red diaper baby." I'll just leave it at that. Even though my father became somewhat conservative when he had to confront the sixties, I grew up with that consciousness. Then I was also a child of the sixties, and was very active in the civil rights movement, anti-war movements, peace movements. That was a big part of my identity. I went to Oberlin College, which was a focal point for student activism.
|
||||
|
||||
All those things were about conflict. In a sense, conflict was a unifying factor of both the bad things that had happened and good work that could be done. In the early days of teaching and writing---particularly teaching people to be mediators and conflict interveners---I used to say that I grew up as a teenager and young adult, knowing pretty well how to raise conflict, but not what to necessarily do once I had raised it. As time went on the initial answer was: get people together to talk and see what we could work out. But as time went on I realized, no, raising conflict is really important as well. It's almost in a dialectical relationship with doing something to move it in a more constructive direction .
|
||||
|
||||
I graduated from college in '68. I was facing the draft. I wasn't sure what I was going to do. My initial efforts to avoid the draft by applying to be a conscientious objector didn't work because they decided I really did believe in war. I thought, well, I don't know where this is going to lead me. But what would be a good thing to do during the period of time before I actually do get drafted? I was a child of social workers, and I liked working with kids. I'd done a lot of work as a childcare worker at this residential treatment center and as a camp counselor. So I went to social work school at Columbia in New York. Over the two years that I got my master's degree there, I received a very high number in the lottery, which meant I didn't get drafted.
|
||||
|
||||
Now I had a social work degree, and I worked as a child and family therapist at a drop-in center mostly for recent immigrants to New York, that sort of thing.
|
||||
|
||||
*At that stage, what tools were available for you for helping people through conflict? What was offered to you, what was at hand?*
|
||||
|
||||
There was nothing specifically framed that way. I was trained to be a therapist, and I was trained in a fairly Freudian agency---a sectarian one, the Jewish Board of Guardians, now the Jewish Board of Family and Children's Services. I feel like I had two kinds of trainings or learnings in my life, in grand systemic theories that sought to explain the world in their own way. I'm glad I got training in both of them, even though I ended up seeing significant flaws in both of them. One was Freudianism and the other Marxism. I guess Marxism and Freudianism are, in a way, training about conflict---class conflict and internal conflict. I reject a lot about those systems now. But it wasn't a bad intellectual discipline at that point.
|
||||
|
||||
*Was there a transition, then, from working in the context of agencies, working with who's coming through the agency, to a point where you realized you wanted to try to create some new practices or new frameworks?*
|
||||
|
||||
Well, I was struggling with it all along. I mean, this was a Jewish agency, and a good one, but it was running a program that was mostly for kids from the Dominican Republic but also some from Puerto Rico, Haiti, Costa Rica---and the agency hardly had any Spanish speaking staff at that time. They did have staff who spoke some Spanish, maybe one or two, but almost no one who came from the cultural background of the people we were working with. It didn't seem an appropriate system to me. I felt there was an elitist tone to the agency. The attitude toward staff seemed to be: how "we are the best, and you should really feel really lucky to be here." Nonetheless, I got some very good training there, and and an important side benefit for me was the staff union, in which I was very active, became a shop steward and a member of the negotiating team. In some ways, for my later career, that may have been the most important training I received.
|
||||
|
||||
So after working there for a year as an intern, and then for two years after I got my degree , and I received some good training and supervision, I decided I needed to leave. I also felt it was time to leave New York. That was maybe helped by breaking up with somebody who I'd been in a relationship with and being a little heartbroken about that. My brother lived in Colorado. I called him up and asked whether he knew of any ranch in the area that would like somebody to work there for the summer. That was really naive, I have to say. But it seemed like I needed a break from the professional path I had been on, and I didn't know whether I would ever go back to doing social work.
|
||||
|
||||
I ended up living on a collective farm with whom he put me in contact. I stayed there working for room and board over the summer, and I met Reggie there, my first wife, and Ethan, her then-two-year-old kid. I ended up living there for a year and half during which time I drove a school bus to bring in some extra money. I guess I was part of the "hippie" culture of those I've never really accepted that term, but my son Mark has insisted, "No, you were a hippie, Dad, just accept it." And then, after a year of being a school bus driver and a wannabe farmer, I was ready to do something else. I moved away from the farm after a year and a half. Reggie and I moved into a house in Boulder, right next to my brother's house. The two houses became the Juniper Street Collective---the place Mark and Ethan grew up in. I got a job in a program at the Mental Health Center in Boulder called Our House, which was a drop-in center for teenagers. Interesting---there's still a Facebook group of kids who hung out at Our House all these years later that I'm part of. Many of them are grandparents now.
|
||||
|
||||
I also worked on the adolescent team of the Mental Health Center as a therapist, as did Reggie. But my main identification there was with Our House, which was a kind of sixties sort of place that had some really interesting things going on, but some really poor boundaries too.
|
||||
|
||||
Then I was asked to run a methadone clinic, which I did for about a year and a half or two years, acting part of the time as head of the overall substance abuse program of the MHC (which included the Methadone Clinic, Our House, and several other program). This was part of a program funded by the National Institute of Drug Abuse money. This funding base was a problem for the Our House program because those kids weren't coming in to be treated for drug abuse, although some of them did have substance abuse problems. They were there to hang out in a supportive environment with friends, engage in a variety of structured and unstructured group activities, and receive various kind of counseling as and if they were ready for it. Working in the methadone clinic was a real learning experience for me. I was way too young and inexperienced to be the director of the program or even a substance abuse counselor, as most of us were in that program, but we did okay, I think. There were some really intense things about that job in terms of the trauma people were dealing with and the conflicts they faced and staff had to deal with.
|
||||
|
||||
After about 3 1/2 years in that job I was ready to be done with it. I didn't know what I wanted to do next. I had this ambivalent relationship to therapy and social work. I felt like I had something to offer, but it didn't feel quite like home in a way. So when Reggie finished getting her MSW in Denver, we both quit the MHC and traveled for about four months. We took a four-month trip through Canada and the US. Then Ethan went back and stayed with his dad, while Reggie and I went to South America.
|
||||
|
||||
When I came back, what was I going to do? I didn't really know, and my father was quite ill then. I spent some time with him in Cleveland. This would have been 1977, and then he died in December. Then I started looking for jobs. You can figure out the psychodynamics of this if you want---it kind of hits you over the head. I ended up getting a job as a team leader at a residential treatment center in Broomfield, Colorado, which in those days was called Wallace Village. Then I was appointed as the program director, which was like the clinical director.
|
||||
|
||||
But then once again my ambivalence about what I was going to do arose. I ended up having not the best relationship with the director, who was a behaviorist---and even though I wasn't a Freudian, I also wasn't a Skinnerian.
|
||||
|
||||
At the same time, I was involved organizing demonstrations being organized at Rocky Flats, a nuclear weapons facility. There I met Chris Moore, who eventually moved to Boulder, but was then living in Philadelphia. I met him doing nonviolence training in connection with the protests and sit-ins at Rocky Flats. He and I ended up doing a lot of training in peacekeeping and nonviolent civil disobedience. Anybody who was planning on joining the sit-ins at Rocky Flats had to go through a training that we conducted. When Chris went back to Philadelphia, I continued to e part of the team of trainers we had recruited. Later on, Chris moved to Boulder and for a while lived in the Juniper Street Collective. My meeting with Chris was critical to my future work a mediator and conflict intervention/
|
||||
|
||||
Chris had become interested in mediation, and with his encouragement so did I. When I left Wallace Village (by mutual agreement---although I think there was no way I could have stayed there any longer)---I worked part-time at a really interesting residential program called Forest Heights Lodge in Evergreen Colorado, about an hour's drive from Boulder. I also started a small private practice as a therapist and was getting training in mediation (mostly through starting to act as a mediator, but also as a mediation trainer myself). Chris and I had been offering conflict training to activists but also in a number of other settings--, for example prisons and social agencies, and Chris asked me to help him do some training for people interested in mediation.
|
||||
|
||||
*So your first exposure to conflict and mediation was more out of the social movement experience than the therapeutic experience?*
|
||||
|
||||
Absolutely. But there was also a movement building in mediation, and four of us ended up as partners at a place called the Center for Dispute Resolution in Denver, which became CDR Associates in Boulder, which still exists, with offices above the Spruce Cafe in North Boulder, on Yellow Pine and Broadway. That was my formal entry into doing it as work. We were trying all sorts of ways of making money, but then we got a grant from the Hewlett Foundation that allowed four of us---Chris, Susan Wildau, Mary Margaret Golten and me---to make our work CDR a paying job.
|
||||
|
||||
By then I was also doing a doctoral program at the DU school of social work, and I used that as a vehicle for studying conflict. I was studying conflict theory and conflict intervention. I was also doing a little bit of therapy on the side when a lawyer who I knew approached me to ask for my help. She represented a parent who was undergoing a termination of parental rights process because there had been serious abuse and neglect in the home. She needed an expert witness to testify for her client and asked if I would be that expert witness. I said, "No, I won't do that. But how about if I mediate?"
|
||||
|
||||
That just came out of the top of my brain, and she said, "What?" which was pretty much my own reaction to what I had just said. I suggested an attempt to mediate a voluntary relinquishment agreement between the birth parent, the foster-adopt parents, and the child protection services agency. It turns out that was a very innovative approach. So Mary Margaret and I acted as co-mediators and the parties worked out an agreement averting a formal trial and allowing the foster parents to adopt the child in question. After that I was referred a number of other child welfare cases. Mary Margaret and I then started a two year long child protection mediation project, which became the basis of my doctoral dissertation. This effort turned out to a significant foundation for a whole new area of mediation services---child welfare mediation is now happening throughout the US and Canada (and elsewhere). We were one of the first two places to try it, and developed an important partnership with child welfare services in Boulder and Denver's (including lawyers who represented agencies, children, and parents).
|
||||
|
||||
In this and in many other ways CDR took off--growing from literally a church basement operation to a well funded and recognized conflict training and intervention service. In order to survive in our early years, we basically had to take all comers because we needed the money, which meant we were doing a lot of work that we weren't specifically trained for. But neither was anybody else.
|
||||
|
||||
*Who were these clients?*
|
||||
|
||||
We worked in many different conflict arenas. We had a family mediation program. We did work for government agencies, teaching them conflict resolution for public processes, and we did some fairly large-scale conflict interventions. I did a bunch of organizational work---labor management, but also on conflicts within organizations. I still do that occasionaly. And we also ended up training internationally and helping set up conflict services in quite a few other countries. So things just grew that way over the years. Even though the Center for Dispute Resolution existed before the partnership formed, we really built it from a church basement bare bones operation, doing mostly landlord-tenant or neighborhood mediation. We did community mediation too and facilitated dialogues on public policy issues. For example, one of the more recent ones I did in Boulder under CDR's auspices was about the location of the homeless shelter in North Boulder.
|
||||
|
||||
*Yeah, that was a big deal.*
|
||||
|
||||
Still is.
|
||||
|
||||
CDR was starting to do a lot more work that required traveling---for example, over the years I did a lot of work in Eastern Europe, and then I also did a lot of work in Australia and New Zealand and Alaska. But when Mark was born in 1984, I started trying to develop local work with city government, state government, and county government.
|
||||
|
||||
So that's my journey. Fast forward from 1978--79 to 2002, when my first marriage ended. I got remarried to Julie and moved to Canada. I still was doing work for CDR, but by 2006 or so, I started thinking I'm far away from there. CDR was going in some directions that weren't my favorite---I used to joke (although there is truth in this) that when I couldn't stand the words "billable hours" anymore, I realized that I needed to move in a different direction.
|
||||
|
||||
So then I thought, well, maybe I could go out on my own part-time, but maybe it might also be time for me to have an academic home. In 2006, I got a nice offer from Creighton University, which had a grant to start a conflict program there--the Werner Institute. The guy who was the founding director asked me whether I would you be interested in doing some work with them. I said, "Sure!" And he asked whether I would consider being a faculty member. I said, "Well, I'm not moving to Omaha." So we worked out a deal where I worked half-time as a non-tenured full professor. I'd already written a couple of books by that point---I believe that's why they wanted me.
|
||||
|
||||
They would fly me in a couple times each semester for ten days or so, and I'd do some online work with students in between. They provided accommodation and transportation as well. It was a very nice deal which worked well for all of us. I did that for fourteen years, and then I retired from it because that program was going through changes. I was seventy-four years old by then.
|
||||
|
||||
*As you were getting started in Boulder and developing this practice, clients were coming in with challenges that you were never trained to deal with---nobody was. How did you start building up a practice, building up tools and strategies? How did you begin to learn how to mediate conflicts?*
|
||||
|
||||
I did eventually take some courses and go through some seminars, so I got some training, but a lot of it we were creating ourselves. It was a very creative period of time. And it wasn't just us---this was happening in the conflict field more broadly. The field had a lot of very interesting creative people, like John Paul Lederach. I went to a course he taught, and he went to a course I taught.
|
||||
|
||||
People were making efforts all to build the peace and conflict studies field in many places. The Harvard Negotiation Project was starting. There was some funding for community mediation centers that we were one of, but these programs took many different forms. There was the deliberative democracy movement, Partners for Democratic Change, Search for Common Ground, Accord, Resolve, the San Francisco Community Boards, and many other growing and innovative groups/ So we weren't alone in doing this. We were part of a growing literature and organizational base. There was also the National Conference for Peacemaking and Conflict Resolution, which was part of the peacemaking field that was growing too. It came out of a slightly different tradition, but we interacted a lot. The peacemaking field to a large extent came from the Quaker and Mennonite tradition. Actually, the Mennonites played a role in our formation---when we were still a church basement office in Denver, it was in the Mennonite church, and their volunteer was our first office worker.
|
||||
|
||||
Arbitration was also growing at that time, and there was a whole labor management side of this too. There was an organization called SPIDR---Society of Professionals in Dispute Resolution---and there was also\\ the Academy of Family Mediators with which I was also very involved.
|
||||
|
||||
A lot of creative stuff came out of what we did. If you're familiar with Chris Argyris or Donald Schön's work on reflective practice, that's kind of how we did it. We had approaches we taught, and then our actual practice (our "espoused theory" and our "theory in practice"). For me, it was a very creative process to see the tension between what I was doing and what I was teaching.
|
||||
|
||||
The kind of bible in the field of negotiation in those years---to some extent it still is---was a book called *Getting to Yes*. It talked about positional and interest-based negotiation, this idea that the way you resolve disputes is to get people to talk about the interests underneath their positions. There were two co-authors from the Harvard Negotiation Project: Roger Fisher and Bill Ury. Roger Fisher's been dead for many years, but Bill Ury still lives in Boulder. He's a wonderful guy. He's written quite a few books. He's a wonderful writer, one of these writers whose storytelling does the heavy lifting of presenting his ideas, and his book has been a major bestseller. But I came to believe it was overly simplistic and prescriptive. Position and interests are not that different in essence--it's more about how they are presented and how far we did into the reasoning and motivational basis of people in conflict.
|
||||
|
||||
I also remember how we taught active or reflective listening n our earlier years, and I always felt there was a lot of bullshit about that. No natural conversation really is that formulaic. These discrepancies between what we taught and how I at least really worked were at the basis of a lot of growth for me much of which ended up in books that I wrote and in the way I taught as well.
|
||||
|
||||
That was a way in which my own thinking developed. It was partly in response to what others were saying, and partly in response to what I had been saying that I didn't quite believe anymore. My favorite bumper sticker says, "Don't believe everything you think." I was noticing either my practice wasn't following what I preached, or my preaching wasn't following what I practiced, and in that tension was a great deal of creative space.
|
||||
|
||||
*Are there particular tools or patterns of conflict or techniques that you keep coming back to and keep finding truth in?*
|
||||
|
||||
Yeah, but they tend to not be things you do as much as ways of thinking. People always want you to teach how you do it---"I want something practical. Give me something practical." That is all well in good, theory and practice need to inform each other, but real growth comes in the maturation of our understanding of what we are dealing with in conflict and how can intervene in it in a productive way.
|
||||
|
||||
There are two things that I've really come back to over and over again. First, we do not really succeed in conflict by being neutral. In fact, the concept of neutrality is a very flawed one. That's why I wrote a book *Beyond Neutrality*, and another book, co-authored with Jackie Font-Guzmán, called *The Neutrality Trap*. Mediators often market themselves as neutral---"we're neutral, we're impartial, we're just here to help you." But we have an awful lot of values and life experiences that inform our work, and in most circumstances people want us to be authentic and transparent about that. One of the things I did not like about psychoanalysis, for example, is the expectation that we not put our own personality into the process.
|
||||
|
||||
People want that personality. What people don't want is for us to manipulate them. If we say we're going to help them work out stuff, they don't want us to power them into something they don't want. But they also don't want us just to sit by in the name of neutrality while people get run over.
|
||||
|
||||
I have learned over the years that my great ideas, when I'm in a third-party role, for how to solve a conflict are usually not such great ideas---you really have to trust people that they know what's best, and it needs to come from them. Not that I never have ideas, but I'm not the type of mediator who listens to everyone, gets opening statements, and puts people in separate rooms, which is how a lot of corporate mediation goes. You beat this person up a little bit, you beat that person up, you come up with something---no. I really believe people need to be brought together as much as possible and our job is to help do the hard work in conflict that they need to do. But that doesn't mean I'm passive.
|
||||
|
||||
The second thing is that we have to help people raise the level of conflict. If we just see ourselves as calming things down, helping people come up with some resolution, and avoid intensifying a conflict we are often papering over really important issues and contributing to often unjust or unstable status quo. While there are often times when what people want is to calm down a conflict and paper over the deeper issues,---a lot of times that's what people want and need, but a lot of times it isn't. Particularly in very serious conflicts, people need help in raising the more difficult issues, and they need help in saying what they are thinking and feeling in a way that is authentic but doesn't shut everything down. As conflict interveners, have to be aware of our own conflict-avoidant tendencies and so that we don't actually stand in the way of getting to the level of depth where the conflict actually "lives."
|
||||
|
||||
In fact, I think of our field as a field of conflict *engagement* specialists. One of the things I used to ask students is, before you ever know anything about a case, what do you see your purpose as being in a conflict? People can have all sorts of different answers. My answer was: I'm here to try to help people have the conversation they need to have.
|
||||
|
||||
*Right. You wrote about "staying with conflict."*
|
||||
|
||||
That's right. I also wrote a book called *The Conflict Paradox*, which is in some ways I think my most interesting way of looking at things---though it's probably the least selling of my books. A lot of what we're doing in conflict is helping people get past where they see things as in opposition to each other, and instead see them in a more dialectical way, as part of the same whole, like competition-cooperation, or logic-emotions, that sort of thing.
|
||||
|
||||
*I appreciate the way you talked about your interventions as being primarily about a way of thinking as opposed to, say, a system or a procedure or an algorithm. How do you impart to clients that way of thinking? How do you prepare them for entering into and maybe escalating a conflict in the way they need to? How do you take them from where they're first coming to you to a point where they're ready to engage in a more productive approach to conflict?*
|
||||
|
||||
There isn't a single answer because, for one thing, some clients aren't ever going to be ready. And I don't see myself exactly in a kind of didactic relationship with clients. But I think if I listen, if I'm there to listen for what's really important to them---and in the interactional space---it's going to come out. And the question is, do I shut it down or move it forward?
|
||||
|
||||
Sometimes you have to say, "What do you need right now in this situation? Not necessarily from me, but just what do you need? Do you feel you need to be heard better? Do you feel you need to understand better? Do you feel you need to be empowered in some way? Do you feel you need other people participating in this? Do you feel you need an advocate?"
|
||||
|
||||
One of the ways we can help people is to get beyond their belief that we are here to fix things is to take on other roles than third-party ones. For example, some of the most useful work we can do in many circumstances is as an advocate role or a coach. That's something I've talked about: the three kinds of roles we often play are system roles, third-party roles, or ally roles. Sometimes the best way you can help people is to be an ally. I remember Bill Ury saying he thinks that's true for some of the most important the work he's done in the international arena.
|
||||
|
||||
Even as an ally, you have to remain true to yourself. Once I was working with a university as they were dealing with some pretty intense student protests. I said, "I'm not here to help you put down student protests. You know my background. But I can talk to you about how you can interact with them." That got me into dealing with facilitating---co-facilitating, really---interaction between Jewish and Muslim, and also Palestinian students on campus (this was about 25 years ago).
|
||||
|
||||
I don't do a lot of formal mediation anymore. I live in this little town. I find myself getting into it sometimes, but I do a lot of consultations still, often in that ally role.
|
||||
|
||||
*How much do you see patterns playing out across conflicts that repeat themselves in conflict after conflict, as opposed to having to approach each one as a really distinct challenge with very distinct sets of strategies? How much about conflict, as you experience it, repeats itself as opposed to needing to be treated as always new?*
|
||||
|
||||
That's a very important thing to look at---the patterns of interaction, both between the parties and between you and the parties. I used to say, if I've tried something twice, and it hasn't worked, I better try something else. Even just asking the same question---I remember one time in a video somebody took of me during a demonstration, I could see myself not letting this go. I kept saying, "What do you think the other person's trying to tell you right now?" And this person kept projecting all these evil things onto the other person. I kept wanting to sah, "Bernie, will you give it up?" It was a real learning.
|
||||
|
||||
From case to case, there's always the question of whether people can listen, and whether, when people aren't feeling heard, instead of listening, they speak louder. I started realizing that, more often than not, if you want to be heard, what you have to do is listen better. And if you want someone else to be a little more straight with you, you have to be more revealing yourself. I'm not proposing that as a rule always, but it is something you see happening over and over again---that particular kind of communication pattern.
|
||||
|
||||
Another thing to look at over and over is what I learned in therapeutic workshops: looking at rhythms of interaction. So we've established a rhythm of interaction---you ask your question, I go on for ten minutes, then you ask another question.
|
||||
|
||||
Is one person doing all the talking? Does somebody get halfway through a sentence and the other person breaks them off? Is it like my Jewish family's conversation at a table, where nobody ever finished a sentence?
|
||||
|
||||
Those are patterns of interaction. Another pattern is the rhythm of emotionality. Something you also see over and over again is how quickly people rush to solutions. Sometimes that's fine---sometimes people rush to very good solutions very quickly when you think you really need to have a much longer process, and you don't.
|
||||
|
||||
I always remember an organizational mediation where there was a dysfunctional team of people, but the real problems were between the supervisor and one of the key staff members who had a lot of power in the team. They were really going at it, so we set a day aside for a retreat. They kept arguing about how they said good morning to each other.
|
||||
|
||||
One said, "I say good morning, and you never respond to me. You never even lift up your head." And the other person said, "Yeah, but that's because if I say good morning, you're going to feel you've communicated with me enough, and you go in your office, and I don't see you all day."
|
||||
|
||||
They went back and forth, and I said, "Okay, this is not what this conflict is about. We're not here to spend the day talking about how you say good morning to each other. What's really going on?"
|
||||
|
||||
When it came out---I remember it was very sensitive---but the very hard-nosed, hard-to-work-with person said, "It all started a while back when I had a seizure at work." And I thought, *Oh my God! She's prepared to be vulnerable here.* The supervisor had discovered her having a seizure, had dealt with it immediately in the break room I think, and called 911, and she got taken away, and they stabilized her, and it never happened again.
|
||||
|
||||
The supervisor had this narrative of "I was a hero. I rescued her." Her story, though, was, "I came back, and everybody knew about it." And the supervisor said, "Oh wow. I was really shaken. I guess I told some people because I needed to process it, and I am really, really sorry." The person looked at her and said, "Apology accepted."
|
||||
|
||||
I didn't do much other than to say, "What the hell is this really about?" And it only could have gone that well because they really were ready for something to change. But it does show, I think, the importance of sometimes saying, "I don't buy it. I don't buy the stories you tell." One of the things you do is listen to every person's narrative. In conflict, they don't seem to overlap. What you're trying to do is expand each person's story enough---the Venn diagram, if you will, of the story---to overlap, and then begin to have a different kind of conversation. Those are some patterns, I guess.
|
||||
|
||||
*One thing that stuck with me earlier is what you said about the systems that expect people to speak in particular kinds of ways, and how you want people to speak in their own way. That resonated with an experience I had with trying Nonviolent Communication in a relationship, and I found myself just policing the other person's speech the whole time, and it made everything worse. I'm curious how you are able to push people into a different way of hearing or speaking, while at the same time ensuring the process is really theirs---it's not pushing them into an artificial box.*
|
||||
|
||||
Yeah, as my kids have said from time to time, "Don't do that social work shit with me" or "that mediator shit with me." And I would feel that too. That's a problem. I think Nonviolent Communication has a lot going for it, and I think active listening has a lot going for it, but it's prescriptive.
|
||||
|
||||
In fact, for every person we interact with, we negotiate a communication pattern in a subliminal way, and there's power in that negotiation. You have to be aware of your own power, or you could very well bully people into doing something. That's another thing you always have to look at---power dynamics.
|
||||
|
||||
I don't ever think you should push people or pull people, unless you're really going to power over them and they're okay with that, and if their natural communication isn't so far away from your style. There are significant gender issues here, and there are significant cultural issues here. I spent a lot of my life having to work across different cultural lines. You can do it---I don't think you can ever work cross-cultural conflict with sort of the perfect match of the two cultures. You have to be aware of your own power.
|
||||
|
||||
One approach is to give people the communication problem to solve. You can't solve the problem yourself---it has to be a joint effort. And if it's a three-person thing, it has to be a joint thing. In most circumstances you can start out by being a good listener, but not always. Sometimes people have to say, "You've got to make yourself vulnerable. I've got to understand who you are better before I'm willing to engage."
|
||||
|
||||
Let me tell you another story. I did some work once, Mary Margaret and I, with a large Native American group and a large Fortune 500 company. It's written up in some book or other. The company had a big energy-producing facility on the reservation, and they had a lot of conflicts around it. We got called in because of questions about who got to control the complaints around workplace stuff---was it the state or was it the tribe? There were a lot of sub-conflicts.
|
||||
|
||||
We got called in to work with them, and it was very interesting because you had these suits from the Fortune 500 company and these very sophisticated negotiators from the tribe. We started out with a smudge ceremony and prayers, and you could sort of see that the suits were really used to having to do this, but they were eye-rolling---there was a lot of eye-rolling going on, even if their eyes didn't really roll. The tribe negotiators were very identity-based, value-based in their approach---what gives meaning to them, their dignity, and the dignity of their culture. And the language of the suits was all business-like: "Well, how are we going to work this out so we can each have predictability in our relationship? We can know how to plan." Whenever they spoke like that, the Native American group felt disrespected, and the people from the company, who were good people, were saying, "Yeah, yeah, we're trying to do all of that respectful stuff. We've got to talk about business, though."
|
||||
|
||||
I basically looked at them and said, "All right, here's what I think is going on," and I just described to them what I described to you. I said, "Is that right?" And I said, "I'm not here to tell you what to do about it, but I think that's what's going on. What do you think we should do about it?" And I did it with enough humor that they could laugh a bit about it.
|
||||
|
||||
*You helped them develop a shared meta-story about what was going on between them.*
|
||||
|
||||
That's exactly it. And it worked. I'm sure to this day it still is a striggpe, because I think it's a long-term relationship--- and they're probably completely different players, but the structure is still there. They probably still struggle with that.
|
||||
|
||||
*Have you had experiences where ideas or practices that you've developed have been used in a way that you were not comfortable with?*
|
||||
|
||||
I have, of course, seen people who I've taught or tried to mentor---I don't like sometimes how they're quoting me. But I used to say that the thing that really scares me as a supervisor or mentor is somebody who will do exactly what I tell them to, because that's not them, that's me. "What would Bernie do?" No, no, no! What would you do if you were really being your best self?
|
||||
|
||||
*Do you see lessons from your experience that you just wish you could share more widely, particularly as political conflicts intensify in the United States?*
|
||||
|
||||
I don't feel there's equal validity right now to all sides. I don't think that's the answer. I think that's a very liberal answer, actually---"you just have to listen better." And we're seeing that in the response to this election, which is, "Well, the Democrats just need to really listen." We heard that when Trump was elected in 2016. We're hearing some of that now, but it takes a little bit more of the flavor of "let's listen to the working class."
|
||||
|
||||
I do think the Democrats have abandoned the working class. But if you go up to a bunch of working-class people and say, "We just want to listen to you better," then you're being another elitist, white liberal. I think oftentimes the mistake we make in response to this is to think, "What can the Democrats do better?" In the face of really hard reactionary movements in the past---McCarthyism, or just racist movements all over---changes occurred not through parties but through building movements. I think that the most important question for me right now is, how can I help with that?
|
||||
|
||||
*Is it because movements sometimes take us deeper into conflict, because they escalate conflict?*
|
||||
|
||||
I have to think about whether I'd say it like that. I mean, I think that's more a tactic that movements have to decide. The subtitle of my last book, *The Neutrality Trap* with Jackie, is *Disrupting and Connecting for Social Change*. And I think that's more how I think about it now. Change happens---you have to disrupt the systems that need disrupting, but you also have to make connections. And the strategic question is, how do you do both? Or how do you do it in an effective way?
|
||||
|
||||
If you look at movements that have been successful like the civil rights movement, there was very calculated disruption that raised conflict. But there were also efforts to build coalitions and reach out to people who were ready to be reached out to.
|
||||
|
||||
If you look at the movements I've been part of in my life that have been somewhat successful, party politics was in the background. You voted---you voted for the people you thought would most move your agenda forward, but you didn't put all your energy there, and you didn't put all your analysis there. So the civil rights movement, the feminist movement, the environmental movement, the peace movement, the working people's movements---all put their energy into supporting candidates, but that was not their central focus. And I think that's a lesson I feel for this time.
|
||||
|
||||
I mean, I hope the Democrats do think about what they've done to lose their base so badly---although you can argue how badly it really is. And I hope they listen, and I hope that we work very hard to press ahead. But I think the one thing Trump really got right was that it's a systems problem, and that people don't feel the system's working. He got that, and he said it over and over again in different ways, and he's trying to disrupt the system now. He's doing it in a totally chaotic, counterproductive way, I think. But he got the problem right.
|
||||
|
||||
I mean, you can say, "Oh, look! Our economy is better than others in the world, look at employment." But people your age and younger have a hard time buying a house. The living standards of your generation are lower than my generation's was---first time that's happened in a long time. Something's not working. And we're not solving climate change. And we're not solving income disparity. Systems change means disrupting and connecting and building movements, and seizing opportunities and learning lessons, and licking your wounds when you have to.
|
||||
|
||||
*Is there anything else you'd like to share before we finish? I mean, I think that's actually a good, full-circle way to end---we started with social movements and end with them.*
|
||||
|
||||
The only thing I feel like when I talk like this---it sounds like I've got it all figured out, and I sure as hell don't. I'm sharing with you how I try to think about things now. It's way beyond me in terms of how we're gonna get out of the mess we're in. One of the chapters in one of my books is called "Optimism and Realism." And I think genuine optimism or even hopefulness doesn't work if you don't have any realistic basis for it. And we're facing that crisis right now.
|
||||
|
||||
If you don't maintain some optimism or hope for change, then you may as well just pack it in, and I refuse to do that. That's a lesson I've also learned in my personal life---my wife has struggled with cancer for fifteen years. So I guess I feel like this, too, shall pass.
|
||||
|
||||
I don't know how. I want to stay hopeful for change, and do my very best to do whatever I can to be a good player in that from where I sit now. But it has to be tempered by realism, by just how hard it is and how bad a situation we're in right now.
|
208
content/interviews/mayernik-disegno.md
Normal file
@ -0,0 +1,208 @@
|
||||
---
|
||||
narrator: David Mayernik
|
||||
subject: Disegno
|
||||
facilitator: Nathan Schneider
|
||||
date: 2025-06-18
|
||||
approved: 2025-06-18
|
||||
summary: "An artist and longtime professor at the University of Notre Dame's School of Architecture practices a kind of design that reaches across time and space."
|
||||
location: "Lucca, Italy"
|
||||
headshot: "david_mayernik.jpg"
|
||||
topics: [architecture, art, urban planning]
|
||||
links:
|
||||
- text: "Personal website"
|
||||
url: https://www.davidmayernik.com
|
||||
- text: "The Meaning of Rome: The Renaissance and Baroque City"
|
||||
url: https://www.edx.org/learn/humanities/university-of-notre-dame-the-meaning-of-rome-the-renaissance-and-baroque-city
|
||||
---
|
||||
|
||||
*Your body of work includes oil painting, frescoes, opera sets, architecture, and more. How do you describe your practice, primarily?*
|
||||
|
||||
I would say I'm an architect only because architecture incorporates all those other things. If you say you're a painter, it's harder to pull architecture into it. Architecture can incorporate the other arts, while the other arts don't easily weave in architecture.
|
||||
|
||||
The people who were exclusively architects in the Renaissance in Italy were the exception. An architect was often someone who knew how to paint or sculpt. The Sangallo family—especially Antonio da Sangallo the Younger, who did a lot of palaces in Rome and was in charge of St. Peter's for a while—were thought of as architects. They came out of a woodworking tradition, and they weren't painters or sculptors. But most of the architects of the Renaissance were painters or sculptors first. Bramante was a painter before he became an architect, like Raphael and Leonardo—most people we think of as famous architects of the Renaissance were trained as something else.
|
||||
|
||||
Architecture was an extension of the other arts, and that had credibility because the fundamental skill that underlay all the arts was drawing. If you could draw, you could design anything. It was Bernini who said in the seventeenth century that architecture is pure *disegno*, pure drawing and design. Architecture is a manifestation of drawing more directly, but also in a more abstract way, than painting or sculpture.
|
||||
|
||||
Drawing is the thing that allows artists to migrate and do different things because it is conceptual. In Italian, *disegno* means both drawing and design, so beyond delineating it also means the ability to conceptualize.
|
||||
|
||||
*What does that mean for the relationship between the drawing and the building? Is the building just an expression of the drawing, which is the ideal form?*
|
||||
|
||||
That's a really hot debate. A lot of people lament the fact that, in the Renaissance, building became the execution of somebody else's drawing. The romanticized idea about the Middle Ages is that there was no such thing as the architect—there was a master builder, and while they could draw, they were building their own buildings. They were both the executor and the conceiver of the building.
|
||||
|
||||
In the Renaissance that process gets segregated into the person who conceptualizes and somebody else who executes. It's not that the person who drew the building didn't have experience with materials—every painter in the Renaissance knew how to paint fresco, which is basically working with plaster, what most buildings were covered with. Understanding plaster means you also understand the masonry support for the plaster. In the modern era, architects rarely get their hands dirty with any material participation in the building process.
|
||||
|
||||
*Is there a particular time and place where you center your practice?*
|
||||
|
||||
I don't want to say I live in the past—I'm very much a modern person—but I do think people were very good at what they did in periods in the past that I aspire to. I would like to be as good as them. I'm not interested in replicating what they did or living in the past. My life would be completely different if I lived even one hundred years ago; I wouldn't be married to the woman I'm married to. I don't want to return to the past. But there's a lot we can learn from it.
|
||||
|
||||
My happy place—as much as I love the Renaissance—is that I'm really a Baroque guy, because I was formed in Rome, and Rome is a Baroque city more than anything else. My way of approaching things comes out of the late seventeenth, early eighteenth century—a time when things hadn't gotten too ideological as they would with neoclassicism. Somewhere in there is probably where my natural hand is, my way of working.
|
||||
|
||||
*How did Rome teach you?*
|
||||
|
||||
I tell my students now—which is not exactly how it happened for me—that you can't learn from Rome. You can learn from the people who worked in Rome. Rome is this overlay of accomplishment and transformation over thousands of years. You can't take Rome and transplant it elsewhere. It's such a unique response to its own position and history. But you can learn from the many great architects who worked there. You can learn from Bernini or Raphael or Bramante.
|
||||
|
||||
There's a kind of romantic idea about *romanità*, a Romanness that you can bring to your work—a gravitas, a sense of seriousness, a weightiness that's very Roman. But there's a light, graceful side to Rome as well. You could take away a sensibility from Rome, but I think you can more directly, as an architect, learn from the architects, not from some vague feeling about Rome. I don't know how to take that and transplant it.
|
||||
|
||||
One of the things I tend to teach—which was controversial in my school—was that if you want to analyze something, you can only analyze something that was done intentionally. You can't analyze an accident or induce principles from a series of accidents, and a lot of what we have in Rome are accidents—things that happened without any design intent. The things you can actually apprehend and understand and learn from are the things that were done on purpose.
|
||||
|
||||
*As you're developing your practice in relationship to this place and its intentions and accidents, what kinds of rules or disciplines did you start adopting for yourself that, perhaps, other architects weren't adopting?*
|
||||
|
||||
When I was teaching at Notre Dame, a big part of the loose community of people who are roughly aligned with me—though we're actually more factionalized than many people understand—was a strong emphasis on urban design. By urban design, I mean the ways in which buildings play well together and contribute to something bigger than themselves, the making of streets and piazzas, the public realm.
|
||||
|
||||
One of the things I took away from Rome and emphasized when teaching was the role of buildings in shaping public space—that is one of their primary jobs. The role of buildings is to collaborate with other buildings to make public space. Unless you're building somebody's house in the middle of a field, anything in an urban context or even loosely related to an environment with other things around it has a responsibility to articulate and shape space and collaborate with other buildings.
|
||||
|
||||
*What are some of the ways that you do that, especially if you have buildings being built by different people at different times? How do you create the framework in which buildings collaborate around public space?*
|
||||
|
||||
If you're building in an existing urban context, the street system has already been determined, and unless you have some license to change how the street system works, your job is basically to reinforce that street system.
|
||||
|
||||
Creating public space in the American grid is challenging. If you want to create a plaza in an American city, the easiest thing is to remove one block of buildings and make it open space. Philadelphia has squares like that. Chicago has squares like that. One problem with them in terms of spatial definition is that usually the grid passes along the outside edges, making the corners kind of open. They don't have the same sense of containment with a closed corner that you have in European spaces, where streets often pass through the middle of the piazza. In Europe, you enter into the space rather than passing along its flanks.
|
||||
|
||||
For the TASIS school in Switzerland, I'm the master-plan architect, so I decide how the buildings relate to each other. If you're planning a campus, you have the responsibility and opportunity to organize buildings in ways that contribute to shaping space.
|
||||
|
||||
Some familiar campus plans include the college system at Princeton, Oxford, or Cambridge. The colleges are relatively self-contained, organized around a courtyard made by a grouping of buildings, like a monastery. They're all contiguous and collaborating in shaping a unique space. In that case the university is an accumulation of those colleges. A campus like Notre Dame is more like Harvard's, where it's an accumulation of individual buildings loosely organized around open quadrangles.
|
||||
|
||||
The TASIS Swiss campus is on a hillside, so it's really hard to connect the buildings and shape space in that monastic way. Because we're building it over time and the campus has evolved, it's an accumulation of discrete buildings that define and shape space, looser than a monastic model. The campus in Switzerland is more like a village.
|
||||
|
||||
I've tried—and it's actually been somewhat problematic for some people in the local planning department—to not make the Swiss campus look like there's a monotony of style. I've tried to particularize every building, give each their own unique character, but also respond to their specific type. The theater doesn't look like the gymnasium, which doesn't look like the library, so you can read the campus. As much as you want harmony between buildings, you also want special things to stand out or unique buildings to be legible as what they are. You can tell a church is different from a palace.
|
||||
|
||||
*When you're walking through the streets of a city—like here in Lucca—how do you see buildings interacting with each other?*
|
||||
|
||||
A city like Lucca is pretty harmonious. A lot of that happens in Italy because historically, people were building with a palette of materials that was constant over time. Masonry bearing wall buildings, mostly covered with stucco, are all going to harmonize almost by nature because of the constraints that masonry construction imposes on you—how big you can make openings, how many floors you can make a building. If you put a roof on, there are only so many ways of making eaves. There's a kind of natural harmony in most Italian cities, even if they're built over long periods of time, because the palette of materials was local and constant.
|
||||
|
||||
Lucca has a lot of brick because it doesn't have a lot of stone natively, while other cities are made more of stone because that was the indigenous building material. In the Italian tradition, brick is often just thought of as the structure, but the skin is stucco, and you can paint stucco any color you want. Historically those colors were earth pigments, so you have a natural palette that's already harmonized.
|
||||
|
||||
In Lucca, there's not the same kind of coordinated spaces that we have in Rome. Some of the great piazzas that I loved in Rome are designed to be coordinated. Lucca doesn't have that—it's kind of a looser gentility. The buildings are all polite to each other, but they're not all cooperating in an orchestrated way.
|
||||
|
||||
*When you're working in relationship to these traditions, do you impose particular constraints on yourself or on people working within your master plan? Is there a sense of accountability to the tradition? Are there lines you try to avoid crossing that another architect might not?*
|
||||
|
||||
I'm the master planning architect for the campus, but I'm also designing all the buildings, so I'm true to myself in that sense. The project has stretched out over time—it's coming up on twenty-nine years I've been working for them, and we're still not done yet. Their needs have changed too.
|
||||
|
||||
What has held the project together is the idea of it as a village. The actual form of the village has changed; we've done a variety of master plans, and we've resubmitted the master plans for a variety of reasons. The core principle isn't the form, it's the intent—the idea that it wants to feel like a harmonious village. The form is evolving and changing, and I'm evolving and changing with it.
|
||||
|
||||
It's been interesting. I've had to adapt. I'm designing buildings now that are different from the ones I had imagined before. It's almost like I'm working in my own historical context, which I'm responsible for. I'm responsible for negotiating with my own buildings, with different needs and purposes that I didn't see coming twenty years ago.
|
||||
|
||||
I've imposed on the process—and it's been a long struggle and we're still battling with it—that all buildings would be built in masonry bearing wall construction. I personally want my buildings to be made the way they appear to be made. Not all architects care about that. Most buildings on the Notre Dame campus for the last half century look like brick buildings but are really steel-framed buildings with a brick skin.
|
||||
|
||||
I imposed on the school that the buildings should be what they look like, masonry bearing wall. We've more or less been true to that, with some recent compromises that bother me, but basically the buildings are what they appear to be. That process is slower and can cost more, which means you can't afford to do other stuff like use fancier materials, or have more columns or carvings.
|
||||
|
||||
They're pretty simple buildings, and I'm prepared to live with that. I would like to do more elaborate stuff, but I made a choice that we were going to build these things in a solid, durable way, and I had to give up other fancier elements that we might have been able to do otherwise. That's the choice I made—not every architect would do that.
|
||||
|
||||
At the school, I've done frescoes on the outside of the buildings. The theater has an iconographic program, and so does the gymnasium, which I interpreted in a more ancient, holistic cultural way as a place where you form the whole person, not just the body. I gave the gymnasium an iconographic program, but not all the buildings really need that or merit it.
|
||||
|
||||
I would love to do a chapel or a church someday, because it's a space where all the arts can collaborate. I think architecture is limited in terms of what it can say rhetorically or poetically. In order to say something specific, it needs painting and sculpture, and not all spaces need that.
|
||||
|
||||
*How does working in a context like a school compare to religious spaces that you've also engaged in? How do you approach the craft when the job involves a church?*
|
||||
|
||||
What I've done is paint a cycle of frescoes in a historic church in Tuscany. There's a whole story—there was an amazing unfolding of events, a consequence of preparing the wall to paint a frescoed crucifixion; they discovered an eighteenth-century fresco under the whitewash, so we had to move the crucifixion. It resulted in a whole other series of paintings in response to the one that they discovered.
|
||||
|
||||
While I was painting the crucifixion, the people who took over the school where I'd studied fresco technique were restoring the eighteenth-century fresco. It was super interesting because the past was coming back to life.
|
||||
|
||||
*What was the exchange like with that older painting that was uncovered? How did it affect what you were creating?*
|
||||
|
||||
The chapel had an oil painting of Mary and John at the foot of the cross from the late seventeenth century. They were two canvases that were meant to be together, the same size, mounted in a simple frame with a seam between them, and mounted over the seam was a wooden crucifix. This church happens to be next to the Tuscan home of my Swiss client. She paid for the renovation of the chapel and said, "My architect paints frescoes, and I think you should have a painted crucifix."
|
||||
|
||||
I made a choice that I did not want to imitate the oil on canvas historical paintings. I would paint the crucifix in fresco so that it would not be confused with the historical paintings, but would also complete the narrative of Mary and John at the foot of the cross. I wanted to paint the cross on the wall with the canvases hung on either side, so it would function as an ensemble in two different media.
|
||||
|
||||
It was supposed to be at the end wall of the chapel. But as they were scraping down the whitewash on that wall, they discovered there was an eighteenth-century painting, an Annunciation. So then the Belle Arti had to come in and decide what it was and how important it was. We decided to move the crucifix to the middle of one of the long walls.
|
||||
|
||||
Because the church is dedicated to a local saint who was the evangelist of that area in the early history of the church—the third century—and his martyrdom happened on the spot where the church was built, I was going to have an oval of the martyrdom of that saint over the crucifix. Because we had to move the crucifixion to a long wall under a pitched roof, that wall was shorter, and I couldn't fit the oval over the crucifix. I decided to slide the oval down behind the crucifix, like a window, and paint a series of five ovals around the rest of the upper part of the chapel, showing the whole cycle of the martyrdom of the patron saint.
|
||||
|
||||
By sacrificing something where the fresco was originally intended, it actually sponsored the creation of a richer narrative cycle about the martyrdom of the patron saint. I didn't actually show the martyrdom itself; I used the crucifixion where the martyrdom would have happened in the cycle. On one side of the crucifixion is the moment when the saint and his companions are captured by Roman soldiers. The moment after is where his decapitated skull is set up as the site of an altar that then sponsors the church. We lost the actual martyrdom because I thought the crucifixion, the paradigmatic martyrdom, could take the place of that scene.
|
||||
|
||||
*What is the state of fresco painting today? Who still does it? Is it at risk of being a lost art?*
|
||||
|
||||
It was almost lost in the twentieth century. I got interested in it because of studying in Rome and wanting to paint and be an architect. I thought fresco was the perfect way to integrate the two. I knew someone who later became the Chairman at Notre Dame, an architect who dabbled in fresco; I asked him how he learned, and he said he read WPA manuals. During the 1930s, when they were trying to give work to artists and had artists painting murals in post offices and elsewhere, the fresco technique had sort of disappeared, so the WPA actually put out manuals on how to do fresco painting.
|
||||
|
||||
I found those manuals in the University of Pennsylvania Library, but I didn't really get it. Eventually I had the chance to study with a great restorer in Italy, Leonetto Tintori. He was one of the vehicles in Italy for continuing the fresco painting tradition. He was an artist who, during World War II, got involved with preservation of frescoes in Pisa and then made a career out of it.
|
||||
|
||||
The other conduit was an artist named Pietro Annigoni, who was a portrait painter from Florence. He got wealthy painting portraits, including the Queen of England, and then essentially dedicated the rest of his life to painting frescoes pro bono for churches. He trained a whole generation of people, and one of them is a guy named Ben Long, an American who went back to North Carolina, and has done a whole series of frescoes there. Ben Long is probably the most famous fresco painter in the United States.
|
||||
|
||||
There was a vogue for it in the 80s and 90s, I think because of postmodernism in architecture. I feel like it's fading away now—there aren't a lot of people that I'm aware of doing it. In Italy, there are some people painting frescoes, including some of the students of Annigoni's students.
|
||||
|
||||
There's a Russian artist who painted the dome of the cathedral in Noto, Sicily, which was damaged by an earthquake. When they restructured the dome, they hired him to paint frescoes of the apostles—over life-size, super realistic, very impressive frescoes.
|
||||
|
||||
Fresco was practiced all over Europe historically. Here in Italy people are very cautious about introducing new things into old contexts. It's one of those things that's just not thought of mostly unless you're recreating a historic fresco for some reason or you're allowed to reintroduce a fresco in a damaged historic context. Most people don't think about frescoes in new building projects.
|
||||
|
||||
The onus is on architects to bring it into the discussion, but most architects don't have training in that kind of thing. They're not figurative artists themselves—they don't think that way. I've hired myself to do them for the school in Switzerland. I bring them into my own projects, but a lot of architects aren't thinking that way. They're thinking about just getting the building built.
|
||||
|
||||
*How do you see the overlap between these traditions and practices and the institutional authorities that set rules for preservation? How do you relate to the rules they impose?*
|
||||
|
||||
It's a pretty intense discussion, and the fact that it's actually softened a little bit recently is interesting. Italy has a hang-up—it's not unique to Italy, but it's really strong in Italy: this fear of something they call *falso storico* or "fake history." Essentially, doing new things that look like old things and creating ambiguity about what really is old versus what is new. That is a modern art historical or preservation mentality.
|
||||
|
||||
We have it in the United States too. The Secretary of the Interior's guidelines for historic preservation also essentially mandate that additions to historic buildings have to be in a distinctly different style, which is a very modern thing. It's a kind of obsession with imposing the zeitgeist.
|
||||
|
||||
Williamsburg is an interesting case of rebuilding, but Williamsburg is essentially a fake—a recreation of a city that was virtually non-existent. But mostly there's an aversion to doing that. In Italy it has been very much frowned upon to work in a traditional mode.
|
||||
|
||||
Pietro Annigoni was called in to paint the frescoes when they rebuilt Monte Cassino, and they decided not to replicate the old paintings that were there but create new ones. Annigoni's style does not look old-fashioned. There's something very modern about his work. I think self-consciously he didn't want to look like he was painting neo-Renaissance paintings. They're figurative, but there's a dark, almost menacing quality to a lot of his paintings—like somebody who lived through World War II and seen the worst of humanity and just can't paint happiness. There's a dark underbelly to a lot of his work. I don't think there was ever fear that his stuff would be confused with historical paintings, so he was allowed to do that in the 1960s.
|
||||
|
||||
Otherwise, working in historical contexts and painting new frescoes—people would rather do nothing. I think that attitude is softening. I was recently asked to do a big fresco for a monastery in the Marche. We had to get approval from the local Belle Arti, and we did get approval because it wasn't in the church. It was in a space that was basically kind of neutral—a whitewashed, vaulted historical space that didn't have any old art that could be confused with it. It was a new thing.
|
||||
|
||||
I think anybody who does something traditional in art or architecture in Italy is often thought of as being a forger or a falsifier. Restoring instead really means that you have something existing to restore.
|
||||
|
||||
The guy I studied fresco with had a philosophy about restoration: if you have a fresco that's missing something, you do not fill it in—you plaster the wall and leave them unpainted. You do not fill in the gaps, even if it wouldn't take a lot of imagination to do so. He was rigorous about not replicating or filling in missing bits in frescoes. But I do not share that philosophy.
|
||||
|
||||
There is also a tradition in Italy that when you have a missing bit, you can fill it in if you're pretty sure about what was missing; but you're supposed to do it in a technique that's distinguishable—not in true fresco. Let's say you have a purple drapery. The Italian technique is what they call *tratteggio*—it's hatching with little fine brushstrokes. You paint red, blue, red, blue, red, blue, and your eye from a distance reads it as purple. But up close you can see it's a hatching technique, so that future restorers a hundred years from now can distinguish what was original from what wasn't.
|
||||
|
||||
*Why do you disagree with your teacher's philosophy about filling in gaps?*
|
||||
|
||||
Historically, no one had a problem painting what was missing, scraping off a damaged fresco and painting a new one. That's how we have the history of art we have today. Michelangelo's Sistine ceiling was painted over a decorative blue sky with stars on it. Raphael came into the Stanza della Segnatura, where the School of Athens is, and there were already frescoes that had been begun, but they got rid of them, and he was allowed to start from scratch and repaint everything.
|
||||
|
||||
That fear of the past being something we have to cherish to the point at which it becomes untouchable is a really modern idea. I think it's because we have ruined so much stuff. There's a fear now that all we can do is something bad—we're so afraid of our own interventions in the modern world that there's a deep cultural assumption that we're focused on preventing the worst. We're not really interested in encouraging or allowing for the best because we don't trust ourselves.
|
||||
|
||||
*We also assume there's a kind of discontinuity or break—that we can't understand what people were trying to do in the past because we are modern now, and therefore we have no ability to be in relationship to that tradition.*
|
||||
|
||||
L. P. Hartley said that "the past is a foreign country; they do things differently there." I think there's a problem with the idea of going back to the past. The Renaissance—even though it was a renaissance, which means a "rebirth"—was not a recreation of antiquity. They didn't do neo-antique buildings. They did new buildings using the knowledge of the ancient world as they understood it, but to make new things for new purposes. Neoclassicism is something different. Neoclassicism was really an attempt to recreate antique forms. Everything looked like a temple. The Renaissance didn't do that.
|
||||
|
||||
I think we have to have a richer conversation about how you can learn from the past without replicating it. To not learn from the past is to impose on yourself a kind of cultural amnesia that I think is quite destructive. We should be capable of continuity without being afraid of doing a bad version of the past.
|
||||
|
||||
I had a professor who was a famous architectural theorist, Colin Rowe—a major theorist about architectural form and urbanism. When I was at the American Academy in Rome, I did a project to fill in the street that leads to St. Peter's; historically, it had been two streets. I presented it, and Colin came to my presentation. He said, "Isn't the problem with doing this kind of architecture that all you'll ever be is a mediocre version of the past?" I said that no, the onus is on us. I don't think there's something in the water or the air that keeps us from doing things as well as they did. It's just that the onus is on us to be as good as we possibly can be—to learn as much as we can. I don't think it's impossible to equal the past.
|
||||
|
||||
A lot of modernists assume that the past is so great, they revere it so much that they won't even try because they're afraid of failing. There's a cultural assumption in our world that if you really value the past, it's so great you can't ever achieve what it did, so you should just let it be its own thing and we do our own thing. That's deep in our culture.
|
||||
|
||||
*With that in mind, how do you teach your students to develop an architectural sense in cities with many layers? How do you teach them to see a historic city and understand their relationship to it?*
|
||||
|
||||
You have to teach principles. You shouldn't teach students to be mimics. You want them to be analytical and try to understand how the thing that they're looking at got to be the way it is. From that, you can induce principles—you can look at a series of particular cases and try to discern what was operating behind them. Those are the things that you can then apprehend and take with you and apply elsewhere, as opposed to mimicking a thing and replicating it.
|
||||
|
||||
You have to be able to peel away all the stuff that you see on the surface and try to figure out what the architect was thinking when they first started sketching. Design analysis is design in reverse—you're trying to unwind the process and get back to what was informing it. If you can do that, then that's where you can take the process with you, not the product. That's a big distinction. It's easier to copy—copying is pretty easy, actually. Analytical work, and apprehending a process, is a lot harder.
|
||||
|
||||
*How much do students have to know about history in order to understand historical work?*
|
||||
|
||||
It's definitely true that you get better at it the more you know. At some level, when you're a raw student and don't know much history, all you're doing is a kind of reacting to what they see. It's my job to give them a little bit of a backstory.
|
||||
|
||||
My sense of what schools should teach you is how to continue to learn after you get out of school. Not a repertoire, not a kit of parts or some tricks, but how to learn. That's a lifelong process, and you get better at it the longer you do it.
|
||||
|
||||
The more you do things of your own, the better you're able to understand what other people have done, and so that kind of iterative back-and-forth between practicing and studying and practicing and studying makes both of those exercises richer and better over time. I'm still a student—I'm still learning stuff—and I'm better at learning because I've done more things myself.
|
||||
|
||||
*Is there a particular building or place you keep coming back to that exemplifies the traditions and creative practice you've been trying to develop?*
|
||||
|
||||
In Rome, I think the most sophisticated piazza is Santa Maria della Pace, which was all designed by one architect, Pietro da Cortona, but dealing with existing urban conditions that were imperfect. He tried to mask or transform them into something that is more whole and perfect and woven together. It's almost symphonic. It's this unbelievably rich dialogue between the church and the fabric of buildings around it. You can't extrapolate that or take that and transplant it elsewhere, but you can definitely try to do that kind of weaving and stitching of things together.
|
||||
|
||||
At the Swiss campus, it's a little more call and response. There are ways in which certain things in certain buildings talk to or say things to other buildings. In the gym I painted a fresco at the top of a flight of stairs that climbs about twenty-three feet; when you get to the back there is a loggia. The fresco I painted in the loggia is the Choice of Hercules, which is supposed to be this idea that he's visited by two female figures that represent virtue and vice. Vice isn't a dissolute life. She offers him a life of ease in the shady grove, but Virtue shows him the hard, rocky, uphill path to fame.
|
||||
|
||||
The rest of the hillside was the harder part of the campus to be built, and I didn't know if they were ever going to build it because it was challenging. So I have Virtue pointing uphill with a trowel, basically an admonition to the school to build the rest of the campus, the hard part. And eventually they did, within about ten years.
|
||||
|
||||
On the facade of the building at the top of the hill—I designed it and had somebody else paint it—there are two big cornucopias with this great bounty flowing down. The reward for the hard path of climbing the hill is all this good stuff that cascades down on you. When you get up to that building, there's a big arched passage in the stairway, and from there you look out over the Alps and Lake Lugano. It's definitely a reward for having climbed the hill.
|
||||
|
||||
I set up a dynamic and told the end of the story when I had the opportunity to do that. But mostly people don't know those stories are there. The students don't know it unless somebody reinforces it or tells them that it's there, as the current headmaster has done. It can be read like a text, even if not everybody has the tools to read it.
|
||||
|
||||
*What kinds of responses have you experienced to what you're trying to communicate in architecture? How do people respond to your work? How does it surprise you?*
|
||||
|
||||
I think people respond to stories. I had a great professor who taught me a design process but was also really big on the idea that architecture could be narrative—that it can unfold or tell stories—and I think people are really captivated by that. I think the extent to which you can treat your environment as a place that you can read, like it actually has messages—not every environment has it, somebody has to put them there. Most places have a history, and so there's a kind of unspoken story that's often the history of a place.
|
||||
|
||||
I do think it's one of our jobs, apart from making buildings behave well together, to tell stories in some way or to contribute to some larger story that our society wants to tell about itself. I think we're desperate for it, actually. We want to believe our world makes sense somehow, and I think we need that. Sometimes people have said you could read our Constitution in the layout of the National Mall and the disposition of buildings in the center of Washington, DC. I think the extent to which our environment, especially in the United States, could do more of that—it could be one of the things that gives us a sense of shared purpose and a sense of what we have in common.
|
||||
|
||||
We have enough in common that we can tell some stories. One of the things I get when I present the idea that architecture can be narrative is a lot of people say, "Well, we don't have enough shared stories that everybody could agree on." I don't think that's actually true. I think we have more in common than we think. Often it's the interpretation of our stories that we argue about. If we didn't have some shared principles that allow us to deal with each other every day—those are maybe the protocols, the things underneath who we are—instead of using them as partisan divides, we could be using them as ways of unifying us.
|
||||
|
||||
*You can imagine the stories in a village where everybody's going to the same places all the time and everything is marked with meaning—this happened there, this happened there. On the opposite end is this kind of fascist propaganda, which is like the looming building that's telling you exactly one story and you know what's wrong in some way. There has to be something in between.*
|
||||
|
||||
There's a difference between iconography and propaganda. I think, historically, most societies talked about who they wanted to be, not who they were. I don't know if you know the _Allegory of Good and Bad Government_ in Siena in the Palazzo Pubblico. It's amazing. It's sometimes called "The Allegory of the Effects of Good and Bad Government in the City." It doesn't really talk about how the government worked. It talked about the ideals that allowed the government to function.
|
||||
|
||||
In the allegory of good government, what seems to be a ruler—it's a guy who looks like a king with a sword—is actually *bene comune*, the common good. The ruler of the city is the common good. Through a whole series of connections, he holds a sword that is ultimately tethered to a rope that's being carried by citizens from the figure of Concordia, who's taking two ropes that pass down from the scales of justice. Concordia weaves the rope together and passes it on to the citizens, and the citizens hand it on to the Common Good.
|
||||
|
||||
Nobody's going to argue with that. Basically, social concord comes from justice, and it's conveyed to the authorities—who really are themselves just representatives of the common good—by the civic body, by the people of the city. We all want that. That's fourteenth-century Siena, but at some level that's how good, healthy societies operate today, I think.
|
||||
|
||||
So I think allegorical messages used to be more based on principles and values, rather than mandating particular kinds of behavior. They were basically shared senses of purpose, and they were aspirational. They tell you, "Here are the virtues, here are the things we need in order to be able to do this," but then the actual mechanics of governance—who knows if Siena ever was like that? They were obviously saying, "We believe this is who we are," but it was probably better than who they were, and it didn't impose anything on anybody other than a shared sense of responsibility.
|
||||
|
||||
We shouldn't have a hard time doing that today. I think everybody's too vested in the idea that we're slugging it, out instead of trying to figure out what we could actually share. Ultimately, iconography shouldn't be that mechanistic and specific—it should be more broad and general. You shouldn't be able to argue with the principles; if there's major dissent about the principles, something's wrong.
|
||||
|
||||
The statues of Civil War leaders—that's problematic because there is all kinds of stuff behind that was wrong. Whereas celebrating justice—who doesn't want justice? A statue of truth—we should all want that. If we didn't want a statue of truth, that would be a problem.
|
216
content/interviews/mwaselela-saving_circles.md
Normal file
@ -0,0 +1,216 @@
|
||||
---
|
||||
narrator: "Alinagwe Mwaselela"
|
||||
subject: "Saving circles"
|
||||
facilitator: "Nathan Schneider"
|
||||
date: 2025-05-02
|
||||
approved: 2025-05-04
|
||||
summary: "The practice of collective savings and lending takes many forms, from women-led community finance to mobile-money software."
|
||||
location: "Dar es Salaam, Tanzania"
|
||||
headshot: "alinagwe_mwaselela.png"
|
||||
topics: ["family", "finance", " gender", "software"]
|
||||
links:
|
||||
- text: "Jukumu Tanzania (X)"
|
||||
url: "https://x.com/JukumuLETU24?t=A7YYfGJUZ3QVJfeh2dVgTA"
|
||||
---
|
||||
|
||||
*How do you like to introduce yourself?*
|
||||
|
||||
My name is Alinagwe Mwaselela. I'm not from Dar es Salaam, but I live in Dar es Salaam. Tanzania is very big. It has over 25 regions, and I come from the one called Mbeya. Our tribe, we call ourselves Nyakyusa. I don't know if you ever heard of it. But it's a beautiful place. It's among the places where a lot of food comes from.
|
||||
|
||||
I'm in Dar es Salaam now. I did my primary school in Dar es Salaam, then I did my secondary school back home, then I came back again to Dar es Salaam for high school. For college, I went to a different region called Singida. So I did a lot of moving around. But it was quite a good experience.
|
||||
|
||||
For a while now I've been working with NGOs—civil society makes up about 80 percent of my life right now. I'm a community guy, always moving from one group to another group, from one place to another. I got this experience from working with different companies. I was employed back then in a marketing department.
|
||||
|
||||
I gained my whole experience and methodology of working with these saving circles when I was on a marketing team, because for me it was the easiest way to engage customers and to find an easy way to sell. You can come up with different ideas of how to engage them.
|
||||
|
||||
And now it's been about 6 years working with Jukumu—that's the name of the NGO. We've been doing so much in Dar es Salaam and around Tanzania in general. In Dar es Salaam, we work with different people in different districts and streets to get the best information we can from these people that we're trying to help or bring solutions to for the challenges they deal with in their daily lives.
|
||||
|
||||
Jukumu generally tries to build relationships between different communities to find solutions. We believe these communities face challenges because they don't know who to connect with, who's the best advisor, or who's the best teacher for what they need. So we create connections from one group to another to find solutions and engage groups with each other. These could be financial relationships or technical relationships.
|
||||
|
||||
*So you first encountered the savings groups as clients when you were marketing products, and you thought, "This is an easy way to access a group of potential buyers."*
|
||||
|
||||
Yes, exactly. This happens in a lot of developing countries, I would say, especially in Africa.
|
||||
|
||||
For example, back then I used to work with a company that had digital solutions. I was the marketing guy, the one meeting with these people every day, engaging them, explaining what the solution was and how they could use it. People would get excited when they received the solution, but it was too hard for me to ensure that solution would last to the point where these people were satisfied.
|
||||
|
||||
Sometimes, if I represent a company in a market or community, I don't know when a CEO or founder might come up with changes to the product the next day. That affects the community, but it affects me more because everybody knows my face in the market, not my boss or anyone else.
|
||||
|
||||
So I realized it would be easier for me to engage people by having them under one umbrella to make sure they receive the best products they're supposed to get. I wanted to ensure that if a product comes to the community, whatever was brought in was needed, and the community was actually satisfied with what we were trying to provide.
|
||||
|
||||
I got the idea from to create a network of groups. At first, it was just a marketing network—I would find different products that I knew these people liked, and I'd distribute the products and give them payment terms. They could pay by installment rather than cash, because I knew I'd find them in their group. The group would be the guarantor for anyone who wanted the service.
|
||||
|
||||
Then the NGO concept came to mind: we could have this umbrella that would protect the groups and make sure they get the best education and the best providers. We connect them with other groups, because they produce different things. We have groups of farmers, livestock keepers, and small business entrepreneurs.
|
||||
|
||||
So you can imagine, if we have farmers groups, we can get tomatoes from them and connect them with small business groups who can get the tomatoes under the supervision of the NGO. This ensures that nobody loses out and everybody gets what they're supposed to get. It's the easiest way for them to connect and be in a safe zone. They can produce, and they themselves can be a market too, apart from anybody else outside the community.
|
||||
|
||||
*And so these groups were already formed? Or were you helping form them as well?*
|
||||
|
||||
As you start working, you find groups that are already formed. Then you see their weaknesses, learn, and start to reform them and create other groups as you go on. I found some groups that were already formed, and then we started creating other groups depending on what people were doing.
|
||||
|
||||
We went to farmers and formed groups specifically for them. Before, we didn't have specialized groups of farmers—we would find farmers in various groups that were dealing with different activities. Then we started creating farmer-specific groups so they could benefit from working together—people growing cucumbers, tomatoes, fruits, and other vegetables. If they're all in one group as farmers, we can see what each person produces and then, as an NGO, we can ensure that at least 40% of what they produce reaches the market, as part of our effort to help them reach their targets.
|
||||
|
||||
*Did you grow up in any of these groups? Were savings groups like this part of your upbringing or family life?*
|
||||
|
||||
Yes, my mother used to save in one of the *chamas* she belonged to. I would see her struggling, and after every certain number of days she would save a certain amount in the group as a form of security or insurance for anything that might happen. So I've seen that lifestyle in the neighborhood where we were living, and I've been in some of these groups myself. They are all over Africa. I've been to Uganda and Kenya and seen they have *chamas* too.
|
||||
|
||||
*Tell me more about how these work—how the one your mother was part of worked, and how the ones you've been involved in work. What does it feel like to be part of these groups?*
|
||||
|
||||
Generally, in Tanzania, I believe about 80% of women are in groups. This includes rich women, middle class, or poor women—they're all in groups, though what they do varies. The experience has changed with time and technology.
|
||||
|
||||
Back then it was different. I remember seeing some of my sisters in chamas. These chamas differ in how they set their targets. For example, my sister used to be in a chama where the target was saving for just one year. At the end of the year, they would distribute all they had saved. While they were saving, they would give members opportunities to get loans from the savings. That could be the first business of the group—the interest paid on top of the loan benefited the group. At the end of the year, they would share that profit with all who had been saving.
|
||||
|
||||
The profit at the end of the year would depend on how much you had been saving. The more you invested, the more profit you'd get because your money had been rotating through many hands, as people asked for loans from January until December.
|
||||
|
||||
They used to have these small books—I remember these books were full of marks. Not everybody in these groups knew how to write back then. So they had these books where they would just put a mark to show "I've paid today." It was like a counting book that showed how much you had invested and how much you could expect by the end of the year.
|
||||
|
||||
Every time someone would go to save money or receive money, they'd have to go with the book to mark that they had paid or hadn't paid. They used to have this big iron trunk, and that trunk kept the books and the money. That was the bank. After marking, all the books stayed there to make sure nobody could mark anything until the next meeting.
|
||||
|
||||
Sometimes it happened that someone stole the books, or on the day they were supposed to get their money, they found there was no money in the box. They trusted the chairperson and the secretary of the group, and they normally even had an accountant. But none of it was as transparent as they are today.
|
||||
|
||||
Some groups work smoothly, some have faced challenges. But that was the experience back then. Now things are changing. Now we have different practices in these saving circles.
|
||||
|
||||
For example, in Tanzania we have a concept called *mchezo*, which means "game" in Swahili—so we call it "money game." What they do with the money game—now that people are afraid to have a box that somebody might steal or misuse—is that every day, let's say in a group of 20 people, each person saves 1,000 shillings. That means 20,000 shillings total, which they don't keep in a box—they give it to one member of the group. So every day, someone is getting money from all the others. It's a rotation of money.
|
||||
|
||||
This depends on the priorities within the group. They know what's happening with everybody—who needs to pay rent in two months, who needs to pay school fees, who needs to buy certain things. So you put your name on the game list for the dates when you're sure you'll need the money. With 20 people, it will be a 20-day game. After 20 days, it rotates back to the first person. It continues like that from January to December.
|
||||
|
||||
That's the solution these people have developed to address the challenges they faced with using the box. They're trying to reduce the work they were doing before. Who do you trust to keep all the money? The box stays in somebody's home, not in a bank. Something might happen—somebody might have a child who runs away with the books. So these people are trying to create solutions.
|
||||
|
||||
Now, beyond just the box and the game in this saving circle, we have groups who invest money for bigger investments. For example, at Jukumu we have communities with 30 to 70 people. With technology, they don't use books anymore—they might use a bank, mobile wallets, and different digital solutions to accumulate money.
|
||||
|
||||
The money they accumulate is for investments they want to make. Let's say a group wants to buy materials for catering, or they want to do different activities requiring capital investment. They might accumulate money for two years, and then open a small business. They could be tailors or anything else, and then they create a way to share profits monthly from what they earn in that investment. So it could last for a long time while continuing to produce income, rather than just distributing everything at the end of the year.
|
||||
|
||||
*Are these contexts where people don't have access to banks? Or is do people find there's something better about saving this way? It sounds like a lot of work and management. Why not use banks?*
|
||||
|
||||
One thing I've found in these saving circles is that many people don't have knowledge about banks, even though they see them. They don't have financial education. They don't know the value of money or have any education about loans. For them, a bank is a scary place.
|
||||
|
||||
The *chamas* are how they've become accustomed to doing what they need to do. We do have groups that use banks and find it fine, but not many groups use banks. We're encouraging our group members to use banks for convenience. We have a monthly fee that these groups pay to the NGO as a membership fee because we provide them with knowledge, seminars, and different products. What we've come to understand is that it's mostly a lack of knowledge and education. They don't know about banks or many of the financial services they could access for savings and money management.
|
||||
|
||||
*How do the groups compare between, say, the groups your mother was part of when you were growing up as opposed to the groups of farmers you mentioned who are running businesses? Are they very different, or are they basically the same kind of structure?*
|
||||
|
||||
I don't think they differ a lot. The main difference is the technology they have now, and probably they have more knowledge. Back then, my mother and others didn't have smartphones—they didn't even have phones. So things were quite different, but in terms of how they engage and how they operate, it's almost the same. They're still Tanzanian, so they still have that kind of formula—there's a formula that doesn't change. You can tell this is Tanzanian.
|
||||
|
||||
*Let's talk about that formula a bit more. What kinds of skills and knowledge go into that? Because in my part of the world, people do not know how to do saving circles—that's not something people do around here. If people started, they wouldn't know where to begin. What are the skills that people have in these communities, that your mother had, that makes them feel like they know how to get these things going? What specifically are the everyday life skills that enable people to run these groups?*
|
||||
|
||||
I was surprised when I started working with groups in Tanzania. One of the biggest challenges is that people are very far from technology. I don't think they're afraid, but the education level and awareness are quite different. Tanzania is quite different from Kenya when it comes to how people engage with technology and change.
|
||||
|
||||
These groups, from my experience, mostly started with women. Women were the special group that initiated this, especially because in the community, people didn't have time for women. It's like people didn't try to engage women in direct control of financial issues, as they used to engage men. You can see even in education levels back then—most young boys went to school, not girls. Girls didn't go to school. So we had a lot of sisters and mothers who were just farmers, far from all kinds of access, far from bank awareness, far from technology.
|
||||
|
||||
What happened is that these women started to form their own groups to save what they got from their men. If a man left 10,000 shillings for household expenses, a woman might take 2,000 out of that 10,000 and save it in her group without her husband knowing. It was confidential—men didn't know their wives had groups where they saved money, because many men didn't want their women engaged in any financial issues. So many of these groups were due to women's efforts, especially in Tanzania.
|
||||
|
||||
Communities in our society that are very far from services like banking had to find ways to save and have some insurance for what might happen. They formed their groups. It's like the point where all these people who are missing everything they're supposed to get found a solution. It's like they're small banks. We call them VICOBAs—Village Community Banks.
|
||||
|
||||
People started these because they found themselves very far from all aspects of technology they were expected to access. And I don't know why, but even today, technology doesn't flow as it's supposed to flow to reach the people who need to understand it. It ends at a certain level and doesn't go down further. So certain groups of people enjoy the benefits, but not everybody.
|
||||
|
||||
It's still hard to engage with digital issues in Tanzania directly. You need to put in a lot of work, go to many places, train people extensively because many don't know how to use basic digital tools. Someone with a smartphone might not know how to create their own email address. These are things that should be easy to understand, but they're not.
|
||||
|
||||
The level of education of these people is not that high, and their engagement with digital aspects is not that strong. So they've created their own way to save, their own banks that they can turn to when they're in trouble or when they want to do anything.
|
||||
|
||||
They've seen this from government employees. In Tanzania, we have many government employees—about 70% of working people are employed by the government. These government employees get health insurance, some get property insurance, they get social security funds from the government. So people have learned the concepts from these employed people—they can get insurance too. But for those who aren't employed, who have small capital, who sell vegetables by the roadside, how do they create their own insurance? How do they save for unforeseen issues? How do they save to pay school fees next year or to pay rent?
|
||||
|
||||
They don't use banks. The first people to use banks in Tanzania are those employed by the government. So the first experience any Tanzanian has with using a bank is either when they're in government office, employed somewhere, or in university getting a government loan. Most Tanzanians only open a bank account when they're employed. Before that, nobody uses a bank.
|
||||
|
||||
People now use mobile wallets because everybody has a phone, so it's easy to use mobile wallets. But if you count people living in the streets who aren't employed, 80% will say they don't have a bank account. And if they do, they don't know how to use it—they might just have a bank account because a certain bank came around and made them open a free account. So they got a bank account but never used it because they don't know how to use it or the advantages of using it. The only group that knows about bank accounts are the employed, university students, or those doing very big business who need a bank to get loans. Apart from that, the rest of these people use mobile wallets, and some still save in their groups.
|
||||
|
||||
The best ideas these people came up with were while trying to ease their lives in light of what they saw employed people doing. It's like they're trying to establish their own lives compared to employed people—to reach the same standard of life. "I can have insurance too with my group. I'm very sure that in case I need anything, I can just go there and ask for a loan, and nobody will say no because that's my group and I'm a member who normally saves there." It's the same thing as a government employee being sure to get a loan from a bank because the bank sees the salary and can easily deduct payments. For others, their saving groups provide all of what they're supposed to have.
|
||||
|
||||
*Do you think of these groups as being very old, going back many generations? Is this something that people have done in these communities for a very long time?*
|
||||
|
||||
I've seen groups that have existed for 20 years, 15 years.
|
||||
|
||||
*I mean many generations—is this something your great-great-grandmother was doing?*
|
||||
|
||||
It could be, but I'm not sure. If I go back to when Tanzania gained its freedom, the first thing our late president introduced was similar to what China and Russia tried to apply—a communal system where everything was owned by the community. Everyone had to work, and everyone ate what they collectively produced.
|
||||
|
||||
I think that was the method the government used for government farms and industries. They created communities where everyone earned the same amount—nobody earned more than anyone else. It was a style introduced by the government back then to organize people to work and trust each other. Nobody was above anybody else, only the government.
|
||||
|
||||
The rest of the people working there shared what they got out of what they produced. You could easily get help within your community if your child had an issue—anyone in the community could help because everyone was on the same level. So maybe this comes from back then, from how people would work in groups—as farmers or whatever, but working in groups rather than individually.
|
||||
|
||||
This has evolved with the changes in technology. And now, with capitalism, it has created boundaries between those who know and those who don't. The people who don't know, in order to achieve what they need, have started to use the same formula—using the energy of their own community to create wealth, safety, and insurance for everything they need.
|
||||
|
||||
*Does technology make anything harder? For instance, if you have the money in a box in somebody's house, you have to trust that person. You know who's keeping the money, and that trust maybe helps strengthen the group. Is something lost when you can just rely on a mobile wallet? Do you lose some of the trust that might be important to these groups?*
|
||||
|
||||
From my experience engaging groups with Jukumu, I don't think technology makes things harder, except that people don't know the technology. They don't have the knowledge, so they just operate based on what they believe in, what they know, what they trust. It's not that they don't believe in technology, but they don't know how far technology can assist or support or benefit them.
|
||||
|
||||
If they get to know, they'll move to technology. We had groups that didn't use technology for financial issues, and we went through many challenges because we'd find the chairperson and secretary conspiring to take the balance, and no member would know exactly what they had—they only had trust. We might all know where the secretary lives and meet at the secretary's house every 10 days, but we just trust that the secretary will keep the money. We're not sure, but we trust.
|
||||
|
||||
If something happens, it brings them to a different challenge, and they start looking for a solution—which could be a digital solution. We speak with them and try to introduce different solutions. The good thing is that now many of the mobile wallets in Tanzania have features that can help saving circles save using the wallet. We have different solutions that groups or families can use to save, and everybody will know what's happening—if anyone deposits or withdraws, every member gets a message.
|
||||
|
||||
We have these kinds of solutions now, and many groups are turning to technology. I don't think it was that they rejected technology—they just didn't have a chance to experience and understand how far technology could take them. This has become very beneficial for the NGO, because we were lucky to partner with an organization that works in digital solutions. We can easily do pilots in our community, see how they work, and then develop solutions. We're trying many pilots to make sure people understand that with technology, we're saving time and reducing risks they've been struggling with. Now we have groups that have saved a lot of money in their wallets, and things are going smoothly. They're coming to understand.
|
||||
|
||||
*So the mobile wallets that most people use now have features for saving circles built into them?*
|
||||
|
||||
Yes. For example, two days ago I had a meeting with CRDB Bank, one of the very big banks in Tanzania. They now have the CRDB Foundation, and what this foundation is trying to do is bring in the saving circles. They have a project called Mbegu, which is a Bantu word meaning "seed." They're trying to help saving circles start and learn how to use a bank—what money is, what loans are. They give them this knowledge, and after they understand, they give them a chance to get what they call *mbegu*. It's not really a loan because you don't pay interest—you pay operational fees and such.
|
||||
|
||||
What I found is that banks in Tanzania know there are many saving circles, and they're missing a lot of customers because they're just dealing with employed people. They know these motorcycle taxi drivers, these small food vendors selling in the streets—none of them use banks. They all work in their saving circles. So now CRDB is trying to find these saving circles and bring them into the banking system. They don't even care if these groups are registered or not, as long as it's a group. They find ways to train them, encourage them to register, and work with them.
|
||||
|
||||
That's why we had a meeting with CRDB—they want us to connect them with groups. They know there's a lot of money they're missing from the community. Almost every digital solution now has features that these saving circles need. It's like a wake-up call—saving circles are a very big thing in Tanzania, and banks and mobile networks are rushing to invest in them.
|
||||
|
||||
*Have you seen these groups be taken advantage of? What are some things that can go wrong?*
|
||||
|
||||
A lot can go wrong in these groups. First, you should understand that the people in these groups often don't know the risks of many things. They might not even know the risk of using a different Gmail account on their smartphone. You need to have accurate information from these groups to be sure that if they want to invest in anything, it doesn't go wrong. You need to be sure because many of these groups have people who didn't go to school, who don't understand the risks—like, if I lend you money and don't know you, you could just run away with it. These are people going through hard times every day, so they have many challenges. So the first thing we do is educate and find the best approach for the community.
|
||||
|
||||
We had a digital project that's still ongoing in one of our communities, which has almost 120 members all living in one district. We've created our own community currency called Nyota, which means "star" in Swahili. They're using it for payments within the community—it only applies in their community.
|
||||
|
||||
Before, they didn't know how to download or install applications. They didn't know the risks of having different Gmail accounts or someone knowing their Gmail password. Now we're trying to change that, and after two years, we're seeing it's working out. But it has taken effort for two years to get these people to understand how to use a smartphone—not just applications. The most they could do before was WhatsApp and social media. Everyone can use social media, but they didn't know how to benefit from technology in other ways.
|
||||
|
||||
Now they see the difference. With just their smartphone, they can have a digital token, they can convert it, they can get normal currency. This is new for them, and these people didn't go to school to understand what a digital token is—it's just a lifestyle and experience they've gone through every day. Now they have shops in the community where they can buy things using their community currency.
|
||||
|
||||
With these saving circles changing from traditional methods to moderm technology, it has brought something different. Now we know at Jukumu that if all of them understand how technology can change or increase their production level, nobody will go back to the lifestyle they had before.
|
||||
|
||||
*What does creating a community token enable them to do that they couldn't do otherwise? Why is that technology useful in these communities?*
|
||||
|
||||
We've tried this in just one district out of all Tanzania because it's too hard to engage widely. We started this as a pilot, but now it's working and has become a lifestyle.
|
||||
|
||||
First of all, it gives them an easy way to purchase things at a lower price compared to what they would pay using the local currency. With regulations, we're not allowed to use tokens directly for payment freely—Tanzania doesn't have regulations allowing that. But what we're trying to do is use the digital community currency as part of payment as a price reduction.
|
||||
|
||||
We've given a value where one Nyota equals 1,000 Tanzanian shillings. In the community, we have people selling different things. We've connected community businesses with every community member so that if you're a community member buying rice every day and you decide to buy from another community member, you'll save 2,000 shillings on each kilogram. So if one kilogram is 4,000 shillings, when you're buying in the community, it will be 2,000 shillings plus 2 Nyota.
|
||||
|
||||
So 2,000 shillings plus 2 Nyota equals 4,000 shillings, but they find it easier to pay 2,000 shillings. I don't have to pay 4,000 if I can pay 2,000—I can save 2,000 and use the Nyota to cover the other 2,000 that I have in my pocket. For the person receiving the 2 Nyota, it counts as 2,000 shillings. They will use those same 2 Nyota to buy something from a different community member or from the same person who gave them the Nyota.
|
||||
|
||||
It engages them all in one community—it gives them an incentive to receive regular customers because now a community has 100 members, and everybody wants a discounted price. Everybody wants something that will be easy to afford.
|
||||
|
||||
It has increased relationships in the community—everybody knows everybody, everybody knows where to get cooking oil. If I go to a normal shop to buy cooking oil, I'll spend 5,000 shillings. But if I buy from a community member, I'll spend 2,000 shillings plus 2 Nyota. It creates the understanding that if I am your neighbor, there's a way I can help you, and there's a way you can help me if we are in one community. You might have rice, I might have corn flour—we use corn flour for making *ugali*. If you have rice and need to buy corn flour, you come to me and pay 2,000 shillings plus 2 Nyota.
|
||||
|
||||
The 2 Nyota you pay is the key to our business, to our cooperation, to our engagement. This tells me that I have to come back to you again to buy, because I have nowhere else to spend this Nyota except with you. And if I spend with you, that means I'm giving you the same Nyota, plus whatever other amount I'm supposed to pay. The good thing is, it will be less compared to what I would normally spend. But it doesn't affect anybody's balance, because I'll still have some change. You'll have the Nyota, but when you need to buy something, you come with the Nyota to spend, so you save your money as you spend on me, and I save mine as I spend on you.
|
||||
|
||||
It increases the value of the Nyota because now everybody needs to get Nyota. And how do you get Nyota? Either you do business, or you attend the community meetings, because that's when we scan and create our own tokens.
|
||||
|
||||
*So participation in the community is how issuance happens?*
|
||||
|
||||
Yes. I don't know if you've heard of the Encointer Association from Switzerland. It's a blockchain platform that mostly tries to enable a community token or community economy by creating business circulation and cooperation. People learn the value of money through that—they learn through the value of doing business with each other, so nobody misses out on business every day. If I'm selling anything, I might get 2,000 or 3,000 shillings a day. It will never happen that I end the day without doing business because there are 100 members in the community, and everybody needs to eat. If they don't eat, they might use a bike to go somewhere. They might go to the salon—we have members who run salons. They might need to buy charcoal or cooking gas. These transactions are always happening because that's daily life.
|
||||
|
||||
We believe if we find solutions for these daily needs and daily spending, we're giving people a chance to save more and be more active in their groups. That's why this is famous where it's happening—it's a very popular project.
|
||||
|
||||
*How much do you think people's willingness to participate in this new technology is because of their experience with the saving circles?*
|
||||
|
||||
I think that was number one, but number two is it wasn't easy to engage these people in this kind of technology, for them to see the value of cooperation or the value of working together. We did research before in the location where this project is happening, and many people in that community didn't know how to bring money into the community. If we want our community to be safe, we need to be sure that we'll eat comfortably in our community. Everyone should be able to help others in the community. People need to be sure they can afford to buy food, go to the salon, and do whatever they need to do daily. This gives them an opportunity to save more.
|
||||
|
||||
Before, nobody understood how this would benefit their community. I remember we started with only six people in the whole community, and then from six, only two remained. It was a journey. But people came to find out that the people in this community—the few we had, six to ten people for almost four or five months—had created businesses covering everything they needed every day. So others became curious: These people in this specific community have a very easy life—they have everything in the community, they can easily buy and sell to each other because they are both buyers and sellers. What I'm selling, you don't have, but what you're selling, I don't have, so I can sell to you, but tomorrow I'll have to buy from you.
|
||||
|
||||
So we created a situation where people could understand that if you're in a community, you can have everything you all need. You don't need to struggle—you can just tell somebody what you need, and then you can get it the next day. With that particular knowledge, people started to understand.
|
||||
|
||||
After every meeting, they would see people leaving with packages. "How much did you spend?"
|
||||
|
||||
"I spent this amount and this many Nyota."
|
||||
|
||||
"But you know I spent 15,000 shillings to buy that sack, and you spent 10,000 shillings plus 5 Nyota. So you saved 5,000 shillings."
|
||||
|
||||
That kind of pattern motivated the community. You can easily do business if you're working together. So we had different events, marches—marathons to educate people and bring knowledge. Luckily, now we have about 120 members, 70 active members, and they meet every 10 days.
|
||||
|
||||
Now it has become established. With this, we've introduced a digital currency that's very famous in the community called Kusama, which is on the Polkadot blockchain. It has become another big thing in the community. Now people know how to send Kusama. People are paying with it. Someone will Google how much one Kusama is worth today compared to TZS or USD, get the amount, and use Kusama to pay for anything they want in the community because they know Kusama is real money.
|
||||
|
||||
Now they have wallets on their phones. They can download wallets and easily connect them. None of this existed two years ago—people didn't know what a private key or mnemonic password was. People didn't know what a public key was. But now everybody is saying, "Send me your public key," and someone just sends you a public key.
|
||||
|
||||
These people enjoy technology when they decide it's the best thing to use. Now everybody wants to be involved because they like the experience. They see how it helps their lifestyle. It gives them something new they didn't have before, and they didn't pay school fees to get it—they just had to be in a community and work together.
|
||||
|
||||
*What lessons have you learned building these different kinds of groups—the savings groups as well as the currency communities? If somebody else came to you and said, "I want to do the same thing you're doing," what lessons would you share?*
|
||||
|
||||
You need to have a very contemplative mind. You don't have to rush anything. It's too hard to change people's perceptions—to make them understand this could be a solution to what they've been struggling with for the rest of their lives. One of the very big challenges is that you're dealing with different people who don't know what exactly they're looking for. These people believe they have everything they need—they have their lifestyle, they still eat, they still do what they're doing.
|
||||
|
||||
So if you go to this kind of community and you're trying to do this, the first thing you should understand is that these are different from you. What you're thinking might be a solution at the time will not work unless they come to find that it is a solution for them.
|
||||
|
||||
The rest is easy to catch up on. These are human beings too. There's the part of being a friend—you need to have a friendly heart. You need to be like family because they're dealing with family issues. They're dealing with so many things that you need to understand. So you need to have a mind for connecting with everything a human being deals with.
|
||||
|
||||
At Jukumu, the NGO, we know this is hard, but we believe in humanity. We think everybody can have a better life, wherever they live. A better life doesn't need to involve a lot of money. You just have to know the solutions to your challenges and how you can live with them.
|
||||
|
||||
I was just talking with my friend about this: *chamas* are the first Web3. Whatever the technology is, the skills are the same.
|
148
content/interviews/osorio_ayurvedic-medicine.md
Normal file
@ -0,0 +1,148 @@
|
||||
---
|
||||
narrator: "Edson Osorio"
|
||||
subject: "Ayurvedic medicine"
|
||||
facilitator: "Júlia Martins Rodrigues"
|
||||
date: 2025-03-11
|
||||
approved: 2025-03-26
|
||||
summary: "Educating thousands of Brazilians online on Ayurvedic teachings through social media, Edson Osorio has embraced the mission of emancipating people's healing journeys through accessible information."
|
||||
location: "São Paulo, Brazil"
|
||||
topics: [health, food, social media]
|
||||
headshot: "edson_osorio.png"
|
||||
links:
|
||||
- text: "Instagram"
|
||||
url: "https://www.instagram.com/edson_ayurveda/"
|
||||
- text: "YouTube"
|
||||
url: "https://www.youtube.com/@portalayurveda"
|
||||
---
|
||||
|
||||
*Thank you, Edson, for participating in our project about protocols. First, I'd like you to tell us about your life story and career, how you like to present yourself, and how you would describe your life and career trajectory. Where did you start, and where are you now?*
|
||||
|
||||
I believe there's a norm in society where you need to earn money, be in a relationship, and have a job. I was on that path. I was a stock market operator, but I had other professions before. I was young, around twenty-two, twenty-three years old, and I was irritated with the fact that I had to undergo a treatment for attention deficit disorder that would last my entire life.
|
||||
|
||||
The search for health was something natural to me. My psychiatrist told me I would have to treat my disorder for my entire life. In my irritation, believing I wasn't a sick individual, that I must just have some imbalance, I found Ayurvedic Medicine.
|
||||
|
||||
I think all people have a norm to follow, and encountering yourself is the challenge to that norm. I'm just a person who challenged it and was lucky enough to find something very good. I believe Ayurveda is an excellent structure for physiological life, mental life, for understanding emotional life, and for those who aspire to understand spiritual life.
|
||||
|
||||
When I was young, I had a certain desire to know about the mysteries of the world. I thought about studying physics, history, astronomy. I think I found myself and all the proposals I wanted in Ayurveda, following this path that has now made me a teacher of a super cool subject.
|
||||
|
||||
*So you present yourself as a teacher?*
|
||||
|
||||
Yes, yes. Today I'm an Ayurveda teacher. I started as a masseur, an Ayurvedic medical therapist, until I organically found myself as a teacher. Because, in wanting not to see a person two or three times, but just once, I had this idea: "I need to teach enough so you don't depend on me anymore." I found this solution. The end product is to teach the person, not to pass on a magic formula, but to teach them. So I became a teacher out of necessity.
|
||||
|
||||
*And what are your channels for transmitting these teachings today?*
|
||||
|
||||
Today, I work a lot on Instagram, a lot on YouTube, and I do online and in-person consultations. Ayurveda has a thought structure that's easy to understand. I usually say that children should learn this because knowing that your friend's body can't handle raw food, another can't handle spicy food, and another can't handle heavy food—these are simple ideas that a child can learn about others. But we're not learning this.
|
||||
|
||||
*You've also become the architect of a very large network.*
|
||||
|
||||
It's something that caught me by surprise because I teach people to think according to Ayurveda. My desire to teach someone and my angry nature when things go wrong—some people get scared, some get anxious, I get angry when things go wrong—that anger, the need to do things right, gave me a certain teaching technique.
|
||||
|
||||
Everyone should learn a little of this. People talk about the term "sangha"—a group of people in favor of the same knowledge, the same action. This formed organically. So I was transforming into a person who insistently heard people saying, "You teach Ayurveda in a unique way." I must teach Ayurveda in a unique way, but not because it was taught to me in a unique way. I think Ayurveda is a way for you to experience the world knowing what you're looking at.
|
||||
|
||||
When you feel the difference in the air—our air is clearer, the air is colder, warmer, more humid, drier—you know this effect defines the four seasons of the year and their effects according to the characteristics of the physical body, according to the characteristics of each person. So you create a system that's everyday. Imagine, like what I used to do when I was a stock operator. Every day I had to watch the market opening, all day, and the market closing. But when the market opens, you look at the dollar exchange rate, you look at the future index, and then you create an idea of what will happen. You do this every day.
|
||||
|
||||
So with Ayurveda, I do the same thing. I look every day, see how my tongue is, how the color of my lip is, what the property of my waste is. Did my waste get very soft or very hard, or did I have no waste at all? And then I analyze my hunger. And I kind of give myself a grade every day. This is for everyone because it's our body, our mind. It's an incredible thing to know. I'm turning forty in less than a month, and I feel more vitality than all the other years, all the other periods of my life. The longer I practice Ayurveda, the better my memory gets, and the more stable and balanced I become. My body is in a better version of myself.
|
||||
|
||||
*And today, this community that formed organically mobilizes how many people?*
|
||||
|
||||
I have fifty-five thousand followers on Instagram today. I have 1,700 students who have enrolled in paid courses, throughout Brazil and around the world. And on YouTube, where we have a more fixed crowd, I have twelve thousand people who follow me, but I have a metric that's roughly like this: when I offer a class, within a week, 1,200 people watch that class. So it takes more work, you have to click on the link, it's a class that's like an hour and a half on YouTube. But people stay for at least forty minutes. Seventy percent of the audience watches at least forty minutes. It's a very good metric. You see that people are really interested in the subject. They want to learn it for their lives. They want to help others with it.
|
||||
|
||||
So I don't give a magic pill, for example. What I mean is that there are different teacher profiles. I'm a teacher who has a certain profile, and I've been attracting people who have the same scope of thinking. They want freedom of thought. And they attached themselves to me because I give them freedom of thought.
|
||||
|
||||
*And a large part of your work, despite having private patients and private classes, much of what is transmitted is done for free and widely, without any monetization. Why do this?*
|
||||
|
||||
Let me give you two answers. My first response: I remember when I was thirteen, a lady came to our house, Dona Ivone. As far as I knew, she had seven children, and of the seven children, five were disabled. And she asked my mother for money. And I had asked for money to go to the movies. And my mother didn't give me money to go to the movies, but she gave Dona Ivone a hundred and fifty *reais* \[Brazilian currency\].
|
||||
|
||||
I was furious that day. I said, "My God, how can you give money to a person and not to your son?" I grew older and felt like an idiot later, right? And I said, "How beautiful, you have to learn to give without wanting much in return." So I think this runs a bit in my family. We are privileged. We're here on the internet. You're in one part of the world, I'm in another. So we have a great privilege. We need to pay the world back.
|
||||
|
||||
I felt this. But today I also believe that I will really die and be born again. So the better I can leave the world... I also wanted to teach Ayurveda in English so I could see my videos being viewed in another country, so I could still see my videos a hundred, two hundred years from now, in another language. So that's my first answer.
|
||||
|
||||
The second thing is that, in practice, people unfortunately hold onto knowledge too much. My teachers held onto knowledge. I don't like to cite them much because all my teachers disappointed me. So, for many years, I “set off fireworks” for my teachers. I even wrote love letters to my teacher, to my master. And over time, these people closed their doors to me.
|
||||
|
||||
When I started with Ayurveda, I said, "Well, I came from the stock market field, but before that, I was a Brazilian champion of a strategy game. I've always been a good strategist. I said, 'Look, I just need to do this. I need to do this well. I will provide knowledge, that knowledge that doesn't have that high price, that is important for the person's formation.'" But there's a thing between what's important for the person and what they think is important.
|
||||
|
||||
If I release a video for weight loss, I'll have more views than all the other videos I've made. But that video won't give freedom to the person. I need to teach them that they are a spirit. We are all a spirit. This spirit has a will. This will is what is making this person read the transcript of this interview or see this live. It's the will to do good. If you don't have the will to do good to others, it's because you're not well yet. When you get well, the will to do good is natural in all people. The more I did good to people, the more I wanted to do good.
|
||||
|
||||
When I started teaching Ayurveda in face-to-face courses, I was already giving consultations for some time. I got a little tired of saying the same thing several times to my patient. I said, "Well, I'm going to create an internet channel and I'm going to publicize this. And I'm going to give access to knowledge that I didn't have, to knowledge that they didn't give me, to knowledge that I only found after reading five books."
|
||||
|
||||
But everything is Ayurveda. Ayurveda has a base with logical science. People know, in a way, from popular knowledge that the greatest physicists in the world went through studies in India. The ancient books of Ayurveda define what an atom is, what time is, what a second is, where time comes from. A second is defined by the time it takes light to travel a number X of hydrogen atoms. It's a very beautiful reading. The base, the nectar of knowledge of the earth, seems to be there for you to structure your mind, your senses. And I was enchanted by that.
|
||||
|
||||
*And in this process of translating this ancient knowledge of Ayurveda to the Brazilian context, mainly for a Brazilian audience, would you describe your process as protocol-based? What does protocol mean to you? What associations do you make with this word, and what was your motivation to develop or adopt a protocol in this sense?*
|
||||
|
||||
I think protocol, the organization of what to do from beginning to end and why to do it this way, came organically. The first thing you find is a problem. You have a problem. You want to teach something that you can't. You taught, the person didn't learn? So you first start to see that you experience a problem. I experienced the problem of not knowing where to start, even though my teacher taught me. Starting with items one, two, and three, it was only about four years after my first training that I began to realize what I had studied. I studied, but I didn't learn. I needed to experience that for a few years. Put it to the test.
|
||||
|
||||
And a very important thing that Ayurveda says is this: you can't trust what I told you. You'll have this as a guide. But all the time you'll doubt what I'm saying because the only real way for you to learn is to put it to the test. If you don't test it, it's something you talk about, but you don't understand because you haven't experienced it. So, from the moment I experienced and lived through a set of things, I discarded another set of things, I added and strengthened, and began to have my own stories of why it works, why it doesn't work. I stopped telling the stories of my teachers and started having my own experiences.
|
||||
|
||||
And then, when I was getting into a repetitive cycle with my client, because I used to do Ayurvedic massage, over time I did consultations, they became my patients. When I was getting into a cycle where my patient always came back, always came back, I saw that the reason was because I was using a technique that didn't match what I had learned in Ayurveda.
|
||||
|
||||
In Ayurveda, we learn that a person has to eat what is close to their life, that they have to do what is simple, what is not to invent a lot of fashion. And I was using a lot of manipulated herbs. I was doing a lot of things, focusing a lot on the problem. When I started to realize that I was wrong, even though the person came to me, I was wrong. I didn't want her to come back three, four times. I started to identify that if I didn't teach her, if she didn't look at herself and really know, it's not for me to drink hot water in the morning. It's to remove yesterday's toxins, however they may be. So you have to understand this body mechanics.
|
||||
|
||||
*Why did you choose exactly the adoption of this protocol to transmit this knowledge?*
|
||||
|
||||
I used to do this in a more mystical way before. You can just measure a person's pulse and tell everything about them. I like to do this because you can say, "You have hypothyroidism." People say, "Wow, I do." I'm not asking you, I'm measuring. I'm saying: "You have. You're constipated?" You say what the person has. It requires training, it requires time and such. But you see, the person hasn't learned. I haven't walked a path with them.
|
||||
|
||||
The other way of teaching, which is “slapping the person in the face”? I think that's a lot of arrogance, because I'm going to tell you what you have instantly, all the products, all the solutions. But I didn't give you a path to walk. Your body will improve in three months, you will improve. But then what will you do afterward? You'll come back, and I'll see you again. And it was precisely this that I wanted to escape from.
|
||||
|
||||
If I hadn't escaped from this, today I would have a fuller schedule. I would charge more for my consultation. I'd just be measuring pulses, just doing that. I would earn more money. I wouldn't be making free videos, then answering two hundred questions per video. But if I really believe it, I'm thirty-nine years old. If I really believe that I'm going to die, I'm going to be born again, one of the things I wanted to do was leave knowledge good enough because people talk about the Final Judgment in the Bible. Ayurveda says that there is a moment of disembodiment, a millisecond that you will experience your life. And you will say to yourself. And that's what the Ayahuasca folks call DMT, divine particle, that kind of thing. Ayurveda explains this in a very cool way.
|
||||
|
||||
A few years ago, I got into the idea that I couldn't die because I hadn't recorded my diagnostic course yet. So I think you get the desire to communicate in a way... that's what happened in my life. I want to be well with myself. That's it. And I also became a person who had to learn the division between right and wrong in the sense of going beyond just being nice. So I can't just be the nice guy on the Live. I also have to be harsh sometimes. I also have to scold sometimes. And it's part of this path that I've adopted. I used to get angry when people called me master. Because all my masters disappointed me. Today, if you want to call me Master, call me, but I'm an Ayurveda teacher. I'm here to pass on what I've studied, as incomplete as it may be.
|
||||
|
||||
*Do you perceive your work with protocols as a continuity of previous legacies and traditions, or as a rupture with them?*
|
||||
|
||||
It's a rupture, for sure. I found myself thinking about this yesterday. In India, since we're talking about something mystical, there's a myth that if you go to learn Ayurveda with a cave voyager—which is what? A guy who lives in a cave and learned Ayurveda from his master, who lived in a cave, who learned Ayurveda from his master who lived in a cave—they've been doing this for seven to fifteen generations. If you go to learn Ayurveda with this guy, you'll learn more than all the others.
|
||||
|
||||
And then there's the other crowd that says, "You have to do your life in college because you're going to learn the Ayurvedic thought structure with the classical texts, the way the ancient gurus who wrote the texts would like you to learn." There are these two strands. I didn't study in the cave. I don't know about classical texts. And I know Ayurveda a lot. So I found myself thinking yesterday, "Where do I fit in?" Because I studied the basics. Then I studied the basics again. Then I studied the basics again.
|
||||
|
||||
So if you teach a person to write... I like to talk in numbers. Ayurveda is like doing math. I'm good at doing math. But before doing math, a person needs to learn the difference between zero and one, and one and two. If you take one plus one, it equals two. Add one more, it's three. You teach someone to count to ten. They need to understand what zero is. Then they'll understand addition, subtraction, multiplication, division. Soon enough, they're doing calculations.
|
||||
|
||||
So I learned to do calculations in Ayurveda. Sometimes I encounter traditionalists who say, "This guy doesn't even reference classical texts." I think, why focus on classical texts? Why keep doing calculations? I've already solved the most complex physics equations from college.
|
||||
|
||||
I find it offensive when someone challenges knowledge that a person has acquired, regardless of whether they learned it in a cave, at university, or from an old man in the south who has since passed away and no one's heard of.
|
||||
|
||||
If we study something divine, are we saying it's not available to me when I want it? Are we saying I can't achieve enlightenment if I desire it, pray for it, fast for it, and meditate on it? What if I've already done all that? What if I've meditated across many lives? What if I've meditated for many days while fasting, praying, applying the teachings, giving myself massages, receiving massages, and eating properly? If I've done this for many years, wouldn't I receive better downloads than someone who spent six years listening to eighteen different professors, then working at various clinics in different countries?
|
||||
|
||||
This knowledge is available to everyone. It's not formatted at an inaccessible level like many undergraduate courses where you need to attend university to learn it. It's a simple thought structure. I believe what made me successful in this field was that nobody told me it was difficult.
|
||||
|
||||
To be honest, my first teacher wasn't excellent, but he didn't intimidate me. He told me legends when he saw I was enthusiastic about everything in the first class. He said, "You're reacting positively to everything I say," and I said, "Yes, this is great\!" He responded, "It seems like you've seen this before." I agreed, and he said, "They say those who show this kind of learning pattern on the first day have studied Ayurveda for three lives. Perhaps you've come in this life to be a teacher."
|
||||
|
||||
I said, "Yeah, right." Later, I would get rides home from my training course with an older man who was retired from the Federal Police. He was a practicing psychoanalyst with many stories. After three or four months of courses, he said, "You realize you're already very good at this, right?" I said, "No, Cláudio, I had no idea."
|
||||
|
||||
About four years after my first training course in 2013, I went to Canada for a four-month extension course. I thought, "Now I'm going to learn Ayurveda." When I arrived in Canada, I discovered something incredible: in Brazil, Ayurveda isn't regulated, meaning you can teach anything without oversight. In Canada, it's regulated—you can't discuss diagnosis or nutrition.
|
||||
|
||||
So when I arrived talking about diagnosis and nutrition, my teachers scolded me. Over those four months, I became friends with them and understood they were concerned about me doing something illegal, but they also appreciated that I knew more than they did and more than those who taught them. I met some Indian Ayurvedic doctors and worked as a consultation translator. I found their consultations trivial and outdated for the people receiving them.
|
||||
|
||||
That's when I thought, "My God, I think I know this subject." I started taking patients from others because I challenged myself. I would say, "They did it wrong for you. Let me do it right." I was confrontational and took other practitioners' patients because I saw they were making mistakes.
|
||||
|
||||
So there was both an aptitude and a great desire to solve my own problems and the world's problems. People have no idea who they are. There's a tarot card today that says, "A master is one who knows who he is and knows who you are—because you don't know who you are and don't know who the master is. The master knows who he is, knows who you are, and is there to tell you this." I think I adopted that posture.
|
||||
|
||||
*Have you had any experiences of appropriation or improper use of your protocol?*
|
||||
|
||||
No, I'm precisely the kind of teacher who says, "Take everything I'm doing and make it better." I like that. I'll give you a simple answer: all the great people in the world were examples. So I'm here to be an example. I'm not worried about people imitating what I'm doing. I want you to follow my example and challenge everything I teach. If a person doesn't challenge it, they're missing the point—they haven't learned anything.
|
||||
|
||||
*Through all of this, what was the most important decision in building your protocol?*
|
||||
|
||||
I think it was not having a problem challenging consensus. There's consensus that Ayurveda should be cited by classical text. There's consensus that it's somewhat complex and it's from India. People think, "Indians know so much about life\!"
|
||||
|
||||
So I think bringing this knowledge in a simple way, demystifying it, made the difference. I remember a story about a Vedic astrologer who did a chart for a woman and told her that to succeed at work, she needed to feed a black cow by throwing corn from a bridge in the direction of the river flow. She had to be above the bridge so the corn would pass below for the cow to eat.
|
||||
|
||||
This woman came to me with this story, and I thought, "Good heavens\!" The world is such a practical place. Let's drink a glass of hot water to remove yesterday's toxins. You're not getting a job because you lack vitality or you're too anxious in job interviews. So let's take some things to calm that anxiety, ground your thoughts, and not talk too much like I'm doing now in your interview.
|
||||
|
||||
These are paths that people adopt. I think that's my difference. Today we have many practitioners, but there was no one when I started. So I had no problem saying, "This is all wrong. We're doing it wrong." I had no problem saying, "People are tripping." And I had no problem showing that I also trip sometimes. Like, I enjoy beer, I eat meat, I have an active social life on weekends.
|
||||
|
||||
As a transmitter of liberating knowledge, I can't imprison myself in the idea of being a monk, because I'm not a monk and I'm not selling that image. So I think the big decision was not having a persona.
|
||||
|
||||
I'm still ashamed of who I am. I think everyone has their problems. I'm ashamed of a mixture of many things. I don't even have an undergraduate degree, Julia. I'll soon graduate in Naturology, but I've studied a ton of things. I debate with healthcare professionals—I'll talk with an oncologist about cancer treatments, they'll question me, and then they'll say, "Well, what you're saying makes sense."
|
||||
|
||||
So I needed to learn to challenge others, and I don't like that much. The big watershed moment is whether I accept my function in the world or not. I think that's it.
|
||||
|
||||
*What lessons would you share with people who are beginning to build or maintain protocols?*
|
||||
|
||||
If you weren't just starting, it wouldn't be difficult. There's no one to teach you what you're doing. I think that's it—no one is there to teach you. You have to discover it. You'll discover because you need to solve a problem. As ethereal as problem-solving may be, it exists. If a pipe is leaking, you fix the pipe. If it's not leaking, that's logical.
|
||||
|
||||
Protocol is about solving problems in your area. So you have to believe in it because you won't see the pipe leaking, and you won't see that the pipe has been fixed. Often, it's only the result—sometimes years later—that will show you it really works that way.
|
||||
|
||||
So I think developing these things is connected to an internal feeling of blessedness. It's like the old story—I was talking with a friend about diving from a springboard, climbing, diving into the sea, crossing. All these things are scary. People don't do them because they have no fear; they do them despite having fear.
|
||||
|
||||
So you're afraid? You'll do it with fear anyway. Today, I'm no longer afraid to appear on a livestream talking about a subject I know well. But if you look at my video from fifteen years ago where I talk about Ayurvedic massage, I stutter and spit because I'm embarrassed to open my mouth.
|
||||
|
||||
So everything comes from confronting challenges. You have to face obstacles to create something new. No dam holds water without causing some destruction in the environment. You have to challenge the environment.
|
@ -6,23 +6,20 @@ date: 2024-12-06
|
||||
approved: 2025-04-01
|
||||
summary: "A career-long journey to build online social networks that cannot be controlled by a single company, culminating with the ActivityPub standard."
|
||||
location: "Montreal, Canada"
|
||||
#headshot: "placeholder-headshot.png"
|
||||
links:
|
||||
- text: Website
|
||||
url: https://evanp.me/
|
||||
- text: ActivityPub: Programming the Social Web
|
||||
- text: "ActivityPub: Programming the Social Web"
|
||||
url: https://www.oreilly.com/library/view/activitypub/9781098162733/
|
||||
tags: [decentralization, open source, organizations, social media, software, standards]
|
||||
topics: [decentralization, open source, organizations, social media, software, standards]
|
||||
---
|
||||
|
||||
{{< i >}}
|
||||
How do you introduce yourself?
|
||||
{{< /i >}}
|
||||
*How do you introduce yourself?*
|
||||
|
||||
My name is Evan Prodromou, and I'm a software developer, entrepreneur, and architect from Montreal, Canada. I'm best known for my work on distributed social networks, and in other circles for wikis and AI. I have a lot of different hats.
|
||||
|
||||
{{< i >}}
|
||||
Let's get to know some of those hats. How would you outline the trajectory of your life and career? Where did you start and where are you now?
|
||||
{{< /i >}}
|
||||
*Let's get to know some of those hats. How would you outline the trajectory of your life and career? Where did you start and where are you now?*
|
||||
|
||||
I did well in school and ended up going to UC Berkeley as a physics student in the eighties. The University of California was an incredibly exciting time to be in physics---I had more Nobel laureates in my department than there were in all of the Soviet Union at the time. These were all the people who came out of the Manhattan project and were still producing great work from Lawrence Berkeley Labs and Lawrence Livermore Labs.
|
||||
|
||||
@ -44,9 +41,7 @@ This was 2008. Twitter had just launched at South by Southwest in 2007. They had
|
||||
|
||||
This was mid-2000s, and there was this open-source inevitabilism---this sense that if you've got a word processor, we're going to make an open-source word processor that's going to be as good or better, and we're going to wipe out your business. If you've got a server operating system, we're going to make an open-source server operating system. No matter what commercial corporate organizations could make, we would undercut the value by making an open-source alternative.
|
||||
|
||||
{{< i >}}
|
||||
Some worked better than others.
|
||||
{{< /i >}}
|
||||
*Some worked better than others.*
|
||||
|
||||
Yes, exactly. So I was like, "Oh boy, I'm going to be the one that makes the open-source Twitter." I started building it and shared it with this group of people who had been at this Franklin Street meeting. They were excited about it. They were working on Identi.ca, they were sharing and having conversations there.
|
||||
|
||||
@ -86,9 +81,7 @@ I think we kind of hit a high point in those early 2010s with Google Buzz. Googl
|
||||
|
||||
The way Google Buzz worked was that you could pull all your different social network presences together and then rebroadcast them through open standards. They used the same stack that we did---they were using ActivityStreams and PubSubHubbub and Salmon. We thought it was awesome. Around 2011 or 2012, engineers at the Google I/O conference did demo a three-way interaction between Google Buzz, Cliqset, and StatusNet using OStatus. They had this whole conversation happen live on stage. It was this great moment, like "Wow, this is really taking off!"
|
||||
|
||||
{{< i >}}
|
||||
I don't remember that---it's the dream we're still chasing, right?
|
||||
{{< /i >}}
|
||||
*I don't remember that---it's the dream we're still chasing, right?*
|
||||
|
||||
But Google Buzz had a fatal flaw. The way that they kickstarted your social graph---the number of people that you're connected to---was using your Gmail contact list. Almost immediately there started being stories about people who were like, "Wait a minute, my abusive ex-boyfriend now has access to all my social networking stuff because I had his email address in my contact list." It was just a bad example of "Hey, we're going to use this data that we've collected for you as part of this one system to kickstart this other system."
|
||||
|
||||
@ -98,23 +91,17 @@ For me, it was a bad time because we had run out of money and had no additional
|
||||
|
||||
So I wrote a new software package called pump.io that was written in Node.js. The previous version had been in PHP. It basically took everything that we had learned from five years of running a social network and applied it to the new structures. So instead of using Atom, which is an XML standard, we used JSON. This was almost entirely me solo, working by myself, because I'd lost all my employees.
|
||||
|
||||
{{< i >}}
|
||||
Because you were paying the server costs, you wanted to enable other people to migrate off it and run their own servers?
|
||||
{{< /i >}}
|
||||
*Because you were paying the server costs, you wanted to enable other people to migrate off it and run their own servers?*
|
||||
|
||||
Partly. But also because it meant I could run my servers much more cheaply.
|
||||
|
||||
{{< i >}}
|
||||
It reduced the load.
|
||||
{{< /i >}}
|
||||
*It reduced the load.*
|
||||
|
||||
Exactly. I converted from StatusNet to pump.io and transferred StatusNet---which became GNU social---to some enthusiasts at the Free Software Foundation who were like, "We want to keep running with this." I was like, "Great, take it, go with it." Then I built this pump.io project. It turned out great---Identi.ca is still running and still uses pump.io software. It is nowhere near its peak though. It was about 5 million users; now it's probably like 500 users, maybe. It's a very small number of people.
|
||||
|
||||
I did this pump.io software, released it, and moved Identi.ca to it, and then kind of walked away. I had done what I intended to do, and I was like, "Hey, that dream of a distributed social network is gone. These big social networks like Twitter and Facebook are no longer one among many---they are essential infrastructure, they're part of the way that the Internet works."
|
||||
|
||||
{{< i >}}
|
||||
Just as they were shutting down their open APIs.
|
||||
{{< /i >}}
|
||||
*Just as they were shutting down their open APIs.*
|
||||
|
||||
Absolutely. At this time, Twitter had a big event called the Chirp Developer Conference, which they had been organizing for like six months---"Come to the Chirp conference, exciting stuff!" Then, just before the conference, they had a big blog post---I think it was from Ev Williams---that was like, "Hey, we're shutting down the API for all but a few uses." We were at the conference. Our software actually had a Twitter-compatible API, so we were encouraging developers to take their tools and port them to use StatusNet instead. We had some interest there, but it was mostly these folks who had become dependent on these big networks and who had been part of making them successful---they were kind of out in the cold.
|
||||
|
||||
@ -134,9 +121,7 @@ Let me rewind a second and talk about OpenSocial. About the time that Facebook P
|
||||
|
||||
But all these other ones were like, "Hey, we have to build our own platform." The solution that they came up with was, "We can't compete with Facebook by all having our own different ways for building applications." So they built a single way for building widgets on a homepage called OpenSocial, and it covered one part of the problem. They didn't have any federation involved. The idea was if I build a zombie bite app and put it in Orkut, it should also work in Hi5.
|
||||
|
||||
{{< i >}}
|
||||
So it enabled developers to simultaneously develop for all these smaller networks.
|
||||
{{< /i >}}
|
||||
*So it enabled developers to simultaneously develop for all these smaller networks.*
|
||||
|
||||
Yes---you could just build something once and then register it on all these different services.
|
||||
|
||||
@ -172,9 +157,7 @@ That left the group around OStatus, and one of the people who had been a develop
|
||||
|
||||
So we had these submissions---the RDF people had gone, so we had these two sets of submissions. One was from the IndieWeb group and then the one Erin did, which became called ActivityPump. That was the name because it took pump.io plus activities. The idea is you were pumping it out. It wasn't a great name.
|
||||
|
||||
{{< i >}}
|
||||
But it was also a kind of tribute to what had come before.
|
||||
{{< /i >}}
|
||||
*But it was also a kind of tribute to what had come before.*
|
||||
|
||||
We couldn't agree on any one of the models. Finally, Tantek and I sat down, and Tantek was like, "Hey, look, we can just publish all of these. Let's just go ahead and do it. That way we don't have to argue about which one's right and which one's wrong. Let's just get them out, and they'll be official W3C standards, and they're out there."
|
||||
|
||||
@ -192,17 +175,13 @@ And they did. So Eugen Rochko and a couple of other friends and collaborators bu
|
||||
|
||||
I think we finished the actual spec in January 2019. We were done, and we had this popular open-source project using it. A bunch of other open-source projects started using the protocol---PeerTube for video, then Funkwhale for audio. It had a nice, lively little community happening with hundreds of thousands of people on the network. One of the last things we did with the standard was change the name from Activity Pump to ActivityPub. ActivityPump was a terrible name.
|
||||
|
||||
{{< i >}}
|
||||
I think both names have their virtues.
|
||||
{{< /i >}}
|
||||
*I think both names have their virtues.*
|
||||
|
||||
Well, the social media space had almost a tradition of ridiculous names for a while.
|
||||
|
||||
Once ActivityPub was done, I set it as my goal to make Identi.ca compatible with this new standard. I had handed pump.io off to a maintainer named AJ, and they were working on it. I kind of drifted off. I worked at Wikipedia for two years and then worked for a couple of startups, and I really was not working on distributed social networking, which was such a relief, to be honest.
|
||||
|
||||
{{< i >}}
|
||||
Everything you've just described sounds so exhausting.
|
||||
{{< /i >}}
|
||||
*Everything you've just described sounds so exhausting.*
|
||||
|
||||
Social networks are really hard when they're not popular, and they're hard for other reasons when they become popular. The scaling problems with social networks go up exponentially. Your resource demands grow as your number of users grow because they have more conversations, more connections. Your needs as the systems grow are way bigger, which is why so many social networks collapse.
|
||||
|
||||
@ -210,9 +189,7 @@ It's a lot of time, a lot of effort. After 2013, this was no longer my full-time
|
||||
|
||||
Christine and, to some extent, Jessica continued at the W3C. We had this group called the Social Web Community Group, or Social CG, and it kind of picked up where the working group left off and worked on extensions and documentation and things like that, helping developers work together. But one of the things that happens when you publish a standard that takes years to get create is it becomes very fossilized, very ossified. You can add on to it, but you can't really go back and say, "Oh, it would have been better if we had done this." We had a working network of thousands of servers. If you change how it works fundamentally, half of those servers or three-quarters of those servers are going to be cut off. So you have to just do backwards-compatible changes, iterative changes rather than really big changes.
|
||||
|
||||
{{< i >}}
|
||||
Do you have any regrets about what is in that ossified standard?
|
||||
{{< /i >}}
|
||||
*Do you have any regrets about what is in that ossified standard?*
|
||||
|
||||
I don't have huge regrets. If I have any, it's that I did not help get us to a working reference implementation before I stepped back. There are some parts of the stack that were never built out. Mastodon had to define how servers authenticate each other. There was a lot of work that went into filling in the gaps in this structure that could have been done with a reference implementation instead.
|
||||
|
@ -6,20 +6,17 @@ date: 2024-11-04
|
||||
approved: 2024-12-02
|
||||
summary: "As a sport often played with no referees, ultimate frisbee has developed a strong set of norms for addressing conflict and self-governing."
|
||||
location: "East Greenbush, NY USA"
|
||||
tags: [frisbee, sports, organizations, dispute resolution]
|
||||
headshot: "michael_zargham.png"
|
||||
topics: [mediation, sports, organizations]
|
||||
---
|
||||
|
||||
{{< i >}}
|
||||
How do you like to introduce yourself to people as you encounter them in the world?
|
||||
{{< /i >}}
|
||||
*How do you like to introduce yourself to people as you encounter them in the world?*
|
||||
|
||||
I tend to introduce myself differently depending on who I'm meeting. I've lived many lives, and if we're talking about ultimate frisbee today---while it's not my primary activity now since I'm retired---I would probably talk about the teams I played for and the school I played at.
|
||||
|
||||
For the purpose of our conversation today, I'm Michael Zargham, a researcher and engineer, and a retired competitive ultimate frisbee player. I'm going to focus on my experiences in the ultimate frisbee communities, ranging from work on a nonprofit that operated leagues and youth outreach programs to helping found and run teams and organize tournaments. These experiences span the various practices and processes that made up the ultimate frisbee community broadly, ranging from experiences in the US to playing pickup in various countries.
|
||||
|
||||
{{< i >}}
|
||||
How would you outline the trajectory of your life and career in ultimate frisbee?
|
||||
{{< /i >}}
|
||||
*How would you outline the trajectory of your life and career in ultimate frisbee?*
|
||||
|
||||
When I was in high school, I played lacrosse. Lacrosse players were jerks, or at least they were jerks to me, and while I still wanted to play sports, I didn't have an overwhelmingly good experience with the social dimension of lacrosse as a sport. When I got to Dartmouth, they were out on the green throwing during orientation week, and there was a bunch of frisbee players who had led freshman trips. They were recruiting like crazy, saying "Oh, we have this great sport!" All these new people were showing up, and they were actively being friendly---like, "Oh, you want to learn how to throw a flick? Here, let me show you." All of this time and attention was spent on new folks, just showing them the ropes. They were playing pickup out on the green and hanging out with people, making it feel really welcoming. I thought, "Wow, these people are nice and they play sports. Maybe I should try this sport."
|
||||
|
||||
@ -35,9 +32,7 @@ What I did pick up from the competitive players who were teaching me to throw wa
|
||||
|
||||
The precondition for all of this was a lot of welcomingness, including people investing time, effort and attention into developing my skills, when they might have just as easily dismissed me because of my size. That was the entry point. The very idea that I could be a competitive ultimate frisbee player and play for clubs with cuts and travel schedules, both at the college level and at the adult non-college level, was probably not something anybody was thinking when I showed up on the green as this former lacrosse player who just wanted some friends.
|
||||
|
||||
{{< i >}}
|
||||
Before we get into the organizational side and your role in that side of the sport, I wonder if you could say a bit about the niceness you encountered and its relationship to the way that this sport operates. I played for a year or two in high school, and the thing that really stuck out to me was that there were no referees. It was a sport that, as I understand it even at the highest levels, is built on cultivating a set of practices and cultures around not requiring third-party intervention to resolve disputes. Did that have something to do with the culture you encountered?
|
||||
{{< /i >}}
|
||||
*Before we get into the organizational side and your role in that side of the sport, I wonder if you could say a bit about the niceness you encountered and its relationship to the way that this sport operates. I played for a year or two in high school, and the thing that really stuck out to me was that there were no referees. It was a sport that, as I understand it even at the highest levels, is built on cultivating a set of practices and cultures around not requiring third-party intervention to resolve disputes. Did that have something to do with the culture you encountered?*
|
||||
|
||||
I think so. As a quick caveat, there are a couple dimensions we might want to come back to when we talk about some of my other experiences. But at base level, it's totally self-officiated with some specific competition regimes having augmentations. At the social level of pickup, or college competitive and club competitive (with some exceptions we'll discuss later, regarding observers), you can basically call a foul or infraction whenever you want. This means that when you're first learning, especially really competitive people tend to overdo it. They can get antsy and start making lots of calls.
|
||||
|
||||
@ -51,15 +46,11 @@ There's a strong cultural component, but I want to be careful to note that it va
|
||||
|
||||
At the college level, you're talking about hard-charging overachieving competitive people---people who got into an Ivy League University and then wanted to compete in this club sport too. When I arrived, the team had been at Nationals the year before. So it wasn't just about being nice---understanding and applying these principles of self-officiation were tantamount to success. If you couldn't do it, you couldn't play the sport.
|
||||
|
||||
{{< i >}}
|
||||
How did that kind of practice and culture and norms translate into the organizational structure? Were there respects in which the practices on the field were reflected in how the organizations you worked with were set up?
|
||||
{{< /i >}}
|
||||
*How did that kind of practice and culture and norms translate into the organizational structure? Were there respects in which the practices on the field were reflected in how the organizations you worked with were set up?*
|
||||
|
||||
The college team was a club---it did not have a coach, though we'd had volunteer coaches in the past.
|
||||
|
||||
{{< i >}}
|
||||
And was that by choice? Was that a sense like "we don't have referees, and we don't have coaches"?
|
||||
{{< /i >}}
|
||||
*And was that by choice? Was that a sense like "we don't have referees, and we don't have coaches"?*
|
||||
|
||||
It was a little different. I'll talk more about coaches later since I coached for a couple of years. But at the time, it was more that there wasn't an authority figure. Even in years where the college team had a graduated player staying on to help coach, they were effectively in a support role, not an authority. You delegated certain kinds of strategic decision-making and education functions to them, and they were welcome insofar as they fulfilled those functions. It wasn't a paid role---club sports have relatively low budgets so they wouldn't really have been able to spring for a paid coach anyway.
|
||||
|
||||
@ -69,9 +60,7 @@ A lot of it was entrenched---we had everything from cheers to organizational pat
|
||||
|
||||
Captains generally called lines and picked teams. There were important annual rituals like tryouts and off-season training regimes, and certain tournaments were the main deciding points for who was going to try out and make the roster. There were boundaries---it wasn't just showing up to play. There was a fixed number of roster slots, someone had to decide who would get those slots, there were interviews, there were debriefs. There was quite a lot of institutional infrastructure, but it was administered by the students for the students, everything from selecting teams to coordinating travel logistics to organizing tournaments.
|
||||
|
||||
{{< i >}}
|
||||
How did you get into league-level organization?
|
||||
{{< /i >}}
|
||||
*How did you get into league-level organization?*
|
||||
|
||||
I moved to Philadelphia. The story goes: I finished at Dartmouth in 2008. I got two degrees, so I was there for five years, which allowed me to play out my full competitive college allotment. The college infrastructure is run by the USAU, and you're allowed five years of competitive play. I used all of my college-level eligibility at Dartmouth.
|
||||
|
||||
@ -97,9 +86,7 @@ I don't remember exactly how I got sucked in deeper. I know how I got on the boa
|
||||
|
||||
That led me all the way to being on the board and actually being president of the board---just following up the "keep asking me to do stuff" path. The board is elected, not appointed. I didn't actually want to run for the board---a bunch of people put me up to it, and I said, "Oh fine, there's no way they're going to elect me." And they did. So long story short, I fell up through levels of engagement in that community just by showing up and being willing, then delivering on the stuff I agreed to do.
|
||||
|
||||
{{< i >}}
|
||||
How does leading this organization work? How does it compare to other organizations you've been in? You've also founded a company and served on other boards. What were some of the peculiarities of governance in the context of ultimate frisbee?
|
||||
{{< /i >}}
|
||||
*How does leading this organization work? How does it compare to other organizations you've been in? You've also founded a company and served on other boards. What were some of the peculiarities of governance in the context of ultimate frisbee?*
|
||||
|
||||
At the time I thought it was an utter mess. It was my first experience in formal accountability. I was president of the PADA board in my first term, also not something I wanted. I think I was put there partly to help deal with a situation which I won't go too far into, but it involved people overstating their expertise and authority. This is an environment where you've got artists and teachers and engineers and lawyers and doctors all mixed together, and board composition can be pretty different at any given time. There was a lawyer in a relatively senior position that many people felt no one could argue with effectively. I'm pretty sure I ended up on the board to argue with this guy---that was apparently why the community elected me, for my ability to argue.
|
||||
|
||||
@ -113,9 +100,7 @@ That was a strange, bespoke artifact---suddenly being told, "Oh, you're on this
|
||||
|
||||
But in terms of the social stuff, it was almost entirely mediating dispute resolution and presiding over board meetings. The org had a lot of inertia, and challenges arose more when things wanted to change than from maintaining existing operations.
|
||||
|
||||
{{< i >}}
|
||||
At the time you were studying engineering and developing a career as an engineer. How did these two modes of thinking intersect? How did engineering overlap in your mind, and maybe in others' minds, with the nature of the sport and the organizations around it?
|
||||
{{< /i >}}
|
||||
*At the time you were studying engineering and developing a career as an engineer. How did these two modes of thinking intersect? How did engineering overlap in your mind, and maybe in others' minds, with the nature of the sport and the organizations around it?*
|
||||
|
||||
Starting around 2005 or 2006, I was working on flocking coordination, multi-agent consensus problems---basically multi-agent coordination problems in robotics. So literally, the subset of robotics which was entirely about algorithms and rules and protocols for coordinating distributed activities with distinct agents.
|
||||
|
||||
@ -123,9 +108,7 @@ It wasn't a big leap for me. In fact, I almost didn't think about it much becaus
|
||||
|
||||
As that was the subject of my engineering work, being involved in founding teams, playing on teams, line calling, team roster selection, as well as figuring out how to get resources set up for leagues---all these roles fit together into a structure that got things done. From my perspective, these were extremely complementary in hindsight, though at the time I didn't think about it at all. I just did both things, and I could do both things. The fact that one was the social dimension and one was the technical dimension---I definitely benefited from that by seeing through both lenses.
|
||||
|
||||
{{< i >}}
|
||||
How long were you actively involved in the sport?
|
||||
{{< /i >}}
|
||||
*How long were you actively involved in the sport?*
|
||||
|
||||
About 15 years, all told. I started playing ultimate in 2003. I started in Philly in 2009, so 15 years ago, and I think I was on the board from 2012 to 2014. I graduated from my PhD in 2014, so I must have been on the board 2012 through 2014. That sounds right.
|
||||
|
||||
@ -141,9 +124,7 @@ That was my last competitive season---2014---and I only made it through to June
|
||||
|
||||
That's an important cultural aspect---while the game is obviously being played on the field, coaches are uncommon. They're more common now---in fact, most competitive teams do have coaches, but they're not paid staff for the most part. They're members of the team that come into their roles by invitation. I have a friend up here in Albany who's currently coaching a women's team in New York City, and he had to go through a very rigorous tryout process. He's an extremely talented player who played in the championship game five times---great guy---but he has also been teaching and training. I can't help but emphasize that even though coaches are really common in competitive ultimate now, it's like a roster spot---the team has to pick you. If anything, the captains have more authority than the coaches.
|
||||
|
||||
{{< i >}}
|
||||
Are there contexts when you saw the sport confronting what we might think of as capture? That is, attempts to take over the sport, to co-opt some of its norms?
|
||||
{{< /i >}}
|
||||
*Are there contexts when you saw the sport confronting what we might think of as capture? That is, attempts to take over the sport, to co-opt some of its norms?*
|
||||
|
||||
There was a largely failed corporate takeover, this is good. Philly was actually one of the main sites of the founding of the MLU---Major League Ultimate---which the Philadelphia Spinners won. But let me backtrack first. There was the AUDL---American Ultimate Disc League---which still exists. The AUDL was run very unprofessionally, at least in the first year it was a mess. A bunch of the Philly players played for the Spinners in the inaugural season of the AUDL.
|
||||
|
||||
@ -157,9 +138,7 @@ The semi-pro leagues rolled in competing with the clubs for talent, but the club
|
||||
|
||||
It's a little bit painful to reminisce about it with the whole knee injury thing. But there was this attempt, this belief that capitalization of the sport could work because it has huge reach, so many players, so much enthusiasm and love. These leagues spawned up, but my impression was that they just couldn't win the hearts and minds of the people who are the backbone of the ultimate frisbee community.
|
||||
|
||||
{{< i >}}
|
||||
It's fascinating that the semi-pro is regarded as under the club. What do you think contributed to that resiliency against an attempted takeover?
|
||||
{{< /i >}}
|
||||
*It's fascinating that the semi-pro is regarded as under the club. What do you think contributed to that resiliency against an attempted takeover?*
|
||||
|
||||
I think it could have gone either way. On one hand, I think the capitalist mentality just couldn't see what everyone loved about it. They inadvertently squashed things and didn't focus on things that were part of the real value. If they had been even a little more aware---not that you would expect them to have been---but if they had been a little more aware of the intangible forms of value that were created and stewarded within these communities, they could have made more space for them and possibly had more success.
|
||||
|
||||
@ -177,9 +156,7 @@ Actually, my COO at BlockScience---he joined later, he's not technically a co-fo
|
||||
|
||||
Just as a point of reference, much of BlockScience's coordination infrastructure---our ops---is people who were part of that same scene. That means a lot of the norms we've been talking about got transferred across contexts. When ops are breaking down or inefficient, the running inside joke is basically like, "Man, we're worse than frisbee teams at logistics or operations." And that's because AMP's logistics and operations were so tight, entirely on a volunteer basis, that there's so much commonality in the community that you can just say, "We're worse than a frisbee team!"
|
||||
|
||||
{{< i >}}
|
||||
When you were involved at the organizational level, did you run into challenges around your relationship with those norms and that culture? Did you have experiences where you ran the risk of doing harm to the sport's culture in trying to bureaucratize or systematize?
|
||||
{{< /i >}}
|
||||
*When you were involved at the organizational level, did you run into challenges around your relationship with those norms and that culture? Did you have experiences where you ran the risk of doing harm to the sport's culture in trying to bureaucratize or systematize?*
|
||||
|
||||
That's a good question. I'm going to say I did not have that problem. I think some people did. This goes back to my answer before---the fact that as an engineer I'm focused on multi-agent systems meant that I had a much higher expectation of distributed locus of decision-making and heterogeneity than most people who would come in and systematize things. So I actually didn't systematize much frisbee stuff. When I did, it was out of necessity and in a minimalist frame.
|
||||
|
||||
@ -199,9 +176,7 @@ Otherwise, the way self-officiation could escalate is you could do the normal wo
|
||||
|
||||
There are observer training programs which are also self-organized. You built in this extra backstop, and I view it as more in common with what I was saying before---you've got the rules, you've got the norms, and then inevitably you have the natural evolution of problems that need to be de-escalated or mediated. The observer is in some ways like a mediator on standby, which is helpful as you get to these increasingly competitive levels where people have been training for nine months and they're at the semifinals of nationals. Just knowing the observers are there helps, but I think they did a good job not usurping the authority of self-officiation. This ties back to the pros where they were like, "No, we're going to do refs," and it changed everything. The observers were essentially the equivalent of seeing the problem and solving it with an ultimate native solution, instead of seeing the problem and trying to paste on something from another culture.
|
||||
|
||||
{{< i >}}
|
||||
Finally, what lessons do you think ultimate frisbee has to offer the world? What do these protocols teach us that could be applicable in other domains?
|
||||
{{< /i >}}
|
||||
*Finally, what lessons do you think ultimate frisbee has to offer the world? What do these protocols teach us that could be applicable in other domains?*
|
||||
|
||||
At a basic level, sports in general can teach us a lot about how to work together and achieve collective outcomes. Given what I said about not enjoying lacrosse and then going to ultimate, obviously ultimate does that in a way that I found more culturally palatable.
|
||||
|
@ -1,40 +0,0 @@
|
||||
sand:
|
||||
100: "#eee8dd"
|
||||
500: "#d4c5aa"
|
||||
900: "#b19360"
|
||||
pink:
|
||||
100: "#ead4d2"
|
||||
500: "#c0928a"
|
||||
900: "#a7695a"
|
||||
red:
|
||||
100: "#e8c9c9"
|
||||
500: "#b87977"
|
||||
900: "#a35754"
|
||||
rust:
|
||||
100: "#eacec4"
|
||||
500: "#c48a74"
|
||||
900: "#af6649"
|
||||
clay:
|
||||
100: "#ead4c2"
|
||||
500: "#c49b6f"
|
||||
900: "#b17f48"
|
||||
gold:
|
||||
100: "#e6dac1"
|
||||
500: "#bca66d"
|
||||
900: "#a88b48"
|
||||
moss:
|
||||
100: "#d0ddc7"
|
||||
500: "#919f71"
|
||||
900: "#69734a"
|
||||
pine:
|
||||
100: "#c7ddd2"
|
||||
500: "#7b9b85"
|
||||
900: "#516b57"
|
||||
cyan:
|
||||
100: "#c0dadd"
|
||||
500: "#6a9799"
|
||||
900: "#436668"
|
||||
blue:
|
||||
100: "#c2cfe0"
|
||||
500: "#6f88a3"
|
||||
900: "#5d7691"
|
@ -1,31 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<html lang="{{ .Site.LanguageCode | default "en" }}">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>
|
||||
{{ .Title }}
|
||||
</title>
|
||||
<meta name="description" content="{{ .Description }}" />
|
||||
{{ partial "css-variables.html" . }}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
{{/* Main Styles */}}
|
||||
{{ $styles := resources.Get "scss/main.scss" }}
|
||||
{{ $styles = $styles | resources.ToCSS (dict "targetPath" "css/styles.css" "enableSourceMap" true) }}
|
||||
{{ $styles = $styles | resources.PostCSS }}
|
||||
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $styles = $styles | minify | fingerprint | resources.PostProcess }}
|
||||
{{/* Generate consistent title */}}
|
||||
{{ $title := "" }}
|
||||
{{ if .Params.narrator }}
|
||||
{{ $title = printf "%s: %s" .Params.narrator .Params.subject }}
|
||||
{{ else if .IsHome }}
|
||||
{{ $title = .Title }}
|
||||
{{ else }}
|
||||
{{ $title = printf "%s - %s" .Title .Site.Title }}
|
||||
{{ end }}
|
||||
|
||||
<link href="{{ $styles.RelPermalink }}" rel="stylesheet" />
|
||||
<!-- Basic SEO -->
|
||||
<title>{{ $title }}{{ if .Params.narrator }} - {{ .Site.Title }}{{ end }}</title>
|
||||
|
||||
{{/* Generate description from summary, description, or default site description */}}
|
||||
{{ $description := "" }}
|
||||
{{ with .Description }}
|
||||
{{ $description = . }}
|
||||
{{ else }}
|
||||
{{ with .Summary }}
|
||||
{{ $description = . | plainify | truncate 160 }}
|
||||
{{ else }}
|
||||
{{ $description = .Site.Params.description }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<meta name="description" content="{{ $description }}" />
|
||||
|
||||
{{/* Generate keywords from topics */}}
|
||||
{{ with .Params.topics }}
|
||||
<meta name="keywords" content="{{ delimit . ", " }}" />
|
||||
{{ end }}
|
||||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:site_name" content="{{ .Site.Title }}" />
|
||||
<meta property="og:type" content="{{ if .IsPage }}interview{{ else }}website{{ end }}" />
|
||||
<meta property="og:url" content="{{ .Permalink }}" />
|
||||
<meta property="og:title" content="{{ $title }}" />
|
||||
<meta property="og:description" content="{{ $description }}" />
|
||||
{{ with .Params.ogImage | default .Site.Params.openGraphImage }}
|
||||
<meta property="og:image" content="{{ . | absURL }}" />
|
||||
{{ end }}
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="{{ $title }}" />
|
||||
<meta name="twitter:description" content="{{ $description }}" />
|
||||
{{ with .Params.ogImage | default .Site.Params.openGraphImage }}
|
||||
<meta name="twitter:image" content="{{ . | absURL }}" />
|
||||
{{ end }}
|
||||
|
||||
<!-- Interview Specific -->
|
||||
{{ if and .IsPage (eq .Type "interviews") }}
|
||||
<meta property="interview:published_time" content="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}" />
|
||||
<meta property="interview:modified_time" content="{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}" />
|
||||
<meta property="interview:section" content="Oral History" />
|
||||
{{ with .Params.topics }}
|
||||
{{ range . }}
|
||||
<meta property="interview:tag" content="{{ . }}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{/* Author information using standard meta topics instead of interview:author */}}
|
||||
{{ with .Params.narrator }}
|
||||
<meta name="author" content="{{ . }}" />
|
||||
{{ end }}
|
||||
{{ with .Params.facilitator }}
|
||||
<meta name="interviewer" content="{{ . }}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="{{ .Permalink }}" />
|
||||
|
||||
<!-- CSS Styles -->
|
||||
{{ partial "css.html" . }}
|
||||
|
||||
|
||||
<!-- Matomo -->
|
||||
<script>
|
||||
var _paq = window._paq = window._paq || [];
|
||||
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function() {
|
||||
var u="https://analytics.medlab.host/";
|
||||
_paq.push(['setTrackerUrl', u+'matomo.php']);
|
||||
_paq.push(['setSiteId', '8']);
|
||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
|
||||
})();
|
||||
</script>
|
||||
<!-- End Matomo Code -->
|
||||
|
||||
</head>
|
||||
<body class="">
|
||||
{{ partial "header.html" . }}
|
||||
<div class="px-4 lg:mx-auto">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</div>
|
||||
<script src="/js/sigil.js"></script>
|
||||
<script src="/js/colorCalculator.js"></script>
|
||||
<script src="/js/wompum.js"></script>
|
||||
{{ partial "footer.html" . }}
|
||||
|
||||
{{ $js := resources.Match "js/*.js" | resources.Concat "js/bundle.js" }}
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $js = $js | minify | fingerprint }}
|
||||
<script src="{{ $js.RelPermalink }}" integrity="{{ $js.Data.Integrity }}" crossorigin="anonymous"></script>
|
||||
{{ else }}
|
||||
<script src="{{ $js.RelPermalink }}"></script>
|
||||
{{ end }}
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,9 +1,11 @@
|
||||
{{ define "main" }}
|
||||
<article class="single-default">
|
||||
<header class="mb-4">{{ partial "article-wompum.html" . }}</header>
|
||||
<interview class="single-default">
|
||||
<header class="mb-8 wompum-container wompum-container--wide-gap aspect-3/1 md:aspect-4/1">
|
||||
<div class="wompum-grid" data-text="{{ .Params.wompum | default .Title }}" data-columns="7" data-rows="5"></div>
|
||||
</header>
|
||||
|
||||
<div class="prose lg:prose-xl p-4 mx-auto">
|
||||
<p class="font-bold text-4xl">{{ .Title }}</p>
|
||||
<div class="prose lg:prose-xl dark:prose-invert p-4 mx-auto mt-8">
|
||||
<p class="font-bold text-6xl">{{ .Title }}</p>
|
||||
{{ .Content }}
|
||||
|
||||
{{/* Check for additional partials to include */}}
|
||||
@ -13,5 +15,5 @@
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</article>
|
||||
</interview>
|
||||
{{ end }}
|
@ -1,24 +1,23 @@
|
||||
{{ define "main" }}
|
||||
<header class="my-8">
|
||||
<p class="text-center font-iosevka">Topic</p>
|
||||
<p class="text-center font-iosevka capitalize">{{ .Data.Singular }}</p>
|
||||
<h1 class="text-4xl font-bold text-center capitalize">{{ .Title }}</h1>
|
||||
</header>
|
||||
<main class="container mx-auto">
|
||||
<ul class="mt-4 space-y-4">
|
||||
{{ partial "article-list.html" (dict "Pages" .Data.Pages) }}
|
||||
<main class="flex flex-wrap container mx-auto justify-center">
|
||||
<ul class="flex flex-col md:gap-4 gap-16 w-full mb-16 mt-4">
|
||||
{{ partial "interview-list.html" (dict "Pages" .Data.Pages) }}
|
||||
</ul>
|
||||
|
||||
{{ if gt (len (index .Site.Taxonomies .Data.Singular)) 1 }}
|
||||
<section>
|
||||
<h2 class="text-4xl my-8 font-iosevka text-center">Other Topics</h2>
|
||||
<div class="tag-cloud font-iosevka text-gray-600">
|
||||
{{ $tags := .Site.Taxonomies.tags }}
|
||||
{{ range $tag, $pages := $tags }}
|
||||
<a href="{{ "/tags/" | relLangURL }}{{ $tag | urlize }}" style="font-size: {{ add 1 (div (len $pages) 2) }}em;"
|
||||
class="tag text-sm inline-block p-2 my-1 border border-gray-100 rounded-lg hover:bg-yellow-100 whitespace-nowrap">
|
||||
{{ $tag }}
|
||||
</a>
|
||||
{{ end }}
|
||||
<h2 class="text-4xl mt-8 mb-4 font-bold text-center">Other {{ .Data.Plural }}</h2>
|
||||
<div class="wompum-container wompum-container--no-gap">
|
||||
<div class="wompum-grid" data-text="Other {{ .Data.Plural }}" data-columns="4" data-rows="1"></div>
|
||||
</div>
|
||||
<div class="tag-cloud font-iosevka text-gray-600 text-center my-4 w-full flex flex-wrap gap-2 items-center justify-center">
|
||||
{{ partial "taxonomy-cloud" (dict "taxonomy" .Data.Singular "Site" .Site "page" .Page) }}
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
</main>
|
||||
{{ end }}
|
@ -1,27 +0,0 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<article class="single-article">
|
||||
|
||||
<header class="mb-4">{{ partial "article-wompum.html" . }}</header>
|
||||
|
||||
<div class="flex gap-4">
|
||||
<aside class="lg:sticky lg:top-0 lg:h-screen lg:overflow-y-auto lg:w-1/3 p-4 font-iosevka">
|
||||
<p class="text-3xl font-light mb-4">
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "January 2, 2006" }}</time>
|
||||
</p>
|
||||
<p><strong>Narrator:</strong> {{ .Params.narrator }}</p>
|
||||
<p><strong>Facilitator:</strong> {{ .Params.facilitator }}</p>
|
||||
<p><strong>Subject:</strong> {{ .Params.subject }}</p>
|
||||
<p><strong>Tags:</strong> {{ partial "tags.html" . }}</p>
|
||||
</aside>
|
||||
<div class="prose lg:prose-xl lg:w-2/3 p-4">
|
||||
<p class="font-bold text-4xl">{{ partial "article-title" . }}</p>
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<aside class="max-w-screen-xl mx-auto px-4 lg:px-0">
|
||||
{{ partial "related-articles" (dict "page" . "tags" .Params.tags "limit" 3) }}
|
||||
</aside>
|
||||
<div class="text-center my-12"><a href="/">Go Home</a></div>
|
||||
{{ end }}
|
@ -1,28 +0,0 @@
|
||||
{{ define "main" }}
|
||||
<header class="my-8">
|
||||
<p class="text-center font-iosevka">Facilitator</p>
|
||||
<h1 class="text-4xl font-bold text-center capitalize">{{ .Title }}</h1>
|
||||
</header>
|
||||
<main class="container mx-auto">
|
||||
<ul class="mt-4 space-y-4">
|
||||
{{ $pages := .Pages }}
|
||||
{{ partial "article-list.html" (dict "Pages" $pages) }}
|
||||
</ul>
|
||||
|
||||
{{ if gt .Site.Taxonomies.facilitator 1 }}
|
||||
<section>
|
||||
<h2 class="text-4xl my-8 font-iosevka text-center">Other Facilitators</h2>
|
||||
<div class="tag-cloud font-iosevka text-gray-600">
|
||||
{{ range $facilitator, $pages := .Site.Taxonomies.facilitator }}
|
||||
{{ if ne $facilitator $.Title }}
|
||||
<a href="{{ "/facilitator/" | relLangURL }}{{ $facilitator | urlize }}"
|
||||
class="tag text-sm inline-block p-2 my-1 border border-gray-100 rounded-lg hover:bg-yellow-100 whitespace-nowrap">
|
||||
{{ $facilitator }}
|
||||
</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
</main>
|
||||
{{ end }}
|
@ -1,46 +1,26 @@
|
||||
{{ define "main" }}
|
||||
<main class="flex gap-4 lg:gap-16 justify-around mt-8 max-w-screen-xl mx-auto px-4 lg:px-0">
|
||||
<ul class="flex flex-col gap-4 w-full">
|
||||
{{ partial "article-list.html" (dict "Pages" (where .Site.RegularPages "Section" "articles")) }}
|
||||
<main class="flex flex-col md:flex-row gap-4 md:gap-8 lg:gap-16 justify-around mt-8 max-w-screen-xl mx-auto">
|
||||
<ul class="flex flex-col md:gap-4 gap-16 w-full mb-16">
|
||||
{{ partial "interview-list.html" (dict "Pages" (where .Site.RegularPages "Section" "interviews")) }}
|
||||
</ul>
|
||||
|
||||
<aside class="max-w-prose w-1/4 flex flex-col gap-8 mb-8">
|
||||
<aside class="max-w-prose md:w-1/4 flex flex-col gap-8 mb-8">
|
||||
|
||||
<section>
|
||||
<h2 class="text-4xl mb-4 font-iosevka">About</h2>
|
||||
{{ .Content }}
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-4xl mb-4 font-iosevka">Narrators</h2>
|
||||
<div class="tag-cloud font-iosevka text-gray-600">
|
||||
{{ $narrators := slice }}
|
||||
{{ range .Site.RegularPages }}
|
||||
{{ with .Params.narrator }}
|
||||
{{ $narrators = $narrators | append . }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $narrators = $narrators | uniq | sort }}
|
||||
{{ range $narrator := $narrators }}
|
||||
<a href="{{ "/narrator/" | relLangURL }}{{ $narrator | urlize }}"
|
||||
class="tag inline-block p-2 my-1 border border-gray-100 rounded-lg hover:bg-yellow-100 whitespace-nowrap"
|
||||
style="font-size: 1rem;">
|
||||
{{ $narrator }}
|
||||
</a>
|
||||
{{ end }}
|
||||
<h2 class="text-2xl font-bold mb-2">About</h2>
|
||||
<div class="wompum-container wompum-container--no-gap">
|
||||
<div class="wompum-grid" data-text="About The Protocol Oral History Project" data-columns="4" data-rows="1"></div>
|
||||
</div>
|
||||
<p class="mt-4">{{ .Content }}</p>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2 class="text-4xl mb-4 font-iosevka">Topics</h2>
|
||||
<div class="tag-cloud font-iosevka text-gray-600 text-sm">
|
||||
{{ $tags := .Site.Taxonomies.tags }}
|
||||
{{ range $tag, $pages := $tags }}
|
||||
<a href="{{ "/tags/" | relLangURL }}{{ $tag | urlize }}" style="font-size: {{ add 1 (div (len $pages) 2) }}em;" data-count="{{ len $pages}}"
|
||||
class="tag inline-block p-2 my-1 border border-gray-100 rounded-lg hover:bg-yellow-100 whitespace-nowrap">
|
||||
{{ $tag }}
|
||||
</a>
|
||||
{{ end }}
|
||||
<h2 class="text-2xl font-bold mb-2">Topics</h2>
|
||||
<div class="wompum-container wompum-container--no-gap">
|
||||
<div class="wompum-grid" data-text="Topics" data-columns="4" data-rows="1"></div>
|
||||
</div>
|
||||
<div class="tag-cloud font-iosevka text-gray-600 my-4 flex flex-wrap gap-2">
|
||||
{{ partial "taxonomy-cloud" (dict "taxonomy" "topics" "Site" .Site) }}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
38
layouts/interviews/single.html
Normal file
@ -0,0 +1,38 @@
|
||||
{{ define "main" }}
|
||||
|
||||
<article class="single-interview">
|
||||
|
||||
<header class="mb-4 wompum-container wompum-container--wide-gap aspect-2/1 md:aspect-3/1">{{ partial "interview-wompum.html" . }}</header>
|
||||
|
||||
<div class="flex md:flex-row flex-col gap-4 mt-4">
|
||||
<aside class="md:sticky md:top-24 md:h-screen p-4 font-iosevka">
|
||||
{{ $headshot := resources.GetMatch (printf "**/%s" (strings.TrimPrefix "/" .Params.headshot)) }}
|
||||
{{ if and .Params.headshot $headshot }}
|
||||
<div class="narrator__container -mt-24" data-text="{{ .Params.narrator }}">
|
||||
{{ partial "image.html" (dict
|
||||
"resource" $headshot
|
||||
"width" "192"
|
||||
"class" "narrator__frame"
|
||||
"alt" (printf "Photo of %s" .Params.narrator)
|
||||
) }}
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="md:block hidden">{{ partial "interview-metadata.html" . }}</div>
|
||||
</aside>
|
||||
<div class="prose-xl max-w-prose dark:prose-invert p-4 mx-auto">
|
||||
<p class="font-bold text-4xl interview-title interview-title--single">{{ partial "interview-title" . }}</p>
|
||||
<p class="text-2xl">{{ .Params.summary }}</p>
|
||||
<div class="wompum-container wompum-container--no-gap h-1">
|
||||
<div class="wompum-grid" data-text="{{ .Params.summary }}" data-columns="12" data-rows="1">
|
||||
</div>
|
||||
</div>
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<aside class="md:hidden block p-8 mt-8 border-t border-gray-200">{{ partial "interview-metadata.html" . }}</aside>
|
||||
</div>
|
||||
</article>
|
||||
<aside class="max-w-screen-xl mx-auto">
|
||||
{{ partial "related-interviews" (dict "page" . "topics" .Params.topics "limit" 3) }}
|
||||
</aside>
|
||||
<div class="text-center my-12"><a href="/">Go Home</a></div>
|
||||
{{ end }}
|
@ -1,25 +0,0 @@
|
||||
{{ define "main" }}
|
||||
<header class="my-8">
|
||||
<p class="text-center font-iosevka">Narrator</p>
|
||||
<h1 class="text-4xl font-bold text-center capitalize">{{ .Title }}</h1>
|
||||
</header>
|
||||
<main class="container mx-auto">
|
||||
<ul class="mt-4 space-y-4">
|
||||
{{ $pages := .Pages }}
|
||||
{{ partial "article-list.html" (dict "Pages" $pages) }}
|
||||
</ul>
|
||||
|
||||
<section>
|
||||
<h2 class="text-4xl my-8 font-iosevka text-center">Other Narrators</h2>
|
||||
<div class="tag-cloud font-iosevka text-gray-600 text-center">
|
||||
{{ $narrators := .Site.Taxonomies.narrator }}
|
||||
{{ range $narrator, $pages := $narrators }}
|
||||
<a href="{{ "/narrator/" | relLangURL }}{{ $narrator | urlize }}"
|
||||
class="tag inline-block p-2 my-1 border border-gray-100 rounded-lg hover:bg-yellow-100 whitespace-nowrap">
|
||||
{{ $narrator| humanize }}
|
||||
</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
{{ end }}
|
@ -1,20 +0,0 @@
|
||||
{{ $pages := .Pages }}
|
||||
{{ range $pages }}
|
||||
{{- $page := . -}}
|
||||
{{- if reflect.IsMap . -}}
|
||||
{{- $page = .page -}}
|
||||
{{- end -}}
|
||||
<li class="flex gap-4 items-center">
|
||||
<a class="flex-grow" href="{{ $page.RelPermalink }}">{{ partial "article-wompum.html" $page }}</a>
|
||||
<time class="text-gray-800 font-iosevka" datetime="{{ $page.Date.Format "2006-01-02" }}">
|
||||
<p>{{ $page.Date.Format "Jan" }}</p>
|
||||
<p>{{ $page.Date.Format "02" }}</p>
|
||||
<p>{{ $page.Date.Format "2006" }}</p>
|
||||
</time>
|
||||
<div class="flex-shrink-0 max-w-max">
|
||||
<a class="text-2xl font-bold hover:text-green-900 underline" href="{{ $page.RelPermalink }}">{{ partial "article-title" $page }}</a>
|
||||
<p class="max-w-prose">{{ $page.Params.summary }}</p>
|
||||
{{ partial "tags.html" $page }}
|
||||
</div>
|
||||
</li>
|
||||
{{ end }}
|
@ -1,3 +0,0 @@
|
||||
{{- if and .Params.narrator .Params.subject -}}
|
||||
{{- .Params.narrator }}: {{ .Params.subject -}}
|
||||
{{- end -}}
|
@ -1,8 +0,0 @@
|
||||
<div class="wompum-container">
|
||||
<div class="wompum-grid"
|
||||
data-metadata="{{ jsonify .Params }}"
|
||||
>
|
||||
<!-- Grid will be populated by JavaScript -->
|
||||
<!-- 7x5 = 35 cells total -->
|
||||
</div>
|
||||
</div>
|
@ -1,9 +0,0 @@
|
||||
<style>
|
||||
:root {
|
||||
{{ range $colorName, $shades := site.Data.colors }}
|
||||
{{ range $shade, $value := $shades }}
|
||||
--{{ $colorName }}-{{ $shade }}: {{ $value }};
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
}
|
||||
</style>
|
23
layouts/partials/css.html
Normal file
@ -0,0 +1,23 @@
|
||||
{{ with (templates.Defer (dict "key" "global")) }}
|
||||
{{ $t := debug.Timer "tailwindcss" }}
|
||||
{{ with resources.Get "css/styles.css" }}
|
||||
{{ $opts := dict
|
||||
"inlineImports" true
|
||||
"optimize" (not hugo.IsDevelopment)
|
||||
}}
|
||||
{{ with . | css.TailwindCSS $opts }}
|
||||
{{ if hugo.IsDevelopment }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}" />
|
||||
{{ else }}
|
||||
{{ with . | minify | fingerprint }}
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="{{ .RelPermalink }}"
|
||||
integrity="{{ .Data.Integrity }}"
|
||||
crossorigin="anonymous" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ $t.Stop }}
|
||||
{{ end }}
|
@ -1,5 +1,5 @@
|
||||
<section>
|
||||
<h2 class="text-4xl mb-4 font-iosevka">Facilitators</h2>
|
||||
<h2 class="text-4xl mb-4">Facilitators</h2>
|
||||
<div class="tag-cloud font-iosevka text-gray-600">
|
||||
{{ $facilitators := slice }}
|
||||
{{ range .Site.RegularPages }}
|
||||
|
24
layouts/partials/footer.html
Normal file
@ -0,0 +1,24 @@
|
||||
<footer class="bg-sand-500 text-amber-900 mt-16 dark:bg-gray-800 dark:text-sand-500">
|
||||
<div class="wompum-container wompum-container--no-gap h-1">
|
||||
<div class="wompum-grid" data-text="{{ .Site.Title }}" data-columns="7" data-rows="1">
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-8 pt-16 flex justify-between md:items-center gap-8">
|
||||
<section>
|
||||
<h1 class="text-2xl font-bold">
|
||||
<a href="/">{{ .Site.Title }}</a>
|
||||
</h1>
|
||||
<p class="text-lg">{{ .Site.Params.footer | markdownify }}</p>
|
||||
</section>
|
||||
<nav class="font-iosevka mt-2">
|
||||
<ul class="flex-col items-end gap-4">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</footer>
|
@ -1,16 +1,42 @@
|
||||
<!-- basic header partial in hugo with just home and about -->
|
||||
<header class="p-4 flex justify-between items-center border-b border-gray-300 mb-4">
|
||||
<h1 class="text-2xl font-bold">
|
||||
<a href="/">{{ .Site.Title }}</a>
|
||||
</h1>
|
||||
<nav class="font-iosevka">
|
||||
<ul class="flex gap-4">
|
||||
<li>
|
||||
<a href="/" class="hover:text-blue-700">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about" class="hover:text-blue-700">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<header class="flex flex-col mb-4">
|
||||
<div class="flex justify-between gap-4 items-center p-4">
|
||||
<h1 class="text-2xl font-bold">
|
||||
<a href="/">{{ .Site.Title }}</a>
|
||||
</h1>
|
||||
<nav class="font-iosevka">
|
||||
<ul class="flex flex-col flex-wrap relative sm:flex-row sm:gap-4 justify-center pr-8 sm:pr-0">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/about">About</a>
|
||||
</li>
|
||||
<li class="sm:relative absolute -right-1 top-1/2 sm:right-[unset] sm:top-[unset] transform -translate-y-1/2 sm:transform-none sm:translate-y-0">
|
||||
<button id="darkmode-toggle" onclick="toggleDarkMode()" aria-label="Toggle dark mode"
|
||||
class="flex group p-1 relative -mt-1 cursor-pointer hover:bg-gray-950 hover:text-gray-100 dark:hover:bg-sand-100 dark:hover:text-gray-900 rounded-full">
|
||||
<!-- Lightbulb SVG icon -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 dark:inline hidden" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M12 3v2.25m6.364.386-1.591 1.591M21 12h-2.25m-.386 6.364-1.591-1.591M12 18.75V21m-4.773-4.227-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z">
|
||||
</path>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 dark:hidden" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round"
|
||||
d="M21.752 15.002A9.72 9.72 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z">
|
||||
</path>
|
||||
</svg>
|
||||
<p class="tooltip transition-opacity duration-500 absolute mr-5 -bottom-5 right-0 w-sm text-sm text-right hidden group-hover:block opacity-0 group-hover:opacity-100 group-hover:text-gray-600 dark:group-hover:text-gray-400">Turn on <span id="darkmode-label"></span> Mode</p>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="wompum-container wompum-container--wide-gap px-4 h-1">
|
||||
<div class="wompum-grid"
|
||||
data-text="{{ .Site.Title }}"
|
||||
data-columns="7"
|
||||
data-rows="1">
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
19
layouts/partials/image.html
Normal file
@ -0,0 +1,19 @@
|
||||
{{ $width := .width }}
|
||||
{{ $height := default $width .height }}
|
||||
{{ $class := .class }}
|
||||
{{ $resource := .resource }}
|
||||
{{ $alt := .alt }}
|
||||
|
||||
{{ with $resource }}
|
||||
{{ $image := .Fit (printf "%dx%d webp" (int $width) (int $height)) }}
|
||||
{{ $fallback := .Fit (printf "%dx%d" (int $width) (int $height)) }}
|
||||
<picture class="{{ $class }} block">
|
||||
<source srcset="{{ $image.RelPermalink }}" type="image/webp">
|
||||
<img
|
||||
src="{{ $fallback.RelPermalink }}"
|
||||
alt="{{ $alt }}"
|
||||
width="{{ $width }}"
|
||||
height="{{ $height }}"
|
||||
loading="lazy">
|
||||
</picture>
|
||||
{{ end }}
|
25
layouts/partials/interview-list.html
Normal file
@ -0,0 +1,25 @@
|
||||
{{ $pages := .Pages }}
|
||||
{{ range $pages }}
|
||||
{{- $page := . -}}
|
||||
{{- if reflect.IsMap . -}}
|
||||
{{- $page = .page -}}
|
||||
{{- end -}}
|
||||
<li class="group flex md:flex-row flex-col md:gap-4 gap-2 md:items-center">
|
||||
<div class="flex-1 min-w-0 flex gap-2 items-center h-full">
|
||||
<a class="wompum-container h-full aspect-7/2 md:aspect-auto" href="{{ $page.RelPermalink }}">{{ partial "interview-wompum.html" $page }}</a>
|
||||
<time class="text-gray-800 dark:text-sand-500 font-iosevka w-12 flex-shrink-0" datetime="{{ $page.Date.Format "2006-01-02" }}">
|
||||
<p>{{ $page.Date.Format "Jan" }}</p>
|
||||
<p>{{ $page.Date.Format "02" }}</p>
|
||||
<p>{{ $page.Date.Format "2006" }}</p>
|
||||
</time>
|
||||
</div>
|
||||
<div class="flex flex-col gap-2 md:w-3/5 flex-shrink-0 md:py-8">
|
||||
<a class="interview-title interview-title--list" href="{{ $page.RelPermalink }}">{{ partial "interview-title" $page }}</a>
|
||||
{{ if $page.Params.location }}
|
||||
<p class="light:text-gray-800 dark:text-sand-100 italic">{{ $page.Params.location }}</p>
|
||||
{{ end }}
|
||||
<p class="max-w-prose">{{ $page.Params.summary }}</p>
|
||||
{{ partial "topics.html" $page }}
|
||||
</div>
|
||||
</li>
|
||||
{{ end }}
|
20
layouts/partials/interview-metadata.html
Normal file
@ -0,0 +1,20 @@
|
||||
<p><strong>Date:</strong> <time datetime="{{ .Date.Format " 2006-01-02" }}">{{ .Date.Format "January 2, 2006" }}</time></p>
|
||||
<p><strong>Narrator:</strong> <a href="{{ "/narrator/" | relLangURL }}{{ .Params.narrator | urlize }}">{{ .Params.narrator }}</a></p>
|
||||
<p><strong>Facilitator:</strong> <a href="{{ "/facilitator/" | relLangURL }}{{ .Params.facilitator | urlize }}">{{ .Params.facilitator }}</a></p>
|
||||
<p><strong>Subject:</strong> {{ .Params.subject }}</p>
|
||||
{{ if .Params.location }}
|
||||
<p><strong>Location:</strong> {{ .Params.location }}</p>
|
||||
{{ end }}
|
||||
<p><strong>Topics:</strong> {{ partial "topics.html" . }}</p>
|
||||
{{ if .Params.links }}
|
||||
<div class="mt-4">
|
||||
<p><strong>Learn more:</strong></p>
|
||||
<ul class="list-disc pl-4 ml-4 mt-2">
|
||||
{{ range .Params.links }}
|
||||
<li class="mb-2">
|
||||
<a href="{{ .url }}" target="_blank" rel="noopener noreferrer">{{ .text }} <sup>↗</sup></a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
3
layouts/partials/interview-title.html
Normal file
@ -0,0 +1,3 @@
|
||||
{{- if and .Params.narrator .Params.subject -}}
|
||||
<span class="interview-title__narrator">{{- .Params.narrator }}</span> <span class="interview-title__subject">{{ .Params.subject -}}</span>
|
||||
{{- end -}}
|
5
layouts/partials/interview-wompum.html
Normal file
@ -0,0 +1,5 @@
|
||||
<div class="wompum-interview-grid"
|
||||
data-metadata="{{ dict "narrator" .Params.narrator "subject" .Params.subject "facilitator" .Params.facilitator | jsonify }}"
|
||||
data-columns="7"
|
||||
data-rows="5">
|
||||
</div>
|
@ -1,37 +0,0 @@
|
||||
{{- $tags := .tags -}}
|
||||
{{- $limit := default 3 .limit -}}
|
||||
{{- $currentPath := .page.RelPermalink -}}
|
||||
|
||||
{{- $related := where (where site.RegularPages "Type" "articles") "RelPermalink" "!=" $currentPath -}}
|
||||
{{- $matchingArticles := slice -}}
|
||||
|
||||
{{/* First try to find articles with matching tags */}}
|
||||
{{- range $related -}}
|
||||
{{- $matches := 0 -}}
|
||||
{{- range .Params.tags -}}
|
||||
{{- if in $tags . -}}
|
||||
{{- $matches = add $matches 1 -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- if gt $matches 0 -}}
|
||||
{{- $matchingArticles = $matchingArticles | append (dict "page" . "matches" $matches) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* If we found matching articles, sort by number of matching tags */}}
|
||||
{{- $finalArticles := slice -}}
|
||||
{{- if gt (len $matchingArticles) 0 -}}
|
||||
{{- $finalArticles = first $limit (sort $matchingArticles "matches" "desc") -}}
|
||||
{{- else -}}
|
||||
{{/* Fallback to showing other articles sorted by date */}}
|
||||
{{- $finalArticles = first $limit (sort $related "Date" "desc") -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if gt (len $finalArticles) 0 -}}
|
||||
<div class="related-articles flex flex-col gap-4">
|
||||
<h2 class="title text-3xl">Related Articles</h2>
|
||||
<ul class="flex flex-col gap-4 w-full">
|
||||
{{ partial "article-list" (dict "Pages" $finalArticles) }}
|
||||
</ul>
|
||||
</div>
|
||||
{{- end -}}
|
40
layouts/partials/related-interviews.html
Normal file
@ -0,0 +1,40 @@
|
||||
{{- $topics := .topics -}}
|
||||
{{- $limit := default 3 .limit -}}
|
||||
{{- $currentPath := .page.RelPermalink -}}
|
||||
|
||||
{{- $related := where (where site.RegularPages "Type" "interviews") "RelPermalink" "!=" $currentPath -}}
|
||||
{{- $matchingInterviews := slice -}}
|
||||
|
||||
{{/* First try to find interviews with matching topics */}}
|
||||
{{- range $related -}}
|
||||
{{- $matches := 0 -}}
|
||||
{{- range .Params.topics -}}
|
||||
{{- if in $topics . -}}
|
||||
{{- $matches = add $matches 1 -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- if gt $matches 0 -}}
|
||||
{{- $matchingInterviews = $matchingInterviews | append (dict "page" . "matches" $matches) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* If we found matching interviews, sort by number of matching topics */}}
|
||||
{{- $finalInterviews := slice -}}
|
||||
{{- if gt (len $matchingInterviews) 0 -}}
|
||||
{{- $finalInterviews = first $limit (sort $matchingInterviews "matches" "desc") -}}
|
||||
{{- else -}}
|
||||
{{/* Fallback to showing other interviews sorted by date */}}
|
||||
{{- $finalInterviews = first $limit (sort $related "Date" "desc") -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if gt (len $finalInterviews) 0 -}}
|
||||
<div class="related-interviews flex flex-wrap gap-4">
|
||||
<h2 class="title text-3xl font-bold">Related Interviews</h2>
|
||||
<div class="wompum-container wompum-container--no-gap">
|
||||
<div class="wompum-grid" data-text="Related Interviews" data-columns="8" data-rows="1"></div>
|
||||
</div>
|
||||
<ul class="flex flex-col gap-4 w-full">
|
||||
{{ partial "interview-list" (dict "Pages" $finalInterviews) }}
|
||||
</ul>
|
||||
</div>
|
||||
{{- end -}}
|
@ -1,25 +0,0 @@
|
||||
{{/* Partial: create_sigil.html */}}
|
||||
|
||||
{{- $input := . -}} <!-- The input string will be passed into the partial -->
|
||||
{{- $vowels := "aeiouAEIOU" -}} <!-- List of vowels to remove -->
|
||||
{{- $seen := dict -}} <!-- Dictionary to track characters we've already encountered -->
|
||||
{{- $output := "" -}} <!-- Variable to store the resulting sigil -->
|
||||
{{- $chars := split (replaceRE "[^a-zA-Z]" "" $input) "" -}} <!-- Remove non-alphabetic characters and split the input string into a slice of characters -->
|
||||
|
||||
{{- /* Step 1: Remove vowels */ -}}
|
||||
{{- range $i, $char := $chars -}}
|
||||
{{- if not (in $vowels $char) -}}
|
||||
{{- /* Step 2: Remove repeating letters */ -}}
|
||||
{{- if not (index $seen $char) -}}
|
||||
{{- $seen = merge $seen (dict $char true) -}}
|
||||
{{- $output = printf "%s%s" $output $char -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $output = upper $output -}}
|
||||
{{ $output = split $output "" }}
|
||||
{{ $output = apply $output "printf" "%#x" "." }}
|
||||
{{ $output = apply $output "int" "." }}
|
||||
|
||||
{{- $output -}}<br>
|
@ -1,10 +0,0 @@
|
||||
{{- if .Params.tags }}
|
||||
<div class="flex flex-wrap gap-2 my-2 text-xs">
|
||||
{{- range .Params.tags }}
|
||||
<a href="{{ "tags/" | relURL }}{{ . | urlize }}"
|
||||
class="px-3 py-1 border border-green-100 hover:bg-green-300 text-green-900 rounded no-underline">
|
||||
{{ . }}
|
||||
</a>
|
||||
{{- end }}
|
||||
</div>
|
||||
{{- end }}
|
16
layouts/partials/taxonomy-cloud.html
Normal file
@ -0,0 +1,16 @@
|
||||
{{ $taxonomy := .taxonomy }}
|
||||
{{ range $term, $pages := index .Site.Taxonomies $taxonomy }}
|
||||
{{ $termPage := $.Site.GetPage (printf "/%s/%s" $taxonomy $term) }}
|
||||
<a href="{{ $termPage.RelPermalink }}"
|
||||
data-size="{{ len $pages }}"
|
||||
class="tag font-bold
|
||||
{{ if eq $.page.RelPermalink $termPage.RelPermalink }}hidden{{ else }}inline-block{{ end }}
|
||||
data-[size=1]:text-sm data-[size=1]:font-normal data-[size=1]:opacity-90
|
||||
data-[size=2]:text-base
|
||||
data-[size=3]:text-xl
|
||||
data-[size=4]:text-3xl
|
||||
data-[size=5]:text-4xl"
|
||||
data-count="{{ len $pages}}">
|
||||
{{ $term }}
|
||||
</a>
|
||||
{{ end }}
|
10
layouts/partials/topics.html
Normal file
@ -0,0 +1,10 @@
|
||||
{{- if .Params.topics }}
|
||||
<div class="tag-cloud flex flex-wrap gap-2 my-2 text-xs font-iosevka">
|
||||
{{- range .Params.topics }}
|
||||
<a href="{{ "topics/" | relURL }}{{ . | urlize }}"
|
||||
class="tag no-underline">
|
||||
{{ . }}
|
||||
</a>
|
||||
{{- end }}
|
||||
</div>
|
||||
{{- end }}
|
117
layouts/partials/wompum-demo.html
Normal file
@ -0,0 +1,117 @@
|
||||
<div class="wompum-demo max-w-2xl mx-auto">
|
||||
<h2 class="text-2xl font-bold mb-4">Wampum Grid Protocol</h2>
|
||||
|
||||
<p>The color scheme on this website is inspired by <em><a href="http://n2t.net/ark:/65665/ws63912f5dd-e703-4759-8c31-33ac98b3c190">Constitutional Wampum</a></em> by Robert Houle. The site uses the following protocol to generate the colorful wampum style grid.</p>
|
||||
|
||||
<div class="mb-8">
|
||||
<label class="block mb-2">Enter text to generate a grid:</label>
|
||||
<input type="text"
|
||||
class="w-full p-2 border rounded font-iosevka bg-sand-100 dark:bg-gray-800"
|
||||
placeholder="Type something..."
|
||||
value="{{ .Site.Title}}"
|
||||
oninput="updateWompumDemoGrid(this.value)">
|
||||
</div>
|
||||
|
||||
<p>First we generate a sigil by removing spaces, turning to lowercase, removing anything that isn't a consonant, removing repeat letters, find the unicode character number, and finally get the digital root of those numbers. From there the sigil digits are used to choose a color from our pallet.</p>
|
||||
|
||||
<ol class="transformation-steps mb-8 font-iosevka pl-0 list-['↪']">
|
||||
<li>
|
||||
<span class="font-bold md:inline block">Original Text:</span>
|
||||
<span class="text-input-display"></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="font-bold md:inline block">Lowercase:</span>
|
||||
<span class="text-cleaned-display"></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="font-bold md:inline block">Consonants only:</span>
|
||||
<span class="text-consonants-display"></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="font-bold md:inline block">Unique consonants:</span>
|
||||
<span class="text-unique-display"></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="font-bold md:inline block">Letters to numbers:</span>
|
||||
<span class="text-sigil-numbers"></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="font-bold md:inline block">Digital root:</span>
|
||||
<span class="text-sigil-root"></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="font-bold md:inline block">The final grid:</span>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<div class="wompum-container wompum-container--demo h-48 mb-8">
|
||||
<div class="wompum-grid h-full"
|
||||
data-text="{{ .Site.Title}}"
|
||||
data-columns="5"
|
||||
data-rows="3">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.wompum-container--demo {
|
||||
overflow: hidden;
|
||||
}
|
||||
.wompum-container--demo .wompum-cell {
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 2em;
|
||||
color: #fff;
|
||||
}
|
||||
.wompum-container--demo .wompum-cell::after {
|
||||
content: attr(data-sigil-digit);
|
||||
font-size: 0.5em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
// call function on page load
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const input = document.querySelector('.wompum-demo input');
|
||||
updateWompumDemo(input.value);
|
||||
});
|
||||
|
||||
function updateWompumDemoGrid(text) {
|
||||
|
||||
updateWompumDemo(text);
|
||||
|
||||
// Update grid
|
||||
const grid = document.querySelector('.wompum-demo .wompum-grid');
|
||||
grid.dataset.text = text;
|
||||
|
||||
// Remove existing grid
|
||||
while (grid.firstChild) {
|
||||
grid.firstChild.remove();
|
||||
}
|
||||
|
||||
// Reinitialize grid
|
||||
new WompumGrid(grid).init();
|
||||
}
|
||||
|
||||
function updateWompumDemo(text) {
|
||||
// Update displays
|
||||
document.querySelector('.text-input-display').textContent = text;
|
||||
document.querySelector('.text-cleaned-display').textContent = text.toLowerCase().replace(/[^a-z]/g, '');
|
||||
document.querySelector('.text-consonants-display').textContent = text.toLowerCase().replace(/[^a-z]/g, '').replace(/[aeiou]/g, '');
|
||||
|
||||
const uniqueConsonants = [...new Set(text.toLowerCase().replace(/[^a-z]/g, '').replace(/[aeiou]/g, ''))].join('');
|
||||
document.querySelector('.text-unique-display').textContent = uniqueConsonants;
|
||||
|
||||
// Show character to number conversion
|
||||
const charNumbers = [...uniqueConsonants].map(char => char.charCodeAt(0)).join(', ');
|
||||
document.querySelector('.text-sigil-numbers').textContent = charNumbers;
|
||||
|
||||
// Show digital root calculation
|
||||
const sigilArray = Sigil.generate(text);
|
||||
document.querySelector('.text-sigil-root').textContent = sigilArray.join(', ');
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
</div>
|
@ -1,12 +0,0 @@
|
||||
{{ define "main" }}
|
||||
<h1 class="text-2xl font-bold">Topic: {{ .Title }}</h1>
|
||||
<ul class="mt-4 space-y-4">
|
||||
{{ range .Pages }}
|
||||
<li>
|
||||
<a href="{{ .RelPermalink }}" class="text-lg font-semibold hover:underline">
|
||||
{{ .Title }}
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
2696
package-lock.json
generated
24
package.json
@ -1,26 +1,8 @@
|
||||
{
|
||||
"comments": {
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/typography": "hugo-starter-tailwind-basic",
|
||||
"autoprefixer": "hugo-starter-tailwind-basic",
|
||||
"postcss": "hugo-starter-tailwind-basic",
|
||||
"postcss-cli": "hugo-starter-tailwind-basic",
|
||||
"postcss-purgecss": "hugo-starter-tailwind-basic",
|
||||
"tailwindcss": "hugo-starter-tailwind-basic"
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/typography": "^0.4.1",
|
||||
"autoprefixer": "^10.3.1",
|
||||
"postcss": "^8.3.6",
|
||||
"postcss-cli": "^8.3.1",
|
||||
"postcss-purgecss": "^2.0.3",
|
||||
"tailwindcss": "^2.2.7"
|
||||
},
|
||||
"scripts": {
|
||||
"build:css": "postcss assets/css/tailwind.css -o static/css/tailwind.css",
|
||||
"watch:css": "postcss assets/css/tailwind.css -o static/css/tailwind.css --watch"
|
||||
"@tailwindcss/cli": "^4.0.0",
|
||||
"tailwindcss": "^4.0.0",
|
||||
"@tailwindcss/typography": "^0.5.16"
|
||||
},
|
||||
"name": "protocol-oral-history-project",
|
||||
"version": "0.1.0"
|
||||
|
@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
},
|
||||
};
|
BIN
static/images/og-default.jpg
Normal file
After Width: | Height: | Size: 66 KiB |
@ -1,149 +0,0 @@
|
||||
class WompumGrid {
|
||||
constructor(element, metadata) {
|
||||
this.gridElement = element;
|
||||
this.metadata = metadata;
|
||||
this.gridSize = {
|
||||
columns: parseInt(element.dataset.columns) || 7,
|
||||
rows: parseInt(element.dataset.rows) || 5
|
||||
};
|
||||
|
||||
// Set grid template columns based on data attribute or default
|
||||
this.gridElement.style.gridTemplateColumns = `repeat(${this.gridSize.columns}, 1fr)`;
|
||||
|
||||
// Generate sigils for each metadata component
|
||||
this.sigils = {
|
||||
narrator: Sigil.generate(metadata.narrator),
|
||||
subject: Sigil.generate(metadata.subject),
|
||||
facilitator: Sigil.generate(metadata.facilitator)
|
||||
};
|
||||
|
||||
// Initialize color calculator
|
||||
this.colorCalculator = new ColorCalculator();
|
||||
|
||||
// Store sigils as data attributes for future use
|
||||
this.gridElement.dataset.narratorSigil = JSON.stringify(this.sigils.narrator);
|
||||
this.gridElement.dataset.subjectSigil = JSON.stringify(this.sigils.subject);
|
||||
this.gridElement.dataset.facilitatorSigil = JSON.stringify(this.sigils.facilitator);
|
||||
}
|
||||
|
||||
// Get sigil digit for a cell based on its section and position
|
||||
getSigilDigit(section, position) {
|
||||
const sigil = this.sigils[section];
|
||||
if (!sigil || !sigil.length) return 0;
|
||||
return sigil[position % sigil.length];
|
||||
}
|
||||
|
||||
// Get influences from adjacent cells
|
||||
getInfluences(column, row) {
|
||||
const influences = [];
|
||||
|
||||
// Check adjacent cells (up, down, left, right)
|
||||
const adjacentPositions = [
|
||||
[column, row - 1], // up
|
||||
[column, row + 1], // down
|
||||
[column - 1, row], // left
|
||||
[column + 1, row] // right
|
||||
];
|
||||
|
||||
for (const [adjCol, adjRow] of adjacentPositions) {
|
||||
if (adjCol >= 0 && adjCol < this.gridSize.columns &&
|
||||
adjRow >= 0 && adjRow < this.gridSize.rows) {
|
||||
const cell = this.gridElement.querySelector(
|
||||
`[data-column="${adjCol}"][data-row="${adjRow}"]`
|
||||
);
|
||||
if (cell && cell.dataset.sigilDigit) {
|
||||
influences.push(parseInt(cell.dataset.sigilDigit));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return influences;
|
||||
}
|
||||
|
||||
// Apply metadata-based design to the grid
|
||||
applyMetadataDesign() {
|
||||
const cells = this.gridElement.querySelectorAll('.wompum-cell');
|
||||
|
||||
cells.forEach(cell => {
|
||||
const section = cell.dataset.section;
|
||||
const column = parseInt(cell.dataset.column);
|
||||
const row = parseInt(cell.dataset.row);
|
||||
|
||||
// Get sigil digit for this cell
|
||||
const sigilDigit = this.getSigilDigit(section, row);
|
||||
cell.dataset.sigilDigit = sigilDigit;
|
||||
|
||||
// Get influences from adjacent cells
|
||||
const influences = this.getInfluences(column, row);
|
||||
|
||||
// Calculate and apply color
|
||||
const color = this.colorCalculator.getColor(sigilDigit, influences);
|
||||
cell.style.backgroundColor = color;
|
||||
});
|
||||
}
|
||||
|
||||
// Initialize the grid
|
||||
init() {
|
||||
if (!this.gridElement) return;
|
||||
this.createGrid();
|
||||
this.applyMetadataDesign();
|
||||
this.setGridAreas();
|
||||
}
|
||||
|
||||
// Define grid areas for each section
|
||||
setGridAreas() {
|
||||
const totalColumns = this.gridSize.columns;
|
||||
const narratorColumns = 2;
|
||||
const facilitatorColumns = 2;
|
||||
const subjectColumns = totalColumns - narratorColumns - facilitatorColumns;
|
||||
|
||||
this.gridElement.style.gridTemplateAreas = `
|
||||
"narrator subject facilitator"
|
||||
`;
|
||||
// this.gridElement.style.gridTemplateColumns = `${narratorColumns}fr ${subjectColumns}fr ${facilitatorColumns}fr`;
|
||||
}
|
||||
|
||||
// Create the grid cells with position awareness
|
||||
createGrid() {
|
||||
const totalCells = this.gridSize.columns * this.gridSize.rows;
|
||||
|
||||
for (let i = 0; i < totalCells; i++) {
|
||||
const cell = document.createElement('div');
|
||||
const column = i % this.gridSize.columns;
|
||||
const row = Math.floor(i / this.gridSize.columns);
|
||||
|
||||
// Determine which section this cell belongs to
|
||||
let section;
|
||||
if (column < 2) section = 'narrator';
|
||||
else if (column >= this.gridSize.columns - 2) section = 'facilitator';
|
||||
else section = 'subject';
|
||||
|
||||
cell.className = 'wompum-cell';
|
||||
cell.setAttribute('data-cell-index', i);
|
||||
cell.setAttribute('data-section', section);
|
||||
cell.setAttribute('data-column', column);
|
||||
cell.setAttribute('data-row', row);
|
||||
|
||||
this.gridElement.appendChild(cell);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for DOM to be ready
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Find all grid elements
|
||||
const gridElements = document.querySelectorAll('.wompum-grid');
|
||||
|
||||
// Initialize a grid for each element found
|
||||
gridElements.forEach(element => {
|
||||
let metadata = {};
|
||||
try {
|
||||
metadata = JSON.parse(element.dataset.metadata || '{}');
|
||||
} catch (e) {
|
||||
console.error('Error parsing metadata for grid:', e);
|
||||
}
|
||||
|
||||
const wompum = new WompumGrid(element, metadata);
|
||||
wompum.init();
|
||||
});
|
||||
});
|
@ -1,18 +1,8 @@
|
||||
module.exports = {
|
||||
content: [
|
||||
'./layouts/**/*.html',
|
||||
'./content/**/*.md',
|
||||
'./assets/scss/**/*.scss',
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
fontFamily: {
|
||||
'garamond': ['EB Garamond 12', 'serif'],
|
||||
'iosevka': ['Iosevka', 'monospace'],
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
require('@tailwindcss/typography'),
|
||||
],
|
||||
};
|
||||
/*
|
||||
This file is present to satisy a requiremenet of the Tailwind CSS IntelliSense
|
||||
extension for Visual Studio Code.
|
||||
|
||||
https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss
|
||||
|
||||
The rest of this file is intentionally empty.
|
||||
*/
|
||||
|
@ -1,4 +0,0 @@
|
||||
node_modules/
|
||||
public/
|
||||
resources/
|
||||
.hugo_build.lock
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"autoHide.autoHidePanel": false
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Bjørn Erik Pedersen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -1,58 +0,0 @@
|
||||
# Hugo Basic Starter for TailwindCSS v3.x
|
||||
|
||||
[](https://app.netlify.com/sites/lucid-nightingale-60a4e2/deploys)
|
||||
|
||||
A very simple starter set up with [TailwindCSS](https://tailwindcss.com/) and its [typography plugin](https://tailwindcss.com/docs/typography-plugin) and a build setup using [PostCSS](https://postcss.org/) and PurgeCSS (when running the production build).
|
||||
|
||||
In the preview deployment on Netlify it currently has a 100 score on both mobile and desktop on [Google PageSpeed](https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Flucid-nightingale-60a4e2.netlify.app%2F&tab=mobile).
|
||||
|
||||
|
||||
This setup can be used both as a starter project and a theme.
|
||||
|
||||
## As a Project
|
||||
|
||||
```bash
|
||||
npm install
|
||||
hugo server
|
||||
```
|
||||
|
||||
## As a Theme
|
||||
|
||||
Import `github.com/bep/hugo-starter-tailwind-basic/v3` (use `github.com/bep/hugo-starter-tailwind-basic/v2` if you want/need Tailwind 2.x.) into your project, and then run:
|
||||
|
||||
```bash
|
||||
hugo mod npm pack
|
||||
npm install
|
||||
```
|
||||
|
||||
You need to add (something like) this to your `hugo.toml`:
|
||||
|
||||
```toml
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = false
|
||||
min = "0.112.0"
|
||||
[[module.mounts]]
|
||||
source = "assets"
|
||||
target = "assets"
|
||||
[[module.mounts]]
|
||||
source = "hugo_stats.json"
|
||||
target = "assets/watching/hugo_stats.json"
|
||||
|
||||
[build]
|
||||
writeStats = true
|
||||
[[build.cachebusters]]
|
||||
source = "assets/watching/hugo_stats\\.json"
|
||||
target = "styles\\.css"
|
||||
[[build.cachebusters]]
|
||||
source = "(postcss|tailwind)\\.config\\.js"
|
||||
target = "css"
|
||||
[[build.cachebusters]]
|
||||
source = "assets/.*\\.(js|ts|jsx|tsx)"
|
||||
target = "js"
|
||||
[[build.cachebusters]]
|
||||
source = "assets/.*\\.(.*)$"
|
||||
target = "$1"
|
||||
```
|
||||
|
||||
Then run your project as usual.
|
@ -1 +0,0 @@
|
||||
@import "buttons.css";
|
@ -1,15 +0,0 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@import "components/all.css";
|
||||
|
||||
html {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@screen md {
|
||||
html {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
@ -1,311 +0,0 @@
|
||||
---
|
||||
title: TailwindCSS Basic Hugo Starter
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
### Philosophy
|
||||
|
||||
Markdown is intended to be as easy-to-read and easy-to-write as is feasible.
|
||||
|
||||
Readability, however, is emphasized above all else. A Markdown-formatted
|
||||
document should be publishable as-is, as plain text, without looking
|
||||
like it's been marked up with tags or formatting instructions. While
|
||||
Markdown's syntax has been influenced by several existing text-to-HTML
|
||||
filters -- including [Setext](http://docutils.sourceforge.net/mirror/setext.html), [atx](http://www.aaronsw.com/2002/atx/), [Textile](http://textism.com/tools/textile/), [reStructuredText](http://docutils.sourceforge.net/rst.html),
|
||||
[Grutatext](http://www.triptico.com/software/grutatxt.html), and [EtText](http://ettext.taint.org/doc/) -- the single biggest source of
|
||||
inspiration for Markdown's syntax is the format of plain text email.
|
||||
|
||||
```go
|
||||
// New creates a new Workers with the given number of workers.
|
||||
func New(numWorkers int) *Workers {
|
||||
return &Workers{
|
||||
sem: make(chan struct{}, numWorkers),
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Block Elements
|
||||
|
||||
### Paragraphs and Line Breaks
|
||||
|
||||
A paragraph is simply one or more consecutive lines of text, separated
|
||||
by one or more blank lines. (A blank line is any line that looks like a
|
||||
blank line -- a line containing nothing but spaces or tabs is considered
|
||||
blank.) Normal paragraphs should not be indented with spaces or tabs.
|
||||
|
||||
The implication of the "one or more consecutive lines of text" rule is
|
||||
that Markdown supports "hard-wrapped" text paragraphs. This differs
|
||||
significantly from most other text-to-HTML formatters (including Movable
|
||||
Type's "Convert Line Breaks" option) which translate every line break
|
||||
character in a paragraph into a `<br />` tag.
|
||||
|
||||
When you *do* want to insert a `<br />` break tag using Markdown, you
|
||||
end a line with two or more spaces, then type return.
|
||||
|
||||
### Headers
|
||||
|
||||
Markdown supports two styles of headers, [Setext] [1] and [atx] [2].
|
||||
|
||||
|
||||
```go
|
||||
// Require loads a module the Node.js way.
|
||||
// Note that this requires that the require function is present;
|
||||
// if in the browser, and not in Node.js, try Browserify.
|
||||
func Require(path ...string) *ReactComponent {
|
||||
m, err := support.Require(path...)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &ReactComponent{node: m, needsCreate: true}
|
||||
}
|
||||
```
|
||||
|
||||
Optionally, you may "close" atx-style headers. This is purely
|
||||
cosmetic -- you can use this if you think it looks better. The
|
||||
closing hashes don't even need to match the number of hashes
|
||||
used to open the header. (The number of opening hashes
|
||||
determines the header level.)
|
||||
|
||||
|
||||
### Blockquotes
|
||||
|
||||
Markdown uses email-style `>` characters for blockquoting. If you're
|
||||
familiar with quoting passages of text in an email message, then you
|
||||
know how to create a blockquote in Markdown. It looks best if you hard
|
||||
wrap the text and put a `>` before every line:
|
||||
|
||||
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
|
||||
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
|
||||
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
|
||||
>
|
||||
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
|
||||
> id sem consectetuer libero luctus adipiscing.
|
||||
|
||||
Markdown allows you to be lazy and only put the `>` before the first
|
||||
line of a hard-wrapped paragraph:
|
||||
|
||||
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
|
||||
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
|
||||
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
|
||||
|
||||
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
|
||||
id sem consectetuer libero luctus adipiscing.
|
||||
|
||||
Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by
|
||||
adding additional levels of `>`:
|
||||
|
||||
> This is the first level of quoting.
|
||||
>
|
||||
> > This is nested blockquote.
|
||||
>
|
||||
> Back to the first level.
|
||||
|
||||
Blockquotes can contain other Markdown elements, including headers, lists,
|
||||
and code blocks:
|
||||
|
||||
> ## This is a header.
|
||||
>
|
||||
> 1. This is the first list item.
|
||||
> 2. This is the second list item.
|
||||
>
|
||||
> Here's some example code:
|
||||
>
|
||||
> return shell_exec("echo $input | $markdown_script");
|
||||
|
||||
Any decent text editor should make email-style quoting easy. For
|
||||
example, with BBEdit, you can make a selection and choose Increase
|
||||
Quote Level from the Text menu.
|
||||
|
||||
|
||||
### Lists
|
||||
|
||||
Markdown supports ordered (numbered) and unordered (bulleted) lists.
|
||||
|
||||
Unordered lists use asterisks, pluses, and hyphens -- interchangably
|
||||
-- as list markers:
|
||||
|
||||
* Red
|
||||
* Green
|
||||
* Blue
|
||||
|
||||
is equivalent to:
|
||||
|
||||
+ Red
|
||||
+ Green
|
||||
+ Blue
|
||||
|
||||
and:
|
||||
|
||||
- Red
|
||||
- Green
|
||||
- Blue
|
||||
|
||||
Ordered lists use numbers followed by periods:
|
||||
|
||||
1. Bird
|
||||
2. McHale
|
||||
3. Parish
|
||||
|
||||
It's important to note that the actual numbers you use to mark the
|
||||
list have no effect on the HTML output Markdown produces. The HTML
|
||||
Markdown produces from the above list is:
|
||||
|
||||
If you instead wrote the list in Markdown like this:
|
||||
|
||||
1. Bird
|
||||
1. McHale
|
||||
1. Parish
|
||||
|
||||
or even:
|
||||
|
||||
3. Bird
|
||||
1. McHale
|
||||
8. Parish
|
||||
|
||||
you'd get the exact same HTML output. The point is, if you want to,
|
||||
you can use ordinal numbers in your ordered Markdown lists, so that
|
||||
the numbers in your source match the numbers in your published HTML.
|
||||
But if you want to be lazy, you don't have to.
|
||||
|
||||
To make lists look nice, you can wrap items with hanging indents:
|
||||
|
||||
* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
|
||||
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
|
||||
viverra nec, fringilla in, laoreet vitae, risus.
|
||||
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
|
||||
Suspendisse id sem consectetuer libero luctus adipiscing.
|
||||
|
||||
But if you want to be lazy, you don't have to:
|
||||
|
||||
* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
|
||||
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
|
||||
viverra nec, fringilla in, laoreet vitae, risus.
|
||||
* Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
|
||||
Suspendisse id sem consectetuer libero luctus adipiscing.
|
||||
|
||||
List items may consist of multiple paragraphs. Each subsequent
|
||||
paragraph in a list item must be indented by either 4 spaces
|
||||
or one tab:
|
||||
|
||||
1. This is a list item with two paragraphs. Lorem ipsum dolor
|
||||
sit amet, consectetuer adipiscing elit. Aliquam hendrerit
|
||||
mi posuere lectus.
|
||||
|
||||
Vestibulum enim wisi, viverra nec, fringilla in, laoreet
|
||||
vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
|
||||
sit amet velit.
|
||||
|
||||
2. Suspendisse id sem consectetuer libero luctus adipiscing.
|
||||
|
||||
It looks nice if you indent every line of the subsequent
|
||||
paragraphs, but here again, Markdown will allow you to be
|
||||
lazy:
|
||||
|
||||
* This is a list item with two paragraphs.
|
||||
|
||||
This is the second paragraph in the list item. You're
|
||||
only required to indent the first line. Lorem ipsum dolor
|
||||
sit amet, consectetuer adipiscing elit.
|
||||
|
||||
* Another item in the same list.
|
||||
|
||||
To put a blockquote within a list item, the blockquote's `>`
|
||||
delimiters need to be indented:
|
||||
|
||||
* A list item with a blockquote:
|
||||
|
||||
> This is a blockquote
|
||||
> inside a list item.
|
||||
|
||||
To put a code block within a list item, the code block needs
|
||||
to be indented *twice* -- 8 spaces or two tabs:
|
||||
|
||||
* A list item with a code block:
|
||||
|
||||
<code goes here>
|
||||
|
||||
### Code Blocks
|
||||
|
||||
Pre-formatted code blocks are used for writing about programming or
|
||||
markup source code. Rather than forming normal paragraphs, the lines
|
||||
of a code block are interpreted literally. Markdown wraps a code block
|
||||
in both `<pre>` and `<code>` tags.
|
||||
|
||||
To produce a code block in Markdown, simply indent every line of the
|
||||
block by at least 4 spaces or 1 tab.
|
||||
|
||||
This is a normal paragraph:
|
||||
|
||||
This is a code block.
|
||||
|
||||
Here is an example of AppleScript:
|
||||
|
||||
tell application "Foo"
|
||||
beep
|
||||
end tell
|
||||
|
||||
A code block continues until it reaches a line that is not indented
|
||||
(or the end of the article).
|
||||
|
||||
Within a code block, ampersands (`&`) and angle brackets (`<` and `>`)
|
||||
are automatically converted into HTML entities. This makes it very
|
||||
easy to include example HTML source code using Markdown -- just paste
|
||||
it and indent it, and Markdown will handle the hassle of encoding the
|
||||
ampersands and angle brackets. For example, this:
|
||||
|
||||
<div class="footer">
|
||||
© 2004 Foo Corporation
|
||||
</div>
|
||||
|
||||
Regular Markdown syntax is not processed within code blocks. E.g.,
|
||||
asterisks are just literal asterisks within a code block. This means
|
||||
it's also easy to use Markdown to write about Markdown's own syntax.
|
||||
|
||||
```
|
||||
tell application "Foo"
|
||||
beep
|
||||
end tell
|
||||
```
|
||||
|
||||
## Span Elements
|
||||
|
||||
### Links
|
||||
|
||||
Markdown supports two style of links: *inline* and *reference*.
|
||||
|
||||
In both styles, the link text is delimited by [square brackets].
|
||||
|
||||
To create an inline link, use a set of regular parentheses immediately
|
||||
after the link text's closing square bracket. Inside the parentheses,
|
||||
put the URL where you want the link to point, along with an *optional*
|
||||
title for the link, surrounded in quotes. For example:
|
||||
|
||||
This is [an example](http://example.com/) inline link.
|
||||
|
||||
[This link](http://example.net/) has no title attribute.
|
||||
|
||||
### Emphasis
|
||||
|
||||
Markdown treats asterisks (`*`) and underscores (`_`) as indicators of
|
||||
emphasis. Text wrapped with one `*` or `_` will be wrapped with an
|
||||
HTML `<em>` tag; double `*`'s or `_`'s will be wrapped with an HTML
|
||||
`<strong>` tag. E.g., this input:
|
||||
|
||||
*single asterisks*
|
||||
|
||||
_single underscores_
|
||||
|
||||
**double asterisks**
|
||||
|
||||
__double underscores__
|
||||
|
||||
### Code
|
||||
|
||||
To indicate a span of code, wrap it with backtick quotes (`` ` ``).
|
||||
Unlike a pre-formatted code block, a code span indicates code within a
|
||||
normal paragraph. For example:
|
||||
|
||||
Use the `printf()` function.
|
@ -1,3 +0,0 @@
|
||||
module github.com/bep/hugo-starter-tailwind-basic/v3
|
||||
|
||||
go 1.19
|
@ -1,29 +0,0 @@
|
||||
baseURL = "https://example.org"
|
||||
|
||||
disableKinds = ["page", "section", "taxonomy", "term"]
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = false
|
||||
min = "0.112.0"
|
||||
[[module.mounts]]
|
||||
source = "assets"
|
||||
target = "assets"
|
||||
[[module.mounts]]
|
||||
source = "hugo_stats.json"
|
||||
target = "assets/watching/hugo_stats.json"
|
||||
|
||||
[build]
|
||||
writeStats = true
|
||||
[[build.cachebusters]]
|
||||
source = "assets/watching/hugo_stats\\.json"
|
||||
target = "styles\\.css"
|
||||
[[build.cachebusters]]
|
||||
source = "(postcss|tailwind)\\.config\\.js"
|
||||
target = "css"
|
||||
[[build.cachebusters]]
|
||||
source = "assets/.*\\.(js|ts|jsx|tsx)"
|
||||
target = "js"
|
||||
[[build.cachebusters]]
|
||||
source = "assets/.*\\.(.*)$"
|
||||
target = "$1"
|
@ -1,23 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>
|
||||
{{ .Title }}
|
||||
</title>
|
||||
<meta name="description" content="{{ .Description }}" />
|
||||
{{/* styles */}}
|
||||
{{ $options := dict "inlineImports" true }}
|
||||
{{ $styles := resources.Get "css/styles.css" }}
|
||||
{{ $styles = $styles | resources.PostCSS $options }}
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $styles = $styles | minify | fingerprint | resources.PostProcess }}
|
||||
{{ end }}
|
||||
<link href="{{ $styles.RelPermalink }}" rel="stylesheet" />
|
||||
</head>
|
||||
<body class="my-10">
|
||||
<div class="container px-4 lg:mx-auto">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,13 +0,0 @@
|
||||
{{ define "main" }}
|
||||
<article class="prose lg:prose-xl">
|
||||
<h1>Tailwind 3 Hugo Starter</h1>
|
||||
|
||||
<h2 class="text-4xl">Testing Tailwind 3 Features</h2>
|
||||
<div>
|
||||
<button class="bg-[green] p-4">Share on Twitter</button>
|
||||
</div>
|
||||
|
||||
<h2 class="text-4xl">Markdowns: {{ .Title }}</h2>
|
||||
{{ .Content }}..
|
||||
</article>
|
||||
{{ end }}
|
@ -1,58 +0,0 @@
|
||||
[build]
|
||||
publish = "public"
|
||||
command = "hugo --gc --minify -d public;"
|
||||
|
||||
[context.production.environment]
|
||||
HUGO_VERSION = "0.112.0"
|
||||
|
||||
[context.branch-deploy]
|
||||
command = "hugo --minify --gc -d public -b $DEPLOY_PRIME_URL"
|
||||
|
||||
[context.branch-deploy.environment]
|
||||
HUGO_VERSION = "0.112.0"
|
||||
|
||||
[context.deploy-preview]
|
||||
command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL"
|
||||
|
||||
[context.deploy-preview.environment]
|
||||
HUGO_VERSION = "0.112.0"
|
||||
|
||||
[[headers]]
|
||||
for = "/*.jpg"
|
||||
|
||||
[headers.values]
|
||||
Cache-Control = "public, max-age=604800"
|
||||
|
||||
[[headers]]
|
||||
for = "/*.png"
|
||||
|
||||
[headers.values]
|
||||
Cache-Control = "public, max-age=604800"
|
||||
|
||||
[[headers]]
|
||||
for = "/*.css"
|
||||
|
||||
[headers.values]
|
||||
Cache-Control = "public, max-age=604800"
|
||||
|
||||
[[headers]]
|
||||
for = "/*.js"
|
||||
|
||||
[headers.values]
|
||||
Cache-Control = "public, max-age=604800"
|
||||
|
||||
[[headers]]
|
||||
for = "/webfonts/*"
|
||||
|
||||
[headers.values]
|
||||
Cache-Control = "public, max-age=604800"
|
||||
|
||||
[[headers]]
|
||||
for = "/*"
|
||||
|
||||
[headers.values]
|
||||
X-Frame-Options = "DENY"
|
||||
X-XSS-Protection = "1; mode=block"
|
||||
X-Content-Type-Options = "nosniff"
|
||||
Referrer-Policy = "no-referrer"
|
||||
Content-Security-Policy = "script-src 'self' 'unsafe-inline'"
|
2842
themes/hugo-starter-tailwind-basic/package-lock.json
generated
@ -1,18 +0,0 @@
|
||||
{
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/bep/hugo-starter-tailwind-basic.git"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/typography": "^0.4.1",
|
||||
"autoprefixer": "^10.3.1",
|
||||
"postcss": "^8.3.6",
|
||||
"postcss-cli": "^8.3.1",
|
||||
"postcss-purgecss": "^2.0.3",
|
||||
"tailwindcss": "^2.2.7"
|
||||
},
|
||||
"name": "hugo-starter-tailwind-basic",
|
||||
"version": "0.1.0"
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
{
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/bep/hugo-starter-tailwind-basic.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/typography": "^0.5.9",
|
||||
"autoprefixer": "^10.4.14",
|
||||
"postcss": "^8.4.23",
|
||||
"postcss-cli": "^10.1.0",
|
||||
"tailwindcss": "^3.3.2"
|
||||
},
|
||||
"name": "hugo-starter-tailwind-basic",
|
||||
"version": "0.1.0"
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
let tailwindConfig = process.env.HUGO_FILE_TAILWIND_CONFIG_JS || './tailwind.config.js';
|
||||
const tailwind = require('tailwindcss')(tailwindConfig);
|
||||
const autoprefixer = require('autoprefixer');
|
||||
|
||||
module.exports = {
|
||||
// eslint-disable-next-line no-process-env
|
||||
plugins: [tailwind, ...(process.env.HUGO_ENVIRONMENT === 'production' ? [autoprefixer] : [])],
|
||||
};
|
@ -1,6 +0,0 @@
|
||||
const typography = require('@tailwindcss/typography');
|
||||
|
||||
module.exports = {
|
||||
content: ['./hugo_stats.json'],
|
||||
plugins: [typography],
|
||||
};
|