The things we do for cultivated meat: how to hack a bioreactor

When our second client asked us to build them a user-friendly interface with great biologist experience that integrated the off-line measurements in their Excel files with on-line bioreactor data we were very happy to agree. In this post we’ll describe briefly how we got live access to the Applikon Lucullus bioreactor data.

Recovering the Oracle Database

The client’s Applikon bioreactors were meant to offer a REST API, but this functionality was not yet available at the time. Without a straightforward export option and because the included Lucullus software internally kept an immaculate record of past bioreactor runs we decided to reverse engineer its storage format. This turned out to use an antiquated Oracle 11 database running on the Windows system attached to the bioreactor. We restored the database by copying from the fast_recovery_area and manually modifying init.ora. After resolving Linux-Windows Oracle incompatibilities, we opened the database in read-only mode within a Docker instance, letting us start to figure out the table structure.

Unconventional Binary Storage

The table structure turned out to be quite interesting, as the bioreactor data was stored as binary blobs: concatenated floats, integers, and characters, with data types specified in a separate field—an unconventional and intriguing choice (perhaps made due to storage constraints?). Regrettably, these blobs were inaccessible from R so we needed to use Python in reticulate to parse these out and make them into proper dataframes for further analyses.

Eliminating File Transfers

It would’ve been inconvenient (but not impossible) to move the files and perform the data recovery every time we wanted to update the database. So the last step was to figure out how to access the Oracle database without going through the file transfer rigmarole. The 15-year-old encryption should not have posed a great barrier, so we extracted the usernames and encrypted passwords from the read-only database and set about using John the Ripper to brute force these. However when we had little luck after letting it run for 24 hours, we ended up running strings on the executable and using that as input for John the Ripper, which yielded results instantaneously!A Python script helped refine case sensitivity, enabling remote access to the live database without file transfers.

While this project ended up involving more esoteric systems work than expected, it enabled the data integration necessary for our user-friendly bioreactor web interface—a small step in advancing cultivated meat toward kitchens worldwide.

We deal with computers so you can focus on advancing science. Interested in something similar? Please check out our RNA-Seq demo or contact us today.