Compare commits
No commits in common. "master" and "links-revamp" have entirely different histories.
master
...
links-reva
|
@ -2,6 +2,5 @@
|
|||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
year: "{{ now.Format "2006" }}"
|
||||
---
|
||||
|
||||
|
|
62
config.yaml
|
@ -1,69 +1,41 @@
|
|||
baseURL: http://yequari.com/
|
||||
languageCode: en-us
|
||||
title: yequari.com
|
||||
theme: dreamcast
|
||||
enableGitInfo: true
|
||||
params:
|
||||
# about: "I write code and occasionally blog posts."
|
||||
webmentions: https://webmention.io/yequari.com/webmention
|
||||
pingbacks: https://webmention.io/yequari.com/xmlrpc
|
||||
taxonomies:
|
||||
category: categories
|
||||
tag: tags
|
||||
year: year
|
||||
permalinks:
|
||||
page:
|
||||
blog: /blog/:year/:month/:slugorfilename/
|
||||
term:
|
||||
year: /blog/:slug/
|
||||
theme: genesis
|
||||
menu:
|
||||
main:
|
||||
- name: Home
|
||||
- name: HOME
|
||||
pageRef: /
|
||||
weight: 10
|
||||
- name: Blog
|
||||
- name: BLOG
|
||||
pageRef: /blog
|
||||
weight: 20
|
||||
- name: Projects
|
||||
pageRef: /projects
|
||||
- name: ABOUT
|
||||
pageRef: /about
|
||||
weight: 30
|
||||
- name: Notes
|
||||
pageRef: /notes
|
||||
weight: 40
|
||||
- name: Now
|
||||
- name: NOW
|
||||
pageRef: /now
|
||||
weight: 50
|
||||
- name: Links
|
||||
weight: 40
|
||||
- name: LINKS
|
||||
pageRef: /links
|
||||
weight: 60
|
||||
weight: 50
|
||||
social:
|
||||
- name: Mastodon
|
||||
params:
|
||||
rel: external
|
||||
icon: aero-mastodon.svg
|
||||
class: masto
|
||||
url: https://retro.pizza/@yequari
|
||||
weight: 10
|
||||
- name: RSS
|
||||
- name: Twitter
|
||||
params:
|
||||
icon: aero-rss.svg
|
||||
class: rss
|
||||
url: /blog/index.xml
|
||||
weight: 5
|
||||
rel: external
|
||||
url: https://twitter.com/yequari
|
||||
weight: 20
|
||||
- name: RSS
|
||||
pageRef: /blog/index.xml
|
||||
weight: 30
|
||||
- name: Email
|
||||
params:
|
||||
icon: aero-email-2.svg
|
||||
rel: external
|
||||
class: email
|
||||
url: mailto:yequari@32bit.cafe
|
||||
weight: 30
|
||||
- name: XMPP
|
||||
params:
|
||||
rel: external
|
||||
icon: aero-chat.svg
|
||||
url: xmpp:yequari@omg.lol
|
||||
weight: 40
|
||||
caches:
|
||||
getresource:
|
||||
dir: :cacheDir/:project
|
||||
maxAge: 0
|
||||
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
---
|
||||
title: yequari.com
|
||||
---
|
||||
|
||||
# Hello
|
||||
|
||||
Welcome to my homepage! I program and tinker with computers. This site is a collection of notes, ramblings, things I like, and more. My hobbies include video games, TTRPGs, and collecting Transformers figures.
|
||||
Hello, I'm yequari, welcome to my homepage! I write about my hobbies, which include collecting [Transformers toys](/transformers), listening to [music](/music), and [gaming](#), as well as random thoughts I have on my [blog](/blog). Also, I like to publish my [notes](/notes), which are mostly about tech, as a personal knowledge base.
|
||||
|
|
|
@ -4,5 +4,3 @@ title: About
|
|||
# About Me
|
||||
|
||||
Hello, I'm yequari. I like to play TCGs and TTRPGs. I've played a lot of D&D 5e but am currently exploring Pathfinder 2. I'm a software developer, interested in the smallweb and permacomputing, and trying to learn more about systems programming. I love to collect Transformers figures, my favorite is Starscream.
|
||||
|
||||
If you'd like to get in contact with me, email me at yequari at 32bit dot cafe, or follow me on [Mastodon](https://retro.pizza/@yequari).
|
||||
|
|
|
@ -1,11 +1,6 @@
|
|||
---
|
||||
title: "Elon Musk's Twitter"
|
||||
date: 2022-04-26T00:00:08-07:00
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- social media
|
||||
year: "2022"
|
||||
---
|
||||
So that's it. Twitter reached a deal with Elon Musk. There's not much to say that hasn't already been said. I want to believe Musk will make improvements, but I think whatever improvements he makes will please the wrong crowd of people. Twitter has a monopoly on the type of platform it provides, which puts him in a unique position of power, especially with all the fuss US lawmakers have been making about free speech on Twitter and elsewhere online.
|
||||
|
|
@ -1,8 +1,5 @@
|
|||
---
|
||||
title: A Post About Nothing
|
||||
date: 2022-04-28T22:18:26-07:00
|
||||
year: "2022"
|
||||
categories:
|
||||
- Life
|
||||
---
|
||||
My favorite thing to do is nothing. Just sitting idle, observing the environment (or more likely, my apartment wall). It's fun. I just get to think. Like David Puddy on a 16 hour flight. The world requires constant attention these days, so don't forget to take a break.
|
|
@ -1,9 +1,6 @@
|
|||
---
|
||||
title: Welcome
|
||||
date: 2022-04-24T23:08:00-07:00
|
||||
year: "2022"
|
||||
categories:
|
||||
- Tech
|
||||
---
|
||||
Welcome to my new site! This project was born out of stumbling upon the Yesterweb community and my need to split off my """professional""" real-name website from my personal, hobby-oriented one. It is still very much under construction (probably perpetually) but I wanted to get something online.
|
||||
|
|
@ -1,9 +1,6 @@
|
|||
---
|
||||
title: Missing the Recent Past
|
||||
date: 2022-05-01T14:27:55-07:00
|
||||
year: "2022"
|
||||
categories:
|
||||
- Life
|
||||
---
|
||||
This year will mark two years since I graduated college. Despite graduation feeling like the resolution following the climax of the movie with the bad guy defeated and the cast living happily ever after, time continued to move forward.
|
||||
|
|
@ -1,9 +1,6 @@
|
|||
---
|
||||
title: End of the iPod
|
||||
date: 2022-05-13T23:19:33-07:00
|
||||
year: "2022"
|
||||
categories:
|
||||
- Life
|
||||
---
|
||||
This week, Apple announced it was ceasing production on the iPod touch, officially making the iPod a gadget of a bygone era.
|
||||
My first iPod was a 3rd gen iPod touch, but I also owned a few Nanos.
|
|
@ -1,11 +1,8 @@
|
|||
---
|
||||
title: "Self-Hosted Jellyfin"
|
||||
date: "2022-05-22T23:24:06-07:00"
|
||||
categories:
|
||||
- Tech
|
||||
tags:
|
||||
- self hosting
|
||||
year: "2022"
|
||||
- tech
|
||||
---
|
||||
I've been out of commission and stuck in bed for the past few weeks, and this weekend was the first time I could sit in at all in a few weeks, so I wanted to do a small project. There has been some chatter about self-hosting cloud services in the [Yesterweb forum](https://forum.yesterweb.org/viewtopic.php?p=619), and I decided I wanted to give it a shot.
|
||||
|
|
@ -1,9 +1,6 @@
|
|||
---
|
||||
title: Rest in peace, Kazuki Takahashi
|
||||
date: 2022-07-09T00:43:19-07:00
|
||||
year: "2022"
|
||||
categories:
|
||||
- Life
|
||||
---
|
||||
Yesterday's news about Yu-Gi-Oh! author Kazuki Takahashi really hit me hard. Yu-Gi-Oh! was a huge part of my childhood and introduced me both to card games and mange/anime. I would be a very different person without his influence.
|
||||
|
|
@ -1,11 +1,6 @@
|
|||
---
|
||||
title: "I uninstalled TikTok, again"
|
||||
date: 2022-11-16T16:23:00-07:00
|
||||
year: "2022"
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- social media
|
||||
---
|
||||
I can't seem to find a healthy way to use TikTok, so I just shouldn't use it at all. I first installed it during the height of the pandemic in 2020 and have since uninstalled and reinstalled it at least 4 or 5 times. While there is a huge load of shit on the platform, there are also cool and interesting creators on there, lots of funny jokes, shitposts, and memes, and even videos where I legitmately learned something! However, short-form video scares me as a social media format because of how addicting it is. TikTok's algorithm in particular is so good at showing you what you want to see that you can't help but scroll. It got to the point where I was reaching for my phone and scrolling TikTok every time I had a free minute. On my worst days, this would sometimes last hours. Just scrolling. Filling up my brain with content of dubious quality and intentions. TikTok is also experiencing a rise in Internet discourse and outrage culture on the platform. Due to the short virality cycle of content on TikTok, it seems to be speedrunning the same discourse Tumblr did a decade ago. It's exhausting. I'm tired of all interaction online being subject "discourse". I'm tired of hot takes. I'm tired of hearing the unwanted opinion of every random online.
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
---
|
||||
title: "I'm bad at taking breaks"
|
||||
date: "2022-12-28T14:43:03-07:00"
|
||||
year: "2022"
|
||||
categories:
|
||||
- Life
|
||||
{
|
||||
"title": "I'm bad at taking breaks",
|
||||
"date": "2022-12-28T14:43:03-07:00",
|
||||
"type": "post"
|
||||
}
|
||||
---
|
||||
I've spent the majority of my holiday break working on my PC and software instead of relaxing. Here is a quick recap of what I've been up to.
|
||||
|
|
@ -1,9 +1,7 @@
|
|||
---
|
||||
title: "I Bought a Thinkpad"
|
||||
date: 2023-03-22T18:09:19-07:00
|
||||
categories:
|
||||
- Life
|
||||
tags:
|
||||
year: "2023"
|
||||
- tech
|
||||
---
|
||||
Specifically, I got a ThinkPad T450s from 2015 for about $40. It didn’t come with storage, a power adapter, or the external battery, which cost me about an extra $100 to order. The internal battery is there but I can’t really test it until my power adapter comes in (I forgot to order it at the same time as the laptop whoops). There are also some keycaps missing. I can’t test if the switches are good yet but hopefully it turns out to be an easy fix. When I removed the back panel, I found that the plastic towards the front that the screws go into was broken, as if someone had just ripped the thing open with the screws still in there. One screw’s plastic is completely gone, but the other two are there, loosely hanging around, which is annoying, but some super glue should fix that right up. Assuming the laptop works once all my parts come in, I can’t be too mad over a $140 laptop.
|
|
@ -1,8 +1,5 @@
|
|||
---
|
||||
title: "Learning About Computers is Fun"
|
||||
date: 2023-05-20T01:01:11-07:00
|
||||
categories: Tech
|
||||
tags:
|
||||
year: "2023"
|
||||
---
|
||||
Recently, I was working on a toy Linux shell to learn about the fork and exec system calls, and I got curious about how the popular shells like bash implement shell scripting languages, which led me down a rabbithole of lexers, parsers, and formal language definitions. It led me to Robert Nystrom's [Crafting Interpreters](http://www.craftinginterpreters.com/), a book that guides you through writing an interpreter for a toy language called Lox. Nystrom's code is in Java, but I wanted to do it in C, which has been a bit of a headache. I'm really rusty in C compared to my college days, but improving my C skills and learning about programming languages has been quite an enjoyable experience, regardless. It's neat to see real applications for some of the topics covered in automata class.
|
|
@ -1,11 +1,6 @@
|
|||
---
|
||||
title: "Some Site Updates"
|
||||
date: 2023-05-17T15:36:03-07:00
|
||||
year: "2023"
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- smallweb
|
||||
---
|
||||
For the past year, this website has been generated using some Go code I wrote, which was fun while it lasted, but it got to the point where every time I wanted to add something I would have to hand-code the new feature, which resulted in my website never getting updated. So moving forward, I've gone back to using Hugo as a static site generator. It's been a great experience so far, converting my old stylesheets into a Hugo theme has been quite easy. My custom-built site generator is a project I'd like to revisit in the future, but for now ease of use takes priority.
|
||||
|
|
@ -1,11 +1,8 @@
|
|||
---
|
||||
title: "I've Been Consumed by Honkai Star Rail"
|
||||
date: 2023-06-05T00:57:08-07:00
|
||||
categories: Gaming
|
||||
tags:
|
||||
year: "2023"
|
||||
---
|
||||
|
||||
Normally gacha games aren't my thing, but I downloaded Honkai Star Rail on a whim and now it's consumed so much of my time. I know basically nothing about the lore, but regardless I'm really enjoying the story and characters. The combat system is really fun and I like getting to try different characters. It's so weird because I've tried to get into more "traditional" turn-based RPGs to no success but this game just scratches an itch in my brain.
|
||||
|
||||
Also, the idea of a space train is so silly I can't help but love it.
|
||||
Also, the idea of a space train is so silly I can't help but love it.
|
|
@ -1,11 +1,8 @@
|
|||
---
|
||||
title: "The Internet Is Crumbling"
|
||||
date: 2023-06-29T01:56:02-07:00
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- social media
|
||||
year: "2023"
|
||||
- tech
|
||||
---
|
||||
|
||||
It is an interesting time to be online. Twitter went from bad to worse. Reddit kneecapped itself. It seems now that the period of free money is over, tech companies are finding out that operating at a loss to amass users and putting off any sort of monetization plan as long as possible isn't as great a business model as was once thought. So far it appears to only work in a monopolistic scenario, like with Google and perhaps Meta. Everyone else hasn't really hit that critical mass. The only thing of value these companies have is the data they host, which is now being siphoned for free by AI products, then repackaged and regurgitated to the consumer. To defend against this, both Reddit and Twitter have removed free access to their API and are charging exorbitant prices to restore access. The result is shittier platforms for the user, who create the entirety of the platform's value in the first place.
|
|
@ -1,14 +0,0 @@
|
|||
---
|
||||
title: "Cyberpunk 2077 Is Good, Actually"
|
||||
date: 2023-10-12T09:18:13-07:00
|
||||
categories:
|
||||
- Gaming
|
||||
tags:
|
||||
year: "2023"
|
||||
---
|
||||
|
||||
The last time I played Cyberpunk 2077 was shortly after release in late 2020 on the PS4 version, which was a [rough experience](https://www.youtube.com/watch?v=InNgPtzTpgM), to say the least. I had been excited for the game since the announcement almost ten years ago now, so the disappointment was quite painful. As a result, I left the game alone for the past 2.5 years, even though I heard the patches fixed a lot of issues. I just couldn't convince myself to try again.
|
||||
|
||||
Recently the 2.0 patch dropped, followed by the Phantom Liberty DLC. I decided to give the game a go again and holy heck I've been having a blast. On current-generation systems, it looks amazing. Keanu Reeves is way less smooth. Night City feels alive and well-populated. I've encountered fewer bugs. The expressiveness of all the characters has been improved a lot. My favorite little moment so far has been a scene in the DLC where you make a call on an old landline phone. V just holds it for a second, confused. Then Johnny excitedly makes the 🤙 "call me" hand gesture, which had me rolling.
|
||||
|
||||
So far I'm roughly 40 hours into the game and instead of doing the main story I keep getting distracted by all the side jobs and random events in Night City. It's a real Yakuza situation.
|
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
title: "Major Site Updates"
|
||||
date: 2023-10-09T16:39:39-07:00
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- smallweb
|
||||
year: "2023"
|
||||
---
|
||||
|
||||
I did a complete overhaul of the layout of my site. When I launched my website a year and a half ago, I designed it while under the influence of web 1.0 nostalgia. With this redesign, my goal is to better use the amount of screen space PCs have these days, while also making it easier for the content to be responsive on mobile.
|
||||
|
||||
The [links](/links) page has been revamped as well. As much as I enjoyed hiding the link descriptions until hovered, it makes for a poor experience both on mobile and for screen readers. Recent discussion about web accessibility of the smallweb in the [32-Bit cafe](https://32bit.cafe) Discord server prompted me to rethink how I wanted to present the content of my website, especially on a page as important as my outgoing links page.
|
||||
|
||||
I've added a [projects](/projects) page, to showcase a lot of the stuff I'm working on. I turned out to have more than I expected. I feel like I'm farting around most of the time, but in actuality I do get stuff done sometimes.
|
||||
|
||||
On the backend, I've made many improvements to the maintainabilty of the site by utilizing some of the more advanced features of [Hugo](https://gohugo.io). First, my links page is now contained in a yaml file that Hugo converts into a full webpage, allowing me to easily add and organize new links. I'm also starting to get a better understanding of the templating system, allowing me to customize more pages. I'd like to write up how I did this in a post, to hopefully make Hugo more accessible to new users.
|
||||
|
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 2.8 KiB |
|
@ -1,44 +0,0 @@
|
|||
---
|
||||
title: "Why Are We Still Using 88x31 Buttons?"
|
||||
date: 2023-10-20T17:55:51-07:00
|
||||
categories:
|
||||
- Tech
|
||||
- Internet
|
||||
tags:
|
||||
- smallweb
|
||||
year: "2023"
|
||||
---
|
||||
|
||||
Web 1.0 revival is pretty popular these days in the smallweb circles, but one aspect of it should have remained in the grave: the 88x31 button.
|
||||
<!--more-->
|
||||
![Geocities 88x31 Button](gc_icon.gif)
|
||||
|
||||
The origins of 88x31 button can be traced back to Geocities. The official [FTP procedures page](http://web.archive.org/web/19961220170752/http://www.geocities.com/homestead/homeftp.html) provided a code snippet that linked back to the Geocities main page and asked users to include it on their websites. The given graphic is admittedly pretty ugly, so many users ended up making custom ones that better fit the carefully crafted aesthetics of their homepage. This led to users also creating buttons of the same size for various purposes, be it for others to link back to one's site or to say "Powered by X", where X is the flavor of the month web technology that was in at the time.
|
||||
|
||||
Back in the 90s, the 88x31 size made sense. Most monitors were 1024x768 resolution, so screen real estate was limited, and you wanted to spend most of it on your actual site content, rather than links to other places, one of which being required. Also, every monitor was a CRT screen, which softened the appearance of the buttons and made them slightly more readable.
|
||||
|
||||
In today's world, most monitors and a lot of laptop screens are at a nice 1920x1080 resolution or higher, which is great for all your modern computing needs, but less great for looking at 88x31 buttons. Back in the 90s a single button would take 0.0035% of the pixels of your screen. Today that's 0.0013%, less than half of the space it took in the past. When all of these bright, colorful, and often animated buttons are stacked together in a "button wall," it can be very hard to process what each button looks like, let alone read the text. It's even worse on smartphones, where, on top of all the problems present on a desktop, it is *extremely* easy to click a different button than you meant to.
|
||||
|
||||
![Grandma-Finds-The-Internet](Grandma-Finds-The-Internet.jpg "What I look like trying to read your button walls.")
|
||||
|
||||
I get it. 88x31 buttons are a fun way to express yourself and show off what your website is about. They were an essential piece of the web 1.0 culture which many are trying to revive. And to be clear, creating fun graphics is awesome! Creating art out of nostalgia for a time gone by is rad as hell. But the 88x31 format just ain't it. It's incredibly limiting and impractical. Computer screens today have over double the screen space than those for which the 88x31 button was designed.
|
||||
|
||||
All this is to say moving on from the format is long overdue. And I wouldn't spend all this time bashing on these buttons if there wasn't a modern alternative. Therefore, I propose a transition to 200x40 banners for all of our standard-size fun graphic needs! If you've been online a long time, you may be thinking to yourself, "Wait a minute, have I seen these before?" That is because you have! In the 00s, as computer screens were growing and web 2.0 was starting to take flight, many websites adopted 200x40 banners for the same purpose 88x31 buttons were used.
|
||||
|
||||
The 200x40 format is is simply superior to 88x31. It's still small enough to not worry much about the filesize, but it's large enough to have text readable to my deteriorating eyes alongside a fun graphic. Stacking a bunch of them together is way less overwhelming to look at, especially if they're animated.
|
||||
|
||||
![yequari.com 200x40 banner](yqbanner.png "Graphic design is my passion.")
|
||||
|
||||
For example, look at this epic banner I threw together in 15 minutes. If this were an 88x31 button, I could have *either* the name of my website *or* the sick picture of Starscream, but not both. Could I overlay the text over the graphic? Sure, but then my choices for graphic and font color are severely limited in order to make it readable, assuming my user's eyes are good enough to even read it in the first place. With the larger banner, none of this is a problem.
|
||||
|
||||
This format works great for decorative banners too, as a replacement for the 88x31 buttons that convey important messages and slogans, but don't link anywhere. I've even made a few to get you started with your collection. I'm sure others can find more creative use for the expanded space than I can, but I did what I could.
|
||||
|
||||
![Send me a webmention 200x40 banner](sendmeawebmention.png)
|
||||
![I use arch btw 200x40 banner](iusearchbtw.png)
|
||||
![Powered by Mozilla 200x40 banner](poweredbymozilla.png)
|
||||
![Take Back the Web 200x40 banner](takebacktheweb.png)
|
||||
![I II II IL](isthisloss.png)
|
||||
|
||||
To be clear, this post is only semi-serious. Ultimately, it doesn't really matter much in the grand scheme of things what size graphics we are using on our websites. It would be unreasonable of me to expect everyone to stop using these buttons. You may not agree with me that the 200x40 banner is superior, which is totally fine! After all, customizing our websites to be digital manifestations of who we are is what makes the smallweb beautiful. However, I still encourage you to consider creating one for your own site and offer multiple options for linking back to your site, so that we're not all still stuck in the 90s. 😎
|
||||
|
||||
*In the off chance this post does inspire you to create a 200x40 banner, please share it with me. I'd love to see what you made and add it to my site!*
|
Before Width: | Height: | Size: 975 B |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 17 KiB |
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
title: "Re: The Art of Hyperlinking"
|
||||
date: 2023-12-14T20:45:42-07:00
|
||||
reply_to:
|
||||
url: https://flamedfury.com/posts/the-art-of-hyperlinking/
|
||||
author: flamedfury
|
||||
title: The Art of Hyperlinking
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- smallweb
|
||||
year: "2023"
|
||||
---
|
||||
|
||||
I recently read fLaMEd's post discussing the shortcomings of linking techniques frequently used on the smallweb, such as link pages, webrings, button walls, etc. Many websites on the smallweb employ these techniques in order to connect to other stops in the smallweb space. I don't think they are inherently bad, of course, but the context matters a lot. I want to know *why* the webmaster has chosen to put these links on their website, even if the explanation is as brief as "these people are my friends and their websites are cool."
|
||||
|
||||
Frankly, links without context suck. The sheer amount of bullshit online makes it so we are all more hesitant to click links without good reason. If you like a website a lot, you should briefly explain what you like about it. Do you find it useful? Is it fun to browse? Does the webmaster share an interest of yours? With these questions unanswered, I am much less likely to click a link to another site.
|
||||
|
||||
Webrings suffer this problem too. While webrings naturally provide a small amount of context in its name and topic, the sites contained within them are not always related. Devastatia observes that you see the same websites in every webring over and over, which makes them useless. If you find a new webring, why bother browsing through it if you'll see all the same sites you saw in the last webring you found? It's a shame that this is the case, as I think webrings are one of the more interesting constructs from the web 1.0 era.
|
||||
|
||||
It's for this reason that my site is not a part of any webrings, though I'm open to changing that if one comes along that aligns with my interests. In the meantime, my contribution to the social smallweb will be maintaining my links page with a short blurb of context for each link.
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
title: "Building a Website is a Marathon, Not a Sprint"
|
||||
date: 2024-05-06T16:58:43-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
|
||||
When I first created my website just over two years ago, I spent a lot of time fretting over what exactly to put on it. The common answer of "anything you want!" wasn't helpful because I didn't actually know what I wanted.
|
||||
|
||||
Spending time browsing others' personal sites and chatting with their webmasters gave me inspiration for new pages to build and new topics to blog about. After two years, I am learning what I want to put on my website. I enjoy blogging and sharing the things that I know and the things that I like. As a result, I've published more blog posts, created my links page, my /now page, and just yesterday, published a bunch of notes I've taken as I learn more about computers and web development. Coming soon will be a page to share music I've discovered recently.
|
||||
|
||||
It took me a long time to get here, and that's okay. Personal websites are about expressing yourself, sometimes it takes times to figure out who you are and what you value, and even longer to properly express that. It is a long journey with no end goal, an infinite path with innumerable unforeseen turns. As I grow, my website grows alongside me.
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
title: "Busy Weekend"
|
||||
date: 2024-05-05T19:17:55-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Life
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
|
||||
Though I didn't have any big plans this weekend, I kept myself busy around the house. I mailed some packages, did the grocery shopping, prepared some meals for the week, rearranged my kitchen, cleared out some expired food, and cleaned up my desk. It feels very good to be this productive.
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
title: "Clearing My Game Backlog"
|
||||
date: 2024-05-02T07:54:51-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Gaming
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
|
||||
I love video games. Or, at least, I think I do. I don't finish very many of them. I either play them for a few hours and forget to come back or I hyperfocus and get like 75% through the story but lose interest before getting to the end. This summer, I'd like to make progress on my backlog of unplayed games. I'll start with Baldur's Gate 3 and Cyberpunk 2077. These both fall into the 75% category and I last played them recently enough that I won't be completely lost with what's going on in the story. After that I'll dig into some indie games, stuff like Hades, Hyper Light Drifter, Hotline Miami 1 + 2, because they are shorter to complete and do a lot of interesting things. Then I get back into AAA games and beat one beginning to end, just to prove to myself that I can. I'm thinking one of Persona 5 Royal, Spider-Man, Ghost of Tsushima or Final Fantasy VII Remake. A challenge I face with this goal is that a lot of first-person and third-person games trigger my motion sickness, so I can only really play for an hour at a time until a build up a tolerance to them (which I lose if I don't play for a few days). Usually I stick to top-down games like strategy and simulation games to get around this, but I *really* want to play these games, so I will try my best to persevere.
|
|
@ -1,41 +0,0 @@
|
|||
---
|
||||
title: "Customizing Vim"
|
||||
date: 2024-05-07T16:22:42-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Tech
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
I've been using vim (specifically neovim) for over a year, I really enjoy how customizable it is, though up until today, I've only customized it through plugins made by other people. Today I wrote two Lua functions to streamline my workflow. I'm not very familiar with Lua but it was quite easy to pick up.
|
||||
|
||||
First is a function to split my window so it would have two side by side, and a smaller one at the bottom, which gets turned into a terminal.
|
||||
|
||||
```lua
|
||||
local createcodeenv = function ()
|
||||
vim.cmd('split')
|
||||
vim.cmd('wincmd j')
|
||||
local win = vim.api.nvim_get_current_win()
|
||||
local height = vim.api.nvim_win_get_height(win)
|
||||
vim.api.nvim_win_set_height(win, height - 15)
|
||||
vim.cmd('term')
|
||||
vim.cmd('wincmd k')
|
||||
vim.cmd('vsplit')
|
||||
win = vim.api.nvim_get_current_win()
|
||||
local buf = vim.api.nvim_get_current_buf()
|
||||
vim.api.nvim_win_set_buf(win, buf)
|
||||
end
|
||||
vim.api.nvim_create_user_command('CodeEnv', createcodeenv, {})
|
||||
```
|
||||
|
||||
Second is a function to bind writing a file and returning to Netrw (the file explorer) to one command, :We.
|
||||
|
||||
```lua
|
||||
local writeGoToNetrw = function()
|
||||
vim.cmd('w')
|
||||
vim.cmd('Ex')
|
||||
end
|
||||
vim.api.nvim_create_user_command('We', writeGoToNetrw, {})
|
||||
```
|
||||
|
||||
Both of these were things I did manually basically every time I used vim. Defining custom commands to make them easier was a fun learning experience, I look forward to learning more about customizing vim.
|
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
title: "Dedicated Instant Messaging was Better"
|
||||
date: 2024-04-23T18:00:35-07:00
|
||||
year: "2024"
|
||||
reply_to:
|
||||
url: https://flamedfury.com/posts/instant-messaging/
|
||||
author: flamedfury
|
||||
title: Instant Messaging
|
||||
subtitle: This didn't start out as a rant about Discord, but it sure ended that way.
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- social media
|
||||
---
|
||||
|
||||
fLaMEd's post about instant messaging programs got me thinking about my own IM journey. I'm too young to really have experienced the peak AIM and MSN days, but I did use MSN/Windows Live Messenger in the late 00s to keep up with some online friends I had met through various forums. Eventually, I moved to Skype as that is what all my IRL friends were on at the time. I was also on Curse Voice for the brief time it existed, mostly for voice calls during League of Legends matches. As Skype started dying out, I moved over to Discord in 2016, which made me a pretty early adopter.
|
||||
|
||||
I really miss the simplicity of dedicated IM services. While Discord *is* a messaging platform, it feels more like a social network. DMs feel like a secondary feature on Discord, and I absolutely dread receiving them. I don't like that anyone, in any server we share, can DM me simply because we both exist in the same space. Or that anyone in any server we share can see what I'm up to with rich presence. I understand this is configurable, and that there have been improvements like separating DMs from strangers into "Message Requests", but my options are basically to allow everyone to message me and view my activity, or to allow no one, neither of which are what I want. On top of all this, each Discord update just makes the service worse to use as the company scrambles to find ways to monetize the platform.
|
||||
|
||||
So I'm giving XMPP a try again. I've used it on and off over the past 5 years or so, and it never really stuck, since I didn't really have anyone on there to chat with. But now that I've been spending time in the indie web community, I'm finding it more useful and more fun. I spent some time setting up [ejabberd](https://www.ejabberd.im/index.html) on a VPS so that I could use one of my really dumb vanity domains for my handle. It was a pain but I got there eventually. What is appealing to me about XMPP is that 1) I get to vet the people who want to DM me, before they have messaged me, 2) Because it is separate from Discord, if I don't feel up to chatting 1-on-1, I can just close my client, and not completely close myself off from my Discord servers, and 3) Conversations are more intentional: since XMPP is purely a chat protocol, the people that use it are there to chat with others, and there are few scammers, spambots, etc.
|
||||
|
||||
I'm looking forward to getting more acquainted with the protocol and chatting with some new people on there! If you want to chat on XMPP, feel free to add me via the link in the sidebar!
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
title: "Doing New Things Is Scary"
|
||||
date: 2024-05-03T17:40:04-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Life
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
|
||||
I've been looking at gigs on Upwork to try and bring in some extra cash and bolster my experience. Some of these jobs seem braindead easy but I'm still so afraid to apply for them. Logically, I know that if something goes wrong nothing bad really happens, but the fact that something *could* go wrong terrifies me. I guess I just don't want to disappoint people. My browser currently has a half-filled out proposal for a job. It would take me a couple hours to complete. I just need to submit it.
|
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
title: "February Updates"
|
||||
date: 2024-02-04T17:18:05-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- smallweb
|
||||
- 32-Bit Cafe
|
||||
---
|
||||
|
||||
Man, my [one blog post per week](/blogs/2024/01/reflecting-on-2023) goal sure fell apart quickly. To avoid going too long without a post, I figure I'll give a quick update on what I've been working on. Over at the 32-Bit Cafe, we [announced we are expanding into a Discourse forum](https://discuss.32bit.cafe/f/32bitcafe/217/valentine-s-day-event-huge-announcement)! I've been spending a lot of time setting it up and working alongside the rest of the mod team to get it ready before the February 15th launch. This weekend, I was able to find some time to work on projects, though. I built a PC for my partner, which they have been enjoying! It was a much needed upgrade over their old system, which was a frankensteined build made out of the core of my first PC build from 2015. I also spent some time working through [Advanced Programming in the UNIX Environment](https://stevens.netmeister.org/631/). I'm working on the first homework assignment, which is a simple program that copies a file. It's been a fun challenge and I'm learning a lot. On the fitness side of things, I haven't made much progress yet. I actually took the week off from the gym because of a combination of sleep issues and hurting my back, but I'm feeling a lot better now and will be back at it tomorrow! While the first month of 2024 hasn't gone quite to plan, I've been keeping busy anyway.
|
|
@ -1,35 +0,0 @@
|
|||
---
|
||||
title: "Happy (Belated) JS Naked Day"
|
||||
date: 2024-04-26T17:12:11-07:00
|
||||
year: "2024"
|
||||
subtitle: Woah three blog posts in a week(ish) is unheard of
|
||||
categories:
|
||||
- Internet
|
||||
tags:
|
||||
- smallweb
|
||||
- web development
|
||||
---
|
||||
|
||||
[JS Naked Day](https://js-naked-day.org/) happened this week, and as usual, I'm fashionably late. I decided to permanently remove a significant portion of the JavaScript from my site as it was affecting load times. There wasn't a whole lot of JavaScript to begin with, which made this pretty easy to implement. What I did have was the following:
|
||||
|
||||
## 1. A script to randomly select from an array of quotes to display in the sidebar on each page load
|
||||
|
||||
I just removed this as I just wasn't finding it amusing anymore. Maybe it will return later, who knows? Certainly not me.
|
||||
|
||||
## 2. A script to change the avatar frame color in the sidebar
|
||||
|
||||
I had originally implemented this using Hugo's templates, as I described in my post [Recreating the Windows Live Messenger Avatar in CSS](/blog/2024/02/windows-live-avatar-css), but opted for JavaScript instead because I wouldn't need to constantly rebuild my site. I had said rebuilding periodically was a waste of compute time, which was kind of bullshit because instead I was wasting the compute time of every visitor on every page load. So now I've gone back to the template approach, and build my website periodically every hour, unless I push out an update before then. Previously this was done with a bash script, but I rewrote it in python to separate the build step from the updating from git step so that I could do each at different intervals.
|
||||
|
||||
## 3. Status.cafe widget
|
||||
|
||||
I love status.cafe, it's a really easy way to get some dynamic content on your static website. The downside of this is that every page load is hitting m15o's servers twice: first to grab the linked JavaScript file and then to run it and grab a second json file with the actual status information. This took about 1.1s to complete from beginning to end, again, *on every page load*. To speed things up, I hacked together a partial template in Hugo that downloads the json file directly on build, using Hugo's [resources.GetRemote](https://gohugo.io/functions/resources/getremote/) function.
|
||||
|
||||
## 4. Webmentions.js
|
||||
|
||||
Webmentions.js is just a way to display webmentions that you've received. Which is pretty handy, except I receive almost zero webmentions. The ones I do receive often come from Mastodon via [Brid.gy](https://brid.gy/), which I've come to realize is [problematic from a privacy standpoint](https://brainbaking.com/post/2023/05/why-i-retired-my-webmention-server/). I'm going to remove my webmention support for a lot of the reasons listed in this post, which mirrors my experience with them. The places I get reactions to the stuff I write on my website are the places where I go and manually post links, usually Mastodon and the [32bit cafe](https://discourse.32bit.cafe), and it's just easier to reply to people on there. There's no real reason to syndicate those replies on my site. If I really care about adding webmention support again, I can probably find a way to do it during the website build rather than live via JavaScript.
|
||||
|
||||
## 5. tinylytics
|
||||
|
||||
This is the only JavaScript file I'm keeping. I really like the simplicity of tinylytics. I get to see what pages are most popular and an overall viewcount, and it's not at all intrusive. It loads behind the scenes on each page so it does not affect load times, and if you were to block JavaScript it does not lessen the user experience at all.
|
||||
|
||||
I'm not opposed to using JavaScript, but the cool stuff I was doing with it could be just as easily done with my static site generator. JavaScript may make a return to my website if I find something else cool to do with it, but for now I will just enjoy the super fast load times!
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
title: "Here We Are Again"
|
||||
date: 2024-11-06T17:59:53-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- politics
|
||||
---
|
||||
|
||||
The results of last night's election are disappointing, angering, and horrifying. But they are not shocking. I've seen lots of talk about how stupid and racist and sexist the general American populace is to be able to vote the way the did. I don't think that is accurate. Of course, there is no doubt which candidate the racists and sexists voted for. However, in a society where we all feel forced to choose the lesser of two evils, I can't be surprised that many felt differently than me as to which candidate that actually was. The federal government has failed working people over and over for decades and continues to do so to this day. In this situation, when one party tells you everything is going great, actually, but the other tells you you are right to be upset and presents a simple solution, no matter how ill-informed or hateful it is, this is the natural result. The Democratic party will not learn this lesson, though, just like they didn't in 2016. We must take care of each other now, because no one will do it for us, especially not another establishment politician with a D next to their name.
|
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
title: "Intentional Computing"
|
||||
date: 2024-09-10T21:48:07-07:00
|
||||
---
|
||||
|
||||
I've been using Arch Linux (btw) since the beginning of this year. It is a barebones distro, meaning you have to install every package you are going to use yourself. While not the most fun exercise in the world, it made me think about what software I need to make my computer usable. Beyond the necessary stuff like wi-fi drivers, I was forced to choose what I wanted my computing experience to be like. Rather than being given a default desktop environment and a suite of software I could opt-out of if I cared to, I instead had to deliberately opt-in to the desktop experience, text editor, and web browser.
|
||||
|
||||
It is certainly less convenient to do things this way. However, I'm coming to believe in the importance of [ritual and inconvenience in life](https://discourse.32bit.cafe/t/the-importance-of-inconvenience/1250/14). While I truly do understand the desire to follow the path of least resistance to get to a result (I am a programmer, after all), following that path for everything robs you of the experience of the journey. Doing things the hard way opens up your mind to different perspectives, takes you down paths that would otherwise go unexplored, and presents new opportunities for discovery. Setting up a usable Arch installation from scratch lets me take a moment to appreciate the immense amount of software that has built up the computing features I take for granted. Manually managing my music library and copying a selection of files to an mp3 player lets me think about what I love about certain songs, albums, and artists and how my tastes have changed over the years.
|
||||
|
||||
Tech is becoming increasingly focused on pushing us to passively consume content, whether on social media or one of a million streaming service, and making it harder to do anything else. We have incredibly powerful computers in our pockets, but the path of least resistance is to use them to check Twitter/Bluesky/Mastodon, because every other path is made to be difficult. [Using your phone to write totally sucks](https://jenson.org/text/), using it to draw requires a stylus and a lot of patience. Programming on it is totally impractical, and even if you do get around the barriers, good luck running any code on the device itself. It is more difficult to use your phone to write notes and doodle than a simple notepad, despite outclassing it by several orders of magnitude in both cost and compute power. The duopoly of phone operating systems means this is unlikely to change, unless mobile Linux somehow becomes usable during my lifetime.
|
||||
|
||||
All this is to say that computers are powerful tools that empower us to learn and be creative and build skills, and I aim to be more intentional in using my computer in this way. Sometimes my intention *is* entertainment, of course, but I want to choose that to be the case, instead of it being pushed on me by the software my computer runs.
|
|
@ -1,11 +0,0 @@
|
|||
---
|
||||
title: "Intermittent Fasting"
|
||||
date: 2024-05-01T07:23:19-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- life
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
|
||||
I've started doing intermittent fasting to help achieve my [fitness goals](/fitness). It's only been a week so far but I'm liking how it's making me be more intentional about my eating habits. My eating hours are from 11am to 7pm, so I basically get two full meals and some snacks. I thought the hard part would be waiting until 11am to eat, but it's actually pretty easy (probably all the coffee helping there), then when I do eat breakfast I can put more thought into it than when I'm half awake. What is actually hard is not being able to eat after 7pm. I eat dinner around 6 but by 9:30 or so I'm starting to get hungry again. Maybe the solution to this is just going to bed earlier. I imagine it will get easier as my body gets used to the new schedule and I figure out exactly how much I need to eat in those 8 hours.
|
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
title: "Anti-cheat Software Sucks"
|
||||
date: 2024-01-07T16:04:19-07:00
|
||||
categories:
|
||||
- gaming
|
||||
tags:
|
||||
year: "2024"
|
||||
---
|
||||
|
||||
This week, Riot Games announced they are bringing their [Vanguard anti-cheat software to League of Legends](https://www.leagueoflegends.com/en-us/news/dev/tl-dw-season-2024-look-ahead/). Previously introduced with the release of Valorant, Vanguard is a pretty typical kernel-level anti-cheat software, which is to say, a security nightmare. It runs at the highest level of permissions possible on your system.
|
||||
|
||||
A lot of people seem concerned that, because Riot is owned by Tencent, Vanguard serves as a backdoor for the Chinese government. Honestly that seems ridiculous. Not that it necessarily *can't* be used for nefarious purposes by the Chinese government, but Chinese spying has a much lower possible material impact on U.S. players than American spying. In the [video](https://youtu.be/9U_jEzKf0_0?t=738), Riot said that Vanguard "does not collect or process any personal information differently from our current Anti-Cheat software," which I guess is something, but that can change at any moment. The bigger concern, in my view, is if Riot suffers from a security breach (again) and hackers are able to deploy malicious code through Vanguard. Truthfully, I'm not totally sure how feasible it is for that to happen, but it is certainly *possible*, which is worrying enough.
|
||||
|
||||
Aside from the privacy and security issues, the introduction of Vanguard to League is annoying to me personally because I play on Linux with WINE. While this was never officially supported, it works pretty well, outside of a few rare occassions where it has been broken for weeks at a time. So I have two options: stop playing, or play on Windows. If I decide to keep playing on Windows, then I can either make Windows my primary OS (yucky) or dual-boot. The problem with using Windows as my primary OS is that I am a software developer and I use virtualization all the time to test my code or to experiment with other OSes. What does that have to do with any of this? Well, Vanguard requires Windows's virtualization features, Hyper-V, [to be disabled](https://support-valorant.riotgames.com/hc/en-us/articles/16941220890899-Addressing-Virtualization-based-security-VBS-settings-on-Windows-10-VAN9005-VALORANT) in order to run, unless you've got a modern CPU with TPM 2.0 (just like Windows 11 requires). Which means I can also say goodbye to running Windows Subsystem for Linux, another useful dev tool.
|
||||
|
||||
The thing is, cheating in League is way less of a problem than it is for FPS games like Valorant. In my decade of playing, I've encountered an obvious scripter maybe five times, if that. Riot conducts somewhat frequent ban waves, so the problem clearly exists, but overall it's had minimal impact on my personal playtime. That's anecdotal data, of course, but even among discussion online the amount of encounters with actual cheaters seems minimal. The much larger problem is accounts controlled by bots, usually for the purpose of leveling up an account enough to unlock ranked play, then selling it for a couple dollars. People buy these accounts to evade bans or to "smurf" in games with players of much lower rank than them, both contributing to League's reputation for being a toxic hellhole.
|
||||
|
||||
I've encountered botting accounts probably between 100 and 200 times overall. It sucks when it happens, but at least they're not going to be toxic in chat while ruining the game, unlike most human players. I've encountered brand-new smurf accounts bought from a botting site an order of magnitude more times. It is a huge problem, every League player has encountered these players. Even worse, the people who will buy a League account are the worst people imaginable to be stuck in a 30+ minute exercise in teamwork with, since 99% of them have either been banned or feel stuck at their current rank and feel the need to dunk on worse players.
|
||||
|
||||
I can respect Riot trying to tackle this problem, but I think kernel-level anti-cheat is the wrong approach. The smurf problem, while pervasive, is entirely propped up by the botting problem. Accounts that are being leveled by bots are *extremely* obvious, they move weird, they only use targeted abilities, they avoid contact with the enemy team, and they even take the same builds every game, regardless of champion or role assignment. And none of this behavior has changed over the last decade because up until now, Riot has done virtually nothing to detect and ban these accounts, so nothing has forced them to improve. Instead, the strategy is to play the harder of the cat-and-mouse games and detect the software doing this.
|
||||
|
||||
What is frustrating about this (and anti-cheat in general) is the same thing that is frustrating about DRM: It punishes the good users while maybe sometimes inconveniencing the bad users. Botters and scripters will continue to advance their cheats, and Riot will catch them, a cycle that will repeat ad nauseum, while everyone else will still have to suffer from the occassional cheater or smurf in their game. The only difference from before being that you have Vanguard installed, software that in any other situation would be considered malware.
|
|
@ -1,20 +0,0 @@
|
|||
---
|
||||
title: "Music Discovery Is Weird"
|
||||
date: 2024-04-19T23:01:49-07:00
|
||||
year: "2024"
|
||||
subtitle: "Algorithms suck, except when they don't"
|
||||
categories:
|
||||
- Life
|
||||
tags:
|
||||
- music
|
||||
---
|
||||
|
||||
As a teenager, the music I listened to was music my dad shared with me, music my friends would play when we would hang out, or music from video games and movies I liked. I remember spending time on Pandora creating stations based off my favorites in hopes I could find something similar I liked. I would discover a few songs this way but otherwise didn't have much luck. As a result, I find I just listen to the same stuff over and over again, but there is so much music out there, I want to find more! But how?
|
||||
|
||||
I'm going to sound like such a zoomer here, but how did people discover music in the past? As I understand it, you would hear new songs (and albums! imagine!) on the radio and this would be the primary way of music discovery. You would also check out albums that were curated by a local record store. Tower Records was everywhere, apparently. This is so hard for me to wrap my head around. Radio is and has always been useless to me, it is a constant stream of ads broken up by either a classic rock song or a top 40 pop song here and there. Independent stations are good but are few and far between. Record stores are niche, targeted at vinyl and CD collectors, instead of targeting the general public like they did in the past. Not to mention physical media is expensive, so it's a risk to just buy an album you think looks cool without hearing it first. For this reason I do think music streaming is convenient, but from what I hear from the older generations, buying a random record and going home to listen to it without any idea of what is on it was an experience™.
|
||||
|
||||
These days, for music of which I haven't obtained mp3s through definitely legal means, I use Spotify and YouTube. Spotify's radio feature is total garbage. I have found some music I liked through it, but it frequently cycles through the same tracks. Its like each song is strictly categorized into one extremely narrow microgenre, then when you listen to radio based on that song, it will play *only* other songs from that extremely narrow microgenre. Maybe other people have more success with it and I just listen to stuff that Spotify categorizes as niche, but you'd think with how much music exists it could still do better than the same 25 songs every time. There are also recommendations on the home page but it's usually things like "here's a new album from a band you listen to" or "listen to these artists you listen to all the time" or "here's something popular but completely irrelevant to your tastes"
|
||||
|
||||
YouTube's algorithm is actually what I've had the most success with for music discovery. First, there are a million YouTube channels that are dedicated to albums of specific genres and subgenres from artists that aren't particularly well known. For example, recently I've been listening to albums on [666MrDoom](https://www.youtube.com/@666MrDoom) and [Rob Hammer](https://www.youtube.com/@Rob.DOOM.Hammer). I've found channels like these to be great resources for finding new music, and the more I listen to them, the more I get recommendations for other similar albums. I also get more random recommendations on my homepage, usually J-pop/City Pop or various "internet genres" like vaporwave or modern breakcore. Overall, YouTube has recommended me the most variety of albums and genres, it seems to remember that I like a wide variety of music, rather than focusing solely on my most recent fixation, as Spotify tends to do.
|
||||
|
||||
Of course, there are other ways to discover music, Reddit has a million music subreddits, music forums and blogs are still around, YouTubers/content creators give recommendations, not to mention the classic, word of mouth. They are all more effective than algorithms, but introduce a intermediate step between wanting to listen to something new and putting your headphones on and listening. It's easy to get lost in this step, through choice paralysis, or by diving too deep into rabbit holes, and that is what makes algorithms attractive: they just play something.
|
|
@ -1,13 +0,0 @@
|
|||
---
|
||||
title: "No More Firefox"
|
||||
date: 2024-09-19T13:03:43-07:00
|
||||
year: "2024"
|
||||
---
|
||||
|
||||
Mozilla is seemingly allergic to making good decisions, as shown by two recent (anti-)features it has brought to Firefox. First, is an AccuWeather widget on the new tab screen, enabled by default. On the surface, this seems mundane, but in order for this to work, Firefox is sending your "approximate" location to AccuWeather servers periodically in the background, [even if you disable the widget](https://digipres.club/@ryanfb/113125332270103817). This is the browser that tries to market itself as the go-to browser for privacy control.
|
||||
|
||||
![](mozilla_homepage.png)
|
||||
|
||||
Next, is Mozilla's [experimental integration with AI chatbot](https://blog.nightly.mozilla.org/2024/06/24/experimenting-with-ai-services-in-nightly/). Why? Who is asking for this? What telemetry data is being sent to the integrated services? Who knows! At least this one, in contrast to the weather widget, is opt-in, but regardless it shows how out of touch Mozilla is with its userbase. Firefox's *only* defining feature is that **it is not Chrome**, so following in Chrome's footsteps in implementing AI integration is a head-scratcher.
|
||||
|
||||
I have been using Firefox forever, and it makes me sad that it just gets worse and worse and worse. I'm not sure how much longer it (and by extension the Gecko rendering engine) will be around, since it is only allowed to exist because of Google donating money to avoid antitrust action. For now, I'll be switching to LibreWolf, a Firefox fork that actually delivers on the privacy promise. Hopefully Servo takes off well enough to be used as a daily driver sometime soon.
|
Before Width: | Height: | Size: 70 KiB |
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
title: "On LibreWolf"
|
||||
date: 2024-10-01T22:11:03-07:00
|
||||
year: "2024"
|
||||
---
|
||||
|
||||
As I mentioned in my [previous post](/blog/2024/09/no-more-firefox/), I've been using LibreWolf as my daily driver browser. It's been about two weeks since then, and I had some thoughts.
|
||||
|
||||
I originally tried to compile LibreWolf myself, which is how I found out 16GB of RAM is not enough to compile a web browser. I found this interesting since I was able to compile [Floorp](https://floorp.app/en) just fine a while back. Have browsers really gotten so complex over the past decade to require that much memory just to compile? Anyway, I just ended up installing the binary from the AUR and got up and running.
|
||||
|
||||
One thing I really like is that new tab page is completely blank, except for a search bar. It helps me break the close reddit->new tab->open reddit cycle and generally just reduces distractions. I know this was configurable in Firefox, but having to set it up on every install meant I just stopped caring to do it after a while.
|
||||
|
||||
Something I wish was possible is whitelisting certain sites to be able to use WebGL (and other things disabled by default as anti-fingerprinting measures), I can be pretty sure my self-hosted apps aren't fingerprinting me. I ended up disabling all of these measures because of this.
|
||||
|
||||
Finally, I've really enjoyed not being logged in to everything all the time. Obviously clearing cookies is configurable on Firefox, but doing it by default is not something I thought I would enjoy. When I want to go waste time on Reddit or YouTube, logging in every time is too much of hassle so I just go back to what I was doing. It's a nice incentive to browse the smallweb instead!
|
||||
|
||||
Overall, it's been a pretty pleasant experience, and I was surprised that I actually found benefits to LibreWolf over Firefox, I was expecting the two experiences to match pretty closely.
|
Before Width: | Height: | Size: 3.1 KiB |
|
@ -1,39 +0,0 @@
|
|||
---
|
||||
title: "Reflecting on 2023"
|
||||
date: 2024-01-10T15:29:00-07:00
|
||||
layout: winter
|
||||
context: "This page is an entry into the 32-Bit Cafe's [2023 holiday event](https://32bit.cafe/holidays2023/)."
|
||||
year: "2024"
|
||||
categories:
|
||||
- Life
|
||||
tags:
|
||||
- 32-Bit Cafe
|
||||
---
|
||||
![32-Bit Cafe Holiday Event 2023](32bit-cafe-holidays.png)
|
||||
|
||||
2023 was truly one of the years of all time. In this post, I will look back at some of the cool things I did in 2023 and set some goals to achieve in 2024.
|
||||
<!--more-->
|
||||
|
||||
## Accomplishments in 2023
|
||||
|
||||
In August I returned to the gym after 4ish years of not really exercising much at all. I've always had a difficult relationship with fitness and exercise. I've never really been fit and everytime I tried to change that, I set goals that were far too ambitious and then failed to meet them, at which point I would give up, because what's the point of doing something unless I can do it perfectly? This time, though, I've made it my goal to just get in the gym and exercise 3 times a week. It's been great so far. I've been pretty consistent with going, missing only two weeks, once when I was sick and once when I was out of town. I am starting to see some progress, though I haven't made any efforts to track it, I notice I am sleeping better and have more energy. I don't always feel like going to the gym but I am always glad I forced myself to go.
|
||||
|
||||
I also spent a lot of time hanging out at the [32-bit Cafe](https://32bit.cafe), working on my own website, helping others work on theirs, and just shooting the shit about web, tech, and life. It's been a great time, the friends I've made there
|
||||
I started a few web services for the cafe, an instance of [FreshRSS](https://rss.32bit.cafe) and an instance of [Postmill](https://discuss.32bit.cafe), as well as a Discord bot to feed new posts from the discussion boards to a channel in the Discord.
|
||||
|
||||
|
||||
Outside the cafe, I also started a few programming side projects. I started work on a [Linux shell](/projects/yqsh), which led me down a rabbithole of not only the Linux API but also scripting languages and how to design and implement them. As a result I started working through Robert Nystrom's [Crafting Interpreter](http://www.craftinginterpreters.com). It's been a lot of fun to learn all about how these tools that I use every day work on a deeper level, and I'm excited to continue learning about them.
|
||||
|
||||
## Goals for 2024
|
||||
|
||||
Before I get into my goals, I'd like to talk a little bit about my philosophy regarding setting goals and measuring success. With how my brain is wired getting things done can be hard. I've spent many years setting goals, failing to meet them very early on, then feeling defeated and that continuing to work towards the goal is pointless. To get around that, I set goals that are more vague, but still have something quantifiable to measure success. The idea is to focus less on the result and more on the journey getting there.
|
||||
|
||||
In 2024, I want to continue exercising consistently, and I think at this point I can set some goals and monitor my progress. As of January 4th, I weigh 227 pounds. I'd like to get that down to under 200 before the end of the year. I think it's doable, but not easy. Ideally, I can do this without counting calories because it's a major pain in the ass but if I need to, I will.
|
||||
|
||||
I want to write more code in 2024 and further build my skills. I will finish my shell project, complete with a small scripting language. I want it to be usable, for myself and others. I don't expect anyone to actually download, install, and use it but it should be possible to do so regardless. I'm not sure how long this will take, but I'd like to make some amount of progress each week. I found this [Advanced Programming in the UNIX Environment](https://stevens.netmeister.org/631/) course to learn some of the more advanced systems programming concepts I will need to complete it, so the first few months of 2024 will be split between doing this coursework and working on my shell. After that, I'm going to focus on learning more operating systems concepts. I think this is the direction I want to take in my career so learning what I can about it seems like a good move. I'll dive into [Operating Systems: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/) once I'm ready.
|
||||
|
||||
In addition to working on side projects, I would like to start contributing to open source projects. This is something I have always been somewhat intimidated by but I think it is good practice for getting acquainted with large codebases and collaborating with larger teams. I will try to find a project that I use and is written in a language I'm comfortable in to get started hacking away. Right now I think [Neovim](https://neovim.io/) might be a good one to start with. I use it every day and it is written in C, which seems like a good fit for now.
|
||||
|
||||
Finally, I am committed to updating my blog at least once a week. I've got some drafts started for posts I've wanted to publish for a while now, so now I will find time to complete them. I'm not being particular on length or topic, I just need to write *something* about a topic I find interesting each week. It will be challenging at first but my hope is that I will get better at it as the year goes on.
|
||||
|
||||
Overall, I had a pretty good year in 2023, and I'm looking forward to carrying that momentum forward into 2024.
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
title: "Weekend SSD Adventures"
|
||||
date: 2024-01-23T16:51:30-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Life
|
||||
---
|
||||
|
||||
Last weekend I was really getting the semi-annual itch to play Minecraft. When I loaded it up, I realized it would be a good idea to do a backup of my world, because I hadn't done it in a while. I've poured *a lot* of hours into it with my partner and we would be devastated to lose it. So I wrote up a quick `rsync` command to send it over to my network storage (a strong term for an Raspberry Pi 4 with a USB hard disk attached). I/O error. Huh that's weird. After some intense googling, I found out my SSD has reported **535 blocks unable to be reallocated**. In other words, much of my SSD was becoming unreadable, and it was running out of good blocks to move my data to.
|
||||
|
||||
Turns out my SSD is a Samsung Evo 870, manufactured in early 2021. According to the Internet, a significant number of Samsung Evo 870s manufactured in early 2021 were duds, failing at absurd rates extremely early into their lifespan. It appears I ended up being one of the lucky ones, with mine lasting one and a half years before any problems became apparent.
|
||||
|
||||
So I needed to get a new SSD, preferably that day, since I do need my computer to be functional. Being Sunday, all my local small computer businesses were closed, but no problem, Best Buy is open, I can just get a new one from there. Nope, the one nearest to me permanently closed. The next closest one only had the same model of SSD in stock, which wasn't ideal. I finally found one at Office Depot, of all places, on the opposite side of town. A few hours later, I had a new SSD installed in my PC, and I was ready to reinstall Linux.
|
||||
|
||||
This experience highlighted something I've noticed a lot recently, which is that traditional brick-and-mortar retail stores don't really carry much stock anymore. In a world where most of them got caught unprepared regarding online retail, the one advantage traditional retailers still had was that you could walk in the store, see the products you want, and buy them the same day. Without that, what is even the point of having a physical store?
|
|
@ -1,13 +0,0 @@
|
|||
---
|
||||
title: "Thinking About Databases"
|
||||
date: 2024-05-08T21:31:35-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Tech
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
|
||||
Let's say you're running a web service where users can add other users as friends. How do you store each user's friends list in the database? The simplest solution would be to use one large table called "friends" with each row being an entry on one user's friends list. How well does that perform if you scale up to millions of users? Are indexes applicable to speed things up here? Is there a better way to represent this data in the database?
|
||||
|
||||
I'm not super well-versed on database design so this is something I will be researching.
|
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 19 KiB |
|
@ -1,79 +0,0 @@
|
|||
---
|
||||
title: "Recreating the Windows Live Messenger Avatar in CSS"
|
||||
date: 2024-02-26T23:36:20-07:00
|
||||
categories:
|
||||
- tech
|
||||
tags:
|
||||
- web development
|
||||
year: "2024"
|
||||
---
|
||||
|
||||
This past week I've been working on a big redesign of my site. I'm trying to recreate the vibe of MSN / Windows Live Messenger around 2008-2011. Today, I spent most of the day recreating the avatar frame from WL Messenger in CSS.
|
||||
|
||||
![](images/live-messenger.webp)
|
||||
|
||||
At first, I was trying *really* hard to recreate the kind of [squircle](https://en.wikipedia.org/wiki/Squircle) shape from the login screen. It turns out this is quite difficult in CSS, and the only way I could possibly have done it is through creating an SVG path that I could use to clip the HTML element, but then I would lose access to the `border` and `box-shadow` properties. So instead I opted to just make a rounded square, using the `first-radius` value to round the corners with an ellipse shape rather than a circle. After all, we're going for the vibe, not a 1:1 recreation. After hours of tinkering with just the shape, I added the gradient background, as well as a `<span>` on top of everything to add the "glossy" effect. You can see the code on [CodePen](https://codepen.io/yequari/pen/zYbgmwK).
|
||||
|
||||
![](images/avatar-online.png)
|
||||
![](images/avatar-busy.png)
|
||||
|
||||
|
||||
Next, I wanted to make it dynamic. If I haven't uploaded to my blog in a week, my avatar should show me as "away." My first attempt used JavaScript, which required me to put the date of my recent posts on my index page. I came up with the following script.
|
||||
|
||||
```javascript
|
||||
/* js/avatar.js */
|
||||
let latest = document.querySelector('.dt-published');
|
||||
let avatar = document.querySelector('#avatar-frame');
|
||||
|
||||
let latestDate = Date.parse(latest.attributes.getNamedItem('datetime').value);
|
||||
let threshold = new Date();
|
||||
threshold.setDate(threshold.getDate() - 7);
|
||||
|
||||
console.log(latestDate)
|
||||
|
||||
if (latestDate < threshold) {
|
||||
avatar.className = 'busy';
|
||||
} else {
|
||||
avatar.className = 'online';
|
||||
}
|
||||
```
|
||||
|
||||
It worked great on the index. But as soon as I navigated to another page, it broke. My avatar is present on every page in the sidebar, but not every page has a `<time>` element on it, and of those that do, only one displays the date of my latest blog post. I'd have to find some other way.
|
||||
|
||||
Next I tried doing this with Hugo templates. Since my latest blog post would be generated at the same time as the rest of the site, I could calculate the difference once then not worry about the JavaScript at all.
|
||||
|
||||
```html
|
||||
<!--partials/sidebar.html-->
|
||||
{{ range first 1 (where .Site.RegularPages.ByDate.Reverse "Section" "blog") }}
|
||||
{{ $d1 := time.ParseDuration "-168h" }}
|
||||
{{ $t1 := time.Now.Add $d1 }}
|
||||
{{ $t2 := time.AsTime .PublishDate }}
|
||||
{{ if $t2.After $t1 }}
|
||||
<div id="avatar-frame" class="online">
|
||||
{{ else }}
|
||||
<div id="avatar-frame" class="busy">
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
```
|
||||
|
||||
I wrote all this code before I figured out the fatal flaw in my genius plan: unless I generate my site every day, the frame color will not change, since it is determined at the time of generation. Automatically doing this wouldn't be difficult, but it is a waste of compute time.
|
||||
|
||||
So, back to JavaScript. I need some way to keep track of my latest publish date that is available on all pages. I figure the footer is a good spot for this. Using Hugo template functions, I grab the latest blog post and print its publish date.
|
||||
|
||||
```html
|
||||
<!-- partials/footer.html -->
|
||||
<p>
|
||||
{{ range first 1 (where .Site.RegularPages.ByDate.Reverse "Section" "blog") }}
|
||||
Last updated <time id="last-update" datetime="{{ .PublishDate }}">{{ .PublishDate.Format "January 2, 2006" }}</time>.
|
||||
{{ end }}
|
||||
</p>
|
||||
```
|
||||
|
||||
Then I update the first line of my JavaScript, and it all works!
|
||||
|
||||
```javascript
|
||||
/* js/avatar.js */
|
||||
let latest = document.querySelector('#last-update');
|
||||
```
|
||||
|
||||
Graphic design is not at all my strong suit (despite my random sidebar quote sometimes saying it is my passion), so it has been an enjoyable experience challenging myself to create all of the assets and styles for my new site layout. I'm learning so much and I'm excited to show it all off in the near future!
|
|
@ -1,12 +0,0 @@
|
|||
---
|
||||
title: "X-Men 97"
|
||||
date: 2024-05-04T18:54:13-07:00
|
||||
year: "2024"
|
||||
categories:
|
||||
- Life
|
||||
tags:
|
||||
- WeblogPoMo2024
|
||||
---
|
||||
|
||||
I've been keeping up with X-Men 97 weekly, it's such a good show. I love that it has a pretty serious plot but also keeps some of that Saturday morning cartoon charm. The weekly release schedule is so nice, I love spending the week leading up to the next episode hypothesizing with my partner about what will happen next. It's also gotten me into the X-Men more in general, I've been watching the original 90s cartoon in between episodes, and I think I'll pick up some comics as well!
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
---
|
||||
title: Blog
|
||||
---
|
|
@ -1,50 +0,0 @@
|
|||
---
|
||||
title: "Fitness and Health"
|
||||
date: 2024-04-02T15:00:28-07:00
|
||||
---
|
||||
|
||||
# Fitness and Health
|
||||
|
||||
One of my goals for 2024 was to focus on my physical health. This included two sub-goals: a) exercise at the gym 3 times per week and b) weigh under 200lbs at the end of the year. This page is intended to track my progress.
|
||||
|
||||
Last Updated {{< param date >}}
|
||||
|
||||
## Body Weight
|
||||
|
||||
- Weighed on 01/04/2024: 227lbs
|
||||
- Current Weight: 222lbs
|
||||
|
||||
I had a doctor appointment recently and the post-visit summary included obesity as a discussion topic, despite neither me or my doctor ever bringing it up. I don't know how realistic my weight goals in the given timeframe are, but as long as I'm trending downward at the end of the year, I'll be happy.
|
||||
|
||||
## Lifts
|
||||
|
||||
- Squats: 115lbs
|
||||
- Deadlift: 115lbs
|
||||
- Bench Press: 90lbs
|
||||
- Barbell Row: 90lbs
|
||||
- Overhead Press: 65lbs
|
||||
|
||||
Currently, squats are my best lift, but I've stopped adding weight for now while I train up my shoulders, which are my weakest lift. Weightlifting is really enjoyable to me, it is a great feeling to become stronger.
|
||||
|
||||
## Cardio
|
||||
|
||||
God cardio is a struggle. I've been walking on the treadmill before doing my weight lifting. I tried running today but it was rough, I ended up on a stationary bike which felt a lot better, but I want to get good at running.
|
||||
|
||||
## Dieting Rules
|
||||
|
||||
My intention with these rules is to be stricter with my diet and incentivize healthier choices, while avoiding detailed calorie counting and being miserable. I figure if I write them down it's easier to hold myself accountable rather than keeping only the vague idea of them in my mind. Most of my bad eating comes from sweets and sugary drinks, so I am reducing my intake of those. So far these rules have been working well for me, I am down a few pounds and also not miserable or craving junk food, which I will consider a win. These rules will be adjusted based on how things are going in a few months.
|
||||
|
||||
- Chips and similar carb-heavy snack foods are allowed, but in a limited amount and eaten alongside a meal, never eaten alone.
|
||||
- Dinner is the final food of the day, no snacking afterward
|
||||
- Fast food (usually Taco Bell) is allowed once per week, but be mindful of caloric intake
|
||||
- Zero-sugar sodas only
|
||||
- Prefer zero-sugar beverages in general, but the occasional lemonade/juice/milkshake as a treat is ok
|
||||
- Avoid caffeine after 3pm
|
||||
|
||||
|
||||
## Focus Areas
|
||||
|
||||
- Improving my max weight on overhead press
|
||||
- Improve cardio, ideally this means improving my mile time to under 10 mins
|
||||
- Continue with dieting rules
|
||||
|
|
@ -1,6 +1,4 @@
|
|||
---
|
||||
title: Links
|
||||
---
|
||||
# Links
|
||||
|
||||
This is a collection of links I want to share. Some are useful resources for learning, some are interesting articles, and some are just novel and fun.
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
title: Arch Linux Secure Boot
|
||||
date: 2024-05-06T00:00:00-07:00
|
||||
tags:
|
||||
- Linux
|
||||
---
|
||||
I needed to enable Secure Boot so that I could play League of Legends with Riot's Vanguard Anti Cheat. It seemed complex at first but was actually easier than I expected. The Arch Wiki is both helpful and confusing here, it provides a bunch of different ways to do this, but doesn't always do a great job of differentiating them as logically separate processes.
|
||||
|
||||
My basic understanding of Secure Boot is that when your computer first loads up, it loads the motherboard firmware, which then boots a bootloader. I remember from my OS classes that historically, the bootloader is 512 bytes, specifically the first 512 bytes on the boot disk. The bootloader can be anything, the computer will just run it because of its location in storage, which means malicious actors could run any arbitrary code there and compromise the system. Secure boot mitigates this by only allowing cryptographically signed bootloaders to run. The process outlined here is to sign our bootloaders so that Secure Boot will allow them to run. We are doing this by using our own keys (see [Assisted process with sbctl](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Assisted_process_with_sbctl)), rather than using a pre-signed boot loader. Note that "firmware" here refers to the motherboard firmware, commonly referred to as "the BIOS"
|
||||
|
||||
0. Reboot into firmware and set secure boot mode to Setup mode. What this really means is clearing any keys that currently exist.
|
||||
1. Install `sbctl` and run `sbtcl status` to verify Setup mode is enabled
|
||||
2. Create custom keys `sbctl create-keys`
|
||||
3. Enroll your keys `sbctl enroll-keys -m`. the `-m` means to enroll Microsoft's keys as well. You almost always want this, even if you're not dual-booting with Windows because some firmware is still signed with Microsoft's keys
|
||||
4. Check boot files that need signing `sbctl verify`
|
||||
5. Sign the files `sbctl sign -s /boot/vmlinuz-linux`
|
||||
1. If you have a lot of files, the command given in the wiki works great `sbctl verify | sed 's/✗ /sbctl sign -s /e'`, this assumes that every file listed in `sbctl verify` starts with `/boot`
|
||||
6. Make sure all files are signed `sbctl verify`
|
||||
7. Reboot into firmware and turn on Secure Boot
|
||||
1. In my Asus ROG motherboard's firmware, the setting is in Boot -> Secure Boot and the options are "Windows UEFI" or "Other OS" which are unclear. Windows UEFI turns Secure Boot on.
|
||||
8. Reboot again and run `sbctl status` to verify Secure Boot is on
|
|
@ -1,27 +0,0 @@
|
|||
---
|
||||
title: Example Systemd Service
|
||||
date: 2024-05-06T00:00:00-07:00
|
||||
slug: systemd-example
|
||||
tags:
|
||||
- Linux
|
||||
---
|
||||
|
||||
System units go in `/etc/systemd/system`
|
||||
User units go in `$HOME/.config/systemd/user`
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Webring test service
|
||||
After=network.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
WorkingDir=/code/webring
|
||||
ExecStart=/code/webring/webring --dsn /code/webring/webring.db --addr :8000
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
|
@ -1,39 +0,0 @@
|
|||
---
|
||||
title: Example .desktop File
|
||||
date: 2024-05-06T00:00:00-07:00
|
||||
slug: desktop-file-example
|
||||
tags:
|
||||
- Linux
|
||||
---
|
||||
Example
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
|
||||
# The type as listed above
|
||||
Type=Application
|
||||
|
||||
# The version of the desktop entry specification to which this file complies
|
||||
Version=1.0
|
||||
|
||||
# The name of the application
|
||||
Name=jMemorize
|
||||
|
||||
# A comment which can/will be used as a tooltip
|
||||
Comment=Flash card based learning tool
|
||||
|
||||
# The path to the folder in which the executable is run
|
||||
Path=/opt/jmemorise
|
||||
|
||||
# The executable of the application, possibly with arguments.
|
||||
Exec=jmemorize
|
||||
|
||||
# The name of the icon that will be used to display this entry
|
||||
Icon=jmemorize
|
||||
|
||||
# Describes whether this application needs to be run in a terminal or not
|
||||
Terminal=false
|
||||
|
||||
# Describes the categories in which this entry should be shown
|
||||
Categories=Education;Languages;Java;
|
||||
```
|
|
@ -1,55 +0,0 @@
|
|||
---
|
||||
title: Retrieving status.cafe Updates During Hugo Builds
|
||||
date: 2024-05-06T00:00:00-07:00
|
||||
slug: hugo-build-status-cafe
|
||||
tags:
|
||||
- Hugo
|
||||
- Web Development
|
||||
---
|
||||
|
||||
status.cafe provides you with a JavaScript snippet to include your status on your site. I don't update my status super often, so I don't need to be hitting m15o's servers on every page load. To get around this, I wanted to see if I could update my status as a build step in Hugo.
|
||||
|
||||
This is the script status.cafe provides:
|
||||
```js
|
||||
document.writeln('<div id="statuscafe"><div id="statuscafe-username"></div><div id="statuscafe-content"></div></div>');
|
||||
fetch("https://status.cafe/users/yequari/status.json")
|
||||
.then( r => r.json() )
|
||||
.then( r => {
|
||||
if (!r.content.length) {
|
||||
document.getElementById("statuscafe-content").innerHTML = "No status yet."
|
||||
return
|
||||
}
|
||||
document.getElementById("statuscafe-username").innerHTML = '<a href="https://status.cafe/users/yequari" target="_blank">' + r.author + '</a> ' + r.face + ' ' + r.timeAgo
|
||||
document.getElementById("statuscafe-content").innerHTML = r.content
|
||||
})
|
||||
|
||||
```
|
||||
|
||||
This takes just over a second to fully load. Fetching the above script takes 478ms, then running the script fetches a json file, which takes 680ms. Now this is asynchronous, which means a user is not waiting on this for the rest of the page to load, but it is noticeable that the status pops in later than everything else. The entire page loads in 1.22s
|
||||
|
||||
Here is the same functionality written as a hugo template
|
||||
```go-html-template
|
||||
{{ $data := dict }}
|
||||
{{ $url := "https://status.cafe/users/yequari/status.json" }}
|
||||
{{ with resources.GetRemote $url }}
|
||||
{{ with .Err }}
|
||||
{{ errorf "%s" . }}
|
||||
{{ else }}
|
||||
<div id="statuscafe">
|
||||
{{ $data = .Content | transform.Unmarshal }}
|
||||
{{ $length := len $data.content }}
|
||||
{{ if eq $length 0 }}
|
||||
No status
|
||||
{{ else }}
|
||||
<div id="statuscafe-username">
|
||||
<a href="https://status.cafe/users/yequari" target="_blank">{{ $data.author }}</a> {{ $data.face }} {{ $data.timeAgo }}
|
||||
</div>
|
||||
<div id="statuscafe-content">
|
||||
{{ $data.content }}
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ else }}
|
||||
{{ errorf "Unable to get remote resource %q" $url }}
|
||||
{{ end }}
|
||||
```
|
|
@ -1,28 +0,0 @@
|
|||
---
|
||||
title: Vim Tips
|
||||
date: 2024-05-06T00:00:00-07:00
|
||||
slug: vim-tips
|
||||
tags:
|
||||
- Linux
|
||||
---
|
||||
## General Tips
|
||||
- `vim -p file1 file2` to open multiple files as tabs
|
||||
- `:qa` to quit out of all open buffers
|
||||
- `:Ex` to return to netrw (file explorer)
|
||||
## Terminals
|
||||
- `:term` to open a terminal in current window
|
||||
- Use `i` to enter insert mode and type into the shell
|
||||
- `<C-\><C-n>` to return to normal mode to allow scrolling or switching windows
|
||||
- I've remapped this to `<C-space>`
|
||||
## Windows
|
||||
- `<C-w>` prefixes all window commands
|
||||
- `<C-w>` + `h,j,k,l` to focus window to left, bottom, up, right, respectively
|
||||
- `<C-w>s` to split current window horizontally, equivalent to `:split`
|
||||
- `<C-w>v` to split current window vertically, equivalent to `:vs`
|
||||
## Registers
|
||||
- `"c` before a command, where `c` is the register to store the text
|
||||
- Use capital letter to append to the register, e.g. `"C`
|
||||
## Macros
|
||||
- Press `qc` to start recording, where `c` is the register to store the macro
|
||||
- Stop recording with `q`
|
||||
- Replay the macro with `@c`
|
|
@ -2,8 +2,7 @@
|
|||
title: Dockerized ZNC
|
||||
date: "2022-11-07T14:18:30-07:00"
|
||||
tags:
|
||||
- Linux
|
||||
- Self-Hosting
|
||||
- tech
|
||||
---
|
||||
|
||||
# Setting Up ZNC with Docker
|
||||
|
|
|
@ -2,17 +2,13 @@
|
|||
title: League on Linux
|
||||
date: "2022-11-06T14:18:30-07:00"
|
||||
tags:
|
||||
- Linux
|
||||
- tech
|
||||
---
|
||||
|
||||
# League of Legends on Linux
|
||||
|
||||
*LoLoL for short*
|
||||
|
||||
# Important update
|
||||
|
||||
With [Vanguard coming to League](/blog/2024/01/lol-anticheat) in the near future, League on Linux is no more.
|
||||
|
||||
These are my notes on how I got League of Legends running on my Linux system. It runs almost flawlessly, the only issues I have are with the client, but even on Windows the client is garbage. The game itself runs even better on Linux than it does Windows.
|
||||
|
||||
## System Info
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
title: "Now"
|
||||
date: 2023-04-17T15:00:46-07:00
|
||||
---
|
||||
<div id="content">
|
||||
<h1>Now</h1>
|
||||
Coming soon
|
||||
</div>
|
|
@ -1,13 +0,0 @@
|
|||
---
|
||||
title: "Now"
|
||||
date: 2023-04-17T15:00:46-07:00
|
||||
---
|
||||
# Now
|
||||
|
||||
One day this page will pull some info from APIs to create a more interesting page but for now I just manually update it as needed.
|
||||
|
||||
**Games I'm playing**: Octopath Traveler, Vampire Survivors
|
||||
|
||||
**Shows I'm watching**: Nothing currently
|
||||
|
||||
**Music I'm listening to**: Sleep, Kyuss, Brant Bjork, Queens of the Stone Age, Monster Magnet
|
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
title: "Projects"
|
||||
date: 2023-10-09T14:21:12-07:00
|
||||
---
|
||||
|
||||
Here are some projects I'm currently working on or have worked on in the past.
|
||||
|
||||
## 32-Bit Cafe
|
||||
|
||||
I run a few services for the amazing folks over at the [32-Bit Cafe](https://32bit.cafe).
|
||||
|
||||
- [RSS reader](https://rss.32bit.cafe): an instance of the FreshRSS feed reader to provide an easy to use entry point for community members looking to get started with RSS.
|
||||
- [32bit.cafe Discourse](https://discourse.32bit.cafe): The postmill instance has been phased out in favor of a Discourse forum. It has been awesome building this up with everyone and seeing the enthusiasm for a second primary space for the community.
|
||||
|
||||
## Websites
|
||||
|
||||
- This website
|
||||
- [webweav.ing tools](https://webweav.ing): Currently there is only an RSS feed generator but I intend to add several other tools to help smooth out some pain points of webmastery.
|
||||
|
||||
## Software
|
||||
|
||||
- [Pynex](/projects/pynex): A terminal browser for m15o's nex protocol.
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
title: "Lox Interpreter"
|
||||
date: 2023-10-09T17:07:41-07:00
|
||||
---
|
||||
|
||||
While I was working on [yqsh](/projects/yqsh), I became curious how shells implement a scripting language, and fell down a rabbithole of learning about programming languages, compilers, and interpreters. This led me to find Robert Nystrom's [Crafting Interpreters](http://www.craftinginterpreters.com/), a wonderful book that guides the reader through creating a tree-walk interpreter and later a full bytecode virtual machine. I'm currently working through the first half of the book, the tree-walk interpreter in Java.
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
title: "Powerlinx"
|
||||
date: 2023-10-09T17:07:18-07:00
|
||||
---
|
||||
|
||||
Powerlinx is a static site generator that also packages the site as single executable. I originally wrote it to generate this website, which I wanted to have more dynamic content than what using Hugo would allow. A flawed concept, I've come to realize, as now I am back to using Hugo, but I learned a lot from writing this software and would like to revisit it, reworking it to be a simple HTML preprocessor.
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
title: "Pynex"
|
||||
date: 2023-10-09T17:07:25-07:00
|
||||
---
|
||||
|
||||
[Source Code](https://git.32bit.cafe/yequari/pynex/)
|
||||
|
||||
A terminal browser for m15o's [nex protocol](https://nightfall.city/nex/) written in Python.
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
title: "Seekerbot"
|
||||
date: 2023-10-09T17:07:11-07:00
|
||||
---
|
||||
|
||||
One of my first side projects, which I created during the pandemic. At the time I was playing the Transformers TCG a lot, which had now moved online, and the communities I was playing in needed a way to track the result of matches. Since everything was on Discord, I realized I could put something together using the Discord API to track matches and win rates during a given period of time.
|
||||
|
||||
Slowly, interest in the fan continuation of the Transformers TCG dried up, so SeekerBot is not in use anymore.
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
title: "Weatherbar"
|
||||
date: 2023-10-09T17:07:53-07:00
|
||||
---
|
||||
|
||||
A cli utility that prints out the current weather. Designed to be used with Linux statusbar software such as i3bar, waybar, etc.
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
title: "Yqsh"
|
||||
date: 2023-10-09T17:07:48-07:00
|
||||
---
|
||||
|
||||
I wanted to learn how fork/exec worked on Linux so I made a basic shell. I would like to improve it by adding job control capabilities and a scripting language.
|
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 191 KiB |
|
@ -1,60 +0,0 @@
|
|||
---
|
||||
title: "Store Exclusives"
|
||||
date: 2024-08-11T08:53:54-07:00
|
||||
year: "2024"
|
||||
---
|
||||
|
||||
# Transformers 00s Store Exclusives
|
||||
|
||||
> *This page was created as an entry into the [32-Bit Cafe's Codejam #5](https://32bit.cafe/~xandra/events/codejam5/). While not necessarily a "complicated topic", it is a topic I can ramble on about for hours.*
|
||||
|
||||
The early- to mid-2000s period of the Transformers franchise had an interesting product strategy, one that Hasbro seemed to shift away from following the success of the first live-action movie. This era was the one I grew up with, so I wanted to dive into one aspect of the toyline I find particularly interesting about this period: retailer exclusive toys.
|
||||
|
||||
## Some History
|
||||
|
||||
Retailers will request exclusives from Hasbro as a way to draw customers into the store. The idea being if you go in for a specific exclusive toy, maybe you'll spend more money in the store other items while you're there, rather than getting them from a competitor. Kmart of all places actually had the first retailer-exclusive Transformers toys in 1989, which were the inner robots of the Classic Pretender toys: Bumblebee, Grimlock, Jazz, and Starscream. There were very few retailer exclusives after that until KB Toys got an entire subline named Machine Wars in 1997, containing toys made from cancelled Generation 2 molds or late Generation 1 molds that were exclusive to Europe. There were a few scattered exclusives since then in the Beast Wars and Beast Machine lines, but It wasn't until Robots in Disguise in 2001 that retailer exclusive mainline toys became a common practice.
|
||||
|
||||
## Exclusives for Everyone
|
||||
|
||||
Following the success of the Robots in Disguise line, the large toy retailers of the time, Target, Walmart, Toys R Us, and KB Toys, began selling their own exclusive figures. These stores generally got pretty normal figures as exclusives, mostly repaints or value packs of mainline figures. Toys R Us got a lot of collector-oriented releases, including reissues of Generation 1 toys in the Commemerative Series line. Membership retailers Costco and Sam's Club also got some exclusives for the holiday season, which ended up being the weirder exclusive releases.
|
||||
|
||||
### Kmart
|
||||
|
||||
Kmart was largely excluded from exclusives during this time, however they did get some, including an odd "Battle for the Matrix" multipack in the Transformers Armada line, containing "Powerlinx" Optimus Prime and "Powerlinx" Jetfire, along with a large assortment of Mini-cons. For context, by the second year of the Armada toyline, Hasbro was running out of toys to release to keep up with demand, so they repainted a bunch of first-year toys to represent "powered up" versions of the characters, and slapped "Powerlinx" in front of their name. Despite this labelling, neither "Powerlinx" figure in this multipack is actually the Powerlinx version released to all the retailers. Jetfire is exactly the same as the original figure, and Optimus Prime is almost the same as his original figure, except his red parts are painted gold for some reason. It...doesn't look great. To add to the confustion, it would have been possible to find the real mainline Powerlinx Optimus Prime and Jetfire next to this multipack. Wild.
|
||||
|
||||
![Armada Optimus Prime, but red is now gold](images/800px-Armada-optimus-prime-gold-kmart.jpg "That's gold, Jerry! Gold!")
|
||||
|
||||
### Sam's Club
|
||||
|
||||
Sam's Club got 3 exclusives in this period, the first two in 2003 were repainted Robots in Disguise Optimus Prime and Ultra Magnus, under the Transformers Universe line. Ultra Magnus is mostly unchanged from his mainline 2001 release, except for some darker blues in his color scheme. Optimus Prime, though, is repainted in an awesome bright yellow color scheme. Why? Who knows. It is such an odd choice and I love it. Even weirder, is that Prime's die-cast chest is still painted red, a jarring contrast from everything else turning yellow.
|
||||
|
||||
![Robots in Disguise 2001 Optimus Prime but he's yellow](images/Universe2003toy-OptimusPrimeSuper.jpg "When life gives you lemons")
|
||||
|
||||
The next year, Sam's Club offered an exclusive two-pack of Prowl and Starscream, which were repaints of Armada Red Alert and Armada Starscream, and included their Mini-cons. The Starscream is a fairly minor repaint, keeping a similar color scheme but with black wings and darker greys. Prowl, however, is sporting a blue and white color scheme, made to look more like Energon Prowl. I actually like this deco a lot, though I wonder why the choice was to repaint Red Alert instead of one of the million Autobot cars.
|
||||
|
||||
![](images/Energon-toy_2-pack_Starscream.jpg)
|
||||
![](images/Energon-toy_2-pack_Prowl.jpg)
|
||||
|
||||
### Costco
|
||||
|
||||
Costco got a few exclusives, the most notable one is a 2004 multipack of Armada Optimus Prime and Overload, repainted in a black, yellow, and maroon color scheme. It is very similar to the [Universe Optimus Primal](https://tfwiki.net/wiki/Optimus_Primal_(BW)/toys#Universe_.282003.29) figure. I actually like this color scheme a lot, it's pretty unique as far as Optimus Prime decos go.
|
||||
|
||||
![](images/Energon_Costco_OptimusPrimeOverload.jpg)
|
||||
|
||||
The following year, Costco sold a multipack of the Sam's Club versions of Robots in Disguise Optimus Prime and Ultra Magnus, except Optimus is back to being red. Interestingly, the box uses the artwork for Cybertron Optimus Prime, even though the toys don't look much alike, and box art for Ultra Magnus in the Cybertron style was specifically created for this release. I remember being somewhat disappointed about getting this set for Christmas that year because it wasn't Cybertron Optimus Prime, but I came around on them pretty quickly.
|
||||
|
||||
![](images/Cybertrontoy_ridprime_magnus_2pack.jpg)
|
||||
|
||||
In 2006, Costco got a multipack of Cybertron Optimus Prime and Wing Saber with an extra DVD included. The toys were repackaged without any modification from the mainline, which actually makes it somewhat unique among the other exclusives of the time. I was very excited about getting this one for Christmas.
|
||||
|
||||
![](images/Cybertrontoy_prime_wingsaber_2pack.jpg)
|
||||
|
||||
## Conclusion
|
||||
|
||||
While exclusives have certainly not gone away, after the franchise *exploded* following the release of the first live-action movie, the way exclusives were done changed. Of course we still got random repaints, but these tended to be minor characters. Hasbro became much more deliberate in its releases of big ticket toys like Optimus Prime, avoiding wacky repaints and instead going for more grounded color schemes, usually for a more "screen accurate" look, such as with Premium Edition releases.
|
||||
|
||||
## More info
|
||||
|
||||
- [Exclusives - TFWiki](https://tfwiki.net/wiki/Exclusive)
|
||||
- Images sourced from the characters' respective pages on TFWiki
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "The Transformers Collection Starscream"
|
||||
date: 2023-05-04T16:28:07-07:00
|
||||
categories:
|
||||
tags:
|
||||
- transformers
|
||||
---
|
||||
<figure>
|
||||
|
|
|
@ -1,32 +1,30 @@
|
|||
---
|
||||
title: "2022 Vintage Starscream Reissue"
|
||||
date: 2023-06-05T00:49:07-07:00
|
||||
categories:
|
||||
- Transformers
|
||||
tags:
|
||||
- transformers
|
||||
---
|
||||
<h1>2022 Vintage Starscream Reissue</h1>
|
||||
<p>
|
||||
The recent Walmart exclusive Transformers: The Movie Vintage Generation 1 Starscream reissue is a new direction from Hasbro for reissues of old Generation 1 figures. In the past, G1 reissues were relatively unchanged from their original counterparts from the 1980s, sometimes with minor revisions, often related to US toy safety laws that had changed since the original release. Now, Hasbro is releasing repainted versions of G1 figures which more closely match the character's on-screen appearance in the cartoon. Starscream and Hot Rod were the first, but Thundercracker and Hound have also come since.
|
||||
</p>
|
||||
<figure>
|
||||
<img width="40%" height="auto" alt="2022 Reissue of G1 Starscream with new color scheme in robot mode" src="new1.jpg">
|
||||
<img width="40%" height="auto" alt="2022 Reissue of G1 Starscream with new color scheme in jet mode" src="jetnew.jpg">
|
||||
<img width="320px" height="auto" alt="2022 Reissue of G1 Starscream with new color scheme in robot mode" src="new1.jpg">
|
||||
<img width="320px" height="auto" alt="2022 Reissue of G1 Starscream with new color scheme in jet mode" src="jetnew.jpg">
|
||||
</figure>
|
||||
<p>
|
||||
This release of Starscream replaces the original decals with tampographed designs, most notably the Decepticon insignias and the vents below the knees. While it's nice to not have to try and sticker him up with my shaky hands, the replacement paint applications are quite scarce, which makes the figure somewhat boring. To better reflect Starscream's cartoon appearence, the blue highlights are a lighter shade, the cockpit is orange, the nosecone is now grey, and the face is painted black and grey, highlighted with red eyes. Unfortunately, the paint is kind of a mess. It's uneven and spotty all over. On the head there is a lot of gray showing through and the red paint on the eyes is globbed up, which looks odd. Even the die-cast chest is painted poorly such that it looks lumpy. All of these paint issues mostly affect the robot mode, but in jet mode they are less noticeable, which makes the jet a clear favorite between the two modes. My only complaint is that it isn't as visually interesting as it could be, especially compared with previous reissues, with the grey nosecone and the missing accents on the tail fins.
|
||||
</p>
|
||||
|
||||
<figure>
|
||||
<img width="100%" alt="2022 Reissue of G1 Starscream with new color scheme in robot mode" src="comparison5.jpg">
|
||||
<img width="640px" height="auto" alt="2022 Reissue of G1 Starscream with new color scheme in robot mode" src="comparison5.jpg">
|
||||
<figcaption>2022 Reissue Starscream compared to 2003 The Transformers Collection Starscream. The grey nosecone is technically screen accurate, but less interesting in my opinion</figcaption>
|
||||
</figure>
|
||||
<p>
|
||||
Starscream comes with a mini Megatron accessory to hold either in his hand or to clip onto the jet mode, which is a great addition, though mine does not quite together right, which ultimately doesn't matter much since most of the time Starscream's fist is between the two pieces. It's just another QA issue. The missiles are extended to comply with US toy safety laws, which looks fine in robot mode but looks pretty goofy in jet mode.
|
||||
</p>
|
||||
<figure>
|
||||
<img width="40%" height="auto" src="new2.jpg">
|
||||
<img width="40%" height="auto" src="noseconenew.jpg">
|
||||
</figure>
|
||||
<img width="320px" height="auto" src="new2.jpg">
|
||||
<img width="320px" height="auto" src="noseconenew.jpg">
|
||||
<p>
|
||||
While this is a nice fresh take on a G1 reissue, the QA issues and lack of detail unfortunately prevent me from recommending the 2022 vintage Starscream reissue. At $35 retail, a better Starscream purchase would be the Legacy Voyager Class Armada Starscream. I think the value just isn't there to justify such a steep price for this figure, especially considering the last reissue from a few years ago retained all the original stickers at the same price point. Next time I'll take a look at Takara's 2003 The Transformers Collection release of Starscream, which executes the screen-accurate redeco perfectly, as a point of comparison.
|
||||
</p>
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
name: Computing
|
||||
links:
|
||||
- name: Simple Balanced Ternary Computer Virtual Machine
|
||||
description: A virtual machine simulating a base 3 computer. Alternatives to the traditional models of computing are of great interest to me and I want to learn more about programming in base 3.
|
||||
url: https://sbtcvm.blogspot.com/?m=1
|
||||
- name: Shell Script Best Practices
|
||||
description: A list of tips when writing shell scripts. Especially useful for me since I'm not super familiar with bash but use it on a daily basis.
|
||||
url: https://sharats.me/posts/shell-script-best-practices/
|
||||
- name: The Lost Art of Structure Packing
|
||||
description: An interesting look into how C structs work and how to squeeze some extra optimization out of them.
|
||||
url: http://www.catb.org/esr/structure-packing/
|
||||
- name: how do i webmentions
|
||||
description: An excellent tutorial on how to set up webmentions on your site, specifically tailored to neocities users.
|
||||
url: https://webmentions.neocities.org
|
||||
- name: How to create hover text using HTML and CSS
|
||||
description: A tutorial explaining hover text without using JavaScript, which I used to set up this page.
|
||||
url: https://sebhastian.com/html-hover-text/
|
||||
- name: Beej's Guides
|
||||
description: Beej's Guides are all excellent tools to learn various programming languages and technologies. Notably useful for me are Beej's Guide to Network Programming and Beej's Guide to C (both volumes)
|
||||
url: https://beej.us/guide/
|
|
@ -9,6 +9,3 @@ links:
|
|||
- name: Advanced PET
|
||||
description: A web simulation of the old Megaman NT Warrior Advanced PET toy from the mid-2000s
|
||||
url: https://xwellingtonx.github.io/advanced-pet/
|
||||
- name: IDW Transformers (2005) Complete Reading Order
|
||||
url: https://www.tfw2005.com/boards/threads/idw-transformers-complete-reading-order-2005-2018.1117009/
|
||||
description: A chronological reading order for IDW's Transformers series (2005).
|
|
@ -9,6 +9,3 @@ links:
|
|||
- name: Writing when tech has broken the web's social contract
|
||||
description: An article discussing how writing on the Internet is changing because of AI
|
||||
url: https://www.baldurbjarnason.com/2023/tech-broke-the-webs-social-contract/https://www.baldurbjarnason.com/2023/tech-broke-the-webs-social-contract/
|
||||
- name: "Pluralistic: \"If buying isn't owning, piracy isn't stealing\""
|
||||
url: https://pluralistic.net/2023/12/08/playstationed/#tyler-james-hill
|
||||
description: Cory Doctorow writes about DRM and the bullshit of digital "ownership"
|
|
@ -0,0 +1,14 @@
|
|||
name: Food for Thought
|
||||
links:
|
||||
- name: 32-Bit Cafe
|
||||
url: "https://32bit.cafe"
|
||||
description: Building a better internet
|
||||
- name: Permacomputing Wiki
|
||||
url: https://permacomputing.net
|
||||
description: Permacomputing focuses on sustainable computing, inspired by permaculture, aiming to utilize existing compute resources rather than new ones. The wiki is very incomplete, but is something to keep an eye on as it grows.
|
||||
- name: Building a Better World in your Backyard
|
||||
url: https://permies.com/w/better-world
|
||||
description: On the topic of permaculture, Building a Better World in your Backyard is a book describing how you can get started with permaculture and living a sustainable lifestyle. The website has lots of good resources and is often referenced by the book. You can also buy the book in bulk for cheap to distribute amongst your local community.
|
||||
- name: The small things Manifesto
|
||||
url: https://ajroach42.com/the-small-things-manifesto/
|
||||
description: A manifesto written by Andrew Roach proposing that we should try to do things on a human scale again, instead of trying to design everything to scale infinitely.
|
|
@ -1,32 +0,0 @@
|
|||
name: Computing
|
||||
links:
|
||||
- name: Simple Balanced Ternary Computer Virtual Machine
|
||||
description: A virtual machine simulating a base 3 computer. Alternatives to the traditional models of computing are of great interest to me and I want to learn more about programming in base 3.
|
||||
url: https://sbtcvm.blogspot.com/?m=1
|
||||
- name: Shell Script Best Practices
|
||||
description: A list of tips when writing shell scripts. Especially useful for me since I'm not super familiar with bash but use it on a daily basis.
|
||||
url: https://sharats.me/posts/shell-script-best-practices/
|
||||
- name: The Lost Art of Structure Packing
|
||||
description: An interesting look into how C structs work and how to squeeze some extra optimization out of them.
|
||||
url: http://www.catb.org/esr/structure-packing/
|
||||
- name: Beej's Guides
|
||||
description: Beej's Guides are all excellent tools to learn various programming languages and technologies. Notably useful for me are Beej's Guide to Network Programming and Beej's Guide to C (both volumes)
|
||||
url: https://beej.us/guide/
|
||||
- name: An approach to computing and sustainability inspired from permaculture
|
||||
description: A talk from Strange Loop 2023 by Devine Lu Linvega about managing software complexity and developing software with preservation in mind. Devine show off a virtual machine and language they created for building games and software, with a focus on being well documented and easily re-implementable.
|
||||
url: https://www.youtube.com/watch?v=T3u7bGgVspM
|
||||
- name: Permacomputing Wiki
|
||||
url: https://permacomputing.net
|
||||
description: Permacomputing focuses on sustainable computing, inspired by permaculture, aiming to utilize existing compute resources rather than new ones. The wiki is very incomplete, but is something to keep an eye on as it grows.
|
||||
- name: Advanced Programming in the UNIX Environment
|
||||
url: https://stevens.netmeister.org/631/
|
||||
description: A graduate class taught by Jan Schaumann at Stevens Institute of Technology covering the development of complex system software for UNIX systems.
|
||||
- name: Challenging projects every programmer should try
|
||||
url: https://austinhenley.com/blog/challengingprojects.html
|
||||
description: Some suggestions for projects programmers should try in order to level up their skills.
|
||||
- name: A beginners' guide away from scanf()
|
||||
url: https://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
|
||||
description: Every C class teaches you to use scanf() to read input. Every Cbest practices guide tells you to never use scanf(). This article describes how.
|
||||
- name: Actually Portable Executables
|
||||
url: https://justine.lol/ape.html
|
||||
description: An amazing and wild project that creates an executable file compatible with Unix, Windows, and MacOS.
|
|
@ -1,11 +0,0 @@
|
|||
name: Web Development
|
||||
links:
|
||||
- name: how do i webmentions
|
||||
description: An excellent tutorial on how to set up webmentions on your site, specifically tailored to neocities users.
|
||||
url: https://webmentions.neocities.org
|
||||
- name: A Complete Guide to Flexbox
|
||||
description: A terrific guide to using CSS flexbox with examples and explanations of all the properties. My go-to resource whenever I have questions regarding flexbox.
|
||||
url: https://css-tricks.com/snippets/css/a-guide-to-flexbox/#aa-background
|
||||
- name: RSS Guide - Melonland Wiki
|
||||
description: An approachable beginner's guide to RSS, written by the folks in the Melonland community.
|
||||
url: https://wiki.melonland.net/rss_guide
|
|
@ -1,20 +0,0 @@
|
|||
name: Around the Smallweb
|
||||
links:
|
||||
- name: 32-Bit Cafe
|
||||
url: "https://32bit.cafe"
|
||||
description: An inclusive community dedicated to making web development approachable to newcomers.
|
||||
- name: The small things Manifesto
|
||||
url: https://ajroach42.com/the-small-things-manifesto/
|
||||
description: A manifesto written by Andrew Roach proposing that we should try to do things on a human scale again, instead of trying to design everything to scale infinitely.
|
||||
- name: Small Technology Foundation
|
||||
url: https://small-tech.org/
|
||||
description: The work of Laura Kalbag and Aral Balkan, the Small Technology Foundation advocates for building the small web using small technology designed to increase human welfare.
|
||||
- name: Melonland Forum
|
||||
url: https://forum.melonland.net/
|
||||
description: A forum focused on smallweb development, styled like an old-school web 1.0 website!
|
||||
- name: Tiny Tools
|
||||
url: https://tinytools.directory/
|
||||
description: A list of small, free, or experimental tools for building websites or games.
|
||||
- name: Nightfall City
|
||||
url: https://nightfall.city/
|
||||
description: A project from m15o, who describes it as "A vibrant metropolis in an uncharted internet territory."
|
|
@ -1,17 +0,0 @@
|
|||
name: Blogs
|
||||
links:
|
||||
- name: null program
|
||||
url: https://nullprogram.com
|
||||
description: Chris Wellon's personal blog with a lot of great tips and pointers (pun intended) for C programming.
|
||||
- name: Julia Evans
|
||||
url: https://jvns.ca/
|
||||
description: Julia's blog is all about content that dives deep into how computers work, but makes it accessible for non-experts.
|
||||
- name: Flamed Fury
|
||||
url: https://flamedfury.com
|
||||
description: fLaMEd writes about his hobbies and the web.
|
||||
- name: Drew DeVault's blog
|
||||
url: https://drewdevault.com/
|
||||
description: Drew DeVault is a software engineer working on multiple projects, notably swaywm and the Hare programming language.
|
||||
- name: Andreas Kling
|
||||
url: https://awesomekling.github.io/
|
||||
description: Andreas Kling likes computers! He works on SerenityOS and the Ladybird Browser.
|
|
@ -1,3 +0,0 @@
|
|||
- "Futzing around with iPods"
|
||||
- "Building a CD collection"
|
||||
- "Improving my physical fitness"
|
|
@ -1,8 +0,0 @@
|
|||
{{ if .Title }}
|
||||
<figure>
|
||||
<img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title }}title="{{ . }}"{{ end }}>
|
||||
<figcaption>{{ .Title }}</figcaption>
|
||||
</figure>
|
||||
{{ else }}
|
||||
<img src="{{ .Destination | safeURL }}" alt="{{ .Text }}">
|
||||
{{ end }}
|
|
@ -1,10 +0,0 @@
|
|||
{{- $u := urls.Parse .Destination -}}
|
||||
<a href="{{ .Destination | safeURL }}"
|
||||
{{- with .Title }} title="{{ . }}"{{ end -}}
|
||||
{{- if $u.IsAbs }} rel="external"{{ end -}}
|
||||
>
|
||||
{{- with .Text | safeHTML }}{{ . }}{{ end -}}
|
||||
</a>{{- if $u.IsAbs }}🔗{{ end -}}
|
||||
{{- /* chomp trailing newline */ -}}
|
||||
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
<section class="content posts h-feed hfeed">
|
||||
{{ range .Paginator.Pages.ByPublishDate.Reverse }}
|
||||
<article class="h-entry">
|
||||
<h2><a class="title u-url p-name" href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||
{{ partial "post-header.html" .}}
|
||||
{{ if .Params.Subtitle }}<p class="subtitle">{{ .Params.Subtitle }}</p>{{ end }}
|
||||
<p class="summary">
|
||||
{{ .Summary }}{{ if .Truncated }}...{{ end }}
|
||||
</p>
|
||||
</article>
|
||||
{{ end }}
|
||||
</section>
|
||||
{{ template "_internal/pagination.html" . }}
|
||||
{{ end }}
|
||||
{{ define "sidebar" }}
|
||||
<!-- {{- partial "blog-sidebar.html" . -}} -->
|
||||
<!-- <h3>See Posts From</h3> -->
|
||||
<!-- {{- partial "posts-by-year.html" . -}} -->
|
||||
<!-- {{- partial "sidebar.html" . -}} -->
|
||||
{{ end }}
|
|
@ -1,28 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta charset="utf-8">
|
||||
<title>{{ .Page.Title }}</title>
|
||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
||||
<link href="https://fonts.bunny.net/css?family=b612-mono:400|asar:400|bungee:400|nova-mono:400|krub:400|lalezar:400" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="/css/winter.css">
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
<link rel="webmention" href="https://webmention.io/yequari.com/webmention" />
|
||||
<link rel="pingback" href="https://webmention.io/yequari.com/xmlrpc" />
|
||||
<script src="/js/webmention.js" async></script>
|
||||
{{ range .AlternativeOutputFormats -}}
|
||||
{{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
|
||||
{{ end -}}
|
||||
</head>
|
||||
<body>
|
||||
<div class="big">
|
||||
<div class="column">
|
||||
<div id="winter"></div>
|
||||
<main>
|
||||
{{- block "main" . }}{{- end }}
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,20 +0,0 @@
|
|||
{{ define "main" }}
|
||||
<header>
|
||||
</header>
|
||||
<article class="h-entry content">
|
||||
<h1 class="p-name">{{ .Title }}</h1>
|
||||
<p><a href="/">← Return to yequari.com</a></p>
|
||||
<a class="p-author h-card hidden" href="https://yequari.com">yequari</a>
|
||||
<time class="dt-published" datetime={{.PublishDate }}>{{ .PublishDate.Format "Mon, Jan 02, 2006" }}</time>
|
||||
<a class="u-url permalink" href={{ .RelPermalink }}>Permalink</a>
|
||||
{{ partial "tags.html" .}}
|
||||
{{ if .Params.context }}
|
||||
<p class="context">{{ .Params.context | markdownify }}</p>
|
||||
{{ end }}
|
||||
<div class="e-content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</article>
|
||||
{{ partial "webmentions.html" }}
|
||||
<script src="/js/winter.js"></script>
|
||||
{{ end }}
|
|
@ -1,20 +0,0 @@
|
|||
{{ define "main" }}
|
||||
<div class="index-wrapper">
|
||||
<div class="box index-content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
<div class="box index-blog">
|
||||
{{- partial "index-latest-blogs.html" . -}}
|
||||
</div>
|
||||
<div class="box index-social">
|
||||
{{- partial "index-socials.html" . -}}
|
||||
</div>
|
||||
<!-- <div class="box index-banners"> -->
|
||||
<!-- </div> -->
|
||||
<div class="box index-recent">
|
||||
{{- partial "index-now.html" . -}}
|
||||
</div>
|
||||
<!-- <div class="box index-bookmarks"> -->
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
{{ end }}
|