You are browsing as a guest. Sign up (or log in) to start making projects!

hatya-mouse

@hatya-mouse

Joined May 31st, 2026

  • 12Devlogs
  • 6Projects
  • 2Ships
  • 30Votes
16yo Japanese Kosen student fascinated with Rust.
Ship Pending review

# HydroPad
HydroPad is a macropad with some holes for the water to go through, designed for people with palmar hyperhidrosis.

## Why I created this
I have palmar hyperhidrosis and that makes it hard to clean up keyboards, because sweat goes into the keyboard's frame. So I designed a hackpad that has a hole that allows me to get the water out of it.

Video of Project → See source code →
Open comments for this post

5h 39m 19s logged

KASL module system improvement

So far, KASL compiler didn’t allow us to import external programs with the same name, because the name of the namespace conflicts. Today I have added new alias feature, which can be used like this:

import foo as bar

With this syntax, you can import a program named foo.kasl and refer to it with bar.
This can also improve readability when importing a file with a long name!

Streamline compilation

I wanted to try compiling Kadent to application that can be installed using an installer, instead of a simple executable binary. I found Taskfile, which is a build tool similar to make but uses a yaml file to define workflows. I found it very useful so I adopted it and it worked very well! Currently I only have workflow for macOS compilation but I want to add Windows and Linux support soon!

KASL module system improvement

So far, KASL compiler didn’t allow us to import external programs with the same name, because the name of the namespace conflicts. Today I have added new alias feature, which can be used like this:

import foo as bar

With this syntax, you can import a program named foo.kasl and refer to it with bar.
This can also improve readability when importing a file with a long name!

Streamline compilation

I wanted to try compiling Kadent to application that can be installed using an installer, instead of a simple executable binary. I found Taskfile, which is a build tool similar to make but uses a yaml file to define workflows. I found it very useful so I adopted it and it worked very well! Currently I only have workflow for macOS compilation but I want to add Windows and Linux support soon!

Replying to @hatya-mouse

0
1
Open comments for this post

2h 40m 56s logged

Project creation dialog

I’ve implemented new project creation dialog. You can specify the name of the project and select the folder using a picker from the system.

Project creation dialog

I’ve implemented new project creation dialog. You can specify the name of the project and select the folder using a picker from the system.

Replying to @hatya-mouse

0
1
Open comments for this post

2h 19m 25s logged

Implemented splash screen

I’ve finally finished implementing the splash screen for Kadent. On the left side, there are two buttons for creating or opening a project. The right panel shows the recent projects.

Challenge

The biggest challenge in implementing the splash screen was to layout UI components. It was quite hard to center the logo and the buttons. I spent around 1hrs dealing with that problem.

Here’s how I solved it:

const BUTTON_WIDTH: f32 = 300.0;
const BUTTON_HEIGHT: f32 = 42.0;
const CONTENT_HEIGHT: f32 = 60.0 + 12.0 + 16.0 + 24.0 + 12.0 + BUTTON_HEIGHT * 2.0;

impl SplashUi {
    pub(super) fn splash_controls(&mut self, ui: &mut egui::Ui) -> Option<EditorTransition> {
        ui.vertical_centered(|ui| {
            // Add space to vertically center the UI parts
            ui.add_space(full_height / 2.0 - CONTENT_HEIGHT / 2.0);
            // UI Components
        })
        .inner
    }
}

Since centering both horizontally and vertically while calculating the height of the inner content is painful, I eventually hardcoded the height of the UI components in order to center the UI vertically.

Logo

I’ve also designed a logo for Kadent in the meantime. I tweaked the font called “Inter”, which is available on Google Fonts, for the logo.

Implemented splash screen

I’ve finally finished implementing the splash screen for Kadent. On the left side, there are two buttons for creating or opening a project. The right panel shows the recent projects.

Challenge

The biggest challenge in implementing the splash screen was to layout UI components. It was quite hard to center the logo and the buttons. I spent around 1hrs dealing with that problem.

Here’s how I solved it:

const BUTTON_WIDTH: f32 = 300.0;
const BUTTON_HEIGHT: f32 = 42.0;
const CONTENT_HEIGHT: f32 = 60.0 + 12.0 + 16.0 + 24.0 + 12.0 + BUTTON_HEIGHT * 2.0;

impl SplashUi {
    pub(super) fn splash_controls(&mut self, ui: &mut egui::Ui) -> Option<EditorTransition> {
        ui.vertical_centered(|ui| {
            // Add space to vertically center the UI parts
            ui.add_space(full_height / 2.0 - CONTENT_HEIGHT / 2.0);
            // UI Components
        })
        .inner
    }
}

Since centering both horizontally and vertically while calculating the height of the inner content is painful, I eventually hardcoded the height of the UI components in order to center the UI vertically.

Logo

I’ve also designed a logo for Kadent in the meantime. I tweaked the font called “Inter”, which is available on Google Fonts, for the logo.

Replying to @hatya-mouse

0
1
Open comments for this post

7h 17m 45s logged

Kadent — A DAW with custom language to create synths and effects

Refactored project strucure

As my codebase became bigger, it started to be a bit complicated, so I’ve refactored the codebase. New folder structure is consist of four directories in src/ directory: commands, core, storage, and ui.
commands directory contains the audio engine communication logic. It has some functions like add_note that adds a new note to the specified track and sends the updated project to the audio thread.
core directory contains KASLNode implementation and some metadata. KASLNode is a specific node that can literally execute KASL programs. Metadata is a data that are not necessarily tied to audio engine. It includes track colors, track names, region names, etc.
storage directory contains some implementation for storing and loading files. It has a logic to save and load the Kadent project file.
ui directory contains the UI implementation. Inside the ui directory, there are components, theme, and workspaces directories. components directory has some common UI parts used in various parts of the DAW. theme defines colors and size used in the UI. workspaces contains the UI implementation for the editor and the splash screen.

Splash screen

I’m currently implementing a splash screen for Kadent. It used to have just two buttons to create or open a project. I’ve just finished implementing “Recent Projects” list. (shown on the right side)

Kadent — A DAW with custom language to create synths and effects

Refactored project strucure

As my codebase became bigger, it started to be a bit complicated, so I’ve refactored the codebase. New folder structure is consist of four directories in src/ directory: commands, core, storage, and ui.
commands directory contains the audio engine communication logic. It has some functions like add_note that adds a new note to the specified track and sends the updated project to the audio thread.
core directory contains KASLNode implementation and some metadata. KASLNode is a specific node that can literally execute KASL programs. Metadata is a data that are not necessarily tied to audio engine. It includes track colors, track names, region names, etc.
storage directory contains some implementation for storing and loading files. It has a logic to save and load the Kadent project file.
ui directory contains the UI implementation. Inside the ui directory, there are components, theme, and workspaces directories. components directory has some common UI parts used in various parts of the DAW. theme defines colors and size used in the UI. workspaces contains the UI implementation for the editor and the splash screen.

Splash screen

I’m currently implementing a splash screen for Kadent. It used to have just two buttons to create or open a project. I’ve just finished implementing “Recent Projects” list. (shown on the right side)

Replying to @hatya-mouse

0
1
Open comments for this post

1h 21m 55s logged

Implemented multithread track processing for the audio engine using Rayon!
I used to think implementing multithreading would be a nightmare, but I utilized Rayon which was actually very intuitive and easy to use.

The screenshot shows the exact code where the tracks are being processed in parallel.

Implemented multithread track processing for the audio engine using Rayon!
I used to think implementing multithreading would be a nightmare, but I utilized Rayon which was actually very intuitive and easy to use.

The screenshot shows the exact code where the tracks are being processed in parallel.

Replying to @hatya-mouse

0
2
Ship

I made a device to provide 3V plugin power to microphones using CR2032 coin battery.

# Why I built this?
I built this because I wanted to make use of my microphone which required 2-5V plugin power. I had nothing that can provide some power to the microphone, and there weren't any products at affordable prices.

# How can I try it?
This is a hardware project, so if you really wish to try it yourself, please make one yourself!

  • 3 devlogs
  • 1h
Video of Project → See source code →
Open comments for this post

30m 3s logged

Finished soldering the plugin power supplier!
It works perfectly when connected to microphone

Finished soldering the plugin power supplier!
It works perfectly when connected to microphone

Replying to @hatya-mouse

0
4
Open comments for this post

16m 55s logged

Implemented simple encoder and oled process to firmware

Implemented simple encoder and oled process to firmware

Replying to @hatya-mouse

0
2
Open comments for this post

19m 33s logged

Finished designing the PCB and the case and finally started implementing the firmware!

Finished designing the PCB and the case and finally started implementing the firmware!

Replying to @hatya-mouse

0
2
Open comments for this post

2h 56m 16s logged

I am working on a WASM backend for my KASL language!

I am working on a WASM backend for my KASL language!

Replying to @hatya-mouse

0
343

Followers

Loading…