Coder Social home page Coder Social logo

kabukitoolkit's People

Contributors

cookingwithcale avatar rogueforge1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

kabukitoolkit's Issues

0_0_00::Reorganize into 5 seams.

I've collapsed the seams into 4 seams:

  • SEAM_0_0 - Console Apps and Libraries
  • SEAM_0_1 - Internet and Store
  • SEAM_0_2 - MIDI and Audio
  • SEAM_0_3 - Graphics, HMI, and GUI
  • SEAM_0_4 - Video

SEAM_0_0_3: Debugged Stack.

The Stack is fully working but the unit test does not exist and there was a bug at some point with a missing (-1) in the buffer size calculations.

SEAM_1: Add performance-per-decimal to ItoS Benchmark

The current benchmark only has performance-per-bit. The benchmark is written already and there is only a little bug in the 10 decimals path. The error is that the upper range of 32 bits is not an even power of 10. My thoughts are that the benchmark needs to be a single loop through half of the upper 32-bit range. This leaves half of the range "untested" but the algorithm does not have a an MSD of 1. This will keep the number of for loops an even power of 2 for all numbers of decimals.

0_0::Cache-align number printing LUTs.

The only way to guarantee my static data to be in the packed in the order you want it to be in is to use a byte-encoded packed collection of LUTs and provide some functions to get the LUTs using pointer offsets.

0_0_6:Implement basic MNIST MLP algorithm.

The design chosen is to have what we're calling Persenserons, or Sensory Perceptrons, that sample data from various sources such as integers, floating-point numbers, strings, and other data formats.

0_0_0.4:Change timestamp to dual-32-bit Time-sub-second-tick.

The way computers handle timestamps is dramatically different, but one format that works across systems is to allow for a variable number of updates per second. For Windows and Linux it's best to update times per second, which is the default OS precision timer update time period may change at runtime. The preferred format is to use a 32-bit TMS timestamp with a decade epoch cycle and 32-bit signed integer sub-second tick.

0_0_1::Upgrade to Grisu without Script itos optimizations.

I've already got the code from the research paper in copied and pasted and the start from a string-to-float algorithm but the algorithm excludes rounding behavior and thus is not acceptable for parsing ASCII Data Types due to ASCII Floating-point String Truncation Rules.

This issue also involves some misc debugging from the ABSOLUTELY MASSIVE AND PAINFUL Unicode and rapid compilation update. Kabuki Toolkit is not one of the fastest compiling SDKs in the world due to our semi-hidden template and minimal header design.

Update 8/2/2018

I had to move the memory alignment functions down to SEAM_0_1 because of the Grisu algorithm I improved upon (Milo's) uses memcpy to make the printed string look better.

00_00_00::Break up into scrums and switch to SI unit names for seam tree depth levels.

This is where the Layered Seam Trees really start to shine. Rather than shifting up all of our unit tests, we can instead create a Seam Node for SEAM_01_02_03_04_05__06_07. The tree depth levels are now named after SI units: Seam_Layer_{Milli_Micro_Nano_Pico_Femto}__Sprint_Scrum. In each subfolder in the seam_00 in the root project directory contains at least two files: a readme.md that describes the seam node and a seam.h that contains the unit test or unit test runner for that seam node. Only scrums have tests and all other seam.h files are test tree runners. The seam tree runner is been simplified to epically stupid proportions. We have one functions pointer const char* (*TestCase) (char* test_result, const char* args);. This allows us to use a C++ variadic template to construct a near-zero-overhead unit test runner. Each test function is named Seam_01_02_03_04_05__06_07, and we then use a macro FUNCTION to return the function name if test_result or args is null. We then print all error logs to the test_result. args then allows us to pass parameters around to the unit tests.

Also on this commit, Visual Studio has renamed stdafx.h to pch.h so the new seam tree will follow suit.

0_0_2::Move Clock and Scan to SEAM_0_0_2

The Clock is required for the the BIn to work correctly and is closely related to the Print utilities so it shall be on the seam with the Text utilities. Scan is required for Clock and is related to Print.

SEAM_0_0: Bump SEAM_1 down to SEAM_0.

I had thought this out the whole way through and it works best to start the seams at zero. Looks like 10 seams is almost too much to fit on a single page vertically, so if we start at 0 then we can have 10 seams so it's a requirement. At this point, everything is on one page, but it is really pushing it and anything else added will push it over the one-page limit so we have to organize it in a way that allows for scaling beyond the current work-horizon.

0_0_2::Add UTF-16 and UTF-32 support.

So far the Text utilities and Printer have been ASCII only. There is an engineering problem with facilitating.DLL libraries making direct use of templates, not an option. The only acceptable solution is to implement the template classes in the .cc file and map them with inline functions. The Printer needs to have a Printer2 version for UTF-16 because classes cannot use a templated Printer class. Functions should be grouped such that a single macro can be used to turn them on and off.

Update 1:
I've been at it for about 5 days updating code so far and it's been like pulling out teeth. I had to swap everything for template operation including the scan functions, which are now called the Universal Text Formatter (UTF). There are no UTF-8 and UTF-16 compliance checking code at the moment but we have our own number scanning code that works with all Unicode formats.

Update 2:

I've been sloshing through weird template compile errors. Having so much stuff in the UTF doesn't help debug, but if it's not in one file the file count goes up dramatically, which is not what we want. I really need to break up the scrums into issues that aren't out of control, but I'm not sure could do that with this job. It's a messy mess of a mess, and the only way to get through it is to get stuff polished up... so that's the scoop for this week.

One new thing that just got put in is an ASCII Object with a function pointer for a destructor that allows for costless integration dynamic memory with only a small RAM overhead that is only on the stack. The coolest thing about it is for STR, the destructor can be used to print the string to whatever source you want! I had to change the filenames of the files that have templates in them to start with T because it's less confusing and quicker to find.

Other than that the build time has gone from over a minute down to a matter of seconds from using the C ABI; #Wiinning

Update 2018/7/4

I just got it to compile. I've been having some stupid issues with KABUKI inline functions. I'm having some weird errors with the hidden templates, 1.) the compiler doesn't detect some of the hidden templates impls 2. The debugger detects a 0xf...f overflow but call stack crashes at the hidden template wrapper function and not in the function where the crash is occurring (WIERD!) 2.) the KABUKI inline functions have been causing problems and 5 of them had to be removed to fix linker errors from hidden template bugs. It's done though, it's just got some lurkers.

0_0_0.9:Add templated Variable class to edit any ASCII types.

The _::Library class allows you to edit any of the ASCII Data Types. There is a single templated class that can read and write any of the POD types to and from Sets, Stacks, and Arrays. The templated object gets pushed on the Crabs Stack and the Controlling Room can then access the memory and pop the Variable object..

0_0_1.0:Add Library.

The Library class wraps the ASCII Object Types with a _::Operand and allows Script to interact with the ASCII Data Types.

0_0_0::Consolidate f2 into crabs dependency.

I'm having a problem writing Fastest Method to Print Integers and Floating-point Numbers article because there is so much stuff in Crabs that it is not acceptable to release nor is it required for the paper, and I've been forced out of necessity and convenience to make f2 it's own beast and decouple it from crabs. f2 is now SEAM_0_0_0 and it contains the following files:

  • kabuki
    • f2
      • align.h
      • assembly.h
      • binary.h
      • config.h
      • console.h
      • f2_align.cc
      • f2_binary.cc
      • f2_console.cc
      • f2_test.cc
      • global.h
      • public.h
      • random.h
      • stdafx.h
      • stdafx.cc
      • tbinary.h
      • talign.h
      • ttest.h
      • test.h

0_0_8:Add Script wrapper for git for Sloth Scripts.

In order to refresh a library, one must first have git installed, then second #Sloth needs to clone the git repo using console commands, then perform a series of steps to transform the library. One needs to automate Issue Driven Development on GitHub and BitBucket so all git commands needs to get Script wrappers.

SEAM_0_0_4: Rewrite text API to write directly to Slots.

Functionally the Slot is identical to a Strand only there is one additional pointer. Given a single additional memory copy compared to the width of the string having slow byte writes this overhead should be negligible but will 100% definitely significantly speed up writing to sockets by eliminating an extra expensive string copy.

Update

This feature got scrapped because it was too much code and I just went with writing to a buffer for now.

SEAM_0_0_2: Fix Text functions.

It's been a nightmare implementing this last batch of changes so we're not tied down to printf for printing things right-aligned. I'm please to announce, I just fixed the bugs!!!

0_0_0.3:Write printf parser for ASCII Data Types.

ASCII Data Types are perfect for using in printf %format. The printf is mapped to ::_::Printf, hiding the printf implementation and only exposing va_arg to the public API (because it is a language feature).

0_0_8:Add utility to auto-generate precompiled header files.

Once all of the source code for a module has been moved into appropriate folders, a dumb script needs to strip out the #include for headers that may be precompiled, the name of the header added to an ASCII StringArray and then at the end the StringArray needs to dump out an auto-generated stdafx.h file for all of Kabuki Toolkit.

0_0_0.9:Debug List class.

The List class works similarly to the Book and Dictionary for reading and writing tuples. You need to pass in a type and a pointer to the data to read/write. You need to have a buffer setup so you can accept values large enough depending on what types you've added. List is not sorted so the insert functionality can be shared with the Stack class.

Other updates on this commit include updates to the Printer. Printer now is passed by and back by value not reference. The printer is a 2 pointer data structure, and thus may be passed back on Intel systems using the EDX-EAX pair and back from registers R0 through R3 on ARM, so pass by value is the correct pattern to use. This greatly improves the performance of the text algorithms.

In order to print to the console the _::Console class was added. The Console class is a templated that statically allocates a buffer, maps a Printer to the begin and end of the buffer, and the buffer now exists for the duration of the string of overloaded operator calls. The size of the buffer is set in the assembly.h file. The syntax is:

_::Console<16>.Out () << "Hello world!";

// COUT is #define COUT ::_::Console<> ().Out ()
COUT << "Testing " << 1 << ", 2, " << 3;

0_0_8:Add move single file from one folder to another to Sloth.

In order to access the internet to #Sloth both the serial, midi, and hmi libraries we need the internet, and we have to use the Sloth to automate the process because it's too tedious to do it by hand and the libraries will get updated. The ENTIRE toolkit has to get built with the Sloth, and the first place to start is by moving one file from one folder to another.

The test harness needs to have a test text file with some string we can read to verify file integrity.

Switch to issue driven development.

This was my first professional engineering project and newbed it out. I rag-tag submitted commits without any Issue attached to it. This is now a major eye burned now that I figured out my fault. Sorry.

SEAM_0_0_3: Swap SEAM_0_0_3 with SEAM_0_0_4.

I need to get the ASCII data structures working to do matrix math with (specifically the array and stack), so the data structures are all getting moved to the beginning of the SEAM_0_0_3 unit test.

0_0_2.0:Memory align Walls to cache page boundary.

Cache pages are commonly 2KB and a cache line is commonly 64 bytes. The first cache-page aligned 64-byte cache line needs to be jam-packed with inter-process communication master controller variables, possibly using the rest of the cache page for a TX Inter-process Portal. The goal of the design is to iterate through the buffers sequentially and do some processing on each Door in the wall so that the next page can load in RAM while we're scanning bytes.

Upgrade to Seam Debug Macros

I figured out you can index each module by seam number 1 through N, and use a macro to target debug info for that seam. This method the FREAKING AWAZING because you can peal back the layers to the core and debug the seams sequentially. Combine with Issue Driven Development and you've got a big time home run!!!

0_0_0.11:Debug Book class.

The hash functions work great in the Book but getting the data out hasn't been as easy because books may have multiple types and this feature is not supported by the C++ language.

SEAM_0_0_3: Remove Console.

The Console isn't working out right now. I'm not sure exactly what is going to happen but I"m just trying to get the original unit test working again.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.