Thursday, August 3, 2017

ORM and JSON in JavaScript and TypeScript

Mapping JSON to entity objects and objects to JSON is trivial, if the objects only contain data and allow direct access to the properties. There is a bit more work if the class needs to have helper methods for things like validation, and if we want to wrap the data members with getters and setters.

The goal is to meet these requirements during coding:
  • Entity classes may include validation
  • Data members have accessor (getters and setters)
  • Entity classes may have other methods
  • Entity class type is important (this encapsulates the previous three points)
  • Missing data in the JSON source should be logged.
  • Extra data in the JSON source should be logged.
  • Support DRY - Don't Repeat Yourself
Full disclosure here: I know that there are two big problems with what I am about to describe. If you have been trying to handle ORM conversion already, you may have hit them. The problems are not insurmountable, but we'll get to that later.

Friday, May 26, 2017

Anonymous Functions and Arrow Functions are Closures

Functions in JavaScript and TypeScript are "first-class citizens;" which means that they can be passed as a parameter, assigned to a variable (and passed as a parameter), and may be dynamically created at runtime. The last stipulation is important: not only do many people consider it a major requirement to be a "first-class citizen," but creating new functions at runtime is how JavaScript and TypeScript function is built.

Dynamically creating functions at runtime is good and bad. It is good because it simplifies the code and can make it cleaner, but it is bad because there is a penalty to pay for creating all these functions.

Saturday, May 20, 2017

Safeguarding Development Environments

When I am teaching I often refer to a mistake I made years ago, typing "rm * .o" in a Unix shell while in a project folder. I realized when the shell said ".o not found" that by placing the asterisk accidentally all by itself I had selected and removed all the source for the project!

I am sure that it was not the first mistake that I ever made that corrupted a project, nor will it be the last. You or I do not even have to make a mistake; it could just be that your hardware fails or that today some black-hat exploits a security flaw that nobody has patched yet and voilĂ , all of your files are encrypted and forever beyond your reach.

In fact, it is the WannaCry ransomware attack that prompted this post! Not that it bit me, but something like it could some day...

Monday, March 20, 2017

Oracle Database 12c Perl Distribution and VirtualBox/VMware

The Perl 5.14.1 distribution included with the Oracle 12c Database instance is flawed and crashes when given the true CPUID for the processor. This can happen in several cases, especially when installed on MacOS, VirtualBox, or VMware with newer Intel processors.

This behavior, and solutions, is documented in several places, including here by Laurent Leturgez and here by Danny Bryant. Most noticeably, it occurs when the Perl scripts are run during the creation of a multitenant database using dbca.

The problem hit me hard using virtual computers during a customized Oracle boot camp I am teaching as I write this. The purpose is to document what I found out and how I decided to fix it.