Of course, we also have a transcript of our conversation available for you guys:
RVB: 00:02 Hello everyone. My name is Rik, Rik van Bruggen from Neo Technology. Here we are again recording another Neo4j graph database podcast. Tonight I'm joined by Chris Daly, all the way from Oregon. Hi Chris.Subscribing to the podcast is easy: just add the rss feed or add us in iTunes! Hope you'll enjoy it!
CD: 00:13 Hello.
RVB: 00:15 Hey, good to have you on the podcast. Thanks for taking the time.
CD: 00:17 Yes, thanks for having me.
RVB: 00:19 Yes, super. Chris, I read some of the blog posts that you wrote for us around Neo4j and the Internet of Things. That's probably the most hyped term I've heard in the past decade. Maybe you could tell us a little bit more about what you do and how you got involved with Neo4j and the Internet of Things?
CD: 00:38 Yeah, so my name is Chris Daly. I've been a software engineer for about 20 years now. I'm not using Neo4j or doing Internet of Things for my day job, but for the last several years I've been both using Neo4j for Internet of Things at home, for hardware hacking, hobby projects that I work on. I wanted to mention that-- sorry I noticed in your podcast, you ask people where they first encountered Neo4j. It was actually on another podcast that I first heard about Neo4j. There is a podcast I listen to sometimes called Hansel Minutes, that's H-A-N-S-E-L Minutes. The podcaster's name is Scott Hanselman. He lives somewhere in the Portland area, kind of where I live. And this was episode 280 of Hansel Minutes, he talked about graph databases. This was back in August of 2011, so it was a general podcast about graph databases, that was I think my first introduction to the idea. [crosstalk]
CD: 01:40 Yeah he talked about Neo4j, but he was interviewing someone from Microsoft Research who was talking about his database at Microsoft but it was also more general. They covered Neo4j too. And so at the time, I was kind of walking around my neighborhood listening to this podcast, thinking this sounds really cool, I want to try one of these graph databases. I didn't, at the time, need a database for anything, but I was also at the time starting to work on the Internet of Things projects. When I first started that stuff, I don't think I had heard the term the Internet of Things. I thought of it as hardware hacking. You know, I was finding things like Arduino-type computers, and starting to play around with those. And, at the beginning, it was just me figuring out how to do simple things, turn lights on and off, or read a sensor. It reached the point where I had several of these little computers, with several sensors, and they're all ready to post data, and suddenly I needed a database-- or wanted a database, to record that data and graphic and do that sort of thing. That was the point which I came back to Neo4j, and started playing around with it. I could have used a SQL database, the data I have is mostly time-series data and I think it would work well with SQL, but I was still interested in learning about graph databases, so I picked up Neo4j, and I started running it on an x86 host machine, and I had my little internet things around the house posting their data, and got that working and that was kind of fun. But then I thought this would be way cooler if I can run Neo4j on some of these little things.
RVB: 03:21 Yay.
CD: 03:23 And I first tried it with the original Raspberry Pi. That did not work. The first Raspberry Pi is ARMv6 architecture, and this was also in the Neo4j 1.x time frame, and there was something about ARMv6 where Neo4j wouldn't support it. But there are similar machines like the BeagleBone Black, which are ARMv7, and so I got Neo4j to run on the BeagleBone Black and then subsequently on similar ARMv7 machines like a pcDuino is another one, and once I had that working it was just a lot of fun. I mean, I ran into problems-- I could run Neo4j on the BeagleBone Black for maybe a week or so and then it would mysteriously crash. I spent a lot of time figuring out those things and getting it to run smoothly for long periods of time. That's really why I considered dropping Neo4j for a while, but I've always been able to get it to do what I needed it to do. I was able to get it running smoothly on the BeagleBone Black for weeks at a time. Really happy about that.
RVB: 04:30 Tell me a little bit about the specs of those machines. How big are those machines, like RAM and OS that they run, I have no idea.
CD: 04:38 Both the Raspberry Pi and the BeagleBone Black have a half a gig of RAM and they're single core. I'm referring to the original Raspberry Pi here. So single core, ARMv7 or ARMv6, half a gig of RAM. Now there's a Raspberry Pi model 2 which is ARMv7 and that one is quad core and it's got a full gig of RAM, so it's so much better. And, Neo4j runs happily on the new Raspberry Pi, this Raspberry Pi Model 2. It's also-- I'm runnng it now on Raspberry Pi Model 2s, and there's a company called ODROID that makes machines that are pretty similar to the Raspberry Pi Model 2, a little bit higher performance, so I'm running it on those too, but they're both, again, ARMv7. Some of the ODROIDs have two gigs of RAM, so they've got even more. One thing that I wanted to point out while we're talking here, is-- so I have a lot of information about what I've been doing on my GitHub pages, and I put up a couple of pictures first, to look at and talk about-- kind of explain some of what I'm doing here. My GitHub user ID is cjdaly, C-J-D-A-L-Y, so if you go to github.com/cjdaly/fold, F-O-L-D
RVB: 05:58 Chris, what I'll do is when I post the podcast, I'll also include a transcription on my blog. So I'll put some links in there, and then people can find it the easy way. Can I ask you a question? So what I'm hearing is that you're using Neo4j on these tiny little machines, and they're receiving all of this wonderful information, weather information, whatever it is, sensory information, and you're storing that into Neo4j? How do you find the match for these types of applications and the particularities of a graph database? Is it a good fit do you think?
CD: 06:39 Like I said, I'm studying a lot of time-series data, and that would be a good fit for SQL, but it's working fine in Neo4j. What I'm using Neo4j for so far is not really that complicated. I don't think I'm stressing it to its limits. I have a time tree which I talked about in the blog post.
RVB: 07:02 I saw that.
CD: 07:04 As I go along, as I capture new sensor data I'll add another minute to the time tree, if it's new for that minute, and then I'll connect the sensor data node to the minute node so then later I can write queries that will-- one thing I could do is say is give me the data for every hour so I can get long graphs that show over the course of weeks by looking at data from every hour or every half hour, that kind of thing.
RVB: 07:38 You can easily select the subgraph basically, right?
CD: 07:41 Right, yeah. I am still very much working my way up the Cypher learning curve. I manage to do a few cool things but when I look at the Slack channels, the helpsite for Slack channel, I see people doing really cool things that I don't fully understand yet. I'm still learning and trying to get better at Cypher.
RVB: 08:02 Okay. Have you got any fancy plans for the future here that you want to use this technology for? Any hobby projects, once your kitchen gets re-modeled?
CD: 08:16 If users make it to my GitHub pages, I have some pictures on that Fold repository of these little internet things that I've built and this is what I love to do the most, and what I will probably be doing more of. I look around at websites that sell all these little parts like SparkFun or Adafruit, are ones that people may have heard of, and I just try to find cool little parts that I can assemble into working computer systems and then write the custom code for. So on this Fold, the GitHub repo, I have pictures of two of the systems that I've recently built. One is based on the Raspberry Pi 2, and the other is one of these ODROID systems. They're both running Neo4j, and they both have weather data sensors, so they're capturing humidity and temperature and barometer information and then storing that in Neo4j. One thing I would like to do, I think, is go farther, make even more interesting-- what I have done with both of these systems is built wall-hanging computers, so they're framed in like a picture frame and they hang on the wall and there is a power cord that drops down to wherever the plug is. In these cases, they're both power over ethernet, so there is a single cord coming down that will give power and ethernet to the machine. I am interested in doing more projects like that with whatever cool hardware parts I can find. In terms of neo4j and Cypher, like I said, I am pretty far down the learning curve. I am interested in learning more and doing more interesting things with Neo4j on these little devices.
RVB: 10:00 I don't know if you're into that at all, but some of these Raspberry Pi and Arduino groups, the most active groups that I've seen here in Europe are actually the groups that have kids learn to program these things. Is that popular at all in Oregon? Or Coderdojo or those types of things? Is that anything that happens there?
CD: 10:21 I think it is. I have two kids who are a little bit too young for this, but I'm hoping to get them into it later. But I do think that in high schools around here they're used for teaching.
RVB: 10:35 It's super cool right? It's so tangible and it's so low-barrier to access. It's cheap as well. It's a nice way for kids to learn how a computer works I think.
CD: 10:48 Definitely.
RVB: 10:50 Cool. Chris, thank you so much for coming on the podcast. We like to keep these short and snappy so I really appreciate your time. First of all, good luck with the remodeling at home and with the projects that you have lined up and I hope to see you some day at GraphConnect or another conference maybe.
CD: 11:11 Okay. Thanks a lot for having me.
RVB: 11:12 Thank you. Bye-bye.
CD: 11:14 Okay. Bye-bye.
All the best