Chris De Monte
I am a software developer who genuinely loves being in the tech field. Before I became a programmer, I pursued a career film and screen writing. I have a passion for both art and science, and for me, software development is an art. When you create something new, it is very rewarding feeling. I have a diverse skillset and range of experience that has taught me different approaches for solving difficult engineering problems. My goal is to apply my skills in a way that helps others solve their problems, and to become a master at my craft.
Work Experience
Software Engineer
Developed software for the Labgen team of Medfar/Comtron. Labgen is an medical laboratory information system (LIS), with a laboratory-facing program written in C, and a doctor and patient facing web application. I developed new features for both the C program and web portal, based on the requirments of laboratories and doctors.
- Developed new features that were instrumental in client success.
- Designed and programmed a pie chart for displaying information on patient reports. The chart had to be developed from the ground up using C and PostScript.
- Created custom patient reports for a type of genetic testing that is unique to only one of our clients.
- Collaborated with doctors and laboratory directors to improve our cytology and pathology module.
- Developed new reports used for billing and sales statistics.
- Worked with the full stack of our web portal, and developed features that use the C backend and JavaScript frontend with NextJS and React.
- Other notable achievements:
- Completed 200+ requests, bugfixes, and enhancements in my first two years at the company.
- Worked with the international team, and reviewed code written by other programmers to ensure its quality.
- Went above and beyond to learn the requirments of our clients. This includes gaining an indepth knowlege of molecular testing, genetic testing, laboratory compliance standards, and billing.
- Wrote programs that read and write electronic medical records in HL7 format.
- Fixed urgent issues in a timely manner, and took on emergency duties, such as answering the emergency phone and handling issues outside of office hours.
- Developed and maintained the Labgen database.
- Technologies Used: C, C#, Linux, JavaScript, NextJS, React, Python, PostScript, Databases, SQL.
Software Developer, Intern
Collaborated with scientists at the IOS Beamline, National Synchrotron Light Source II, Brookhaven National Laboratory, to develop software that improves the efficiency and user experience of data acquisition, processing, and analysis for X-ray photoelectron spectroscopy (XPS) and X-ray absorption spectroscopy (XAS).
- Developed a Data Processing GUI in the Igor Pro programming language. The interface provides tools for parsing raw XPS data from text files; preprocessing Igor Pro wave data; auotmatic file management/organization; and data normalization, calibration, and visualization.
- Optimized the raw XPS data processing algorithm. As a result, it parses raw text into Igor Pro waves 70% faster than the old script.
- Reduced the number of steps required to run processing functions from 8-10 steps to 2 steps.
- Implemented a graph window and a scrollable list of waves to compare waves and visualize the effect of the processing steps.
- Is currently used by scientists for research at the IOS beamline.
- Screenshot of the processing interface, comparing two rhodium waves:
- Developed a Data Analysis GUI in the Igor Pro programming language for analyzing XPS data through statistical curve fitting. It provides tools for visualizing XPS wave data and fit curves, multi-curve fitting, and curve fitting on large batches of data.
- Improved on the old Igor Pro interface by incorporating all data entry fields into a single window, compared to the old interface that used multiple windows.
- Allows users to easily switch between waves and fit curves, and dynamically changes the labels of data entry fields to reflect the selected curve.
- Is currently used by scientists for research at the IOS beamline.
- Screenshot of the analysis interface, fitting a multi-peak curve to a rhodium wave:
- Developed two GUIs for XAS Data Acquisition and Data Analysis with Python and PyQt. They interface with BlueSky, the top level python framework of the NSLS-II control system. These GUIs improve the user experience of performing XAS and reduce the risk of user error.
- Improves on the old method where users typed commands into a Linux terminal. The GUI has sections for running different scans and plotting functions, making it easier to train new users at the beamline.
- Protects the system from invalid parametrization with labeled data entry fields, and performs validation checks before commands are sent to BlueSky.
- Implements its own command line to maintain the power and flexabilty of the Linux terminal, including searching through a history and auto-filling commands.
- Logs the actions of the users in a log file.
- The GUIs were unanimously preferred by users of the IOS beamline, and is currently in use to conduct experiments at the IOS beamline.
- A screenshot of the plotting interface:
- A screenshot of the scanning interface with the command line:
- Technologies Used: Igor Pro 9, Python, Qt/PyQt, Qt Designer, iPython, BlueSky, Linux.
Software Developer
Developed software used by the Study of Affect and Depression Lab at Adelphi University to conduct a specific type of behavioral health experiment called a judgement of contingency experiment. In the original experiment, subjects would press a button that had a predetermined probability of turning a light bulb on or off, based on if the button was pressed, and they were asked to estimate the degree of contingency between their response/lack of response and the outcome.
- The experiment was originally conducted with a physical apparatus. I designed a program that was the first software tool used for a judgement of contingency experiment that did alter the intended stimuli.
- Conducts the experiment through a JavaFX GUI, and upon completion, the program runs statistical analysis on the data.
- Was later adapted to JavaScript and hosted on the Qualtrics Survey website to utilize the Qualtrics Survey Engine for data collection, analysis, and storage.
- As a result of this software, this area of research is continuing for the first time since the 1970s.
- Demo of the program:
- Submitted to the 2019 SURC Undergraduate Conference. Research paper currently pending.
- Technologies Used: Java 8, JavaFX, JavaScript, Qualtrics.
Projects
Samhdr
An original, online card game that allows users to connect with each other and challenge other players in quick matches. Players simply enter their name, select 3 of the 6 suits to build their deck, and enter the lobby to find other players.
- Built a front-end website using React and hosted it on an AWS S2 bucket.
- Built a back-end server using Node.js and Socket.io and deployed it to an AWS EC2 instance.
- Reserved a domain using Google Domains, and resolved the domain using AWS Route 53.
- The start of development to the first deployment on the cloud took two weeks.
- A demo of the game:
- Visit the site at: samhdr.com
- Visit the Github repositories at: Samhdr and Samhdr-Server
- Technlogoies Used: React, Node.js, Socket.io, Amazon Web Services, Google Domains, HTML, CSS, JavaScript, JSON, Linux
PyExcelSifter
A python program that allows users to import an excel or csv spreadsheet and export a new spreadsheet with only the selected columns.
- Uses tkinter for the GUI.
- Excel importing, exporting, and manipulation is done through pandas.
- Used to solve a problem where I wanted to create a database for my college search android app using a data sheet from the Department of Education. The csv file had 7000 rows (7000 schools) and 2600 columns. In PyExcelSifter I picked the 25 columns that contained relevant data for my android app and exported a new csv file. The file size shrank from 95,381Kb to 1,139Kb. With a much smaller size, it is possible to store the data locally on the android device, and only make calls to the backend database when the DOE releases new yearly data.
- Visit the Github repository at: PyExcelSifter
- Technlogoies Used: Python, tkinter, pandas
PyTextGrab
Have you ever been looking for a code snippet or a tweet online, and when you find it you learn that the text is part of an image? This utility lets you select an area of the screen and uses text recognition to turn it into copy-and-paste-able text.
- Uses tkinter for the GUI.
- Screen selection and screenshot utilities come from the pyautogui library.
- Text recognition comes from the pytesseract library.
- This program is a test of concept that was developed in two hours.
- Visit the Github repository at: PyTextGrab
- Technlogoies Used: Python, tkinter, pyautogui, pytesseract
Population Projection
A jupyter notebook that reads from a database of population growth in major US cities from 2020 to 2100 and visualizes the data onto graphs.
- Uses pandas to read population growth data stored in an excel spreadsheet and export an abreviated table with the counts of how many cities fall into a set of population ranges over 10 year intervals.
- Uses matplotlib to plot the data onto a scatter plot graph using longitude and latitude of data points.
- I learned that Harris County, Texas, is projected to surpass Los Angeles, California, in population size by 2100.
- Visit the Github repository at: Population Projection
- Technlogoies Used: Python, pandas, matplotlib
RSI Stock Trading Simulator
An android app where users can create an account, login, build a mock portfolio, browse through stocks, and view recent stock data. The application calculates the relative strength index (RSI) of each stock based on the previous 14 days of data and suggests whether to buy, sell, or hold. There is also a stock trading simulator that calculates the rolling RSI over a three month period and uses a custom-made algorithm to simulate the estimated gains or loss in portfolio value if the user followed the app's trading suggestions.
- Built the app using Java and Android Studio.
- Sends HTTP calls to the Alpha Vantage stock market API and parses the response for relevant data.
- Stores user data on Google Firebase in a NoSQL database, and retrieves user data when logging in. Perfomrs checks to make sure usernames are unique when creating new accounts.
- In testing, the RSI trading algorithm performed better than a holding strategy in ~60% of the simulations, performed the same as a holding strategy ~30% of the simulations, and performed worse in ~10%.
- Visit the Github repository at: Android RSI Stock Trading Simulator
- Technlogoies Used: Java, Android, Android Studio, Google Firebase, Alpha Vantage Stock API, HTTP, JSON
College Application App
An android app where users can enter their SAT scores and search through a list of colleges. Uses data from the Department of Education to compare the average SAT scores of admitted students to color code the schools: green if the user's SATs are above the school's average SAT score, yellow if the student is around the average SAT score, and red if the user's SAT is considerably lower than the average SAT score.
- Built the app using Java and Android Studio.
- Requests school data from a list of over 7000 colleges stored on Firebase.
- Incoming data is structured internally into a Tree Map to accomodate for varying data sizes but achieve quick search speeds. The college browser loads results instantly, displaying the entire list of schools with color coding.
- Visit the Github repository at: College Application App
- Technlogoies Used: Java, Android, Android Studio, Google Firebase
Battle Warriors Demo
A demo of the first level of Battle Warriors, a top-down RPG with turn-based battling. Developed with Unity and scripted with C#. Art and music created by me. In its first iteration, this game was developed using Java, OpenGL, and the JOGL library for interfacing between Java and OpenGL. I switched to Unity as it tremendously sped up the development process. This is a passion project that I plan on continuing.
- Implements pathfinding algorithms for human players and computer players.
- Computer player AI is done through a decision tree that attempts to maximize damage done to the player.
- Utilizes the core principles of OOP. Indivual attacks inherit from an abstract Attack class with a doAttack() method, and each attack performs a unique doAttack() procedure due to polymorphism.
- Player input is handled with a stack data structure. As a result, there is no precedence for key presses. If you press UP and then DOWN, you will move DOWN. If you press DOWN then UP, you will move UP. Additionally, there is no input overwriting. If you press LEFT then RIGHT, you move RIGHT, but if you then release RIGHT, you will resume moving LEFT. Key precedence and input overwriting are issues I have encountered in other indie games.
- Demo of Battle Warriors:
- Visit the Github repository at: Java/OpenGL Demo
- Technlogoies Used: Unity, C#, Java, OpenGL, JOGL