muhuk.com

Nature, to Be Commanded, Must Be Obeyed

Software

You can find software projects I have created or contributed on this page.

I wrote my first piece of code in 2003. My first language was Java (not a bad first language) but the first language I was actually productive with was Python. I wrote my first open source libraries using Python for Django framework.

Currently my favourite languages are Rust & Clojure. Rust, because it couples high-level language features (strong type system, safety, etc.) with a low-level language (high performance & low resource usage). Clojure, simply because of its elegance.

If you are a Blender user make sure you check out my addon meshstats.

meshstats

Blender Addon active
© 2020

meshstats is a Blender addon that provides mesh statistics on face counts and poles. It can also highlight tris, ngons & poles on the mesh in 3D viewport.

blender python

clecs

Library unmaintained
© 2015 – 2020

After reading Entity Systems are the future of MMOG development, I was fascinated by the conceptual design of Entitiy-Component Systems. This was back in 2014, during our visit to SigFig headquarters in San Francisco. Once the trip ended I started working on a Clojure library.

I had two extra goals on top of achieving basic ECS behavior:

  • Allow safe parallelization of systems without extra syntax by the user.
  • Take advantage of CPU caches by increased data locality.

First goal was attainable, clecs design supports automatic parallelization by defining the components a system reads and writes with the systems. It is just a matter of writing a scheduler to run the systems respecting the dependencies. Components not defineds as readable or writable cannot be accessed within the system code anyway.

I have researched about how I can achieve the second goal. It turned out to be quite challenging. The difficulty had little to do with Clojure and everything to do with how JVM manages memory. To ensure your component data stored in memory in contiguous manner you would need to resort using native data model. This was the main reason why I did not continue development of clecs.

If you want to try out a simple ECS in Clojure, clecs is functional.

Links:

clojure