The purpose of building this application was to showcase my current understanding of languages and frameworks, and also to give a better understand of what type of candidate I am.
My qualifications for each requirement are as follows:
3+ years development experience
I've started full time software developing as of June of 2016, have been independently consulting for the past year, with internship experience during the summer of 2015. This nearly 3 full years of experience.
2+ years web development
I've been developing web applications for every role in my career.
Angular development
I have extensive AngularJS experience from Thomson Reuters, and working Angular 2-7 experience from Thomson Reuters, as well as Sergio Solutions.
SQL/DDL development in relational databases (Oracle, SQL Server, MySQL, etc)
I've been a full stack developer for the past three years, working extensively with Oracle and MySQL databases, along with NoSQL databases.
Excellent written and verbal communication skills
Please observe this documentation as an example of my verbal communication skills. As a business owner the past 1 year, I've developed extensive verbal skills as a necessary requirement to acquire business.
Unix
2+ years of experience working with Linux server configurations.
Javascript
I've used Javascript more than any other language, building a few applications with Full-Stack Javascript.
Positive attitude
Positive attitude mixed with optimism are necessary ingredients for exceptional team members, leaders, and success in all facets of life! Every day I strive to be as positive as possible.
Java and/or C# experience
During my undergraduate program I used Java for 3 years. Through Pearson VUE and Thomson Reuters, I extensively used Java for the back-end services.
Shell scripting (ksh/bash) experience
I've often used shell scripting to automate or reduce time spent on launching or killing sequences of processes
Mirth development experience
I took this opportunity to learn software - I've set up a Mirth Connect server, and have called a REST endpoint in my Angular application on load. Please view the Mirth Connect server here: https://ec2-3-16-78-46.us-east-2.compute.amazonaws.com:8443/
Use the username: admin
Use the password: ozzypassword
If you user the MC Admin Launcher, the same username and password will suffice.
Azure exposure
Limited Azure exposure, though I'm comfortable with AWS, which is conceptually nearly identical to Azure.
hosted on github pages (explained below) which connects to back-end REST API
https://sergnio.github.io/angular7mirth/
hosted on AWS (explained below) https://ec2-3-16-78-46.us-east-2.compute.amazonaws.com:8443
username and password to access dashboard listed a few lines above
- This application needs to be HIPAA compliant, secure, available, and scalable.
- EC2 instance, encrypted EBS volume (to protect patience data)
- I used a MySQL/MariaDB database (part of job requirements)
- We're running on Java 1.8 (MC requires additional steps for java 1.9+ compatibility, we gotta move fast!)
- Mirth Connect (part of job requirements)
- Angular 7
- Angular routing
- Javascript
- NPM
- Bootstrap 4
Disclaimer: I've chosen to use AWS to quickly build out this application, as I wanted to create something quickly that demonstrates my knowledge of all or most of the technologies that are sought after.
- First I created an EC2 instance, ensuring to encrypt the volumes which will theoretically contain patient information. To do so, I created a enw EBS boot volume, and installed my application on it accordingly.
- I then configured the security settings to allow
TCP
connections from port80
from my personal IP, along withHTTP
requests onport 8080
, and finallyHTTPS
requests onport 8443
(which is necessary for later) - I went ahead and installed the
java 1.8
,mariadb
andmariadb-server
packages, and started up the mariadb server. - I created a new user called 'admin'.
- As the root user, I logged into the database and created database called 'mirth', and proceeded to grant all permissions for the 'admn' user on the table 'mirth', and left the database along for a little while.
- Now I used wget to download mirth connect version 3.4.2 rpm and proceeded to unzip the package.
- I changed to conf/mirth.properties file to add my MySQL db url, username, and password, so MC knows which database to use and how to log into it.
- I then started the MC Service - at this point, MC auto populated 13 tables in my database, confirming my service is running properly.
- As a bonus, I added Mirthconnect to my Systemd startup, so it MC automatically starts upon server reboot/start.
- I then logged into my MC Administrator by accessing
http://ec2-3-16-78-46.us-east-2.compute.amazonaws.com:8080
, and clicking the "access secure website" button. - I then downloaded the new MC Admin launcher (https://www.nextgen.com/products-and-services/NextGen-Connect-Integration-Engine-Downloads), and proceeded to log into the MC server I just created, using the credentials listed above.
I now wanted to play around a little more with Mirth, to gain a deeper understanding of this technology. After some research and experimenting, I've learned that Mirth is an application that can be used to share patient information accross software platforms. Each system has to commnicate with a central repository, and Mirth can be used to transform the information within the messages being sent to suit the requirements of the end user.
It's one thing to learn and another to apply, so here's a few things that I did within my Mirth App.
- I grabbed a sample HL7 message, and pasted that into the message template.
- I then created a new filter, to only accept messages that messages that equal ADT.
- I also use the message builder to update a message, and as an example, I set any outbound MSH.4 message to the value that's coming in from the MSH.3 inbound message.
While I might not entirely understand exactly all the ins and outs for using MC, I brainstormed a few use potential use cases for MC with my current knowledge:
- Filter patient records where blood pressure is within a certain range (i.e. > 120/80)
- Check if patient is on a specific medication, such as ibuprofen
- If a patient uses a substance such as alcohol, categorize them into a group called "Alcohol Users" by modifying the incoming message.
Now that the MC server is up and running, it's time to build a front end application. While most of my time was spent familiarizing and configuring this Mirth Application, so I didn't put much of an effort towards creating an extensive angular app.
- I downloaded the angular cli tool, and created a base app with routing and with scss support.
- Then I added a title service, bootstrap 4, and created some basic general purpose scss classes.
- Next I created some header, footer, and a home page component with routing for the base path ('') to point to the home component.
- For fun I then added a simple sidebar that redirects to the home page (only page) and I'll spare all the details as to how I added some div tags, h1 tags, coloring, etc.
- And finally I created a simple api service class, which has some hard coded endpoints and login information to hit an endpoint. I'm not as familiar with Xml HTTP requests, but I managed to successfully hit an endpoint which is running on the EC2 instance and return a success message, which I then simply displayed in a div tag.
- I then threw it up on github, and used github pages to host this application, as I've been running out of time and wanted a quick solution to host this client server.
And that's about it! My main goal for this was to create a backend app, a simple Angular app, and call some REST API to demonstrate working knowledge of requirements.
- I've never worked with Mirth before, and the documentation is so very limited, but I made some good friends on the Mirth Development Team (Nick and Chris were life savers!) and they were able to answer so many of my questions.
- Github pages was surprisingly not as easy to host an angular website on. I'm dealing with some strange double uri (https://sergnio.github.io/**angular7mirth/angular7mirth**/)
- Setting up servers from scratch can be a pain. I had to deal with CORS, downgrading versions of Mirth and Java because of existing bugs, and again, little documentation makes life sometimes difficult as a developer
- Mirth Developers are among the nicest, quickest people to work with and to have questions answered. It never ceases to amaze me how willing some strangers are to help other strangers!
- Humans (or maybe just me) are often poor estimators of time. What I thought would be a day or two project turned into be a much longer project, but...
- You reap what you sow - there's no shortcut. You get out what you put in. Period. I've learned and relearned so much about these technologies I've been working with, and I had a blast through it all.
While this isn't a perfect representation of all technologies involved, and while I may not have showcased everything (there aren't too many ways to showcase SELECT and JOIN statements), I believe this is a fantastic representation of my abilities to:
- Produce high quality work, ensuring maximum output with minimal waste, on a timeline
- Prove intiative and independence by showing that I am capable and willing to put in hard work, even when I'm not asked to.
- Deep knowledge of full stack technologies.
Best Regards,
Sergio Najera