PowerShell: Advanced Function Parameter Attributes Aug. 4, 2023, 5:13 p.m.

Parameter attributes allow you to control the features/function of a parameter such as making a specific parameter mandatory.


Jenkins Pipelines - Serializing Local Variables June 19, 2023, 9:06 a.m.

Since pipelines must survive Jenkins restarts, the state of the running program is periodically saved to disk so it can be resumed later. The “state” includes the whole control flow including: local variables, positions in loops, and so on. As such: any variable values used in your program should be numbers, strings, or other serializable types. If you must use a nonserializable value temporarily, either:

Discard it before doing anything else:

def matcher = readFile('pom.xml') =~ '<version>(.+)</version>'
if (matcher) {
  echo "Building version ${matcher[0][1]}"
matcher = null

Isolate use of nonserializable state inside a method marked with the annotation @NonCPS:

def version(text) {
  def matcher = text =~ '<version>(.+)</version>'
  matcher ? matcher[0][1] : null

Create custom macOS menu bar apps using Hammerspoon April 26, 2023, 9:47 a.m.

Hammerspoon of course provides a setIcon method on menubar to help us provide an image icon, so we’ll just grab a Slack icon from the web and—whoa, what’s this???

imageData … can be one of the following …
– A string beginning with ASCII: which signifies that the rest of the string is interpreted as a special form of ASCII diagram, which will be rendered to an image and used as the icon.

Ok, drop everything, we’re doing this. Check out this craziness: With simple ASCII character progression, we can define vector art!

tutorial hammerspoon

Systems design explains the world: volume 1 April 17, 2023, 9:53 a.m.

Back in university, students used to tease the Systems Design Engineers, calling it "boxes and arrows" engineering. Not real engineering, you see, since it didn't touch anything tangible, like buildings, motors, hydrochloric acid, or, uh, electrons.

I don't think any of us really understood what boxes-and-arrows engineering really was back then, but luckily for you, now I'm old. Let me tell you some stories.


Folklore.org: The Original Macintosh April 15, 2023, 3:22 p.m.

Anecdotes about the development of Apple's original Macintosh, and the people who made it.

reading apple mac

Squid Web Cache wiki April 15, 2023, 3:21 p.m.

This wiki is dedicated to hosting Squid Web Cache documentation, including the FAQ, KnowledgeBase articles, ConfigExamples, and the development RoadMap

documentation squid

How Exactly Does ProxySettingsPerUser Work? March 17, 2023, 10:45 a.m.

You may occasionally in your career have had a want or need to set Windows proxy settings for every account on a machine regardless of who is logged in. There are a few common ways to do this.

windows proxy

Paul Ford: What Is Code? March 8, 2023, 1:37 p.m.

We are here because the editor of this magazine asked me, “Can you tell me what code is?”

reading interesting interactive

Shoot The F#cking Deer March 3, 2023, 4:33 p.m.

You’re worried that shooting the deer ends the scene. But it’s actually when you cross that threshold where all the creativity is. So many new options open up.


How to recover lost files added to Git but not committed March 3, 2023, 4:32 p.m.

If you lose something [in Git], don't panic. There's a good chance that you can find someone who will be able to hunt it down again.


Git from the Bottom Up March 3, 2023, 4:31 p.m.

Welcome to the world of Git. I hope this document will help to advance your understanding of this powerful content tracking system, and reveal a bit of the simplicity underlying it — however dizzying its array of options may seem from the outside.


Git from the inside out March 3, 2023, 4:31 p.m.

This essay explains how Git works. It assumes you understand Git well enough to use it to version control your projects.


I Will Fucking Dropkick You If You Use That Spreadsheet March 3, 2023, 4:31 p.m.

There are a few things that inspire deep revulsion in me. The episode of Star Trek: Voyager I just watched was pretty gross. I definitely saw some pretty bad roadkill on my daily walks during the Covid lockdowns. But nothing - nothing - comes close to the white hot fury that radiates from me the moment someone suggests plugging a spreadsheet into some sort of automated process.

excel funny

How to check if one dictionary is a subset of another larger dictionary in python Oct. 11, 2022, 2:05 p.m.

Provided your code already has both dictionaries as variables, it's very concise to check for this inline:

if big | small == big:
  # do something

Here is a solution that also properly recurses into lists and sets contained within the dictionary. You can also use this for lists containing dicts etc...

def is_subset(subset, superset):
    if isinstance(subset, dict):
        return all(key in superset and is_subset(val, superset[key]) for key, val in subset.items())

    if isinstance(subset, list) or isinstance(subset, set):
        return all(any(is_subset(subitem, superitem) for superitem in superset) for subitem in subset)

    # assume that subset is a plain value if none of the above match
    return subset == superset

Worse Is Better June 29, 2022, 8:19 a.m.

The concept known as "worse is better" holds that in software making (and perhaps in other arenas as well) it is better to start with a minimal creation and grow it as needed. Christopher Alexander might call this "piecemeal growth." This is the story of the evolution of that concept.

development reading

The Grug Brained Developer June 29, 2022, 8:19 a.m.

A layman's guide to thinking like the self-aware smol brained developer.

development reading programming

systemd by example - the systemd playground Jan. 27, 2022, 11:32 a.m.

The playground allows you to learn about systemd interactively, right from your browser! Create examples without the danger of breaking your system, and without being distracted by hundreds of unrelated unit files.

tutorial linux

Security identifiers (Windows 10) - Windows security Nov. 8, 2021, 10:04 a.m.

A security identifier (SID) is used to uniquely identify a security principal or security group. Security principals can represent any entity that can be authenticated by the operating system, such as a user account, a computer account, or a thread or process that runs in the security context of a user or computer account.

security windows

Well-known SIDs Nov. 8, 2021, 10:03 a.m.

Well-known security identifiers (SIDs) identify generic groups and generic users. There are universal well-known SIDs, which are meaningful on all secure systems using this security model, and well-known SIDs that are meaningful only on Windows systems.

security windows

User Rights Assignment (Windows 10) - Windows security Nov. 8, 2021, 10:02 a.m.

Provides an overview and links to information about the User Rights Assignment security policy settings user rights that are available in Windows. User rights govern the methods by which a user can log on to a system. User rights are applied at the local device level, and they allow users to perform tasks on a device or in a domain. User rights include logon rights and permissions. Logon rights control who is authorized to log on to a device and how they can log on. User rights permissions control access to computer and domain resources, and they can override permissions that have been set on specific objects.

security windows