danielyh: ~/portfolio

cat human.toml

Daniel Yang Hansen

location
Norway -> Taipei, Taiwan
work
fullstack, GPUs, HPC
offline
running, violin, video/board games, learning
weakness
one more interesting question

# Curious about how things work. # Equally curious about what happens if I try.

Try , , or .

A tiny portfolio shell. No system commands.

human / always learningUTF-8
a perfectly reasonable
rabbit hole
This is me!
usually asking
one more question

Things I've helped build.

I've worked on React applications, live sports visualisations, and GPU tooling. I like figuring out a problem, building something people can use, and testing whether it works.

My tool shelf.

Tools I've used in projects, internships, and studies. I've spent more time with some than others.

Closer to the metal

  • C++
  • C
  • Python
  • CUDA
  • Vulkan
  • Linux

Also: MPI, NCCL, OpenMP, profiling and performance experiments.

Things people use

  • TypeScript
  • JavaScript
  • React
  • Vue
  • Django
  • .NET
  • Node.js
  • Redux

The rest of the desk

  • Docker
  • Git
  • PostgreSQL
  • MongoDB
  • Java
  • CMake
  • Bash

Different amounts of time with each. Happy to talk about the actual work.

Learning & building

  • Codex
  • Claude
  • Pi

Agents I explore for coding and learning.

A few threads of me.

A slightly winding path.

Alongside my studies at NTNU, I've spent summers in industry and nearly five years building with Abakus Webkom. I've also taught computing courses and coached performers in Abakusrevyen.

Non-profit workAbakusrevyenTeachingIndustry

The coloured lines trace time spent. Several things happened at once.

Nov 2018 - Aug 2019

DNV GL

Database architect

I designed SQL and data-warehouse structures and built interactive Power BI visualisations for analysis.

2020 - 2026

NTNU

Integrated MSc studies / Computer Science

I studied Computer Science in NTNU's integrated MSc programme, specialising in Algorithms and Computer Systems. My thesis was submitted in July 2026 and is awaiting grading; formal degree award follows.

Jun 2021 - Aug 2021 3 months

Norsk Helsenett

Software engineer / summer intern

I worked on authentication infrastructure in F#, using OAuth2 and OpenID Connect as part of a Scrum team.

F# / OAuth2 / OpenID Connect

2022 - 2023

Teaching at NTNU

Teaching assistant

I helped students debug code and work through technical problems in low-level computing, operating systems, introductory programming, and software projects.

Debugging / guidance / LAOS training
A bit more

I helped students in these courses at NTNU:

  • TDT4258Low Level ComputingTeaching Assistant
  • TDT4186Operating SystemsTeaching Assistant
  • TDT4109Information Technology, IntroductionTeaching Assistant
  • IT1901Informatics, Project 1Technical Teaching Assistant

Jun 2023 - Aug 2023 3 months

OmegaPoint / Patentstyret

Software consultant / summer intern

I built full-stack features for Patentstyret using React, .NET 7, REST APIs, LINQ, and Azure Cosmos DB. User interviews helped me understand the intellectual-property workflows and turn designs into working software.

React / .NET / REST

Submitted July 2026

Performance Modeling of a WCSPH Proxy Application on Multi-GPU Systems

Norwegian University of Science and Technology (NTNU)

I designed, implemented, and profiled a CUDA-based WCSPH proxy application to study multi-GPU performance.

C++ / CUDA / MPI / NCCL / performance modelling
A bit more

Using C++, CUDA, MPI, and NCCL, I built reproducible experiments and analysed bottlenecks in memory access, neighbour search, communication, and scaling.

Supervised by Jan Christian Meyer.

September 2026

Norway to Taiwan

Moved across the world. Learning a new city, meeting people, and seeing what I can build here.

Lines show the months spent in each role, including overlapping experiences. Spacing follows the cards rather than a uniform time scale; study and TA ranges are known by year.

Away from the keyboard.

I run every day. I play violin, love musicals and sketch comedy, and will happily lose an evening to a game or an interesting idea about 3D graphics.

I recently moved from Norway to Taiwan. Vivi, my cat, is back in Norway. She's missed a lot.

I take the work seriously. Myself, a little less.

violin
looking for glitches
the long way home
Who knows what I'm doing?
Sunrise in Alishan, Taiwan.
Overheated from the run.
Yes, this is the important one.

One thing leads
to another.

An idea usually starts to stick when I can connect it to something I already know. I like asking questions and testing my understanding as I go.

I use Codex, ChatGPT, and Claude Code to explore code, plan implementations, and review my work. I check the results with tests and my own technical judgment. I also explore Pi as a learning assistant, with a notebook full of links to follow up.

a map, very much in progress

Node area follows connection count, including neighborhood links. Click a selected node again or press Escape to return. Hover a line to read its relationship. Drag to pan. Use + / − to zoom. Keyboard: arrow keys pan, + / − zoom, Home fits the map. Topic search and connection buttons work without dragging.

A partial map of things I've worked with, studied, or find interesting. Connections aren't claims of equal expertise. A complete version would require a brain scan, which feels excessive.

Useful? Occasionally.

Little experiments for the joy of seeing what happens. Games, graphics, and things that are easier to understand when you can poke them.

Space break.

A blocky rocket, two movement axes, and no particularly urgent destination.

Take it for a spin

Just one more rotation.

Changing the shape is a perfectly good use of a minute.

Who runs next?32 lanes
Volta+ model

Follow one warp through different paths. Watch the active mask change, inspect a lane, and see exactly where an explicit barrier makes it wait.

An illustrative source-level schedule. CUDA does not promise A before B; switch schedules and compare.

CUDA C++ / source statementsINIT
Lane state after this event32 participating
Participates nowWaiting at barrierOther / ready
Event mask0xffffffff
Barrier arrivals0 / 32

Choose a lane to inspect its state.

Initialize x

Execution trace · rows are events, columns are lanes

Click a row to jump. Filled cells participate in that event; striped cells are waiting at the barrier. Event spacing is not elapsed time.

What this illustrates and what the GPU is free to change

Masking and waiting

A lane on another branch is inactive for the current instruction. It has not acquired a mutex. An explicit __syncwarp(mask) waits for the named non-exited lanes and orders their memory accesses. Our full mask is valid because all 32 lanes reach the same call.

Order is the experiment

Volta and later keep per-thread execution state and can schedule subsets of a warp. The presets show possible source-level interleavings, not a predicted hardware schedule. A compiler may predicate short branches, fuse operations, or rearrange instructions.

Try removing the barrier

Each lane reads the partner in the opposite half of the warp. Without synchronization, the program has a shared-memory race. A convenient execution order does not make it correct, so unsafe outputs stay undefined here.

Ideas of mine.

Things I've tried, learned, or spent too long thinking about. A notebook with the occasional useful page.

Better locality wasn't enough

What particle ordering and NCCL taught me about measuring the full runtime of a multi-GPU WCSPH solver.

Read post

Recent writing, newest first.

Say hello.

Talk to me about GPUs, software, music, or a good running route in Taipei.