mirror of
https://github.com/Brandon-Rozek/website.git
synced 2024-11-21 15:56:29 -05:00
Merge pull request #2 from Brandon-Rozek/merge-22-05-24-1
Merge 22 05 24 1
This commit is contained in:
commit
05779f7d36
9 changed files with 4072 additions and 0 deletions
93
content/blog/displaying-hikes-with-gpxstudio.md
Normal file
93
content/blog/displaying-hikes-with-gpxstudio.md
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
---
|
||||||
|
title: "Displaying Hikes with gpx.studio"
|
||||||
|
date: 2022-05-23T16:35:01-04:00
|
||||||
|
draft: false
|
||||||
|
tags: []
|
||||||
|
math: false
|
||||||
|
---
|
||||||
|
|
||||||
|
As the weather gets warmer, I am starting to go on more hikes. Several people on their websites share a Strava embed which highlights a path taken during their workout. I believe as a community this has great potential for sharing our favorite hiking paths. I don't, however, want to rely on Strava to host my GPS data. Instead, we will showcase how to accomplish the same effect but with open technologies.
|
||||||
|
|
||||||
|
At the end of this post, we will achieve in creating an embed like the following:
|
||||||
|
|
||||||
|
{{< displayGPX "2022-05-18-Burden-Pond-Preserve.gpx" >}}
|
||||||
|
|
||||||
|
To get there, we will talk about:
|
||||||
|
|
||||||
|
- [Recording the walk](#recording-the-walk)
|
||||||
|
- [Grabing an embed](#grabbing-an-embed)
|
||||||
|
- [Shortcodes for website](#shortcodes-for-website)
|
||||||
|
- [Conclusion](#conclusion)
|
||||||
|
|
||||||
|
## Recording the Walk
|
||||||
|
|
||||||
|
My first requirement is that the route is recorded in an open source format. For this I chose GPX otherwise known as the GPS Exchange format. There are three types of messages that a GPX file can contain:
|
||||||
|
|
||||||
|
- **Waypoint**: A point of interested denoted by a latitude/longitude/altitude (LLA) and a time with a small note describing it.
|
||||||
|
- **Route**: An ordered list of LLA and time points used to denote a navigation from a start to end location.
|
||||||
|
- **Track**: An ordered list of frequent LLA and time points denoting a GPS feed.
|
||||||
|
|
||||||
|
Popular applications such as AllTrails and Strava allow you to export your activities as GPX files. These will generally contain the track information. A cool open source alternative application called [OSMTracker](https://wiki.openstreetmap.org/wiki/OSMTracker_(Android)) records track information as well as enabling an easy way to create waypoints.
|
||||||
|
|
||||||
|
## Grabbing an embed
|
||||||
|
|
||||||
|
To create the embed we will use a project called [gpx.studio](https://gpx.studio). It's a great [open source](https://github.com/gpxstudio/gpxstudio.github.io) project created by vcoppe on GitHub and built on top of [Mapbox](https://www.mapbox.com/) and [OpenStreetMap](https://www.openstreetmap.org/). If you end up using this application, consider providing a [donation](https://ko-fi.com/gpxstudio) to their developer to cover for some of the hosting and API costs.
|
||||||
|
Our next step is to upload the GPX file we recorded from our exercise onto our website and configure our webserver so that gpx.studio can access the file. I store my hikes in `data/hikes` and created the following Nginx rule:
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
# Allow any application access
|
||||||
|
location /data/hikes {
|
||||||
|
add_header Access-Control-Allow-Origin "*";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Next, go to the [gpx.studio about page](https://gpx.studio/about.html#embed) to enter in the URL in the embed section. It will then output the following HTML code to add to your website
|
||||||
|
|
||||||
|
```html
|
||||||
|
<iframe
|
||||||
|
src="https://gpx.studio/?state=%7B%22urls%22:%5B%22https%3A%2F%2Fbrandonrozek.com%2Fdata%2Fhikes%2F2022-05-18-Burden-Pond-Preserve.gpx%22%5D%7D&embed&distance"
|
||||||
|
width="100%"
|
||||||
|
height="500"
|
||||||
|
frameborder="0"
|
||||||
|
allowfullscreen>
|
||||||
|
<p><a href="https://gpx.studio/?state=%7B%22urls%22:%5B%22https%3A%2F%2Fbrandonrozek.com%2Fdata%2Fhikes%2F2022-05-18-Burden-Pond-Preserve.gpx%22%5D%7D"></a></p>
|
||||||
|
</iframe>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Shortcodes for website
|
||||||
|
|
||||||
|
Notice that the URL structure follows a prescribed format. This means we can create a Hugo shortcode to generate these iFrames for us! The embed shown earlier on this page was created using the following shortcode command:
|
||||||
|
|
||||||
|
{{< displayGPX "2022-05-18-Burden-Pond-Preserve.gpx" >}}
|
||||||
|
|
||||||
|
So what's the structure of the URLs? If we perform an URL decode on the IFrame URL we get the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
https://gpx.studio/?
|
||||||
|
state={"urls":["https://brandonrozek.com/data/hikes/2022-05-18-Burden-Pond-Preserve.gpx"]}
|
||||||
|
&embed&distance
|
||||||
|
```
|
||||||
|
|
||||||
|
We can then replace the URL in the array with the one that you'll use for your website. Since I'm sticking all my GPX files under https://brandonrozek.com/data/hikes, I only have to pass the filename into the shortcode which is stored under `layouts/shortcodes/displayGPX.html`.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Grab the filename and append it to the base url -->
|
||||||
|
{{ $url := printf "%sdata/hikes/%s" .Site.BaseURL (.Get 0) }}
|
||||||
|
<!-- Make the state={...} URL friendly -->
|
||||||
|
{{ $url_state := querify "state" (printf "{\"urls\":[\"%s\"]}" $url) }}
|
||||||
|
<!-- Create the Iframe and A tag URLs -->
|
||||||
|
{{ $iframe_url := printf "https://gpx.studio/?%s&embed&distance" $url_state }}
|
||||||
|
{{ $a_url := printf "https://gpx.studio/?%s" $url_state }}
|
||||||
|
<!-- Output the IFrame -->
|
||||||
|
<iframe {{ printf "src=%q" $iframe_url | safeHTMLAttr }}
|
||||||
|
width="100%"
|
||||||
|
height="500"
|
||||||
|
frameborder="0"
|
||||||
|
allowfullscreen>
|
||||||
|
<p><a {{ printf "href=%q" $a_url | safeHTMLAttr }}></a></p>
|
||||||
|
</iframe>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
With this we created a cool visual representation of GPX data on our own website built on top of open technologies. Since our routes are stored in GPX files, if gpx.studio was to go down, then we can likely find an alternative to plot the file for us. Gpx.studio is also built on top of OpenStreetMap, a great long-standing community driven mapping project.
|
6
content/toots/108336567995795980.md
Normal file
6
content/toots/108336567995795980.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
{"id": "108336567995795980", "in_reply_to_id": null, "in_reply_to_account_id": null, "sensitive": false, "spoiler_text": "", "visibility": "public", "language": "en", "replies_count": 1, "reblogs_count": 3, "favourites_count": 8, "edited_at": null, "reblog": null, "application": null, "account": {"id": "108219415927856966", "username": "brozek", "acct": "brozek", "display_name": "Brandon Rozek", "url": "https://fosstodon.org/@brozek", "avatar": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "avatar_static": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "header": "https://fosstodon.org/headers/original/missing.png", "header_static": "https://fosstodon.org/headers/original/missing.png", "emojis": [{"shortcode": "kdelight", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/original/22f2a8da54322c05.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/static/22f2a8da54322c05.png", "visible_in_picker": true}, {"shortcode": "fedora", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/original/f0c78925a380caa3.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/static/f0c78925a380caa3.png", "visible_in_picker": true}, {"shortcode": "firefoxnew", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/original/9ad36311d3fa683b.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/static/9ad36311d3fa683b.png", "visible_in_picker": true}, {"shortcode": "thunderbird", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/original/4bc6f0caa347f85a.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/static/4bc6f0caa347f85a.png", "visible_in_picker": true}, {"shortcode": "nextcloud", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/original/nextcloud.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/static/nextcloud.png", "visible_in_picker": true}], "fields": [{"name": "Website", "value": "<a href=\"https://brandonrozek.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">brandonrozek.com</span><span class=\"invisible\"></span></a>", "verified_at": "2022-05-01T03:44:26.506+00:00"}, {"name": "GitHub", "value": "<a href=\"https://github.com/Brandon-Rozek\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">github.com/Brandon-Rozek</span><span class=\"invisible\"></span></a>", "verified_at": null}, {"name": "Uses", "value": ":kdelight: :fedora: :firefoxnew: :thunderbird: :nextcloud:", "verified_at": null}]}, "media_attachments": [], "mentions": [], "tags": [{"name": "hugo", "url": "https://fosstodon.org/tags/hugo"}], "emojis": [], "card": {"url": "https://brandonrozek.com/blog/displaying-a-toot-hugo/", "title": "Displaying a Toot in Hugo", "description": "Mastodon for me is a nice friendly place and I enjoy participating in that community. With that, I want to be able to share the great toots out there in my own website as well as keep an archive of all the toots I made. This post will go over the code I wrote in Hugo to display a single toot into a blog post.\nExample toot:\nBrandon Rozek Tooted on May 20, 2022 15:09", "type": "link", "author_name": "Brandon Rozek", "author_url": "https://brandonrozek.com/", "provider_name": "", "provider_url": "", "html": "", "width": 0, "height": 0, "image": null, "embed_url": "", "blurhash": null}, "poll": null, "syndication": "https://fosstodon.org/@brozek/108336567995795980", "date": "2022-05-20T22:13:58.812Z"}
|
||||||
|
---
|
||||||
|
{{< unsafe >}}
|
||||||
|
<p>I wrote up a post on how I display a single toot using <a href="https://fosstodon.org/tags/Hugo" class="mention hashtag" rel="tag">#<span>Hugo</span></a> on my website.</p><p><a href="https://brandonrozek.com/blog/displaying-a-toot-hugo/" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="ellipsis">brandonrozek.com/blog/displayi</span><span class="invisible">ng-a-toot-hugo/</span></a></p><p>This doesn't cover how I archive all my toots yet, that deserves a separate post :)</p>
|
||||||
|
{{< /unsafe >}}
|
6
content/toots/108337038818866764.md
Normal file
6
content/toots/108337038818866764.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
{"id": "108337038818866764", "in_reply_to_id": "108336969581645535", "in_reply_to_account_id": "329797", "sensitive": false, "spoiler_text": "", "visibility": "unlisted", "language": "en", "replies_count": 1, "reblogs_count": 0, "favourites_count": 0, "edited_at": null, "reblog": null, "application": null, "account": {"id": "108219415927856966", "username": "brozek", "acct": "brozek", "display_name": "Brandon Rozek", "url": "https://fosstodon.org/@brozek", "avatar": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "avatar_static": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "header": "https://fosstodon.org/headers/original/missing.png", "header_static": "https://fosstodon.org/headers/original/missing.png", "emojis": [{"shortcode": "kdelight", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/original/22f2a8da54322c05.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/static/22f2a8da54322c05.png", "visible_in_picker": true}, {"shortcode": "fedora", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/original/f0c78925a380caa3.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/static/f0c78925a380caa3.png", "visible_in_picker": true}, {"shortcode": "firefoxnew", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/original/9ad36311d3fa683b.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/static/9ad36311d3fa683b.png", "visible_in_picker": true}, {"shortcode": "thunderbird", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/original/4bc6f0caa347f85a.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/static/4bc6f0caa347f85a.png", "visible_in_picker": true}, {"shortcode": "nextcloud", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/original/nextcloud.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/static/nextcloud.png", "visible_in_picker": true}], "fields": [{"name": "Website", "value": "<a href=\"https://brandonrozek.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">brandonrozek.com</span><span class=\"invisible\"></span></a>", "verified_at": "2022-05-01T03:44:26.506+00:00"}, {"name": "GitHub", "value": "<a href=\"https://github.com/Brandon-Rozek\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">github.com/Brandon-Rozek</span><span class=\"invisible\"></span></a>", "verified_at": null}, {"name": "Uses", "value": ":kdelight: :fedora: :firefoxnew: :thunderbird: :nextcloud:", "verified_at": null}]}, "media_attachments": [], "mentions": [{"id": "329797", "username": "ilyess", "url": "https://mastodon.online/@ilyess", "acct": "ilyess@mastodon.online"}], "tags": [], "emojis": [], "card": null, "poll": null, "syndication": "https://fosstodon.org/@brozek/108337038818866764", "date": "2022-05-21T00:13:42.996Z"}
|
||||||
|
---
|
||||||
|
{{< unsafe >}}
|
||||||
|
<p><span class="h-card"><a href="https://mastodon.online/@ilyess" class="u-url mention">@<span>ilyess</span></a></span> Yes I do have an RSS Feed! Multiple in fact. I recommend <a href="https://brandonrozek.com/blog/index.xml" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="ellipsis">brandonrozek.com/blog/index.xm</span><span class="invisible">l</span></a> to get only my blog posts. For other feeds, feel free to check out <a href="https://brandonrozek.com/subscribe" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="">brandonrozek.com/subscribe</span><span class="invisible"></span></a></p>
|
||||||
|
{{< /unsafe >}}
|
6
content/toots/108337284366872795.md
Normal file
6
content/toots/108337284366872795.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
{"id": "108337284366872795", "in_reply_to_id": "108337143526298442", "in_reply_to_account_id": "108336800961737439", "sensitive": false, "spoiler_text": "", "visibility": "unlisted", "language": "en", "replies_count": 0, "reblogs_count": 0, "favourites_count": 0, "edited_at": null, "reblog": null, "application": {"name": "Tusky", "website": "https://tusky.app"}, "account": {"id": "108219415927856966", "username": "brozek", "acct": "brozek", "display_name": "Brandon Rozek", "url": "https://fosstodon.org/@brozek", "avatar": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "avatar_static": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "header": "https://fosstodon.org/headers/original/missing.png", "header_static": "https://fosstodon.org/headers/original/missing.png", "emojis": [{"shortcode": "kdelight", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/original/22f2a8da54322c05.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/static/22f2a8da54322c05.png", "visible_in_picker": true}, {"shortcode": "fedora", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/original/f0c78925a380caa3.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/static/f0c78925a380caa3.png", "visible_in_picker": true}, {"shortcode": "firefoxnew", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/original/9ad36311d3fa683b.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/static/9ad36311d3fa683b.png", "visible_in_picker": true}, {"shortcode": "thunderbird", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/original/4bc6f0caa347f85a.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/static/4bc6f0caa347f85a.png", "visible_in_picker": true}, {"shortcode": "nextcloud", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/original/nextcloud.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/static/nextcloud.png", "visible_in_picker": true}], "fields": [{"name": "Website", "value": "<a href=\"https://brandonrozek.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">brandonrozek.com</span><span class=\"invisible\"></span></a>", "verified_at": "2022-05-01T03:44:26.506+00:00"}, {"name": "GitHub", "value": "<a href=\"https://github.com/Brandon-Rozek\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">github.com/Brandon-Rozek</span><span class=\"invisible\"></span></a>", "verified_at": null}, {"name": "Uses", "value": ":kdelight: :fedora: :firefoxnew: :thunderbird: :nextcloud:", "verified_at": null}]}, "media_attachments": [], "mentions": [{"id": "108336800961737439", "username": "mcrute", "url": "https://fosstodon.org/@mcrute", "acct": "mcrute"}, {"id": "108131403419806587", "username": "gruerproof", "url": "https://fosstodon.org/@gruerproof", "acct": "gruerproof"}, {"id": "243739", "username": "FediFollows", "url": "https://mastodon.online/@FediFollows", "acct": "FediFollows@mastodon.online"}], "tags": [], "emojis": [], "card": {"url": "https://communitywiki.org/trunk", "title": "Trunk for Mastodon", "description": "", "type": "link", "author_name": "", "author_url": "", "provider_name": "", "provider_url": "", "html": "", "width": 0, "height": 0, "image": null, "embed_url": "", "blurhash": null}, "poll": null, "syndication": "https://fosstodon.org/@brozek/108337284366872795", "date": "2022-05-21T01:16:09.761Z"}
|
||||||
|
---
|
||||||
|
{{< unsafe >}}
|
||||||
|
<p><span class="h-card"><a href="https://fosstodon.org/@mcrute" class="u-url mention">@<span>mcrute</span></a></span> <span class="h-card"><a href="https://fosstodon.org/@gruerproof" class="u-url mention">@<span>gruerproof</span></a></span> Welcome! I find the community very friendly :)</p><p>Your feed might be quiet initially but as you follow more people, things will get more exciting.</p><p>To find your folks: check out the local feed, search up tags you're interested in, follow <span class="h-card"><a href="https://mastodon.online/@FediFollows" class="u-url mention">@<span>FediFollows</span></a></span>, and find people by topic via trunks (<a href="https://communitywiki.org/trunk" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="">communitywiki.org/trunk</span><span class="invisible"></span></a>)</p><p>Most of all, have fun and happy tooting!</p>
|
||||||
|
{{< /unsafe >}}
|
6
content/toots/108338098436219348.md
Normal file
6
content/toots/108338098436219348.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
{"id": "108338098436219348", "in_reply_to_id": null, "in_reply_to_account_id": null, "sensitive": false, "spoiler_text": "", "visibility": "public", "language": "en", "replies_count": 0, "reblogs_count": 0, "favourites_count": 3, "edited_at": null, "reblog": null, "application": null, "account": {"id": "108219415927856966", "username": "brozek", "acct": "brozek", "display_name": "Brandon Rozek", "url": "https://fosstodon.org/@brozek", "avatar": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "avatar_static": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "header": "https://fosstodon.org/headers/original/missing.png", "header_static": "https://fosstodon.org/headers/original/missing.png", "emojis": [{"shortcode": "kdelight", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/original/22f2a8da54322c05.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/static/22f2a8da54322c05.png", "visible_in_picker": true}, {"shortcode": "fedora", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/original/f0c78925a380caa3.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/static/f0c78925a380caa3.png", "visible_in_picker": true}, {"shortcode": "firefoxnew", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/original/9ad36311d3fa683b.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/static/9ad36311d3fa683b.png", "visible_in_picker": true}, {"shortcode": "thunderbird", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/original/4bc6f0caa347f85a.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/static/4bc6f0caa347f85a.png", "visible_in_picker": true}, {"shortcode": "nextcloud", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/original/nextcloud.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/static/nextcloud.png", "visible_in_picker": true}], "fields": [{"name": "Website", "value": "<a href=\"https://brandonrozek.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">brandonrozek.com</span><span class=\"invisible\"></span></a>", "verified_at": "2022-05-01T03:44:26.506+00:00"}, {"name": "GitHub", "value": "<a href=\"https://github.com/Brandon-Rozek\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">github.com/Brandon-Rozek</span><span class=\"invisible\"></span></a>", "verified_at": null}, {"name": "Uses", "value": ":kdelight: :fedora: :firefoxnew: :thunderbird: :nextcloud:", "verified_at": null}]}, "media_attachments": [], "mentions": [], "tags": [{"name": "hugo", "url": "https://fosstodon.org/tags/hugo"}], "emojis": [], "card": {"url": "https://brandonrozek.com/blog/archiving-toots/", "title": "Archiving Toots", "description": "In the spirit of syndicating Mastodon toots to my own site, I wrote a Python script that turns toots into Hugo markdown files.\nIn this post we\u2019ll go over:\n Mastodon API Reformatting toot Creating the Markdown files Conclusion Mastodon API Before we can retrieve our toots, we need to know what user id of our account. James Cahill wrote a very clean web tool to grab your user id.", "type": "link", "author_name": "Brandon Rozek", "author_url": "https://brandonrozek.com/", "provider_name": "", "provider_url": "", "html": "", "width": 0, "height": 0, "image": null, "embed_url": "", "blurhash": null}, "poll": null, "syndication": "https://fosstodon.org/@brozek/108338098436219348", "date": "2022-05-21T04:43:11.481Z"}
|
||||||
|
---
|
||||||
|
{{< unsafe >}}
|
||||||
|
<p>I give a more informal account of how I archive my toots onto my <a href="https://fosstodon.org/tags/Hugo" class="mention hashtag" rel="tag">#<span>Hugo</span></a> blog. </p><p><a href="https://brandonrozek.com/blog/archiving-toots/" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="ellipsis">brandonrozek.com/blog/archivin</span><span class="invisible">g-toots/</span></a></p><p>My Python script which creates the Hugo files:</p><p><a href="https://github.com/Brandon-Rozek/website/blob/095622e242ae98a0e6686dd2ad0c304a58d8a677/refreshtoots_v2.py" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="ellipsis">github.com/Brandon-Rozek/websi</span><span class="invisible">te/blob/095622e242ae98a0e6686dd2ad0c304a58d8a677/refreshtoots_v2.py</span></a></p>
|
||||||
|
{{< /unsafe >}}
|
6
content/toots/108340540548598811.md
Normal file
6
content/toots/108340540548598811.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
{"id": "108340540548598811", "in_reply_to_id": "108340367579299379", "in_reply_to_account_id": "108232461377149153", "sensitive": false, "spoiler_text": "", "visibility": "unlisted", "language": "en", "replies_count": 1, "reblogs_count": 0, "favourites_count": 0, "edited_at": null, "reblog": null, "application": {"name": "Tusky", "website": "https://tusky.app"}, "account": {"id": "108219415927856966", "username": "brozek", "acct": "brozek", "display_name": "Brandon Rozek", "url": "https://fosstodon.org/@brozek", "avatar": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "avatar_static": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "header": "https://fosstodon.org/headers/original/missing.png", "header_static": "https://fosstodon.org/headers/original/missing.png", "emojis": [{"shortcode": "kdelight", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/original/22f2a8da54322c05.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/static/22f2a8da54322c05.png", "visible_in_picker": true}, {"shortcode": "fedora", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/original/f0c78925a380caa3.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/static/f0c78925a380caa3.png", "visible_in_picker": true}, {"shortcode": "firefoxnew", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/original/9ad36311d3fa683b.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/static/9ad36311d3fa683b.png", "visible_in_picker": true}, {"shortcode": "thunderbird", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/original/4bc6f0caa347f85a.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/static/4bc6f0caa347f85a.png", "visible_in_picker": true}, {"shortcode": "nextcloud", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/original/nextcloud.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/static/nextcloud.png", "visible_in_picker": true}], "fields": [{"name": "Website", "value": "<a href=\"https://brandonrozek.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">brandonrozek.com</span><span class=\"invisible\"></span></a>", "verified_at": "2022-05-01T03:44:26.506+00:00"}, {"name": "GitHub", "value": "<a href=\"https://github.com/Brandon-Rozek\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">github.com/Brandon-Rozek</span><span class=\"invisible\"></span></a>", "verified_at": null}, {"name": "Uses", "value": ":kdelight: :fedora: :firefoxnew: :thunderbird: :nextcloud:", "verified_at": null}]}, "media_attachments": [], "mentions": [{"id": "108232461377149153", "username": "vleugelcomplement", "url": "https://qoto.org/@vleugelcomplement", "acct": "vleugelcomplement@qoto.org"}], "tags": [], "emojis": [], "card": null, "poll": null, "syndication": "https://fosstodon.org/@brozek/108340540548598811", "date": "2022-05-21T15:04:15.148Z"}
|
||||||
|
---
|
||||||
|
{{< unsafe >}}
|
||||||
|
<p><span class="h-card"><a href="https://qoto.org/@vleugelcomplement" class="u-url mention">@<span>vleugelcomplement</span></a></span> An internal wiki for a research group is a great idea! I'm going to advocate for one now :)</p>
|
||||||
|
{{< /unsafe >}}
|
6
content/toots/108349440598005165.md
Normal file
6
content/toots/108349440598005165.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
{"id": "108349440598005165", "in_reply_to_id": null, "in_reply_to_account_id": null, "sensitive": false, "spoiler_text": "", "visibility": "unlisted", "language": "en", "replies_count": 0, "reblogs_count": 0, "favourites_count": 0, "edited_at": null, "reblog": null, "application": null, "account": {"id": "108219415927856966", "username": "brozek", "acct": "brozek", "display_name": "Brandon Rozek", "url": "https://fosstodon.org/@brozek", "avatar": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "avatar_static": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "header": "https://fosstodon.org/headers/original/missing.png", "header_static": "https://fosstodon.org/headers/original/missing.png", "emojis": [{"shortcode": "kdelight", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/original/22f2a8da54322c05.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/static/22f2a8da54322c05.png", "visible_in_picker": true}, {"shortcode": "fedora", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/original/f0c78925a380caa3.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/static/f0c78925a380caa3.png", "visible_in_picker": true}, {"shortcode": "firefoxnew", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/original/9ad36311d3fa683b.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/static/9ad36311d3fa683b.png", "visible_in_picker": true}, {"shortcode": "thunderbird", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/original/4bc6f0caa347f85a.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/static/4bc6f0caa347f85a.png", "visible_in_picker": true}, {"shortcode": "nextcloud", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/original/nextcloud.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/static/nextcloud.png", "visible_in_picker": true}], "fields": [{"name": "Website", "value": "<a href=\"https://brandonrozek.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">brandonrozek.com</span><span class=\"invisible\"></span></a>", "verified_at": "2022-05-01T03:44:26.506+00:00"}, {"name": "GitHub", "value": "<a href=\"https://github.com/Brandon-Rozek\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">github.com/Brandon-Rozek</span><span class=\"invisible\"></span></a>", "verified_at": null}, {"name": "Uses", "value": ":kdelight: :fedora: :firefoxnew: :thunderbird: :nextcloud:", "verified_at": null}]}, "media_attachments": [{"id": "108349402676794782", "type": "image", "url": "https://cdn.fosstodon.org/media_attachments/files/108/349/402/676/794/782/original/c720ddbaf4d810be.jpg", "preview_url": "https://cdn.fosstodon.org/media_attachments/files/108/349/402/676/794/782/small/c720ddbaf4d810be.jpg", "remote_url": null, "preview_remote_url": null, "text_url": null, "meta": {"original": {"width": 1280, "height": 960, "size": "1280x960", "aspect": 1.3333333333333333}, "small": {"width": 461, "height": 346, "size": "461x346", "aspect": 1.3323699421965318}, "focus": {"x": -1.0, "y": 0.03}}, "description": "Brandon sitting criss-crossed on a rock by a small creek.", "blurhash": "U9DmKdXB4WNXG}%eQ[RkO{avaR%N%XV=NFIr"}, {"id": "108349403579873291", "type": "image", "url": "https://cdn.fosstodon.org/media_attachments/files/108/349/403/579/873/291/original/9f1cdffa3863f149.jpg", "preview_url": "https://cdn.fosstodon.org/media_attachments/files/108/349/403/579/873/291/small/9f1cdffa3863f149.jpg", "remote_url": null, "preview_remote_url": null, "text_url": null, "meta": {"original": {"width": 960, "height": 1280, "size": "960x1280", "aspect": 0.75}, "small": {"width": 346, "height": 461, "size": "346x461", "aspect": 0.7505422993492408}, "focus": {"x": 0.0, "y": 0.0}}, "description": "Clare sitting on a rock by a creek", "blurhash": "U8D0DM8{M]E2GxIVNP?GFS?IjLE1pcsq$uNH"}], "mentions": [], "tags": [], "emojis": [], "card": null, "poll": null, "syndication": "https://fosstodon.org/@brozek/108349440598005165", "date": "2022-05-23T04:47:39.128Z"}
|
||||||
|
---
|
||||||
|
{{< unsafe >}}
|
||||||
|
<p>Last weekend my partner and I visited North Adams, Massachusetts where we checked out the Natural Bridge State Park and the MOCA. </p><p>I neglected to check the park website ahead of time to see that the main trail was closed. We had plenty of fun in a nearby creek regardless :)</p>
|
||||||
|
{{< /unsafe >}}
|
6
content/toots/108353932883868446.md
Normal file
6
content/toots/108353932883868446.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
{"id": "108353932883868446", "in_reply_to_id": null, "in_reply_to_account_id": null, "sensitive": false, "spoiler_text": "", "visibility": "public", "language": "en", "replies_count": 0, "reblogs_count": 0, "favourites_count": 0, "edited_at": null, "reblog": null, "application": null, "account": {"id": "108219415927856966", "username": "brozek", "acct": "brozek", "display_name": "Brandon Rozek", "url": "https://fosstodon.org/@brozek", "avatar": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "avatar_static": "https://cdn.fosstodon.org/accounts/avatars/108/219/415/927/856/966/original/c007afd0c6749859.png", "header": "https://fosstodon.org/headers/original/missing.png", "header_static": "https://fosstodon.org/headers/original/missing.png", "emojis": [{"shortcode": "kdelight", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/original/22f2a8da54322c05.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/750/static/22f2a8da54322c05.png", "visible_in_picker": true}, {"shortcode": "fedora", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/original/f0c78925a380caa3.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/225/367/static/f0c78925a380caa3.png", "visible_in_picker": true}, {"shortcode": "firefoxnew", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/original/9ad36311d3fa683b.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/106/753/static/9ad36311d3fa683b.png", "visible_in_picker": true}, {"shortcode": "thunderbird", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/original/4bc6f0caa347f85a.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/377/static/4bc6f0caa347f85a.png", "visible_in_picker": true}, {"shortcode": "nextcloud", "url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/original/nextcloud.png", "static_url": "https://cdn.fosstodon.org/custom_emojis/images/000/010/361/static/nextcloud.png", "visible_in_picker": true}], "fields": [{"name": "Website", "value": "<a href=\"https://brandonrozek.com\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">brandonrozek.com</span><span class=\"invisible\"></span></a>", "verified_at": "2022-05-01T03:44:26.506+00:00"}, {"name": "GitHub", "value": "<a href=\"https://github.com/Brandon-Rozek\" target=\"_blank\" rel=\"nofollow noopener noreferrer me\"><span class=\"invisible\">https://</span><span class=\"\">github.com/Brandon-Rozek</span><span class=\"invisible\"></span></a>", "verified_at": null}, {"name": "Uses", "value": ":kdelight: :fedora: :firefoxnew: :thunderbird: :nextcloud:", "verified_at": null}]}, "media_attachments": [{"id": "108353924942275664", "type": "image", "url": "https://cdn.fosstodon.org/media_attachments/files/108/353/924/942/275/664/original/42942d02003e0f42.png", "preview_url": "https://cdn.fosstodon.org/media_attachments/files/108/353/924/942/275/664/small/42942d02003e0f42.png", "remote_url": null, "preview_remote_url": null, "text_url": null, "meta": {"original": {"width": 794, "height": 498, "size": "794x498", "aspect": 1.5943775100401607}, "small": {"width": 505, "height": 317, "size": "505x317", "aspect": 1.5930599369085174}, "focus": {"x": -1.0, "y": -1.0}}, "description": "Map showing a large pond and a path denoting where Brandon hiked that day. It comes with some statistics about distance, average speed, and duration as well as an elevation profile of the entire hike.", "blurhash": "U7QvwMND-p+~DgIo%3r^?d?bbJ9ZbW9Y9FkC"}], "mentions": [], "tags": [], "emojis": [], "card": {"url": "https://gpx.studio/", "title": "gpx.studio \u2014 the online GPX file editor", "description": "View, edit and create GPX files online: add, move and delete points, merge multiple files, reverse, add timestamps, edit waypoints and more!", "type": "link", "author_name": "", "author_url": "", "provider_name": "", "provider_url": "", "html": "", "width": 400, "height": 210, "image": "https://cdn.fosstodon.org/cache/preview_cards/images/009/427/283/original/0c26ceb02e0ca29b.png", "embed_url": "", "blurhash": "UISigQoLx]bHt7j[j[ay~qj[M{ofs:WBWVj["}, "poll": null, "syndication": "https://fosstodon.org/@brozek/108353932883868446", "date": "2022-05-23T23:50:05.973Z"}
|
||||||
|
---
|
||||||
|
{{< unsafe >}}
|
||||||
|
<p>Desiring an open technology approach to Strava embeds, I discovered <a href="https://gpx.studio" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="">gpx.studio</span><span class="invisible"></span></a> for embedding GPX/GPS data.</p><p>Write-up showing how I implemented it on my website:<br /><a href="https://brandonrozek.com/blog/displaying-hikes-with-gpxstudio/" target="_blank" rel="nofollow noopener noreferrer"><span class="invisible">https://</span><span class="ellipsis">brandonrozek.com/blog/displayi</span><span class="invisible">ng-hikes-with-gpxstudio/</span></a></p><p>Great for showcasing hikes, bike rides, and more! 🚲</p>
|
||||||
|
{{< /unsafe >}}
|
3937
static/data/hikes/2022-05-18-Burden-Pond-Preserve.gpx
Normal file
3937
static/data/hikes/2022-05-18-Burden-Pond-Preserve.gpx
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue