Q Submit – Helpdesk Ticket Submission

I wrote this piece of software to compliment my article about IT Metrics (http://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.

QuickSubmit

Posted in Articles | Leave a comment

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.

Here is the PDF document:
Posted in Compression | Leave a comment

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.

X-Hex

 

Posted in New Projects | 3 Comments

Voice Assistant

*Updated Version Added – June 8, 2013* – designed for windows 7

Voice Assistant is a voice dictation program I decided to write in order to correct some of the difficulties using existing voice dictation software. When investigating voice dictation and given feedback about the same subject, I noticed a direct correlation to compression and also writing grammars for programming languages. It was then that I realized dictation from Microsoft and Dragon were missing some key elements and were also structuring their dictation wrong. Escape codes happen to be the common ground or link to compression. Dictation and commands require context and with context we can have escape codes to seperate the context properly. With current dictation software there are many escape codes which in turn causes confidence of a correct guess to be reduced substantially. Also visual queues are very weak and the brain is too quick to wait for feedback that is not obvious.  I have taken a logical approach following the footsteps of Star Trek.  The First escape code is “Computer” any other word or sentence is completely ignored.  Also the “computer” talks to you with transparent visual text that show up on the screen.  The Commands are as follows:

  • Computer Dictate
  • Computer Time
  • Computer Date
  • Computer Lock
  • Computer Exit
  • Computer StarDate (Star Trek humour)
  • Computer About
  • Computer Help

When you go into Dictation mode – the voice assistant switches commands –

  • Computer Stop (Stops Dictation, and back to Command Mode)
  • Insert Period
  • Insert Comma
  • Insert Space
  • Insert New-Line
  • Insert Tab
  • Insert Insert
  • Insert Undo
  • Insert Backspace

Dictation mode is somewhat limited but it does function very well, and the reason is that it only uses two escape codes {computer and insert} as opposed to other dictation engines, which tend to mix a large range of different sounding escape codes into the mix.

Voice Assistant (981) <-(Free Download)

The program requires dot net 4.0 and you must train your computer to recognize your voice and test your microphone.

** Important: Train your computer to recognize your voice first (Microsoft Wizard Built-in)**

 

VAssistant

Posted in New Projects, Projects | Leave a comment

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 (1207)

 

/*
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;
    }

};
Posted in Articles, Compression | Leave a comment

Operations Control Centre

This is a small dynamic project I have been developing over the course of the year during off work hours. It originated from the idea of having a network map done up specifically for work displayed on two monitors. Instead of using tools to create a flowchart or network topology I built a control that asynchronously allows for communication between the host machine and a destination until the program terminates. Each connection sits in a group and each group can connect to other groups – these features are automated. This is a great tool for everyone to visually see the status of the network in real-time and gives an overview of the network. A quick glance over at this two screen Ops program and you can see what servers are running and which ones are not. Future additions include audio alerts and better video alerts.

 

Ops

 

 

Posted in New Projects, Projects | Leave a comment

IT Metrics

The importance of IT Metrics usually overshadows work that needs to get done, or it is the opposite, work is getting done with no metrics. To create a balance, there are a couple of things needed.

  1. Technical Infrastructure – this is important – there needs to be an underlying system to automatically maintain, gather stats.
  2. Employee Co-operation – Like anything new, employees are usually resistant to attempts at new processes and new technologies – gathering stats requires co-operation and teamwork
  3. Proper processes – without processes, statistical gathering can be cumbersome, tiresome and overshadows the actual work that needs to get done. The time it takes to gather the stats, takes longer than the work done.
  4. Training – training for a new process is vital, not only having employees be able to use the new process effectively, they need to be immediate stakeholders of the process and after training there really is no excuse for a good system to not be used.

Using this type of formula, statistics can be a joy to work with and increase productivity by creating a self organizing system. Forecasting and maintaing a proper accounting of what is required within an IT Department is much easier when an automated process is in place.

 

Helpdesk Ticket Overview

 

 

Posted in IT Management | Leave a comment

ThunderBayRent.com

This project was around before google maps or kijiji existed – remember mapquest ? the mapping feature for Thunder Bay rent grabbed it’s map data from there. At the time mapquest was a paid service, who would have new mapping would be free for everyone. The website included  a landlord administrative interface for property managers. The target market of Thunder Bay rent were quick turn over landlords, which is now a service that is widely available.  I believe this was the last visual incarnation of Thunder Bay rent.  The database for thunder bay rent was the initial foundation for Canadararent.

TbayRent

Posted in Old Projects, Projects | Leave a comment

Anonymous Suggestion Box

This suggestion box project was created for staff to be able to send anonymous suggestions to different departments. The project was perfect for a small one week project. The code includes error handling, multi-threading, multiple email targets, and some quick smtp code to send an email from an anonymous user. Every email is routed through a generic email address and sent directly to the intended targets. Who the message came from, we will never know.

SuggestionBox

 

Posted in New Projects | Leave a comment

Visual Monitor

This project was very cutting edge and exciting to create. This was a custom monitoring app that was geared to using little to no bandwidth to stream real time monitoring of multiple clients. The technology I used in this project was ripped from my years of compression experimentation. This allowed for large amounts of video data to be compressed and relayed to multiple viewers. The bandwidth usage for say eight computers to stream would of been around the bandwidth of a VOIP call.  This program was designed to watch touch screen kiosks to give customers a helping hand if required. The software was written in C sharp and the small client app I wrote in straight old c for super speed. I believe the client software clocked in at 10k in memory and allowed the monitor software full control of the computer.

KioskMonitor

 

 

 

 

 

 

 

Engineering a plan for this project was very difficult. The network infrastructure could be down in one spot, have massive lag, or could be dynamic and change. I came up with an excellent schematic distinguishing between current available technology and what I proposed and created.

VisdualMonitor

Posted in Old Projects | Leave a comment