It’s unusual, but my favorite part of blogging is coming up with the most boring and anti–clickbait titles possible. In another life, I’d be an undercover agent.
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
Most software, framework, and programming debates online reduce to disputes over company or personal preferences — mindshare. Technical and architectural debates are rare — those fights are the most interesting because that’s the important part, at least .
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
cgit is good. I’ve added
a small note
on using git maintenance with
cgit.
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
I’ve noticed that attacks are becoming commonplace on my domain hosting provider’s name servers (Porkbun).
Looks like they’ve migrated over to Cloudflare to remedy the situation, but the migration was wonky.
In the end, having full programmatic control over dns records, transfers, and
zones is priceless. So… with a few glue records and zone files — my
dns is now back under my control with
bind.
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
Kiwi Browser (download) is a Chromium
derivative on Android that can directly expose the built–in dev tools on device.
Remote debugging
is my preference, but it makes quick
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
I’ve returned from the depths of The Fediverse
with a
I’ll play around with this stolen idea for a bit. Audio reactions
might also be another idea worth exploring.
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
WordPress has
an affinity for back–doored radioactivity.
If I can get my way (which is hard), a WordPress install has only 1 theme and
0 plugins.
wordpress/
|-- public
`-- wp-config.php/* Disable installing plugins and themes */
define('DISALLOW_FILE_MODS', true);
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
There’s an old article from the developer of NetNewsWire ( reader) that questions the idea of the unread count. You can’t read all the unread — so why entertain a time consuming mythos around that number?
It applies everywhere — What narratives might people create around the
programming language % numbers on GitHub? Do they waste
time thinking/fretting about their mythos? Fun to think about.
Index: Cache · Source
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
My puppeteer scripts now use deno.
Nothing to disclose.
No more need for npm in my personal stack! The native
browser’s path comes from which.
import puppeteer from "https://deno.land/x/puppeteer@16.2.0/mod.ts";
const chrome = "chromium"; // Browser Chrome: "firefox" | "chromium" | "google-chrome" | ...
const product = "chrome"; // Product Base: "firefox" | "chrome"
const command = new Deno.Command("which", { args: [chrome] });
const { status, stdout, stderr } = command.outputSync();
const executablePath = new TextDecoder().decode(stdout).trim();
const browser = await puppeteer.launch({
headless: false,
executablePath: executablePath,
product: product,
});
const site = "example.com";
const page = await browser.newPage();
await page.setViewport({ width: 1024, height: 768 });
await page.goto("https://" + site);
await page.screenshot({ path: site + ".png" });
await page.waitForSelector('a');
const url = await page.evaluate(() => {
return document.querySelector('a').href;
});
console.log(url);
await browser.close();deno run --allow-all main.ts
Another wandering soul whispering into the void. If you are looking for my blog you are in the wrong place. The profile and header pictures are brought to you by cdd20.
The best articles on are from about
15 years ago. In hindsight, RSS was probably thrown away by influential
companies and technologists because it was too hard to monetize. The great thing
about RSS though is that the spec can be explained to a non–programmer in about
an hour — that’s probably why it’s hard to kill.