Font-independent pixel-perfect negative CSS text-indent values

There’s no need to guess the number of negative pixels for a text-indent to create a list item marker or hanging punctuation. Use this CSS technique instead! | Continue reading


@ctrl.blog | 2 years ago

Get rid of the annoying Safari notification ads in macOS (2014)

Apple wants you to use Safari real bad and send aggressive marketing notifications if you’re using a third-party web browser. | Continue reading


@ctrl.blog | 2 years ago

Opera Unite tried decentral­izing the web ten years ago

A decade ago, the Opera web browser shipped a virtual fridge and a built-in web server right inside its web browser. Why did it fail to decentralize the web? | Continue reading


@ctrl.blog | 2 years ago

Windows 11 blocks Edge browser competitors from opening links

Microsoft doubles-down on its user-choice hostile web browser behavior; blocks competitors from opening links from many Windows apps and web experiences. | Continue reading


@ctrl.blog | 2 years ago

I was terrified of an eyeball injection

I needed medication to preserve my sight, and it had to be injected directly into my eyeball. It’s a real thing and not just something they do in horror films. | Continue reading


@ctrl.blog | 2 years ago

The HTML video element needs to go back on the drawing board

The HTML standard doesn’t provide web authors the tools required to embed small video files in a screen and bandwidth responsive way. This needs to change. | Continue reading


@ctrl.blog | 2 years ago

How to limit Samsung Customization Service data collection

Android Customization Service provides some extra features in exchange for your personal information. However, you can minimize the data it shares with Samsung. | Continue reading


@ctrl.blog | 2 years ago

Improving the New York Times’ line wrap balancer

Web browsers don’t yet support (text-wrap: balance). Adobe and the NYTimes have offer free JavaScript alternatives. I improved the latter to suit my needs. | Continue reading


@ctrl.blog | 2 years ago

Brave and Firefox to intercept links that force-open in Microsoft Edge

Brave and Firefox implement support for the microsoft-edge: URL scheme. Brave to hijack Bing search links. Plus, the history of all this anti-competitive crap. | Continue reading


@ctrl.blog | 2 years ago

Brave reduces the page load performance cost of its adblocker

The Brave browser has significantly cut the page load time overhead of its adblocker. Brave loaded pages slower than competing browsers without adblockers. | Continue reading


@ctrl.blog | 2 years ago

Why can an ad break the Windows 11 desktop and taskbar?

A new promo message for Microsoft Teams broke the Windows desktop shell and the taskbar for Windows 11 Insider users. Why can cloud services break Windows PCs? | Continue reading


@ctrl.blog | 2 years ago

What domain name to use for your home network

Always use the ‘.home.arpa’ top-level domain (RFC 8375,) and don’t use the special-purpose ‘.local,’ or made-up undelegated domain names like ‘.lan’ or ‘.home.’ | Continue reading


@ctrl.blog | 2 years ago

Google’s unfair performance advantage in Chrome

Google Chrome for Android gives Google Search (when set as the default search engine) a network performance-boost over competing search engines. | Continue reading


@ctrl.blog | 2 years ago

Get Windows 10 to respect your default browser setting instead of MS Edge

EdgeDeflector stops Windows 10 from forces-opening links in Microsoft Edge, and makes Windows respect the system-wide default web browser setting instead. | Continue reading


@ctrl.blog | 2 years ago

A deeper dive into Chrome WebFeed

Google hasn’t turned Chrome into a feed reader, but it does use Atom and RSS feeds to let visitors follow any website. Here are more details on how it works. | Continue reading


@ctrl.blog | 2 years ago

How to stop Bing ranking XML feeds over your webpages

Bing preferred XML and machine-readable file formats over human-readable ones in its search results. How link canonicalization helped rectify the situation. | Continue reading


@ctrl.blog | 2 years ago

Why Firefox for Android logs you out of everything all the time

Firefox for Android “forgets” to send SameSite=Strict cookies to websites, causing them to log you out and forgot you ever visited them in the past. | Continue reading


@ctrl.blog | 3 years ago

Rollerblade wheels are a great upgrade for your office chair

Rollerblade-style wheels don’t resist movement and help you stay slightly less inactive while spending hours in your office chair. | Continue reading


@ctrl.blog | 3 years ago

The predictable problems with the Vulnonym naming scheme

An automated naming scheme intended to rid the security research field of “sensational names” predictably creates sensational, ambiguous, and suggestive names. | Continue reading


@ctrl.blog | 3 years ago

TeamViewer RPM repo left door open for malicious packages

A configuration error made the TeamViewer RPM repository vulnerable to an attacker-in-the-middle substituting TeamViewer with its own GPG keys and software. | Continue reading


@ctrl.blog | 3 years ago

Intel: Replace thermal compound “every few years”

Your computer’s thermal compound (paste/grease) is slowly displaced by the “push-out” effect. It must be replaced periodically to maintain high performance. | Continue reading


@ctrl.blog | 3 years ago

Twitter Preconnects to the Wrong Domains

Twitter tried to reduce load times for external links, but made things slower instead. It mistakenly normalizes domain to a point where they’re no longer useful. | Continue reading


@ctrl.blog | 3 years ago

How to take back control of /etc./resolv.conf on Linux

Take manual control of your Linux system’s DNS resolution and keep programs from interfering with and overwriting your resolv.conf file. | Continue reading


@ctrl.blog | 3 years ago

Win “Active Hours” underscores how you’re not in control of your devices (2016)

Microsoft insists on rebooting your PC every day. Active Hours control gives users up to eight hours a day without reboots. Is this enough? | Continue reading


@ctrl.blog | 3 years ago

Fix Linux not suspending on low battery level and prolong your battery life

How to troubleshot and fix issues with laptops not suspending on critically under low battery conditions. As a bonus, learn how to prolong your battery life. | Continue reading


@ctrl.blog | 3 years ago

Review of Firefox “Fenix” for Android

The new Firefox version for Android comes with big changes under the hood, but also drops support for thousands of extensions, and is less configurable. | Continue reading


@ctrl.blog | 3 years ago

The hoops I jump through to be an Amazon customer in Norway

I browse for items on Amazon UK, ordered through Amazon Germany, items get shipped from the UK through Denmark, and somehow still arrive in Norway in two days. | Continue reading


@ctrl.blog | 3 years ago

Comparing AVIF vs. WebP file sizes at the same DSSIM

I got impressive results when comparing AVIF and WebP images at the same visual quality (using DSSIM). AVIF’s 85th percentile was the same as WebP’s 15th! | Continue reading


@ctrl.blog | 3 years ago

Enable the sharp YUV option for better WebP images

Batch encoding images into WebP? Enable Sharp YUV for higher visual quality results at only a tiny increase in file sizes at a one-time cost to processor time. | Continue reading


@ctrl.blog | 3 years ago

How to block web browser-based localhost port-scans

Websites are port-scanning your localhost. Here’s how to stop random websites from knowing what services are running on your device. | Continue reading


@ctrl.blog | 3 years ago

Embed XMP sidecars into image files with embed_xmp

I made a new program for embedding XMP sidecar files (.xmp/.xml) into JPEG, PNG, SVG, and WebP image files. | Continue reading


@ctrl.blog | 3 years ago

Everything you need to know about Night mode in Samsung Internet

Night mode in Samsung browser explained. How it breaks page contrast and accessibility, pastelify SVG colors, and why web developers can’t do anything about it. | Continue reading


@ctrl.blog | 3 years ago

How I recovered a lost email from my email client’s memory

A bug caused 30 minutes of work on an email to disappear. However, I was able to recover it by poking around in the process memory using gdb/gcore. Here’s how. | Continue reading


@ctrl.blog | 4 years ago

New font with Unicode-compatible Creative Commons license symbols

Unicode 13 introduced new Creative Commons license symbols. Here’s a small font with just the new characters so you can use them on your computer or website. | Continue reading


@ctrl.blog | 4 years ago

Yahoo, AOL, OneSearch results biased in favor of parent co Verizon’s websites

Verizon Media’s search engines promises “unbiased” search results, but serves results clearly favoring the parent company’s media websites. | Continue reading


@ctrl.blog | 4 years ago

Inconsistent user-experiences with native lazy-loading images

The various web browsers focus on different priorities and user experience trade-offs in their lazy-loading image implementations. | Continue reading


@ctrl.blog | 4 years ago

How to back up your password manager

Plan for the day your password manager stops working. Backing up your password manager is harder that it sounds. | Continue reading


@ctrl.blog | 4 years ago

Limit the impact of a security intrusion with systemd security directives

OpenSMTPD recently had a critical remote code execution vulnerability. I look at how you can limit impact with systemd-service security directives. | Continue reading


@ctrl.blog | 4 years ago

How to format code blocks for narrow screens

You can’t fit 80 cpl. of preformatted code onto a narrow mobile screen. Here are three tips on how to make your code fit without horizontal scrolling. | Continue reading


@ctrl.blog | 4 years ago

Firefox Contained in Flatpak vs. Snap Comparison

A comparison of features, security, performance, and limitations of Firefox browser running in isolated sandboxes provided by Flatpak vs. Snap. | Continue reading


@ctrl.blog | 4 years ago

Break up the YouTube Premium bundle and give me ad-free only

YouTube should focus on its primary asset: its creators. Give them the money and viewers an ad-free experience. Unbundle YouTube Premium. | Continue reading


@ctrl.blog | 4 years ago

I developed my own email newsletter system

I wasn’t happy with MailChimp, and phpList didn’t do a good-enough job. So I developed my own automated RSS-to-email newsletter system instead. | Continue reading


@ctrl.blog | 4 years ago

When to Use Preconnect

I’ve explored a number of web browser quirks with and compare it to rel="preconnect". | Continue reading


@ctrl.blog | 4 years ago

Risks with renting your home PC to FluidStack for “up to $50/month”

Your ISP and internet services may not be happy with you if you rent our your PC and IP through FluidStack. An effortless $50/month sure is tempting, though. | Continue reading


@ctrl.blog | 4 years ago

Why pay for Grammarly when you’re the one doing the work?

You’re the one paying for Grammarly. However, you’re also the one spending your time training and improving its machine-learning algorithm. Is that okay? | Continue reading


@ctrl.blog | 4 years ago

Google shouldn’t be the only source of interest-based recommendations

How do you keep up with all the new webpages talking about your favorite niche interests? There are few options but Google Discover. | Continue reading


@ctrl.blog | 4 years ago

Ctrl blog was unavailable in Bing Search for a month

You wouldn’t have been able to discover any published pages on Ctrl blog with Bing in September. I can only speculate as to what I did to offend Bing. | Continue reading


@ctrl.blog | 4 years ago

Mitigate “tabnabbing” without breaking window.open() features

New windows opened from your website can redirect the opener tab to a new destination. Applying mitigations break window.open() functionality like sizing and positioning in Google Chrome. | Continue reading


@ctrl.blog | 4 years ago