Compare commits
6 commits
main
...
twitter-ar
Author | SHA1 | Date | |
---|---|---|---|
c6501564f6 | |||
f3da1087e3 | |||
90c2ba8787 | |||
e8899a6ead | |||
74c796d5cd | |||
90806aa8f6 |
24 changed files with 89 additions and 198 deletions
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
title: "{{ replace .Name "-" " " | title }}"
|
|
||||||
slug: link-{{ .Name }}
|
|
||||||
date: {{ .Date }}
|
|
||||||
categories: links
|
|
||||||
draft: true
|
|
||||||
tags: []
|
|
||||||
---
|
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
blog: blog/:year/:month/:slug/
|
blog: blog/:year/:month/:slug/
|
||||||
photos: photos/:year/:month/:slug/
|
photos: photos/:year/:month/:slug/
|
||||||
|
tweets: tweets/:year/:month/:slug/
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
---
|
---
|
||||||
title: "Pajaro Dunes"
|
title: "Pajaro Dunes"
|
||||||
date: 2023-05-30T08:31:34-07:00
|
date: 2023-05-30T08:31:34-07:00
|
||||||
tags: [Travel, Beaches, Tess, EJ, Vacations]
|
categories: Travel
|
||||||
|
tags: [Beaches, Tess, EJ, Vacations]
|
||||||
---
|
---
|
||||||
|
|
||||||
{{< tess >}}, EJ, and I took a weekend trip down the coast over Memorial Day
|
{{< tess >}}, EJ, and I took a weekend trip down the coast over Memorial Day
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "America Tips Into Fascism by Garrett Graff"
|
title: "Link: America Tips Into Fascism"
|
||||||
slug: america-tips-into-fascism
|
slug: america-tips-into-fascism
|
||||||
date: 2025-08-25T22:31:15-06:00
|
date: 2025-08-25T22:31:15-06:00
|
||||||
categories: Links
|
|
||||||
tags:
|
tags:
|
||||||
- Politics
|
- Politics
|
||||||
- USA
|
- USA
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
---
|
|
||||||
title: "I Am an AI Hater by Anthony Moser"
|
|
||||||
slug: link-i-am-an-ai-hater
|
|
||||||
date: 2025-08-28T08:36:59-06:00
|
|
||||||
categories: links
|
|
||||||
tags:
|
|
||||||
- AI
|
|
||||||
- Tech
|
|
||||||
---
|
|
||||||
|
|
||||||
A [fierce argument][link] against AI by Anthony Moser.
|
|
||||||
|
|
||||||
> But I am more than a critic: I am a hater. I am not here to make a careful
|
|
||||||
> comprehensive argument, because people have already done that. ... I am here
|
|
||||||
> to be rude, because this is a rude technology, and it deserves a rude
|
|
||||||
> response.
|
|
||||||
|
|
||||||
[link]: https://anthonymoser.github.io/writing/ai/haterdom/2025/08/26/i-am-an-ai-hater.html
|
|
|
@ -1,8 +1,7 @@
|
||||||
---
|
---
|
||||||
title: "Rings by ND Stevenson"
|
title: "Link: Rings by ND Stevenson"
|
||||||
slug: ndstevenson-rings
|
slug: ndstevenson-rings
|
||||||
date: 2025-08-28T07:43:45-06:00
|
date: 2025-08-28T07:43:45-06:00
|
||||||
categories: Links
|
|
||||||
tags:
|
tags:
|
||||||
- Comics
|
- Comics
|
||||||
- LGBTQIA+
|
- LGBTQIA+
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
---
|
|
||||||
title: "I'm a Student Again"
|
|
||||||
description: I started taking Japanese classes at CCSF.
|
|
||||||
slug: student-again
|
|
||||||
date: 2025-09-02
|
|
||||||
tags:
|
|
||||||
- Life
|
|
||||||
- School
|
|
||||||
- japanese
|
|
||||||
- CCSF
|
|
||||||
---
|
|
||||||
|
|
||||||
I've been fortunate to take two trips to Japan over the last couple years.
|
|
||||||
Leading up to those trips, I picked up learning Japanese, attempting to build
|
|
||||||
some basic language skills for getting around. At first, I used [Duolingo][dja]
|
|
||||||
but recently switched to [Migaku][mja].
|
|
||||||
|
|
||||||
When I returned from our most recent trip, I decided to find a class so I can
|
|
||||||
practice speaking skills. [Community College of San Francisco][ccsf] has an
|
|
||||||
excellent program called "[Free City][fc]" that grants free tuition to residents
|
|
||||||
of the city. It also has [Japanese program][ccsfja]. So I enrolled in their
|
|
||||||
online Japanese 1A course.
|
|
||||||
|
|
||||||
This is my first time taking formal classes since I graduated college. I'm
|
|
||||||
looking forward to learning in a more structured way again, and also getting a
|
|
||||||
chance to practice speaking with people rather than talking at my phone screen.
|
|
||||||
|
|
||||||
[dja]: https://www.duolingo.com/course/ja/en/Learn-Japanese
|
|
||||||
[mja]: https://migaku.com/learn-japanese
|
|
||||||
[ccsf]: https://www.ccsf.edu
|
|
||||||
[ccsfja]: https://www.ccsf.edu/degrees-certificates/japanese
|
|
||||||
[fc]: https://www.ccsf.edu/free-city
|
|
|
@ -2,7 +2,8 @@
|
||||||
title: "Sunset over Pajaro Dunes"
|
title: "Sunset over Pajaro Dunes"
|
||||||
linkTitle: Pajaro Sunset
|
linkTitle: Pajaro Sunset
|
||||||
date: 2023-05-28T20:12:13-07:00
|
date: 2023-05-28T20:12:13-07:00
|
||||||
tags: [Travel, Beaches]
|
categories: Travel
|
||||||
|
tags: ["Beaches"]
|
||||||
---
|
---
|
||||||
|
|
||||||
{{< tess >}}, EJ, and I took a little weekend trip over Memorial Day this year
|
{{< tess >}}, EJ, and I took a little weekend trip over Memorial Day this year
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
title: "Lait's Go"
|
|
||||||
date: 2025-08-27T18:00:41-06:00
|
|
||||||
tags:
|
|
||||||
- Travel
|
|
||||||
- Puns
|
|
||||||
- Milk
|
|
||||||
---
|
|
||||||
|
|
||||||
Spotted in a small café at the top of Sulphur Mountain in Banff, Alberta: a
|
|
||||||
delightful bilingual pun. In English, this milk is called "Milk 2 Go". In
|
|
||||||
French, it's called "Lait's Go".
|
|
BIN
content/photos/2025/laits-go/laits-go.jpg
(Stored with Git LFS)
BIN
content/photos/2025/laits-go/laits-go.jpg
(Stored with Git LFS)
Binary file not shown.
|
@ -1,18 +0,0 @@
|
||||||
---
|
|
||||||
title: "Lake Louise"
|
|
||||||
date: 2025-08-27T10:15:06-06:00
|
|
||||||
draft: true
|
|
||||||
tags:
|
|
||||||
- Travel
|
|
||||||
- Nature
|
|
||||||
- Lake Louise
|
|
||||||
- Alberta
|
|
||||||
- Canada
|
|
||||||
---
|
|
||||||
|
|
||||||
Some friends and I had the chance to travel to [Lake Louise][] this summer. It's
|
|
||||||
stunningly blue -- unlike any body of water I've ever seen -- and surrounded by
|
|
||||||
picturesque mountains. We had only a few hours here so we did a short hike
|
|
||||||
around the lake, and then headed to Moraine Lake.
|
|
||||||
|
|
||||||
[Lake Louise]: https://www.banfflakelouise.com
|
|
BIN
content/photos/2025/lake-louise/lake-louise.jpg
(Stored with Git LFS)
BIN
content/photos/2025/lake-louise/lake-louise.jpg
(Stored with Git LFS)
Binary file not shown.
BIN
content/photos/2025/lake-louise/thumbnail.jpg
(Stored with Git LFS)
BIN
content/photos/2025/lake-louise/thumbnail.jpg
(Stored with Git LFS)
Binary file not shown.
|
@ -1,15 +0,0 @@
|
||||||
---
|
|
||||||
title: "Mushrooms"
|
|
||||||
date: 2025-08-27T09:55:45-06:00
|
|
||||||
draft: true
|
|
||||||
tags:
|
|
||||||
- Nature
|
|
||||||
- Mushrooms
|
|
||||||
- Fungi
|
|
||||||
- Lake Louise
|
|
||||||
- Alberta
|
|
||||||
- Canada
|
|
||||||
---
|
|
||||||
|
|
||||||
A small colony of mushrooms growing on a stump. Found at Lake Louise, Alberta,
|
|
||||||
Canada.
|
|
BIN
content/photos/2025/mushrooms/mushrooms.jpg
(Stored with Git LFS)
BIN
content/photos/2025/mushrooms/mushrooms.jpg
(Stored with Git LFS)
Binary file not shown.
42
content/tweets/_content.gotmpl.tmp
Normal file
42
content/tweets/_content.gotmpl.tmp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{{/* vim: ft=gohtmltmpl: */}}
|
||||||
|
|
||||||
|
{{ $tweets := slice }}
|
||||||
|
{{ with resources.Get "twitter/tweets.json" }}
|
||||||
|
{{ with . | transform.Unmarshal }}
|
||||||
|
{{ $tweets = . }}
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ range $tweets }}
|
||||||
|
{{ $tweet := .tweet }}
|
||||||
|
|
||||||
|
{{
|
||||||
|
$content := dict
|
||||||
|
"mediaType" "text/markdown"
|
||||||
|
"value" (partial "twitter/assembleTweetMarkdown.html" $tweet)
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{ $creationDate := partial "twitter/parseCreatedAtDate.html" $tweet.created_at }}
|
||||||
|
{{ $title := printf "Tweet on %s" (time.Format "2 January 2005" $creationDate) }}
|
||||||
|
{{ $path := printf "%s/%s" $creationDate.Year $tweet.id_str }}
|
||||||
|
|
||||||
|
{{ $dates := dict "date" $creationDate }}
|
||||||
|
|
||||||
|
{{
|
||||||
|
$params := dict
|
||||||
|
"favoriteCount" $tweet.favorite_count
|
||||||
|
"retweetCount" $tweet.retweet_count
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{
|
||||||
|
$page := dict
|
||||||
|
"title" $title
|
||||||
|
"dates" $dates
|
||||||
|
"content" $content
|
||||||
|
"kind" "page"
|
||||||
|
"params" $params
|
||||||
|
"path" $path
|
||||||
|
}}
|
||||||
|
|
||||||
|
{{ $.AddPage $page }}
|
||||||
|
{{ end }}
|
3
content/tweets/_index.md
Normal file
3
content/tweets/_index.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
title: Tweets
|
||||||
|
---
|
|
@ -11,3 +11,6 @@ nethackScore: Score
|
||||||
nethackDungeonLevel: Dungeon Level
|
nethackDungeonLevel: Dungeon Level
|
||||||
nethackCharacterLevel: Character Level
|
nethackCharacterLevel: Character Level
|
||||||
nethackHP: HP
|
nethackHP: HP
|
||||||
|
|
||||||
|
favorites: Favorites
|
||||||
|
retweets: Retweets
|
||||||
|
|
14
layouts/tweets/list.html
Normal file
14
layouts/tweets/list.html
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
<main class="main--list">
|
||||||
|
<header class="page-header">
|
||||||
|
{{ partial "page_header.html" (dict "page" .) }}
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{ $paginator := .Paginate .Pages.ByPublishDate.Reverse 100 }}
|
||||||
|
{{ range $paginator.Pages }}
|
||||||
|
{{ .Render "page_summary" }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ partial "pagination.html" . }}
|
||||||
|
</main>
|
||||||
|
{{ end }}
|
18
layouts/tweets/page_summary.html
Normal file
18
layouts/tweets/page_summary.html
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<article class="page-summary">
|
||||||
|
{{ .Content }}
|
||||||
|
|
||||||
|
{{- if .Date -}}
|
||||||
|
{{/* TODO: Include time in this date */}}
|
||||||
|
{{- partial "page/date.html" (dict "page" . "style" "datetime") -}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
<div class="tag" data-name="favorites">
|
||||||
|
<span class="tag__name">{{ T "favorites" }}</span>
|
||||||
|
<span class="tag__value">{{ .Params.favoriteCount }}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tag" data-name="retweets">
|
||||||
|
<span class="tag__name">{{ T "retweets" }}</span>
|
||||||
|
<span class="tag__value">{{ .Params.retweetCount }}</span>
|
||||||
|
</div>
|
||||||
|
</article>
|
|
@ -1,72 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
# Eryn Wells <eryn@erynwells.me>
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import datetime
|
|
||||||
import subprocess
|
|
||||||
from typing import List
|
|
||||||
from .scripting import Command
|
|
||||||
|
|
||||||
|
|
||||||
DATE_FORMAT = "%Y-%m-%d"
|
|
||||||
|
|
||||||
|
|
||||||
class DeploymentCommand(Command):
|
|
||||||
@property
|
|
||||||
def help(self) -> str:
|
|
||||||
return 'Deployment tools'
|
|
||||||
|
|
||||||
def add_arguments(self, parser: argparse.ArgumentParser):
|
|
||||||
commands = parser.add_subparsers(title="Deployment", required=True)
|
|
||||||
|
|
||||||
deployment_command = commands.add_parser(
|
|
||||||
'next-tag',
|
|
||||||
help='Calculate the next deployment tag for a given date, examining all other tags for that day'
|
|
||||||
)
|
|
||||||
deployment_command.add_argument(
|
|
||||||
'--date', '-d',
|
|
||||||
type=self.__class__.parse_date_argument,
|
|
||||||
default=datetime.date.today(),
|
|
||||||
help="date to calculate a new deployment tag for (default: today)"
|
|
||||||
)
|
|
||||||
deployment_command.set_defaults(handler=self.handle_next_deployment_tag_command)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def parse_date_argument(date_string: str) -> datetime.date:
|
|
||||||
return datetime.datetime.strptime(date_string, DATE_FORMAT).date()
|
|
||||||
|
|
||||||
def handle_next_deployment_tag_command(self, args: argparse.Namespace):
|
|
||||||
next_deployment_tag = deployment_tag_for_date(args.date)
|
|
||||||
print(next_deployment_tag)
|
|
||||||
|
|
||||||
def deployment_tag_for_date(date: datetime.date) -> str:
|
|
||||||
formatted_date = date.strftime(DATE_FORMAT)
|
|
||||||
|
|
||||||
def deploy_tag_filter(tag):
|
|
||||||
return tag.startswith("deploy-") and formatted_date in tag
|
|
||||||
|
|
||||||
filtered_tags = sorted(filter(deploy_tag_filter, git_tags()))
|
|
||||||
|
|
||||||
if len(filtered_tags) == 0:
|
|
||||||
return f"deploy-{formatted_date}-01"
|
|
||||||
else:
|
|
||||||
last_tag = filtered_tags[-1]
|
|
||||||
components = last_tag.split("-")
|
|
||||||
if len(components) == 5:
|
|
||||||
# A previous numbered deployment. Add one to the last deployment
|
|
||||||
# number.
|
|
||||||
deployment_number = int(components[-1]) + 1
|
|
||||||
return f"deploy-{formatted_date}-{deployment_number:02}"
|
|
||||||
else:
|
|
||||||
# An old style deployment tag that doesn't have a number. There
|
|
||||||
# should only ever be one of these.
|
|
||||||
assert len(filtered_tags) == 1
|
|
||||||
return f"deploy-{formatted_date}-02"
|
|
||||||
|
|
||||||
|
|
||||||
def git_tags() -> List[str]:
|
|
||||||
return subprocess.check_output(
|
|
||||||
"git tag -l",
|
|
||||||
shell=True,
|
|
||||||
encoding="utf-8"
|
|
||||||
).splitlines()
|
|
|
@ -20,5 +20,5 @@ class Command:
|
||||||
def help(self) -> str:
|
def help(self) -> str:
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
def add_arguments(self, parser: argparse.ArgumentParser):
|
def add_arguments(self, _: argparse.ArgumentParser):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
|
@ -9,12 +9,10 @@ import argparse
|
||||||
from typing import List
|
from typing import List
|
||||||
from erynwells_me.scripting import Command
|
from erynwells_me.scripting import Command
|
||||||
from erynwells_me.weeknotes import WeeknotesCommand
|
from erynwells_me.weeknotes import WeeknotesCommand
|
||||||
from erynwells_me.deployment import DeploymentCommand
|
|
||||||
|
|
||||||
|
|
||||||
COMMANDS: List[Command] = [
|
COMMANDS: List[Command] = [
|
||||||
WeeknotesCommand(),
|
WeeknotesCommand(),
|
||||||
DeploymentCommand(),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit d158b0db8ebaaad35c5ed7fea31db7bee930eb03
|
Subproject commit 4c101a552eb10ed87a5bec5bee741e65aa80daec
|
Loading…
Add table
Add a link
Reference in a new issue