WEBVTT

00:00:00.001 --> 00:00:05.680
As the popularity of Python grows, we see it popping up in all sorts of interesting places and projects.

00:00:05.680 --> 00:00:10.420
On this episode, you'll meet CK Sample and Nathan Papapurito from Hypergiant.

00:00:10.420 --> 00:00:14.760
They're using Python and AI to develop the EOS Bioreactor.

00:00:14.760 --> 00:00:23.180
This is a fridge-sized box containing water and algae, which sequesters a huge amount of CO2, as much as an acre of trees.

00:00:23.180 --> 00:00:26.660
Let's dive into how they're using Python for this cutting-edge project.

00:00:27.120 --> 00:00:31.640
This is Talk Python To Me, episode 250, recorded January 21st, 2020.

00:00:31.640 --> 00:00:51.140
Welcome to Talk Python To Me, a weekly podcast on Python, the language, the libraries, the ecosystem, and the personalities.

00:00:51.140 --> 00:00:53.080
This is your host, Michael Kennedy.

00:00:53.080 --> 00:00:55.220
Follow me on Twitter, where I'm @mkennedy.

00:00:55.380 --> 00:01:01.460
Keep up with the show and listen to past episodes at talkpython.fm, and follow the show on Twitter via at Talk Python.

00:01:01.460 --> 00:01:05.080
This episode is sponsored by Brilliant.org and Linode.

00:01:05.080 --> 00:01:07.480
Please check out what they're sponsoring during their segments.

00:01:07.480 --> 00:01:08.800
It really helps support the show.

00:01:08.800 --> 00:01:12.000
CK and Nathan, welcome to Talk Python To Me.

00:01:12.000 --> 00:01:12.520
Hey, thanks.

00:01:12.520 --> 00:01:13.020
How's it going?

00:01:13.020 --> 00:01:13.540
Hey, guys.

00:01:13.540 --> 00:01:14.780
It's great to have you on the show.

00:01:14.780 --> 00:01:22.620
Man, we got a cool topic today, and on a lot of different levels, what you guys have going on is really interesting and really ambitious,

00:01:22.620 --> 00:01:25.200
and I'm super excited to be digging into it with you.

00:01:25.200 --> 00:01:25.980
Yeah, we're excited to be here.

00:01:25.980 --> 00:01:26.680
Thanks for having us.

00:01:26.680 --> 00:01:27.180
Yeah.

00:01:27.180 --> 00:01:28.040
Yeah, thanks for having us.

00:01:28.040 --> 00:01:28.400
You bet.

00:01:28.400 --> 00:01:33.980
I love it when people are doing ambitious things and trying to push the envelope of what we can do with technology

00:01:33.980 --> 00:01:39.960
and sort of almost bring some of this stuff that seems like it's always out in the future sort of into the present.

00:01:40.040 --> 00:01:46.420
So that's awesome, and we're going to dig into a bunch of angles to focus a lot on the climate change angle as well.

00:01:46.420 --> 00:01:50.280
Before we get to that, though, let's start with your stories.

00:01:50.280 --> 00:01:52.780
How did you get into programming and Python?

00:01:52.780 --> 00:02:00.560
I was a grad student at the University of Alabama in particle physics, and I used this program called Mathematica a lot.

00:02:00.560 --> 00:02:03.760
And if you're not familiar, it's a computer algebra system.

00:02:04.320 --> 00:02:08.340
It's a little bit more symbolic than MATLAB.

00:02:08.340 --> 00:02:09.720
It's such an interesting program.

00:02:09.720 --> 00:02:12.640
I remember the first time I used Mathematica.

00:02:12.640 --> 00:02:15.540
I both used MATLAB and Mathematica.

00:02:15.540 --> 00:02:19.500
I was working my PhD in math, so I poked around those math ideas a little bit.

00:02:20.180 --> 00:02:23.260
And wow, it's crazy.

00:02:23.260 --> 00:02:31.900
You can give it, like, here's this some integral of some complicated function, and it'll go, here's the symbolic result of that integration, right?

00:02:31.900 --> 00:02:35.860
Not like these numbers, but no, here's the new formula that is the integration, right?

00:02:35.860 --> 00:02:37.440
It's really interesting, that thing.

00:02:37.440 --> 00:02:38.820
It's a very symbolic program.

00:02:38.820 --> 00:02:49.060
If you've ever looked at the symbolic code on how you do arbitrary derivatives and arbitrary integrals, indefinite integrals is what they're called.

00:02:49.060 --> 00:02:50.420
I can't remember the name of the algorithm.

00:02:50.420 --> 00:02:51.480
It's in the 60s that came out.

00:02:51.480 --> 00:02:52.560
It's just mind-boggling.

00:02:52.560 --> 00:02:53.640
Yeah, it is.

00:02:53.640 --> 00:02:55.240
So you started out working on this thing.

00:02:55.240 --> 00:02:56.120
Yeah.

00:02:56.120 --> 00:03:09.880
And so the underlying part of it was a language called Wolfram language, which is, I can't explain how awful it is to someone who's been using Python every day for years now to go back and look at my old work and be like, what the heck did I do here?

00:03:09.880 --> 00:03:12.480
But it was a very functional procedural language.

00:03:12.480 --> 00:03:13.040
Yeah, sure.

00:03:13.040 --> 00:03:18.140
And so I graduated with a PhD, and then I was like, okay, time to market myself.

00:03:18.520 --> 00:03:25.800
No one uses Mathematica except for Wolfram technology, and I don't want to live in Urbana, Illinois, or Arizona.

00:03:25.800 --> 00:03:36.860
And so I started rewriting a lot of my code into C++ and learned C++ the hard way over about six months of just trial and error and got a pretty good handle on how it worked.

00:03:36.860 --> 00:03:40.280
And then I slowly started picking up Python from there.

00:03:40.280 --> 00:03:46.040
I'm like, okay, I want to do some basic mathematics and basic just coding.

00:03:46.040 --> 00:03:50.780
I don't feel like having a compiled code and writing console or C out everywhere.

00:03:50.780 --> 00:03:53.600
And so I eventually got my way into Python.

00:03:53.600 --> 00:03:56.420
And I'm like, okay, this is really user friendly.

00:03:56.420 --> 00:03:58.440
I can get things up really fast.

00:03:58.440 --> 00:04:01.140
I can start fooling around and plotting.

00:04:01.140 --> 00:04:07.260
And when I found Jupyter Notebooks, it almost felt like a one-to-one to Mathematica's notebooks.

00:04:07.260 --> 00:04:09.600
Yeah, you felt like you had come full circle sort of, right?

00:04:09.600 --> 00:04:10.180
Correct.

00:04:10.180 --> 00:04:10.480
Yeah.

00:04:10.480 --> 00:04:19.200
And you can actually, on my computer right now, I have in Jupyter, I have a Python interpreter, a Wolfram language interpreter using the kernel.

00:04:19.200 --> 00:04:20.700
I have F-sharp interpreter.

00:04:20.700 --> 00:04:22.920
I have a MATLAB or Octave interpreter.

00:04:22.920 --> 00:04:24.480
And then I have one other interpreter.

00:04:24.480 --> 00:04:26.160
And this is all in Jupyter Notebook.

00:04:26.160 --> 00:04:26.620
Wow.

00:04:26.620 --> 00:04:27.040
Yeah.

00:04:27.040 --> 00:04:30.380
So you can just take, that's your portal into all programming these days, huh?

00:04:30.520 --> 00:04:33.740
Yeah, definitely for prototyping, you can just go between them.

00:04:33.740 --> 00:04:47.600
And especially for the topic coming up, when you're trying to mix symbolic differential equations and some algebra, and then you want to be able to kind of go to Python and put it into the ODint solver in SciPy.

00:04:47.600 --> 00:04:49.500
It's really useful just to have two tabs.

00:04:49.500 --> 00:04:52.760
One is like a Wolfram notebook and one's a Python notebook.

00:04:52.760 --> 00:04:53.160
Yeah.

00:04:53.160 --> 00:04:53.500
Wow.

00:04:53.500 --> 00:04:54.500
That sounds super powerful.

00:04:54.500 --> 00:04:55.380
I love it.

00:04:55.500 --> 00:04:59.660
Now, you work at Hypergiant along with CK, and we'll hear his story in a second.

00:04:59.660 --> 00:05:00.960
But what do you do day to day there?

00:05:00.960 --> 00:05:03.140
So I'm a data science here at Hypergiant.

00:05:03.140 --> 00:05:13.700
I do anything from internal research projects to doing some R&D, like the data science on R&D team, to client type working.

00:05:13.700 --> 00:05:18.000
And so to everything from just, you know, sometimes there's downtime.

00:05:18.360 --> 00:05:29.420
And it's like, I want to explore a different language, or I want to just write some Python script to mess with an Excel spreadsheet to make literally putting my timesheet together easier.

00:05:29.420 --> 00:05:35.540
To just reading Reddits, like machine learning and Python and programming subs, subreddits.

00:05:35.540 --> 00:05:36.140
Super cool.

00:05:36.140 --> 00:05:37.400
CK, how about you?

00:05:37.400 --> 00:05:42.420
How do you get started into the whole tech side of things and programming and just set the stage?

00:05:42.420 --> 00:05:49.040
You're not doing software development day to day, but you do have some background in coding and fooling around.

00:05:49.040 --> 00:05:49.220
Yeah.

00:05:49.220 --> 00:05:49.480
Yeah.

00:05:49.480 --> 00:05:57.300
I'm the chief technology officer here at Hypergiant Space Age Solutions, which is our services focus wing where we build out solutions for customers.

00:05:57.300 --> 00:06:01.200
And I have the weirdest entry into software ever.

00:06:01.200 --> 00:06:11.300
I started out, I was in academia, getting my doctorate in English, and fell into the world of blogging in late turn of the century, right around Y2K.

00:06:11.480 --> 00:06:13.460
That was when blogging was going to change the world.

00:06:13.460 --> 00:06:13.920
Remember?

00:06:13.920 --> 00:06:14.160
Yeah.

00:06:14.160 --> 00:06:20.080
Blogs were the way that people could take democracy into their own hands, and you could become...

00:06:20.080 --> 00:06:21.240
Yeah, it was really interesting, actually.

00:06:21.240 --> 00:06:21.580
Yeah.

00:06:21.580 --> 00:06:23.980
I actually published the first iPod blog ever.

00:06:23.980 --> 00:06:27.420
It was called My iPod Blog, right after Apple announced an iPod.

00:06:27.420 --> 00:06:31.320
And I got some mild traction of some of my personal blogs.

00:06:31.500 --> 00:06:34.640
I got featured by O'Reilly Press in one of their books.

00:06:34.640 --> 00:06:43.520
And I wrote into them and said, hey, I work with computers at the college that I'm getting my doctorate in, and I'd love to contribute to some of your stuff.

00:06:43.520 --> 00:06:50.780
And so I started writing for O'Reilly Press, worked on a couple of macOS X hack books, did a bunch of scripting level stuff.

00:06:50.900 --> 00:06:52.140
I built one script.

00:06:52.140 --> 00:06:54.200
It wasn't super complex.

00:06:54.200 --> 00:06:58.060
It was a Bash shell script that allowed you...

00:06:58.060 --> 00:07:02.120
This was pre-iPhone, pre-internet being readily available on cell phones.

00:07:02.120 --> 00:07:12.560
But what it did was it created a tunnel, an SSH tunnel from over a Bluetooth connection between a Nokia 3650 cell phone.

00:07:12.560 --> 00:07:17.200
And it worked with a couple of other Nokia models and your PowerBook at the time, an Apple PowerBook.

00:07:17.200 --> 00:07:25.220
And so you could tunnel the internet connection from your Mac over to the phone and trick the phone into thinking it had internet.

00:07:25.220 --> 00:07:29.700
Because this was back before they had reasonably priced internet plans for cell phones.

00:07:29.700 --> 00:07:30.980
So it was just...

00:07:30.980 --> 00:07:37.820
It became popular because a lot of people would install it just to try out the internet features on their phone that they didn't want to pay a bill for.

00:07:37.820 --> 00:07:38.440
How interesting.

00:07:38.440 --> 00:07:42.980
Like almost before people were paying for data at all on their phone, right?

00:07:42.980 --> 00:07:44.900
It's like almost the opposite of tethering.

00:07:44.900 --> 00:07:45.660
Yes, exactly.

00:07:45.660 --> 00:07:47.040
It was reverse tethering.

00:07:47.040 --> 00:07:47.720
And that...

00:07:47.720 --> 00:07:50.880
So I built that way back whenever and I started blogging about that.

00:07:50.880 --> 00:07:51.820
Got mentioned by O'Reilly.

00:07:51.820 --> 00:07:53.840
Started writing for several of their books.

00:07:53.980 --> 00:07:56.500
Ended up being tech editor for iPod and iTunes Hacks.

00:07:56.500 --> 00:07:59.900
Met a guy named Hadley Stern, who was the author of that book.

00:07:59.900 --> 00:08:04.140
And he asked me to contribute to his blog, which was called Apple Matters.

00:08:04.140 --> 00:08:06.400
And I was a writer on there for a while.

00:08:06.400 --> 00:08:09.280
And then Jason Calacanis, who was the CEO of Weblogs, Inc.

00:08:09.280 --> 00:08:13.880
Noticed my writing and noticed that I was actually getting into some of the tech bits of it.

00:08:13.880 --> 00:08:15.360
Because I just hacked around at everything.

00:08:16.120 --> 00:08:19.220
And he ended up asking me to come work for Weblogs, Inc.

00:08:19.220 --> 00:08:22.620
And I was the lead blogger for the official Apple Weblog.

00:08:22.620 --> 00:08:25.060
If any of you remember that blog back in the day.

00:08:25.060 --> 00:08:28.780
Contributed to Engadget, Joystick, TV Squad, all these things.

00:08:28.780 --> 00:08:31.360
And eventually AOL bought Weblogs, Inc.

00:08:31.920 --> 00:08:36.580
And everybody was getting jobs from that acquisition.

00:08:36.580 --> 00:08:43.800
And Jason Calacanis took a chance on me and hired me to be the general manager of Netscape.

00:08:43.800 --> 00:08:48.580
So all of a sudden I was in charge of a team of eight developers and eight editorial staff

00:08:48.580 --> 00:08:53.080
building a dig clone of sorts on top of Netscape.com.

00:08:53.300 --> 00:08:59.560
And that was my trial by fire in terms of technical management and growing a team.

00:08:59.560 --> 00:09:01.260
Yeah, that must have been a fun place to be.

00:09:01.260 --> 00:09:02.020
It was crazy.

00:09:02.020 --> 00:09:03.700
It was a really, really fun time.

00:09:03.700 --> 00:09:04.640
Lots of fun challenges.

00:09:04.640 --> 00:09:08.240
And I left there and jumped to Mahalo, followed Jason.

00:09:08.240 --> 00:09:10.900
That's now become Inside.com.

00:09:10.900 --> 00:09:15.640
Left there because my wife and I, the way the business was growing, we had to move to LA.

00:09:15.640 --> 00:09:16.600
And we didn't love LA.

00:09:16.600 --> 00:09:17.400
I gave it a year.

00:09:17.400 --> 00:09:18.680
Left Jason.

00:09:18.680 --> 00:09:22.360
Went and worked for CrowdFusion for, I don't know how many years, five or six years.

00:09:22.360 --> 00:09:23.520
Brian Alvey's company.

00:09:23.520 --> 00:09:27.980
He now has a company called Clipisode and helped grow that business.

00:09:27.980 --> 00:09:31.920
We bought another company called Saros, which is run by Simon Berg now.

00:09:31.920 --> 00:09:32.980
Hi, Simon.

00:09:32.980 --> 00:09:40.600
I left there because I helped transition off all our old parts of our business to our customers

00:09:40.600 --> 00:09:43.080
to become Saros instead of CrowdFusion.

00:09:43.080 --> 00:09:48.600
And after I finished doing that, it was me, Simon, the new CEO, and Brian Alvey, the old CEO,

00:09:48.600 --> 00:09:53.460
who are all kind of product-focused technical people, not really technical, technical people.

00:09:53.460 --> 00:09:56.980
So there was a collision of too many of us.

00:09:56.980 --> 00:09:58.840
And so I left there.

00:09:59.200 --> 00:10:02.600
And one of the projects we'd worked on at CrowdFusion was News Corp.

00:10:02.600 --> 00:10:03.120
The Daily.

00:10:03.120 --> 00:10:06.600
And during that time, I met Ben Lamb, who's the founder of Hypergiant.

00:10:06.600 --> 00:10:11.260
He saw my tweet saying that I was looking for opportunities and told me to come work for him

00:10:11.260 --> 00:10:13.120
at Chaotic Moon, our previous company.

00:10:13.520 --> 00:10:16.380
And I came down, helped build and grow Chaotic Moon.

00:10:16.380 --> 00:10:22.880
We grew to about 175 people and sold to Accenture in 2015.

00:10:22.880 --> 00:10:24.640
No, 2000.

00:10:24.640 --> 00:10:25.720
Yeah, somewhere around there.

00:10:25.720 --> 00:10:26.700
2013, 15.

00:10:26.700 --> 00:10:28.520
And had a successful exit.

00:10:28.520 --> 00:10:31.600
Didn't go as great as we planned after the acquisition.

00:10:31.600 --> 00:10:34.300
I ended up leaving about nine months in to go do other things.

00:10:34.300 --> 00:10:36.800
I went and worked for a company called You Earned It for a while.

00:10:36.800 --> 00:10:38.360
And I was chief product officer there.

00:10:38.360 --> 00:10:44.860
Let me ask you about that whole, I came along with the acquisition because I've been on that

00:10:44.860 --> 00:10:46.580
path before as well.

00:10:46.580 --> 00:10:48.380
And it's an interesting ride.

00:10:48.380 --> 00:10:55.120
I mean, it can go really well or it could be kind of squandered or underappreciated or I

00:10:55.120 --> 00:10:55.380
don't know.

00:10:55.380 --> 00:11:01.080
My experience was things seemed really great, but in the end, the clash of the business models

00:11:01.080 --> 00:11:03.120
or cultures just didn't fit, right?

00:11:03.120 --> 00:11:04.380
What was your experience there?

00:11:04.380 --> 00:11:10.740
So I've had multiple exits like that at this point because when AOL bought Weblogs Inc.,

00:11:10.740 --> 00:11:11.520
it was very much that.

00:11:11.520 --> 00:11:14.000
Like Weblogs Inc. was a very grassroots company.

00:11:14.000 --> 00:11:17.480
We were a distributed team, a bunch of contractors.

00:11:17.480 --> 00:11:21.520
And AOL bought us and it really was a huge bag of opportunity for everybody.

00:11:21.520 --> 00:11:23.000
Like we all got full-time jobs.

00:11:23.000 --> 00:11:29.320
And Brian Alvey and Jason Calacanis, who were the co-founders of Weblogs Inc., they did a really

00:11:29.320 --> 00:11:34.440
good job in that acquisition of protecting and integrating us at the same time.

00:11:34.440 --> 00:11:41.800
So that I ended up leaving over time just because I kind of gone over to Netscape instead of Weblogs

00:11:41.800 --> 00:11:41.940
Inc.

00:11:41.940 --> 00:11:42.240
team.

00:11:42.240 --> 00:11:46.740
But like the people like Engadget still exists to this day, you know, is still run by AOL

00:11:46.740 --> 00:11:47.620
under Verizon.

00:11:47.620 --> 00:11:50.060
So there's a legacy there that exists.

00:11:50.060 --> 00:11:54.880
And a lot of people who were in that network have now moved on to Jim Bankoff's company.

00:11:54.880 --> 00:12:00.280
Jim left AOL and is now running Vox Media with The Verge and all those sites.

00:12:00.280 --> 00:12:02.640
So a lot of my former Weblogs Inc.

00:12:02.640 --> 00:12:07.680
compatriots have moved on and had several successful career jumps that have been very different from

00:12:07.680 --> 00:12:12.260
mine, but they were more in tune with that acquisition, you know, as if it went well.

00:12:12.260 --> 00:12:18.240
The Accenture acquisition of Chaotic Moon, I'd say, I don't know how much I could talk about

00:12:18.240 --> 00:12:23.140
it, but it was a weird ride because Accenture is just a huge...

00:12:23.140 --> 00:12:27.040
It's a company that's the size of a country, you know, in its large S.

00:12:27.040 --> 00:12:30.240
Probably the size of economies as well.

00:12:30.240 --> 00:12:31.280
Yeah.

00:12:31.280 --> 00:12:32.120
You know, you think it was...

00:12:32.120 --> 00:12:37.020
So there's a lot more challenges there and there were a lot more challenges there and they were...

00:12:37.020 --> 00:12:40.640
Things didn't quite play out the way we thought they would pre-acquisition.

00:12:40.640 --> 00:12:46.680
And I made it about nine months before I just got the bug where I was like, you know, there's

00:12:46.680 --> 00:12:52.080
too many weird large company processes that are getting in the way of me actively having

00:12:52.080 --> 00:12:54.720
as large of an effect as I'm used to having on a company.

00:12:54.720 --> 00:12:55.080
Yeah.

00:12:55.080 --> 00:12:57.360
And the way that I feel like I can most help a company.

00:12:57.360 --> 00:13:01.780
So I left, you know, and then I went to You Earned It and at You Earned It, we...

00:13:01.780 --> 00:13:04.060
You know, that was another successful exit.

00:13:04.060 --> 00:13:08.300
I helped build that company, like grow it from what Autumn Manning had built initially.

00:13:08.540 --> 00:13:10.200
We did a redesign of the site.

00:13:10.200 --> 00:13:15.160
It was award-winning and built some more features into it with the team that we had and grew

00:13:15.160 --> 00:13:17.220
it quite a bit and sold to Vista Ventures.

00:13:17.220 --> 00:13:18.980
You know, I was all gung-ho.

00:13:18.980 --> 00:13:20.240
You earned it and moving forward.

00:13:20.240 --> 00:13:23.400
It's now since rebranded to Kazoo and it's still going strong.

00:13:23.400 --> 00:13:27.300
But I was all on board with the acquisition and things were going well.

00:13:27.300 --> 00:13:29.020
We acquired another company.

00:13:29.020 --> 00:13:31.160
We're merging them together with us.

00:13:31.580 --> 00:13:36.380
But then the founder of Hypergiant and my good friend, Ben Lamb, came knocking and was

00:13:36.380 --> 00:13:38.600
like, listen, I need your help over at Hypergiant.

00:13:38.600 --> 00:13:42.560
And I just looked at what they were doing here before I got here.

00:13:42.560 --> 00:13:46.160
And I was like, oh, this is a much bigger market than HR software.

00:13:46.160 --> 00:13:47.860
And there's a lot of opportunity.

00:13:47.860 --> 00:13:50.400
And it was getting back to work with people I knew.

00:13:50.400 --> 00:13:51.280
So it was really exciting.

00:13:51.280 --> 00:13:52.700
Yeah, that's a great opportunity.

00:13:52.700 --> 00:13:59.760
So tell us a little bit about Hypergiant, what you guys are up to, because I first got

00:13:59.760 --> 00:14:06.480
interested in what you're doing for this EOS bioreactor and climate change initiative.

00:14:06.480 --> 00:14:10.820
Yeah, the EOS bioreactor, this climate change focus that you have.

00:14:10.820 --> 00:14:16.120
But then as I looked at it, I'm like, wow, you guys are doing a lot of really different

00:14:16.120 --> 00:14:18.780
things that are all seem super ambitious.

00:14:18.780 --> 00:14:23.160
And to give people a sense, if you go check out the website, like right, at least at the

00:14:23.160 --> 00:14:26.980
time of the recording, right at the top, you've got like an introduction by Bill Nye.

00:14:27.600 --> 00:14:30.840
Yeah, what you guys are building and stuff, which he's one of our advisors.

00:14:30.840 --> 00:14:31.420
He's great.

00:14:31.420 --> 00:14:32.040
He's awesome.

00:14:32.040 --> 00:14:33.160
He's such a cool guy.

00:14:33.160 --> 00:14:34.240
And yeah, very cool.

00:14:34.240 --> 00:14:36.900
Give us a quick flyover of Hypergiant.

00:14:36.900 --> 00:14:37.160
Cool.

00:14:37.160 --> 00:14:43.500
So our founder, Ben Lam, good friend of mine, visionary, lots of interest in a lot of areas

00:14:43.500 --> 00:14:51.900
and a lot of focus on sustainability of humanity and how to use technology to build the future

00:14:51.900 --> 00:14:54.360
that we should already have, you know, to a certain degree.

00:14:54.500 --> 00:14:54.680
Right.

00:14:54.680 --> 00:14:58.000
We were promised flying cars and robots and stuff.

00:14:58.000 --> 00:14:58.120
Yeah.

00:14:58.120 --> 00:14:59.120
And we still don't have them.

00:14:59.120 --> 00:15:01.920
Like back, he was my CEO at Chaotic Moon too.

00:15:01.920 --> 00:15:05.460
And back in those days, he used to always say, the future is here.

00:15:05.460 --> 00:15:06.380
Why isn't it better?

00:15:06.380 --> 00:15:10.820
Like at the time, he was like, why don't we have more things that are more automated that

00:15:10.820 --> 00:15:11.220
are better?

00:15:11.220 --> 00:15:13.840
And we just, there's a lot of stuff in the way of it.

00:15:13.900 --> 00:15:17.320
And I think a lot of people don't look at the technologies we have creatively and how

00:15:17.320 --> 00:15:18.720
to combine them to do cool things.

00:15:18.720 --> 00:15:20.420
And that's one of the things we're really good at.

00:15:20.420 --> 00:15:22.820
We have all the other divisions of the company.

00:15:22.820 --> 00:15:25.780
There's only four of those that are public right now that I can talk about.

00:15:25.780 --> 00:15:29.140
Although we are working in new areas and there are new things coming.

00:15:29.140 --> 00:15:33.740
But Hypergiant Space Age Solutions is a company that myself and Nathan work for.

00:15:33.900 --> 00:15:39.220
We're the services focused wing of the company where we build solutions for Fortune 500 companies

00:15:39.220 --> 00:15:45.160
and are trying to identify new technologies that could potentially become products of their

00:15:45.160 --> 00:15:49.500
own other divisions within the Hypergiant umbrella over time as we're out working with

00:15:49.500 --> 00:15:50.280
these big businesses.

00:15:50.280 --> 00:15:56.820
We also have an R&D team, which is doing future facing exploration about technologies we could

00:15:56.820 --> 00:15:57.020
do.

00:15:57.020 --> 00:15:59.800
And that's how we came up with the EOS Bioreactor.

00:15:59.800 --> 00:16:03.180
And there's a core team of people on the R&D team, but everybody in the organization

00:16:03.180 --> 00:16:08.000
interfaces and works with R&D to some degree, like Nathan has been working on EOS itself.

00:16:08.000 --> 00:16:13.880
In addition to our division, Space Age Solutions, we also have a division in Dallas that's run

00:16:13.880 --> 00:16:17.880
by Dave Kops and Chris Rohde that's called Sensory Sciences.

00:16:17.880 --> 00:16:23.320
I actually share office space with them in Dallas and I'd be there right now recording, but my home

00:16:23.320 --> 00:16:24.840
studio has better acoustics.

00:16:24.840 --> 00:16:26.480
So I figured it was better for the podcast.

00:16:26.480 --> 00:16:32.700
But they are building a computer vision digital twin product.

00:16:32.700 --> 00:16:40.540
That's really interesting that can take all the information from all the cameras and do useful

00:16:40.540 --> 00:16:45.060
things with it to identify whether a person is known or unknown, understand where they are

00:16:45.060 --> 00:16:51.020
in space and actually build a digital twin of the space to understand how things are happening

00:16:51.020 --> 00:16:52.000
in the space digitally.

00:16:52.000 --> 00:16:56.880
So would that be like, I'm in a factory and I saw this guy was at a station, but then he walked over there,

00:16:56.880 --> 00:16:58.660
talked to this other person.

00:16:58.660 --> 00:17:01.960
And then like, we knew that that was that person or what would that be?

00:17:02.160 --> 00:17:07.560
So you can identify people like who are known or unknown, like basic security, knowing this person

00:17:07.560 --> 00:17:09.000
shouldn't be here.

00:17:09.000 --> 00:17:14.160
And you could actually follow along, go, well, what did they see when they were there and go

00:17:14.160 --> 00:17:16.980
into the digital twin version of this and see through it.

00:17:16.980 --> 00:17:22.160
But there's a lot of different applications and use cases for it that are outside of just that.

00:17:22.160 --> 00:17:27.000
Like, you know, understanding things like in a restaurant type setting, their software could

00:17:27.000 --> 00:17:31.400
tell like how full or empty a drink is so that people know, I need to go refill the drinks at

00:17:31.400 --> 00:17:34.200
this table, you know, that type of thing, which sounds very basic.

00:17:34.200 --> 00:17:39.340
But the more you automate a lot of that stuff, the more efficient the overall workforce is

00:17:39.340 --> 00:17:41.460
in delivering those experiences, which is really great.

00:17:41.460 --> 00:17:41.880
Yeah, cool.

00:17:41.880 --> 00:17:42.280
Yeah.

00:17:42.280 --> 00:17:47.720
And in addition to that division, we also have a hypergiant galactic systems, which is a

00:17:47.720 --> 00:17:49.160
company focused on space.

00:17:49.160 --> 00:17:51.580
We're actually working on several things.

00:17:51.580 --> 00:17:56.580
We have, we bought a company called SEOPS, which became part of hypergiant galactic systems.

00:17:56.580 --> 00:18:00.080
And through them, we have a satellite deployment that's happening.

00:18:00.080 --> 00:18:05.820
We've actually deployed five CubeSats to date, and we hope to be up to 15 by the end of the

00:18:05.820 --> 00:18:06.140
year.

00:18:06.140 --> 00:18:11.520
We're doing a lot of interesting computer vision things with satellite imagery that we're

00:18:11.520 --> 00:18:12.640
gathering from that.

00:18:12.640 --> 00:18:18.060
And we're talking to a lot of people that are working in space about the future of space and

00:18:18.060 --> 00:18:24.980
how to not only deliver good software that supports space initiatives, but good looking software

00:18:24.980 --> 00:18:28.280
that humans can use easily that also has some intelligence on top of it.

00:18:28.280 --> 00:18:34.240
And the R&T team, you know, we publicly announced we are working on interplanetary internet.

00:18:34.240 --> 00:18:40.820
Like how do you, thinking in the future, once we have actual space trips that aren't just

00:18:40.820 --> 00:18:46.620
NASA and are actually civilians going to space, how do we support internet in that type of setting?

00:18:46.620 --> 00:18:52.320
And it involves a lot of really complex math because there is no terrestrial anchor anymore.

00:18:52.320 --> 00:18:54.460
There is no up and down and north and south.

00:18:54.560 --> 00:18:59.560
It's just making sure that everything is aligned at all times properly to keep the signal alive.

00:18:59.560 --> 00:19:03.460
That's been an interesting thing that we've been looking into recently too.

00:19:03.460 --> 00:19:09.220
And then we have a ventures wing, which is looking at investments and looking at opportunities to

00:19:09.220 --> 00:19:10.600
purchase other companies.

00:19:10.600 --> 00:19:13.940
And we have some new companies that will be announced soon.

00:19:14.200 --> 00:19:27.760
It's a cool thing because at Space Age Solutions, what we're doing, working with customers, building solutions, we get faced with a lot of the same problems sometimes, but a lot of times very interesting, novel problems that nobody solved before.

00:19:27.760 --> 00:19:30.380
And we have to come up with creative solutions.

00:19:30.380 --> 00:19:41.500
And using AI, you know, the difference between this company and our old company, Chaotic Moon, we were very focused on high UI, UX software solutions for companies that were high in ROI there.

00:19:41.660 --> 00:19:57.520
But here we're like really working with enterprise customers to do that with a layer of science on top of it because we believe strongly that artificial intelligence, it's not a big, there's no generalized AI at this point that understands everything and it's going to destroy humanity or anything scary like that.

00:19:57.660 --> 00:20:02.560
It's just a bunch of tools that a lot of people don't know how to use and they're not using them correctly at all times.

00:20:02.560 --> 00:20:07.420
And we can use the right combination to solve some really interesting problems and make the world a better place.

00:20:07.420 --> 00:20:08.340
That's interesting.

00:20:08.340 --> 00:20:18.800
It feels to me a little bit like what the cool UX design companies did, I guess, around the time when iPhones came out where like software got really beautiful and polished.

00:20:18.800 --> 00:20:22.120
We're still in the battleship gray of AI.

00:20:24.660 --> 00:20:28.380
This portion of Talk Python To Me is brought to you by Brilliant.org.

00:20:28.380 --> 00:20:31.700
Brilliant's mission is to help people achieve their learning goals.

00:20:31.700 --> 00:20:39.680
So whether you're a student, a professional brushing up or learning cutting edge topics or someone who just wants to understand the world better, you should check out Brilliant.

00:20:39.680 --> 00:20:42.600
Set a goal to improve yourself a little bit every day.

00:20:42.600 --> 00:20:47.540
Brilliant makes it easy with interactive explorations and a mobile app that you can use on the go.

00:20:47.540 --> 00:20:54.440
If you're naturally curious, want to build your problem solving skills or need to develop confidence in your analytical abilities,

00:20:54.440 --> 00:20:57.580
then get Brilliant Premium to learn something new every day.

00:20:57.580 --> 00:21:07.900
Brilliant's thought-provoking math, science, and computer science content helps guide you to mastery by taking complex concepts and breaking them into bite-sized, understandable chunks.

00:21:07.900 --> 00:21:13.980
So get started at talkpython.fm/brilliant or just click the link in your show notes.

00:21:15.980 --> 00:21:16.540
Yeah.

00:21:16.540 --> 00:21:21.080
To the point where it's not just the UX UI that's ugly, if you will.

00:21:21.080 --> 00:21:22.480
A lot of times it's the data.

00:21:22.480 --> 00:21:31.140
Like a lot of what we have to do, and Nathan knows a lot about this, is we get access to data that needs a lot of sanitation to get it in the right place so that we can actually...

00:21:31.140 --> 00:21:38.820
Because I think there's a misunderstanding by people who don't understand what machine learning is or what artificial intelligence is that,

00:21:38.820 --> 00:21:42.220
oh, it's just this magical thing that you can use to organize all the data.

00:21:42.220 --> 00:21:45.280
But the truth is there's a lot of the data that's not useful.

00:21:45.280 --> 00:21:48.340
You need to figure out what's the right data that's going to be useful,

00:21:48.340 --> 00:21:56.260
and you need to train it specifically for what you're looking for and turn it into something that's of a benefit to the business.

00:21:56.520 --> 00:22:00.480
And you have to test it at all times, too, and make sure that you're not introducing bias.

00:22:00.480 --> 00:22:03.680
I mean, you are going to introduce bias no matter what to a certain degree.

00:22:03.680 --> 00:22:06.460
It just has to be acceptable limits, I would say.

00:22:06.460 --> 00:22:08.060
Would you agree with all that, Nathan?

00:22:08.060 --> 00:22:11.600
Am I veering off too much from more you than me?

00:22:11.600 --> 00:22:12.260
Yeah, no.

00:22:12.260 --> 00:22:17.420
And I'd like to add, sometimes that we even are approached by certain customers that are like,

00:22:17.420 --> 00:22:18.600
we have this problem.

00:22:18.600 --> 00:22:19.760
Can AI solve it?

00:22:19.760 --> 00:22:23.380
And it's like, yes, but that's like fishing with dynamite.

00:22:23.540 --> 00:22:30.160
What if we just step back a little bit and just apply some, just for initial engagements, just some smart business rules, right?

00:22:30.160 --> 00:22:35.840
What if we just have some basic logic that can help get us to the next step of AI?

00:22:35.840 --> 00:22:41.060
Because you can't, it's not necessarily just, oh, your data is ugly, is you're not even capturing the right data.

00:22:41.060 --> 00:22:41.460
Right.

00:22:41.620 --> 00:22:48.120
So can we get there by just implementing some basic business rules so that when you start aggregating the data,

00:22:48.120 --> 00:22:50.900
we can then add on some sort of machine learning?

00:22:50.900 --> 00:22:55.500
Yeah, Nathan, do you feel that the whole machine learning side of things is getting a little bit,

00:22:55.500 --> 00:22:59.260
not of a bad rap, but not an accurate representation?

00:22:59.260 --> 00:23:03.920
Because there's a lot of folks who are just saying like, if a computer makes a decision, it's AI.

00:23:04.120 --> 00:23:05.000
I'll give you an example.

00:23:05.000 --> 00:23:09.520
There was something happening with some airline in Europe.

00:23:09.520 --> 00:23:13.120
I think it was the UK parliament was talking about it.

00:23:13.120 --> 00:23:15.540
And they were talking about, the headline was,

00:23:15.540 --> 00:23:24.860
AI is separating families and then offering people the ability to pay a higher ticket fee to put them back together or something like that.

00:23:24.860 --> 00:23:27.140
And, you know, that's not, that's not machine learning.

00:23:27.140 --> 00:23:27.940
That's an if statement.

00:23:27.940 --> 00:23:31.220
Like if last name is the same, don't put it in the same seat.

00:23:31.220 --> 00:23:31.440
Right.

00:23:31.440 --> 00:23:33.760
That, so that's kind of what I'm thinking of is, right.

00:23:33.760 --> 00:23:36.160
Do you feel like it's getting a little bit overused?

00:23:36.160 --> 00:23:37.220
That's a good question.

00:23:37.220 --> 00:23:41.680
I don't ponder often on these philosophical things, to be honest.

00:23:41.680 --> 00:23:51.400
Occasionally in the office, it does come up, but AI is going to do exactly what AI is programmed to do by the programmers, by the people designing it.

00:23:51.400 --> 00:23:59.080
So if you had that intent to break up families like that, that's not AI's fault because you could have just hired someone to do that for you anyways.

00:23:59.080 --> 00:24:05.320
That was some like some big thing that the parliament was like, this is abusive.

00:24:05.320 --> 00:24:06.740
We can't, we can't have this.

00:24:06.740 --> 00:24:07.260
All right.

00:24:07.260 --> 00:24:13.740
So let's move on to the EOS bioreactor project because I think that that's super interesting.

00:24:13.740 --> 00:24:18.740
And like I said, I got interested in this because of the climate science angle.

00:24:19.760 --> 00:24:33.520
I've been thinking a lot about that and so much of what you hear, what we got to do is we have to find alternative energies or we have to be super efficient and just use less or travel less or whatever.

00:24:33.520 --> 00:24:39.140
But this project is really interesting because it attacks the result of the problem.

00:24:39.140 --> 00:24:43.080
It doesn't try to change people's reactor behavior.

00:24:43.080 --> 00:24:44.320
Tell us about that.

00:24:44.320 --> 00:24:51.780
We think a lot about the environment and making the environment a better place and how to build ethically good solutions for our customers.

00:24:51.780 --> 00:24:58.180
Because we believe that that ties into economic growth at this point in our life cycle as industries.

00:24:58.720 --> 00:25:02.900
So we started looking into things that could help make the world a better place.

00:25:02.900 --> 00:25:05.000
And one of the ideas was just algae.

00:25:05.000 --> 00:25:16.180
You know, algae has the benefit of absorbing way more carbon dioxide from the air, sequestering more carbon dioxide than an acre of trees in the same amount of space as what we built for the bioreactor.

00:25:16.180 --> 00:25:29.340
So that's an acre of trees will take a year and sequester the same amount of carbon dioxide that our current prototype of the bioreactor can sequester in a year.

00:25:29.340 --> 00:25:30.320
That was just it.

00:25:30.320 --> 00:25:31.500
So we thought, okay.

00:25:31.500 --> 00:25:31.960
Yeah.

00:25:31.960 --> 00:25:32.800
And that's incredible.

00:25:32.800 --> 00:25:35.820
And just to give people a sense, this is not like a huge factory.

00:25:35.820 --> 00:25:37.060
Yeah.

00:25:37.060 --> 00:25:37.940
It's like a quarter acre.

00:25:37.940 --> 00:25:39.100
What's the size?

00:25:39.240 --> 00:25:41.260
It's the size of a big refrigerator, basically.

00:25:41.260 --> 00:25:42.400
Yeah, that was my sense.

00:25:42.400 --> 00:25:50.760
And right now, that's just a, we've built an impressive prototype to show off in our office as we're working on it and working on improving it.

00:25:50.760 --> 00:25:53.180
So it's, and building the software that goes along with it.

00:25:53.180 --> 00:26:00.440
So algae sequestration is not super novel in and of itself, where it becomes interesting for us.

00:26:00.460 --> 00:26:11.400
And what we're doing is put close to 20 sensors in it to monitor the health of the algae, how it's doing, temperature, oxygen levels in the water that's feeding it, etc.

00:26:11.400 --> 00:26:16.520
Because it builds up oxygen as a byproduct of it sequestering the carbon dioxide.

00:26:16.900 --> 00:26:31.840
In that process, and what Nathan's been working on is looking at building the correct level of AI that will actually start looking at all this data, absorbing that data, and refining the growth of the algae to make it more efficient over time.

00:26:31.840 --> 00:26:38.300
And our goal is eventually, and we're running, I think we're running slightly behind our initial projected schedule for this.

00:26:38.300 --> 00:26:41.380
I know I saw someone on Twitter say something about it today.

00:26:41.900 --> 00:26:57.460
But our plan is to eventually open source the plans for this so anybody can build it, and then they can connect it to and upload to our AI-powered software so that we can use everybody's implementations of this to absorb more data to better train it overall.

00:26:57.460 --> 00:26:58.560
That's super interesting.

00:26:58.560 --> 00:27:03.820
So the business model that you all are thinking about is we're going to prototype the hardware.

00:27:03.820 --> 00:27:10.840
We're going to have Nathan and his team, people he's working with, build the software to make it really awesome.

00:27:11.100 --> 00:27:14.160
And then you say, and here's the hardware plans, and here's our cloud.

00:27:14.160 --> 00:27:15.060
Yeah.

00:27:15.060 --> 00:27:18.100
That's kind of the opposite of a lot of these industrial companies.

00:27:18.100 --> 00:27:20.080
Well, the good news is we still have...

00:27:20.080 --> 00:27:20.960
I mean that in a good way.

00:27:20.960 --> 00:27:21.560
Yeah, yeah.

00:27:21.560 --> 00:27:24.340
But I mean, it's good because it's a conversation starter.

00:27:24.340 --> 00:27:29.600
We get a lot of interest from businesses who saw the news about it, and so we end up doing work with them.

00:27:29.600 --> 00:27:30.500
So it's good.

00:27:30.500 --> 00:27:36.480
If nothing else, it's good marketing investment for us in that it brings attention to what we're doing.

00:27:37.060 --> 00:27:58.120
But we've also had a lot of interest from people who actually want us to help them, once this is further along, actually build for the top of their specific warehouse, you know, an installation of these that will be hooked up to their exhaust systems, pull in a lot of this contaminants, and help them offset their footprint on the environment.

00:27:58.120 --> 00:28:05.480
One of the big challenges that we're still working on for industrialization of this is what are the best outputs of the algae?

00:28:05.480 --> 00:28:14.180
Because if you make a bunch of algae and then you just throw it in the trash, then it dies and all the carbon goes back into the environment.

00:28:14.360 --> 00:28:16.020
So you need to figure out a good way to use it.

00:28:16.020 --> 00:28:17.440
It can be used as a biofuel.

00:28:17.440 --> 00:28:22.120
It can be used for building plastics, for 3D printing.

00:28:22.120 --> 00:28:23.300
There's a lot of interesting...

00:28:23.300 --> 00:28:25.280
You can eat certain strains.

00:28:25.280 --> 00:28:25.700
Yeah.

00:28:25.700 --> 00:28:35.940
So we're trying to figure out what's the best combination of outputs of the algae as it's sequestering all this carbon dioxide that will keep it environmentally good for everybody,

00:28:36.000 --> 00:28:41.460
and that we can offer as things that people can do at home if they build their own kit.

00:28:41.460 --> 00:28:51.100
And also, how do we build that out at scale in a way that'll support these big businesses that are interested in us helping advise them on how to cater this specifically to their business?

00:28:51.100 --> 00:28:52.320
Yeah, that's really interesting.

00:28:52.320 --> 00:28:55.060
I hadn't even thought about the home angle of it, right?

00:28:55.060 --> 00:28:58.640
You could put it next to your Tesla Powerwall or something like that, right?

00:28:58.640 --> 00:28:59.300
Yeah.

00:28:59.300 --> 00:29:00.160
Which I could have a little...

00:29:00.160 --> 00:29:03.360
It doesn't have to be as big as the one that we've designed currently.

00:29:03.360 --> 00:29:11.940
It can be a much smaller unit and still have a positive effect, and it just really needs sunlight and energy to run itself.

00:29:11.940 --> 00:29:13.340
And we do want to work...

00:29:13.340 --> 00:29:19.540
Right now, you plug it into the wall, so it's losing some of the efficiency that it's making by absorbing energy.

00:29:19.540 --> 00:29:21.040
But we do want to make it solar-powered.

00:29:21.040 --> 00:29:21.920
We do want to make it...

00:29:21.920 --> 00:29:27.580
Which is not a technically difficult challenge to overcome if we have it sitting on a roof.

00:29:27.580 --> 00:29:28.720
But it's...

00:29:28.720 --> 00:29:30.160
Right now, we're like really...

00:29:30.160 --> 00:29:38.560
We're working with a microbiologist to actually look at all the different strains of algae, figure out what are the best algaes to use in different environments so that we can...

00:29:38.560 --> 00:29:45.000
When we do open source this to people, recommend for their state where they are, hey, get this algae to start.

00:29:45.000 --> 00:29:46.560
Here's the specifics of it.

00:29:46.560 --> 00:29:57.280
And then that way, we can build all this into the software too and track the different types of algae in different environments, how they're growing, and take all that data to better train everything to do an even better job over time.

00:29:57.280 --> 00:30:05.780
Well, I think it's really interesting and probably one of the most interesting angles of what to do with the result is to create biofuels.

00:30:05.780 --> 00:30:08.000
Because there are certain industries that just...

00:30:08.000 --> 00:30:13.320
It's really hard to electrify them or to do something like hydrogen, right?

00:30:13.320 --> 00:30:16.220
I'm thinking air travel or giant ships or something like that.

00:30:16.220 --> 00:30:16.700
Cool.

00:30:16.700 --> 00:30:18.640
So, it's in this prototype phase.

00:30:18.640 --> 00:30:20.800
And you have a working prototype.

00:30:20.800 --> 00:30:24.180
And maybe, Nathan, pick it up from there.

00:30:24.180 --> 00:30:25.600
You guys have been...

00:30:25.600 --> 00:30:28.140
How do you get started on the software side of things?

00:30:28.140 --> 00:30:31.880
How do you decide what to measure and what to optimize and so on?

00:30:31.880 --> 00:30:32.140
Yeah.

00:30:32.140 --> 00:30:34.500
So, a lot of things are like the obvious measurements.

00:30:34.500 --> 00:30:40.940
And this can be done like through Google and, you know, even talking with our microbiologists, just some other ones we didn't think about.

00:30:40.940 --> 00:30:42.220
So, there's obviously like temperature.

00:30:42.220 --> 00:30:43.700
Those are dime a dozen.

00:30:43.700 --> 00:30:48.260
You can go on like SparkFun or Adafruit and get like a Raspberry Pi temperature.

00:30:48.260 --> 00:30:49.400
That's obvious.

00:30:49.400 --> 00:30:53.360
pH sensor, because that will tell you the acidity of your water.

00:30:53.360 --> 00:30:59.200
And especially if you're not familiar with chemistry, there's like three different carbon types.

00:30:59.200 --> 00:31:04.020
There's like bicarbonate, carbonic acid, and I can't remember the third one.

00:31:04.020 --> 00:31:10.060
Carbonate, depending on the pH, it'll tell you, okay, there's this much carbon left in the water.

00:31:10.060 --> 00:31:14.460
And that can give you a benchmark for how efficient the algae is eating the carbon out of the air.

00:31:14.460 --> 00:31:19.760
Because, right, carbon dioxide has to have some sort of vapor pressure in gaseous form.

00:31:19.760 --> 00:31:21.620
And then it transfers into the water.

00:31:21.620 --> 00:31:25.700
The algae eats it, spits out oxygen, and then oxygen does that reverse.

00:31:25.700 --> 00:31:31.940
So, pH will hopefully give us some information about the acidity, not to mention any nutrients that we're putting into it.

00:31:32.160 --> 00:31:38.000
Because potassium, sodiums, and nitrates, all those have some sort of charge to them.

00:31:38.000 --> 00:31:40.440
So, that could tell us how balanced it is.

00:31:40.440 --> 00:31:44.620
Also, algae, I believe, likes it a little bit more basic water.

00:31:44.620 --> 00:31:45.300
I'm trying to remember.

00:31:45.300 --> 00:31:48.800
I've learned so much about algae in the past like two months.

00:31:48.800 --> 00:31:51.800
But did you know there's certain algae you can't grow because of state laws?

00:31:52.000 --> 00:31:56.460
Like, there's legality issues for choosing which strain of algae that we're going to put out.

00:31:56.460 --> 00:32:04.160
And so, those are some of the guidelines that when we open source this, we're going to say, hey, if you do this too big, you know, you might get a knock on your door from the EPA.

00:32:04.160 --> 00:32:04.580
Okay.

00:32:04.580 --> 00:32:05.020
Yeah.

00:32:05.400 --> 00:32:18.420
So, other things is turbidity, which is like the murkiness of the water, that will tell you in conjunction with how much algae concentration you have currently in the water, how effective any light source is.

00:32:18.420 --> 00:32:23.280
Half the algae don't really receive much sunlight, then they're not really doing their thing, right?

00:32:23.280 --> 00:32:23.300
Correct.

00:32:23.300 --> 00:32:23.520
Yeah.

00:32:23.520 --> 00:32:25.080
So, it's like an exponential decay.

00:32:25.320 --> 00:32:35.760
It's basically if you took like transmission versus reflection coefficients of some simple wave equations, how much light is actually penetrating and what's that skin depth of that light.

00:32:35.760 --> 00:32:36.900
You want to make it.

00:32:36.900 --> 00:32:44.900
So, with that in mind, if you can get really thick algae, you probably want to make like some of your tubes thinner so that there's not much depth to go through.

00:32:44.900 --> 00:32:51.780
And if they're cylindrical, then you almost have like a solid angle or the cylindrical angle where you can shine light on all sides.

00:32:51.780 --> 00:32:53.040
You get an even coat of light.

00:32:53.380 --> 00:32:58.780
So, with light is you have wavelengths, intensity, and day-night cycles, which are all measurable and tunable.

00:32:58.780 --> 00:33:00.680
I'm trying to think what other things.

00:33:00.680 --> 00:33:07.940
Airflow, water flow, and then dissolved oxygen, gaseous oxygen, dissolved CO2, gaseous CO2.

00:33:07.940 --> 00:33:09.960
I'm trying to remember all of them.

00:33:09.960 --> 00:33:10.880
There's quite a bit.

00:33:10.880 --> 00:33:11.980
And then we have double.

00:33:11.980 --> 00:33:16.040
For the first prototype, it was like the tubular forms, if you saw the picture.

00:33:16.440 --> 00:33:28.320
Basically, we had a large tank at the bottom, which was doing a lot of the remixing between the air and the algae and like stirring it up to make sure nothing was like just sifting out to the bottom and just falling out.

00:33:28.320 --> 00:33:30.440
And then that was pumping back through the tubes.

00:33:30.440 --> 00:33:34.660
And so, we want to measure it coming just out to the tubes.

00:33:34.720 --> 00:33:38.920
It's like the input and then the tubes are where most of the light takes place.

00:33:38.920 --> 00:33:41.700
And then they come back out of the tubes back in the tank.

00:33:41.700 --> 00:33:46.960
And so, we can measure at two different points to kind of get an idea of like, well, how's the algae in the tank behaving?

00:33:46.960 --> 00:33:48.720
How's the algae in the tubes behaving?

00:33:49.080 --> 00:33:53.000
One of the big hurdles is you want to make sure that you're degassing your algae.

00:33:53.000 --> 00:33:58.660
Because much like if you start breathing into a paper bag, you're going to start choking on carbon dioxide.

00:33:58.660 --> 00:34:00.640
The opposite is true for algae.

00:34:00.640 --> 00:34:05.020
If you do not degass it, it's going to build up so much oxygen where it's going to suffocate itself.

00:34:05.020 --> 00:34:09.920
This portion of Talk Python To Me is brought to you by Linode.

00:34:09.920 --> 00:34:18.880
Whether you're working on a personal project or managing your enterprise's infrastructure, Linode has the pricing, support, and scale that you need to take your project to the next level.

00:34:18.880 --> 00:34:33.520
With 11 data centers worldwide, including their newest data center in Sydney, Australia, enterprise-grade hardware, S3-compatible storage, and the next-generation network, Linode delivers the performance that you expect at a price that you don't.

00:34:33.520 --> 00:34:45.100
Get started on Linode today with a $20 credit and you get access to native SSD storage, a 40-gigabit network, industry-leading processors, their revamped cloud manager at cloud.linode.com,

00:34:45.100 --> 00:34:49.580
root access to your server, along with their newest API, and a Python CLI.

00:34:49.580 --> 00:34:57.620
Just visit talkpython.fm/Linode when creating a new Linode account, and you'll automatically get $20 credit for your next project.

00:34:57.620 --> 00:34:58.900
Oh, and one last thing.

00:34:58.900 --> 00:34:59.680
They're hiring.

00:34:59.680 --> 00:35:02.780
Go to linode.com slash careers to find out more.

00:35:02.780 --> 00:35:04.120
Let them know that we sent you.

00:35:06.380 --> 00:35:10.540
There's a lot of factors you've got to optimize for here.

00:35:10.540 --> 00:35:23.700
And then, like you were just starting to bring up, that's if you keep the species of algae fixed, then you've got the possibility of saying, well, what if we get this kind, or we get that kind, or what if you have a blend?

00:35:24.100 --> 00:35:26.340
It's an insane optimization problem, isn't it?

00:35:26.340 --> 00:35:36.340
This is where a microbiologist really comes in handy, is Rebecca's her name, and she's very good, and she's brought so much insight into it, and kind of broke down the strains.

00:35:36.340 --> 00:35:38.920
Here's some strains that I think are really good.

00:35:38.920 --> 00:35:40.000
So she has some of her suggestions.

00:35:40.000 --> 00:35:43.600
We have ours that we would like to do as well.

00:35:44.160 --> 00:35:49.020
And between the microbiologist, and then we have the rest of the people on the team, it's not just me and her.

00:35:49.020 --> 00:35:53.680
There is our project manager, Davis, and then we have a really good fabricator named Willem.

00:35:53.680 --> 00:35:55.500
He's like, you build stuff.

00:35:55.500 --> 00:36:00.560
And then we have an embedded hardware guy named Rusty.

00:36:00.560 --> 00:36:07.080
And so he's really good, actually doing all the Arduinos and Raspberry Pis that are doing the measurements and talking.

00:36:07.080 --> 00:36:13.240
And then we have an embedded software guy named Jin Song, who's actually running a lot of the code up.

00:36:13.440 --> 00:36:15.620
That's going to be talking to my Python programs.

00:36:15.620 --> 00:36:20.720
Yeah, we also have several of our iOS developers work for a while to build the...

00:36:20.720 --> 00:36:29.580
We have an actual iPad app that connects to all the things that we're building on the back end for all this monitoring of the device.

00:36:29.580 --> 00:36:35.820
That'll eventually be the app that people, when they have this in their homes or whatever, will be able to download that app, keep it updated.

00:36:35.820 --> 00:36:43.200
And that'll be the phone home between us as the mother base and all the different units to better improve the stuff.

00:36:43.200 --> 00:36:45.620
That Nathan's working on to actually map this out.

00:36:45.620 --> 00:36:46.580
Okay, yeah.

00:36:46.580 --> 00:36:48.560
There's a lot of technology in play here.

00:36:48.560 --> 00:36:48.900
Yeah.

00:36:48.900 --> 00:36:55.760
So the iPad is going to be doing probably a lot of the actual data transfer as well, because that's like the...

00:36:55.760 --> 00:36:57.340
It's a big smartphone, effectively, right?

00:36:57.340 --> 00:36:57.880
Yeah.

00:36:57.880 --> 00:36:58.160
Yeah.

00:36:58.160 --> 00:37:02.320
Do you do any processing on the iPad or is it just acquisition and send it over the internet?

00:37:02.440 --> 00:37:02.620
Yeah.

00:37:02.620 --> 00:37:07.140
So one of our decisions right now is at what point do we need to do processing in the cloud,

00:37:07.140 --> 00:37:09.680
like do AWS, and what can we put on the board?

00:37:09.680 --> 00:37:11.220
So there's several...

00:37:11.220 --> 00:37:12.900
It's probably like ensemble models, right?

00:37:12.900 --> 00:37:16.720
So you have several different models that are doing different things and probably competing towards each other.

00:37:16.720 --> 00:37:20.020
Right now, a lot of the processing is taking place locally.

00:37:20.020 --> 00:37:24.620
But the end game, you know, as we build this up and open source it and people connect their iPods,

00:37:24.620 --> 00:37:29.980
probably use like AWS Lambda functions where we just have these, you know, open post REST endpoints

00:37:29.980 --> 00:37:32.980
where it's just continually sending us information.

00:37:33.520 --> 00:37:38.600
And that's going to be like the end game model, which I believe what I want to try is reinforcement learning.

00:37:38.600 --> 00:37:45.480
Because you'll have an at-scale ensemble of different strains, different locations, temperatures,

00:37:45.480 --> 00:37:47.180
humidities, light cycles.

00:37:47.180 --> 00:37:52.160
And so there's enough people out there using these EOS bioreactors.

00:37:52.160 --> 00:37:54.080
We can really get this thing down.

00:37:54.080 --> 00:37:57.940
For now, one of the easiest things that we're trying to do is sensor fusion with Python.

00:37:57.940 --> 00:37:59.240
And that's just using Python.

00:37:59.240 --> 00:38:02.800
And so sensor fusion, if you're not familiar with like common filtering,

00:38:03.100 --> 00:38:03.880
are you familiar with that?

00:38:03.880 --> 00:38:04.340
No, no.

00:38:04.340 --> 00:38:04.920
Tell us about it.

00:38:04.920 --> 00:38:05.220
Yeah.

00:38:05.220 --> 00:38:11.300
So it's just, it came out in the 60s and it's widely used on, it was used in NASA.

00:38:11.300 --> 00:38:16.260
And it's, if you have like multiple data sources with multiple like confidence levels,

00:38:16.260 --> 00:38:23.380
or you can try and rebuild your predictions on a like time series base based on multiple measurements.

00:38:23.380 --> 00:38:29.660
And so certain, certain devices like the temperature or the pH might have a certain confidence

00:38:29.660 --> 00:38:34.000
and certain weight to the final answer, which is how much this thing is growing.

00:38:34.000 --> 00:38:35.120
How much is there algae growing?

00:38:35.120 --> 00:38:39.160
So it's kind of like the out prediction that we're trying to predict is like not how much

00:38:39.160 --> 00:38:41.240
algae, but the algae growth, right?

00:38:41.240 --> 00:38:46.320
So when the algae growth becomes constant, that's a sign that you probably want to harvest your

00:38:46.320 --> 00:38:47.400
algae, right?

00:38:47.680 --> 00:38:48.320
Because, right.

00:38:48.320 --> 00:38:51.080
So algae will, has a death and a growth.

00:38:51.080 --> 00:38:55.920
And so when it basically balance, like the growth flattens out, if you think about math

00:38:55.920 --> 00:38:59.600
and the, in the derivative, when the derivative equals zero, that's when you want to harvest

00:38:59.600 --> 00:39:01.600
because it's neither growing nor dying anymore.

00:39:01.600 --> 00:39:01.920
Right.

00:39:01.920 --> 00:39:04.920
And it's the growth that you need to actually capture the carbon and whatnot, right?

00:39:04.920 --> 00:39:06.340
That's where the magic is mostly.

00:39:06.340 --> 00:39:06.840
Yeah.

00:39:06.840 --> 00:39:07.140
Yeah.

00:39:07.140 --> 00:39:11.840
So once it stops growing, it's not really taking, it's basically a homeostasis.

00:39:11.840 --> 00:39:16.360
And the idea is we want exponential growth because the more, if we're doing exponential growth,

00:39:16.360 --> 00:39:18.060
we're exponentially capturing more carbon.

00:39:18.060 --> 00:39:22.860
And so anonymous, that is if the algae is not getting any bigger or smaller, that's probably

00:39:22.860 --> 00:39:27.060
a good sign that you can just harvest it and go onto the next step in the process, whether

00:39:27.060 --> 00:39:29.340
it's biofuel, edibles, plastics.

00:39:30.060 --> 00:39:33.480
So that's kind of like the symbol we're looking for is like a harvest event.

00:39:33.480 --> 00:39:38.880
So with the sensor fusion is we can figure out which sensors have like the lowest confidence

00:39:38.880 --> 00:39:41.800
and the lowest weight towards that final output.

00:39:41.800 --> 00:39:47.620
So we can get rid of certain sensors or we can add more sensors or one sensor can replace

00:39:47.620 --> 00:39:48.800
multiple sensors.

00:39:48.800 --> 00:39:54.440
Maybe you could have more accurate sensors or focus on, it sounds a little bit like the dimension

00:39:54.440 --> 00:39:57.220
reduction stuff when you're doing like problems.

00:39:57.220 --> 00:39:59.800
You're like, actually there's these 10 dimensions of all the inputs.

00:39:59.880 --> 00:40:01.660
But these three actually don't really make much of a difference.

00:40:01.660 --> 00:40:02.580
So forget those.

00:40:02.580 --> 00:40:02.940
Correct.

00:40:02.940 --> 00:40:04.060
Yeah.

00:40:04.060 --> 00:40:05.980
They're just duplicate information effectively.

00:40:05.980 --> 00:40:07.780
One of the sensors that were measured.

00:40:07.780 --> 00:40:12.180
So there's ways to measure algae is you can physically scoop it out, dry it out and measure

00:40:12.180 --> 00:40:13.220
it like on a scale.

00:40:13.220 --> 00:40:17.620
But doing that every day, it can be tedious.

00:40:17.620 --> 00:40:22.600
And we might end up doing that just to get some, we're doing that at certain intervals, but

00:40:22.600 --> 00:40:26.800
we haven't done it every day yet just because we don't want to disturb the growth cycle

00:40:26.800 --> 00:40:27.420
repeatedly.

00:40:27.860 --> 00:40:31.380
But generally what you do is you kind of ballpark where you start it with and then you do an

00:40:31.380 --> 00:40:35.160
end measurement where you either take the wet algae weight or the dry algae weight and

00:40:35.160 --> 00:40:39.520
you say, okay, this is the amount of algae, the density of the algae or the concentration

00:40:39.520 --> 00:40:41.200
is what they use.

00:40:41.200 --> 00:40:41.420
Sure.

00:40:41.420 --> 00:40:46.180
When you do that, is there a way that we can do that without actually interacting with

00:40:46.180 --> 00:40:46.940
the algae itself?

00:40:46.940 --> 00:40:49.760
Without removing the algae from the tank?

00:40:50.540 --> 00:40:53.080
And so I'm going to butcher the name.

00:40:53.080 --> 00:40:55.160
Let me actually, I'm a sneak in.

00:40:55.160 --> 00:40:57.240
It's a type of screen.

00:40:57.240 --> 00:40:58.400
There's a type of camera.

00:40:58.400 --> 00:41:00.500
Spectrophotometers.

00:41:00.500 --> 00:41:07.320
And so these use basically the optical density of the algae as you shoot at certain wavelengths,

00:41:07.320 --> 00:41:08.820
light through it.

00:41:08.820 --> 00:41:12.680
And then you have a sensor that picks up the amount of transmission.

00:41:13.760 --> 00:41:20.860
And so hopefully that will give you some amount of like millimoles per liter of algae.

00:41:20.860 --> 00:41:26.160
And that, while that's not the same as like grams per liter, you can one-to-one it with

00:41:26.160 --> 00:41:27.480
your actual end measurement.

00:41:27.480 --> 00:41:32.860
And so you build this, these one-to-one curves on these two measuring values.

00:41:32.980 --> 00:41:38.020
You actually can get a good idea of the density of the algae without actually removing it from

00:41:38.020 --> 00:41:38.500
the system.

00:41:38.500 --> 00:41:42.980
I was just going to add, and then like long-term after going through this process and us gathering

00:41:42.980 --> 00:41:49.140
all this data, then we can start training computer vision to actually identify this with the absence

00:41:49.140 --> 00:41:50.460
of that type of camera.

00:41:50.460 --> 00:41:55.480
Like in case, you know, like we can offer that camera for some users, like in the open source

00:41:55.480 --> 00:42:00.380
version of this, but also people could use a different, you know, identification device

00:42:00.380 --> 00:42:06.160
and we can use trained machine learning that's trained to, to estimate the actual density

00:42:06.160 --> 00:42:10.000
of the algae based on all the data that we've accrued from all these, you know, scientific

00:42:10.000 --> 00:42:11.580
experimentation that we've been doing too.

00:42:11.580 --> 00:42:14.160
So there's like, there's lots of these other sensors.

00:42:14.160 --> 00:42:15.900
Evolution of what we can do here.

00:42:15.900 --> 00:42:16.540
Yeah.

00:42:16.540 --> 00:42:16.880
Yeah.

00:42:16.880 --> 00:42:17.920
Super, super cool.

00:42:17.920 --> 00:42:23.640
So maybe you can have a couple of like really dialed in high end sets of sensors on different

00:42:23.640 --> 00:42:27.680
things and then come up with models that say, actually we can avoid these, you know, $500

00:42:27.680 --> 00:42:34.660
machines and then just measure it more simply using, you know, open CV and Python and all

00:42:34.660 --> 00:42:35.280
those kinds of things.

00:42:35.280 --> 00:42:35.520
Right.

00:42:35.520 --> 00:42:35.940
Correct.

00:42:35.940 --> 00:42:36.520
Exactly.

00:42:36.520 --> 00:42:38.940
So that's more of just like a linear, like wave measurement.

00:42:38.940 --> 00:42:42.800
So when you look at the answers, you just see like a thing about like mat plot lib, you

00:42:42.800 --> 00:42:45.920
just have like a pie plot of just a curve of like a density drop.

00:42:45.920 --> 00:42:48.920
You can also do a microscope version where you look at the cells.

00:42:49.300 --> 00:42:53.600
And so one of the early things that I did in the project before we even got going was

00:42:53.600 --> 00:43:02.320
could I accurately train like open CV to count the number of cells that we see on a like

00:43:02.320 --> 00:43:03.140
Petri dish slide.

00:43:03.140 --> 00:43:03.580
Right.

00:43:03.580 --> 00:43:04.680
And so that was one of the early things.

00:43:04.680 --> 00:43:08.200
And yeah, it was actually really easy to do even easier if it's, if they're circular,

00:43:08.200 --> 00:43:14.040
some, some algae strains have like a circular or spherical cells and some are very long tubular

00:43:14.040 --> 00:43:14.440
cells.

00:43:14.600 --> 00:43:15.660
It's easier to count the circles.

00:43:15.660 --> 00:43:16.180
Oh yeah.

00:43:16.180 --> 00:43:21.660
I think open CV has a built in like blob counter for the circles, the elongated ones.

00:43:21.660 --> 00:43:25.480
You got to do a little computer vision, but you can do transfer learning pretty easily on

00:43:25.480 --> 00:43:25.660
that.

00:43:25.660 --> 00:43:25.900
Right.

00:43:25.900 --> 00:43:26.220
Right.

00:43:26.220 --> 00:43:26.620
Right.

00:43:26.620 --> 00:43:26.960
Awesome.

00:43:26.960 --> 00:43:33.040
Well, Nathan, let's dig in a little bit to some of the libraries you're using here and

00:43:33.040 --> 00:43:34.600
some of the tech behind the scenes.

00:43:34.600 --> 00:43:37.880
So it sounds like machine learning is definitely in place.

00:43:37.880 --> 00:43:40.160
You mentioned open CV as well.

00:43:40.160 --> 00:43:42.280
Like what are you using to solve these problems?

00:43:42.280 --> 00:43:49.400
A lot of it is just numpy pandas and then scipy sk learn all those scientific libraries

00:43:49.400 --> 00:43:50.100
and there's tools.

00:43:50.100 --> 00:43:51.640
Cause a lot of it is.

00:43:51.640 --> 00:43:56.140
So when I had said before, when you have like the harvest event, when you write these, so

00:43:56.140 --> 00:43:59.480
you can actually have these different equations for your theoretical model.

00:43:59.480 --> 00:44:02.620
And there's very different ones and they have different inputs depending on your strain

00:44:02.620 --> 00:44:04.400
and your temperature and whatnot.

00:44:04.820 --> 00:44:10.880
So you can put these into like the scipy, like the ODE solver and, you know, solve them

00:44:10.880 --> 00:44:16.120
numerically and get very, you know, well-behaved results over court as they evolve through time.

00:44:16.120 --> 00:44:21.260
But what about if you want to inject like events into them, like discrete events?

00:44:21.740 --> 00:44:29.080
So I want to put some sort of event that happens where if the derivative or basically the growth

00:44:29.080 --> 00:44:35.520
approaches zero or gets below like 10 to the negative three, I want to reduce all the algae

00:44:35.520 --> 00:44:36.540
by 70%.

00:44:36.540 --> 00:44:38.080
That's like a growth.

00:44:38.080 --> 00:44:38.320
Right.

00:44:38.320 --> 00:44:42.140
Because all these models that come from biology, they are not expecting that.

00:44:42.240 --> 00:44:43.520
They're like, Oh, we have a lake.

00:44:43.520 --> 00:44:46.720
We have the ocean and stuff is growing.

00:44:46.720 --> 00:44:51.480
And maybe you change this and it's going to continuously smoothly change as the equilibrium

00:44:51.480 --> 00:44:52.540
position shifts.

00:44:52.540 --> 00:44:58.120
Not somebody came and like thinned out 70% of the lake to like make it biofuel.

00:44:58.120 --> 00:44:58.620
Now what?

00:44:58.620 --> 00:44:58.920
Right.

00:44:58.920 --> 00:45:03.880
Like it, those, the discrete model and the differential equation model, they don't fit together.

00:45:03.880 --> 00:45:04.080
Yeah.

00:45:04.080 --> 00:45:09.720
And sometimes these, these scipy, so some of the solvers that I noticed in scipy actually

00:45:09.720 --> 00:45:12.520
will, will sample beyond your time series range.

00:45:12.520 --> 00:45:13.480
Right.

00:45:13.480 --> 00:45:17.600
So when you're just doing a basic model and you're trying to just simulate the data so

00:45:17.600 --> 00:45:22.380
that you have an idea of the embedded hardware guys are like, okay, what type of measurements

00:45:22.380 --> 00:45:23.260
do we need?

00:45:23.260 --> 00:45:24.340
What type of ranges?

00:45:24.340 --> 00:45:27.360
I was like, okay, let me, you know, let me model this using differential equations and

00:45:27.360 --> 00:45:28.280
some random sampling.

00:45:28.280 --> 00:45:33.720
And I've noticed like I'll be getting index errors or all these like strange Python errors.

00:45:33.720 --> 00:45:38.940
And I realized like when I attached a debugger to it and started stepping through, I can't

00:45:38.940 --> 00:45:44.060
remember the name of the default solver for the ODN thing, but it was taking sampling outside

00:45:44.060 --> 00:45:45.280
my random sample range.

00:45:45.280 --> 00:45:46.900
And so it was basically getting index errors.

00:45:46.900 --> 00:45:51.840
And so I had to, for that, for some of these cases, I actually had to take a step back from

00:45:51.840 --> 00:45:57.440
these prebuilt like a lab pack or blast wrappers that scipy uses, right?

00:45:57.440 --> 00:46:02.400
All these old Fortran linear algebra libraries and actually just use plain old numpy and write

00:46:02.400 --> 00:46:05.120
some of these Euler methods or Newton methods myself.

00:46:05.120 --> 00:46:10.520
So I can actually monitor them in real time and actually write my own methods that inject

00:46:10.520 --> 00:46:11.200
these events.

00:46:11.200 --> 00:46:16.600
Luckily, since these are all like ODEs and they're all pretty well behaved, they're not very stiff.

00:46:16.600 --> 00:46:19.940
So I don't have to worry about instability or about equilibrium.

00:46:19.940 --> 00:46:21.860
They're all pretty well behaved.

00:46:21.860 --> 00:46:22.160
Yeah.

00:46:22.160 --> 00:46:22.340
Yeah.

00:46:22.340 --> 00:46:25.540
And just for people out there listening, ODE, ordinary differential equations.

00:46:26.100 --> 00:46:26.500
Yeah.

00:46:26.500 --> 00:46:28.260
So it's basically just DX, DT.

00:46:28.260 --> 00:46:31.680
You only need to worry about one variable that's changing.

00:46:31.680 --> 00:46:32.920
That's just time.

00:46:32.920 --> 00:46:36.600
It's just the only, what complicates a little bit is just they're all coupled.

00:46:36.600 --> 00:46:41.180
And so like the growth or the concentration, the algae's growth depends on the amount of

00:46:41.180 --> 00:46:46.420
algae itself, the amount of sugar, the amount of light, the amount of oxygen, amount of carbon,

00:46:46.420 --> 00:46:47.000
blah, blah, blah.

00:46:47.120 --> 00:46:50.980
And so this is where you really want to put your model to the test.

00:46:50.980 --> 00:46:55.740
And so when we do these machine learning models, so for example, like a second phase after we

00:46:55.740 --> 00:46:58.680
do sensor fusion is what about like a decision making?

00:46:58.680 --> 00:47:04.120
We're trying to train the computer to adjust the temperature, adjust the amount of daylight

00:47:04.120 --> 00:47:09.320
cycles, the amount of the flow that we're pumping the algae through the tank at.

00:47:09.740 --> 00:47:14.300
So can we kind of make a classifier decision maker system where it has all these different

00:47:14.300 --> 00:47:22.440
possible choices to do like lower temperature, lower light exposure based on all the inputs,

00:47:22.440 --> 00:47:28.180
but bounding those inputs by like these differential equations, right?

00:47:28.180 --> 00:47:33.520
Because we don't want it like, oh, negative 55 is a possible temperature that the decision

00:47:33.520 --> 00:47:38.000
maker seems viable, but we have, we want to make sure that we're bounding it by these

00:47:38.000 --> 00:47:41.760
different equations and say, well, now that, that will like really kill your algae.

00:47:41.760 --> 00:47:42.140
Right.

00:47:42.140 --> 00:47:42.380
Right.

00:47:42.380 --> 00:47:45.440
Or, or a super high pH or super low pH or whatever.

00:47:45.440 --> 00:47:45.860
Correct.

00:47:45.860 --> 00:47:46.120
Yeah.

00:47:46.120 --> 00:47:46.740
All those things.

00:47:46.740 --> 00:47:46.880
Yeah.

00:47:46.880 --> 00:47:47.060
Okay.

00:47:47.060 --> 00:47:52.680
So that's like the second phase that we're working on is like the decision, decision making.

00:47:52.680 --> 00:47:58.080
So it's really, it's really interesting to hear, like you were able to kind of get rolling

00:47:58.080 --> 00:48:04.640
with the built-in machine learning models or libraries and some of these other things until,

00:48:04.640 --> 00:48:10.620
until you get a ways down, you're like, actually in reality, we got a step beyond this.

00:48:10.620 --> 00:48:12.740
We kind of got to start building our own thing.

00:48:12.740 --> 00:48:13.640
Did you expect that?

00:48:13.640 --> 00:48:15.960
so I'm a physicist to be starting.

00:48:15.960 --> 00:48:21.780
So I had this inkling that we're going to have to probably build, do a little bit of custom

00:48:21.780 --> 00:48:26.400
building because we need to absolutely obey the laws of physics.

00:48:26.400 --> 00:48:26.720
Right.

00:48:26.800 --> 00:48:30.720
When we talked about earlier, there are a lot of free parameters in this model, but

00:48:30.720 --> 00:48:35.220
this isn't like computer vision where you have like, you know, 71 million parameters you're

00:48:35.220 --> 00:48:35.820
trying to tune.

00:48:35.820 --> 00:48:40.560
So it's not like the most complex, like black box solution.

00:48:40.560 --> 00:48:45.280
So I was, was on the impression that there are a lot of parameters, but with enough time,

00:48:45.280 --> 00:48:50.620
enough data, we can get good bounding for all these, all these free parameters.

00:48:50.620 --> 00:48:54.600
I might, I might self try to follow the laws of physics whenever I can.

00:48:54.600 --> 00:48:54.880
Yeah.

00:48:54.880 --> 00:48:58.800
It's, it's bad, bad for most living things to violate them.

00:48:58.960 --> 00:49:04.040
So CK, you talked about open sourcing this hardware and having the services in the

00:49:04.040 --> 00:49:10.380
cloud taking this data on maybe talk a little bit about how that'd work and what, what's

00:49:10.380 --> 00:49:11.000
the idea there?

00:49:11.000 --> 00:49:14.940
Would people be able to just build these themselves and plug them in?

00:49:14.940 --> 00:49:16.680
Would it be some kind of service?

00:49:16.680 --> 00:49:18.420
What happens to the algae when you harvest it?

00:49:18.420 --> 00:49:23.120
Like I know if I get solar panels and put them on my roof, I know what to do with that.

00:49:23.120 --> 00:49:25.840
I don't know what to do with drying out soggy algae.

00:49:25.840 --> 00:49:27.140
Yeah, exactly.

00:49:27.140 --> 00:49:31.640
And that's, that's part of what we're trying to plan for with all the experimentation we're

00:49:31.640 --> 00:49:34.180
doing in the different prototype phases that we're in now.

00:49:34.180 --> 00:49:39.540
The prototype we have now is probably our third iteration actually, because we had, and it's

00:49:39.540 --> 00:49:45.860
actually two iterations in one because the large unit actually has two separate blade servers.

00:49:45.860 --> 00:49:49.560
We call them the, they're the blades, the, not servers.

00:49:49.560 --> 00:49:53.700
I just threw that in because I'm used to saying blade servers, but blades, which are all

00:49:53.700 --> 00:49:55.320
the last tubes that are working.

00:49:55.320 --> 00:50:00.500
And so we're designing a smaller unit for the open source hardware that somebody could

00:50:00.500 --> 00:50:04.240
ostensibly like build and run in their apartment.

00:50:04.240 --> 00:50:06.540
That's our goal that we'll do some offsetting of it.

00:50:06.540 --> 00:50:11.820
And then the, one of the challenges I put in front of, the R and D team was like, we

00:50:11.820 --> 00:50:14.180
need multiple solutions for the output of the algae.

00:50:14.420 --> 00:50:20.500
We need a solution for like the person who's like the hacky person who likes to, who has

00:50:20.500 --> 00:50:21.880
their own 3d printer printer.

00:50:21.880 --> 00:50:26.320
Let's build some 3d filament, like as an output and show them how to do that and have that

00:50:26.320 --> 00:50:31.260
rigged up so they can start doing their 3d printing with actual material that they've been

00:50:31.260 --> 00:50:34.040
creating through this good green process.

00:50:34.180 --> 00:50:40.000
But also like we're trying to figure out harvesting methodologies that will take the

00:50:40.000 --> 00:50:41.480
onus off of the individual.

00:50:41.480 --> 00:50:46.220
So I don't know how to solve this yet, but I said, I said, you know, also imagine you're

00:50:46.220 --> 00:50:51.480
me and you're way too busy to babysit a algae machine and you want it very self-contained.

00:50:51.480 --> 00:50:53.340
So we, we actually started researching.

00:50:53.340 --> 00:50:58.960
There's some Marine Marine life, like some small little microscopic, microscopic creatures

00:50:58.960 --> 00:51:04.720
that live on beaches that actually eat algae and they absorb all the negative side effects

00:51:04.720 --> 00:51:05.720
of it when they do that.

00:51:05.720 --> 00:51:09.120
And so that's one of the things that we've said, let's research this and look into it,

00:51:09.120 --> 00:51:10.920
but we haven't figured out all these things yet.

00:51:10.920 --> 00:51:16.740
So at its initial stage, our plan is to open source the hardware plans for how you could build

00:51:16.740 --> 00:51:20.280
your own kind of apartment size version of this with, with parts.

00:51:20.280 --> 00:51:22.420
We could potentially offer a kit for that.

00:51:22.640 --> 00:51:28.560
We will offer the application that everybody can install on an iPad or iPhone and use it

00:51:28.560 --> 00:51:33.280
to connect to the sensors that they are going to be building and phone home to us so that

00:51:33.280 --> 00:51:36.940
we can gather their data and combine it into the project if they want to.

00:51:36.940 --> 00:51:42.400
If they don't want to participate in that and get the back and forth data, they don't have to.

00:51:42.400 --> 00:51:45.800
They can just build an algae machine of their own that's, that's doing that, you know,

00:51:45.800 --> 00:51:47.500
that's sequestering the algae.

00:51:47.500 --> 00:51:52.620
So that's all stuff that's still on our figuring out over the course of the

00:51:52.620 --> 00:51:56.880
next, I don't know, year, I think is the plan for everything.

00:51:56.880 --> 00:51:59.460
But we have some shorter term goals.

00:51:59.460 --> 00:52:05.680
We should get to the initial open source plans much sooner in that cycle than later.

00:52:05.680 --> 00:52:10.120
And, you know, it's really interesting, all the interest that we've received from this,

00:52:10.120 --> 00:52:15.840
you know, not just from Python focused podcasts, but there's lots of different applications and

00:52:15.840 --> 00:52:21.300
possibilities that are coming up from different people around the world who have expressed interest

00:52:21.300 --> 00:52:22.680
in being involved.

00:52:22.680 --> 00:52:28.740
So we're kind of taking that all, all that input as it comes to try to help steer us where,

00:52:28.740 --> 00:52:32.620
where we should go with it to make it of the best use possible.

00:52:32.620 --> 00:52:37.340
And then we are in early talks with a couple of companies who actually want to help invest in

00:52:37.340 --> 00:52:37.580
this.

00:52:37.580 --> 00:52:44.020
Not, not as a, not like investors in our company or anything, but they want to actually help fund

00:52:44.020 --> 00:52:48.860
us building this specifically for their businesses, you know, to, to build a catered version for

00:52:48.860 --> 00:52:49.980
their warehouse that.

00:52:49.980 --> 00:52:56.360
If they have a huge factory, they want to say larger businesses that, you know, yeah, yeah.

00:52:56.360 --> 00:52:57.880
The more they can get from zero better.

00:52:57.880 --> 00:52:58.280
Yeah.

00:52:58.280 --> 00:52:58.520
Yeah.

00:52:58.520 --> 00:52:59.500
How, how interesting.

00:52:59.500 --> 00:53:03.820
I'll throw this out to both of you, whoever wants to jump in or both of you go for it and

00:53:03.820 --> 00:53:07.320
maybe kind of wrap up the conversation around this.

00:53:07.660 --> 00:53:13.560
Right now you have this large refrigerator type of thing, got these columns of algae that's

00:53:13.560 --> 00:53:14.260
circulating around.

00:53:14.260 --> 00:53:17.520
It's getting light and it's really pretty promising.

00:53:17.520 --> 00:53:24.800
Is there a reason that you could not make oil refinery size diversions of this or giant,

00:53:24.800 --> 00:53:29.540
you know, does it scale like much larger in a reasonable way?

00:53:29.540 --> 00:53:35.040
If there ever is a price on carbon or something like that, you know, or, or somebody wants to

00:53:35.040 --> 00:53:39.060
use it to make biofuel, they're going to need probably something larger or a whole bunch

00:53:39.060 --> 00:53:39.380
of these.

00:53:39.380 --> 00:53:40.420
Like, what are your thoughts there?

00:53:40.420 --> 00:53:42.420
So you could do it factory size.

00:53:42.420 --> 00:53:47.480
You just have to be very cognizant of like the geometries that you pick for it.

00:53:47.480 --> 00:53:48.080
Right.

00:53:48.080 --> 00:53:52.340
So just building like a sea world size tank, you're wasting a lot of your space because

00:53:52.340 --> 00:53:54.720
the algae is only going to grow like to a certain depth.

00:53:54.720 --> 00:53:58.680
You need to do like what you had mentioned earlier, the shallow pools, which I believe they

00:53:58.680 --> 00:54:02.920
do a lot, a lot of places in Europe where a lot of like experimentation goes on, or you

00:54:02.920 --> 00:54:08.040
could do the, get the tubular parts of our, of our reactor and build just like really large

00:54:08.040 --> 00:54:08.580
tubes.

00:54:08.580 --> 00:54:11.920
But you have to be cognizant as well as degassing.

00:54:11.920 --> 00:54:17.100
So you could take parts of our design if you really want to scale it up like physically

00:54:17.100 --> 00:54:20.120
to a large scale and really make it work.

00:54:20.120 --> 00:54:20.340
Yeah.

00:54:20.340 --> 00:54:25.080
I guess in my mind, what I was envisioning was a whole lot of little tubes, maybe some

00:54:25.080 --> 00:54:27.300
mirrors to make sure the light gets to all over the places.

00:54:27.300 --> 00:54:29.480
Cause not, not just like a huge deep pool, right?

00:54:29.500 --> 00:54:31.240
Cause that's, that's not going to do it.

00:54:31.240 --> 00:54:31.520
Yeah.

00:54:31.520 --> 00:54:31.880
Yeah.

00:54:31.880 --> 00:54:34.720
It's, it's all about surface area and sunlight exposure.

00:54:34.720 --> 00:54:39.980
And, and then the degassing is, as Nathan mentioned, like those are the main three ingredients

00:54:39.980 --> 00:54:42.020
for it to be successful.

00:54:42.020 --> 00:54:46.580
And, and to a certain degree, temperature control, like you don't want it all freezing in whatever

00:54:46.580 --> 00:54:48.480
layout that you create for it.

00:54:48.480 --> 00:54:53.420
Although like, I don't know if freezing necessarily, and this is a question, Nathan, do you know, does

00:54:53.420 --> 00:54:56.600
the freezing actually kill the algae or does it just make it not grow actively?

00:54:56.600 --> 00:54:58.280
And then when it thaws out, it keeps growing.

00:54:58.280 --> 00:54:59.240
I'm not sure about that.

00:54:59.240 --> 00:55:00.380
It all depends on strains.

00:55:00.380 --> 00:55:00.720
Yeah.

00:55:00.720 --> 00:55:06.400
Like it's an interesting combination of things that you could do, but yes, like Dan Hab, who's

00:55:06.400 --> 00:55:10.600
my director of R and D, who's been spearheading this whole project and who Nathan's working

00:55:10.600 --> 00:55:11.580
with closely on it.

00:55:11.580 --> 00:55:13.940
He always says this is infinitely scalable.

00:55:13.940 --> 00:55:17.800
Like, you know, it's, it's, it's just a matter of sunlight and surface area and degassing,

00:55:17.800 --> 00:55:22.600
you know, and you just got to figure out the right combination and building custom implementations

00:55:22.600 --> 00:55:28.280
implementations of it for different scenarios, whatever they may be, you know, like, so that,

00:55:28.280 --> 00:55:33.520
you know, consider like a, there's probably a different version of the algae reactor that

00:55:33.520 --> 00:55:39.200
will behave better with a different strain of algae and different constraints in like Saudi

00:55:39.200 --> 00:55:45.320
Arabia than there is in China than there is in Wisconsin than there is in Austin, Texas,

00:55:45.320 --> 00:55:46.220
where our headquarters is.

00:55:46.220 --> 00:55:46.440
Right.

00:55:46.440 --> 00:55:50.400
Different amount of lights, different amount of temperature variation, all those kinds of things.

00:55:50.520 --> 00:55:50.720
Yeah.

00:55:50.720 --> 00:55:51.100
Yeah.

00:55:51.100 --> 00:55:51.220
Yeah.

00:55:51.220 --> 00:55:51.500
Sure.

00:55:51.500 --> 00:55:53.740
Ideally, you could just hook it up to like the fluke.

00:55:53.740 --> 00:55:57.960
Like if you're in a big factory, you can build a smaller little factory next to you, build up

00:55:57.960 --> 00:56:03.140
all these algae things and just hook up like your flue gas or carbon exports directly to it.

00:56:03.140 --> 00:56:03.420
Yeah.

00:56:03.420 --> 00:56:03.900
Yeah.

00:56:03.900 --> 00:56:09.600
We've actually been looking into like connectivity, like engineering the connectivity for larger

00:56:09.600 --> 00:56:13.420
buildings that are basically like factories, like any larger building, you're basically

00:56:13.420 --> 00:56:16.380
your own little plant to a certain degree and you have an exhaust system.

00:56:16.380 --> 00:56:21.400
And so how do we filter the exhaust through something like this to remove as much of it

00:56:21.400 --> 00:56:25.440
as we can live, you know, and, and what does that life cycle look at?

00:56:25.440 --> 00:56:27.380
That's one of the things that we're investing.

00:56:27.380 --> 00:56:33.500
Well, well, I really hope that you guys are successful with this because it looks like it's a super cool

00:56:33.500 --> 00:56:40.540
idea and it really could play a key in helping to capture all this carbon and do something useful

00:56:40.540 --> 00:56:40.760
with it.

00:56:40.820 --> 00:56:44.160
I can assure you we will succeed just because we already see how it works.

00:56:44.160 --> 00:56:49.240
It's already working and we just need to make it work more efficiently over time.

00:56:49.240 --> 00:56:54.100
And we're getting enough interest where we, we see the payback for it as far as in terms

00:56:54.100 --> 00:56:56.320
of us keeping our business going and succeeding.

00:56:56.320 --> 00:57:00.020
You know, this is, this is something where there's enough interest where we can see this

00:57:00.020 --> 00:57:05.820
turning into revenue for us in addition to all the stuff that we're doing in terms of open

00:57:05.820 --> 00:57:06.580
sourcing and everything.

00:57:06.820 --> 00:57:11.680
So I think we are expanding the team that's focused on this and bringing in the expertise

00:57:11.680 --> 00:57:17.540
as we're getting further along the prototype phase to get us to, okay, how do we start actually

00:57:17.540 --> 00:57:22.780
productionalizing this whole thing and making it something that's out there and distributed

00:57:22.780 --> 00:57:30.560
and people can buy a kit to or buy or download the plans free for or contract us to help them

00:57:30.560 --> 00:57:31.780
implement at their factory.

00:57:31.780 --> 00:57:34.660
You know, like, so that's, that's kind of where this is all going.

00:57:34.780 --> 00:57:38.360
Awesome. Well, that's, that's great to hear. And it's really cool to see the Python behind

00:57:38.360 --> 00:57:43.200
it as well. And thanks for sharing all of that aspect of it. Now, before I let you guys out

00:57:43.200 --> 00:57:47.300
here, let me ask the final two questions. And Nathan, since you've been doing most of coding,

00:57:47.300 --> 00:57:51.220
I'll direct these at you. Although I might be able to guess a little bit when you're working

00:57:51.220 --> 00:57:54.340
on this project, right? So code, what editor do you use?

00:57:54.340 --> 00:58:00.680
VS Code in JupyterLab or JupyterLab slash JupyterHub, right? One is your library of all your reusable

00:58:00.680 --> 00:58:02.840
functions. And one is your playground.

00:58:02.840 --> 00:58:08.300
Right. Awesome. And then probably ran across some interesting Python libraries for this whole

00:58:08.300 --> 00:58:13.100
project. Do you have a notable library PyPI package that people should know about? You're like,

00:58:13.100 --> 00:58:15.740
oh, I came across this and it was amazing. I had no idea.

00:58:15.740 --> 00:58:20.920
I thoroughly love Dash, not just for this project, but for, especially when you have customers and you

00:58:20.920 --> 00:58:25.680
just want to throw them some basic plots that are interactable. You can run Dash slash Plotly

00:58:25.680 --> 00:58:29.180
in a browser or you can run it in Jupyter directly.

00:58:29.180 --> 00:58:33.840
Yeah. All right. Yeah. Yeah. A nice picture goes a long way for sure. All right. Final call to

00:58:33.840 --> 00:58:41.120
action. People are interested in the bioreactor or maybe they're just interested at getting a job at

00:58:41.120 --> 00:58:46.140
Hypergiant. What do you guys, are you guys hiring one and two, how do they learn more about the bioreactor?

00:58:46.140 --> 00:58:50.940
We're always hiring. Like we're, we've been growing. I think when I joined, I've been here for about two

00:58:50.940 --> 00:58:57.180
years. I joined, we were about 37 people and now we're at about 237 people in two years. So it's

00:58:57.180 --> 00:59:02.800
been a crazy chaotic, meteoric growth. That's great. It's all the, it's all the good types of problems to

00:59:02.800 --> 00:59:09.020
have as a business. And we have a site, hypergiant.com. There's a careers section there where you can look

00:59:09.020 --> 00:59:15.060
at current postings. We also have a form where if you think you have a set of skills that we're not

00:59:15.060 --> 00:59:19.600
currently hiring for that we need, you know, you can pitch what that is, you know, cause we're not,

00:59:19.600 --> 00:59:24.880
because we approach things from a think outside the box through mentality. Often we'll be like,

00:59:24.880 --> 00:59:29.940
wait a minute, what if we need, what if we need a microbiologist who understands machine learning?

00:59:29.940 --> 00:59:33.740
You know, like that's the type of thing that we start. We're not your typical software development

00:59:33.740 --> 00:59:39.040
shop and that we have a lot of different needs and specialties. And Jin Song who's on the team

00:59:39.040 --> 00:59:44.200
actually is a, that Nathan mentioned earlier. He's actually a Korean astronaut has been trained

00:59:44.200 --> 00:59:48.180
as a Korean astronaut, which I think is one of the best. I love that. I hired somebody.

00:59:48.180 --> 00:59:51.580
I mean, he has a bit of space, but he was training for it. You know, it's great.

00:59:51.580 --> 00:59:52.600
Yeah. Very cool.

00:59:52.600 --> 00:59:58.060
I would like to shout out that we are actively looking for interns. If you're in Dallas or Austin

00:59:58.060 --> 01:00:04.560
and you are a undergraduate or graduate student for the summer, data team data science is looking

01:00:04.560 --> 01:00:09.460
for interns. It's paid internship. Yeah. And then, I'd also say we have a very active,

01:00:09.460 --> 01:00:14.080
we are very active in the press. There's a lot of stories about not only space age solutions,

01:00:14.080 --> 01:00:19.400
not only EOS bioreactor, but some of our other R and D projects like project Orion, which is a

01:00:19.400 --> 01:00:24.940
VR helmet for first responders, you know, like, that you should check out all that's available

01:00:24.940 --> 01:00:29.360
on our website. And we have a press page that, links to a lot of the public press about all the

01:00:29.360 --> 01:00:33.820
cool things that we're doing. It's all a lot of fun, crazy stuff. And every day brings

01:00:33.820 --> 01:00:40.140
new challenges. Ben Lam, our founder this past weekend was like, let's start looking more deeply

01:00:40.140 --> 01:00:45.560
into what we can do with identifying UAPs. Now that the air force has started looking for,

01:00:45.560 --> 01:00:51.860
what were known as UFOs. So like, yeah, so we've been doing a lot of, ideation and initial

01:00:51.860 --> 01:00:55.800
experimentation with some public data. Although the data is kind of dirty because of all the UFO

01:00:55.800 --> 01:01:01.300
funnel and all that stuff, but we've been doing some, diving into how do we help? How do we use

01:01:01.300 --> 01:01:05.200
computer vision and all the data that's available and different imagery that's available to help

01:01:05.200 --> 01:01:09.740
spot that sort of thing? And, and there's, we've already started tinkering with it. So we'll,

01:01:09.740 --> 01:01:10.740
we'll see what's coming next.

01:01:10.740 --> 01:01:14.520
Well, it sounds like you guys are doing just a whole bunch of cool, interesting projects.

01:01:14.520 --> 01:01:18.660
If you could just like play around with tech, doing fun things, it sounds a lot like that's

01:01:18.660 --> 01:01:23.280
what you're up to. So thank you so much for sharing your story, especially the EOS bioreactor

01:01:23.280 --> 01:01:25.660
and all the data science behind it.

01:01:25.660 --> 01:01:26.520
Cool. Thanks for having us.

01:01:26.520 --> 01:01:27.100
We're really appreciate it.

01:01:27.100 --> 01:01:28.060
Yeah. Thanks for having us.

01:01:28.060 --> 01:01:29.000
You bet. Bye guys.

01:01:29.000 --> 01:01:29.240
Bye.

01:01:29.240 --> 01:01:35.820
This has been another episode of Talk Python To Me. Our guests on this episode were CK Sample

01:01:35.820 --> 01:01:41.600
and Nathan Papapurito, and it's been brought to you by Brilliant.org and Linode. Brilliant.org

01:01:41.600 --> 01:01:46.900
encourages you to level up your analytical skills and knowledge. Visit talkpython.fm slash

01:01:46.900 --> 01:01:50.560
brilliant and get Brilliant Premium to learn something new every day.

01:01:51.180 --> 01:01:55.940
Start your next Python project on Linode's state-of-the-art cloud service. Just visit

01:01:55.940 --> 01:02:02.280
 talkpython.fm/Linode, L-I-N-O-D-E. You'll automatically get a $20 credit when you create

01:02:02.280 --> 01:02:07.840
a new account. Want to level up your Python? If you're just getting started, try my Python

01:02:07.840 --> 01:02:12.700
Jumpstart by Building 10 Apps course. Or if you're looking for something more advanced, check

01:02:12.700 --> 01:02:17.480
out our new async course that digs into all the different types of async programming you can

01:02:17.480 --> 01:02:21.020
do in Python. And of course, if you're interested in more than one of these,

01:02:21.020 --> 01:02:24.760
be sure to check out our Everything Bundle. It's like a subscription that never expires.

01:02:24.760 --> 01:02:29.680
Be sure to subscribe to the show. Open your favorite podcatcher and search for Python. We

01:02:29.680 --> 01:02:34.320
should be right at the top. You can also find the iTunes feed at /itunes, the Google Play

01:02:34.320 --> 01:02:41.000
feed at /play, and the direct RSS feed at /rss on talkpython.fm. This is your host,

01:02:41.000 --> 01:02:45.200
Michael Kennedy. Thanks so much for listening. I really appreciate it. Now get out there and write

01:02:45.200 --> 01:02:45.940
some Python code.

01:02:45.940 --> 01:03:15.940
I'll see you next time.

