Skip to content

Instantly share code, notes, and snippets.

View jw3126's full-sized avatar

Jan Weidner jw3126

  • Freiburg, Germany
View GitHub Profile
@jw3126
jw3126 / Interpreter.hs
Last active August 5, 2017 20:24
Interpreter in haskell that can store and retrieve variables
import Data.Map as Map
import Data.Map
import Control.Monad.State.Lazy
import Control.Monad
data Expr = ExInteger Integer
| ExSymbol String
| ExBinding String Expr deriving (Show)
type Errorful t = Either String t
@jw3126
jw3126 / supress.hs
Created August 6, 2017 19:03
Mapping from IO type to a "pure" type
-- we can define functions that discard IO
io :: IO Int
io = print "wehaa" >> return 17
supress :: IO Int -> Int
supress _ = 42
supress io
@jw3126
jw3126 / SIMDmedian.jl
Last active October 13, 2017 11:56
SIMD median
using SIMD
Base.@pure simdwidth(::Type{T}) where {T} = Int(256/8/sizeof(T))
@inline function median3(a,b,c)
max(min(a,b), min(c,max(a,b)))
end
@inline function median5(a,b,c,d,e)
# https://stackoverflow.com/questions/480960/code-to-calculate-median-of-five-in-c-sharp
f=max(min(a,b),min(c,d))
module M
export @esc_none, @esc_all, @esc_args, @esc_args_impl
macro esc_none(x, y)
impl(x,y)
end
macro esc_all(x,y)
esc(impl(x,y))
end
@jw3126
jw3126 / reactive.jl
Created November 17, 2017 20:56
implement functional reactive programming in julia
import Base: map, push!, reduce, mapreduce
type Stream{T}
value::T
update_rule::Function
subscribers::Vector{Stream}
end
function Stream(startvalue, update_rule=self -> nothing, subscribers=[])
T = typeof(startvalue)
@jw3126
jw3126 / lifetime.rs
Created April 20, 2018 11:51
Simple lifetime example
use std::path::{Path};
fn create_path<'a>(s: &'a String)->&'a Path { // return value has the same lifetime as input
Path::new(s)
}
fn main() {
let s = "some/path".to_string();
let p = create_path(&s);
@jw3126
jw3126 / temporary value does not live long enough.rs
Created May 17, 2018 14:04
temporary value does not live long enough
#[derive(Debug)]
struct MyString {
s:String,
}
impl MyString {
fn to_str(&self) -> &str {
&self.s
}
@jw3126
jw3126 / klein_nishina.jl
Last active December 12, 2020 09:04
Klein-Nishina formula
using Unitful
using Unitful: MeV, NoUnits, cm
using UnitfulRecipes
const h = 6.626_070_040e-34*u"J*s"
const h_bar = h / (2pi)
const m_e = 9.10938356e-31 * u"kg"
const c = 299_792_458.0 * u"m/s"
const r_c = h_bar / (c*m_e) # reduced compton wavelength of electron
@jw3126
jw3126 / gist:ca1ed1a7f62a059849b15a8b538031a0
Last active September 27, 2018 20:11
projected move regression
using LinearAlgebra
function linreg(xs, ys)
# Axs + b ≈ ys
@assert size(xs,2) == size(ys,2)
nobs = size(xs, 2)
xs_ = [xs; transpose(ones(nobs))]
ys_ = [ys; transpose(ones(nobs))]
A_ = ys_ / xs_
@assert A_[end, end] ≈ 1
@jw3126
jw3126 / so3.jl
Created October 5, 2018 12:51
Haar Measure of distance Ball SO(3)
# https://math.stackexchange.com/questions/1049788/haar-measure-of-an-angle-distance-ball-in-so3
using StatsBase
using LinearAlgebra
using StatPlots
using Plots
using Rotations
function sample_angles(N)
map(1:N) do _