
No bullets, please!
This post has a simple mission: stop making template-based “title + bullet point”-style slides for your presentation. Yes, most presentation software suggests this as a default, but that doesn’t make it any better. Instead, think about your slides as complementary to what you are saying. Auditory–visual perception Human perception is inherently multimodal, meaning that we continuously experience the world with all our senses. In a presentation, that means the audience is processing your voice, your slides, your gestures, and the room itself as part of one combined experience. ...

Building a local LLM-driven chat for my web page
I wanted to test whether I could add a local chatbot to arj.no/chat/ that answers questions about my website content and not the whole internet. Since my blog is built using Hugo, a static site generator, I don’t have any server in the background that can host the Large Language Model (LLM). Instead I looked for a simple solution with standard web technologies and files. Running a model in the browser with WebLLM After discussing with CoPilot, I ended up using WebLLM, which allows language models to run inside the browser. It relies on WebGPU, which makes local AI processing possible, if you have Edge or Chrome available. ...

More MishMash bubble animations
Some weeks ago, I wrote about how I made blinking MishMash bubbles. Today, I wanted to see if I could create more variations on this and make a longer animation. This was inspired by the dynamic RITMO emblem, which reconfigures itself once in a while: That is a video, though, and was made manually back in 2018. Now, I would like to know if I can get agential help creating dynamic GIFs from SVG files. ...

Developing basic music tools with GitHub Copilot agents
Many musicians rely on basic tools in everyday life, including a tuner, a metronome, and a keyboard. I support the kids in a marching band, and I see that they rely on numerous poorly developed apps that differ between iOS and Android devices. Many of them also include ads, and some even play video ads in the middle of a tuning session. I wanted to see if I could develop some web-based apps to solve the problem. ...

Making the MishMash Bubbles Blink
Now that we have the MishMash “bubble” illustration as an editable SVG image, it is time to start playing around with how it can be modified dynamically. The first experiment was to try to make it blink. Here, I describe two approaches, using CSS and a GIF. CSS Hover Blink The CSS version is based on this code: .blink-eye-thumb { display: block; transform-origin: center; will-change: transform; } a:hover .blink-eye-thumb, a:focus-visible .blink-eye-thumb, .blink-eye-thumb:hover, .mishmash-bubbles:hover .blink-eye-thumb { animation: bubble-eye-blink 850ms ease-in-out 2; } @keyframes bubble-eye-blink { 0%, 12%, 40%, 100% { transform: scaleY(1); } 20%, 26% { transform: scaleY(0.08); } 48%, 54% { transform: scaleY(0.14); } } The animation compresses the image vertically on hover/focus. To ensure it works everywhere, it targets: ...

Rotate PDF files properly
While preparing for a concert yesterday, I needed to copy a bunch of scores (in PDF format) over to a pad. They were all from different sources, and some had been scanned upside down. They looked fine on my computer, so I couldn’t understand why they ended up being shown upside down on my pad. After some investigation, I realized that it was because the rotation was written into the metadata of the file. This worked fine on my laptop but not in the score reader program on my pad. If you want a file to be truly rotated by 180 degrees, you should rotate and then flatten that rotation so the orientation is baked into the PDF. ...
Cleaning Up the MishMash Cube SVG Image
Some weeks ago, I wrote about how I modified the SVG image of the MishMash “bubbles”. Today, I got around to doing a similar process with the MishMash “cube”, an illustration summarising how we want to work in MishMash. The cube The idea of the cube is to present the work packages that structure the organisation, the perspectives that are central to all our work, and the approaches which describe the methods used. One of the aims of MishMash is to enable true interdisciplinary collaboration, and the idea is that the cube will assist us with communicating the multidimensionality of such an endeavour. ...
Modifying SVG images
I have previously written about the MishMash emblem and how I cropped it in a text editor. This was based on the fact that an SVG image is a “vector image” in which all elements are described programmatically. So what appears as an image on screen: is, in fact, an XML file with information. Ever since I discovered this, I thought it could be fun to script changes to the SVG. However, when I opened the file to inspect the content, I quickly realised that it wasn’t as easy as that: ...

Printing booklets from a PDF
A little while ago, I wrote about how to prepare a document for multi-page printing using the terminal. Today, I had to find a solution for printing a PDF in “booklet” mode, meaning that pages are printed so that, after folding the printed sheets in half and nesting them, the page order reads correctly. On Linux (Ubuntu), I use the pdfbook2 command — a wrapper around pdfjam that reorders pages for booklets. See the pdfjam documentation on CTAN (https://ctan.org/pkg/pdfjam) and the TeX Live distribution (https://tug.org/texlive/) for installation; on Debian/Ubuntu it’s usually available via the texlive-extra-utils package (https://packages.debian.org/search?keywords=texlive-extra-utils). ...

Hyperscanning with fNIRS
Today, we had an engaging fNIRS workshop at RITMO. One of the tasks we explored was “hyperscanning,” a term that confused several of the non-psychology people present. I was also bewildered when I encountered this term for the first time, so here is a short blog post to explain what it is. What is Hyperscanning? The short answer is that hyperscanning is the simultaneous recording of neural or physiological activity from two or more people to study interpersonal brain dynamics. ...