Share your projects


Not really a project, just a little op-ed I put together about the chumby and the pebble. Not sure I like this format. I tend to ramble on in parts and it doesn't really form a cogent point. Playing around with some more CG compositing and effects though which I am really enjoying.



Hoping to do a vid about the Pandora/Pyra when I get one.
 
i didn't consider it rambling at all. nice format, and you made good points. not overly zealous for freedom, but highlighting the ramifications of our lack of it.
 
in case you didn't know: velocity and acceleration would each be a 2d vector if motion is constricted to a plane.

fuel should only need to be used up with acceleration.

i always wanted to make a relativistically correct 2d space game like this. but then, velocity is always relative to something else, so you wouldn't be able to write an absolute velocity in there...
 
In most of the universe, in a realistic relativistic game you'd automatically be in the orbit of something almost wherever you are, but I'm not sure motion relative to your mass center is a useful metric for a video game.
 
i had some wood sitting around (for about 2 years) for a box that was going to become a lamp, but now i think i'll put a vine-y type plant inside of it. still have one side with the frosted glass-type plastic though, kinda looks cool.
box.png
 
Today I overoptimized code by accident.

I'm doing something totally experimental. I'm trying to build a small BASIC microcomputer using AVR chips... In well-commented C. The thing is that I have lots of computing power (20MHz ATMega), but small memory (32kB for program, 2kB of RAM). So it is not designed to be fast, it's to be easy to understand.
So, the first thing: I connected 32kB of SRAM to Arduino Uno not using all pins, leaving a serial port and the I/O enough to multiplex it through multiple devices. And I start with programming BASIC interpreter.
So, it doesn't matter that I crammed a whole "editor", external memory management, tokenizer/detokenizer and some simple commands in 2kB of ROM having 32kB of it. I HAD to optimize it to use even less program memory! Wait... this 1kB of EEPROM looks nice...
So I came to the... Absurd String-lookup routine. OK, in my file it's commented as "Automated", not "Absurd". All who know microcomputer BASIC know that there must be some strings in the interpreter, like READY, BREAK AT, or NEXT WITHOUT FOR. These eat ROM which can be used for code, and they may not necessarily be in program memory.
So:
First, I write a list of short names and full strings in form of an array before a special code.
Then, I compile and bootstrap this code into uC's program ROM and start it, uC programs strings into EEPROM and sends me a #define list with offsets back through serial console.
Then I copy this define list to my main code and flash it into uC's program ROM.
The trick is that I use defines to address strings, they're stored in user EEPROM and ended with... no, not null-terminated but 8th bit-terminated. An exception is a strange bit combo which can be used to fill variables inside strings. They're not only written to console, but can be written with values in the middle.
Currently saved about 6 bytes of program memory and for some unknown reason avr-gcc shows me 9 bytes less in RAM, will be more when more error messages will come, now it's only a READY, ERROR and welcome message. After testing the solution I asked myself am I not overoptimizing the code?
So if someone asks what is overengineering in memory usage optimization, this is a nice example :D.
Or... maybe, as my friend from assembly language land said, if I don't re-use previous code as data it's not overoptimization?

Summing up:
Figuring out the overoptimized solution: 10 minutes.
Coding it including tool program: 15 minutes.
Testing and fixing: 10 minutes.
Forcing makefile to do this for me each time I flash the program to the chip: 3 hours.
 
I'm currently setting up one of my spare laptops for my mother to use. So far I've replaced the original hard drive with an SSD and downloaded an OS, all I need to do now is install the aforementioned OS and decontaminate the laptop.
 
As most of my projects sit of the shelf of purgatory, I thought I'd have a go at a game jam.
I'm having a go at "A Game By It's Cover"

I picked "Connection", and my game is based around keeping all your devices charged. Gameplay style similar to Mini Metro and SuperNode

I'll post more if and when I get something interesting to see
 
As most of my projects sit of the shelf of purgatory, I thought I'd have a go at a game jam.
I'm having a go at "A Game By It's Cover"

I picked "Connection", and my game is based around keeping all your devices charged. Gameplay style similar to Mini Metro and SuperNode

I'll post more if and when I get something interesting to see
Thats a cute idea, I'd like to see what you come up with!
 
Okay, here's a couple of videos

This was a project that's intending to be run at parties (hence the name). Basically, a bunch of small titles that you can compete for score on

And here's Connection's current state:
 
I'm working on a monitoring tool (on and off for a few years now).

It includes all concepts I have learned over the years, for example:

A good set of options to relay information on state changes, or each time. ONBROKEN only get's called once, ONERROR multiple times, until it is fixed..
100002010000028E0000019FC1708084.png.jpg
The "yeah, the website is down until you have 2 measurements of down..." means I allow for ONDEGRADED
10000201000002A000000105FBBCFD50.png.jpg
Of course, there are maintenance things, like looking for a if-this-file-exists-we-do-not-escalate (unless this file is older than xxx, then delete it and just monitor), or calculating weekends.
100002010000028800000102549B7E91.png.jpg
The thing I am proud of adding is decay. The first few minutes an error is important, but if it's down for a day... meh, do not propagate the error each cycle, instead, just send an hourly reminder (just in case the event is closed instead of increasing the duplicate counter in a monitoring DB).
This way, the monitoring does not overload the central server with monitoring events, but still runs locally each cycle, so it is able to react fast.
10000201000003D700000178FA358EA3.png

It also has timezones per monitoring check, so you can monitor websites in Singapore (that do not have summer/winter time) without having to change your active hours each 1/2 year...
It features TEST dependencies, so that if your Oracle process is down, you will not need to check for Oracle data-consistency.
And the configuration file is ini based, with weird injections (so you can define a test with minimal parameters (only the process name), and the rest gets added automatically (the severity, the error action, etc)). This implementation of ini allows for multiple same named fields, which get converted into an array and are executed in that order.
It's honed like a Damascus steel sword, keeping the code small (under 40k) and passing it through NYT Profiler many times to get the optimal speed.

It is used for when monitoring tools charge per monitoring item, you can collate the tests into one errormessage and save some money. Or when you have an Active-Active cluster, where components can run dynamically on either side of the nodes and need intelligent checks that can communicate with each other instead of going through central rules "if down here, but up there, then drop down event".
It also divides the responsibilities of defining good monitoring to the application teams, and leaving the responsibility for the default OS stuff to the monitoring team, while still being able to throttle the application monitoring, if required.
Also, the application team can log into a system, list a single directory, and see the status (there is a read-only webserver or should I say "*AAS", which implements 418 I'm a teapot, but it's not really production ready (security was bolted on), although it was deployed successfully)

Code:
[TEST_EXAMPLE]# a simple test example
MY_FILE=/tmp/ff.txt
RUNCHECK=` ! -f "${:MY_FILE}"
ONOK= echo "yes, test ${:} says file ${:MY_FILE} exists"
ONERROR= echo "no, file ${:MY_FILE} does not exist"
ONERROR= echo "yeah, and this gets executed too if an error is encoutered"
 
Back
Top