Skip to content

Instantly share code, notes, and snippets.

View notriddle's full-sized avatar

Michael Howell notriddle

View GitHub Profile
@notriddle
notriddle / README.md
Last active May 6, 2023 08:24
The hub workflow

How to use hub's PAT for user accounts

$ git config --global hub.protocol https
$ cat ~/.config/hub
github.com:
- user: notriddle
  oauth_token: [CENSORED]
  protocol: https
$ cat > ~/.netrc
// https://rust-lang.org/
use std::ffi::CStr;
use std::os::raw::{c_char, c_int};
use std::slice;
use lua_sys::lua_State;
unsafe extern "C" fn runargs(l: *mut lua_State, argv: *mut *mut c_char, n: c_int) -> c_int {
// slices can use normal [] access, while pointers have to use the .offset method
// so convert the pointer to a slice, because otherwise this'll be 99% .offset(i).deref().offset(0).deref()
let args = &slice::from_raw_parts(argv, n)[1..];
let mut iter = args.iter().cloned().map(CStr::from_ptr);

This is the rough implementation plan:

pick 9ae5db20d2 introduce Universe struct

We want this. =)

pick 1da0b70c57 introduce UniverseIndex into ParamEnv

Instead of adding a universe to the ParamEnv, the plan is now to add this field to the InferenceCtxt. It represents the maxixum

@notriddle
notriddle / test-harness.rs
Last active December 10, 2018 19:18
Tests the old vs the new Windows argument parser for Rust, to ensure identical behavior
use std::collections::VecDeque;
use std::ffi::OsString;
use std::os::windows::ffi::OsStringExt;
use std::slice;
use std::iter;
use std::ptr;
/// Implements the Windows command-line argument parsing algorithm, described at
/// <https://docs.microsoft.com/en-us/previous-versions//17w5ykft(v=vs.85)>.
///
@notriddle
notriddle / latency.txt
Created April 26, 2019 22:31 — forked from jboner/latency.txt
Latency Numbers Every Programmer Should Know
Latency Comparison Numbers (~2012)
----------------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 3,000 ns 3 us
Send 1K bytes over 1 Gbps network 10,000 ns 10 us
Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
@notriddle
notriddle / notriddle-rust-2020.md
Last active October 31, 2019 20:13
@notriddle's Rust 2020 wishlist, or, Rust 2021: Integration

@notriddle's Rust 2020 wishlist

or, Rust 2021: Integration

This is just a brain dump. Doing all of this is not going to happen, but all of it is stuff I know of that impacts Rust's integration with the rest of the world and eventually becoming Too Big To Fail like C++ is.

Better resources outside the Rust core team's reach

  1. Improved support for vendored, external, and non-crates.io crates. Some of it is just a matter of documenting the workarounds to allow cargo to use local git repositories in place of networked ones. Some of it is providing official, documented registry software.
  2. Improved support for third-party discussion and documentation platforms. I love Users and Internals, and I can deal with Discord, but these are platforms specifically for discussing Rust. What we need is greater presence on platforms that are dedicated to problem domains: database courses
@notriddle
notriddle / filter-well-behaved-robots.sh
Last active March 5, 2020 20:57
Sorts out the unique non-robot IP addresses that requested style.css
#!/bin/sh
# The first step is to get a list of robot IP addresses
# We stash it in a file for later
awk -F' ' '/robots.txt/ {print $1}' /var/log/nginx/access.log.1 | sort | uniq > robots-ips.txt
# Also add a few known bots that don't necessarily get robots.txt from the same IP
grep -iE '(bingbot|BingPreview|msnbot|adbeat|ArchiveBot|YandexBot|Googlebot|Pinterestbot|Spider)' /var/log/nginx/access.log.1 | awk -F' ' '{print $1}' | sort | uniq > robots-ips.txt # The second step is to get a list of non-robot IP addresses
# This one is comparatively complicated, so let's dissect my awk syntax
# NR==FNR -- FNR is the line number ("record number") in the current file, while NR is the line number processed in total. If these are equal, then we're on the current file. # {a[$1]=1;next} -- we want to load the robots-ips.txt file into an array, a
@notriddle
notriddle / index.md
Last active March 12, 2021 19:57
How to speed up rustdoc in 2021

By "rustdoc", I mean the API documentation webapp used by Rust. The Book is rendered using a different application, called mdBook, and only some of this advice is really applicable to it.

I hope you take my copycat txties as the compliment that I intend, by the way.

Step 1: get the rust toolchain

The first step is to get the Rust code. To help compare the old version with the new one, I set up a separate worktree for the new version, and keep the old version around. It's a lot like cloning the repository twice, but it doesn't require two downloads.

user=notriddle

cd ~/Development

@notriddle
notriddle / diffpkg.bash
Last active February 15, 2022 21:34
A basic script I wrote for myself to compare package versions
#!/bin/bash
print-usage-and-die() {
echo "Usage: diffpkg.bash [cargo|npm] [pkg1] [pkg2]"
echo " pkg1 and pkg2 can have formats NAME-VERS, NAME@VERS, NAME:VERS, or NAME=VERS"
exit 1
}
extract-name() {
case "$1" in
@notriddle
notriddle / README.md
Created June 1, 2023 20:32
test case for GFM footnotes

Footnotes 1 [^many].

Footnotes

  1. first paragraph inside footnote