Category Archives: Javascript

Phil 3.31.15

8:00 – 4:30 SR

  • Working on debugging POC name issue. Fixed? Had to roll back some things to make the data binding work?
  • Migrating NovettaUtils to the lib directory, then using that for inheriting in the charts module. Which was going to be migrated before discovering the fat arrow inherit feature (FAIF). So yeah. migrate that too.
  • Nope, realized that there was no way to maintain state using the approach that I tried. Looking into using the actual prototype chaining pattern instead.
  • Ok, kinda hit a wall here. Note that the breakpoint and the console.log disagree:

wtf

Phil 3.27.17

7:00 – 3:30 SR

  • Timesheets
  • Wow – upgraded to Windows 7! Of course, that means that I don’t have PuTTY and can’t get to the servers. Put in a ticket…
  • Need to see how super() works in JavaScript. I’m thinking it should be possible to write a Utils.FatSuper(this.myFnPtr) static method that will do the same.
  • TypeScript parent class (Parts stripped out for clarity):
    export class TestController implements ITestController {
       // standard TypeScript constructor
       constructor() {
       }
    
       public extendableFunction():void{
          alert("It's extendableFunction()");
       }
    
       public fatArrowFunction = ():void => {
          alert("It's fatArrowFunction()");
       }
    }
  • Compiled JavaScript of above:
    var TestController = (function () {
        // standard TypeScript constructor
        function TestController() {
            var _this = this;
            
            this.fatArrowFunction = function () {
                alert("It's fatArrowFunction()");
            };
        }
        TestController.prototype.extendableFunction = function () {
            alert("It's extendableFunction()");
        };
        return TestController;
    })();
    InheritApp.TestController = TestController;
  • TypeScript child class:
    export class TestController2 extends TestController implements ITestController2 {
       myInheritedString:string;
    
       // standard inheriting constructor pattern. Note that 'super' must be on the first line and
       // that the arguments from angular get passed through
       constructor(){
          super();
       }
    
       public extendableFunction():void{
          super.extendableFunction();
       }
    }
  • Compiled JavaScript of above:
    var TestController2 = (function (_super) {
        __extends(TestController2, _super);
        
        function TestController2() {
            _super.call(this);
        }
        TestController2.prototype.extendableFunction = function () {
            _super.prototype.extendableFunction.call(this);
        };
        return TestController2;
    })(TestController);
    InheritApp.TestController2 = TestController2;
  • JavaScript of above with all the contents commented out:
    var TestController2 = (function (_super) {
        __extends(TestController2, _super);
        function TestController2() {
            _super.apply(this, arguments);
        }
        return TestController2;
    })(TestController);
    InheritApp.TestController2 = TestController2;
  • As an aside, __extends is just parasitic inheritance:
    var __extends = this.__extends || function (d, b) {
        for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
        function __() { this.constructor = d; }
        __.prototype = b.prototype;
        d.prototype = new __();
    };
  • So we know a few things now:
    • extending in TypeScript means that the child class is called with the parent class passed in as an argument called ‘_super’
    • Fat arrow functions are defined in the constructor as variables pointing to functions and are attached to ‘this’, not ‘_this’
  • I tried looking for the properties in the debugger, but couldn’t really see what was going on in the JavaScript. So I added a loop over the properties in the TestController2 constructor. FatArrowFunction is listed and extendableFunction is not. To me this makes sense, as extendableFunction is on the prototype:
    this[fatArrowFunction] = function () {
            alert("It's fatArrowFunction()");
        }
  • Building on the above, we can make what boils down to our own prototype for fat functions. The other option is to turn everything into fat functions as per this nifty piece of work, discussed on this page. I have a concern about adding all this wrapping to functions, so until I run some tests and see what’s faster, here’s a way of doing it semi-manually. Here’s the parent code:
    export class TestController implements ITestController {
       public functionMap:Function[];
    
       // standard TypeScript constructor
       constructor() {
          this.functionMap = [];
          this.setFatPrototype(this.fatArrowFunction, "fatArrowFunction");
       }
    
       public fatArrowFunction = (arg:string):void => {
          alert("It's fatArrowFunction("+arg+")");
       };
    
       public extendableFunction():void{
          alert("It's extendableFunction()");
       }
       public setFatPrototype(fn:Function, n:string){
          // TODO: look for earlier prototypes that we might need to call
          fn["name"] = n;
          this.functionMap[n] = fn;
       }
       public fatSuper(fnName:string, childArgs:IArguments){
          // TODO: look for earlier prototypes that we might need to call
          var fn;Function;
          if(this.functionMap.hasOwnProperty(fnName)){
             fn = this.functionMap[fnName];
             fn.apply(fn, childArgs);
          }else{
             console.log("fatSuper(): function '"+fnName+"'does not exist on the prototype chain");
          }
       }
    }
  • And here’s the child class:
    export class TestController2 extends TestController implements ITestController2 {
    
       public extendableFunction():void{
          super.extendableFunction();
       }
    
       public fatArrowFunction = (arg:string):void => {
          this.fatSuper("fatArrowFunction", arguments);
          alert("It's fatArrowFunction2("+arg+")");
       };
    }
  • As the comments say, I do not recurse up the ‘prototyp’ tree yet, though that wouldn’t be hard. Before I do that, I need to implement both versions and see if the version that converts all functions to function pointers works with Angular and if it does, to run some tests to see which is faster. Stuff for Monday.

Phil 3.26.15

8:00 – 4:00 SR

  • Tested threejs on target browsers. The hardware acceleration is iffy, but the software renderer and the raytracer work fine
  • Deployed Dong’s FR fixes
  • Working on splitting the chart elements into their own module.
  • Argh! Fat arrow functions can’t inherit in TypeScript! Thinking about making a mapping table? Something like
    • fooPtr = (var:number):void =>{…};
    • fooFn(var:number):void{fooPtr(var);}
    • ????
  • Set up and implemented an interface for calculating behaviors, which works nicely:
  • public behavior = (dClock:number, elapsed:number):void => {
       var rb = this.wglCanvas;
       var ci:IChartElement;
       var i:number = 0;
       if (rb) {
          rb.dprint("Hello controller - sin(elapsed) = " + Math.sin(elapsed).toFixed(2));
          for (i = 0; i < this.chartElements.length; i++) {
             ci = this.chartElements[i];
             ci.setZOffset(Math.sin(elapsed + i));
             ci.behavior(dClock, elapsed);
          }
       }
    };

Phil 3.25.15

8:00 – 5:00 SR

  • Set up Mark’s accounts
  • Set up an admin account for our tester. Not sure if that’s actually needed?
  • Brought over the latest and greatest for Bill to scan. Should be ready for testing tomorrow.
  • Finish integrating Chartinfo class into testbed. Done, but more of an adventure than I was expecting. First, my development box began acting weird (fan noises, flickering graphics, slow performance). Then it BSOD’d. When I finally got it back up, the debugger kept on getting confused about comments. Once that was sorted, I couldn’t get picking to work on area charts, even though it worked fine for everything else. That traced back to a null value for the component name, which is an explicit test I run to manage tooltips. So once the name from the ChartInfo item was loaded into the glComponent, everything began working correctly. Sheesh.
  • Tried to get my laptop again and also a replacement workstation, since this one is now suspect.
  • Running CC

Phil 3.18.15

8:00 – 4:00 SR

  • No problems with the new FR. Testing to begin Friday?
  • Need to look into JIT manufacturing process control as possible way of managing labs
  • The current goal is to see how trustworthy labs are WRT spending their funds to target. It turns out, I have an equation for that 🙂
  • Added behavior callback to CanvasClasses and ComponentClasses. It also seems to have fixed my weird ts error in Webstorm.
    • Tested and working.
  • Adding tooltip data points to track the top line of the chart, including when the chart is animating. – done

Progress for today:

nurb-ish

Phil 3.16.15

8:00 – 5:00 SR

  • deployed new FR. Still tweaking.
  • Continuing with charts. My end triangles are not drawing properly yet. D’oh! Stepping by 1 rather than 2 for a triangle strip. And the backface is backward. Both fixed.
  • Adding a cylindrical z component to the chart. Want to compare this to a bevel
    • Spent too much time on this – projection of a cylinder onto a plane is y = sqrt(r*r – x*x)
  • Will probably go for a spherical projection with bevels (z = sqrt(r*r – x*x -y*y)). Working on procedural generation of arbitrary meshes. Done!

nurb-ish

Phil 3.13.15

8:30 – 4:00 SR

  • Create Capability by appropriation chart for testing
  • Adding Apache POI to the JavaUtils project. Boy, that turned out odd. The JarFileContainer project hadn’t been checked into SVN yet, so after adding POI11 to the jar file, I did. It uploaded correctly, but when trying to sunchronize the directory, SVN decided that JarFileContainer needed THE ENTIRE Java_Folders DIRECTORY. Which is completely insane. Wound up uploading manually. Seems to be working now.
  • Built a fake data generator and populated the spending_test table for charting.
  • Starting on building the area chart component. Got a simple mesh built. Good start.

Phil 3.12.15

8:00 – 6:00

  • Deployed new FR and worked with the DB
  • Added SW rendering as a selectable option
  • Added highlighting and selecting to Canvas and Components
  • Discovered how to cast in TypeScript. Note that this is only for compile phase:
    var m:THREE.MeshPhongMaterial = <THREE.MeshPhongMaterial>obj3d.material;
  • Tested highlighting in 2d and 3D. Discovered a few use cases where the selected model can get set to null while manipulating the eyepoint and had to fix those.
  • Was going to deploy to my server for testing, but I realized this app needs a database. Started the process, but now it’s got to cook for a while.
  • Lenny wants spreadsheet export, possibly with formulas.
    • Added capability to DbTypedTable to work with multiple sheets.

Phil 3.11.15

8:00 – 4:00 SR

  • Having a bunch of issues with the on site Firefox. WebGl was working but the browser would black out other screens. Now that’s fixed, and WebGL won’t run.
  • Added xcopy . \xampp\htdocs\experiments\WglCharts1 /s /d /y /exclude:excludeFile to the Makefile as the deploy: task. Now all new files are uploaded to the apache directory for testing as part of the build.
  • Need to implement software rendering fallback – done. Had to add common methods/vars (setClearColor(), autoClear)
  • Need to get 2D running – done
  • Got Lenny’s initial chart. It’s capability by appropriation, with the PMAs and FACTS as bars with Outlay goals and Planned outlays as shaded areas. Probably a rolling six month window.

Phil 3.10.15

8:00 – 4:00 SR

  • Wound up passing a callback function from the glController into the queryController so that the data array that’s used to create shapes is called at the end of the retrieval process. Communication with the queryController should be able to go through bound variables?
  • And in case that doesn’t work. Here’s a good source for communication between Angular components.

Phil 3.9.15

8:00 – 4:00 SR

  • Deployed the new FR. Progress, but still not there yet.
  • FF still broken
  • Still no keys for Webstorm
  • Copying over work from home.
  • Started to integrate the graphics and query apps under the assumption that multiple controllers can work and play well together.
  • Wound up passing a callback function from the glController into the queryController so that the data array that’s used to create shapes is called at the end of the retrieval process. Communication with the queryController should be able to go through bound variables?
  • And in case that doesn’t work. Here’s a good source for communication between Angular components.

Phil 3.6.15

7:30 – 3:30 SR

  • Surprisingly, the 10″ of snow that fell yesterday is still there.
  • Setting up the charting project. I’m going to leave AngularThreeTS untouched and just copy it over. I’m expecting the WebGL classes to still change while I work on these components. Once done though, it will go into the libraries with the WebGL directive? Not sure about that yet…
  • A really nice explanation of SQL joins.\
  • Working on the classes to return typed data from queries to the charts. Can’t do trending without knowing what’s a date. Updated FileUtils DbTypedTable with toString() and toExcel()
  • Copied over the AngularThreeTS directory. Now I need to pull in the query parts from iRevdb.
  • Verified that CanvasBase.removeModel still works.
  • Added a minimum set of query capability. Right now, it’s in a separate htmls page, but I should be able to integrate pretty soon.

Phil 3.5.15

7:30 – 4:30 SR

  • Create data to chart!
  • Reply to Chris’ email for recording twitter data – done
  • Create chart db – done.
  • Create statement table with rank and count. Save as insert into text, fix formatting in file before loading
  • make sure that textures, lines, reflections and skybox works (WebGLModuleTest)
    • There were a few things missing and some issues with how lines get handled, but everything pretty much patched in correctly. Running code is here (for now…)
  • Create new project with db access. Basically blinddb with WebGL div. Call it WebGlCharting1

Phil 3.4.15

8:00 – 4:00 SR

  • Testing meeting – me, Ronda, Agenia, Lenny.
  • Status report!
  • Finish up templates and put them in SVN – Done, demo’d to Dong
  • Need to add all the working templates to the templates directory and add a README – Done
  • CATS is an IDE for TypeScript and Web developers. CATS is open source software released under the Apache 2.0 license and runs on Linux, Windows and OS X. CATS itself is also written in TypeScript, so you can easily customize it if required.
  • Verify that lines and textures work in the new framework.