6

I've looked around a bit and probably haven't found the right medium for this question so let me know if there's a different forum I should bother.

First, there is an application managed by another group that does some simulations and communicates to our system via Ethernet. Let's call this App.

Now, we have the following setup on a Red Hat Enterprise Linux system:

  1. Legacy Ada code (used to communicate with App following a predefined standard)
  2. Linux csh/sh scripts (call Ada tasks to communicate with App or write files to update Flash - either called by Ada tasks or constantly running alongside program to monitor status)
  3. Actionscript 2 Flash Movie in Firefox window (GUI - polls files to see if updates are necessary and loads variables to PHP to make system calls, call Linux scripts, or run Ada tasks)
  4. PHP (used by Flash to call Linux scripts and Ada tasks to communicate with App)

I am looking for architectural improvements. Obviously the mishmash of languages is a nightmare. Above that, Flash is difficult to work with because we haven't been able to get an interrupt-driven architecture in place. I've tried to use Flash's ExternalInterface class for a more event-based flow, but whoever setup the Flash environment did so in a way that there is no available ExternalInterface. "Finally" (for this post), our program is run on a local machine, so running a .swf in a Firefox window is unnecessary.


Thanks for the feedback! Let me respond to the first three comments I see:

  1. It would be an absolute dream to get time and money to rewrite the entire system in a more coherent manner. I expect significant resistance (because I've already tried a few times), but I will do more research and attempt to gather more compelling cases and communicate the "feebleness" of only updating part of the "design".
  2. You're right - I was rushing too much to think it was necessary to know the guts. Basically I was hoping for stuff like, "My favorite languages/tools/patterns/paradigms/etc for an architecture that needs to have a GUI and interact with Linux is blah" or "An interrupt driven architecture for AS2 does exist, it's blah" or "ExternalInterface isn't available? Have you made sure that blah?". I've updated the above with maybe more useful information. Let me know if that didn't actually clarify anything.
  3. Hopefully the previous response helps explain what the pieces do to some degree.

EDIT: I no longer work on this project, but we can keep the thread open if anyone else thinks it'll be useful for others (doubtful as I hope no one ever runs into this embarrassing situation). What ended up happening was <whine> despite repeated attempts from me and two other developers to suggest rewriting the entire application in Java/Python, we never convinced anyone. Then another developer (not on the project) volunteered to rewrite everything in Java and everyone jumped on board all of a sudden so now the whole thing is in Java (not App, but everything in 3 and 4 is now Java). </whine>

Mark Lodato
  • 207
  • 1
  • 5
  • 6
    I think you're asking the wrong question. You got into this mess by cobbling together a bunch of tools; the way you get out of it is not by throwing more tools at it, but by writing a coherent system with a sensible design and less moving parts, preferably using as few programming languages as possible. – Robert Harvey Dec 19 '16 at 17:52
  • 5
    You haven't described what you are trying to accomplish. It's hard enough to understand a Rube Goldberg architecture like this when you know what it's doing. How can anyone possibly tell you how to improve it if we don't know what it's meant to do? – JimmyJames Dec 19 '16 at 18:32
  • What bugs me about this question is if someone said "oh just do everything in 3" I don't know enough of what this actually does to tell them why not. We need a more than a list of moving parts. What do they do? – candied_orange Dec 20 '16 at 01:39
  • Thanks @RobertHarvey. I will redouble my efforts to convince the powers that be that a more complete redesign is necessary. – Mark Lodato Jan 03 '17 at 17:59
  • Thanks @JimmyJames. I tried to explain a little more what each piece does. – Mark Lodato Jan 03 '17 at 17:59
  • Thanks @CandiedOrange. I tried to explain a little more about each part. – Mark Lodato Jan 03 '17 at 18:00
  • 1
    Sorry but I still don't see an explanation of the big picture. Forget about the design for a second. Why does this thing exist? What is it's purpose? – JimmyJames Jan 03 '17 at 18:18
  • @JimmyJames The four things above are meant to let an end user interact with a GUI to communicate with the other group's simulation software. Let's say the other group's software has data about a level in a video game the user has to complete. The user interacts with the Flash GUI that talks through Linux/Ada to the simulation to see if they did the right thing. The other group's software might react by sending a message to Ada/Linux/Flash to update the GUI to alert the user of an incorrect action. Does that help at all? If so, I'll through it up in the post itself. Thanks! – Mark Lodato Jan 31 '17 at 19:17
  • Yes. Why does the "application" exist? – JimmyJames Jan 31 '17 at 19:21

2 Answers2

1

By assuming the following:

  1. You won't change App, since it's maintained by other group
  2. You don't need to change or interact with the AS movie, just check for flash updates

I'd do the following in order to improve your overall setup:

  1. Port legacy code that uses Ethernet, to a more high level language of your choice, I would go with Python;
  2. Remove GUI; instead use Python (or something else) in order to call the .swf file, and check for updates, and perform system calls;
  3. Create a proof of concept with the above steps; this will help spread the idea of improvement of the system to your colleagues.
Emerson Cardoso
  • 2,050
  • 7
  • 14
  • This seems like a good idea. I'm sure you understand Flash better than me, but our GUI _is_ the .swf file. I'm not sure how we can remove the GUI but have Python call the .swf file. Can Python update the state of the .swf file as though AS2 code had been executed? – Mark Lodato Aug 28 '17 at 16:59
  • Actually what I suggested was removing the html page + PHP approach, and use a local approach with Python or something else. As you said, other people will rewrite this part of the project in Java, and as I understood, they will rewrite the .swf as a Java app too. I think that's a good idea and basically what I suggested, the only difference is that I thought it would be prohibited to change the .swf, and I suggested python; apart from that I think it will be a good improvement. – Emerson Cardoso Aug 28 '17 at 18:29
0

Would it be possible to:

  1. Introduce a MySQL database or any other lightweight database into the system
  2. replace writing on files with updating this database
  3. Add a jBOSS application server to read from this database and render data into jsp pages?
A.Rashad
  • 594
  • 3
  • 19
  • I like the idea of using the database instead of the files. I know nothing of jBOSS. Could it be used to sense writes and call directly into AS2 code? Or update the state of the .swf file? Otherwise, we have the same situation of the Flash GUI needs to be constantly checking the database to see if things have changed. Sorry for ignorance of jBOSS. – Mark Lodato Aug 28 '17 at 17:00
  • Databases can have triggers associated with inserts, such triggers can call external applications, so yes, you can have an event driven update. jBOSS can be replaced with Apache Tomcat, if you want. – A.Rashad Aug 28 '17 at 17:06
  • Well the database can call an external application, but I guess the situation we were in was, when the application starts, a Firefox window opens and loads the .swf. Then the .swf file has setInterval calls that read a set of files every so often. When the App (managed by the other team) wants something to happen on the .swf, we get a notification, then we use a .csh script to write to a file, the .swf reads the file, and updates accordingly by running some AS2 methods. Could the Database trigger jump right to the heart and call the AS2 methods? We hoped for a more event-driven architecture. – Mark Lodato Aug 28 '17 at 17:09
  • I am afraid I don't know. sorry – A.Rashad Aug 28 '17 at 17:14