Friday, December 27, 2013

Hardware Snapshots - 2013

A choice assortment of hardware designs from 2013.

Lambo Huracan

BRD RedShift

Mac Pro

Sunday, December 15, 2013

64 bit diaries

Part 1

Wanting to be a little more educated on the 64 bit front I have been doing some research, first up is the definitive architecture manual:

  AMD64 Architecture Programmer’s Manual Volume 3

After some reading it was time to start performing some BlitzMax experiments based on building a new bmk64 tool on OSX. 

Today's hypothesis is that given x86_64 is a superset of x86 then creating a 64 bit binary in BlitzMax should be possible by tweaking output of the x86 bcc tool.

Without access to the bcc compiler source my initial plan is to see how far I can get building 64 bit binaries just by tweaking the bmk tool.

My first iteration of bmk64 hardcodes the architecture to x86_64 and modifies bmk_util.bmx to build with the correct flags to produce 64 bit binary code on OSX.

After a couple of hours I now have bmk64 makemods producing the following type of errors:
  • /blitz.mod/.bmx/blitz.bmx.release.macos.amd64.s:55:suffix or operands invalid for `push'
  • /blitz.mod/.bmx/blitz.bmx.release.macos.amd64.s:58:32-bit absolute addressing is not supported for x86-64 
  • /blitz.mod/.bmx/blitz.bmx.release.macos.amd64.s:58:cannot do signed 4 byte relocation
Modifying bcc x86 output to use the stack in 64 bit mode sounds scary, learning about the new absolute addressing modes and reloc rules sounds quite educational...


OK, not that scary. Stack usage just needs to use 64 bit register names:


And then pooh learns about the Relative Instruction Pointer mode, more commonly known as ($PC)


And then, oh no, a snag....


Part 2

After blaming a missing out.Close in fasm2as it seems bcc mistreats any -o argument. Now fasm2as is embedded in bmk64 anyways which revealed an out of bounds array error with it's op[0] so that's fixed also.

The stack frame is pretty interesting in parts, address types need 8 bytes so the temptation is just to double every offset and rename all 32 bit registers to their 64 bit counterpart, offset->offset*2 etc. but that's obviously nuts and as an academic exercise I was hoping for more cheese.

The current prelog and epilog code bcc is generating to back up esp may also be deprecated, this will be confirmed when in part 3 we park bmk64 and start hand coding our own x86_64 .s files.

thanks to we have an interesting starting point, nasm style:

 section .data

 db "shit hot!", 0x0a

 section .text

 global start

 mov rax, 0x2000004   ; system:write = 4
 mov rdi, 1           ; stdout is 1
 mov rsi, msg         ; our message
 mov rdx, eom-msg     ; and size
 syscall              ; bang!
 mov rax, 0x2000001   ; system:exit = 1
 mov rdi, 0           ; success is 0
 syscall              ; bang!

oh, and todays hypothesis is - "the less we care about yesterdays hypothesis the better"

Saturday, November 30, 2013

music output

3 track loop I have been using for sax practise

a steinway recording from the new Main Stage 3

second release of electronica garbage band output

first release of electronica garbage band output

Sunday, November 17, 2013

AWS (amazon web services) notes and tribulations

incoherent ramblings from a single headed sysop...

The web cloud water closet of choice, which now has G2 allowing CG workers to use any old browser. I wonder if stylus data is a valid thing in web2.13, perhaps it could stream .png and be compatible with web1.995.

Note to self, default username on an aws linux machine is ec2-user

] sudo node ./server.js &
] jobs

Oh google, aws linux jobs, nah, man jobs, ja ha ha...

Ho google, kill jobs in linux, ja ha ha... is running again, curious how last session died, time for logging.

* add some logging to my primitive node.js server script
* reduce frame rate to reduce power consumption / laptop noise
* link to blog

Note to self 2:

] jobs -p
] sudo kill pid

Note to self 3:

> pstree -p
> sudo kill

Sunday, September 8, 2013


Stars in Touch077 can be made feeding a noise top (texture operator) into a levels top with it's black level set to .95 or so.

Another bizarre corner of the same application is the iso sop (surface operator) where math heads can jack straight in.

Touch 088 has just been released and the non-commercial license is a lot more generous on the feature front with C++ and Python operators support.

And an instancing bonanza began....

A 2D colour palette is easily grabbed from a movie and mapped to per instance entities on a simple grid making for some great kinetic sculpture effects.

Causing a new blog  to spawn here

Tuesday, August 20, 2013

nitrologic on bandcamp

My home on bandcamp.

Saturday, August 10, 2013

VRJam MileStone 1

I've entered a long jam format programming competition.

First deadline for the Oculus VRJam achieved with some balls

and some monkey source showing the new Oculus target in action

and some blue balls...

Saturday, August 3, 2013

Oculus Monkey

The Oculus Rift head mounted display is a lovely bit of VR kit.

After fluffing around in Windows chose MacOS as my first target due to superior rendering performance of GL on my GeForce 9400M lap warmer.

As there was a question about Blitz3D usage in the forums and the overall complexity of class level integration for Monkey is high, I am leaning towards a standard "C" glue layer that would fit all Blitz varieties instead of a specific Monkey solution.

A VRJam is underway this weekend, and I registered, so there is the matter of timing. A usable stub of Oculus SDK for Blitz3D, BlitzPlus, BlitzMax and Monkey is now the aim.

The SDK is apache open source, the stub will probably be the simpler zlib license.

If I had nothing better todo, I would be attempting to integrate a MAME component to drive virtual arcade machines. I am also big fan of the ideas notch (mr minecraft) has been sandboxing where VPU's are available as in game programmable objects.

Speaking of time:

Aug. 2 - VR Jam begins 9am PT 
Aug. 9 - Milestone 1 (image and game description) 
Aug. 16 - Milestone 2 (video of progress) 
Aug. 25 - VR Jam ends (final build submitted) 
Sept. 13 - Finalists announced 
Sept. 19 - Winners announced 
Oct. 3-6 - IndieCade Festival 2013 

Saturday, July 13, 2013

vintage restoration project

I recovered my old Marshall Artiste, what a beast, weighs 3 times heavier than it looks.

It has 2 channels.

Channel 1 is a bit fancy, there is Reverb (spring I think) and Presence and after playing through it this morning I discover can deliver a range of tone I am not use to. With Bass at 0 (programmer speak for 1) the volume is very quiet but adjustment lets me drive it at about what I would consider safe volumes for the speakers. For vocals volume at 10 is just at feedback levels for the mic I was using so it's OK but would be nice to have some headroom. 

Channel 2 is raw, only has bass, treble and volume but is spectacularly loud and any thing past 5 is possibly pretty bad for both speakers, ear drums, and neighborhood considerations. The signal increase on the bass channel is equally spectacular compared to what I am use to.

I am not sure if this is by design and I haven't worked out how to pump output of 1 into 2 (TODO).

The "brass" plate is pretty worn and most of the numbers are gone and I don't want to remove the sticker that says "Supplied by Van Gents Music 501 883 Greenlane, too many memories. Including a Fender Rhodes piano I would give my left nut to get back.

Last night after some research I was considering auctioning the thing  to raise funds for a new bass quad, but changed my mind after cleaning it up and playing on it for an hour this mornin. 

Before looking into restoring the speakers and cabinet I need to find someone better than last guy I took it to for a service...

Monday, June 24, 2013

Setting up of

A brief howto on configuring a node.js server on Amazon's EC2 cloud service.

How to use putty to talk to an Amazon cloud EC2 instance:

How to install node on Amazon cloud, (hint: compile it from source dummy)

How to link it to a brand new .com address within the hour...

and my first server in node:
  var http = require('http');
  http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('node.js up and atom\n');
  console.log('Server running on 80');

How to build ffmpeg from source on an EC2 instance:

Sunday, May 5, 2013

wonder ping

Pinging [] with 32 bytes of data:
Reply from bytes=32 time=167ms TTL=46

Pinging [] with 32 bytes of data:
Reply from bytes=32 time=33ms TTL=57

So 167ms to appspot and only 32 to 

Where is the love google? 


Update: 24 June


Pinging []
 with 32 bytes of data:
Reply from bytes=32 time=31ms TTL=57
Reply from bytes=32 time=32ms TTL=57
Reply from bytes=32 time=32ms TTL=57
Reply from bytes=32 time=32ms TTL=57

Wo, Thank You Amazon.

My first EC2 instance is running and it's only 32 milliseconds away in Sydney!

Tuesday, April 30, 2013

nCube v12 demo

Finally got something half way on app engine with a chat screen on top of my new wireframe engine called nCube.

Saturday, March 30, 2013

Sunday, March 10, 2013

Garage Band Intro

Musicians needing a bit more groove during practice time can replace their metronomes with the loop meister inside Apple's Garage Band.

  1. Start a new project, there is no blank template so select the guitar one
  2. Enter a name for the project and for the purposes of this tutorial set tempo to 140
  3. Once running use the apps Control menu and select Show Tempo in LCD
  4. Select the loop browser, bottom left, third icon in. and select the filters Rock Blues, and Kits.
  5. Select from the Green note icons in the list to audition each option
  6. While auditioning the Tempo display at bottom middle of the display can be dragged up and down.
There are many high quality loops to be found.

Find something you like, dial up your resonant tempo, crank up the volume and practice those riffs till your fingers bleed. 

For some auditioning loops as a metronome replacement is possibly as good as it gets on the desktop version of Garage Band.

For more advanced users :

  1. Drag the green icons onto the worksheet to add new channels of sequenced drums
  2. Drag from the right edge of new tracks blocks to add loops
  3. Copy and paste the blocks to mix it up
  4. Enable loop mode - immediately right of the blue on black LCD panel
  5. Drag yellow loop bar (located above track display) from edge to edit duration
  6. Show the piano roll and scroll down two octaves to edit drum notes
  7. Use the Show Keyboard option to trigger and record notes from the keyboard

For more intuitive drum programming Caustic running on Android is recommended as a more old school alternative to the above.

Saturday, March 9, 2013


I had been thinking about an old friend and found this tribute by her Dad.

Cathy and her family were something special.

Arrested development meets Monty Python.

Cathy had the best birthday parties I have ever been to.

Wednesday, January 2, 2013

roboto font page

More Unicode madness with a  mod to fontshop, a BlitzMax script that produces image fonts for Monkey projects.

Next stop I suppose is some Kanji but first some more testing with this current subset.