consolidate offshoot projects into main domain
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Hugo artifacts
|
||||
.hugo_build.lock
|
||||
**/*.hugo/public
|
||||
**/_gen
|
4
deploy
|
@ -1,2 +1,4 @@
|
|||
#!/bin/bash
|
||||
rsync -avz --delete public/ a@trwnh.com:/srv/http/trwnh.com
|
||||
rsync -avz --delete public/ a@trwnh.com:/srv/http/trwnh.com \
|
||||
--exclude=wiki \
|
||||
--exclude=blog
|
||||
|
|
3
hugo/.gitignore
vendored
|
@ -1,3 +0,0 @@
|
|||
**/public
|
||||
**/_gen
|
||||
.hugo_build.lock
|
Before Width: | Height: | Size: 755 KiB After Width: | Height: | Size: 755 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 143 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
@ -35,9 +35,11 @@
|
|||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<article>
|
||||
<article class="h-entry">
|
||||
<header>
|
||||
<h1>fedi vs web</h1>
|
||||
<p>on the distinction between social network and social web, where activitypub straddles both</p>
|
||||
<p>published around <time datetime="2024-09-25">2024-09-25</time></p>
|
||||
</header>
|
||||
<section>
|
||||
<h2>the disconnect between activitypub and the fediverse</h2>
|
||||
|
|
6
threads.hugo/archetypes/default.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
15
threads.hugo/assets/scripts/main.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
Use a window's inner dimensions for viewport units.
|
||||
This fixes some mobile bugs
|
||||
*/
|
||||
|
||||
var root = document.documentElement;
|
||||
let vh = window.innerHeight * 0.01;
|
||||
root.style.setProperty('--vh', `${vh}px`);
|
||||
|
||||
// We listen to the resize event
|
||||
window.addEventListener('resize', () => {
|
||||
// We execute the same script as before
|
||||
let vh = window.innerHeight * 0.01;
|
||||
root.style.setProperty('--vh', `${vh}px`);
|
||||
});
|
225
threads.hugo/assets/scripts/search.js
Normal file
|
@ -0,0 +1,225 @@
|
|||
/*
|
||||
tutorials used:
|
||||
- https://aaronluna.dev/blog/add-search-to-static-site-lunrjs-hugo-vanillajs/#codepen-with-final-code
|
||||
- https://victoria.dev/blog/add-search-to-hugo-static-sites-with-lunr/
|
||||
*/
|
||||
|
||||
let pagesIndex, searchIndex
|
||||
const MAX_SUMMARY_LENGTH = 30
|
||||
const SENTENCE_BOUNDARY_REGEX = /\b\.\s/gm
|
||||
const WORD_REGEX = /\b(\w*)[\W|\s|\b]?/gm
|
||||
|
||||
async function initSearch() {
|
||||
try {
|
||||
const response = await fetch("/index.json");
|
||||
pagesIndex = await response.json();
|
||||
searchIndex = lunr(function () {
|
||||
this.field("title");
|
||||
this.field("content");
|
||||
this.ref("href");
|
||||
pagesIndex.forEach((page) => this.add(page));
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
console.log("Search index initialized")
|
||||
// Get the query parameter(s)
|
||||
const params = new URLSearchParams(window.location.search)
|
||||
const query = params.get('query')
|
||||
|
||||
// Perform a search if there is a query
|
||||
if (query) {
|
||||
// Retain the search input in the form when displaying results
|
||||
document.getElementById('search-input').setAttribute('value', query)
|
||||
|
||||
// Update the list with results
|
||||
console.log("search performed")
|
||||
let results = searchSite(query)
|
||||
renderSearchResults(query, results)
|
||||
}
|
||||
}
|
||||
|
||||
initSearch();
|
||||
|
||||
function searchSite(query) {
|
||||
const originalQuery = query;
|
||||
query = getLunrSearchQuery(query);
|
||||
let results = getSearchResults(query);
|
||||
return results.length
|
||||
? results
|
||||
: query !== originalQuery
|
||||
? getSearchResults(originalQuery)
|
||||
: [];
|
||||
}
|
||||
|
||||
function getLunrSearchQuery(query) {
|
||||
const searchTerms = query.split(" ");
|
||||
if (searchTerms.length === 1) {
|
||||
return query;
|
||||
}
|
||||
query = "";
|
||||
for (const term of searchTerms) {
|
||||
query += `+${term} `;
|
||||
}
|
||||
return query.trim();
|
||||
}
|
||||
|
||||
function getSearchResults(query) {
|
||||
return searchIndex.search(query).flatMap((hit) => {
|
||||
if (hit.ref == "undefined") return [];
|
||||
let pageMatch = pagesIndex.filter((page) => page.href === hit.ref)[0];
|
||||
pageMatch.score = hit.score;
|
||||
return [pageMatch];
|
||||
});
|
||||
}
|
||||
|
||||
function renderSearchResults(query, results) {
|
||||
clearSearchResults();
|
||||
updateSearchResults(query, results);
|
||||
}
|
||||
|
||||
function clearSearchResults() {
|
||||
const results = document.querySelector("#search-results");
|
||||
while (results.firstChild) results.removeChild(results.firstChild);
|
||||
}
|
||||
|
||||
function updateSearchResults(query, results) {
|
||||
document.getElementById("results-query").innerHTML = query;
|
||||
document.querySelector("#search-results").innerHTML = results
|
||||
.map(
|
||||
(hit) => `
|
||||
<li class="search-result-item" data-score="${hit.score.toFixed(2)}">
|
||||
<a href="${hit.href}" class="search-result-page-title">${createTitleBlurb(query, hit.title)}</a>
|
||||
<p>${createSearchResultBlurb(query, hit.content)}</p>
|
||||
</li>
|
||||
`
|
||||
)
|
||||
.join("");
|
||||
const searchResultListItems = document.querySelectorAll("#search-results li");
|
||||
document.getElementById("results-count").innerHTML = searchResultListItems.length;
|
||||
document.getElementById("results-count-text").innerHTML = searchResultListItems.length === 1 ? "result" : "results";
|
||||
// searchResultListItems.forEach(
|
||||
// (li) => (li.firstElementChild.style.color = getColorForSearchResult(li.dataset.score))
|
||||
// );
|
||||
}
|
||||
|
||||
function createTitleBlurb(query, title) {
|
||||
const searchQueryRegex = new RegExp(createQueryStringRegex(query), "gmi");
|
||||
return title.replace(
|
||||
searchQueryRegex,
|
||||
"<strong>$&</strong>"
|
||||
)
|
||||
}
|
||||
|
||||
function createSearchResultBlurb(query, pageContent) {
|
||||
const searchQueryRegex = new RegExp(createQueryStringRegex(query), "gmi");
|
||||
const searchQueryHits = Array.from(
|
||||
pageContent.matchAll(searchQueryRegex),
|
||||
(m) => m.index
|
||||
);
|
||||
const sentenceBoundaries = Array.from(
|
||||
pageContent.matchAll(SENTENCE_BOUNDARY_REGEX),
|
||||
(m) => m.index
|
||||
);
|
||||
let searchResultText = "";
|
||||
let lastEndOfSentence = 0;
|
||||
for (const hitLocation of searchQueryHits) {
|
||||
if (hitLocation > lastEndOfSentence) {
|
||||
for (let i = 0; i < sentenceBoundaries.length; i++) {
|
||||
if (sentenceBoundaries[i] > hitLocation) {
|
||||
const startOfSentence = i > 0 ? sentenceBoundaries[i - 1] + 1 : 0;
|
||||
const endOfSentence = sentenceBoundaries[i];
|
||||
lastEndOfSentence = endOfSentence;
|
||||
parsedSentence = pageContent.slice(startOfSentence, endOfSentence).trim();
|
||||
searchResultText += `${parsedSentence} ... `;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
const searchResultWords = tokenize(searchResultText);
|
||||
const pageBreakers = searchResultWords.filter((word) => word.length > 50);
|
||||
if (pageBreakers.length > 0) {
|
||||
searchResultText = fixPageBreakers(searchResultText, pageBreakers);
|
||||
}
|
||||
if (searchResultWords.length >= MAX_SUMMARY_LENGTH) break;
|
||||
}
|
||||
return ellipsize(searchResultText, MAX_SUMMARY_LENGTH).replace(
|
||||
searchQueryRegex,
|
||||
"<strong>$&</strong>"
|
||||
);
|
||||
}
|
||||
|
||||
function createQueryStringRegex(query) {
|
||||
const searchTerms = query.split(" ");
|
||||
if (searchTerms.length == 1) {
|
||||
return query;
|
||||
}
|
||||
query = "";
|
||||
for (const term of searchTerms) {
|
||||
query += `${term}|`;
|
||||
}
|
||||
query = query.slice(0, -1);
|
||||
return `(${query})`;
|
||||
}
|
||||
|
||||
function tokenize(input) {
|
||||
const wordMatches = Array.from(input.matchAll(WORD_REGEX), (m) => m);
|
||||
return wordMatches.map((m) => ({
|
||||
word: m[0],
|
||||
start: m.index,
|
||||
end: m.index + m[0].length,
|
||||
length: m[0].length,
|
||||
}));
|
||||
}
|
||||
|
||||
function fixPageBreakers(input, largeWords) {
|
||||
largeWords.forEach((word) => {
|
||||
const chunked = chunkify(word.word, 20);
|
||||
input = input.replace(word.word, chunked);
|
||||
});
|
||||
return input;
|
||||
}
|
||||
|
||||
function chunkify(input, chunkSize) {
|
||||
let output = "";
|
||||
let totalChunks = (input.length / chunkSize) | 0;
|
||||
let lastChunkIsUneven = input.length % chunkSize > 0;
|
||||
if (lastChunkIsUneven) {
|
||||
totalChunks += 1;
|
||||
}
|
||||
for (let i = 0; i < totalChunks; i++) {
|
||||
let start = i * chunkSize;
|
||||
let end = start + chunkSize;
|
||||
if (lastChunkIsUneven && i === totalChunks - 1) {
|
||||
end = input.length;
|
||||
}
|
||||
output += input.slice(start, end) + " ";
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
function ellipsize(input, maxLength) {
|
||||
const words = tokenize(input);
|
||||
if (words.length <= maxLength) {
|
||||
return input;
|
||||
}
|
||||
return input.slice(0, words[maxLength].end) + "...";
|
||||
}
|
||||
|
||||
if (!String.prototype.matchAll) {
|
||||
String.prototype.matchAll = function (regex) {
|
||||
"use strict";
|
||||
function ensureFlag(flags, flag) {
|
||||
return flags.includes(flag) ? flags : flags + flag;
|
||||
}
|
||||
function* matchAll(str, regex) {
|
||||
const localCopy = new RegExp(regex, ensureFlag(regex.flags, "g"));
|
||||
let match;
|
||||
while ((match = localCopy.exec(str))) {
|
||||
match.index = localCopy.lastIndex - match[0].length;
|
||||
yield match;
|
||||
}
|
||||
}
|
||||
return matchAll(this, regex);
|
||||
};
|
||||
}
|
16
threads.hugo/assets/styles/common.scss
Normal file
|
@ -0,0 +1,16 @@
|
|||
@import 'common/reset.scss';
|
||||
@import 'common/variables.scss';
|
||||
|
||||
@import 'layouts/_default/baseof.scss';
|
||||
@import 'layouts/partials/site-header.scss';
|
||||
@import 'layouts/partials/nav-header.scss';
|
||||
@import 'layouts/partials/site-footer.scss';
|
||||
|
||||
@import 'layouts/index.scss';
|
||||
@import 'layouts/_default/list.scss';
|
||||
@import 'layouts/partials/paginator.scss';
|
||||
|
||||
@import 'layouts/_default/single.scss';
|
||||
|
||||
@import 'layouts/search/list.scss';
|
||||
@import 'layouts/partials/search/search-form.scss';
|
5
threads.hugo/assets/styles/common/reset.scss
Normal file
|
@ -0,0 +1,5 @@
|
|||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
0
threads.hugo/assets/styles/common/variables.scss
Normal file
24
threads.hugo/assets/styles/layouts/_default/baseof.scss
Normal file
|
@ -0,0 +1,24 @@
|
|||
html {
|
||||
font-family: sans-serif;
|
||||
--container-width: 75rem;
|
||||
--pad-x: 1rem;
|
||||
@media (min-width: 30rem) {
|
||||
--pad-x: 2rem;
|
||||
}
|
||||
}
|
||||
body {
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
}
|
||||
main {
|
||||
flex-grow: 1;
|
||||
}
|
||||
.section {
|
||||
padding-inline: var(--pad-x, 1rem);
|
||||
padding-block: var(--pad-y, 0rem);
|
||||
}
|
||||
.container {
|
||||
max-width: var(--container-width, 60rem);
|
||||
margin: 0 auto;
|
||||
}
|
15
threads.hugo/assets/styles/layouts/_default/list.scss
Normal file
|
@ -0,0 +1,15 @@
|
|||
main._default-list {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
.pages {
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
padding-inline: var(--pad-x, 1rem);
|
||||
.container {
|
||||
flex-grow: 1;
|
||||
.paginator {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
57
threads.hugo/assets/styles/layouts/_default/single.scss
Normal file
|
@ -0,0 +1,57 @@
|
|||
main._default-single {
|
||||
.container {
|
||||
display: grid;
|
||||
gap: 1em;
|
||||
@media (min-width: 40rem) {
|
||||
grid-template-columns: 1fr minmax(auto, 80ch) 1fr;
|
||||
> * {
|
||||
grid-column: 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
.page {
|
||||
@media (min-width: 40rem) {
|
||||
font-size: 1.25em;
|
||||
}
|
||||
}
|
||||
.page-header {
|
||||
hr {display: none;}
|
||||
padding-block: 2em;
|
||||
}
|
||||
.page-title {
|
||||
font-weight: bold;
|
||||
font-size: 1.953em;
|
||||
line-height: 1;
|
||||
}
|
||||
.page-summary {
|
||||
max-inline-size: 65ch;
|
||||
font-size: 1.25em;
|
||||
line-height: 1.4;
|
||||
font-style: italic;
|
||||
}
|
||||
.page-date {
|
||||
font-size: 1em;
|
||||
line-height: 1;
|
||||
}
|
||||
.page-author {
|
||||
display: none;
|
||||
}
|
||||
.page-content {
|
||||
padding-block: 2em;
|
||||
blockquote {
|
||||
padding-block: 1rem;
|
||||
padding-inline-start: 1rem;
|
||||
border-inline-start: 4px solid black;
|
||||
background: #eee;
|
||||
font-style: italic;
|
||||
}
|
||||
h1 {font-size: 1.953em}
|
||||
h2 {font-size: 1.563em}
|
||||
h3 {font-size: 1.25em}
|
||||
h4 {font-size: 1em}
|
||||
h1, h2, h3, h4 {margin-block-start: 1em}
|
||||
ul, ol {
|
||||
margin-inline-start: 1em;
|
||||
}
|
||||
}
|
||||
}
|
5
threads.hugo/assets/styles/layouts/index.scss
Normal file
|
@ -0,0 +1,5 @@
|
|||
main.index {
|
||||
.pages {
|
||||
padding-inline: var(--pad-x, 1rem);
|
||||
}
|
||||
}
|
74
threads.hugo/assets/styles/layouts/partials/paginator.scss
Normal file
|
@ -0,0 +1,74 @@
|
|||
.paginator {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
.list {
|
||||
flex-grow: 1;
|
||||
padding-block: 1em;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
gap: 1em;
|
||||
.page {
|
||||
width: 100%;
|
||||
max-inline-size: 75ch;
|
||||
a {
|
||||
font-weight: bold;
|
||||
}
|
||||
span {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* _internal/pagination.html */
|
||||
.pagination {
|
||||
list-style: none;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 1em;
|
||||
inline-size: fit-content;
|
||||
max-inline-size: 100%;
|
||||
}
|
||||
.page-item {
|
||||
&.disabled {
|
||||
|
||||
}
|
||||
&.active {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.page-link {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
font-size: 1em;
|
||||
line-height: 1;
|
||||
width: 3em;
|
||||
height: 3em;
|
||||
border-radius: 100em;
|
||||
background: #eee;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
transition: all 0.2s ease-in-out;
|
||||
&:hover, &:active, &:focus {
|
||||
background: #ace;
|
||||
}
|
||||
&[aria-label="First"],
|
||||
&[aria-label="Previous"],
|
||||
&[aria-label="Next"],
|
||||
&[aria-label="Last"]
|
||||
{
|
||||
background: none;
|
||||
&:hover, &:active, &:focus {
|
||||
background: #ace;
|
||||
}
|
||||
}
|
||||
}
|
||||
.active .page-link {
|
||||
background: #06f;
|
||||
color: white;
|
||||
}
|
||||
.disabled .page-link {
|
||||
background: none;
|
||||
&:hover, &:active, &:focus {
|
||||
background: none;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
.site-footer {
|
||||
hr {display: none;}
|
||||
padding-inline: var(--pad-x, 1rem);
|
||||
padding-block: var(--pad-y, 1rem);
|
||||
}
|
26
threads.hugo/assets/styles/layouts/partials/site-header.scss
Normal file
|
@ -0,0 +1,26 @@
|
|||
.site-header {
|
||||
padding-inline: var(--pad-x, 1rem);
|
||||
padding-block: 1rem;
|
||||
.container {
|
||||
|
||||
}
|
||||
.hang-left {
|
||||
|
||||
}
|
||||
}
|
||||
.site-masthead {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
&__image {
|
||||
|
||||
}
|
||||
}
|
||||
.site-title {
|
||||
|
||||
}
|
||||
.scroll-margin {
|
||||
|
||||
}
|
||||
#top {
|
||||
--header-height: 4rem;
|
||||
}
|
0
threads.hugo/assets/styles/layouts/search/list.scss
Normal file
1
threads.hugo/assets/styles/print.scss
Normal file
|
@ -0,0 +1 @@
|
|||
@import 'common.scss';
|
1
threads.hugo/assets/styles/screen.scss
Normal file
|
@ -0,0 +1 @@
|
|||
@import 'common.scss';
|
3
threads.hugo/content/search/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
+++
|
||||
title = "Search"
|
||||
+++
|
4
threads.hugo/content/threads/_index.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
+++
|
||||
title = "threads"
|
||||
summary = "originally posted as threads on social media"
|
||||
+++
|
22
threads.hugo/content/threads/art-not-commodity/index.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
+++
|
||||
title = "art is not a commodity"
|
||||
summary = "the real answer to making sure artists get paid is to actually pay them for the work they do, not to commodify what they produce"
|
||||
date = "2023-01-02T21:00:00-06:00"
|
||||
source = "https://mastodon.social/@trwnh/109623038871646811"
|
||||
+++
|
||||
|
||||
well opposing copyright isn't thievery, for a start. theft is the act of taking something without returning it, removing the original. digital information can be infinitely and perfectly copied.
|
||||
|
||||
copyright enforcement is instead about giving certain parties exclusive monopolies on the spread of information. this gatekeeps culture and stifles free expression. in return for what? trying to sell access?
|
||||
|
||||
note also this monopoly is only enforced via the threat of state violence.
|
||||
|
||||
tangentially, there's also the fundamental inversion of value that occurs when artists try to fund themselves by selling art as if it were a commodity. the value in art is not necessarily in the final product alone but moreso in the creation of it.
|
||||
|
||||
copyright asks us to perform creative labour for free, and hope to recoup our losses via the market (in which you must differentiate yourself from millions of functionally equivalent forms of art and entertainment -- good luck!)
|
||||
|
||||
when you recognize this inversion of value, you recognize that the real answer to making sure artists get paid is to actually pay them for the work they do, not to commodify what they produce. things like commissions, patronage, public works funds, etc. all get to the root and heart of the issue.
|
||||
|
||||
copyright is in effect more akin to theft -- theft from the public, from the commons, from culture. it benefits no one except those who "own" a lot of art -- the disneys of the world.
|
||||
|
||||
in short: if you want artists to get paid, copyright is a really poor and ineffective way to do that. it just leads to big monopolies on art, at the expense of everyone else.
|
16
threads.hugo/content/threads/blocked/index.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
+++
|
||||
title = "blocked"
|
||||
summary = "it's the finality of such a situation that bothers me the most; the knowledge that no amount of apology will matter, nor will any attempt at reconciliation even be seen"
|
||||
date = "2018-02-27T21:23:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99599426061591957"
|
||||
+++
|
||||
|
||||
i wish i wasn't autistic because i'm really bad at reading social situations and here i am thinking i'm making light banter when instead i'm one post away from being blocked, before i can even apologize for misreading intent. end result is i just feel extremely shitty and like i'm terrible at being a human. i don't know how to vent my frustrations without it seeming personal, apparently
|
||||
|
||||
also it's the finality of such a situation that bothers me the most; the knowledge that no amount of apology will matter, nor will any attempt at reconciliation even be seen. i've never been able to properly handle irreversibility. even though a block is technically reversible, it isn't practically. one mistake and it's over. and i *will* make those mistakes, because not only am i not perfect, but i'm hopelessly broken beyond repair, no matter how hard i try to learn how to socialize.
|
||||
|
||||
and yet... i've not really been blocked much in my life (bar some democrats on birdsite who refuse to listen to left-poc) so i'm not totally insufferable or an absolute troll or a toxic personality. but of the more "misunderstood" blocks, one particular one comes to mind, because it was the only case where that person actually unblocked me years later. but that was much worse and what i said then was extremely insensitive. i wish i knew why they unblocked me. i'm too afraid to ask.
|
||||
|
||||
sometimes i wonder why i care what total strangers think of me, and i don't know if it's better or worse to not care. it's not "shame" or "approval-seeking"; it's more of an intense urge to not be hated or begrudged.
|
||||
|
||||
i guess that's a part of life, but it's not a part i'm comfortable with and i don't know if i ever will be.
|
10
threads.hugo/content/threads/boktai-3/index.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
+++
|
||||
title = "boktai deserved better"
|
||||
summary = "where do you go to find quirky existentialist video games based on norse mythology and spaghetti westerns in the year of your lord 2018, you ask? you don't ;_;"
|
||||
date = "2018-04-15T19:54:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99865201213509948"
|
||||
+++
|
||||
|
||||
i'm so emo that boktai 3 never launched outside of japan and also that boktai as a series is super dead and konami will never continue it and kojima probably can't/won't either due to copyright and the fact that it's been over 10 years since boktai ds and also kojima doesn't work for konami anymore UGH
|
||||
|
||||
where do you go to find quirky existentialist video games based on norse mythology and spaghetti westerns in the year of your lord 2018, you ask? you don't ;_; #boktai
|
23
threads.hugo/content/threads/camera-gear/index.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
+++
|
||||
title = "don't worry about camera gear"
|
||||
summary = "I wouldn't recommend going for ILCs unless you have a dedicated use case [...] Once you've picked a niche, then the gear choices will result naturally."
|
||||
date = "2018-04-09T22:28:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99831836537266861"
|
||||
+++
|
||||
|
||||
> On a less cranky note, I really want to get myself a nice digital camera. Any photographers out there with strong opinions on the matter?
|
||||
|
||||
* What type of photos do you want to take?
|
||||
* What's your budget?
|
||||
* Do you want to deal with carrying multiple lenses / heavy bodies / etc?
|
||||
* What's the destination / use case for your photos?
|
||||
|
||||
> all kinds. Budget isn't too much of an issue I can just save up longer. Multiple lenses are fun and I'll probably get a couple solid bags so not too put out about weight. Destination unknown.
|
||||
|
||||
Well, I'm just going to say that if you don't have any idea at all, then that also means you can't really get a good answer. I wouldn't recommend going for ILCs unless you have a dedicated use case -- a compact or even a smartphone will do fine in most general cases. (I picked up a Sony RX100 M2 used for a few hundred bucks for my general shots.)
|
||||
|
||||
Once you've picked a niche, then the gear choices will result naturally. As a general rule, spend more on glass than on bodies. Probably pick two telephoto lenses, one below ~70mm (down to 35mm or 24mm) and one above (up to about 200mm). Get a body with a sensor that's at least APS-C, and at least 12MP. A Sony a6000 or a6300 will be most versatile in the $750-1000 range (body only). You'll be spending an additional $400-$1000 for each quality lens you also pick up.
|
||||
|
||||
> fair enough! I'm just doing my research right now so I appreciate the honesty.
|
||||
|
||||
you're welcome :) it's really important to know what you're getting yourself into. a lot of people buy in way too early and stick with a kit lens because they didn't budget for lens -- and at that point, you might as well get a 1" compact, maybe even a Micro Four-Thirds like the Fujifilm X100 series if you can afford it.
|
27
threads.hugo/content/threads/crossposters/index.md
Normal file
|
@ -0,0 +1,27 @@
|
|||
+++
|
||||
title = "stop using crossposters"
|
||||
summary = "crossposts really don't engender organic engagement. They feel robotic and distant, largely because they're just that"
|
||||
date = "2017-11-26T02:20:00-06:00"
|
||||
source = [
|
||||
"https://mastodon.social/@trwnh/99069749589979672",
|
||||
"https://mastodon.social/@trwnh/99093644445157168",
|
||||
]
|
||||
+++
|
||||
|
||||
Stop using crossposters.
|
||||
|
||||
Not to, like, force y'all to do something, but crossposters are self-defeating.
|
||||
|
||||
It's far better to commit to a network rather than just make a carbon copy of yourself, because if you're posting exactly the same things, then what even is the point of having two networks?
|
||||
|
||||
That's just unnecessarily redundant.
|
||||
|
||||
I've been through this kinda rigmarole before when I tried using diaspora*, and the end result was that I completely abandoned it because I wasn't getting any meaningful interactions out of it compared to Twitter. Which was a shame, because I really liked diaspora*.
|
||||
|
||||
The problem, of course, is that you will inevitably gravitate to whichever platform nets you more interaction. And crossposts really don't engender organic engagement. They feel robotic and distant, largely because they're just that
|
||||
|
||||
## followup
|
||||
|
||||
ugh i really hope crossposters don't slowly choke mastodon like they did to diaspora*
|
||||
|
||||
if you're just crossposting everything you tweet on birdsite then what even is the point of making a mastodon account? that's glorified spam at worst, and a recipe for abandonment.
|
18
threads.hugo/content/threads/deactivating-twitter/index.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
+++
|
||||
title = "nothing is truly forever"
|
||||
summary = "At some point, the final copy of any given data will be deleted. Or it will lose relevance. Or it will slip into obscurity."
|
||||
date = "2017-12-20T04:53:00-06:00"
|
||||
source = "https://mastodon.social/@trwnh/99206247716252048"
|
||||
+++
|
||||
|
||||
I just deactivated some really old accounts I had on birdsite, ones I'd stopped using years ago, but had left up as a sort of archive... The last relics of a bygone era, of a personality long dead... A mark of my former selves.
|
||||
|
||||
Makes me think about the fact that nothing is truly forever, not even the internet and the data we think will last forever. At some point, the final copy of any given data will be deleted. Or it will lose relevance. Or it will slip into obscurity.
|
||||
|
||||
Of course, it was already not as I had left it. Accounts I had once conversed with, deleted. Maybe some of those people met the same fate as their accounts. Who knows? A lot changes in three years.
|
||||
|
||||
I can't back up the DMs that have been deleted, and the only copy of the replies are in the notification emails sent out to an inbox of a Gmail I'd long forgotten I had.
|
||||
|
||||
Kind of a heavy feeling.
|
||||
|
||||
The pictures will be gone in 30 days, but I can't help but think of the pictures lost forever from Twitpic or Yfrog or all of those other image hosts we all used before image hosting became a standard part of any web app.
|
16
threads.hugo/content/threads/gun-culture-in-america/index.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
+++
|
||||
title = "gun culture in america"
|
||||
summary = "a reactionary gun culture that perceives any attempt to curb it as an assault on their very identity"
|
||||
date = "2018-02-18T01:48:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99543874314017409"
|
||||
+++
|
||||
|
||||
[...] although in fact, having a permanent standing army is less legally supported than gun ownership. constitutionally, the longest that congress can raise/fund an army is 2 years...
|
||||
|
||||
the larger problem is that the culture around violence in america is absolutely toxic. the war of 1812 eroded the resistance to standing armies, the fugitive slave act of 1850 let the army act as a police force (only on the president's orders post-1878), in 1904 then-sec of war decided to station foreign troops, and in 1947 the dept of defense was formed to integrate the army into the govt. so militias aren't really a modern application of civilian defense, since the govt "took over" it.
|
||||
|
||||
the biggest strain was actually when the black panthers decided to arm themselves for community self-defense; white supremacists were scared and started to push for gun control. not really the first gun-scare about black people; one of the arguments used during the dred scott case was that freed slaves couldn't be citizens because then they would legally be allowed to have guns.
|
||||
|
||||
anyway, the NRA got taken over in the 1970s and converted from a marksmanship club to a political advocacy group. most of the people involved in this takeover decided to try another approach: take a hardline stance against any gun licensing (to better form white militias), and to strip the black community of its guns by criminalizing them, usually in conjunction with something else...that thing was the introduction of drugs and crack into black communities, which was criminalized once people got addicted to it. furthermore, gun possession drastically increased sentencing if convicted for drug offenses.
|
||||
|
||||
the end result of all that is a reactionary gun culture that perceives any attempt to curb it as an assault on their very identity. and when you call them out on this, they deflect to something else like "mental illness" instead. in other words, the whole of american gun culture revolves around a false sense of freedom and safety, directly descended from white supremacy and toxic masculinity. people commit shootings out of a desire for fame or notoriety, or out of some perceived slight or grievance, largely based on ideological assumptions or entitlement.
|
63
threads.hugo/content/threads/liberalism-and-trump/index.md
Normal file
|
@ -0,0 +1,63 @@
|
|||
+++
|
||||
title = "liberalism and the rise of trump"
|
||||
summary = "there's some broad historical revisionism going on"
|
||||
date = "2018-01-14T10:35:00-00:00"
|
||||
source = [
|
||||
"https://mastodon.social/@trwnh/99347736716090638",
|
||||
"https://mastodon.social/@trwnh/99355650165263881",
|
||||
"https://mastodon.social/@trwnh/99359516579847229",
|
||||
]
|
||||
+++
|
||||
|
||||
> some vox article about trump and liberalism
|
||||
|
||||
eh, the article and its analysis has many issues with it
|
||||
|
||||
- liberals aren't leftist
|
||||
- "reforms" were gained by strikes and protests, and it was anarchists and communists that led the struggle, not liberals
|
||||
- presents japanese internment as a "flaw" and not a great injustice
|
||||
- "whether the state has a responsibility to ensure a moral and socially desirable distribution of wealth" is irrelevant; welfare capitalism is still capitalism
|
||||
- you can't "correct" inequities by using the institutions that exist to propagate them; they are working as intended
|
||||
- "appealing to national pride" is fascist
|
||||
- anticommunism and mccarthyism WAS a major reactionary force, not a "purity test" by the left
|
||||
- the "strategy" you quoted has mostly been adopted by modern democrats in reaction to the rise of the "religious right" and other ratfucking attempts
|
||||
- the left was sabotaged by the fbi/cia
|
||||
- academia and technocracy aren't hallmarks of the left, either
|
||||
- "the hard work of liberal democratic politics" is, again, fruitless; the real issue is the complete defanging of the left by COINTELPRO and other initiatives; we need more haymarket squares and more may days, not endlessly begging politicians to not murder us
|
||||
- in short: yes a revolt is justified because america was founded on a fascist mythos of expansionism and exceptionalism
|
||||
|
||||
i guess in conclusion i'd say that the "make america great again" point is really close to being on the money
|
||||
|
||||
- the right = "make america great again" by national rebirth (one of the 3 main tenets of fascism)
|
||||
|
||||
- the liberals = "america is already great" because we just need a bit of reform (and all horrors are simply aberrations)
|
||||
|
||||
- the left = "america was never great" because it was explicitly founded as colonialist/imperialist/white-supremacist
|
||||
|
||||
> [...]
|
||||
|
||||
no, the extreme right wants a reactionary / openly fascist state that broadly uses violence to liquidate "degenerates" and other "undesirables". the state would be an even stronger force of national supremacy and authority than it already is.
|
||||
|
||||
I guess the larger point I'm trying to make is that there's some broad historical revisionism going on, as an attempt to maintain authority. the idea of the nonviolent reformist solution to everything is not how most social revolutions work. this wasn't new to the 1960s; a much longer history of struggle against state violence exists, going back through all of america's colonial history
|
||||
|
||||
i.e. as a nation, we've never "reformed" anything. radical abolitionists like john brown and the free soil party did more to end slavery than abraham lincoln ever did. the black panther party's community policing and radical housing and food programs were effective despite the fbi assassinating almost every single one of their leaders. fdr proclaimed to businesses that the new deal would "save capitalism" from the labor insurgency.
|
||||
|
||||
the original article kind of glosses over all this in an attempt to paint trump as a new phenomenon and not the natural result of weak reformism utterly failing to uplift anyone. the central thesis is that the left failed because of a lack of bourgeois democracy, not because of pervasive sabotage efforts by the state like cointelpro
|
||||
|
||||
> [...]
|
||||
|
||||
i can see that. i grew up in alabama, and there's a rich history of communism down here. (Hammer and Hoe is a good book to read about this)
|
||||
|
||||
the big switch from dem to GOP was an orchestrated effort to create an "identitarian" base of support. that is, by building up whiteness, by having politicians speak at churches and then funding preachers to spread political messages, etc... political parties hope to become functions of identity
|
||||
|
||||
the alt-right is, in fact, the most modern outgrowth of the "identitarian" movement -- their politics are descended directly from the cynical traditionalism employed by the political right for over half a century. the people who grew up with this stuff eventually realized that the GOP was in the same boat as the dems; that military contracts and tax subsidies was their only real aim.
|
||||
|
||||
but the real problem was that there was no opposition to this idea -- the fbi destroyed it with cointelpro and by assassinating anyone who became too influential.
|
||||
|
||||
in this void, the liberals decided that they would try to minimize racial tensions rather than approach them head-on. the outgrowth of this was the dlc, which argued that the democrats had gone "too far to the left" with the new deal and great society legislation.
|
||||
|
||||
if i had to pick a reason why much of the south doesn't like democrats, it would be that they just don't trust them. and their visible options have been restricted to the democrats and republicans, which is barely a choice at all. so some people vote gop because they think it'll trickle down or their taxes will go down. democrats are stuck in this perception that taxes and welfare are the only way forward, which doesn't really net much
|
||||
|
||||
but way more people around me are nonpolitical. most people don't vote. they're too busy working at jobs that don't pay enough, and either voting hasn't done anything for them, or they CAN'T vote. the conversation is dominated by republicans who promise lower taxes, and by democrats who insult them. every time alabama comes up in national news it's always derisively, and people notice that stuff.
|
||||
|
||||
i very much believe that if were any legitimate opposition to the established order, it would gain supporters in droves... but the state has prevented that from being viable by neutralizing opposition wherever it finds it. the FBI and CIA, as part of the "national security" apparatus, take the view that any subversion is harmful to national security. and i mean, they're kinda right. but that's the whole problem...
|
|
@ -0,0 +1,112 @@
|
|||
+++
|
||||
title = "mastodon as a twitter do-over"
|
||||
summary = "it would probably behoove us all to consider what mistakes twitter did and how we can avoid them."
|
||||
date = "2018-01-12T06:20:00-06:00"
|
||||
source = "https://mastodon.social/@trwnh/99336824877757248"
|
||||
+++
|
||||
|
||||
i wonder if it would be a good idea or a bad idea for mastodon to adopt a way to view popular hashtags
|
||||
|
||||
pros: better discovery
|
||||
cons: going down the same road twitter did
|
||||
|
||||
actually it's kind of interesting to think of mastodon as a twitter do-over, because it would probably behoove us all to consider what mistakes twitter did and how we can avoid them.
|
||||
|
||||
## hashtags
|
||||
|
||||
we're obviously past the age of posting toots via sms, so let's start with hashtags.
|
||||
|
||||
* aug 2007: hashtags proposed by users as irc-channel metaphor
|
||||
* july 2009: twitter starts hyperlinking hashtags
|
||||
* 2010: twitter starts tracking "trending topics"
|
||||
|
||||
but of course the mistakes that twitter did were to attempt to apply an algorithm to trends, meaning words and phrases could trend, and some hashtags could be filtered out or censored.
|
||||
|
||||
## external media
|
||||
|
||||
i think we're also past the point of external media hosting on twitpic/yfrog/etc, since internal media hosting has become far more widespread.
|
||||
|
||||
## replying
|
||||
|
||||
so the next thing is to look at replying and boosting statuses. starting with replies, because boosting is a bit more involved in analysis.
|
||||
|
||||
* nov 2006: @ reply first used
|
||||
* may 2007: @replies adopted by twitter
|
||||
|
||||
not much to say here. i guess i'd note that it makes a service more conversation than status-oriented, but that's about it? conversation is good
|
||||
|
||||
## boosting
|
||||
|
||||
now, about boosts...
|
||||
|
||||
* apr 2007: "ReTweet" first used
|
||||
* jan 2008: "RT @user" first used
|
||||
* nov 2009: twitter adds retweet button
|
||||
|
||||
so far so good. no need to clog up feeds with multiples of the same stuff. now here's the problem:
|
||||
|
||||
* ~2009: people add comments to manual RTs
|
||||
* apr 2015: twitter adds quote tweets
|
||||
|
||||
the biggest problems with quotes? they break context, and they lead to dogpiling. mastodon hasn't adopted quote toots, and probably never should.
|
||||
|
||||
## conversation vs content
|
||||
|
||||
just about the last thing to add at this point is twitter's attempt to transition from a conversational platform to a curated content provider, especially since 2015. that's bad.
|
||||
|
||||
---
|
||||
|
||||
## further discussion
|
||||
|
||||
### replying to boosts
|
||||
|
||||
> who replying to boosts mentions (on twitter, the reply tags both the person who retweeted and the person who posted, whereas on masto only the person who posted it gets the reply)
|
||||
>
|
||||
> the 2nd is more nebulous on how it _should_ work and i go back and forth on it tbh. like there's a lot of confusion on who someone is replying to on twitter
|
||||
>
|
||||
> but also i have had someone point out that by automatically tagging in the person who boosted it, it takes some responsibility off of the original poster to reply, which helps when you have posts getting more attention than you can handle
|
||||
|
||||
when someone boosts a status, and you reply to that boosted status: are you replying to the original poster, or to the person who boosted it? that's the primary consideration there.
|
||||
|
||||
twitter steamrolls everyone into the conversation, mastodon doesn't. i like the current behavior. if it's relevant to the person who boosted, i'll manually tag them in, perhaps as a sort of cc.
|
||||
|
||||
### replies in home feeds
|
||||
|
||||
> how replies to multiple people show up in your feed (generally this has worked by "if you follow one person who is mentioned in the reply it shows up")
|
||||
>
|
||||
> i think the 1st is annoying as fuck personally since i'm missing pieces of conversations, especially on mastodon with private posts (and this in turn can affect social ettiquette as people go "my friends are talking, i'll join in" without acknowledging the extra party privately posting)
|
||||
|
||||
maybe break it down to decide who's relevant to each new status?
|
||||
|
||||
if it's two people you both follow, then i guess it's not too bad to show you their conversation. but social etiquette might mean you shouldn't butt in, if it doesn't involve you. so there's a potential argument to be made to NOT show other people's conversations.
|
||||
|
||||
on the other hand, it's generally more useful to follow your friend's conversations, because there is a high chance you'll be interested in them. this is what both twitter and mastodon do right now, and it's kind of taken for granted.
|
||||
|
||||
when multiple people get involved, it gets a bit more tricky.
|
||||
|
||||
possibility 1: only show the conversation if you follow everyone mentioned
|
||||
* still shows you friends, and allows friends to join in
|
||||
* if an external person joins the convo, the convo will continue in their mentions, but will not reach your timeline? it's debatable whether you would want to see ALL of the posts in the convo, or just the ones with your friends. could lead to abrupt disappearance of convos from your timeline.
|
||||
|
||||
twitter's behavior is to show you the conversation if you follow the poster + the *first* mention. the assumption is that the post is targeted primarily at the first person mentioned. this may or may not be actually true, though. for completeness, it's assumed to be true.
|
||||
|
||||
the only possible extension is to show ANY post from people you follow that mention ANYONE you also follow, which balloons pretty fast.
|
||||
|
||||
i don't really have any thoughts about private accounts, because this isn't really an issue on mastodon. mastodon's idea of a locked account revolves around approving followers, but locked users can still post publicly. it's just impossible to see their followers-only toots without them approving you. so, post-level privacy sidesteps this issue; private accounts can still post publicly. much better than twitter's all-or-nothing approach.
|
||||
|
||||
### private posts on mastodon
|
||||
|
||||
> where private post issues arise is like:
|
||||
A posts privately, B replies, C replies to B
|
||||
>
|
||||
> I follow B and C so I see C's reply to B in my timeline, despite not being able to see the original context AT ALL because it's private
|
||||
|
||||
so does C follow A? I would say that ideally, if the original post is privated to A-followers, then all replies are also privated to A-followers. I'm not entirely sure if this is indeed the case; I assume not, since you're asking about it.
|
||||
|
||||
It seems easier to handle this for post-comment systems rather than post-reply systems, though the distinction between the two is rather arbitrary. Privacy in the first is encompassing; the second cascades.
|
||||
|
||||
Due to specifics of how post-reply systems are implemented differently than post-comment systems (namely, in treating follow-ups as linked nodes rather than as children), I don't really know how best to propagate privacy attributes. It seems a bit strange, protocol-wise, to say that D's reply to C should be limited to A's followers. Perhaps this meshes back with the "multiple reply" issue above.
|
||||
|
||||
So I guess the two-birds-one-stone solution is to only show you toots where you follow EVERYONE mentioned. But this has downsides, again as mentioned above... it stifles expansion of social circles. You'd have to go to someone's profile to see all their toots.
|
||||
|
||||
Tweetdeck, before being bought out, used to have an option to show ALL replies from people you followed. Maybe bad for social etiquette to jump in with strangers, but it had a use case.
|
126
threads.hugo/content/threads/misc.md
Normal file
|
@ -0,0 +1,126 @@
|
|||
+++
|
||||
title = "miscellaneous"
|
||||
summary = "stuff that didn't get its own post"
|
||||
draft = true
|
||||
+++
|
||||
|
||||
## https://mastodon.social/@trwnh/2264242 [i disagree with my past self somewhat]
|
||||
|
||||
the profile model itself is dead [...] streams are the future and also they make way more sense
|
||||
|
||||
## https://mastodon.social/@trwnh/99346993416792417
|
||||
|
||||
not trying to sell ya, just fawning over how much i'm in love with xfce lol. it's just wild how microsoft decided everything would be 96dpi forever
|
||||
|
||||
## https://mastodon.social/@trwnh/99557570047763492
|
||||
|
||||
I wish there was a way to search up the title of old children's novels published before 2000 by plot summary or keywords... there are two different books that are on the tip of my mind, but whose titles I've long since forgotten. I doubt they've been digitized or republished, so they may be lost to time forever.
|
||||
|
||||
## https://mastodon.social/@trwnh/99793615497112400
|
||||
|
||||
hot take: mastodon should be more like email than it already is
|
||||
|
||||
## https://mastodon.social/@trwnh/99899695933102322
|
||||
|
||||
idk, the thing about e.g. python or ruby is that they focus a lot more on having clean syntax and being easy to understand.
|
||||
|
||||
## https://mastodon.social/@trwnh/99937186098244775
|
||||
|
||||
> I was under the impression that including "cisgender" in straight was controversial?
|
||||
|
||||
I mean... the "controversy" is in how being transgender intersects with heterosexual / heteroromantic. some might argue that "trans people aren't straight" is transphobic because it denies their association with a binary gender. others disagree because being trans is inherently queer and deviates from the "norm" of society.
|
||||
|
||||
## https://mastodon.social/@trwnh/99992566429566674
|
||||
|
||||
In a way, it's like saying paper should never have been invented, and we should all have continued chiseling stone. That doesn't mean we should forget how to chisel stone; it just means that we shouldn't chisel new stones for *everything* -- paper will do fine in most cases.
|
||||
|
||||
## https://mastodon.social/@trwnh/99997039233920487
|
||||
|
||||
Hmm... I wouldn't say it's "security by obscurity" in a pejorative way -- there is a very real and very bad habit on Twitter of people "namesearching", or tracking specific terms so that they can jump into conversations.
|
||||
|
||||
## https://mastodon.social/@trwnh/100009272925737468
|
||||
|
||||
until maybe as late as 2016, twitter thought of itself as a "real time update news network and discussion platform" but now it thinks of itself as "consuming interests and topics"
|
||||
|
||||
## https://mastodon.social/@trwnh/100053713095158984
|
||||
|
||||
"anarchists are real enemies of marxism" is a self-fulfilling prophecy, fuck. treat someone as an enemy and they become your enemy.
|
||||
|
||||
[...]
|
||||
|
||||
concept: parody of that old relacore ad ("stress induces cortisol. relacore reduces cortisol.") but replace stress with twitter and relacore with mastodon
|
||||
|
||||
## https://mastodon.social/@trwnh/100063071127017012
|
||||
|
||||
people aren't always paid to disrupt, they may be doing it for personal reasons, ideology, etc. call them "trolls", it's accurate re: the practice of trolling for attention.
|
||||
|
||||
## https://mastodon.social/@trwnh/100072299035734958
|
||||
|
||||
it's a false assumption that crypto is trustless
|
||||
|
||||
## https://mastodon.social/@trwnh/100085567120616255
|
||||
|
||||
hard to say; what makes for a good discourse platform?
|
||||
|
||||
## https://mastodon.social/@trwnh/100087757497941062
|
||||
|
||||
there's a sort of fetishism around commodity goods from america throughout much of the middle east
|
||||
|
||||
## https://mastodon.social/@trwnh/100097247421492501
|
||||
|
||||
how to pick a mastodon server
|
||||
|
||||
https://mastodon.social/@trwnh/100097303707813337
|
||||
|
||||
servers shut down
|
||||
|
||||
## https://mastodon.social/@trwnh/100103662264850023
|
||||
|
||||
on some level i understand the ignorant desire for change, simply for change's sake [...]
|
||||
|
||||
## https://mastodon.social/@trwnh/100105279502219193
|
||||
|
||||
by "contradictions" of liberalism I mean things like
|
||||
- "job creation" when we have the technology to reduce work
|
||||
- "violence is bad" in the face of endless wars
|
||||
- "competition is good" when the natural end result is a monopoly
|
||||
|
||||
https://mastodon.social/@trwnh/100105523140235220
|
||||
|
||||
in general, the liberal/neoliberal split isn't very useful
|
||||
|
||||
https://mastodon.social/@trwnh/100109839779411064
|
||||
|
||||
"conservative" and "liberal" is a meaningless dichotomy
|
||||
|
||||
## https://mastodon.social/@trwnh/100128470703676020
|
||||
|
||||
all my friends are cute
|
||||
|
||||
## https://mastodon.social/@trwnh/100131913998697452
|
||||
|
||||
yeah, idk how i would have gotten off twitter if they hadn't made it extremely easy for me by breaking 3rd-party apps, shadowbanning me being blocked by too many TERFs, and refusing to ban fascists
|
||||
|
||||
## https://mastodon.social/@trwnh/100141167073699878
|
||||
|
||||
the chronological stuff was like 20% why i left twitter but the other 80% was the "reactionary sensationalist culture" as you put it
|
||||
|
||||
## https://mastodon.social/@trwnh/100164745640244312
|
||||
|
||||
i don't think it can ever be said that the state is acting in "self-defense". self-preservation? maybe. but self-defense is the domain of the oppressed. at the very least, merely surviving is a radical act. the long-term solution is to defang power and build alternative power.
|
||||
|
||||
## some holodomor stuff in 4 subchains
|
||||
|
||||
https://mastodon.social/@trwnh/100206391621628088
|
||||
https://mastodon.social/@trwnh/100206500940583286
|
||||
https://mastodon.social/@trwnh/100206609835191626
|
||||
https://mastodon.social/@trwnh/100206657397747867
|
||||
|
||||
## https://mastodon.social/@trwnh/100234428636106449
|
||||
|
||||
To use Twitter as the perennial example of bad design: say you want to indicate that something is bad. You could previously .@ to make it show up to your followers. Now, you quote tweet it, which exclusively shows it to your followers and not the participants of the old thread. But the third and harder option is to not do a public callout at all.
|
||||
|
||||
## actor types idk not rly important
|
||||
|
||||
https://mastodon.social/@trwnh/100240521462320522
|
||||
https://mastodon.social/@trwnh/100240555863529471
|
26
threads.hugo/content/threads/multiple-accounts/index.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
+++
|
||||
title = "multiple accounts"
|
||||
summary = "why/when do people use multiple accounts, and what features can be implemented to reduce the friction in using just one account?"
|
||||
date = "2017-12-17T03:55:00-06:00"
|
||||
source = "https://mastodon.social/@trwnh/99189033326279405"
|
||||
+++
|
||||
|
||||
unrelated thought: been trying to hash out a solution to the "multiple accounts" issue with social media. namely: why/when do people use multiple accounts, and what features can be implemented to reduce the friction in using just one account? would appreciate feedback.
|
||||
|
||||
off the top of my head:
|
||||
|
||||
- private vs public accounts for trusted people (answered by privacy options on toots)
|
||||
- multiple interests (not really solved currently; perhaps implementing a tag system and letting people mute certain tags? Diaspora*-style aspects can get complicated)
|
||||
- separate identity (unsolvable and would be insecure to attempt with one account)
|
||||
|
||||
wrt multiple interests, this really is my biggest pain point with ANY social media (coming from someone who has had like 15 birdsite accounts at once)
|
||||
|
||||
perhaps not exactly tags, but having a category system like google+ would be nice and perhaps easiest to manage when considering tootboosts. but this also might complicate the issue? nevertheless, it could be optional (default behavior would be to boost to your profile, no categorization involved)
|
||||
|
||||
the tag approach would be easiest for your own toots, but the categories wouldn't be too bad and would also allow for separating different boosts
|
||||
|
||||
---
|
||||
|
||||
## further discussion
|
||||
|
||||
problem with diaspora*'s aspects (and by extension, Google+ circles which aped it) is that it's a bidirectional metaphor for a unidirectional relationship. you're supposed to pick who can see a post, but they might not even follow you. I would understand if instead it functioned and was advertised as a way to split your timeline into multiple timelines. As is, sharing to aspects/circles/etc. is needlessly confusing.
|
14
threads.hugo/content/threads/necromancy/index.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
+++
|
||||
title = "necromancy"
|
||||
summary = "\"i saw the soul of my grandpa and he told me to keep working hard\" is almost mystic and folkloric, not really like \"i summoned the soul of my grandpa to give me encouragement\" and still one step removed from \"i inserted my grandpa's soul into a corpse / some bones to give him physical form\""
|
||||
date = "2018-04-12T07:31:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99845293118930539"
|
||||
+++
|
||||
|
||||
i always have to stop and realize people don't mean actual necromancy (learning from the dead) and instead they mean some kinda pseudo-resurrection/reanimation thing in pop culture, haha
|
||||
|
||||
> honestly, is divination through dead people's spirits any better?
|
||||
|
||||
there's not as much stigma against it, compared to the physical. "i saw the soul of my grandpa and he told me to keep working hard" is almost mystic and folkloric, not really like "i summoned the soul of my grandpa to give me encouragement" and still one step removed from "i inserted my grandpa's soul into a corpse / some bones to give him physical form"
|
||||
|
||||
it seems like souls are free to either stay in heaven or roam the land of the living, but giving them physical form is like playing god
|
18
threads.hugo/content/threads/neoliberalism/index.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
+++
|
||||
title = "what is neoliberalism"
|
||||
summary = "in short, everything is a market and the experts should decide the best policies to help the market"
|
||||
date = "2018-03-14T08:10:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99681239150233207"
|
||||
+++
|
||||
|
||||
> What is #neoliberalism? Is it a set defined thing or a term just like liberalism that could mean lots of different things to different people?
|
||||
|
||||
kinda both? liberalism and neoliberalism have academic meanings, but get used differently by different people
|
||||
|
||||
ie neoliberalism is just largely a return to liberalism; the idea that govt's role is to help business, that markets can be used as a force for good https://en.wikipedia.org/wiki/Neoliberalism
|
||||
|
||||
maybe best exemplified by thatcher, reagan, greenspan, clinton; the support of "free trade" agreements like NAFTA and TPP or organizations like the IMF or WTO; opposition to people like ralph nader in the 1970s; concepts like "the marketplace of ideas" or "soft power"; in short, everything is a market and the experts should decide the best policies to help the market
|
||||
|
||||
> [...]
|
||||
|
||||
Neoliberalism seems like a big tent, but that's really only because it's ideologically sparse and lacks substance. Most of the Western world holds a neoliberal economic and domestic policy, and a neoconservative foreign policy.
|
|
@ -0,0 +1,37 @@
|
|||
+++
|
||||
title = "the day net neutrality was repealed"
|
||||
summary = "The Open Internet Order of 2015 which was just repealed was not too much. It was not enough."
|
||||
date = "2017-12-15T01:35:00-00:00"
|
||||
source = [
|
||||
"https://mastodon.social/@trwnh/99175742733649566",
|
||||
"https://mastodon.social/@trwnh/99175781630692764",
|
||||
]
|
||||
+++
|
||||
|
||||
> [...]
|
||||
|
||||
Hey, remember when Comcast filtered P2P traffic including BitTorrent, Skype, and Spotify?
|
||||
|
||||
Remember when AT&T blocked FaceTime and Google Voice on their network?
|
||||
|
||||
Remember when Verizon throttled all video except mysteriously for their subsidiary go90?
|
||||
|
||||
Because I remember.
|
||||
|
||||
[Is it] a GOOD thing to have no legal authority to challenge ISPs when they pull the shit they clearly already did?
|
||||
|
||||
Because that's literally all that happened in 2015, w/ forbearance
|
||||
|
||||
In fact, Wheeler ONLY pursued the clauses of Title II that dealt with nondiscrimination (common carrier status), and didn't apply rate regulation or taxes or last-mile unbundling.
|
||||
|
||||
He did this because Verizon successfully sued to prevent the FCC from using S706, and the judge told Wheeler he needed to reclassify as Title II.
|
||||
|
||||
It should be obvious that the "free market" will not solve a problem created by the market. This is market failure, plain and simple.
|
||||
|
||||
> [...]
|
||||
|
||||
Which rules "allow" ISPs to monopolize regions? ISPs collude to not enter markets, renege on coverage expansion contracts, and prevent competition by claiming ownership of the backbone.
|
||||
|
||||
In fact, I would support taking it out of the FCC's hands entirely, so that people like Pai can't take us backwards at their whims as the political winds change. The Open Internet Order of 2015 which was just repealed was not too much. It was not enough. There needs to be an act specifically protecting the free and open internet, and repealing the Telecommunications Act of 1996. Among other acts...
|
||||
|
||||
So pardon me for thinking the decision today was not great. There's an overwhelming pile of evidence that Pai ignored wholesale in order to push an agenda that benefits the ISPs who simply want to profit more, users be damned.
|
6
threads.hugo/content/threads/physical-bodies/index.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
+++
|
||||
title = "physical bodies are so encumbering"
|
||||
summary = "it would be great to never again have to feel pain from a stomach too empty, or perhaps too full; to never have crusty eyes after sleeping too much, or perhaps too little; to never suffer from physiology that at best will decay, and at worst will actively punish us."
|
||||
date = "2018-05-09T14:42:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99999872996282760"
|
||||
+++
|
12
threads.hugo/content/threads/product-vs-profit/index.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
+++
|
||||
title = "product vs profit"
|
||||
summary = "There will inevitably be a point where it is unprofitable to improve a product any further."
|
||||
date = "2017-12-22T12:06:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99217860566004390"
|
||||
+++
|
||||
|
||||
> maybe providing useful products turns a profit hmmm...
|
||||
|
||||
Only to a certain extent. There will inevitably be a point where it is unprofitable to improve a product any further.
|
||||
|
||||
i.e., if Apple's primary goal was to make useful products, it would make choices that result in a better product even if it was slightly more expensive. But their primary goal is profit, as it is for every corporation under capitalism. Making better stuff is unprofitable.
|
10
threads.hugo/content/threads/reading-theory/index.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
+++
|
||||
title = "reading theory"
|
||||
summary = "the point of reading theory is to see what ideas other people already came up with, so you don't have to spend time formulating them yourselves."
|
||||
date = "2018-01-27T08:44:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99420908783601966"
|
||||
+++
|
||||
|
||||
the point of reading theory is to see what ideas other people already came up with, so you don't have to spend time formulating them yourselves. like... you start out with political beliefs and experiences, but they can always be solidified if you have a framework to contextualize them.
|
||||
|
||||
and that doesn't really require discussion unless you want to or need more understanding, and it doesn't require organizing if you're not capable of it, and it really doesn't require voting since many people can't vote and many voting systems are designed to minimize choice. it feels wrong to say one *can't* be politically engaged unless one does these things
|
12
threads.hugo/content/threads/responsive-web-design/index.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
+++
|
||||
title = "fully responsive web design"
|
||||
summary = "my pipe dream is to redesign my website to be fully responsive -- not across mere pixel widths, but by aspect ratio and overall size"
|
||||
date = "2018-04-22T15:42:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99903847448978099"
|
||||
+++
|
||||
|
||||
my pipe dream is to redesign my website to be fully responsive -- not across mere pixel widths, but by aspect ratio and overall size.
|
||||
|
||||
does anyone consider what their website looks like when it's fullscreened across one of those samsung 3840x1080 monitors? probably not, and why would you?
|
||||
|
||||
but i do
|
|
@ -0,0 +1,26 @@
|
|||
+++
|
||||
title = "i hate the smartphone market"
|
||||
summary = "profit motives means that the entire market has abandoned me"
|
||||
date = "2018-05-07T08:13:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99987017261137486"
|
||||
+++
|
||||
|
||||
tbh like 90% of my day-to-day angst against capitalism is from how shit the smartphone market has become. if capitalism is so great then where the fuck is my <70mm-wide phone with a removable battery? fucking profit motives means that the entire market has abandoned me. I haven't been satisfied with any phone since 2010. hell, I'd buy an updated Nexus One with newer, more efficient internals.
|
||||
|
||||
"capitalism brought you your smartphone!" yeah, and that phone /fucking sucks/.
|
||||
|
||||
I wish I could build my own phone or have one built to spec, but alas, I do not own a machining and assembly factory, and I don't have the requisite circuitry knowledge... if only I could, I dunno, *cooperate* with some like-minded people, and we had *public ownership of those factories*... :thaenkin:
|
||||
|
||||
> do you know about this company? https://www.fairphone.com/en/ . They do their best to source all their components ethically, and work with worker's organisations in the countries they are producing phones in. The fair phone also comes with root access by default, so you can install your own ROM if you want.
|
||||
|
||||
yeah; they're well-intentioned but still restricted to operating within the confines of capitalism. and it's still too big of a phone for my liking, personally
|
||||
|
||||
like, i'm using a sony xperia x compact right now because it's 4.6" and fits in one hand. the snapdragon 650 means the battery is *decent*, but for how long? i got it lightly used in september, and now it's may and the battery is starting to heat up and degrade after 8 months of heavy usage and all those recharge cycles.
|
||||
|
||||
> my fair phone 1 is still working nicely after 3 years or so [...]
|
||||
|
||||
I feel like the same could be said about several more devices from 2013 than could be said today. my mom is still using a Nexus 7 2013 tablet just fine. our Nexus 5 could have lasted until now, if she hadn't broken it accidentally in a fit of rage. my htc one m7 is still close to the "ideal" device for me, except its battery has long gone to shit and is a nightmare to replace.
|
||||
|
||||
I wish there were like 400 more fairphones, because just 1 is too limited to accomplish much for my case. and part of why there's only 1, I imagine, is because they can't be profiting too much; they still rely on profit, don't they? It's not "sustainable" for companies to provide services at-cost under capitalism.
|
||||
|
||||
[...] it's extremely hard to "build it yourself" at sufficient scale to make a difference... and even then, you're bound by the laws of capital. you need to make money to survive, so at-cost operation is not viable without external funding
|
18
threads.hugo/content/threads/syndicalism-is-dead/index.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
+++
|
||||
title = "syndicalism in the 21st century"
|
||||
summary = "syndicalism is dead because the labor industry is dead. it's been replaced by the service industry today"
|
||||
date = "2018-01-03T19:42:00-06:00"
|
||||
source = "https://mastodon.social/@trwnh/99289017794408922"
|
||||
+++
|
||||
|
||||
> Is syndicalism relevant in the 21st century?
|
||||
|
||||
there's a reason why crimethinc call themselves an "ex"-worker collective. syndicalism is dead because the labor industry is dead. it's been replaced by the service industry today. factories are either on the decline or they're being exported. so i guess in that sense, syndicalism can still live in china, or wherever else production is a significant part of the economy so that a general strike can bring it to its knees
|
||||
|
||||
or, alternatively, i suppose all food servers and retail employees could go on strike but the capitalist powers have created an abundance of unemployed people ready to bust that strike
|
||||
|
||||
i see it as much more likely that the masses will revolt wholesale, before any trade-unionist path could ever make itself viable again
|
||||
|
||||
very likely within the next 20 years, and almost certainly by the end of the century. too many crises are coming to a head "by 2040, 2050, 2080, 2100" etc. natural and anthropogenic conflicts will arise more easily than ever before
|
||||
|
||||
to be clear: organizing workers is still the most effective way forward; unionism can help but isn't an effective avenue for change anymore compared to agitation. but there's only so much we can gain by lobbying for labor standards; we need to push for fundamental transformation of the entirety of class relations
|
|
@ -0,0 +1,15 @@
|
|||
+++
|
||||
title = "the web is not only for profit"
|
||||
summary = "i just want to find some inspiration on how to express myself, not market myself"
|
||||
date = "2023-01-03T01:58:00-06:00"
|
||||
source = "https://mastodon.social/@trwnh/109624210338690804"
|
||||
+++
|
||||
|
||||
it's funny how a lot of help articles can be boiled down to one of
|
||||
|
||||
a) it's really easy, just give us money
|
||||
b) it's really hard, so give us money
|
||||
|
||||
people act like the only worthwhile use case of the web is financial gain. no one has any tips or hints on how to make a personal website, it's always "build your brand" or "showcase your portfolio" or some other transparently profit-motivated initiative. everyone is always talking about the sales funnel or the call to action or whatever. it's just *assumed* you are also like this.
|
||||
|
||||
i just want to find some inspiration on how to express myself, not market myself
|
10
threads.hugo/content/threads/ubi/index.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
+++
|
||||
title = "the problem with universal basic income"
|
||||
summary = "market forces on basic needs need to be abolished"
|
||||
date = "2018-03-16T02:00:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99691112300163044"
|
||||
+++
|
||||
|
||||
my only problem with UBI is if you're going to guarantee a basic income then why not just guarantee the basics and cut down on the bureacracy? also you can't just give everyone a lump sum of money and not expect a market to react to that flood of monetary supply -- market forces on basic needs need to be abolished
|
||||
|
||||
tldr UBI is a bandage on capitalism in the same way the New Deal was, but even less accountable
|
12
threads.hugo/content/threads/voluntarism/index.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
+++
|
||||
title = "voluntarism vs socialism"
|
||||
summary = "If two people are inequal, then they can never come to a voluntary agreement -- the power of one will coerce the other"
|
||||
date = "2018-04-06T23:19:00-00:00"
|
||||
source = "https://mastodon.social/@trwnh/99815047195372515"
|
||||
+++
|
||||
|
||||
My point is that pursuing pure voluntarism as an ideology (and not simply an ideal) tends to ignore the realities of power imbalances. If two people are inequal, then they can never come to a voluntary agreement -- the power of one will coerce the other, even if subconsciously.
|
||||
|
||||
Consider whether one can "voluntarily" become a slave. Or, more relevant today, consider the wage labor system. Is it truly "voluntary" if your food, shelter, and very survival depends on such a "voluntary" arrangement?
|
||||
|
||||
The cold reality is that voluntarism is merely idealism so long as any social class or hierarchy exists. Maybe some prefigurative politics are necessary, but you have to push for progress without 100% support or you'll wait forever.
|
4
threads.hugo/deploy
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
rm -r public/
|
||||
hugo
|
||||
rsync -avz --delete public/ a@trwnh.com:/srv/http/trwnh.com/blog
|
6
threads.hugo/hugo.toml
Normal file
|
@ -0,0 +1,6 @@
|
|||
baseURL = 'https://trwnh.com/blog/'
|
||||
languageCode = 'en-us'
|
||||
title = 'a blog'
|
||||
|
||||
[pagination]
|
||||
pagerSize = 100
|
60
threads.hugo/layouts/_default/baseof.html
Normal file
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{.Site.Language.Lang }}" xml:lang="{{.Site.Language.Lang }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
|
||||
{{- /* print layout */ -}}
|
||||
{{- $print := resources.Get "styles/print.scss" | toCSS | minify | fingerprint }}
|
||||
<link rel="stylesheet"
|
||||
href="{{ $print.Permalink }}"
|
||||
integrity="{{ $print.Data.Integrity }}"
|
||||
media="print" />
|
||||
|
||||
{{- /* web layout */ -}}
|
||||
{{- $theme := resources.Get "styles/screen.scss" | toCSS }}
|
||||
{{- with resources.Get "styles/custom.scss" }}
|
||||
{{- $custom := . | toCSS }}
|
||||
{{- $screen := slice $theme $custom | resources.Concat "assets/screen.css" | minify | fingerprint }}
|
||||
<link rel="stylesheet"
|
||||
href="{{ $screen.Permalink }}"
|
||||
integrity="{{ $screen.Data.Integrity }}"
|
||||
media="screen" />
|
||||
{{- else }}
|
||||
{{- $screen := $theme | minify | fingerprint }}
|
||||
<link rel="stylesheet"
|
||||
href="{{ $screen.Permalink }}"
|
||||
integrity="{{ $screen.Data.Integrity }}"
|
||||
media="screen" />
|
||||
{{- end }}
|
||||
|
||||
{{- /* scripts */ -}}
|
||||
{{- $theme := resources.Get "scripts/main.js" | js.Build "script.js" | minify | fingerprint }}
|
||||
{{ with resources.Get "scripts/custom.js" }}
|
||||
{{ $custom := . }}
|
||||
{{ $script := slice $theme $custom | resources.Concat "assets/main.js" | js.Build "script.js" | minify | fingerprint}}
|
||||
<script type="text/javascript"
|
||||
src="{{ $script.Permalink }}"
|
||||
integrity="{{ $script.Data.Integrity }}">
|
||||
</script>
|
||||
{{ else }}
|
||||
{{ $script := $theme | js.Build "script.js" | minify | fingerprint}}
|
||||
<script type="text/javascript"
|
||||
src="{{ $script.Permalink }}"
|
||||
integrity="{{ $script.Data.Integrity }}">
|
||||
</script>
|
||||
{{ end }}
|
||||
|
||||
{{ partial "seo.html" . -}}
|
||||
{{- block "head" . -}}
|
||||
{{ end }}
|
||||
</head>
|
||||
<body>
|
||||
{{ partial "site-header.html" . }}
|
||||
{{ block "main" . }}
|
||||
{{ end }}
|
||||
{{ partial "site-footer.html" . }}
|
||||
</body>
|
||||
</html>
|
14
threads.hugo/layouts/_default/list.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
{{ define "main" }}
|
||||
<main class="_default-list">
|
||||
<header class="page-header section">
|
||||
<div class="container">
|
||||
<h1 class="page-title">{{.Title}}</h1>
|
||||
</div>
|
||||
</header>
|
||||
<section class="pages section">
|
||||
<div class="container">
|
||||
{{ partial "paginator.html" . }}
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
{{ end }}
|