Skip to content

Instantly share code, notes, and snippets.

View michaelsbradleyjr's full-sized avatar
💭
Dip trip, flip fantasia 🎺

Michael Bradley michaelsbradleyjr

💭
Dip trip, flip fantasia 🎺
View GitHub Profile
// runs as expected with Node v22.1.0, [email protected], [email protected]
// $ npm install ix rxjs
/* global require setTimeout */
// Rx
const {Subject} = require('rxjs');
const {tap: rxTap} = require('rxjs/operators');
// Ix

@["0x103cb8a08@[118, 116, 127, 127, 123, 225, 221, 123, 222, 127, 126, 69, 131, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225]\n", "0x103cb8a68@[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n", "0x103cb8ac8@[118, 116, 127, 127, 123, 225, 221, 123, 222, 127, 126, 142, 220, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225]\n", "0x103cb8b28@[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

@["0x103cae228@[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 48, 49, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32]\n", "0x103cae288@[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 48, 50, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32]\n", "0x103cae2e8@[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 48, 51, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32]\n", "0x103cae348@[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 48, 52, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32

@michaelsbradleyjr
michaelsbradleyjr / otool.txt
Created February 8, 2022 16:47
comparing otool -L output for macports libunistring and libdeflate
$ cd /opt/local/lib
$ otool -L libunistring.2.dylib
libunistring.2.dylib:
/opt/local/lib/libunistring.2.dylib (compatibility version 5.0.0, current version 5.0.0)
/opt/local/lib/libiconv.2.dylib (compatibility version 9.0.0, current version 9.1.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1853.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.0.0)
$ otool -L libdeflate.0.dylib
when (NimMajor, NimMinor, NimPatch) >= (1, 4, 0):
{.push raises:[].}
else:
{.push raises: [Defect].}
import chronos except `?`
import stew/results except `?`
export chronos except `?`
export results except `?`
@michaelsbradleyjr
michaelsbradleyjr / ext-ip.sh
Last active January 10, 2022 20:29
geth.service
#!/usr/bin/env bash
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}'

I wanted to share my "first big macro" in Nim (and it actually works, but still cleaning some things ups); has been an interesting experience:

https://github.com/status-im/nim-status/blob/feat/examples/client/examples/chat/task_runner/macros.nim

Some helpful things I learned, in case you need/want to write your own Nim macros:

When you've got a macro where you're passing in a body: untyped (usually the last param, and not necessarily called "body" but that's common), you can print it to the screen in the compile-time output with e.g.

echo()
echo(treeRepr body)
import os, threadpool
type
ThreadSafeString* = distinct cstring
proc safe*(input: string): ThreadSafeString =
var res = cast[cstring](allocShared(input.len + 1))
copyMem(res, input.cstring, input.len)
res[input.len] = '\0'
res.ThreadSafeString
import os, stew/faux_closures, threadpool
type
MyString* = distinct cstring
proc mine*(input: string): MyString =
input.cstring.MyString
proc `$`*(input: MyString): string =
$(input.cstring)
import os, stew/faux_closures, threadpool
type
Sob = ref object
key: int
type
Rob = ref object
sub: Sob