I'm Samir Alcicron. And I'm Tom Robinson. And you're listening to the ChangeLog. Welcome back, everyone.
This is the ChangeLog. And I'm your host, Adam Stachowiak. This is episode 182. And on today's show, you're now joined by two of the guys behind Metabase, Samir Alcicron, and also Tom Robinson.
And Metabase aims to be the simplest, fastest way to get business intelligence and analytics to everyone in your company. We delve deep into what the tool is, how SQL fits into it, the technology behind it all, Clojure, JavaScript. A lot of fun having these guys on the call today. We had four awesome sponsors for the show, CodeShip, TopTile, Harvest, and also DigitalOcean.
Our first sponsor for today's show is CodeShip. If you haven't checked out the blog from CodeShip, go check it out, blog.coatship.com. And there's a recent post I want to mention from Barry Jones titled WhyDocker. And he dies deep into why Docker became a household name, why Docker set of VMs.
He even goes into how Docker enables consistent environments. And even the fact that Docker isn't going away, he makes that hypothesis that it's not going away. There's also an e-book mentioned in that article. It's free.
It's from CodeShip. Super awesome e-book. It's titled Why Containers in Docker of the Future. This book is awesome.
Go check it out. The link is in the article. And I'm going to put a link to the article in the show notes. ChangeLaw.com slash 182.
And now on to the show. Hey, everyone. We are here today, Jared and I, with these awesome dudes behind Metabase, Samir, Alcicron, and Tom Robinson. So, fellas, welcome to the show.
Thank you. Thank you, guys. And, Jared, what do you think? Are you excited?
I'm very excited. Metabase recently launched, made a splash. Yeah. And this hit my radar because, frankly, because of Tom.
I'm so cool. I know, right? Tom, first question. How did you get so cool?
That's a great question. I don't have an idea. I don't have to answer that. Put you on the spot.
But, yeah, I think Tom was one-third of 280 North, the company started around 2006. We publicly launched 2008. There you go. So, 280 North, famous, a new source community for Cappuccino and Objective-J, which many people thought was brilliant.
Other people thought was crazy. I was a couple. I was a C, wrong. I'm just kidding.
But I happened to be one of those people that thought it was pretty cool. I think 280 Slides, which was basically Keynote inside a browser way back in 2007, 2008, was quite the tech demo and showing off what Cappuccino could do. And, yeah, I went and did it. I was writing some Cappuccino, and I actually didn't know Objective-C, which made learning Objective-J very difficult.
But for those who don't know, Objective-J was... Well, Tom, why don't you explain what Objective-J is? Yeah, so Objective-J was sort of a language extension to JavaScript. But sort of stepping back to the reason why we did that was we saw all these cool web applications being built by Google and mostly Google back in 2005 or so, Gmail, Google Maps, that kind of thing.
And we wanted to build those kind of things, and you really had to do everything from scratch. There wasn't really a full-fledged framework sort of analogous to Cocoa. So we had been Cocoa developers, so we sort of took a lot of the ideas from that and built this framework we called Cappuccino. And at some point, we decided it might be cool to have sort of a language extension that gave us some of the things that Objective-C gave you on top of C, JavaScript, so it could run in web browsers.
And so it added things like modules and classical inheritance and backhanding. Right, and somewhat famous in the open-source community for its divisiveness. But no doubt, interesting in what allowed to produce. And then 280 North, eventually you guys sold, correct?
Yeah, yeah, so we worked on Cappuccino for a couple of years. We started working on some developer tools around Cappuccino, and we ended up being acquired by Motorola in 2010 to work on some kinds of things there. There you go. So 280 North, no longer a thing, or at least consumed by Motorola.
And then you start to ask yourself over time, what happened to those guys? Where are they? And I think I followed Tom on Twitter. Then all of a sudden, Outcomes Metabase, and I think you said, if you've been wondering what I'm up to lately, this is it.
And so that was kind of the genesis of this call. Also, we had a few people, ChangeLog members chatting about Metabase on launch day saying, oh, we've got to get these guys on. And here we are. Here we are.
Here we are. But let's learn a little bit about Samir. Samir's CEO. Tom, are you CTO?
No, our CTO's Alan. Okay. He could be on today. Fair enough.
So Tom's an engineer. Chief Robble Rouser. Chief Robble Rouser. I like that.
Samir, why don't you give our audience a little bit of introduction to who you are and where you're coming from? I guess I've been coding since I was in middle school. I spent a lot of my earlier career just dealing with some crazier sections around machine learning and engineering. I think my first couple jobs all revolved around ML.
And at some point, I started doing Hadoop before Hadoop was school. And a couple of years into that, most of my life was spent either cleaning crappy data, pushing crappy data around, or displaying the net results of pushing crappy data around. And so it became less about algorithms, more about just presenting information to normal human beings. I think that's been the main theme of the last couple of years of my life.
Interesting. How did you find that? Like you thought you were going to be doing more advanced algorithms, but was it your exposure to real business problems where you realized it's just a bunch of crappy data and now I have to maintain it? I think a big part of it is that most companies, most teams, most organizations are at a much lower level of Maslow's hierarchy of data needs than they think they are.
And then what it really comes down to is most people just want to add up some numbers and show pretty pictures to someone. And so you kind of get on board, there's all this talk about all the crazy things that everyone wants to do. And when you actually sit down at your desk and realize, well, none of the stuff that lets you build the crazy stuff, the crazy things, is actually around. And so there's this kind of moment of moving from, I guess like the first thing I did at my first real startup job was just optimizing memory patterns.
And so it was, hey, here's this recommendation algorithm. It's running on a single core and I think it was four gigabytes of RAM back then. And I spent the first three months just trying to sell more training samples into that four gigs. And then it came about and it was more, it switched gears from being kind of a memory sort of hash map tweaker to just adding up numbers for label reporting.
And so a lot of the sexy stuff that Dubunlock was just being able to add up plays of who played which track for how long, faster, and better. I think that's an interesting insight. I have a friend here locally in Omaha who's kind of an operational consultant and he's very much at the same level we do with many of the small businesses. I think we all focus a lot on large businesses and enterprise and corporations with huge data systems and many large problems they're trying to solve.
And there's thousands, if not tens of thousands, of small businesses out there that just have no handle at all on their data and no insights whatsoever. Maybe just a series of spreadsheets on a shared network storage that they're trying to share access to or those kind of things. So, man, I mean, that seems like a very good lead in the Metabase, right? It does.
So glad you guys teed up for me. Tell us, Amir, what is Metabase? At the end of the day, Metabase is a way to take all the stuff you have lying around in a database somewhere, whether it's a data warehouse and you've paid for a bunch of money or whether it's just a MySQL box you have lying on your desk and let normal human beings get at it in the sense that, you know, for most people aren't engineers, most people, and even if they are engineers, they don't necessarily want to write SQL a day. At some point, you just get tired of banging out yet another view of a data with a chart attached to it.
And so the primary kind of purpose of Metabase is just to take a table or a database and then render it in a real way and then also to let someone interact with that data and that visualization and kind of get to what they're looking for. And at least on its face, it's meant to feel more like clicking through something and kind of exploring as opposed to I'm showing up, I have a question, I know exactly what I want and here are the parameters. It's more that, I mean, I'd say most of my professional life, I did not know exactly what I wanted when I sat down. So even in situations where there was a very concrete request with someone or we knew what we were building, when you actually sit down to write the queries, it's like, so I think I want to see what's in this table.
I want to do a select whatever limit, 10. I want to fuss around with it. I want to see what the various values are. I don't remember what this field was called.
I don't remember whether this was a string or an enum. And rather than having to look all that up or memorize it or just spend that first half an hour with a bunch of selects, Metabase was really created to let me sit down or let someone who is not nearly a cycle sit down and get to the kinds of questions they want to ask. I know when we first looked at Metabase, I was thinking, okay, what is the purpose of this? Because on one side, it's like, you know, your tagline is an easy way for companies to ask questions and learn from data.
So I was wondering if it was like a core thing that was open source or was it something you pointed at a database? So you seemed to kind of answer that in a bit of a way. Yeah, I think we're still struggling to kind of describe what it really is. Most of the vocabulary in the space has been overloaded and made almost meaningless.
So like we're analytics, we're business intelligence, we're reporting, we're data access, we're, and there have been thousands of products that do funnel something we're doing, which is take a database and let someone visualize it and look at it and play with it. But yeah, so like I get the, I get your confusion about the core questions and I don't think we found a really good way to describe fully what we are. Yeah, I thought it was going to be like, you know, open up to the company if you've got questions very core, like internally, so to speak. I've seen some of this come and go and I was like, well, is that what it is?
But then as we got deeper, it was like, okay, it seems like you pointed at a database so you can, you know, to jump the gun a little bit, we can, we have separate ways we can play with it and one of the ways is if you're on a Mac, you can download sort of a wrapped version that's just for play only. I guess maybe you can do some personal production stuff but it's not like collaborative, but you can point at the database locally and start to discern some of the data. There's that word against Samir. You check out some of your data and visualizing it and running queries, it seems like it's, you know, I'll layer on top of that but the ask questions part was very confusing to me.
Point taken. Yeah, and once you get into it, I have been running a few things and of course I'm, you know, as an Apple developer, as an app developer, like queries and selects and right like sequels, you know, you start to think in relational models and so I'm immediately thinking, okay, this is a query builder but the interface in it, I see what you're trying to do, it's like create a new question and it's like you're trying to provide an insight or something but then once you start building a question really it is like kind of describing what you want to see. There's a bit of a, there's a bit of an impedance match between the word question and I think what's going on but I definitely see how that's a difficult thing to describe and where you guys are trying to get what you're trying to simplify the cognitive space necessary to actually like instruct these things so that everybody can do it and not people like us. Just to jump in a little bit, I think the fundamental problem we're solving is in our current state is what someone's mental model is of their application or their data set or their business or whatever it is they have data about and letting them work in that model as opposed to the model of their scheme on disk and so one of the interesting things on that base is we're also starting to kind of nudge in the direction of rather than formulating a question rather than telling us what you want you just kind of poke around and you're like you can double click on a cell and filter by it you can follow an ID to that record's detail you can follow connections and generally the overall sort of user idiom we're going for is I can look at the data I can play around with it and then rather than having to format the question precisely it just emerges from me clicking around.
Yeah, I think that would be a nice extension of that or perhaps eventually a replacement altogether as this kind of exploratory thing but so the first question that I'm asking is like what exactly is this I think we've covered that pretty well the other question we had was like why is this open source but I think that's even assuming we have some knowledge which is as we interviewed you guys Samir, you're the CEO of Metabase so this is not just an open source project this is a company which we're seeing more and more of this I think just last week Adam we had Slava Akhenchat on with RethinkDB let's rewind a bit and just get an idea of what Metabase the company is where you guys come from and the business side of things. Yeah, so Metabase was originally part of Expo which is a startup studio in San Francisco. I spent about a year and a half there and we originally built out this huge crazy custom analytics system for all of our companies that span everything from collecting events to stuffing in a data warehouse to running transformations on them and finally visualizing both the data and queries on top of the data and about a year ago we reached the point where we definitely wanted to work on it full time we definitely thought that it had legs and it was something the community would want and that rather than it being something that was used by 10 companies internally we could open up to the world and have potentially anyone use it. And so that's kind of where it emerged from.
I'd say the other thing it emerged from was just I've wanted something like it for about seven or eight years now and every couple years I poke my head out of the ground look around check out the usual suspects in the open source BI world try to install them hate the process and just write my own query builder or ad inventory planner or customer record lookup or something of that sort. And so kind of jumping against your question like why is it open source? I think one of the starting points was just I think there should be something like it in the open source community and ecosystem. And had someone else built it three or four years ago I probably would never start on it but it just feels like something that's missing and something that I've always wanted.
On the business side of things I think we're still figuring out exactly how that'll play out but the general sense is we will be offering Metabase itself for free open source forever discussion grade we're never going to hold anything back and then the things around the usage of Metabase and company will start to start 24. Okay so we actually have a tweet from probably Jared one of the fellow ChangeLog members that you mentioned Justin Dorfman he asked a question on Twitter just tweeting to you Tom and then at Metabase and said it looks awesome in reference to Metabase came with a tryout how do you plan to sustain this so you seem like you answered that to a degree because his question was will there be a pro version now Jared mentioned that's sort of the way that we've seen more and more companies like WeThinkDB or others create an open source version and a supported version or a pro version that's on top of it that's much more robust so is that something we can talk about here today do you have a lot of details around that? We have a couple rough prototypes we play around with we have a couple themes we're exploring that characterize it as a pro version that's somehow better than the open source version and more the supporting scaffolding that lets you use it in big hairy complex places and so there's lots of things that most people don't really care about until they do so like compliance and data governance or auditing who's all what or maintaining social knowledge across 10 years with analysts and being able to make that and while that's something that Comcast would pay money for it's unlikely that someone who doesn't get cloned or eventually not yet would ever care about and so as usage of a company or someplace that is commercial takes off and you go from having 10 people on it to 20 analysts and 100 end users there's a lot of problems that emerge that we will offer solutions for which are money for You mentioned that if there was an open source version out there you probably wouldn't have done it maybe it's an obvious question but why open source? What makes sense to make what are your plans for open source?
In some ways it's just how I think this kind of software should be available and I characterize kind of the starter BI kit for most companies as being the same class of things as WordPress or Nginx or an app server or, you know, UWSGI, where it feels like such a basic component of most modern, you know, stacks. That's kind of weird that there isn't an open source starting point there. And so in some ways it's kind of ideological. In some ways it's just a sense that the entire data infrastructure ecosystem is all open source.
Or sorry, the part that I care about, the part that I engage with and the part that I work with as an open source. And I both want to contribute to that commons as well as just my own belief that a better product will result at the end of it all. All right, well said. Well, it's time to take a break.
On the other side, we're going to talk about SQL, how that plays in and what you all might be thinking. That's what SQL was made for. So we'll be right back. Our friends at TopTile launched a scholarship program for female developers to support aspiring female computer scientists, developers, and software engineers to help achieve their goals through financial support and also mentorship.
Each scholarship winner will receive a $5,000 scholarship that can be used towards education and professional development goals. You can spend this money on anything you want from coding bootcamps to online programming courses, textbooks, you name it. You also get one-on-one mentoring, an entire year of weekly one-on-one mentoring with a TopTile CEO developer. And this person is going to help you with topics like project guidance, choosing an academic or career path, and also preparing for interviews.
Head to top.com slash scholarships to learn more and also to apply. All right, we are back again with Tom and Samir, diving deep into what Metabase is. For those of you out there listening along at questions like this, you may be thinking that that's what SQL was meant to be and what it should solve. So Tom, Samir, I'm not sure who wants to take this, but it seems like this is some of what SQL was meant to solve.
And I get it, a better user experience, maybe even platform agnostic, web UI, more flexibility, things like that. But why is this better than plain old SQL? So I have a long rant about that, but Tom, if you want to chime in first, maybe you can. Sure, yeah.
So SQL is fantastic for developers, for anyone who's able to parse and really understand the syntax of SQL, which a lot of us probably take for granted how easy it is to use. If you're familiar with programming languages, it's not difficult to pick up. But if you're not, it's just a lot more difficult to format everything correctly and know exactly what you're supposed to say. And so Metabase offers sort of a more graphical way of expressing a lot of the same types of things and more powerful things as well.
Samir, you said you had a rant. What's your rant? I think it's interesting to look at SQL in the context of the 70s when it came out. And there's kind of this, you know, every five or ten years, there's always some new system BI movement or product or marketing campaign.
And if you look back and think about what it was like to write database access modules or coders, queries, before SQL, you had some variant of assembly language or C, and you're hitting DB or DB2 directly. And so when SQL came out, it was kind of maybe a bombshell in the sense that it looked like English. Normal human beings would probably understand it in a couple days. And if you were smart and numerical and just at all inclined, it was not that hard to pick up.
And I'd say that, you know, it was a categorical huge success. And I can't say enough good things about SQL overall in this RGB mess. But what else has happened is there's been just these waves of accessibility where you start out with just, I'm going to write some crappy assembly code, then, too, I'm going to write SQL. And then you get spreadsheets, and spreadsheets are magic.
And, you know, Excel, it's kind of one of those transforming technologies in our world. And then you kind of get into the world, like, maybe access counts, and then you get Tableau in the mid-2000s. And in each of those, there's been this significant widening of a pool of people that have creativity and questions and honestly just, like, are informing what they want to know and are the people that should be asking underlying questions. And this lets them do that as opposed to requiring them to also know how to be programmers.
Yeah, it does seem to remove the barrier, too, to be, you know, in quotes, a programmer, a developer, someone who is familiar with or even comfortable with it. And I can think of many people who have creative minds who are like, man, you should be in these meetings with us asking these questions because that's a great question. Yeah. It seems like you're wanting to put a great tool in their hands.
And some of it is just, even if you are a programmer, even if you are inclined in that way, like, I mean, I don't know how good I am at SQL and all of them don't. I think I have at least a working knowledge of it, but I've definitely hung out with people that are much more proficient at it than I am. There's still days when you don't want to type or you don't want to think in that way. Or, you know, if you're fundamentally in a creative headspace and you're thinking about what people are doing, how they've done it, you know, whether it's dropping down MapReduce, whether it's writing SQL, whether it's, you know, writing R scripts or Python scripts, there's days when that's not how your brain's wired up.
I think it's useful to be able to approach problems in different directions using different tools. And so, like, everyone's all of our Tableau. We're all, you know, full of R or MATLAB. But there are days when you just want to see a pre-victure or a graph and you don't want to deal.
Right. And the flip side of this is, given that most of us don't work in isolation, there's other people who are doing all kinds of stuff that's hopefully useful, you don't necessarily want them banging on your door every time they have questions. I can think of things like, too, where you're in the, you know, you're in market, you're in part of development, and you don't feel like going to messing with the people in ops or infrastructure. Somebody that's got, you know, way more things to do than to answer your questions about, you know, data, basically.
Yeah, because they have stuff they're doing in real life, too. You know, we all have jobs, presumably. Right. Or we all have things we do for fun or fashion or to pay the rent.
And usually there's only so many hours a day. And if, rather than having an ops person or a DBA spend 30 hours a week fielding all these kind of recurring ad hoc. Internal questions, even, it seems like. Precisely.
You know? How is this? Where's this data coming from? Or what does this field mean?
It's like, what does this underscore test underscore count mean this week? Right. That's definitely a rant, actually. Maybe it would be clarifying to the listening audience, because they can't see it.
They can't feel it right while we're talking about it. Could one of you kind of verbally go through what the user experience is of asking a question and kind of formulating some things you can do in the database? Can you kind of walk us through with the UI what this user experience looks like? Sure, I can take that.
So you load up the database. If you haven't added a database, you can add all the connection details for the host name, port, password, all that stuff. And then basically just click create a new question or ask a new question, and it presents you with this sort of graphical editor for expressing theories. You first select the database that you want to ask a question about, and then it gives you a whole bunch of options on filters, aggregations, sorting, you know, a lot of the same kind of things that you could express in SQL.
But we try to, you know, limit your choices to things that make sense and give you special interfaces for different data types. So if it's a numerical column, you can filter by greater than equals, you know, those kinds of things. If it's a date or timestamp, you can filter by a special date picker. And then you can aggregate the results in various ways, like counting sums of certain columns, grouping by different columns.
And so the idea is you start by picking a table, maybe just view the raw table to begin with, and then you can pick an aggregation, view it, aggregate it some way, and then add filters and that sort of thing as you sort of decide what direction you want to go with the query. And for somebody who's kind of getting antsy, you can ask the question, is it read and write only, or can you write back to it, or is it just read only? It's read only. All the connections to the databases are read only.
And, you know, if you want to create a special account on your database, it's read only. We recommend you do that as well. About 10,000 people just wipe their brow. They're like, nice.
Yeah. You probably don't want to be issuing queries against your production database anyway, so you might set up a replica or something like that. Yeah. I guess that would be kind of shared traffic, internal traffic, and then actually, you know, real writing and reading from the database would make some sense.
I also have some notes that you can still do SQL when you need it. Can you talk about what that user experience is like? So if you're doing this questioning, you're kind of diving into your data, if you do have that kind of super power, like being able to write SQL and create the database, how do you access that piece? Sure.
Yeah. So in this query editor, when you start a new question, there's a little toggle button in the top right-hand corner that you can flip over to SQL mode. And yeah, which gives you a fairly basic SQL editor, but it does have auto-completion for all the various operators and table names and that kind of thing. Is the hope with that feature to get both sides of the fence using the same tool so that if you've got the super power to be able to do SQL and write SQL, you're in the same thing that the other users are in?
Is that the idea, or is it just simply to get quick access? So, you know, sorry, we have that in there because we're trying to create this editor that can express any sort of query you want within reason. But at least, especially in the early days, we couldn't express a lot of queries that our users wanted to ask. So having SQL editor allows you to drop down into SQL to express more queries.
And some people are just more comfortable with SQL, and that's fine as well. So once you save a question, you know, you can add either one to a dashboard and that sort of thing. It doesn't matter if it's a SQL query or built with a graphical editor. One of the things it lets you do is, like, for the kinds of questions our interface can't express, it lets someone with a secret power do it for others, and they can reuse that.
So most people, even if they can't write SQL, are very comfortable taking this wall of text and replacing 7, 14, and go from weekly to 14-day averages. So people are going to edit and remix them, but they wouldn't have the ability to create them from scratch. I'm going back to something you mentioned earlier, it was just when you're actually asking the question that the process of asking gets smarter based on the actual data fields in the database. Does association text require the proper foreign keys, or is it smarter than that?
So we try to detect as much as we can based on the foreign keys that you have set up and the field types and all that. And if we don't do a perfect job, you can edit all the metadata that we've captured about your schema in the settings page. So yes and no. And being a little more in the weeds, even if something doesn't have constraints, you can still use them in joint statements.
So if you go in and manually say, this field is a foreign key to that table, then all of our kind of relationship or has one relationship aspects of our query builder still work. So we're trying to get smarter around auto-detecting, things like that, but it's an ongoing process. Can we talk about database support? You got support for MySQL, we go back to the list because I didn't have it, and I'm bringing up that topic, and I'm not perfectly ready to ask the question, but you got MySQL Postgres Mongo, and then I had to ask Jeremy, hey, what is Redshift?
Because I've actually never used that, so I need to go with that button. It's actually pretty cool. It's from Amazon. So if you didn't know about Redshift, Amazon makes it, it seems pretty interesting.
So I don't deal with Big Data enough, so that's why. Let's talk about the support for various databases. Obviously, MySQL makes sense, Postgres Mongo. What's the process to support that from a technical standpoint?
So we have a query language that all of our queries built using the interface are serialized as, and then we have a separate step which converts those to either SQL or Mongo query language or whatever else we support. So adding additional drivers is what we call internally. It's just creating another driver for us to target either SQL dialect or completely different database driver. So we had Slava Amacheck on recently, RethinkDB, so if he wanted to support Rethink and Metabase, it's simply forking, running the own driver, and boom, goes down the way?
Yeah. That's awesome. If you know a guy who knows a guy, we'd love it if we'd help us out with that. Well, we do know a guy.
But I'm sure maybe the guy's listening, so just do it, Slava. In general, we're committing to writing a bunch ourselves, but the primary determinant of which ones we write is just what people ask for. So we've been funneling people to get up issues in question and just trying to get a gauge for other folks that have found this, other folks that are using this, what do they want? So, for example, we're working on both SQL Server, which apparently a lot of people ask and want it, which I didn't expect, as well as pressure drivers.
And there's a couple other open issues for, just off the top of my head, Elasticsearch, BigQuery, Spark, Presto, maybe Apollo. And if enough people want one of those, we'll do it. But we don't want to just write 50 drivers or every different dialect without having there be someone who carries that to complain about it and just cast their vote. Good stuff.
Well, it's time for another break. When we get back from this break, we're going to dive deeper into getting started with Metabase, moving on from the Mac app, and getting into production. So stay tuned. We'll be right back.
If you thought Harvest was only about time tracking, check again. Fast invoicing and payments. You can easily create and send invoices and accept payments with PayPal, Stripe, and many more. You've got expense tracking without the mess.
You've got an iPhone or an Android app that can only go with you. Snap those receipts and store them in the Harvest app. You can also connect favorite tools like Slack and use chat commands to start and stop your timers. Head to getharvest.com and start your free trial.
And once that trial is over, use our code CHANGELOV to save 50% off your first month. We're back. And we still have these two awesome fellas, Thomas Nair with us. And Jared, we're dealing with a little time delay with Jared.
So for some reason, I'll edit this good. But Jared, you sound beautiful, man. I love it. Sound great.
Edit it good, man. Edit it good. Edit it good. You know, before the break, I said let's come in and talk about platform and, you know, how we can get this production.
I want to ask one more question real quick that's more on the general side before we go into the deep tech side. You know, we're in the days of Slack, real-time communications, things like that. I'm just wondering how these kind of things play together when you actually communicate with your team and you're actually, you know, just kind of digging into your data. Is there ever a plan to sort of do some Slack integrations?
It's funny you mention that because that's exactly what we're working on right now. Right now. Okay. Awesome.
Can you talk about that a bit? What can we expect? Sure. So we're working on this feature called Pulses.
The idea is you pick a few of the questions you've already asked and saved and up to five questions and you can send those out to various channels. The two we're supporting initially are Slack and email. And so you can pick five questions, pick a channel or two channels. And pick a schedule and we will automatically run those queries, you know, run those questions and send out the results to the channels that you selected.
I can think of how that's going to be so useful. I mean, you know, for one, taking, you know, all this data knowledge and putting it in the hands of people who are creative enough to ask, you know, these questions that Samir mentioned earlier, and now you're allowing them to craft questions that dig with this data and sort of snapshot it back to the internal team, or I guess anywhere, Slack to support really, even open channels. It's just been one of those things I've seen in every single job I've ever had where at some point someone walks up and wants to know the email. Yeah.
So it's just kind of, it's the generalization of that. And then that person spends so much time, like, crafting these emails for people to keep them updated, and that's just dumb. Don't do that. Something like this makes me want, and maybe even a step further, and I'm wondering if, you know, perhaps these thoughts, you probably had these thoughts for sure.
But it's like, you talk about asking questions, but then we structure a query, basically. It's almost like we need to take it to the next level where you can actually have maybe categorized or formalized question styles that you can actually ask a question. Because let's just start dealing with, like, you know, Slack integrations and, you know, send me an email every day. Well, why don't I just be able to ask this question and it just gives me the answer?
Just today I was wondering if there's a Slack bot way of saying, you know, how many people are on the website right now? And it's like, I don't even want to go take that, turn it into a query, and then do that extra step. It seems like even with this tool, which is definitely lowering things for many people to have access to data that wouldn't otherwise, it seems like the serification of querying, if I could just move with a ridiculous term. It seems like that would be awesome.
What do you guys think about that? Good turn, dude. Good turn. Serification.
We wanted to start with something pretty simple, the minimum viable thing that we could do that's useful for Slack iterations. That's where we're starting, but I could definitely see us adding something like that in the future where you can just type a free form question and we try to parse it and give you the results back. I guess that, Jared, or your suggestion there, I assume they have a long runway. I guess maybe one more question before we dive deep into the tech side of things is we talked a bit earlier about pro versions and sustainability.
How important is getting to some part where you all are making money as a company? Does that matter? Do you have funding? Do you have runway?
Are we concerned about things like that? So we have a bit of funding and I think it'll see us through definitely next year. We're still trying to piece together exactly what it looks like from a company perspective. I think one of the strong reasons we are open sourcing all this is we want to have a life outside of just our company.
So while in terms of my landlord needing me to pay rent, it's quite important that we somehow do make a living from all this. I think we expect to make money in ways that are not related to the actual core product of the user experience itself. How soon will we hear about a MetaBase Conf? As soon as there's 10 people that want to get together at an open bar.
There you go. That's a CD interview. So it's Meetup first, then Conf next. Exactly, exactly.
We can call it MetaConf, even when it's just open bar, actually. I like it. And this might be a good place to plug, well, it's mostly a joke right now, but we're talking about creating a microbrewery. I forget the exact beer names you come with, but Tom, do you remember what?
Well, there's a MetaBrewery or a Deer? Was the name of the brewery? Yeah, there was an actual, anyway, so, yeah, it's coming soon to a MetaConf near you. It kind of reminds me, I mean, it's a tangent, so forgive me, but when we were at GopherCon this past July at the Wine Coop Brewery, which is where the after party was for 1,300 Gophers, you had to do something special, right?
So they actually had a special beer. Jared, do you recall what the beer was called for GopherCon? I can only recall it. It was delicious.
It was delicious, that's true. What was it called? I don't know, I don't know. I can't remember.
That's why I do. But it was good. I liked it. We're all striking out on beer names now.
Oh, man. So it's had quite a few incarnations, and I guess I'll just kind of rattle them off. If anything's interesting, we can drill into them. So it started off life as just a big ball of Python with literally jQuery charts in the front end.
And at some point, just brain damage of dealing with async in the Python world just got to be a little too much. That plus, we've always had the idea of making sure they're super easy to install and deploy, and for all its flaws at JVM, it's kind of off in that regard. There's something just magical about a single file. You push around, whether it's Go or a JAR file, but there's something just compelling about that.
So we played around with different options. We wrote little mini-protes in a couple languages. I think at one point, we settled on Scala, and we're in the process of writing it, and just some of this associated brain damage from the team was just too much, and we switched to Clojure. So that happened approximately January through March.
It was kind of a rolling migration, and it's pretty much entirely Clojure these days. There was a shred of Java for our migrations framework, but that's important. I know when I installed the Mac app to play with it a bit, I had to run Java, so that the piece kind of lingering then to support the Mac app? So actually, the Mac app is ironically...
All right, let me back up in a second. So at this point in time, it's a Clojure app which compiles down to a JAR file, which is run on the JVM, which is a Java version machine. One of the main impetus for the Mac app originally was that it was a pain in the ass to install either the JRE, which is a Java runtime environment, or the Java development kit on a Mac. And having watched a couple of my analyst co-workers or ex-co-workers or friends try to do it, it became more and more painful.
And so the original vision of the Mac app was just bundle the JRE with the actual JAR file and slap away the view on top of that. And it's kind of grown if I could just go back for a quick second. Sorry, Tom, if I could just wind you back to something you said there some year, the switch from Scala to Clojure script. You said that the problem was all the associated brain damage.
Could you just unpack that for us? So I kind of blacked out a lot of that portion of my life, to be perfectly honest, but of the bits that I recall, it was, you know, obviously I had relatively little to do with that change. It was Alan who Tom mentioned and Cam, another one of the backing guys. So one of the core speaking points was just A, the fact that Scala, most of Scala SQL DSL are strongly typed, which if you're generating dynamic queries is exactly what you don't want because there's no way in which you can actually construct a type system that will know what some arbitrary user created query will have.
The other bit was just, it just felt, I don't know how to describe it, it just didn't feel fun. And when Cam essentially just said, hey, we want to do Clojure and wrote a prototype over a couple of days, he got kind of to where about a week and a half worth of dedicated Scala coding took us. And so that was like maybe a day or two of actual disclosure work by him at that point. And so he kind of went around and around on it for a couple of days, I think a week or two, and it just felt like a more natural language to express all this in.
And I briefly mentioned our query language and how we kind of compile or transpile that to SQL or Mongo. And that looks and feels a lot like just straight-streaming inflation, which I've always found easier to do in any list rather than Scala. Yeah, I don't know if you can dive a little bit deeper into the query language and kind of talk about what that's all about. All right, so I'm at least like a decade out of my compilers class, so if I mispeak, I hope no one plays me too hard.
But what we try to create is a language you can express a large set of interesting queries in. It's kind of like SQL, but one of the primary differences was it's meant to be composable. And so you do things like state snippets and pass them around and that each snippet or subtree is pretty much uniquely determined. And so it's really hard to slice up SQL and then pass it around.
It looks and feels a little like the AST you get if you parse SQL. And so a lot of just my mental model for this comes from back in the day when I was doing genetic programming where you do tree manipulations and express programs or designs in trees and you foster them. And so we have essentially query language that starts off with here's much operators, here's the various clauses in a query, and here's ways to reference fields, to reference density macros, to reference aggregations and constants and operators. And that tree then gets passed to core mode and it's got a lot of work done to it.
Let's hear about the front end. Tom, it sounds like that's your playground with your history and building front ends. Can you tell us how that's all put together? Yeah, sure.
So when I joined, we were in the process of transitioning from an Angular front end to React. And it's pretty early on in that process. It started with just the query editor being built in in React. And it was actually pretty easy to sort of drop in little pieces of React into a larger Angular application.
And since then, we've ported more and more of the application over to React. And we're almost at the point where there's no Angular code left except for the routing and some controllers. To get rid of the rest of that Angular code and do complete React on the front end. But we're not quite there yet.
Yeah, it seems like if you're not using too much of Angular, having that as part of your payload is something that you definitely want to worry yourself from at this point. What about the data transport? Like how's the front end and the back end talk? I know there's been a lot of hubbub around moving away from REST and onto these Falcor and Facebook's idea which graph you well.
Yeah, really, thank you. Any move in that direction? So right now, it's just pretty much RESTful JSON APIs. But those are definitely interesting ideas that I've been looking at.
Yeah, it'd be really interesting just curious your thoughts on React in general as a person who's seen a lot of tools over the years in the JavaScript space. I love React. The thing I've sort of been struggling with is React is great for taking some data, turning it into a UI, but it's not the whole picture. Right.
You need something else to sort of manage that state, whether it's Flux or something like Relay or what have you. But we're starting to look at using Redux, which is a, it's Flux-like. I don't know if it's technically considered Flux, but it's sort of unidirectional data flow framework that's very functional and focused on immutable objects and that sort of thing. So we've been using that in bits and pieces of the front end, but it's not, we're not using it for the entire application state.
It's more like little silos within the application. Yeah, Redux is interesting. Actually, we just had a ping on our ping repo, which is kind of our open inbox where people can give us show suggestions. Yeah, Dan Abramov.
Abramov, yeah. Yeah, he actually agreed to come on. We just haven't scheduled yet, so look forward to that, everyone. And let's get back to databases again because we have Postgres, MySQL, Redshift, which I think is like planned but not yet supported, H2, which could you explain H2 for us non-Java people?
H2 is just an embedded database in Java land. It's more or equal than SQLite in many ways. Okay, so it's there just for a nice default, basically. We use that as our default database for Metabase's own data, so you don't need to set up Postgres or MySQL.
Very cool. And anything else technology-wise that you guys are using in part of your stack that we haven't touched on? I see we've got an excellent project in there. Obviously, there's a little Mac app which appears to be in a WebView, which makes a lot of sense.
Anything else that you're doing technologically that's noteworthy? Yeah, I think there's some other stuff. I'm not sure exactly what it is off the top of my head. So switching back in, there's so many things we're doing around just fingerprinting columns and trying to infer the semantic model.
What we've shipped today is sort of a minimum usable set of rules in the UR6, so we're hoping to really push those as far as possible. At some point, my pipe dream is I load it up, I point it to a data warehouse, and it automatically knows everything that I could tell it about the underlying data model. Obviously, that's years or decades away, but that at least is the hope rather than having this pointed database and spend hours or days restructuring data, annotating things. And just moving from, okay, this kind of cool out of the box to this measures everything that I wanted to measure.
One more question before we break is we mentioned earlier the thing about meetups and comps, and we talked about why Metabase is open source. But even inside open source, there's different kinds of open source, and I'm curious what kind of open source project you want this to be. One hint that you gave is that you're very excited if somebody was a MetaRySync DB driver. Are you hoping this becomes a large community effort, or is this an open source product that Metabase employees are going to work on in the open?
I think initially it's going to be the latter, and part of the reason is we're trying to be really meticulous and thoughtful about the front end, and specifically on the design side and making sure that what comes out of the process looks and feels like an application that you use today. And one of the things that the open source community has had mixed results in is just creating end user interfaces. And so at least on the front end of things, we're going to be pretty OCD and pretty meticulous and just very ordinary about that. And so while we definitely love people to help out, we want to provide a community.
We're primarily in the open source because we want to give back and not so much because we're looking for contributions or fishing for people to help us out. Actually, I agree with everything Samir said. I think there are very specific integration points that would be perfect for open source contributors to help out with, and drivers are definitely one of them. I think we don't have a great API for it yet, but it's the pulses thing that we were talking about earlier.
You know, different integrations with different external services and maybe eventually different charting charts and graphics and that sort of thing. So there are a bunch of different areas that I think it would be great for us to sort of document and expose very clean APIs that external developers could use to extend Metabase. Very cool. Let's take a quick moment here from another one of our sponsors.
On the other side of the break, we will talk about getting started, how you can actually get Metabase up and running today, pointing at your company's databases, and we will also ask our closing questions. So stay tuned for that. We'll be right back. DigitalOcean has expanded their reach even further into Canada's startup and developer team with a launch of TOR1, that's TOR1, their first Canadian data center in Toronto.
Head to DigitalOcean.com and use the code CHANGELO to get a $10 hosting credit when you sign up. Again, DigitalOcean.com, use the code CHANGELO to get a $10 hosting credit when you sign up. All right, we are back talking about how do you get started with Metabase. So I'm out there, I'm a developer, an interested person with some technical chops, and I want to get Metabase deployed maybe on some personal projects or maybe from a company.
Take us beyond the Mac app and just deploying the dummy data. How do you actually get this thing set up and running depending on what world you live in? We also have a heroic deployer, which is very functional, but I wouldn't say it's quite production-grade yet. So if you're actually thinking about doing it for real, let's say either use the JAR, ask in your SSLT store or reverse proxy and terminate there or set up on Beanstalk.
And we have both a button that will pre-fill a lot of the Beanstalk settings for you, but that will take something in the neighborhood of 15 to 30 minutes to get that up. If you just want to play around with things without putting in Amt Shepard, you just download the JAR, slap it on Instance or server somewhere and just do a Java-dash JAR at Metabase.JAR and then log into it on 4.3000. And it should quote-unquote just work. It should quote-unquote just work.
And where do you go when it quote-unquote doesn't just work? Where do we go for support or help or what have you? So Twitter always works at Metabase. We also have at discourse.metabase.com a forum for our users to kind of chime in and talk shit or get help.
And then if it's something that you think is actually a bug, or a future request in GitHub issues is a place to get in touch with us. Very good. We'll be sure to link all those up in the show notes. This is episode 182, by the way, so if you're not listening inside some sort of podcast client, go to changelog.com slash 182 for the show notes.
If you're in a podcast client, well, you probably know what the show notes are. Very cool. Let's briefly touch on the future. I think we've done that a little bit.
I think the Slack integration is exciting. I think we talked far future where I can just shoot you a question and Metabase answers them like a genie. What else do you have? What are you planning?
What does Metabase look like in three years? What does it look like in five years? I think in five years, we expect to build just the standard open source BI platform. We're currently very useful for companies that are in five to 50 person employee range, and we're just trying to build the foundation for data access for all companies in a three to five year time frame.
So there's nothing we don't lack for ambition. We don't lack for crazy finance type stuff. I'll throw out one of my projects is just trying to give people a really simple way to do graph traversal. So it's not something most of the talk about in concept analytics, but there's a lot of really common, really useful, really natural questions to ask that are really just walking a couple edges of graph.
And so having to do things like, oh, I want to see who complained about this album last week, and how do they feel about these other albums? How did those albums that are complaining about do other reviews? And it's the ability to kind of take those questions, which in conversational English sound very innocent, but if you strive to encode it in a sequel, you'd rather get pretty annoying and make that something that's one or two clicks away. Awesome.
I think I have time. So I'm going to pull a quote that I got off of Twitter. I think this was a fellow by the handle EDW519, a very interesting developer with lots of interesting little quips. One thing he said, which I thought of when we started this call is he tweeted, no one would pay seven figures for a very fancy report writer, so they had to rename it business intelligence.
And true to a certain degree. So I got me thinking, you know, if Metabase is successful, you know, I want to hear your thoughts on perhaps eliminating an entire job title inside many organizations. This is perhaps a little inflammatory, but I don't think jobs ever disappear. I just think that as time opens up, we find new and creative ways to fill them.
So what I think will happen is that, you know, the roughly 20 to 40 percent of an analyst today, which is fielding these ad hoc questions, will go away. But A, they'll have more time to do the stuff they actually enjoy and create sort of deeper explorations and just the more intricate question and hypothesis testing and exploration they do. The flip side of this is I don't, in most places, it's really hard to get numbers right. And so if you're, you know, one developer with a database that backs an app and you want to create a few graphs for yourself, it's really easy to sort of say those numbers are cool.
If you're in a complicated place with, you know, dozens of different data sources, with different views of the same data, different places, different roll-ups, a lot of what sort of business intelligence analysts and companies do is not create those reports, create those dashboards. It's trying to figure out why, you know, this revenue number or this DAU is not the same as this other report. And I don't think that's ever going to go away. We hope to make that simpler and easier, but fundamentally there's just a lot of human labor involved that we're at least one, you know, one generational AI advanced away from being able to tackle or even hope to tackle.
Yeah. No, I like that perspective. If you're not replacing people, you are taking people and making them more effective in what their role is and allowing them to free up time that would be doing manual labor and asking and answering more interesting questions. And for those who were just dead weight, you know, y'all are just dead weight, so you have to find something else to do.
Well, it's true. It happens. Jeez, dude. That's what they keep saying, you know.
Pretty soon the computers just write the programs for us. I keep hoping. Yeah, it's like we'll just go get a margarita at that point, I guess. Okay.
Any other salient points Adam or Samir or Tom you guys would like to make before we switch to our closing questions? Just go download it. Tell us what you think. Complain.
Let us know how it makes better. I have one side note before we continue. It's just because I have to ask because I put in the notes and I'm just curious if by any chance you borrowed from the playbook of WordPress when it came to the user experience of connecting to a database with Metabase. I think I've had WordPress in my mind for a large part of the journey.
But not like I'm honestly not. I've never used WordPress that heavily. But there is a certain magical instant gratification angle that worked out. And in the times that I have had to set up WordPress instances for other people, it's been remarkably pain-free compared to other things I've done.
So there's always the intention of providing some sort of instant gratification in like under five minutes. But then we definitely were inspired by WordPress on that front. It seemed like that was the – if it wasn't on purpose, it seemed like maybe it was by happenstance. But just the process of like there's a database either created by you recently that you're pointing to or one out there that's obviously there.
You've got credentials in your pointing to and it just seemed very familiar when I was reading those docs. I was like, I could ask that. I don't think any of us have used WordPress lately. So if it was something we, again, were inspired by, it was something very subconscious.
Totally. It wasn't like, oh, you sold it. It was just more like – because you're right. Like the instant gratification of WordPress is pretty painless.
It's been a while since I've done it too. We use WordPress here at the Chainsaw for our site. But, you know, it's been years since I've set up a WordPress install. But I know the process and it seems similar.
All right. Now we're going to the closing question. Which one do you want to ask first, man? Hero, Radar, or what?
Yeah, I think we just asked Programming Hero because it gives me an opportunity to mention we just launched Season 2 of Beyond Code. True. Who is your Programming Hero is one of the feature questions on Beyond Code. Season 2 now out there.
Check it out, beyondcode.tv slash spacecityjs. For those of you who are out there in Houston, you can now go there and watch your Beyond Code interviews and find out who your Programming Heroes were. So, quick shout out to that. And now, fellas, we'll turn the question on you.
Let's talk to Samir, and then Tom can take the next question. So, Samir, who, if you had to name it, would be your Programming Hero and why? I mean, on some level, I've always wanted to be Jeff Dean. Jeff Dean, please explain.
I'm sure I'm going to get a lot of this wrong, but he was one of the four programmers at Google. So, he, and I'm not sure exactly how credit is distributed, but he had a piece in a lot of the foundational technologies that made Google, Google. So, MapReduce, BigTable. And just by all accounts, he's a really nice guy, really humble, really good to talk to, and has had his fingers in some of the biggest projects and some of the most impressive things that have happened in the last couple decades.
Well, it's no wonder why, jumping the gun in your email, you mentioned TensorFlow, which is also credited to him, or to some point. Yeah, I'm not actually sure exactly if he works on that. I know Vincent, and I'm going to angle his name, so I know the guy, has worked on it. Yeah, I'm not sure if he works on it.
I think it's very interesting. I think it's, there's a lot around the open source ML world that I've been following for a while, and there's a lot of representations, there's a lot of execution platforms. One of the things I really liked about it was the fact that there is this visual kind of inspector and debugger and just kind of anchor. And I have not fully internalized it.
I haven't run any real, any classifications, any real data I have yet. But it's definitely something I'm kind of poking and prodding and staring at for the last couple days. That might be a little bit inside baseball, even for our audience, because TensorFlow just, like, just was announced yesterday. It's on Wikipedia.
Oh, no. Is it on JeffThings? That's why I mentioned it, because Career Google, it's the last on the list. It's, you know, Spanner, BigTableMapReduce, GoogleBrain, LevelDB, and TensorFlow.
So I just, I jumped the gun, but I assume that may have been another reason why you chose. I didn't even know that, but yeah, I mean, that only makes it more impressive in my eyes. This, so TensorFlow, the new machine learning framework that Google announced at the end of 2015. Looking at their GitHub, there's only two contributors, a guy named Keevman and somebody named VRV, but those could be, this whole thing might not have been on Git eventually, or originally.
Anyways, now I'm getting into the weeds. Do we want to get the, your question is on, too, or no? Actually, Jeff Dean was on that list as well, but yeah, John Carmack would be another one, the classic game. John Carmack, yes.
So Jeff, I think Jeff Dean is probably unique to you guys, as far as I had never even heard of Jeff. My fault, not his, I'm sure, but John Carmack is kind of an old favorite. He's a programming hero of many folks, so one new one, one old one there. Why John Carmack?
Maybe self-explanatory, but if you could just humor us. I mean, he's got incredible history with, you know, game programming as well as just programming in general. Yeah, there's not too much else to say. So he's a patient precedes him, and he's awesome, most of the way, sure.
Yeah, I mean, he gives great talks as well, or blog posts and that sort of thing, so. Try to remember, Jared, who else should you have mentioned, John Carmack? Can you recall? There's been multiples.
Karen Meyer, I think for some reason she mentioned him. Yeah, I'm pretty sure he's been mentioned three or four times over the years. He's also very kind of open and forthright on Twitter, which is very interesting. There seems to be very little filter between his brain and the Twitter submit box, because he'll just throw us out there.
Anyways. All right, let's talk about the open source radar. So either of you guys, I guess we'll go with Samir first, but, you know, if you had a weekend hack and it wasn't on that base, and it was totally for fun, you were like, man, I've been dying to play with this, what would it be? You can't pick TensorFlow.
Oh, Tom, what do you think? Give me a few seconds to think about that. So I mentioned some of the, we talked about, was it Facebook's Relay, Netflix's Falcor, and Ohm Next are all sort of rethinking the way you do client-server communications and web apps, and those are all pretty interesting where you sort of describe exactly the data that your UI components need, and you send one big request to the server, and it sends everything back in one request. And it's very unrestful, but it simplifies things because you don't need to add a new endpoint to your back end every time you want to add a new feature to your front end.
That just reminds me of something I forgot to ask while we're doing this. One thing that I thought of is, well, you've got Clojure on the back end, but is there any interest or thought of ClojureScript on the front end just to unify your languages across the code base? Yeah, I think that's an interesting idea. ClojureScript and Ohm is basically a ClojureScript binding to React.
Right. So I think that'd be really interesting. I mean, one advantage of sticking with JavaScript is it's a little more accessible to a broader range of developers as well as designers. You know, designers can look at JSX and see, you know, that's basically HTML.
So, you know, we have our designers on our team are able to do a lot of work on components in React and JSX and JavaScript, whereas ClojureScript would add a little bit more overhead to that. Yeah, that's interesting. We had Facebook on, we asked specifically about JSX, and if that was unapproachable from a designer's perspective, because they're so used to, you know, working with HTML and CSS as separate things and staying away from JavaScript perhaps. But they said internally they haven't found that to be an issue, and when you think that you're just not giving designers enough credit or something.
It sounds like you found it to be a bit similar, where your designers are just fine working with React and JSX and no big deal. Yeah, yeah. I mean, certainly they're able to implement basic components or tweak existing components just fine. But maybe that's an anomaly among our designers.
Well, it sounds like at least you metabase on Facebook, at least corroborating evidence there. All right, Samir, we stalled for as long as we could. Have you thought of something besides TensorFlow that's on your radar? I think, I mean, this is just me speaking from my own kind of background.
I'm really curious where speech recognition and NLP libraries have gone to for years. So I think if I actually had a couple hours to bang away on the weekend, I'd probably just throw it together something that, you know, try to take our voices and going back to your idea about sort of the certification of Metabase, playing around with that. Not in the context of the future for Metabase, just to see where that world has gone to. Yeah, perhaps proof of concept or at least just to explore.
Yep. All right, well, Tom and Samir, it's been a blast having the show. Thanks so much for taking the time to join us today. I'm sure it's got pretty awesome to be a couple years into this project and just kind of get the chance to come on a show like this and share with the open source world what's going on with Metabase and get people pretty excited.
So I want to drive back over to you, though, guys. Is there anything else you want to cover before we head on out of the show? It's been a blast. Thanks for having us.
I've really enjoyed it and looking forward to hearing more from you guys. And so listeners, go to Metabase.com. That's an awesome.com. I love it.
And at Metabase on Twitter, which is super cool. I want to thank our sponsors for Sparks of the Show, CoachShip, TopTileHarvest, and also DigitalOcean. And, of course, our listeners will not do a show without thanking you and those members who support us and where and rock and change log T. You are awesome, and I owe you a hug.
But for now, for us, say goodbye. Thanks, guys. We appreciate it. Thank you.
Thank you. We'll be right back.