Software Developed or Open-Sourced by Ropley IT

Ropley IT has developed and supports a number of software products. These products are all written in .NET and are currently Microsoft platform hosted, some on Windows, some on other platforms via .NET Core and ASP.NET Core. Someare free-licensed binaries with source code IP kept within the company. Others are published with source code under the MIT licence, and are available to download or access from GitHub.

Digital Signal Processing Library

This suite of libraries implements a (growing) set of classes and algorithms for creating, designing and experimenting with digital filters. In its current form, the library offers the following capabilities:

  • Generating Butterworth filter polynomials for low and high pass Butterworth filters of any order
  • Implementing Infinite Impulse Response (IIR) filters using the bilinear Z transform so that analogue-equivalent filters such as the Butterworth filters mentioned above can be mapped to the sampled digital domain
  • Applying frequency pre-warping so that the cut-off frequencies for the IIR digital filters are at the same frequency as their analogue counterparts
  • Rendering the waveforms output from digital signal processing libraries to SVG, BMP, JPEG or PNG files
  • Creating standard periodic waveforms or transient pulses to feed through filters or Fourier transformers
  • Creating window functions and applying them to waveforms to reduce spectral leakage when applying digital Fourier transforms

More complete documentation for the digital signal processing libraries will be found on their Github wiki, while the libraries themselves are available from their Github repository.

PDF Presenter

PDF Presenter is a tool that manages the presentation of slides held in a PDF file on a second monitor or projector attached to a Windows PC. The tool has a main window on the PC itself, with a separate full screen view of the currently selected slide on the projector/second monitor. A suite of annotation tools are available on the main tool window for annotating the corrently displayed page, the annotations appearing immediately on the projected image of the page as they are made. The tool remembers the annotations painted over each page so that if you return to that page the annotations represent themselves. The tool also allows you to create any number of blank slides on which you can draw your own slides while presenting. These annotated blanks are also remembered by the tool and can be returned to later by selecting them from a list of favourite slides in the tool’s main window. There are many other features built into the tool. This product is not currently available as open source code but can be made available as an installable binary on a recent Windows platform. If you would like to try it out, please contact us.

Software Requirements Editor

The Use Case Editor is a tool used by business analysts, agile product owners and requirements engineers for capturing and organising functional and non-functional requirements. Specifically it captures and formally documents use cases using an automated document template. It also captures logical data models,  and automatically generates activity diagrams from use case primary and alternative path specifications.

Full documentation giving instructions on its installation and use can be found here.

The tool is available for download for installation and use on a Windows platform by downloading the zipped version of the file UCEditorInstaller.msi.

GLR Grammar Parser

The GLR parsing suite ParseLR is a tool that generates and provides the runtime for .NET hosted generalised LR grammar parsers, as well as generating C# state machines from formal state machine descriptions. Similar in purpose to Bison or Yacc, this tool also incorporates the state-splitting algorithms used to extend it into a GLR parser. The tool takes an input grammar, and converts it into a C# source code parsing engine that is then incorporated into an application that needs a parser.

The parser can act as a compile-time tool generating fixed source code for a parser for a specific grammar. Alternatively it can operate dynamically, allowing the grammar rules to be specified or changed dynamically at run-time, with a new state machine parser being generated and launched as and when the grammar changes.

Note that the parser also incorporates the ability to call condition-testing functions at each shift or reduction. It is this that enables it to also implement complex finite state machines driven by grammar rules.

The source code is made available on GitHub at this URL along with several runnable examples and copious documentation on its GitHub Wiki.

At-Runtime C# Code Compilation and Execution

The DynamicCSharp library is a .NET Core library that makes it possible to read C# source code from a string or a file in a running program, to compile it to an assembly, to load that assembly back into the same running program, and to invoke the methods and classes of the dynamically generated assembly.

This project is released under the MIT licence, and is available together with its documentation from its Github repository as source code, or from nuget.org as a NuGet package.

Visual Studio Folder Cleaner and Zipper

The VSClean utility is a tool for cleaning out all but the bare essential files from a C# solution and its project sub-folders. When Visual Studio builds and runs automated tests for an application, a huge disk overhead in binary folders and test data folders is created. Combine this with the download and installation of packages from repositories such as NuGet, and your solution folder becomes too big to zip up and attach to emails, or to put on a USB key. VSClean strips all these unnecessary files out, leaving the bare minimum files needed to reconstruct the product later.

VSClean uses a filter file that itself uses the same filter specification as used in Git’s .gitignore files. Because of this, it is possible to configure VSClean to clean files from folders for other languages and development environments than its default C# filter set.

VSClean is available at source code level together with its documentation at its own GitHub repository.

Image Compaction

The ImagePacking application is a tool written in C# for shrinking images from one folder into another, while preserving the maximum quality in the images achievable for the output image size. So often people upload images onto web servers and web sites that are way bigger than the small rectangle in which they are displayed, leading to slow page downloads and unnecessary server disk use. ImagePacking allows you to identify maximum width height and file size in kilobytes for each image file, then shrinks all images from an input folder to smaller versions in a selected output folder, while preserving image aspect ratio in each case.

The ImagePacking suite is made available on Github under the MIT license. Bear in mind that in its present form, this is a Windows-hosted application.

Involute Gear Vector Generator

This application is used by CNC machinists who want well designed profiles for involute gear wheels that they intend to machine from flat stock using a CNC machine. It provides options for cutting gears with differing modules, pressure angles, profiles and other technical parameters used by involute gear designers. The application can also design ratchet wheels, escapement wheels (if you are a clock designer), and wheels for roller chains or clock chains.

The application is available in two forms. As a console app for use in scripted situations, or as a web site implemented using Blazor Server technology. The code itself is all written in C# and runs on .NET 5.0 or later. Consequently it can be hosted on Windows, Linux, or in a container.

To investigate the code and the documentation, please go to the application’s GitHub repository.

Assorted Blazor Components

As part of contract work over recent years, a number of useful general purpose Blazor components for use in Blazor Web applications have been refreshed and made available for general public consumption. Each of these was created because there seemed to be no equivalent in other public domain libraries.

Specifically these components are briefly described in the following list:

  • NavComponents – implementation of a collapsible left navigation bar for a Web application. Available on GitHub.
  • Collapsibles – Collapsible <div> layout based on flex. Allows you to hide a div and for adjoining divs to expand to fill the space freed. Collapsed items can be restored by selecting them from a menu strip at the top of the Collapsibles component. Also available on GitHub.
  • FSMWorkflow – Implements a tabbed panel where the navigational model between the tabs is controlled by a finite state machine described in the Blazor markup. Useful if there are ‘rules’ about which other panels (tabs) you can navigate to based on input already provided. See GitHub.
  • MultiSelector – An implementation of multiple drop-down selection, where the selection in one drop-down drives the selectable content in other drop-downs. Also contains a modal dialog implementation. Find the source code and demo on GitHub.
  • AuthenticatedUI – A full .NET 9.0 Blazor application with authentication and authorisation built in using JWT tokens. Source code on GitHub.

Command Argument Parsing

A simple library for capturing command line arguments to a C# application, providing integrated help documentation for command line arguments. The world doesn’t need yet another one of these, but hey, I have found this useful in recent years. Source code on GitHub.

Excel Server Automation

If anyone has ever tried to write server-side code to edit or create an excel spreadsheet, you will know just how difficult this can be. For a start, servers don’t work well with no GUI, and Excel is no exception. Secondly, Excel automation combined with interop from languages like C# is painfully slow. The main server-side alternative is the OpenXml library, but this is very close to the raw Xml and does not protect you from creating grammar-breaking spreadsheet files. Alternatives like ClosedXml and SlapKit each go some way towards making this more reliable, but eaach omit some of the features we might like to have in a spreadsheet.

This application gives a demonstration of how to combine OpenXml with SlapKit to give fairly good access to most Excel features, within server-side code and without ever invoking Microsoft Excel to do so. Source code is available on GitHub.

An Orrery

Not really reusable commercial software, but an interesting demonstration of an SVG graphics library being used within a Blazor application so that the application can be run on Linux as well as on Windows servers. This application is given a latitude and longitude of an observer. It is also given a frequency in minutes, days, weeks, etc., and will generate a chart of where in the sky at these repeated intervals the observer should look to see the sun, and each of the major and minor planets. Source code available here.

Hobby software

Items beneath this point in the list are hobby software, aimed specifically at handbell or tower-bell ringers. If you are not a member of either of these communities, these will be of little use to you!

Handbell Music Score Editor

This is an application used by societies that ring music on handbells, for authoring the music scores and also for displaying them on a tablet device when handbell teams are playing the music. It supports audio playback of the scores to verify that they have been written correctly while editing.

The code is open source, but designed specifically to run on Windows-based laptops and tablets.

The code and its documentation are available for download from its GitHub repository.

Composition Proof Engine

This application, named ERIL (Extendend Ringing Language), is used by campanologists to search for compositions that are ‘true’ (contain no repeating changes) to be used when ringing changes either on tower bells, or when ringing changes two in hand. It is a specialist tool with little meaning to anyone outside the change ringing community.

The executables are designed to run on Windows platforms in their current configuration, but a newer Windows or Linux build is available shortly.

Detailed doumentation together with the files needed to install and run this application may be found here.