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.

          Video Game Screenshot

    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

          DOSBox screen capture
________________________________________________________________________________

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

          6502 Computer
________________________________________________________________________________

LIME Voxel Renderer                                       April 2021 - July 2023

    Experiments with novel 3D rendering techniques. Written with Vulkan and C.

    Github

LIME Render 1  LIME Render 2
________________________________________________________________________________

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

Pong
________________________________________________________________________________

                                                            Profile Image
                                                  christopher.lang.256@gmail.com