As software architects, we are concerned with design structure, interoperability, testability, manageability, and scalability. We pay special attention to how all that supports the business needs driving projects we are involved in. Multiprocessing and distributed processing has long been a special interest of ours. We have developed an extensive library of open source projects, and they are important resources for us.

Breaking systems into components is an important part of any project. Defining subsytem behavior and assigning functionality is a skill that is born of experience. For small projects, we usually create all the subsystems and write tests, when appropriate. For medium-sized projects, we usually specify the system, manage implementation, and perform integration. For larger projects, we also specify the integration and system test procedures.

When we provide organizational or technical mentoring we prefer to use video conferencing as much as possible. Please contact Mike Slinn, Distinguished Engineer, to discuss any needs your organization might have for mentoring.

Once Upon a Time...

A few years ago, Flex data services and web services were featured in most of the projects that we worked on, including one or more of the following:

  1. Remote procedure calls to servers
  2. Web services and/or REST
  3. Messaging
    1. Publish-subscribe
    2. Peer-to-peer
  4. Proxy support
  5. Data replication, synchronization
  6. Streaming data, events, audio and video

We did a lot of work with BlazeDS and LiveCycle DS, and provided bug fixes for the source code. Michael Slinn also oversaw a documentation makeover for GraniteDS. We used client-side and server-side unit testing to verify desired behavior. BlazeDS and LiveCycle DS were based on Java Servlet technology. Today we work with more modern technology to accomplish similar results, with higher throughput and lower latency.

Invisible Samples

Much of our work is in server-side interaction, which has no visual component. Most of our clients have retained us for applications that run behind a firewall, or that are accessible only to clients. With that said, this portfolio shows images and videos for some of the projects we have worked on.

The portfolio includes:

Ethereum Library and Client

Idiomatic Scala Ethereum Libraries

We recently released web3j-scala, a lightweight and idiomatic Scala wrapper around Web3J for Ethereum. Web3J is a lightweight, reactive, type safe Java and Android library for integrating with nodes on Ethereum blockchains.

We are also playing with consuela, a Scala native Ethereum library. Check out the documentation!

Soon we intend to use one of these libraries to provide the Ethereum interface for beth, a better Ethereum client.

Towards A Better Ethereum Command-Line Client

This video shows some early work on an integration project featuring a command-line interface. The beth project is written in Scala, which runs on the Java Virtual Machine. The client currently supports multiple custom subshells.

The video below shows a nascent Ethereum shell and a JavaScript shell built from a mixture of Java and Scala code. The shells all run independently, and each type of shell has its own type of evaluator. More types of shells and evaluators are possible. We plan to greatly expand the degree to which shells can interoperate with each other, as well as the degree to which the shells can interoperate with the JVM code.

We are interested in blockchain, especially Ethereum and other smart contract platforms. If your organization has a need to integrate existing or custom server software and/or users with smart contracts, Micronautics Research can deliver a polyglot solution based on code written in many dissimilar languages.

Cadenza – Online Learning Platform

Micronautics Cadenza is an authoring and publishing platform for online training, built with Scala, Play Framework, Slick, Akka, Postgres and jQuery. Cadenza is a ‘white label’ product, and it powers scalacourses.com. There are many aspects to Cadenza, including payment gateways for PayPal, Stripe and Square; authentication, the database access layer, the REST interface, lead tracking, branding, extensive web interface for configuration, permissions for groups, courses, sections and lectures, and much more. This article discusses how Cadenza’s roles work.

Publishers can author offline and import their work, and/or author online. Transcripts are provided for each videos, so the content is searchable. Content is broken down into highly focused topics, in a hierarchy. Various roles are defined, and each role has a different view of the pages in the site. Roles include Superusers, Publishers, Instructors, Students and Visitors.

Publisher Configurations
Publishers are responsible for the business aspects of their online site. A Publisher's site is defined by its PublisherConfiguration. A Superuser creates the PublisherConfiguration, and a Publisher sets it up. Instructors never have to think about the business aspects because the Publisher configures many of them in the PublisherConfiguration. The front page of the site is defined by the PublisherConfiguration as well.
Course Groups
A Group is a collection of courses that together address a broad topic in a comprehensive manner. Groups have a free publicly visible video that provides an overview of the content, and the video has an HTML transcript that is publicly searchable. Publishers define the course groups, and define the business aspects of the courses within each group. All the other roles can only view the public information provided by the group. If a group has only one course that passes the preflight check, then the group is not made evident to the user, because there would be no benefit to exposing the extra node in the hierarchy.
Courses
A Course normally has from one to five hours of video lectures, focused on a specific topic. Courses often have prerequisites, which are specified in the online course editor. Prerequisite courses can also have prerequisites, and so on. This means instructors should state the knowledge that each course assumes the user to know. Courses have a free publicly visible video that provides an overview of the content, and the video has an HTML transcript that is publicly searchable.
Sections
Sections are collections of Lectures, grouped according to a logical sequence. For example, sections might be called Setting Up, First Steps, Advanced Concepts and Integration. Sections have a free publicly visible video that provides an overview of the content, and the video has an HTML transcript that is publicly searchable. Instructors define sections and can reorder them.
Lectures
Lectures have a video that delivers the content, and an HTML transcript which is privately searchable. Publishers can designate individual lectures as being free. Instructors create content for lectures and can reorder them.

Each node in the content hierarchy can be designated as active, which means that its content will be visible. Individual nodes can also be made visible at any time; this means selected subtrees of the training material can be enabled when desired.

Views Filtered by Role

In the following table, a checkmark means that the role can view the information. Roles with more checkmarks can either see more information or can modify it, or can modify it to a greater extent.

  Superuser Publisher Instructor Student Visitor
Publisher Configuration ✓✓✓ ✓✓
Group ✓✓ ✓✓
Course ✓✓✓ ✓✓✓ ✓✓
Section    
Lecture ✓✓✓ ✓✓✓ ✓✓ ?

Publish-Subscribe for Akka and Scala with Build Utilities

Bookish Logo “Mike Slinn of Micronautics Research is a master of his craft and a joy to work with. He expertly digested our Scala, Akka, and Mongo software architecture, and our requirements in a messaging bus system, while foreseeing issues we had not anticipated.

“Mike delivered a clear, cleanly designed component for use at the heart of Bookish's extensive data processing infrastructure. Given that Bookish is at its core a data-oriented business that aggregates from numerous sources, it is necessary for us to have flexible and extensible data processing components with modern implementations. Mike delivered and rolled with our ever-changing changing requirements.

“From working with him, I have learned much about distributed system design and managing software complexity without needing to sacrifice extensibility. I'd be happy to work with Mike again on future projects, at Bookish or elsewhere.”

Scott Maher, when he was the Bookish Scala Team Lead Scott Maher

We designed and implemented software projects for Bookish, LLC of New York. Originally Bookish requested a simple publish-subscribe subsystem for Akka that used ZeroMQ as a transport layer. We implemented that, and submitted pull requests for the issues we found with ZeroMQ and the Akka/ZeroMQ interface.

We were then asked to redesign the system to support journaling, using MongoDB and Salat. We came up with a better way of working with Salat than was previously documented, using Scala existential types. The ZeroMQ interface still had many problems, which seriously affected performance, so we changed the transport from ZeroMQ to native Akka. The code was released as open source projects: zeromq-demo, domain-bus, domain-bus-bookish, testPubSubKernels, and TestDomainBusKernels.

The Bookish build system used SBT, Jenkins and Artifactory. Bookish had a problem, common in enterprises with distributed teams, whereby product releases depended on many libraries, and each dependency brought in their own dependencies. Some of the dependencies conflicted. We wrote an open-source SBT enhancement, dependencyReport, which reports the dependencies used in a project and displays version information. Some puzzling issues were easily solved once we could review the dependency report.

Another need that Bookish had was the requirement to enforce consistent versions of dependencies for all developers. We developed an open source SBT enhancement that allowed dependency versions in SBT build files to specified symbolically. The new config project was able to load the versioning information from a web page, and even from a git repository such as GitHub. Thus versioning information for builds was itself versioned. configTest is a test project for config.

The subsystems needed to be monitored by Nagios. We adapted an open-source Java library to suit our purpose, such that it was simple to invoke from a Scala program. The result was the open-source PushToNagios project.

EmpathyWorks Configuration Utility

Android logo Apple iPhone

Akka logoCoffeeScript logo

This was the configuration utility for an early version of our EmpathyWorks project. The plugin could be packaged as a Java-powered web server or as a .NET assembly.

The configuration utility was originally coded as an Adobe Flex web application using SDK 3.0 and the Cairngorm framework, then it was recoded as an Adobe AIR application when AIR was still in alpha. The AIR application version used the Mate framework. The configuration utility was redone as a Flex 4 AIR application using custom Adobe Spark-based components, and our very own ‘un-framework’.

Configuration data was stored in XML files, which were consumed by the a Java application.

This custom component was a multi-valued slider with three ‘thumbs’, or control points. Each thumb displayed a user-modifiable data value. The component's thumbs restricted the slider to values within the range denoted by the pink horizontal line.
The welcome screen was driven by data provided by a web server, so users were notified of current events.
The virtual world editor is used to define behaviors for species and environmental factors in the virtual world modeled by EmpathyWorks.
The personality rule editor assigns subsets of values to individuals of the species defined in the EmpathyWorks virtual world.

Financial Suite Administration

We assisted a vendor of a financial software suite in porting their administration facility to Flex and BlazeDS on JBoss. This documentation was created to train staff; it has been made somewhat generic so client confidentiality is not compromised.

This UML sequence diagram depicts the interaction between Flex client and BlazeDS server when the client signs on.
This UML class diagram depicts the model presented by the server facade to the Flex client.

MicroStrategy Visualization Flex SDK Extension for eBay

The following email was an unexpected pleasure. As of the date this was last updated, November 4, 2017, Mike Slinn has never met or spoken with Bill Vezey.

Mike,

My name is Bill Vezey, and I am at eBay, working with the SAM Plot Chart project that you built. I am writing to say thank you. You have written an impressive body of code, well architected and well documented.

Thank you for your hard work. I do not mean to butter your toast here, but is a pleasure to dive into your code.

Regards,
Bill
3/18/2010

EBay is Microstrategy's largest customer. We extended the MicroStrategy Visualization Flex SDK for eBay by adding linear, polynomial and power law curve fitting routines, as well as interactive pruning of outlying data points and custom analysis abilities. A remote file browser was provided so that users could store preferences and retrieve report settings from a PHP server. We also added the ability to copy computation results onto the system clipboard so they could be pasted into Excel. Custom components used derived models as data providers.

Click on the image below to view a video demonstrating some features of the enhanced Microstrategy Flex Visualization SDK.

Plot Graph with Linear Trend Line

We extended the MicroStrategy MstrPlotChart component. The linear trend line is computed by a least-squares fit. We added the following styles to the component so programmers could easily customize it:

  • trendLineColor
  • trendLineThickness
  • trendLineAlpha

Plot Graph with Polynomial Curve Fit Trend Line

We again extended the MicroStrategy MstrPlotChart component. The curving trend line is computed by a least-squares fit using a polynomial of the specified degree. We added the following properties to the component so programmers could easily customize it:

  • trendLineDegree
  • trendLinePrecision

The image above is a 5th order polynomial curve fit. The formula for the polynomial can be generated at will. The number of decimal places (precision) for the coefficients can be specified as a parameter to the Flex component. Coefficients that are smaller than the precision are ignored. A precision of -1 means to use the most precise coefficients possible.

Health Care Process Automation

We mentored a group of Delphi programmers that worked for a health care software vendor, and helped them port their application suite to Adobe AIR and BlazeDS. Here are some early iterations of the user interface.

Delphi and Java programmers often have a special challenge; ActionScript looks rather like the programming language they already know, but it behaves quite differently in some important respects. We helped the new ActionScript programmers to become aware of their preconceptions and to acclimatize to new ways of thinking.

Each time a user signed in they would be presented with a dashboard that displayed metrics that related to their job function.
Some overly complex components were designed, such as this data entry screen. We advised the team regarding user interface guidelines, and they simplified the user interface.

SOAP (WSDL) Web Services Enhancements and Tools

Support for SOAP-based web services as provided by the Adobe Flex SDK and Flash Builder was often insufficient for enterprise needs. For example, Tibco AMX generated web services using a consolidated schema model that could not be represented on the client using Adobe's tools and frameworks.

We created a software tool for a client that generated value objects and the code for an enterprise application data layer. We also extended the Flex WSDL parsing capabilities and wrote an enhanced runtime framework that complements the Flex SDK.

Here is an early video showing the code generator:

Here is an updated video of the code generator:

Flex Data Services Channel Designer

This client/server Flex web application was provided with Michael Slinn's book Flex Data Services, Hibernate, and Eclipse.

The Flex Data Services Channel Designer helped developers easily understand and the types of design channels and endpoints common to BlazeDS and LiveCycle Data Services ES (LCDS). A version of these tools that supports the enhanced channels and endpoints provided by LCDS was provided at no additional charge with every copy of Mike Slinn's book Flex Data Services, Hibernate and Eclipse.

This was the main screen for the Flex Data Services Channel Designer. This screen allowed users to easily configure channel endpoints for BlazeDS and LCDS. Click on the image to load and run the application.
This image just shows a portion of the Flex Data Services Channel Designer user interface. It allowed users to configure streaming endpoints common to BlazeDS and LCDS.