There was no time to waste. Roisin sparked up the laptop once more, and waited for the Unity3D environment to initialise. Her blank scene appeared centre screen. She had to make her UI more efficient and more useful for ‘situations’ like she had just experienced.
She wrote a basic spec on her desk with the nearest HB pencil, through and across all the other notes and scrawling she had made.
Movement Tracking
Fast Attach
Find
Fast Find
As with all lists it evolved as she wrote it. She needed movement tracking, not of everything as that might create a massive blur, but not just a complete screen refresh as she had at the moment. Fast Attach was an attempt to calm her nerves about the knife and novelty handle she had created recently. Find, that was missing from the list of commands RC had at a meta level. It took too long to type and go through ‘ls’, Examine and grep out there in the real world, especially typing on a mobile. Fast Find was already a next layer up that her subconscious was processing. If she had a Find giving it an object name then she might want to put some hot buttons or categories in to highlight and find certain types of object. That needed to be a dynamic list she could build upon but she was getting ahead of herself again.
She started at the top of the list and began making additions and modifications to the code. New container objects were needed to help separate code responsibility from the MyController object she already had. With code completion and ability to jump to functions in the editor it was less important whether things were written in one big file or lots of little ones. Her preference was to break them down. It made it easier to just turn a script off to test something, rather than have to comment code out and work around compile errors in big modules.
Movement tracking rapidly ballooned as a function. The seemingly simple two words sought to prove the adage ‘The Devil is in the detail’. Roisin shook her head and blinked her eyes to try and get a bit of clarity on everything that Movement Tracking meant. It was in there, the right solution, it was hiding under layers of dirt awaiting an archaeologist to remove just the right amount of surface to expose it. She focused in on selecting an object for observation. That was the same code, just a different context, to a Translate. She then added a UI property box with a tick box to ‘Follow’ and a tick box to ‘Warn’. She needed to persist the data model across refreshes. Her virtual display had been a set of rigid body objects with a few special additions. The scene was wiped clean each refresh, the objects being deleted and a new batch instantiated. This was a view, and she had a controller. She had been using the stage as the model in the MVC architecture pattern. Now she had to abstract the stage to a new collection object, an in memory database. It was a common enough pattern, she had done this on nearly every project. She created her new class RCDataCollection to hold the information and specific items would be of the RCData type. Almost without looking at what she was doing Roisin created all the getters and setters, the inits, clears, insert and remove overrides for the classes. She was already making this extensible. The RCData was not just a set of coordinates and a name, as her current stage objects were. It was a place, when she needed it, to collect all that Examine data for each object. The RCData was more complex than the Examine result. She created a multilayer object with versioning. She tested the code with another routine, not wired to RC yet. She simulated the generation of a few objects in the scene. Then she manually set the data parameters on some to have their Follow set to true in the code inspector. On the running screen several objects name C, D, and X glowed in a light red. A, B, E and Z were just their normal white. She rolled the curser over D and the property box popped up to indicate Follow was set to true. She clicked her new UI Follow check box and the D now turned white. The inspector panel concurred, it was no longer followed. She did the opposite for Z, it now glowed and the inspector panel said Follow. She forced another routine to run, almost identical to the previous test but the location of the objects were different. A, B, D and E blipped from the screen and re-appeared in random different positions. C, X and Z’s original red became a more ghostly see through, as new glowing red objects appeared in various directions from them. A pulsating, almost electric, line indicated the origin and the destination. C had moved the least distance so the cadence of the pulse was much lower than that of Z which had jumped almost out of view. Roisin slowly closed her eyes and equally slowly nodded her head, pursing her lips as she commended her achievement. “Neat!” She said to herself.
The new data structure, now a layer on a layer, was providing a good substrate for Roisin to build upon. The Find command combined her original “Examine Jar* | grep Marmite” pattern with a mix of either selecting an object prefix from the scene or typing one in. She simply stripped the number from the end of the object name and passed it in to the Examine with a * on the end. She also thought she should do a Filter scene. She had not written Filter on her earlier list but sometimes new requirements get discovered on the way. If it seemed like a good idea, well it was! Filter let her only see the objects matching a certain type. She did this just in the client code initially. It was easy to hide and manipulate the graphic primitives, especially as they now had a richer data model behind them.
On the RCData objects she added the Watch parameter. Each then had its own routine as part of a messaging thread she created. If the Watch parameter was set then the object inspected its own versioning layers. If anything changed with its coordinates it set itself to a glowing blue. Roisin was getting wary that the amount of data she might end up dealing with and the number of threads competing for the limited resources of her phone, might prove a problem. Much of what she had created was dependent on a skilled user not asking the wrong question. If she kept that in mind then she could use the functions in a very gentle and careful fashion. This wasn’t an app for the general public where every button would get pressed just to see how far it could go. She thought back to all those times trying to create the biggest racing pile up in a game and watching the slick physics simulation turn into a jerky stop motion animation one as excessive amounts of debris tried to accurately arc their way across the virtual racetrack.
For Fast Find she only put one selection to start off with. She would probably never need it again, she hoped, ‘Knife’. A button specifically to save typing.
Whilst she was in a development mode she improved her virtual view camera controls, creating buttons and associated gesture mapping to be able to zoom in and out and centre on things other than herself. She made sure she had easy access to Reset to defaults too.
The application completed compiling and the workflow pushed FMM v1.2 to her iPhone, Roisin almost stopped thinking. Her mind was at rest. There were no inner voices, no scenarios running, no regulatory voice, nothing. She just stared out into space. It was a cognitive zero G she had reached. It did not last long. Like a vomit comet she had been ascending, on a roll and reached the peak of a parabolic curve. Now was the rapid descent. She felt like she was standing on top of a huge skyscraper, teetering on the edge. Her shins tingled. She had been masking the enormity of her discovery. She had buried her head in the architecture of the application. Someone had nearly killed her! She had retaliated in ways no other human would have ever done before. This current rush of everything, good and bad, could go one of two ways for her. Either the toilet bowl retching again, which felt very likely, or get out there and… Reconfigure something?
The sync was complete. She sparked up FMM v1.2 and ran a few tests with the Cap and Coin cubes. She watched as her onscreen code let her see the path of the Coin as she moved it and flicked it around her real desk. Then she got a bit playful. She marked the Cap as ‘Watch’ and flicked the coin at it. She missed the first time, but the second time the Coin cannoned off the Cap. On screen the glowing blue cap cube turned red as it angled away absorbing some of the coin’s force. She expanded her Zone to encompass her jar of Marmite downstairs. She selected her quick find ‘Knife’ button, her collection of Sabatier plus some assorted cutlery in a drawer flashed up in a very serious looking and very obvious amber warning colour amongst the rest of the kitchen equipment.
She Reset All, and she was back to the office view. The test had settled her stomach again and she could go back to thinking, ’Professionally’. Being a ‘Professional’ seemingly meant ignoring a lot of stuff, it might be morals or common sense that go out of the window. It was a way to express a degree of focus and single minded attention.
Alarm, bag, door and she was outside again heading along the street. She strode past Costa. Almost raising her nose in the air as she did so. Mostly in disdain for the clientele who had not bothered to help her. They weren’t the same people that were there a few hours ago, but that was not the point, she thought. She knew she could help anyone in a situation like she had been in now. She lowered her head to a more normal level as she considered if she would have blinked, tutted or just ignored someone else getting their bag snatched. She agreed with herself that she probably wouldn’t have joined in before. It is best to keep out of things isn’t it? The smell of cooked bread, meat and pastry wafted into her nasal cavities as she approached Greggs. A normal irresistible combination but she was not in the mood for anything at the moment. Roisin reached the crossroads and their complex set of traffic lights and filters. As a pedestrian it was just the little green man saying it was safe to cross that she needed. Mini traffic jams of ten to twenty cars filled each direction. The driver at the front of each convoy cursing their luck to not get through last time. Their second in command behind them cursing the leader for not being quicker. In a few seconds they would all be on their way to their next challenging junction.
Roisin looked across the road, in a doorway next to the Bank, in sight of the external cash machine, sat a disheveled man. He had a messy grey beard, his head was covered with a burgundy bobble hat, wisps of white hair poking out. He sat half cross legged with a small carrier bag to his left and a ubiquitous Costa cup in front of him. She could see that it was not filled with a nice warm latte with a hint of vanilla. The odd passer by dropped a coin or two in but it was certainly not going well for him. Even across the road Roisin could see, that whilst his eyes were open, he was removed from the World. She saw him turn and look up, like a pet expecting a treat, as a lady used the hole in the wall. She did not acknowledge him. The machine beeped and whirred and delivered some valuable paper to her. She pushed the notes straight into her bag and turned away from the man and headed off.
She felt the need to perform a random act of kindness. Roisin looked at her virtual display. She increased the Zone just a few metres more. It was easy to identify the man as all the other Humans on the display had slightly higher z values as they walked, he was nearer the virtual floor. It was also easy to identify the cartridges stacked full of PaperCurrency cubes. She could see PaperCurrency1 to PaperCurrency22 all linked to Cartridge1, just behind it were Cartridges 2, 3, and 4 with other PaperCurrency ranges. Roisin was pleased she had put in the little graphic of a bidirectional arrow to go with the range ellipsis that RC delivered when there were too many of the same thing. The arrows had a PaperCurrency floating name but she knew they were not actual objects, but markers of a collection. “Bank error in your favour collect £200.” She thought. She clicked the range arrows and her dialogue popped up. She selected the range 1 to 20. Nineteen new PaperCurrency objects with increasing numeric suffixes rippled onto the screen. It was quite a simple move to Translate those on screen, dragging them and rotating the view to ensure her x, y, z location was correct. She applied the command. The user stream Tweet was sent under the covers of her FMM v1.2 UI. For a second the man did not notice anything. He then realised that a neat pile of banknotes was balanced on his crossed knee. The top one was a twenty. In one swift move he both looked left and right and removed his woolly hat placing it over the pile of cash. She felt like Robin Hood. Sure that was about £400 she had just shifted from the bank, but they had more than enough of our money. She hoped that she had done the right thing. She hit Reset and turned and carried on walking. Her nausea now completely replaced with a positive wave of energy.
Cash machines are not built to worry about money suddenly vanishing from their cartridges. The cartridge doesn’t care it just keeps the stack under pressure ready to be dispensed. However, when a cartridge swaps over there is a check and balance in the software. An accounting balance to be exact. An apparent fault was logged as someone tried to draw out £50. The machine whirred and delivered the cash, swapping a cartridge over to meet the demand. The machine then switched to safe mode and declared itself out of order. It was a common enough occurrence.
Roisin was unaware that she had now been the cause of three anomalies in a quite closely related geographic area. She was also unaware that to the Combined Corporate Surveillance Operation algorithms two is company three is a crowd. To be fair to her she did not know the CCSO even existed. She knew about the NSA and GCHQ surveillance of course, but she was not even contemplating them at this moment. GCHQ monitored lots of metadata traffic and their snooper’s charter let them tap into phone and email records. Social media had remained off limits with its encryption still in place, unless they had a really good reason and evidence to approach any of the companies for any data.
The operator sat looking at the infographic representation of a multitude of sources. He didn’t claim to know how it worked, he just knew he was trained to follow up on any odd patterns that the software found. It was hard to say if it was an Artificial Intelligence or not. It just fed his screen with words and images. Shapes and linkages flowed around and he swam through them on a daily basis during his shift. He saw a little hotspot cluster emerge out of the cloud of objects. There were always little hotspot clouds emerging. The not so clever AI had no way to contextualise it, just reporting back to base like a dog returning a stick to its master. He on the other hand had the smarts, he had the ability to drill down and into a hotspot and see what caused it. There was no real reason he picked this one, just a gut feeling.