DNV GL
Database architect
I designed SQL and data-warehouse structures and built interactive Power BI visualisations for analysis.
cat human.toml
# Curious about how things work. # Equally curious about what happens if I try.
Try , , or .
A tiny portfolio shell. No system commands.

Work
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.
Skills
Tools I've used in projects, internships, and studies. I've spent more time with some than others.
Also: MPI, NCCL, OpenMP, profiling and performance experiments.
Different amounts of time with each. Happy to talk about the actual work.
Agents I explore for coding and learning.
About
Experience
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.
The coloured lines trace time spent. Several things happened at once.
Database architect
I designed SQL and data-warehouse structures and built interactive Power BI visualisations for analysis.
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.
Software engineer / summer intern
I worked on authentication infrastructure in F#, using OAuth2 and OpenID Connect as part of a Scrum team.
Nonprofit software developer
I developed and maintained a production platform with fellow students, using TypeScript, React, and Django. I reviewed code, deployed changes, and helped newer developers find their feet.
I worked on features from the first idea through design, testing, and deployment, then kept improving them. The platform used Redux, REST APIs, PostgreSQL, and Docker. I also helped recruit developers and shared what I learned with the team.
Teaching assistant
I helped students debug code and work through technical problems in low-level computing, operating systems, introductory programming, and software projects.
I helped students in these courses at NTNU:
Software developer / summer intern
I built interactive sports-event visualisations with TypeScript, React, and live event data. The work included maps, WebGL graphics, and real-time updates.
I used Redux and Mapbox GL, connected live updates with Socket.IO, and wrote unit and end-to-end tests for the user-facing features.
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.
GPU software developer / summer intern
I developed and extended internal C++ and Vulkan tools for GPU-driver analysis and debugging on Linux.
I investigated behaviour that was hard to observe across graphics APIs, driver layers, and hardware-adjacent abstractions, then used the findings to improve the team's R&D tools.
Acting and singing instructor
I coached acting and singing in Abakusrevyen through structured practice and feedback.
Working with performers gave me practice in explaining things clearly and helping a group work together.
Norwegian University of Science and Technology (NTNU)
I designed, implemented, and profiled a CUDA-based WCSPH proxy application to study multi-GPU performance.
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.
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.
The human
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.



How I learn
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.
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.
Play
Little experiments for the joy of seeing what happens. Games, graphics, and things that are easier to understand when you can poke them.
A blocky rocket, two movement axes, and no particularly urgent destination.
Take it for a spinGeometry lab
Changing the shape is a perfectly good use of a minute.
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.
0xffffffffChoose a lane to inspect its state.
Click a row to jump. Filled cells participate in that event; striped cells are waiting at the barrier. Event spacing is not elapsed time.
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.
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.
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.
Notes
Things I've tried, learned, or spent too long thinking about. A notebook with the occasional useful page.
engineering
What particle ordering and NCCL taught me about measuring the full runtime of a multi-GPU WCSPH solver.
7 Oct 2026Read postNothing here yet. The next good rabbit hole might become a post.
Recent writing, newest first.
Talk to me about GPUs, software, music, or a good running route in Taipei.
daniel.yang.hansen@gmail.com