h a c k o r a m a

By Kishan Thomas Since 1999

mbos

Saturday, 20 June 2026

Convert SVG files into a 3D STEP file for 3D printing.

$ mbos test.svg per-color-multi-layer.step
$ mbos test.svg single-layer.step          --flat
$ mbos test.svg multi-layer.step           --flat 2 --flat-map "1:#fafafa,0:#aa0000"
$ mbos test.svg outline.step               --seal --seal-color #FF0000 --seal-base-color #FFFFFF
$ mbos test.svg relief.step                --relief
$ mbos test.svg curved.step                --curve --curve-angle 50
$ mbos test.svg base.step                  --base --base-border 0.1 --base-color #AAAAAA
$ mbos test.svg base-curved.step           --base --base-shape outline --base-curve --curve-angle 50
Single LayerMulti Layer
single-layer.stepmulti-layer.step
Outline modeWrap around curved surface
outline.stepcurved.step
Add a base layerAdd a curved base to flat multi layer model (base with minimal filament swap)
base.stepbase-curved.step
Per color multi layer (3D print with minimal filament swap)
per-color-multi-layer.step

https://github.com/hackorama/mbos

Python app built with LLM assisted code generation and leveraging excellent open source work of CadQuery, OpenCASCADE / OCP, vtracer, Pillow etc.

Petti

Saturday, 07 March 2026

Petti Design

Petti Design (PDF)

Hand crafted ornate jewelry box made of brass mounted hardwood following the traditional Kerala Thachu Shastra architecture style, originating from the Malabar region of Kerala, India in 14 century.

Petti 3D prints

Modeled in Autodesk Fusion 3D. Parametric design with a base model allows easy design variations.

Kaaliforniya

Thursday, 20 February 2025

Kaaliforniya

Kaaliforniya Design Booklet (PDF)

Kaaliforniya

Modern day racing Chundan Vallam design with lower stern and bow height, a thinner hull profile that is 'U' shaped compared to older 'V' profile. Dimensions follow traditional design and is within Nehru Trophy boat race guidelines. Ornamental designs follow the traditional "navagraha" and "churul" patterns updated for modern sensibility. Seats more than 90 main rowers and supports the full 111 team size.

Dev shell profile

Friday, 08 March 2019

Development shell profile for bash, vim, git consolidated as devprof with easy install update on any server quickly.

bash <(curl -s https://raw.githubusercontent.com/hackorama/devprof/master/devprof.sh)

Plethora

Sunday, 28 February 2016

New hackorama project pushed to github, Plethora

Plethora

Cloud

Sunday, 08 November 2015

Now running on the cloud via Digital Ocean

[kitho@valyrian ~]# dig hackorama.com ANY +short
162.243.123.74
ns3.digitalocean.com.
ns1.digitalocean.com.
ns2.digitalocean.com.
ns1.digitalocean.com. hostmaster.hackorama.com. 1447211821 10800 3600 604800 1800
10 mailstore1.secureserver.net.
0 smtp.secureserver.net.
[kitho@valyrian ~]#

15 Years

Wednesday, 03 September 2014

15 Years of Hackorama, live since 1999-09-03 19:20:25

hackorama logos

Java Properties in Python

Wednesday, 04 July 2012

Get code from GitHub

Read the key, element pairs from a java properties file

while natural_line:
    # skip blank lines and comment lines, process only valid logical lines
    if natural_line.strip() and COMMENT_LINE.match(natural_line) is None:
        logical_line = natural_line.lstrip().rstrip(LINE_BREAKS)
        # remove multi line delim and append adjacent lines
        while MULTI_LINE.match(logical_line):
            logical_line = logical_line.rstrip()[:-1] + propfile.readline().lstrip().rstrip(LINE_BREAKS)
        pair = SPLIT_DELIM.split(logical_line, 1)
        if len(pair) == 1: pair.append(DEFAULT_ELEMENT)
        pair = [re.sub(VALID_ESC_DELIM, '', item) for item in pair]
        pair = [re.sub(ESCAPED_ESC_DELIM, ESC_DELIM, item) for item in pair]
        pair = [unicode(item, 'unicode_escape') for item in pair]
        result[pair[0]] = pair[1] # add key, element to result dict
    natural_line = propfile.readline()
return result

Follows the java properties file format) and tested against the Java 6 version of java.util.Properties

Get code from GitHub

AnyOption on GitHub

Saturday, 10 December 2011

After almost 10 years, many bug fixes and users around the world, moving AnyOption to GitHub

ABC123

Tuesday, 29 July 2008

Get ABC123 from GitHub

Created for my toddler to play on the laptop and learn alphabets and numbers.

This was way before tablets and thousands of applications for kids.

Bare bones single window application that will go full screen and will only respond to alphanumeric key strokes and won't lose focus.

screenshot screenshot screenshot

Get ABC123 from GitHub

Mytago Tag Processing Tech Demo

Saturday, 31 May 2008

Get Tag Video Decoder from GitHub

Archiving the code remains of Mytago tag system project from 2006. Developed for J2ME/Symbian phones and was obsoleted by the smart phone era with better camera and processing power.

See all related projects and information at the Mytago page

Video: https://player.vimeo.com/video/104111021 (hosted on Vimeo, not downloaded)

This is a technology demonstration of tag image processing from a live video stream, using the webcam on a windows system as the video source.

Download VDecode.exe demo binary and try out on any windows laptop with webcam. (hosted on Dropbox, not downloaded)

Use this demo tag as input

Demo Tag

Get Tag Video Decoder

Glass

Friday, 04 March 2005

Java3D psuedo transparent window hack.

Java GUI API's (AWT/SWING) or Java3D does not provide transparent windows or shaped windows like other platform specfic API's like X/Motif or MS Windows API.

Glass Screenshot

This is a hack for a psuedo transaprent window using Java Robot API to do a screen capture and using it as the background on the Java 3D wiew on a JWindow created without any window decorations.

Get Glass from GitHub

AnyOption

Thursday, 12 July 2001

Get AnyOption from GitHub

AnyOption is a C++ class for easy parsing of complex commandline options. It also parses options from a rsourcefile in option value pair format.

AnyOption implements the traditional POSIX style character options ( -n ) as well as the newer GNU style long options ( --name ). Or you can use a simpler long option version ( -name ) by asking to ignore the POSIX style options.

AnyOption supports the traditional UNIX resourcefile syntax of, any line starting with "#" is a comment and the value pairs use ":" as a delimiter.

An option which expects a value is considered as an option value pair, while options without a value are considered flags.

Please read the header file for the documented public interface, and demo.cpp for an example of how easy it is to use AnyOption.

  • July 2001, Original version
  • August 2004, added bug-fixes, and updates send by Michael Peters of Sandia Lab.
  • September 2006, fix from Boyan Asenov for a bug in mixing up option type indexes.
  • July 2011, fix from Min KJ and Costantino G for string allocation.
  • Dec 2011, Moved to Github

Get AnyOption from GitHub

Hackorama

Friday, 03 September 1999

1999-09-03 19:20:25 : hackorama.com registered through register.com and hosted on lcoal bay area provider Hurricane Electric using shared cohosted Linux server with Apache web server and full SSH acces.

Handcrafted content with mostly static content with some dynamic content using SSI, PHP and JavaScript.

Hackorama 1999 Logo