Skip to content

Instantly share code, notes, and snippets.

View matthewjberger's full-sized avatar
🦀
Programming something in Rust, probably

Matthew J. Berger matthewjberger

🦀
Programming something in Rust, probably
View GitHub Profile
@matthewjberger
matthewjberger / app.rs
Created January 2, 2024 21:20
OpenGL (glow) 3D interactive triangle in wasm and native using eframe. (This replaces app.rs in eframe, assumes "eframe/glow" feature is enabled)
/// We derive Deserialize/Serialize so we can persist app state on shutdown.
pub struct TemplateApp {
angle: f32,
rotating_triangle: std::sync::Arc<egui::mutex::Mutex<RotatingTriangle>>,
}
impl TemplateApp {
/// Called once before the first frame.
pub fn new<'a>(cc: &'a eframe::CreationContext<'a>) -> Self {
let gl = cc.gl.as_ref().expect("Failed to get a GL context");
@matthewjberger
matthewjberger / tinypubsub.rs
Last active January 1, 2024 06:16
Tiny pubsub broker in rust
// [dependencies]
// uuid = { version = "1.6.1", features = ["v4"] }
use std::collections::{HashMap, VecDeque};
#[derive(Clone, Debug)]
pub enum Message {
String(String),
}
@matthewjberger
matthewjberger / upgrade.md
Last active December 30, 2023 08:56
force upgrade your rust app cargo.toml dependencies

Force upgrade your rust app cargo.toml dependencies

cargo install cargo-edit
cargo upgrade --ignore-rust-version --incompatible
@matthewjberger
matthewjberger / Cargo.toml
Created December 28, 2023 22:43
Put a pixel on the screen using SDL2's software renderer in Rust
[package]
name = "chitauri"
version = "0.1.0"
edition = "2021"
[dependencies]
sdl2 = { version = "0.36.0", features = ["bundled"] }
@matthewjberger
matthewjberger / scenegraph.rs
Created December 17, 2023 13:15
Scenegraph
use petgraph::graph::{DiGraph, NodeIndex};
use petgraph::Direction;
use nalgebra::{Vector3, Isometry3};
use std::collections::HashMap;
#[derive(Debug, Clone)]
enum SceneNode {
Spatial(SpatialNode),
Mesh { base: SpatialNode, vertices: Vec<Vector3<f32>> },
}
@matthewjberger
matthewjberger / bytecode.rs
Created December 17, 2023 08:52
Bytecode emulation pattern in rust
struct Emulator {
register: [u8; 2], // Two general-purpose registers
program_counter: usize,
memory: [u8; 256], // Simplified memory
}
enum Instruction {
Load(u8, u8), // Load a value into a register
Add, // Add two registers
Subtract, // Subtract two registers
@matthewjberger
matthewjberger / Notes.md
Created December 19, 2016 20:16
Computer Organization and architecture notes

Chapter 17 - Parallel Processing

General Organization

  • Four types of organization
  • SISD
    • Single Instruction, Single Data stream
    • Single processor executes a single instruction stream to operate on data stored in a single memory.
    • Examples: Uniprocessors
  • SIMD
  • Single Instruction, Multiple Data stream
@matthewjberger
matthewjberger / wasm.md
Last active November 19, 2023 23:05
Check if a rust crate is compatible with wasm + tips

Does it build in wasm?

cargo build --target wasm32-unknown-unknown

How do I specify crates just for the wasm target?

Here's an example using legion:

@matthewjberger
matthewjberger / semantic.rs
Created November 13, 2023 07:39
semantic version
use std::convert::TryFrom;
use std::num::ParseIntError;
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
struct SemanticVersion {
major: u32,
minor: u32,
patch: u32,
}
@matthewjberger
matthewjberger / nodegraph.rs
Last active November 3, 2023 13:38
Nodegraph V2
use petgraph::graphmap::DiGraphMap;
use serde::{Deserialize, Serialize};
use std::{collections::HashMap, error::Error, fmt, hash::Hash};
#[derive(Debug)]
pub struct NodeGraphError {
details: String,
}
impl NodeGraphError {