HN user

shikaan

290 karma

I run some open source projects at https://github.com/shikaan

Posts36
Comments41
View on HN
htmx.org 1mo ago

Code Is Cheap(er)

shikaan
2pts0
phys.org 1mo ago

Researchers teach brain cells to play 'Doom'

shikaan
2pts0
ratfactor.com 2mo ago

Ascetic Computing

shikaan
5pts0
github.com 4mo ago

Show HN: OSle – A 510 bytes OS in x86 assembly, now with a C API

shikaan
2pts0
github.com 4mo ago

A terminal-based KeePass password manager

shikaan
2pts0
gizmodo.com 6mo ago

X to open source their recommendation engine

shikaan
3pts0
shikaan.github.io 6mo ago

An x86 assembly introduction for high-level programmers

shikaan
4pts1
github.com 7mo ago

Show HN: A terminal-based KeePass password manager

shikaan
3pts0
www.humblebundle.com 11mo ago

Humble Bundle: Software Architecture

shikaan
2pts0
github.com 11mo ago

A Lisp in 99LOC

shikaan
108pts26
github.com 1y ago

Show HN: Lifp – A Lisp Built on Bun

shikaan
4pts0
github.com 1y ago

Show HN: A terminal-based KeePass password manager

shikaan
2pts0
github.com 1y ago

Show HN: OSle – A 510 bytes OS in x86 assembly

shikaan
160pts32
github.com 1y ago

OSle – A 510 bytes OS in x86 assembly

shikaan
8pts1
www.humblebundle.com 1y ago

Humble Bundle: Computer Science The Fun Way

shikaan
1pts0
github.com 1y ago

A ray caster tutorial in ASCII art

shikaan
3pts0
github.com 1y ago

Keydex v0.4.0 – A KeePass Terminal Password Manager

shikaan
2pts0
github.com 1y ago

Ollama Chat – Ollama Chat Interface for VSCode

shikaan
4pts1
shikaan.github.io 1y ago

A Friendly Introduction to Assembly for High-Level Programmers – Part 3

shikaan
3pts0
shikaan.github.io 1y ago

A Friendly Introduction to Assembly for High-Level Programmers – Conditionals

shikaan
2pts0
shikaan.github.io 1y ago

A Friendly Introduction to Assembly for High-Level Programmers

shikaan
286pts60
www.contentful.com 1y ago

Contentful Acquires Ninetailed

shikaan
1pts0
news.ycombinator.com 1y ago

Ask HN: Who's using Zig in production? For what?

shikaan
3pts0
www.youtube.com 2y ago

Creating a Doom-style 3D engine in C (2015) [video]

shikaan
45pts7
github.com 2y ago

Libsid: A retro audio chip emulator in C

shikaan
1pts0
news.ycombinator.com 2y ago

Ask HN: Ever made a programming language at work? Why?

shikaan
4pts2
github.com 2y ago

Show HN: Shmux – script runner for almost any language

shikaan
2pts2
github.com 2y ago

Keydex – CLI Password Manager

shikaan
1pts0
pickcells.vercel.app 2y ago

Show HN: PickCells – Procedurally Generate Pixel Art

shikaan
10pts0
status.unity.com 2y ago

Unity Services Are Down

shikaan
3pts0

A native application (Windows, Linux, MacOS) for music transcription.

It comes with time stretch and pitch shift as most of these softwares do, but it allows you to save loop regions and take notes. It's designed to be a practice session tool.

I'm doing it from first principles, and having fun writing GPU code, platform shims, and squeeze every ms I can to make it fast and smooth.

I will be looking for testers soon. If anybody is interested, hit me up.

I have played with that idea for a while until I realized I was creating a poor man's web browser in the terminal.

At that point I started wondering if converting my man folder to HTML and using lynx[1] wasn't a better idea.

I ended up using vanilla man again.

Are there better/fancier manpage readers out there that can change my mind?

[1] https://lynx.invisible-island.net/current/

Honestly, I made it up :)

I thought about what would be the minimum I have to build in order to run some userland software that does "something". That to me looked like: spawn guest applications, make them persist something.

With slightly more leeway, I would probably do memory management as the next thing (besides what I mentioned in another thread here)

Hey, thanks for your interest in this project!

3. The tty interrupt advances the cursor along with printing. So, once again, I do it to save on some instructions. In the first iterations I wanted to retain more control (by printing and moving as separate operations) so that I could reuse this across the board, but eventually I ran out of space.

4. I am relying heavily on BIOS interrupts, which are criminally underdocumented. The most reliable source is Ralph Brown's documentation[1] which is very far from what I was expecting to be authoritative documentation. Turns out this collection is really good and basically _the_ source of truth for BIOS interrupts.

To answer your question, yes, this is basically calling the BIOS API.

[1] https://wiki.osdev.org/Ralf_Brown's_Interrupt_List

I would have assumed the same, but I haven't managed. On the other hand, I did not tinker too much with all these toggles; it's such a little amount of shared code (which is also partially different in some cases) that didn't particularly make sense to me.

If you know how to make it happen and/or want to contribute, hit me up (:

1. If you look through the commit history, you'll see that the first implementation was actually with Pascal strings.

Printing with Pascal strings is actually shorter (you skip the null test, basically), but constructing Pascal strings to pass as an argument when they are not constants yielded much more code to prepare for that call. Had I had more leeway, I would have used Pascal strings, it much less headache.

2. Files in `/bin` all include from the SDK. You can pretty much do the same for utility functions.

The includes, at least in nasm, are very much like copy-pasted code (or includes in C for that matter), and then you can just jump/call to the label.

I did not do it because I haven't been able to get nasm to optimize away the code that I don't use, and I didn't want to bloat the binaries or make a file for a 5LOC function.

All in all not good reasons in general, but it made sense to me in this context.

Hey, thanks for taking a look!

On the former, I have no idea how to estimate BIOS functions size. Maybe I could just peek into an image and get a sense for it...

On the latter, with a 16x increase in available space, I guess I would do a much more thorough work in putting guardrails in place.

The API currently comes with a couple of traps (e.g., file names can be duplicated, processes are cooperative, all file operations perform disk I/O...) and it essentially requires guest applications to know about BIOS services in order to function.

Another sticky point I wish I had the space to address better are calling conventions, which I had to get rid of almost immediately to save on instructions.

Thanks for pointing me towards the bosh emulator.

You're welcome! Bochs is such a nice tool which I discovered only for this project as well. It was a no-brainer, since I got no way to debug 16-bit assembly from QEMU (unless you go off and fork it[1])

[1] https://gist.github.com/Theldus/4e1efc07ec13fb84fa10c2f3d054...

I went back and forth about the file system and disk stuff a fair bunch, to be honest. Most of it, as you say, was mostly due to wrestling the space constraints.

If one day I'll give in and take the shell out or go multi-stage, I will definitely look at that.

Maybe it's worth blogging about the journey; it's been a few weeks of merciless trade-offs to reach a usable API. It can make for a fun read (:

Thanks for taking a look!

The -le suffix is used in south of Germany for the small version of something. So OSle stands for small OS.

I'm not a native speaker, so maybe somebody else can paint a better picture. I used it just because part of my extended family comes from there (:

EDIT: s/prefix/suffix/

Hey all,

As a follow up to my relatively successful series in x86 Assembly of last year[1], I started making an OS that fits in a boot sector. I am purposefully not doing chain loading or multi-stage to see how much I can squeeze out of 510bytes.

It comes with a file system, a shell, and a simple process management. Enough to write non-trivial guest applications, like a text editor and even some games. It's a lot of fun!

It comes with an SDK and you can play around with it in the browser to see what it looks like.

The aim is, as always, to make Assembly less scary and this time around also OS development.

[1] https://news.ycombinator.com/item?id=41571971

As a follow up to my relatively successful series in x86 Assembly of last year[1], I started making an OS that fits in a bootloader.

I am purposefully not doing chain loading or multi-stage to see how much I can squeeze out of 510bytes.

It comes with a file system, a shell, and a simple process management. Enough to write non-trivial guest applications, like a text editor. It's a lot of fun!

Not quite done with it yet, but you can see the progress here https://github.com/shikaan/OSle and even test it out in the browser https://shikaan.github.io/OSle/

[1] https://shikaan.github.io/assembly/x86/guide/2024/09/08/x86-...

If anything, I know people contemplated the opposite (i.e., finding a less hype-driven job)

I think it's anyway not a strong reason to leave or stay, at this point. It's still "yet another technology", and I'd be surprised if it turned out to influence any decision in this regard.

Curious if anybody has non-anectodal data

This is so cool!

I went through similar struggles when I implemented my js emulator last summer (though, admittedly, FPS was never so low there).

You just made me wanna pick it up again (:

In a long train ride over the weekend I made this little tool to chat with Ollama from VSCode.

I don't like AI assisted code completion as I find it distracting, but I like the convenience of not changing windows to look up the signature of `.reduce`.

It's very basic and honestly quite buggy (take a look at the issues) but I thought I'd share it here. If somebody else finds it interesting I can polish it up.

Thanks so much! I am doing something similar to OP in my game engine, but I hand-rolled a font, which is readable but ugly af.

This is going to be such a source of inspiration! Do people have favorites from the list?

Hey, thanks for the feedback (:

The second article is still shaping up, but I felt like publishing it to get some early feedback. What you mention are a couple of the reasons.

At this point, I find it too dense (and it was even more so in first drafts) hence missing information. Maybe I should cut some parts, like the rip intro, and accommodate for more details about flags and conditions.

This is good signal for me. Thanks again for taking the time