Someone once tried to tell me their are no absolutes in the universe when it came to beliefs in regards to philosophy and or religion. I corrected them, without a long explanation, the answer to that question is mathematics. The one universal language in helping understand almost everything.

One of the most fundamentally overlooked pieces of mathematics is non mutual exclusivity or in general something that is not mutually exclusive. This holds some basis in quantum mechanics, artificial intelligence, compression, information theory, as well as almost everything people encounter in daily life but just don’t know how to resolve.

The best non-mathematical definition that I’ve come across that suits the above for me, would be: *“If two things are not mutually exclusive, it means the existence and occurrence of one does not necessarily mean the other cannot coexist.”*

## Not Mutually Exclusive or Non Mutual Exclusivity

## Bitcoin – not here to stay, my opinion.

When bitcoin first arrived on the scene I remember my brother telling me about it. I followed up with some reading. It looked interesting, a universal currency that is self accounting and ownership is whoever has possession. As time went on, bitcoin took off in certain markets and accepted in others, as well as artificially inflated in value. Then a collapse happened which included insurance scams and un-tracebility of ownership of currency.

This brought up multiple questions and also multiple issues and problems with the currency that in my opinion should be banned. The elusive ransomeware requests payment in bitcoins (correct me if I’m wrong) , the holding companies who traded bitcoins have been robbed or they robbed themselves and there is no end in sight. I would consider bitcoins a black market currency.

The currency needs to be legislatively stopped in developed countries. Major providers need to stop accepting Bitcoins as valid currency. There is a major flaw in it, larger than ransomware and larger than the insurance claims. It is unfortunate that is has spread like wildfire, I hope it dies out soon.

## Activation Function – A Cubic Hermite Spline ? This is no Sigmoid!

In the midst of writing my semi-neural net compressor I have introduced a scaling function based off the premise of an Activation function for a neural net – stretch and squash. Because I always work within a normalized domain of 0.0 to 1.0 I was looking for a logarithmic type function that would work similar to a sigmoid to bring my probabilities closer to a best guess or at least a better prediction.

Below is a graph showing a hermite basis function of a Cubic Hermit Spline , which acts as a sigmoid in the domain of 0.0 to 1.0. The function is very simple and results are phenomenal. In comparison I show a linear curve, of course with no scaling and a hyperbolic tangent that obviously is skewed to fit within the domain 0.0 to 1.0. I have also tested other functions such as log sigmoid and double exponential sigmoid with decent results. This simple function results in a logarithmic curve that seems to produce amazing results. Of course outside the domain I use, the function is definitely a fake sigmoid.

The formula is very basic: p(x) = -2x^3+3x^2

* ^ = exponent

## Generic Compression Workflow

I’ve been developing compression techniques for 17 years now and have many unpublished items. One great thing about compression is it never gets old. Data never changes and Moores law does not apply to the field of digital compression. Data compression is bound by speed, memory, compression ratio very similar to the business triangle of quality, speed, and price.

My most recent soon to be published experimental work follows a generic workflow for compression which I believe can be useful for future rapid development and testing.

The below workflow allows for a base accumulator or multiple accumulators, multiple predictors using different accumulators (models). Those predictors would be put through a mixer or number of mixers. After the mixers produce a final refined prediction of the best guess to the encoder or decoder (depending on the input being a compressed or uncompressed file) and outputs the code or original information and continues along the process back to the accumulator.

What are the benefits of this type of model ? So far it allows for rapid testing of different mixing strategies, different models for predicting, and different rates of change for accumulating statistics. This workflow also allows for the creation of a neural network mixed with traditional compression techniques.

An example of this beneficial strategy is that adding a predictor has no impact or change on the accumulator, multiple predictors can be swapped out or tested at anytime. Changing the accumulator will however have an impact on the predictor using that accumulator as well as the mixer.

## X-Hex Production Re-started

X-Hex is moving along. I have updated the graphics and started production on my new IMAC. Unfortunately there is a bug with the production software that is causing a delay. I would like to get everything ready to post another video soon (It’s been two years). Let me know what you think.

## X-Hex Grid Preview

A little preview of the Grid used in X-Hex. With over 40 3D universes, dynamic HD lighting, and physically based rendering, X-hex has an amazing visual and varied atmosphere.

Click on the images below for a full HD preview.

## Q Submit – Helpdesk Ticket Submission

I wrote this piece of software to compliment my article about IT Metrics (https://chrischunick.com/?p=142). This software allows the process of gathering statistics to be enhanced through the efficiency of automation to quickly submit a ticket without having to login to a ticketing system. The program interfaces with a backend (currently spiceworks), and allows the end user to submit multiple tickets one after the other or simply shrink the software to be left out of sight until another ticket comes up. The current user is the logged in user, email is parsed from Active Directory.

Tickets can be written down throughout the day and entered at a later time, entered as an email, entered as a phone call comes in, or if an individual walks in requesting service. One of the challenges in IT is to maintain a consistent workflow while also being able to document the work without interruptions. This software has so far been tested successfully in a production environment.

## Frequency Coding Draft Paper

I have attached a draft paper explaining the math behind frequency coding, a method of lossless data compression I came up with. The algorithm has been tested as I have freely available computer source code for anyone who wants to test it. The paper still needs to be complete and is missing the following:

- Math Cleanup – my terminology needs to be re-worked, its vague and hard to understand 🙂
- Decoding Process – important for paper proof – shown in source code on my website.
- Probability comparison – chart of actual p(x), frequency encoding output, neural network stretch = ln(x / (1 – x))
- Calgary Corpus Comparison – compare to other arithmetic encoders on this standard data set

This algorithm is fairly intuitive once you understand the concept behind it.

## X-Hex re-ignited!

X-hex is on for it’s second revision. This is in very early stages but is looking very promising. Currently I am developing it in c# mono develop IDE. Graphics, Assets, Audio, Music will all be outsourced some how or another. The goal is to provide a simple game to the majority of platforms including windows, mac, Linux, ios, windows store, xbox , ps3, android and ios. The professional development platform allows for the output to many devices with a single project. The game is currently rendered in isometric 3d using a top down perspective but taking full advantage of awesome graphical effects.

## Frequency Coding

The source code below is a bit coder class that can be used for reading or writing a compressed file. The source code provides access to a new type of entropy encoder. This new type of coder uses an algorithm I have created which I call frequency coding. The class I provide is currently using two symbols, but is not limited to two. A frequency coder is a variant of a range coder with some minor similarities with huffman coding. Without getting into details, the main difference between a range coder and a frequency coder is that a frequency coder does not require the use of multiplication or division by only using the frequencies of the symbols but still retaining fractions, where a range coder or arithmetic coder use the probability to output a codeword. Huffman coding does not use fractions or at least retain fractions as the code is being created, where a frequency coder does, but also requires a sorted list of frequencies from lowest to highest to properly handle fractions. I will be putting out a paper in the near future that will explain how a frequency encoder can work for any number base.

download -> bitcoder.h (5116 downloads )

/* Copyright (c) 2013 Chris Chunick, email@chrischunick.com All rights reserved. Redistribution and use in source and binary forms are permitted provided that the above copyright notice and this paragraph are duplicated in all such forms and that any documentation, advertising materials, and other materials related to such distribution and use acknowledge that the software was developed by Chris Chunick The name of Chris Chunick may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ class bitcoder { private: FILE *fin; FILE *fout; unsigned int top,bot,range; unsigned int code; unsigned int m[32]; void init() { passed=0; bot=0, top=-1; range=top-bot; code=0; for(unsigned int i=0;i<32;i++)m[i]=(0x7FFFFFFF>>(31-i)); } public: unsigned int passed; unsigned int fsize; void initcoder(FILE* fin, FILE* fout) { init(); this->fin=fin; this->fout=fout; } void startdecoder() { for(unsigned int i=0;i<4;i++)fsize=(fsize<<8)|getc(fin); for(unsigned int i=0;i<4;i++)code=(code<<8)|getc(fin); } void startencoder() { fseek(fin,0,SEEK_END),fsize=ftell(fin),fseek(fin,0,SEEK_SET); putc((fsize>>24),fout),putc((fsize>>16),fout),putc((fsize>>8),fout),putc(fsize,fout); passed+=4; } void flushencoder() { putc(bot>>24,fout);putc(bot>>16,fout);putc(bot>>8,fout);putc(bot,fout); passed+=4; } void fencode(const unsigned int bit, const unsigned int c0, const unsigned int c1) { unsigned int lbit=(c0>c1),w=31,lo=c0,tc=c0+c1,tr=top-bot; if(lbit)lo=c1; while(((tc)>=(tr>>w))&&w!=-1)w--; if(w<-1) { if (lbit^bit)bot=(((bot>>w)+(lo)+1)<<w)|(bot&m[w]); else top=(((bot>>w)+(lo))<<w)|(top&m[w]); } else { top=bot=bot+bit; } while((top^bot)<=0xFFFFFF || top<bot) { putc(bot>>24,fout); bot<<=8,top=(top<<=8)|0xFF; passed++; } } unsigned int fdecode(const unsigned int c0, const unsigned int c1) { unsigned int lbit=(c0>c1),w=31,lo=c0,bit,tc=c0+c1,tr=top-bot; if(lbit)lo=c1; while(((tc)>=(tr>>w))&&w!=-1)w--; if(w<-1) { bit=lbit^((code>>w)>((bot>>w)+lo)); if (lbit^bit)bot=(((bot>>w)+(lo)+1)<<w)|(bot&m[w]); else top=(((bot>>w)+(lo))<<w)|(top&m[w]); } else top=bot=bot+(bit=code!=bot); while((top^bot)<=0xFFFFFF || top<bot) { code=(code<<8)|fgetc(fin); bot<<=8,top=(top<<=8)|0xFF; } return bit; } };