Skip to content

Instantly share code, notes, and snippets.

View denkspuren's full-sized avatar
💭
Getting thinking done!

Dominikus Herzberg denkspuren

💭
Getting thinking done!
View GitHub Profile
@denkspuren
denkspuren / parser.java
Last active July 10, 2023 18:27
Parserkombinatoren in Java
/*
Parserkombinatoren in Java
angelehnt an Kap. 8 "Fallstudie: Parserkombinatoren"
siehe https://docs.google.com/file/d/0B10KTl9VYQT0SEtTcWlYUk5NaUU/edit?usp=sharing
- mit Tests, arbeitet mit immutablen Daten
- Lazy-Parser für rekursive Grammatiken
- Tag-Parser zur Annotation von Grammatiken
*/
import java.util.*;
@denkspuren
denkspuren / build.md
Last active April 26, 2023 16:39
A simple build system as a bash script

README

Frustrated with using make for generating pdf and html files from asciidoc documents (I use asciidoctor a lot), I wrote a simple shell script doing the job.

The problem with make is that it cannot work with files having spaces in their file names. Gradle, bazel, ninja and other build tools seemed like overkill for such a tiny task. And bash runs anywhere.

@denkspuren
denkspuren / TestWithAsserts.java
Last active February 20, 2023 20:49
A minimalistic testing framework for use with the assert statement
/**
EFFECTIVELY TEST WITH ASSERT STATEMENTS
=======================================
Author: https://github.com/denkspuren/, Version 1.7, CC BY-NC-SA
This demonstration is primarily intended for programmers who use Java's
JShell for smaller self-contained programs and would like to include and write
tests in the simplest possible way using assert statements. This file
serves as a demonstration of that kind of coding and testing practice using
the helper methods delivered with `testingFramework.java`.
@denkspuren
denkspuren / GoL.java
Created November 28, 2022 17:07
Conway's Game of Life
class GoL {
int width, height;
int[] world;
GoL(int width, int height) {
assert width >= 1 && height >= 1;
this.width = width + 2; // ergänze "unsichtbaren" Rand links und rechts
this.height = height + 2; // ergänze "unsichtbaren" Rand oben und unten
this.world = new int[this.width * this.height];
}
@denkspuren
denkspuren / Bubblesort.java
Created October 30, 2022 20:56
Simple Bubblesort
void swap(int[] nums, int i, int j) {
assert i >= 0 && i < nums.length;
assert j >= 0 && j < nums.length;
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
boolean bubble(int[] numbers) {
boolean swapped = false;
@denkspuren
denkspuren / qcsim.ipynb
Last active April 26, 2022 13:03
Ein Simulator für Quantenschaltungen
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@denkspuren
denkspuren / StackWithoutClass.java
Last active December 9, 2021 21:57
A stack implementation without a class declaration
// This is a stack implementation without a class declaration
interface Stackable<T> {
static <U> Stackable<U> emptyStack() {
return new Stackable<U>(){};
}
private static <U> Stackable<U> instantiate(Stackable<U> underneath, U item) {
return new Stackable<U>() {
public boolean isEmpty() { return false; }
public Stackable<U> pop() { return underneath; }
@denkspuren
denkspuren / Fibers.md
Last active November 29, 2021 13:00
Fibers für Consize

Fibers für Consize

Ein in Arbeit befindliches Konzeptdokument

Inspiriert durch die Skriptsprache Wren ist die Idee entstanden, Fibers in Consize einzubauen. Fibers (siehe Wikipedia) kann man als eine Implementierung von Coroutinen ansehen, eine Form leichtgewichtiger Threads mit deteministischem Verhalten.

Fibers und ein Fiberstack

Eigentlich sind Fibers ein naheliegendes Konzept für Consize, denn eine Continuation, also ein Rechenzustand aus Data- und Callstack, ist fundamental für Consize. Ich habe dafür in der Vergangenheit schon oft diese Notation dafür gewählt: Ein Stapel [ @S ] und eine Quotierung [ @Q ] im Verbund stellen eine Fiber dar, [| @S | @Q |].

@denkspuren
denkspuren / DockerJShell.md
Last active November 24, 2021 20:42
Bereitstellung einer aktuellen JShell via Docker

Bereitstellung einer aktuellen JShell via Docker

Dieser Text dokumentiert die Bereitstellung einer aktuellen JShell mittels Docker und kombiniert das mit einigen grundsätzlichen Infos zu Docker. Der konkrete Anwendungsfall ist, die aktuelle JShell in der CloudShell von Google verwenden zu können. Wenn man bereit ist, sich auf Google als Dienstleister einzulassen, steht einem über die CloudShell kostenfrei ein Linux-Rechner zur Verfügung (→ Kurzes Video zur Einrichtung), wo Docker, etliche Cloud-Werkzeuge und Theia als Entwicklungsoberfläche vorinstalliert sind.

Allgemeines zu Docker

Docker kapselt Prozesse in sogenannten Containern, die als gewöhnliche Prozesse im Kernel des Gast-Systems laufen. Ein Container ist keine virtuelle Maschine und verschwendet deswegen auch keine Ressourcen. (Mahn, 2021, S. 147)

Container sehen weder andere Prozesse noch ein Dateisystem. Sie werden mit einem virtuellen Dateisystem ausgestattet (und zwar in Form einer tar-Datei), das als _I

@denkspuren
denkspuren / quicksort.java
Last active October 26, 2022 12:41
Quicksort, in place sorting with an array
// Quicksort, in place sorting -- according to
// https://www.youtube.com/watch?v=MZaf_9IZCrc
void swap(int[] numbers, int i, int j) {
int tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
void shift(int[] numbers, int from, int to) {