website

Jack Bendtsen's Personal Website

If you're reading this, you've arrived at the source code for the website itself! For more information, including why I developed this site the way I did, check out my blog!

Technical Features

  • Handwritten HTTP server loop, handwritten data structures
  • Thread per connection for sending and receiving, all processing done on main thread
  • Custom Markdown renderer
    • Doesn't follow the entire spec, but includes extra features not in the spec
  • Custom text/code editor widget, based on HTML canvas
    • Re-implements conventional editing features, eg.
      • Arrow movement (crtl+arrow for word movement, shift+arrow to select text)
      • Mouse input
      • Copy/cut/paste
    • DPI aware
    • Infinitely scrollable

SpriteWave

SpriteWave is an interactive tool for arranging images from 2D games.

float: right; width: 50%; margin-left: 1em;

About

This tool lets you extract tiles from inside of a NES, SNES or Genesis ROM and paste them into a separate window, where you can rearrange and recolour them to form an image, which can then be exported to PNG.

The interface is mostly driven by the mouse, with drag-and-drop being the main way to move tiles around.

Features

  • Tile rotation and mirroring
  • Palette and RGBA pickers
  • Colour transparency
  • Offset input data
  • Image exporting:
    • Flexible naming scheme
    • Image scaling

mash

A GPU-accelerated text file viewer and editor (WIP)

Muscles

Work-in-progress struct-based memory editor and analyser

Written in C++ with SDL, it is designed to provide an informed view of the current state of another process in real time, allowing the user to understand what the program is doing in terms of its variables (with types) within objects. Currently targets Windows and Linux.

width: 49%; float: left; margin-bottom: 2em width: 49%; float: right

TODO

  • Replace field formatting with type options
    • Bind formatting options like base and prefix to a type, the same way a type has signedness and size
  • Fix various C parsing bugs (eg. circular typedef dependencies)
  • Support for array values and string literals (across various features)
  • "Taskbar" feature to minimise/maximise windows
  • Mechanism for writing data back to the file/process
  • Develop an AST to allow for things like calculating addresses of objects, the first step toward tracking objects in containers and allocators

pistachio

A lightweight text-based application launcher

example.png

Pistachio is an application launcher for Unix-based systems that employ the X11 window manager. It lets the user run any program in /usr/bin or launch any file with their associated program, as specified by the configuration (see below). When the user types into the window that appears at launch, suggestions that match the typed text appear. These suggestions can be navigated using the Up/Down arrow keys, and be selected to run using the Return key.

Configuration

Upon launching pistachio, it looks for the configuration file ~/.config/pistachio/configuration. If not found, it will create a new config file at that location with the default program options.

Options

font-path <full path to font file>

Sets the font to be used.

The install script install.sh attempts to find the default monospace font using fc-match.

Stuff

This repository is a collection of small and occasionally useful tools, each made from a single source file.

File Description
android-colors.c Native android app which displays colours based on touch input. Uses EGL & GLES. Self-contained, doesn't use the standard glue code.
autotriangulator.html Interactive demo that creates triangle meshes from 2D polygons
bin2obj.c Converts 3D model files from Need For Speed Underground 2 into Wavefront .OBJ
bluenrg2-flasher.cpp Flashes a ROM to a BlueNRG2 development board (also provides a console)
canvas_test.html An example of using a 2D drawing context in JavaScript
colour-picker.html Dynamic colour picker for lists of RGB colours
cube.cpp A simple OpenGL demo of a rotating cube
dll_info.c A handy command-line tool that displays information about DLL/EXE/Other PE files with an additional search function
enum-process-regions.cpp Prints a list of memory regions in a Windows process
generate.c Tone generator, capable of generating sine, square, sawtooth and triangle waves, as well as white noise
github-show-all.html A naive GitHub repository scraper which gets every file that is easily accessible and pastes it into the HTML
hexed.c A command-line driven hex editor
mandelbrot.html Mandelbrot set simulator using Three.js/WebGL
play_url.html Takes a file from an input url, then plays the file as if it were 8-bit PCM
sdl2-viewer.c Example of an image viewer with scale & panning in SDL2

Tiny Android Template

For Android projects written in Kotlin and/or Java, using the latest AndroidX libraries  

The purpose of this template is to give people the ability to write Android apps without having to use Android Studio or Gradle.  When I picked up Android dev for the first time, I was struck by how frustratingly slow and janky these tools were to use,  and that they seemed to only run at an acceptable pace on machines designed for gaming.  However, I still wanted to write apps for Android, so I developed this template so I could continue my work without having to use an IDE or external build system.  

Requirements

  • Java Development Kit (JDK)
  • Kotlin Compiler (optional)
  • Android SDK
  • 7-Zip
  • Bash & Perl (Cygwin/MSYS if on Windows)

Does Not Require

  • Android Studio
  • Gradle
  • Apache Maven / Ant

AngioTool 2.0

This is a rewritten version of AngioTool, which features advanced analysis settings and batch processing.

float: left; width: 48%; margin-bottom: 1em float: right; width: 48%; margin-bottom: 1em


AngioTool is a program designed to analyse eye scans for potential defects, using various algorithms to extract data from the scanned image. It was developed by the Center for Cancer Research from 2011-2014, and is commonly used in the ophthalmology field.

The intended use case was to view and analyse a scanned image, while also saving the results for record keeping and further analysis. However, in ophthalmology research, it is also used to process large collections of scans. Since AngioTool only lets the user analyse one scan at a time, this process becomes extremely tedious, especially when the scanning settings don't need to change.

This version of AngioTool lets the user select one or more folders, which are recursed fully such that every single non-output image inside those folders