<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mark Percival</title><link>http://mdp.github.io/</link><description>Recent content on Mark Percival</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 17 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://mdp.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>The kids are alright (and they'll probably still learn regex)</title><link>http://mdp.github.io/2026/03/17/the-kids-are-alright-and-theyll-probably-still-learn-regex.html</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2026/03/17/the-kids-are-alright-and-theyll-probably-still-learn-regex.html</guid><description>TL;DR: You should still learn regex (and other things), but I really just wanted an excuse to vibe code
Regex Blaster
Just because AI coding is doing all the heavy lifting on the boring stuff, that doesn&amp;rsquo;t mean we should stop learning how all these pieces fit together. Having a deep understanding of the system, languages and frameworks you interact with daily might not be a requirement anymore, but there&amp;rsquo;s still value in having a mental model of how it all works in your head.</description></item><item><title>Experience vs Innovation: Breaking Down the AI Coding Divide</title><link>http://mdp.github.io/2025/01/20/experience-vs-innovation-breaking-down-the-ai-coding-divide.html</link><pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2025/01/20/experience-vs-innovation-breaking-down-the-ai-coding-divide.html</guid><description>AI hype is very much in effect in the business world, but ironically any time a new technology comes along it&amp;rsquo;s often developers that harbor the most cynicism.
And this isn&amp;rsquo;t new, it&amp;rsquo;s actually the learned response of most engineers, especially the experienced ones. The old guard questioned Linux and open source, spent countless hours harping on how the cloud was an overpriced joke, and thought JavaScript on the server would never take off.</description></item><item><title>The Developer-Driven Success of Open Source</title><link>http://mdp.github.io/2024/09/13/the-developer-driven-success-of-open-source.html</link><pubDate>Fri, 13 Sep 2024 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2024/09/13/the-developer-driven-success-of-open-source.html</guid><description>Although the idea of open source software has been around since the 1950&amp;rsquo;s, it wasn&amp;rsquo;t until 1992 when Linus Torvalds licensed Linux under the General Public License and that the modern era of open source began. Linux&amp;rsquo;s rise to domination was slow and steady (And once prompted Steve Ballmer to label open source a cancer), eventually leading it to dominate nearly every back-end system on the internet. Open source software now powers the vast majority of the services we use, from servers and databases to the Chrome laptops found in most classrooms.</description></item><item><title>Passkeys are a disaster, but One Time Passwords are worse</title><link>http://mdp.github.io/2024/05/24/passkeys-are-a-disaster-but-one-time-passwords-are-worse.html</link><pubDate>Fri, 24 May 2024 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2024/05/24/passkeys-are-a-disaster-but-one-time-passwords-are-worse.html</guid><description/></item><item><title>Docker and Cgroups (Or how to avoid runaway CPU on limited systems)</title><link>http://mdp.github.io/2024/03/22/docker-and-cgroups-or-how-to-avoid-runaway-cpu-on-limited-systems.html</link><pubDate>Fri, 22 Mar 2024 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2024/03/22/docker-and-cgroups-or-how-to-avoid-runaway-cpu-on-limited-systems.html</guid><description>I prefer to develop on remote systems, especially now with VSCode&amp;rsquo;s ability to work on remote machines. And most of the time I&amp;rsquo;m working within a container, like Docker.
The only issue I occasionally run into is the tendency for a larger project to peg the CPU when a bunch of operations are going on. This results in a serious performance penalty for the system I&amp;rsquo;m on, in some cases even locking up the ability to SSH into the machine until the system terminates the run away process.</description></item><item><title>Just push to github (or how I stopped using personal access tokens)</title><link>http://mdp.github.io/2022/03/15/just-push-to-github-or-how-i-stopped-using-personal-access-tokens.html</link><pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2022/03/15/just-push-to-github-or-how-i-stopped-using-personal-access-tokens.html</guid><description>Github pages has long felt like a bit of an orphan product at Github, but it&amp;rsquo;s still a useful one, and one that I find myself using for a variety of reasons (documentation, static demo pages).
Before Github actions became a thing, it was quite a chore to get something up on Github pages from a CI system like Travis. Usually you either needed to create a deploy key or use a personal access token.</description></item><item><title>Encryption is not authentication</title><link>http://mdp.github.io/2021/06/28/encryption-is-not-authentication.html</link><pubDate>Mon, 28 Jun 2021 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2021/06/28/encryption-is-not-authentication.html</guid><description/></item><item><title>Encryption isn't going to solve your RPA security issues</title><link>http://mdp.github.io/2021/02/23/encryption-isnt-going-to-solve-your-rpa-security-issues.html</link><pubDate>Tue, 23 Feb 2021 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2021/02/23/encryption-isnt-going-to-solve-your-rpa-security-issues.html</guid><description/></item><item><title>You’re terrible at hiring — A startup’s guide to interviewing engineers</title><link>http://mdp.github.io/2019/04/24/youre-terrible-at-hiring.html</link><pubDate>Wed, 24 Apr 2019 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2019/04/24/youre-terrible-at-hiring.html</guid><description>You’re terrible at hiring — A startup’s guide to interviewing engineers I frequently get asked by startups for help hiring engineers. Everyone wants a quick solution, but the problem with hiring humans is that they’re human. Studies also show that we’re terrible at picking the best candidate. Rather than throwing our hands in the air and hoping for the best, it’s even more important to have a process and to understand what it can and can’t do.</description></item><item><title>Quick and dirty developer guide to U2F</title><link>http://mdp.github.io/2017/12/12/quick-overview-of-u2f.html</link><pubDate>Tue, 12 Dec 2017 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2017/12/12/quick-overview-of-u2f.html</guid><description>Quick and dirty developer guide to U2F I recently had the chance to implement U2F authentication in a small side project. During the process, I learned a lot about both the protocol and the current state of U2F documentation, or lack thereof. I hope that if you’re in the same place I was, this will get you up to speed more quickly than the other guides available.
If you learn better with hands on examples (and you’ve got a U2F key), head over to my U2F Demo and play around with it there.</description></item><item><title>Prototyping in the age of NoSQL</title><link>http://mdp.github.io/2017/10/29/prototyping-in-the-age-of-nosql.html</link><pubDate>Sun, 29 Oct 2017 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2017/10/29/prototyping-in-the-age-of-nosql.html</guid><description>Prototyping in the age of NoSQL TLDR; I love Firebase, but their database offering leaves a lot to be desired when you’re in the early stages of prototyping a new application.
I’ve recently been exploring Firebase and while I love the ability to quickly get a project up and running, it’s data storage layer leaves a lot to be desired at the prototype stage of a new project.
I’m not going to argue that non-relational data stores are ‘wrong’ or should be ‘considered harmful’.</description></item><item><title>CSP in Express.js</title><link>http://mdp.github.io/2015/10/13/csp-in-express-js-node.html</link><pubDate>Tue, 13 Oct 2015 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2015/10/13/csp-in-express-js-node.html</guid><description>CSP in Express.js / Node This is pretty straightforward, but here’s how I implement CSP in an Express middleware layer.
A few notes:
CSP statements like `self` and `unsafe-eval`need to include the single quotes in the header, so you’ll need to escape them. `connect-src` are your websocket endpoints You can whitelist an entire schema (eg. ‘https’), which is also a great way of prevent mixed content warnings, even if you don’t want to explicitly secure all the resources (For example in ‘styles’)</description></item><item><title>Tracking the mail with a $29.99 phone</title><link>http://mdp.github.io/2014/08/17/how-it-got-here.html</link><pubDate>Sun, 17 Aug 2014 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2014/08/17/how-it-got-here.html</guid><description>Tracking the mail with a $29.99 phone Let me frank, I buy a lot of stupid stuff from the Internet. And like most people, I obsess over where it is and when it will I’ll have it in my hands. But even with today’s ubiquitous package tracking, all I really get is a list of places my package visited as it made it’s way to my doorstep. For example, I may know that it stopped in Sacramento, but I’m still left wondering what it did between there and where it originated from.</description></item><item><title>HTTPS Done Correctly</title><link>http://mdp.github.io/2013/06/25/https-done-correctly.html</link><pubDate>Tue, 25 Jun 2013 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2013/06/25/https-done-correctly.html</guid><description/></item><item><title>Tumblr's shoehorned JS watches for dirty tricks</title><link>http://mdp.github.io/2013/06/09/tumblrs-js-is-watching-what-you-type.html</link><pubDate>Sun, 09 Jun 2013 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2013/06/09/tumblrs-js-is-watching-what-you-type.html</guid><description>I stumbled across this the other day on Tumblr. One of the issues with letting people render any HTML they want on your domain is that nefarious users can render a password field on an official looking page and capture the input from the victim.
Tumblr seems to have come up strategy to try and prevent tricked users from entering their passwords.
View the source and you&amp;rsquo;ll see that they inject the following JS on the top of every page load before the &amp;lt;html&amp;gt; tag.</description></item><item><title>Hacking HTTPS -> HTTP referrers</title><link>http://mdp.github.io/2013/05/28/hacking-https-http-referrers.html</link><pubDate>Tue, 28 May 2013 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2013/05/28/hacking-https-http-referrers.html</guid><description>There was an interesting article today on HTML5’s solution to solving the missing referrers problem in HTTPS -&amp;gt; HTTP transitions. But I thought I’d describe how Twitter’s t.co ‘fixed’ the problem.
Background The root of this problem is that when you click any HTTP link on an HTTPS hosted page the browser will strip any referrer info.
HTML5 is now allowing you to rectify this with a ‘meta’ tag to inform the browser that your HTTPS page outbound traffic is allowed to carry the referrer information to HTTP sites.</description></item><item><title>curl directly to a gist</title><link>http://mdp.github.io/2013/04/02/curl-directly-to-a-gist.html</link><pubDate>Tue, 02 Apr 2013 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2013/04/02/curl-directly-to-a-gist.html</guid><description>I was messing with my Raspberry Pi via ssh tonight and wanted to quickly stash a file to gist.github.com.
One option, I can install the command line gist tool.
But wouldn’t it be nice if you could just curl the content of the file directly to Gist
$ curl --data-binary @README.md http://cist.herokuapp.com/read.md #&amp;gt; https://gist.github.com/32d1b11087f326a9653f Much better. If you want to run your own curl to gist bridge, see the code at https://github.</description></item><item><title>Evernote doesn't really care about security</title><link>http://mdp.github.io/2013/03/02/evernote-doesnt-really-care-about-security.html</link><pubDate>Sat, 02 Mar 2013 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2013/03/02/evernote-doesnt-really-care-about-security.html</guid><description>So Evernote got hacked. Suprised? I&amp;#8217;m not.
First off, let me quickly note that I actually use Evernote on a daily basis and like the product very much. It&amp;#8217;s great for taking notes and stashing the digital cruft I inevitably accumulate; email receipts, travel confirmations, snippets of articles, all go into my Evernote account. I even hacked up a script to send my Github Gists into Evernote so I can search them more easily.</description></item><item><title>Reworked my Gist importer for Evernote</title><link>http://mdp.github.io/2013/02/24/reworked-my-gist-importer-for-evernote.html</link><pubDate>Sun, 24 Feb 2013 00:00:00 +0000</pubDate><guid>http://mdp.github.io/2013/02/24/reworked-my-gist-importer-for-evernote.html</guid><description>Reworked my Gist importer for EvernoteIf your looking to import your Github gists into Evernote and make them searchable, this is your starting point.
The code is quite brittle, but it does the job, as I&amp;#8217;ve been running it for around a year. Not something I&amp;#8217;m looking to spend much time on, but feel free to run with it on your own; it&amp;#8217;s MIT licensed and such.
Find out more at: https://github.</description></item></channel></rss>