Skip to content

Instantly share code, notes, and snippets.

View matthewjberger's full-sized avatar

Matthew J. Berger matthewjberger

View GitHub Profile
matthewjberger /
Last active June 18, 2024 07:32
Install a nerd font on ubuntu

1.) Download a Nerd Font

2.) Unzip and copy to ~/.fonts

3.) Run the command fc-cache -fv to manually rebuild the font cache

Unauthorised Access: Physical Penetration Testing For IT Security Teams by Wil Allsopp.
Social Engineering: The Art of Human Hacking by Christopher Hadnagy
Practical Lock Picking: A Physical Penetration Tester's Training Guide by Deviant Ollam
The Art of Deception: Controlling the Human Element of Security by Kevin Mitnick
Hacking: The Art of Exploitation by Jon Erickson and Hacking Exposed by Stuart McClure and others.
Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning by Fyodor
The Shellcoder's Handbook: Discovering and Exploiting Security Holes by several authors
// petgraph v0.6.5
use petgraph::graph::{NodeIndex, DiGraph};
fn number_children(graph: &DiGraph<(), ()>, parent: NodeIndex, depth: usize) -> Vec<(NodeIndex, usize, usize)> {
let mut tree = Vec::new();
let mut index = 0;
// Start numbering the children from index 0
for child in graph.neighbors(parent) {
tree.push((child, index, depth));
// petgraph v0.6.5
use petgraph::graph::DiGraph;
use petgraph::visit::{EdgeRef, Topo};
fn main() {
// Create a new directed graph
let mut graph = DiGraph::new();
// Add nodes and edges (similar to previous examples)
let a1 = graph.add_node("A1");
matthewjberger /
Created May 15, 2024 22:55
Create a newtype for equating petgraph graphs (use this if you want to #[derive(PartialEq)] but your struct has a petgraph::Graph field)
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CustomGraph {
pub graph: petgraph::Graph<MakelineNode, ()>,
impl PartialEq for CustomGraph {
fn eq(&self, other: &Self) -> bool {
graph_eq(&self.graph, &other.graph)
matthewjberger / configuration.nix
Created June 22, 2021 03:52
/etc/nixos/configuration.nix minimal configuration for using kde plasma
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{ config, pkgs, ... }:
imports =
[ # Include the results of the hardware scan.
matthewjberger /
Last active May 3, 2024 03:52
Type id pattern matching in rust
use std::any::TypeId;
// Define some example types
struct Foo;
struct Bar;
struct Baz;
// Define a function to perform type-based pattern matching and return the value
fn match_type<T: 'static>(value: T) -> Option<T> {
// Get the TypeId of the value
matthewjberger /
Created April 28, 2024 18:15
Sparse vectors with generational indices in rust
use self::error::GenerationError;
use std::{
ops::{Deref, DerefMut},
pub type Result<T, E = Box<dyn std::error::Error>> = std::result::Result<T, E>;
pub mod error {
use super::*;
matthewjberger / Cargo.toml
Last active April 23, 2024 20:32
Rust window - winit 0.29.11, wgpu 0.19.1, egui 0.27.2
name = "app"
version = "0.1.0"
edition = "2021"
egui = "0.27.2"
egui-wgpu = { version = "0.27.2", features = ["winit"] }
egui-winit = "0.27.2"
pollster = "0.3.0"
matthewjberger /
Created April 7, 2024 06:49
rust state machines
use serde::{Deserialize, Serialize};
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone, Copy)]
pub enum State {