Skip to content

Instantly share code, notes, and snippets.

View dustinknopoff's full-sized avatar

Dustin Knopoff dustinknopoff

View GitHub Profile
@dustinknopoff
dustinknopoff / pdf_split.py
Created December 20, 2020 20:35
Split pdf into separate pages
# Answer from https://stackoverflow.com/a/490203
from PyPDF2 import PdfFileWriter, PdfFileReader
inputpdf = PdfFileReader(open("document.pdf", "rb"))
for i in range(inputpdf.numPages):
output = PdfFileWriter()
output.addPage(inputpdf.getPage(i))
with open("document-page%s.pdf" % i, "wb") as outputStream:
output.write(outputStream)
import SwiftUI
import WebKit
import Combine
class WebViewData: ObservableObject {
@Published var loading: Bool = false
@Published var scrollPercent: Float = 0
@Published var url: URL? = nil
@Published var urlBar: String = "https://nasa.gov"
@dustinknopoff
dustinknopoff / schema.pest
Created October 30, 2020 16:31
If I ever decide to go back to generating rust structs/definitions for Schema.org
WHITESPACE = _{NEWLINE | " " | "\n" | "\t"}
SchemaString = {"\"" ~ (("\\" ~ "\"") | (!"\"" ~ ANY))+ ~ "\"" ~ ("@" ~ ASCII_ALPHA+)? }
UrlNode = {(!(">" | "<") ~ ANY)+}
TAG = { "<" ~ UrlNode ~ ">"}
// Use url = "2.1" to parse out URLs...need to extract protocol, hostname, path, search, fragment
// A UrlNode is "subClassOf" "http://www.w3.org/2000/01/rdf-schema" "http://www.w3.org/2000/01/rdf-schema#subClassOf"
TRIPLE = { TAG ~ TAG ~ (TAG | SchemaString) ~ "." }
parse = {
SOI ~ TRIPLE*
}
type TypeState = Distribute<keyof FlowMachineSchema["states"], FlowMachineContext> // assuming same context
export type Send = Interpreter<FlowMachineContext, FlowMachineSchema, FlowEvents, TypeState>['send']
export type Context = [
State<FlowMachineContext, FlowEvents, FlowMachineSchema, TypeState>,
Send,
Interpreter<FlowMachineContext, FlowMachineSchema, FlowEvents, TypeState>
];
type Distribute<U, C> = U extends any ? { value: U; context: C } : never // util
use core::hash::Hash;
use std::sync::Arc;
use core::any::Any;
use core::any::TypeId;
use std::collections::HashMap;
use async_trait::async_trait; // 0.1.36
use tokio; // 0.2.21
use tokio::sync::RwLock;
// Our trait. The async part is not necessary, I just wanted to see how it behaves :)
fn main() {
let n = 8;
let mut blank = Vec::with_capacity(8);
hanoi(n, &mut (0..8).collect(), &mut blank.clone(), &mut blank);
}
//if n > 0
// Hanoi(n − 1, src, tmp, dst) 〈〈Recurse!〉〉
// move disk n from src to dst
// Hanoi(n − 1, tmp, dst, src) 〈〈Recurse!〉〉
@dustinknopoff
dustinknopoff / markdown_highlight.rs
Created May 3, 2020 14:29
A bare minimum pulldown_cmark highlighting using syntect based off of conversation in: https://github.com/raphlinus/pulldown-cmark/issues/167
use syntect::highlighting::ThemeSet;
use syntect::html::highlighted_html_for_string;
use syntect::parsing::SyntaxSet;
use pulldown_cmark::{html, CodeBlockKind, CowStr, Event, Options, Parser, Tag};
fn main() {
// Setup for pulldown_cmark to read (only) from stdin
let opts = Options::all();
let input = String::from(
use std::convert::TryFrom;
#[derive(Debug, Copy, Clone)]
enum HttpMethod {
GET,
POST,
PUT
}
impl TryFrom<String> for HttpMethod {
@dustinknopoff
dustinknopoff / def.yml
Created June 26, 2019 12:50
tmuxinator setup
# /Users/dknopoff/.config/tmuxinator/portal.yml
name: def
root: ~/Documents
# Optional tmux socket
# socket_name: foo
# Note that the pre and post options have been deprecated and will be replaced by
# project hooks.
@dustinknopoff
dustinknopoff / list-color.go
Created June 26, 2019 12:45
Ideal go-jira template for use in tmux setup
{{$w := sub termWidth 200 -}}
{{ range .issues }}{{color "green+bh"}}{{.fields.issuetype.name | printf "%-12s" }}{{color "reset"}} {{color "yellow+bh"}}{{ .key | append ":" | printf "%-12s"}}{{color "reset"}} {{ .fields.summary | abbrev (sub $w 2) | printf (printf "%%-%ds" (sub $w 18)) }} {{color "blue+bh"}}{{if .fields.assignee }}{{.fields.assignee.name | printf "%12s" }}{{else}}<unassigned>{{end}}{{color "reset"}}
{{ end }}