Skip to content

Instantly share code, notes, and snippets.

View jbrzozoski's full-sized avatar

jbrzozoski

View GitHub Profile
@jbrzozoski
jbrzozoski / json2yaml
Last active January 12, 2024 20:43
Minimal JSON-to-YAML converter with smarter multi-line handling
#!/usr/bin/env python3
"""
Convert a JSON file to a YAML file
"""
import sys
import json
import ruamel.yaml as yaml
@jbrzozoski
jbrzozoski / view_textconv
Last active February 27, 2023 20:09
Script to use as a textconv tool for Ignition view.json files under git
#!/usr/bin/env python3
"""
Utility script to help diff/log Perspective view.json files under git.
The git "textconv" feature is intended to convert binary files to a
rough text approximation, so that viewing diffs or logs of those files
will provide an idea of what changed. This script can be used as a
textconv on Ignition Perspective view.json files to extract JSON-encoded
script blocks into something that almost resembles proper Python
@jbrzozoski
jbrzozoski / git-lt
Last active January 6, 2022 14:56
Script to list annotated tags on the CLI with git in a nicely formatted manner
#!/bin/bash
# Get all the annotated tag references
refs=$(git for-each-ref --format="%(if:equals=tag)%(objecttype)%(then)%(refname:short)%(end)" refs/tags)
# Review those to find the longest reference name
refs_as_list=(${refs})
let longest_ref=0
for i in "${refs_as_list[@]}"
do
#!/usr/bin/env python3
from functools import lru_cache
@lru_cache(maxsize=1024)
def combinations(beads, low_points):
if low_points == 1:
return 1
return sum(combinations(n, (low_points - 1)) for n in range(0, (beads + 1)))

This is ultra-low-priority junk I had stuck in my head last night, and I figured writing it all down might be the best way to stop thinking about it.

One of the issues with Sparkplug B is support for systems with multiple application nodes. Specifically, in terms of coordinating BIRTH messages.

These thoughts are not compatible with Sparkplug B, but are still interesting, possibly for a future generation... I'm trying to think them through before badgering people on the committee with them.

I'm contemplating what happens if you split the variable and non-variable portions of the NBIRTH into two messages, publishing the non-variant portion persistently, and using the LWT to both announce the node has gone offline and clear the persistent publish.

Let's call the new persistent topic NSCHEMA.

RegEdit tweaks circa Win10 22H2:
- Set RTC to UTC (if dual-booting Linux)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
DWORD RealTimeIsUniversal = 1
(may act flaky if you don't disable auto-timezone and auto-sync first, although it sometimes seems
okay to turn them back on after rebooting with this setting in place?)
- Disable Cortana
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Windows Search
# Regeneratable SlickEdit Files
*.vtg
*.vpwhist
*.vpwhistu
@jbrzozoski
jbrzozoski / linux_gitconfig
Created January 28, 2021 18:36
My gitconfig template to make setting up new linux machines a little quicker
[user]
name = Set Name
email = set.email@example.com
[branch]
autosetuprebase = always
[core]
autocrlf = input
editor = nano
excludesfile = ~/.gitignore
[branch]
@jbrzozoski
jbrzozoski / ignition_mqtt_subdevices.py
Created June 3, 2020 21:17
Scriptable way to find MQTT/SparkPlug sub-devices in Ignition since MQTT Engine doesn't provide a list
def findDevicesBelow(path, maxdepth):
browse_results = system.tag.browse(path, {})
for item in browse_results.getResults():
if item['name'] == 'Device Info':
device_reference = str(item['fullPath']).replace('[MQTT Engine]Edge Nodes/','').replace('/Device Info','')
print(device_reference)
if (item['hasChildren'] == True) and (maxdepth > 0):
findDevicesBelow(item['fullPath'], (maxdepth-1))
# Searching everyone:
@jbrzozoski
jbrzozoski / smarter_c_array.c
Created March 11, 2020 15:33
Example of indexed array declarations in c
#define ERROR_ALPHA 1
#define ERROR_BETA 4
#define ERROR_GAMMA 3
#define ERROR_DELTA 2
static const char *const strerr[] = {
[ERROR_ALPHA] = "Error Alpha",
[ERROR_BETA] = "Error Beta",
[ERROR_GAMMA] = "Error Gamma",
[ERROR_DELTA] = "Error Delta",