Nana is a cross-platform library for GUI programming in modern C++ style.
Two little kids with big grins came to fetch me. Roy and Kasha looked as delighted as I felt to be rescued from the grey busyness going on among the grey adults in the school admin office.
Up the stairs and along the corridors lined with lockers, just like the ones seen in tv shows, the classroom held two dozen more kids grouped in threes and fours. Their postures were terrible. It was not just that they slouched. Their arms and lags stuck out at odd angles like rose bushes that needed pruning, many heads were resting on desktops just as if they had marched for a week to get here and faces were sheltered behind a hand or shoulder as if they were so many shy Victorian maidens. It was all a bit of a shock for someone who was last in school in rural Scotland where we sat in ordered ranks, backs straight and facing forward.
So, anyway, I launched into my introduction. When I am working on Computer Science I call myself ‘Speaker To Robots’. I write code that lets people control their robots. Robots speak one language and people understand a completely different language, so they need me to help out. Let me tell you about a few of the robots I have spoken to …
Glancing around the untidy heaps of limbs that were my audience, I was caught by a bright flash of white from every pair of eyes. I realized that they were all paying close attention. Suddenly I was enjoying myself.
I finished up. Time for you to talk to some robots yourself. These are the characters that move around and interact in the world of Minecraft. The world is not real, it is a simulation, but the robots that populate the world are real robots – they work in the same way as real-life robots and you can talk to them, control them, in just the same way
They plunged in without hesitation. They zoomed. The room filled with a happy hubbub. These kids knew what they were doing, they were focused on getting it done, and with a speed that astonished me the puzzles were ticked off. I wandered around looking for someone who was stuck, but really I only needed to offer praise.
The best thing was the energy and application. The kids were busy trying this and that. No-one was hung up on what I have seen so many adult novice programmers hung up on: looking for the problem. Instead of sitting, waiting for inspiration to strike, they were busy.
It was a short hour and when the bell rang they all rushed off for lunch.
A bus trip planner application for windows desktops coded in C++11, capable of finding the optimal trip between two locations through the Nottingham City bus network in less than 2 milliseconds.
- User inputs an unlimited number of bus timetables.
- User inputs walking times between bus stations.
- User request timetable and walking times to be read from input files, OR from database constructed from input files entered on previous run of application.
- User inputs real time deviations from timetables, indicating current route departures which are running early, late or have been cancelled.
- User inputs trip specification: start time, start location, destination location.
- User chooses interactive mode. In the default batch mode, program reads timetables and calculates one trip. In interactive mode the timetables are read once and the user can enter multiple trip planning requests.
- Application calculates shortest trip from start to destination, including necessary transfers between routes and walks between stations, taking into account any real time deviations using the Dijkstra shortest path algorithm.
- Display shows total trip time.
- Display shows wait at start station
- Display shows each station stop on trip
- Route number
- Station location
- Display shows, when necessary to transfer to another route
- Wait time
- Display shows, when necessary to walk between stations
- Walk time.
- Wait time.
Vase is an extensible process simulator that can handle both individual and continuous tasks. Examples of individual tasks are customers at a bank, cars on an assembly line, or documents in an office. Examples of continuous tasks are oil in a refinery or water in a river.
A source generates a task. The task moves through the process until it reaches a sink. The path of the task through the process depends on the nature of the task, the modifications which may occur to the task and the connections in the process.
The name Vase is based on an image of the process as a network of pipes and flowers. The pipes allow tasks to flow between flowers. The flowers are event handlers which modify the tasks and control their movement. The arrangement of flowers that define a process is called a vase.
Vase is designed to make it easy as possible to add specialized flowers ( event handlers ) with their own appearance and behaviour. Here are screenshots of two models using specialized flowers.
Sample Model: Pellet Dryer
This shows a model of a wood pellet drying plant. It has custom designed flowers which are not available in the open source code.
Sample Model: Fermenter
This shows the simulation of a fermentation process with Ex situ Butanol Recovery (ESBR) for biobutanol production. The simulation is based on this paper .
The screenshot shows the VASE process model: essentially a fermenter and an adsorber connected with a circulating flow. In the bottom right is a pop up where the user can enter starting conditions and parameters. In the background is a graph showing the results of a simulation run, with the sugar, ethanol and butanol concentrations in the fermenter plotted against time.
The ESBR model is under development, currently ( March 2016 ) the adsorber is being implemented. All the code is open source and is available in the VASE repository.
Sample Model: Stopping Machine
Here is a task orientated simulation of a production line with machines that stop from time to time
The background graph shows the throughput ( green ) and queue size ( red ) for machine_1 plotted against time.
Raven’s Point contributed to the development of a calculation engine to perform Finite Element Analysis ( FEA ) of conveyor belt pulley designs. The FEA code was optimized and parallelized so that it ran in a few seconds, numerous consistency and design checks added, and a Bill of Materials and Operations implemented. The engine is currently in use here.
Added code timing profiler report in a string, so GUI applications can be profiled. cRunwatch