Skip to content

Instantly share code, notes, and snippets.

View asaaki's full-sized avatar
🦀
Oh crab!

Christoph Grabo asaaki

🦀
Oh crab!
View GitHub Profile
@asaaki
asaaki / fire-and-forget-results.rs
Created July 16, 2020 08:12
Rust: Result types for quick prototyping
/*
IMPORTANT NOTE: It is not a good idea to use this pattern in production code!
*/
// Q&D way of catching all errors without worrying about their types at compile time
// @see https://doc.rust-lang.org/stable/rust-by-example/error/multiple_error_types/boxing_errors.html
@asaaki
asaaki / bench-env-vars-in-different-scopes.rb
Last active July 6, 2020 11:14
Ruby: Do ENV vars have a significant impact on the runtime performance?
#!/usr/bin/env ruby
# gem install benchmark-ips
require 'benchmark'
require 'benchmark/ips'
# https://github.com/evanphx/benchmark-ips#custom-suite
class GCSuite
def warming(*); run_gc; end
def running(*); run_gc; end
def warmup_stats(*); end
@asaaki
asaaki / tco.rs
Created June 12, 2020 17:41
TCO #rustlang #recursion
// Recursion: TCO (Tail Call Optimization)
// Computerphile: https://www.youtube.com/watch?v=_JtPhF8MshA
fn fib(n: usize) -> usize {
fib_go(n, 0, 1)
}
fn fib_go(n: usize, a: usize, b: usize) -> usize {
match (n, a, b) {
(0, v, _) => return v,
@asaaki
asaaki / README.md
Last active April 23, 2020 13:44 — forked from twooster/README.md
Create scrolling text gifs for Slack

(Forked fork, that works on macos, too)

Makes little scrolly text jiffs in Flywheel colors.

Prerequisites

  • macos: brew install fontconfig imagemagick gifsicle
  • Linux: sudo apt install fontconfig imagemagick gifsicle

Usage

@asaaki
asaaki / Gemfile
Last active February 25, 2020 13:28
# frozen_string_literal: true
source 'https://rubygems.org'
gem 'puma'
gem 'sinatra'
gem 'sinatra-contrib'
@asaaki
asaaki / ___boolean_env_vars.md
Last active November 7, 2019 19:42
Env Vars as Booleans

Boolean Environment Variables

Don't overcomplicate things.

I've seen a lot of parse the env var and match it against some known values like:

env_var = ENV['FEATURE_ONE']
case env_var.to_s.downcase
when 'true', 't', 'yes', 'y', 'on', '1' then true
@asaaki
asaaki / ruby-sigils.rb
Created May 28, 2019 16:51
ruby-sigils.rb
[*('A'..'Z'), *('a'..'z')].map do |c|
puts [c, eval("%#{c}(ls)")].inspect
rescue Exception
puts "#{c} not allowed"
end; 0
@asaaki
asaaki / experiments.rb
Created May 16, 2019 09:23
Some Ruby stdlib experiments
### Experiments
# https://ruby-doc.org/core-2.5.0/SizedQueue.html
log = SizedQueue.new(100)
# https://ruby-doc.org/core-2.5.0/Queue.html
queue = Queue.new
# https://ruby-doc.org/core-2.5.0/ThreadGroup.html
group = ThreadGroup.new # pool
5.times do |i|
# https://ruby-doc.org/core-2.5.0/Thread.html
@asaaki
asaaki / flurlicht.ino
Created January 30, 2019 09:30
motion sensor / interrupt triggered neopixel light controller
#include <Adafruit_NeoPixel.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define STRIP_PIN 6
#define TRIGGER_PIN 2
#define CONTROL_LED 13
// Note: this duration should be also longer than the HIGH time of the PIR
@asaaki
asaaki / rustup-targets.sh
Created October 22, 2018 14:44
(rustup) add or remove list of targets for a list of toolchains
#!/bin/sh
targets=(armv7-unknown-linux-musleabihf thumbv7em-none-eabi armv7-unknown-linux-musleabihf)
toolchains=(stable beta nightly)
for toolchain in $toolchains; do
for target in $targets; do
echo "--> toolchain $toolchain and target $target"
rustup target install $target --toolchain $toolchain
# rustup target remove $target --toolchain $toolchain