RSSAmplifier

Blog

Tomasino Labs

Recent content on Tomasino Labs

labs.tomasino.orgRSS feed ↗105 posts

Latest posts

Film Ratings

My film ratings website is a project I’ve been dreaming up for the last few years. The core idea was simple: use the same rating system chess players use to track their performance and apply it to my personal film rankings. Then I can let the numbers evolve naturally as I compare movies head-to-head, the way a tournament bracket works. What started as a straightforward rating tool sort of…

The Role of Pharma Marketing in AI

The search engine has been the de facto method of online discovery since before the web was fully established. Archie helped us search FTP, and Veronica spidered through Gopher to pave the way for 1994’s first full-text web search, WebCrawler. It wasn’t until the late nineties when the algorithmic searches of AltaVista, Lycos, and Excite really popularized their use over blogrolls and…

256 Color TTY

It’s pretty well known that I do most of my daily work inside a terminal. My text editor of choice is vim. I program, take notes, write stories, blog, and do pretty much everything text related in there. Most of my social networking and chatting is done via weechat and plugins. I browse a lot of fun content on gopher and gemini using tools like amfora or phetch. Even when I browse the web,…

LLM Marketing Poison

Large Language Models ( LLMs ) are all the rage. The tech du jour. Businesses scramble to claim their usage to court investment and speculation. LinkedIn influencers blog about the shifting reality for employees and offer prompt engineering advise. And big tech battles to stake their claims to the greatest copyright infringement monstrosity in human history. It is a witch’s cauldron, a…

Improving Blog Signing

In a previous post I set up a system to sign the pages of this blog with gpg. If you aren’t familiar with that post, I recommend checking it out. I think it’s pretty interesting. I had a technical challenge in my implementation because I’m using Hugo as my static site builder. Hugo is very fast at generating pages, but perhaps because of that it doesn’t do incremental…

It's always Friday somewhere

I have unilaterally decided that the planets of our solar system have different days of the week than Earth. Why? Because I accidentally said, “It’s always Friday somewhere,” instead of “It’s always 5:00 somewhere.” Oops. So what are the days of the week? I decided each planet should be offset from our own day of the week by one day per planet. But which way…

Cookie Consent with Google Consent Mode V2

Next month Google is rolling out Consent Mode V2 for Google Tags in Europe and applicable other markets around the globe. In brief, this is a change to how cookie consent and “don’t sell my data” directives are handled in relation to Google tags. There are two parts to be aware of: The mechanism of validating whether tags can transmit or store data is changing to use…

Audiobooks

I’m doing some work that requires the use of headphones but I wanted to listen to my audiobook at the same time. These headphones are noise canceling, so playing the book on my phone wasn’t going to work well. I have all my audiobooks in a share drive, so I figured I should make a quick browser to select one and play it. I knew mpv had support for saving the position of playback so it…

Brief Wonders

Last night while lying in bed I started wondering how many songs had reached the hot 100 charts for only a single week, and never again. I call them “Brief Wonders”. You know, not quite one-hit wonders, but sorta close. Well, Tonight I decided to look into it! A brief search found a lot of people who have been gathering Hot 100 data over the years. A few clicks led me to…

Sci-Fi Radio

About three years ago I built myself a recurring internet radio show on TildeRadio. I had been doing radio programs on AnonRadio as well for a year or two, with live streaming interactive performances, but this time I wanted something a bit more automated. I stumbled on a collection of old radio dramas on the Internet Archive and thought that would make the perfect content. I love those old radio…

Respecting GPC and DNT in GTM

I recently wrote about CCPA and other state laws and the need for Global Privacy Control (GPC) support on websites in the US. If you haven’t read it yet, pop over real quick. It’s quick. Today I put together a little sample GTM container that adds in checks for GPC to ensure compliance. While I was in there I also went ahead and added checks for the older Do Not Track (DNT) signal as…

git repo use this key

I learned a new git trick a few weeks ago. I wanted a local git folder to use a specific ssh key to connect to the remote git repository. This particular server is hosting a few different repos and they each have their own relevant deploy key in use. I have those keys in my .ssh folder, but I had been using a horrible hack of setting the git command as a shell environment variable before any git…

CCPA and Don't Sell My Information

Edited from a photo by Joshua Earle on Unsplash The California Consumer Privacy Act (CCPA) is striking some fear into the hearts of website operators in the US in much the same way that GDPR has done for Europe. The law, while not quite as strict, has many of the same familiar elements and restrictions upon data collection and usage. And it isn’t alone. Both Colorado and Connecticut have…

Makefiles for fun and profit

I use a lot of different tech stacks in my day job. When you add in all my hobby projects from the tildeverse to fiction writing, the number of tools and setups is quite silly. Trying to remember how the tools work is a losing battle. Enter Makefiles! Lots of articles have been written about using Makefiles to automate your projects. I’m going to share my personal choices and explain my…

Ruining the internet with ChatGPT

Recipes Recipes Recipes I had a terrible marvelous idea today! As everyone knows, recipe blogs are the absolute worst. You need to scroll through endless faff stories before you can get to the actual recipe, which is all anyone ever wants. Why is this? Well, there are several reasons. The one sited most often is that these stories are necessary for search engine optimization. Having more text…

webfinger shenanigans

It turns out that creating a webfinger response at the .well-known path is really easy! What is webfinger? Well, it’s one of several open source technologies that underly the fediverse. WebFinger is a protocol specified by the Internet Engineering Task Force IETF that allows for discovery of information about people and things identified by a URI. Information about a person might be…

Signing Posts with gpg

Background Recently I had the idea to cryptographically sign my blog posts with gpg. It came to me while I was thinking about various forms of news fakes, whether intentionally misrepresenting news orgs, individuals, or AI generated by the latest round of eldrich horrors we have unleashed. The idea itself is simple: By signing the posts you can add trust to the source. If many people begin to do…

Podcasting Setup

It’s National Novel Writing Month (NaNoWriMo) again. This year I wanted to participate, but do something a little bit different. Last year I branched out from the traditional novel by writing short stories. This time I’ve decided to produce a podcast in real time. Real time podcast The cover image of my podcast What does that mean exactly? Each day I write an episode for the podcast,…

scroll-frame

Today I published my first npm package. That feels weird to say, but I’ve just never bothered contributing back my individual code features into the node ecosystem before. I hope to do more of it soon. This npm package is called @jamestomasino/scroll-frame and it marries the features of requestAnimationFrame with a scroll listener. A common pattern I run into is the desire to run some code…

Contract-Based Dependency Management

Semantic Versioning There are many aspects to dependency hell. Semantic Versioning (SemVer) and other major/minor versioning patterns are an incomplete method for addressing some of these common aspects. With knowledge of version compatibility it is possible to implement the side-by-side installation of multiple versions of a package or library, or manage them on a per application basis. But the…

Light Mode Experiment

I’ve seen a number of articles recently claiming that dark modes and themes are scientifically shown to be worse than light ones. After seeing yet another example come across Lobste.rs I decided it was time to give it a try. I’ve been using a dark terminal since I can remember using a terminal. That’s at least 20 years now. Now that other apps and even desktop environments are…

Freelancing Tools & Services

I was just reading a blog post about a two-person startup using 28 various tools and services, and the costs associated with those. It made me wonder what I am using that’s a product or service of others and what I’m spending on it. Let’s start a list and see. Installable software This first batch of services and software deals with replacements for the typical workflow tools I…

GNU Recutils

Fred and George, Turtles in love There are hundreds of cool command line tools that have been made over the years built on the unix philosophy. Plain text is powerful, ubiquitous, and human-centric. It was also the only option for computing for quite a while. It’s no surprise that some of the most sophisticated tools are focused on it. One such package is GNU Recutils, a set of tools and…

prefers-color-scheme

Color Scheme Options I finally got around to implementing prefers-color-scheme themes on this blog, and my personal one. I really love this new CSS feature and I’ve been trying to take time to implement it everywhere I can. Taking a look at the code for this site we can see that it’s relatively low-effort to make something look good. In my case the “default” theme is light,…

Identity vs. Secrecy

Yet another story has released showing the vulnerability of facial recognition software to relatively simple countermeasures. AI company, Kneron, fooled banks, border controls, and airports with 3D printed masks designed to look like other individuals. They were able to fool security systems and automated payment vendors. The story isn’t unique, and it’s not limited to facial…

Stitchy

During this slow week between Christmas and New Years my wife wanted to crochet a lap blanket for my son. She had picked out a cute image of a sea turtle. I noticed her sitting at the kitchen table with a piece of graph paper taped over the turtle image. She was carefully filling in grid boxes with the colors of her choice, all in preparation for this project. It’s not the first time…

IndieWeb

This blog, and many of my websites, take advantage of some of the microformat features available in the IndieWeb - a system of user-centric services & formats to wrest some identity controls back from the hands of the corporate web. Authentication, commenting, subscriptions, notifications, and more are all made available by wrangling existing microformats and wrapping some services. If you use…

Tilde Black Usernames

On one of my public access unix systems (tilde.black), I offer pseudo-anonymous access under usernames that are generated from the dictionary. I got the idea from CryptoCat’s chat system which drops you into chat with a random dictionary username by default. I wanted to offer something a little different on this system, and that sounded like a nice option. Additionally, since I’m…

Reverse Proxy for VNC

I’m attempting a setup where I can control a mac at the office from my Ubuntu laptop at home. This is complicated by the work network where simple dyndns & port forwarding are not an option. Set up MacOS for Remote Management From work machine: Open Settings -> Sharing. Enable Remote Management. Go to Computer Settings... and enable VNC viewers may control screen with password. Set up a…

Making an animated gif

In my last post I wanted to lead off with a short animation of the 3D printer in action. I had a video I shot on my phone that looked nice, so I downloaded it and started looking at ffmpeg options. Eventually I stitched together a few snippets from others with some critical thinking of my own and came up with this: #!/bin/sh vid=vid.mp4 start_time=00:00:01 duration=3 height=320 # input height…

FlashForge Finder with Cura

I brought my 3D printer with us to Iceland. My rationale was it’s expensive to ship small things here, and so being able to print my own would save us the effort. There was only one small complication. In our old house I had the printer software installed on my Windows PC, since that’s what the bundled software runs on. I didn’t move the Windows machine with us, though.…

Ada

In college I had some brief exposure to the programming language, Ada. At the time I was learning C and it didn’t capture much interest for me. Then a whole bunch of life happened wherein I left computer science and ended up playing in the realm of front-end languages for most of my career. Now as I look into my toolbox of programming skills I see a deficit directly in the spot where Ada…

Referrer tricks

I had a theoretical conversation with a coworker a few months back where I posited that it should be possible to use the HTTP REFERER (sic) header to determine if a link is coming from another site or if it was an internal link between pages. In the later case, we discussed hiding some elements in the site’s header. The strategy behind that is the introductory branding on the website was…

3D Printer

I bought a 3D printer! It’s a FlashForge Finder, a fully pre-assembled personal-use model that is currently Amazon’s Choice and a leader in the reviews. The box arrived on Tuesday and it proved simple to set up. I clipped a few ties, added the spool and fed it through the provided tubing, then I turned it on. After a 5 minute leveling exercise I was up and printing. Subsequent reading…

Moving to Hugo (Part 2)

I’ve been able to secure matching permlinks in hugo to the ones that jekyll was generating. I had done some work in the old system to get rid of unnecessary folder paths and make the canonicals easy to remember. Now we’re doing the same awesomeness here. Thanks to @maiki for his help. There’s apparently a very simple setting I could have added to my config to do this for me, but…

Moving to Hugo

It’s been way too long since I’ve updated my labs blog, and that is sadly for the dumbest of reasons: I broke my jekyll install. Somewhere along the way I mixed things up and my ruby gems were all conflicting with one another. Sure I could have fixed it, but who has the time for that? Instead, I just wrote all my thoughts on gopher where the kewl kids hang.

Ascii Art Alt Text

I had a silly thought this weekend. “I wonder if I could serve the alt text of an image to be ascii art OF that image. Wouldn’t that be amazing?” Well, I don’t know about amazing, but it works. It wasn’t as obvious as I thought at first, though. You can style alt text, that was nothing new. I’ve been doing it in HTML emails for years. I thought I could style the…

Touring my terminal

My configuration: I live in the terminal. Whether I’m at work on my MacBook Air, or at home on my Dell XPS13, I’ve got at least one full screen window that’s all terminal. Here’s a rundown of what I’m using. Where appropriate, I’ve linked to my configuration files. Terminal: st / iterm2 Shell: bash Multiplexer: tmux Editor: vim / neovim Chat: weechat Terminal In…

Comments

I’ve been kicking around an idea that comments–public feedback systems in general–are not helpful to the development of social systems. The scope of my thinking is fairly limited to online media like blogs, social networks, and media sharing, but it may hold some truth beyond the digital boundaries as well. When you read something noteworthy online, what drives you to interact…

Hugo on Mint

I author this labs blog in Jekyll, but my personal blog uses the Hugo static site generator. Jekyll has wonderful plugin support, but it’s incredibly slow. My meager labs blog takes a full minute to compile. Hugo is written in Go and is screaming fast. Thousands of post? BAM compiled in less than a second. It’s all driven by a single binary, too. No external dependencies to worry…

Underlines

We build a lot of websites with superscripts in pharma. Whether it’s a registration mark ® or a superscripted reference number1, getting them to properly underline is a real issue. Usually the underline on the superscript will move up off the baseline. In the past, we’ve solved this by adding a border-bottom to the text instead of an underline, but that will only work on single-line…

Convert Video for Windows PPT

Recently we’ve had a number of client presentations and pitches where my team has wanted to use video in their PowerPoint presentation. I develop on a mac, and so it’s not difficult for me to render something up real quick, whether through screen capturing it myself or some quick video editing work. The problem inevitably comes when I try to deliver a beautiful, high-quality,…

dotfiles

I made a fairly major modification to my dotfiles yesterday when I revisited the structure and installation by leveraging the gnu utility, stow. I was introduced to the idea thanks to my partner in dotfile-crime, Stephen Tudor, who in turn found it off one of his other config-crazy people. In short, stow is designed to take a package of files and symlink them into another directory as if they all…

Mechanical Keyboards

Today I received my first mechanical keyboard, the CM Storm QuickFire Rapid with Cherry MX Blue Switches. I’m typing on it right now and it’s hard to describe the difference I’m feeling. This is how a keyboard should feel. For the past few years I’ve been using the TypeMatrix 2030. It’s a pretty neat idea and had a built in mode switch to the dvorak layout. Dvorak is…

Oops, or, The Great Web Server Borking of 2016

On Thursday, while reading up on HTTP/2 and all the brilliant things it has to offer, I logged into my trusty old web server in an attempt to upgrade Apache and reap the benefits. This wasn’t a big deal in my mind as it was only a small dot version upgrade. So, I switched my tmux session to my server admin view and ran the command: sudo apt-get update && sudo apt-get upgrade apache2 I should…

Time tracker in Bash

Yesterday I put together an extremely basic time tracker on the command line to compliment my other command line function. There’s not much to it, really. The basics can be found in the help: ti - time tracker Tracks activity time with a simple start/stop syntax. Logs to CSV. Tmux session aware. Allows one activity active at a time, per session. usage: ti # show this help usage: ti (--help…

Command Line Fitness Tracker

I’ve been trying to get back on the fitness and healthy eating wagon lately after my last attempt fell apart because of delicious pizza. I keep track of my dietary macros in MyFitnessPal, mainly because of the ease in looking up food. Beyond that one feature I really can’t stand the experience in either the app or the website. When I’m tracking my measurements (weight, waist,…

Disqus in Amp

As a follow up to my previous post where I converted this blog to take advantage of the AMP Project, I’ve finally managed to reintegrate comments. I wasn’t expecting this to be nearly as difficult as it was, but a few barriers quickly popped up. AMP doesn’t allow 3rd party javascript No comments component yet created IFrame support is tricky Ok, so it’s hard. So what?…

AMP

The AMP (Accelerated Mobile Pages) project has been floating around in the periphery for about a year, taunting me. I knew it was supposed to speed up mobile browsing, and it had something to do with articles, but that was the extent of it. I’m spending more and more time at work educating coworkers and clients on mobile best practices, but not knowing AMP was making me feel a little…

Introducing vim

So you want to learn the way of vim? What have you heard? The learning curve is high; you’ll need to type obscure commands just to quit? There is learning ahead, true, but it’s not like that at all. Frankly, you can learn to use vim in 20 minutes with a tutor you already have on your system. Try it out: vimtutor In a week you’ll surpass your speed in your old editor (Disclaimer:…