Chen Lab at UCSD Nanoengineering Department

In the Chen Lab, I am the Lead Software Engineer and have been in the lab since 2016. I was able to work with graduate students and leverage both my computer science background to develop software Applications for 3D Biolight Printer.

L3T

A little background...

The Chen Lab creates custom built 3D Biolight printers to conducts its research in developing 3D bioprinting techniques with a micro or nanoscale printing resolution. They also explore novel nanomaterials and biomaterials for tissue engineering applications using stem cells. There are mainly Nanoengineers,Chemical, Bioengineers in the lab, and a couple Computer Science students to work on the printer.

What I worked on

I work on developing a 3-teir web application and .NET applications for these 3D Biolight printers. I also updated and now maintain the Lab Website. The primary task is to communicate commands, usually using Serial Ports, to specific hardware and once combined together creates a full on 3D Biolight Printer. Some of the devices are as old as 1997, when I was born, so working with such devices can pose a challenge. But since devices from 1997 are better, it is key to maintain them. I also developed a system of version control (Github), preservation of software in the lab, and documentation in the lab. My main skills used are C#, JavaScript, ReactJS, HTML5/CSS3, Golang, and understanding of hardware serial port communication. Note I cannot talk more about this in detail, but feel free to contact me to know more.

What I learned

.NET and C#

Most of my experience is working with Java before joining the lab, but was able to pick up C# to more simply create applications for the many different Hardware components. This is due to many of the unique hardware we purchase have online packages in the .NET framework and the ease of creating a frontend to develop such software.

Hardware and Software Integration

Due to the nature of the work, I need to create applications for many hardware components. In order to do so, I needed to learn many different ways to communicate with these components. Of which Serial port communication is the most prevalent, where you send information via bytes to the device directly. Now knowing the hardware constraints of the device, I needed to integrate as many as 5 devices together into a single software application and make sure it would run efficiently and in correct order.

ReactJS:

This was my first experience with this language, and it was similar enough to HTML5 and CSS3 to allow me to think how it would be perfect to the user to learn.

Golang

Golang or go is an open source programming language from google. The graduate student, I initially worked with, wanted me to learn this language to implement the backend. Go has easy to write concurrent and efficient to manage concurrency code. Go seems similar to C, but with memory safety, garbage collection, structural typing. This is a great language to use in my lab as it would allow us to do prints faster and quicker than before as a single goroutine can run on multiple threads. But since this is a new language, there is not much online tutorials or development packages in this langauge yet to be useful long term in my lab as of 2019 Feb due to student developers coming in and out constantly in our lab. Also due to the fact many other printers in our 4 other printers in the lab use .NET framework.

Project Management and Leading the Software Development

In my Junior and Senior year at UCSD, I offically became the Lead Software Developer of the lab. I have to manage the Lab Website and develop for the multiple 3D Biolight Printers. One of the main problems I noticed in the lab when I first joined in 2016 was the lack of documentation for software and the lack of any version control for the software of the lab. One time was that a literal computer died and had a specific software written 10 years ago by some graduate student. The problem was they never had another copy of the software nor any documentation of how to use it. People were just learning how to use it by someone before them using it. I thus implemented a version control system using a lab specific github account and documentation standards.

Another problem was the lack of comments in code as well as many developers in the lab leave without passing their knowledge to the next generation of the lab. I worked to comment and understand every application in the lab and train a another undergraduate developer to continue the advancements of research in the lab