chris256.com C. Lang
April 2025
_ _ ____ ____ __
___| |__ _ __(_)___|___ \| ___| / /_ ___ ___ _ __ ___
/ __| '_ \| '__| / __| __) |___ \| '_ \ / __/ _ \| '_ ` _ \
| (__| | | | | | \__ \/ __/ ___) | (_) | (_| (_) | | | | | |
\___|_| |_|_| |_|___/_____|____/ \___(_)___\___/|_| |_| |_|
My Personal Website
________________________________________________________________________________
USEFULL LINKS
,
\`-._ __ Me
\\ `-..____,.' `.
:`. / \`. gihub
: ) : : \ linkedin
;' ' ; | :
).. .. .:.`.; : This Site
/::... .:::... ` ;
; _ ' __ /:\ documents
`:o> /\o_> ;:. `. papers
`-`.__ ; __..--- /:. \ articles
=== \_/ ;=====_.':. ; jotto
,/'`--'...`--.... ;
; ; Great Software
.' ;
.' ; void linux - linux distro
.' .. , . ; kakoune - text editor
: ::.. / ;::. | dwm,dmenu,st - X applications
/ `.;::. | ;:.. ; tmux - terminal multiplexer
: |:. : ;:. ; git - source control
: :: ;:.. |. ; nmap - network scanner
: :; :::....| |
/\ ,/ \ ;:::::; ;
.:. \:..| : ; '.--| ;
::. :'' `-.,,; ;' ; ;
.-'. _.'\ / `; \,__: \
`---' `----' ; / \,.,,,/
`----`
----------------------------------------------
/ Dicipline is following your own rules, \
People and Groups \ obedience is following the rules of another. /
---------------------------------------------
Protesilaos Stavrou \ ^__^
Luke Smith \ (oo)\_______
suckless.org (__)\ )\/\
John Baez ||----w |
Dynamicland || ||
________________________________________________________________________________
Vocaloid Graph 02 April 2025
Vocaloid is a genre of music where vocals are synthesized digitally [1]. In
this genre there happens to be much colaboration between artists so I though
it would be interesting to create the following graph. Each Node corresponds
to a song and each arrow color refers to a music producer. I use a music
database https://vocadb.net/ to extract a list of songs each producer worked
on, ordered by release date. For each producer, I plot this sequence by
arrows of the producers color between consecutive songs. Graphviz is used
to arange the graphs.
Initially I would also show a thumbnail image in each node but since the SVG
was alreay very large the thumbnails caused my browser to crash. In general,
doing the graphics through SVG's was a big headache. In the future I might look
for a bespoke graph visualisation software. I really think data visualisation
is a ripe area for research. Has all that much changed in the last 250 years
(see [2])?
View the graph on my GitHub:
https://github.com/Chris-F5/vocaloid_graph/blob/main/out.svg
You can click on a nodes to get linked to the vocadb page.
Some observations:
* Colaboration is localised between artists: artists who have colaborated are
more likely to colaborate again.
* Colaboration is localised in time: two artists who recently colaborated are
likely to colaborate again soon.
* There are no artists in the graph who exclusivly produce colaborations.
* I'm supprised about just how much music each artists produces on average.
[1] Technically 'Vocaloid' is the name of a particular vocal synthesis
software but the name has come to refer to the genre.
[2] https://en.wikipedia.org/wiki/William_Playfair
________________________________________________________________________________
DPLL (Propositional Logic) Sodoku Solver Febuary 2025
I wrote then to help me internalise concepts I'm learning in a course on logic
and proof (Cambridge IB 2425) and to help me learn OCaml.
Davis-Putnam-Logeman-Loveland DPLL is a propositional logic algorithm to find
an interpretation that satisfies an expression. For example, you might ask it to
find an interpretation for
(X OR Y) AND (NOT (X AND Y))
and it might tell you that
{X=true, Y=false} entails (X OR Y) AND (NOT (X AND Y)).
We express a sodoku problem as a propositional logic statement of 9*9*9=729
variables where proposition P(i,j,n) is true iff the cell with coordinates (i,j)
holds the number n in the solution. Here i,j,n are elements of {1..9}. Then we
ask DPLL to find a solution.
Github
6 . 9 | . . . | . 2 3 6 5 9 | 7 8 1 | 4 2 3
. . 3 | 9 6 . | . . 1 4 2 3 | 9 6 5 | 7 8 1
7 1 . | . . . | . 6 . 7 1 8 | 4 3 2 | 9 6 5
------+-------+------ ------+-------+------
5 8 . | 1 . 7 | . . 4 5 8 2 | 1 9 7 | 6 3 4
. 4 . | . . 8 | 2 . 9 ---------> 3 4 1 | 6 5 8 | 2 7 9
9 . 6 | 3 . . | 5 . . 9 7 6 | 3 2 4 | 5 1 8
------+-------+------ ------+-------+------
. . 4 | . 7 3 | 8 9 . 1 6 4 | 5 7 3 | 8 9 2
. . 5 | . . . | 3 . 7 8 9 5 | 2 1 6 | 3 4 7
2 . . | . 4 . | . . . 2 3 7 | 8 4 9 | 1 5 6
________________________________________________________________________________
Another x86-64 Assembly Video Game Febuary 2025
Github
Video game made by Christopher and Anthony for the 2025 Cambridge Game Jam.
Written in x86-64 assembly. Graphics and input were supported by communicating
with an X11 server. It is a two-player online multiplayer cooperative game.
The theme of the game jam was 'Synesthesia'. The player must vicariously
'sense' where the red and green buckets are on the teammates screen only by
verbal communication.
Tips for writing assembly:
strace and gdb are your friend. If you dont know how to do something then write
a C program to do it and the examine the strace logs when it runs. Use gdb
breakpoint command lists to replace printf debugging.
The cost of making abstractions is greater in assembly (takes time to write
function interfaces, etc..). This means you should modularise your code and data
into slightly larger chunks than you might be used to in higher level languages.
Effectivly using global variables is a large part of this.
________________________________________________________________________________
clce (C Chess Engine) March 2024
**UNFINISHED**
A better chess engine. Featuring magic bitboards and lichess api support.
'clce' stand for C language chess engine and Chris Lang's chess engine.
Github
________________________________________________________________________________
Dos 16-bit Assembly Video Game ('Lazer Recoil') Febuary 2024
Made in 48 hours for the 2024 Cambridge University Game Jam. The theme was
'reflections'. Runs in dosbox emulator.
Github
________________________________________________________________________________
6502 Computer September 2023
65C02 microprocessor reads instructions from 28C256 memory and writes draw
instructions to an output interfaace register which connects to an LCD
character display.
Video
________________________________________________________________________________
LIME Voxel Renderer April 2021 - July 2023
Experiments with novel 3D rendering techniques. Written with Vulkan and C.
Github
________________________________________________________________________________
PIFS OS Compilation Guide March 2023
Like LFS [1], but for cross-compiling a Raspberry-Pi OS. I wrote this guide
for my second EPQ.
* guide
* report
[1] LFS https://www.linuxfromscratch.org/lfs/
________________________________________________________________________________
x86_64 Assembly Pong January 2022
Implementation of the video game 'Pong' in x86_64 assembly. Draws graphics
directly to Linux framebuffer at /dev/fb0. Reads keyboard input directly
from device files in /dev/input.
Github
________________________________________________________________________________
christopher.lang.256@gmail.com