Week 17, 2025


A blog post was up shortly about having to change many things on how I represent myself online and my projects. Most of those things will not go into effect and some changes have been reverted. For example, on April 26, 2025, I decided that I will be keeping the Alucard aesthetics for social media services.

Projects

ContactList, CAMS and other web-based projects

I recently came to the realization that I should be treating the frontend and backend of my web-based projects as two separate projects.

The backend could be a REST API where either a separate frontend, that could be a JavaScript-free server-rendered frontend for browser use, a TUI (terminal) client or a mobile app.

For ContactList specifically, I have renamed the current repository to contactlist-server. The web-based frontend may be either part of the same repository, being named contactlist-web, it would also be written in Go since it would render pages server-side in order to have support for browsers without JavaScript or better support for it, such as NetSurf. The TUI client offers much more different options for the programming language though I may end up using Rust, C or Python, the latter being the most likely due to its suitable performance and experience I have with it.

Block diagram

CTCL Rebranding

Following April 25, 2025, I have been working on a total rebranding, a much needed one. It may be a while before any changes are seen.

Color Scheme

An idea I had was to use the color #4030d2, which is currently named "Norfluoxetine Blue" on colornames.org. Norfluoxetine is used as a metaphor for a result that stays with someone, having an influence, for an unusally long time. This is related to how the active metabolite of the SSRI fluoxetine, norfluoxetine, has a biological half-life of 16 days. I see this as a metaphor for how the goal to my projects is to have a lasting positive influence.

I may use #4030d2 along with #d230c2 being a secondary color, which is named "Fluoxetine Magenta" on colornames.org respectively. I find that this would be more interesting than the gold color I was using before. The color was also chosen due to its better contrast on both white and black backgrounds.

Website Redesign

I have decided this is a time for me to redesign the website.

MediaCow Touch 2

The April 25, 2025 incident was a bump in the road for MediaCow Touch 2 but I have decided to continue working on it. I'd like to see the day where I don't have to start a section title with "MediaCow Touch 2".

The "Curitiba" codename is here to stay. I may bring back the codename to KiCAD schematics again after being removed on April 26.

AMOXA

I may return to using PyGame for AMOXA since Python is a much more familiar environment to me and I want to be able to focus more on the game itself than having to learn Go to use Ebitengine. It may not be impossible to use PyGame on the minimum hardware I am targeting, the VIA C7, but optimizations would likely be required.

I returned to using Python and PyGame for AMOXA on April 28, 2025.

MediaCow Touch 2

I moved up the MediaCow Touch 2 Part 17 blog post to release with this blog post.

See MediaCow Touch 2 - Part 17.

Other

This week, I have begun to explore uses of AI again.

On April 22, I attempted to run SDXL models on my own hardware, making use of AMD ROCm to generate images on the Radeon RX 6700 XT. So far, this has not been successful, being met with the following when using an example for PyTorch: RuntimeError: HIP error: invalid device function HIP kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. For debugging consider passing AMD_SERIALIZE_KERNEL=3 Compile with `TORCH_USE_HIP_DSA` to enable device-side assertions.

On April 24, I attempted running AI models on the Radeon GPU again, but not trying to generate images. This time, I made use of the Salesforce BLIP model to generate images from text with the idea that I could use this to aid in tagging the many thousands of personal photos I have on my server.

I used the following Python script to read from a directory of images and generate captions for them:

from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
from os import listdir
from os.path import isfile, join

# sorted() is used here to make finding the corresponding images easier
imglist = sorted([join("./inp/", f) for f in listdir("./inp/") if isfile(join("./inp/", f)) and f.endswith(".jpg")])
processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-large").to("cuda")

for img in imglist:
        raw_image = Image.open(img).convert('RGB')

        print(f"== Image {img} ==")
        # conditional image captioning
        text = "a photograph of"
        inputs = processor(raw_image, text, return_tensors="pt").to("cuda")

        out = model.generate(**inputs)
        print(processor.decode(out[0], skip_special_tokens=True))

        # unconditional image captioning
        inputs = processor(raw_image, return_tensors="pt").to("cuda")

        out = model.generate(**inputs)
        print(processor.decode(out[0], skip_special_tokens=True))

I had to set the following environment variables since my specific GPU may not be supported. I set the ROCm architecture to 10.3.0 with architecture gfx1030 while the GPU is acutally reported as gfx1031.

#!/bin/bash

export PYTORCH_ROCM_ARCH="gfx1030"
export HSA_OVERRIDE_GFX_VERSION=10.3.0
export HIP_VISIBLE_DEVICES=0
export ROCM_PATH=/opt/rocm

python3 run.py

I noticed a high-pitched buzzing sound any time the GPU is processing an image. I have never heard any sounds coming from the GPU before though I doubt it would be a problem.

I still have the Nvidia Tesla K20X that was given to me by the LUG/HPRC advisor at VCU. I just recently found out that the card has 6GB of RAM instead of 4GB, I figured this since the card has 24 GDDR5 chips that are 2Gbit each. This may have the card more useful for possibly setting up a dedicated server for AI tasks.

Personal

Being one of the worst weeks of my recent life, I have been having a lot to think about.

What happened on April 25, then later April 27, has affected me greatly though my initial reactions were more-or-less a kneejerk reaction.

College

I have decided I will not be attending college anymore after this semester. It is not because I just don't want to do the work but I think there is a much better way for me to be successful, especially with the ever-growing chaos in the economy.

For the Fall 2024 and Spring 2025 semester, I did not sign up for classes to further education but it was mostly done to alleviate the effects of social isolation after the many months I was at home in 2024.

As I bluntly stated in the Week 15, 2025 blog post, I believe that complex personal projects such as MediaCow Touch 2 and the various other things I am doing would show a much greater skillset and resolve than whatever I do for college classes; assignments that every other classmate is told to do.