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.
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:
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.
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:
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.
Publisher's site is defined by its
PublisherConfiguration, and a
Publishersets it up.
Instructors never have to think about the business aspects because the
Publisherconfigures many of them in the
PublisherConfiguration. The front page of the site is defined by the
Groupis 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.
Coursenormally 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 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 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.
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.
“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
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.
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.
is a test project for
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.
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.
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.
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.
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.
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:
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:
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.
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.
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:
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.