Artsy Engineering Radio

Whatchu working on (on the side): Reams by Adam Butler

March 29, 2022 Artsy Engineering Season 2 Episode 10
Artsy Engineering Radio
Whatchu working on (on the side): Reams by Adam Butler
Show Notes Transcript

Pavlos Vinieratos talks with Adam Butler, about Adam's mobile app that recently launched. It's called Reams, and it's a "Deeply Superficial RSS"!
We discuss how the idea came about, how the development went, the launch, and a bunch more.
Join us for the first episode of Whatchu working on (on the side), on Artsy Engineering Radio. More to come!

https://apps.apple.com/de/app/reams/id1229027127?l=en

Pavlos Vinieratos:

Hello, hello and welcome. It's another episode of the Artsy Engineering Radio. I'm the host for today. My name is Pavlos Vinieratos. I'm an engineer at Artsy. And with me today I have Adam Butler.

Adam Butler:

My name is Adam Butler. I'm a senior engineering manager at Artsy.

Pavlos Vinieratos:

Today, we will do a new type of episode, it will be a mini series that we will for now call whatchu you're working on, on the side. And it will be all about people and their side projects. So Adam recently released a mobile app that's called reams. Do you want to give us a quick intro of this, and then we can get into it?

Adam Butler:

I've always used RSS for as long as RSS was a thing, I think. So that's just the way that I read most stuff on the web, it seems to me like a really like sensible way of reading things, finding, finding content and reading it on the web. But I've always been a little disappointed with how boring RSS readers are. So the actual experience of reading things on RSS is always a bit of a letdown. And I just wanted to make an RSS reader that was more of a pleasure to use. Like I wanted to, instead of reading like a photocopied sheet of A4, I wanted to read a glossy magazine. So that's what I tried to do when I made reams.

Pavlos Vinieratos:

Yeah, that makes sense. That's interesting. And I do like the the name or not the name, but the tagline I guess, the "deeply superficial RSS", which is very nicely describing what you're what you're talking about. And I do use RSS as well, but mostly on the computer. So I don't end up using like too many apps over there. But I did try yours. And I noticed that it has like all of the good stuff that you know, one would expect, like all the dark mode and like syncing with RSS services and like navigation, all of the all of the nice stuff. How long have you been working on this?

Unknown:

So long. Like so long, I think. I think the very first prototype I did for it was five years ago. And I made a prototype using Cordova, back then, which was an old way of writing hybrid mobile apps using JavaScript. Really like low performance. But that was yea so I built a prototype about five years ago, and then played with that for a bit. And then at some point, I started using React Native, rebuild everything from scratch. And then like, it's it's really like a side side project. Because next to a full time job, and I have kids, it's really hard to actually find time to build anything. So yeah, it's taken me a very long time.

Pavlos Vinieratos:

That makes sense. That makes sense. But it definitely seems like it started from something you wanted to use. And then it kind of turned out to be something that others also can use. Since now it's released, right?

Unknown:

Yeah, exactly. I mean, it was really, I mean, people always talk about scratching your own itch. And this was totally my own itch.

Pavlos Vinieratos:

Have you, so I wonder since it has been, you know, a long time since you kind of play around with this and then kind of started, like, Have you have you been using that prototype or any iteration that you had? Or have you been kinda avoiding or using other things while it's being done? That makes sense?

Adam Butler:

Yeah, no, no, it's been it's been the most used app on my phone pretty much since I started. It's it's just the app. Yes. The it's the app I use most and it always has.

Pavlos Vinieratos:

That's cool. Do you, I mean, I know it's pretty, when exactly was it released? It was it's less than a month, right?

Unknown:

I released it on the 22nd. Because it was a good date. Because it's 22/02/2022.

Pavlos Vinieratos:

Yeah, that's true. It's been what letter? Yeah, just a few weeks or a couple of weeks. Have you already gotten feedback or requests?

Adam Butler:

Yeah, I have. So real talk. Putting it up on the App Store is just, it's really not very rewarding. I it's a huge amount of work. I put this up on the App Store. It got like, it got featured by Apple a little bit like they put it in their, Sort of they have a little section of new apps. I can't remember what they call it new apps we love or like, like just a list of apps and it was in that list of apps. So that was nice. And because of that, I think Some people got a bit of exposure through that. And I was actually number one in news on the app store for a couple of days.

Pavlos Vinieratos:

Nice.

Adam Butler:

And I thought, well, this is pretty cool. The thing is that the figures take a while to come through on the App Store. Like, it takes a day or two before you actually see the numbers. But I was thinking, hey, cool. I'm number one in the news section on the App Store, this must be pretty good. And then when the figures finally came in, I realised that I had sold precisely 30 copies.

Pavlos Vinieratos:

Okay. I mean, for like, what 20 days, that's not bad.

Unknown:

So 30 copies, interestingly, so that's enough to be number one in section on the App Store. So that also was surprising to me that there's actually a lot less being downloaded than I thought. I mean, I so I charged for it. I decided to charge three euros. And I think that there's probably a huge difference between people paying for apps and people downloading free apps.

Pavlos Vinieratos:

Yeah, that's for sure.

Adam Butler:

But still Yeah, I was. I was just very surprised by the numbers. Yeah. And so to answer your original question, yeah, I got like, I got two reviews. I got like a five star review and a four star review. And I say, Hey, cool. This is nice, but they didn't actually write anything. And then I looked a couple of days later, and I had a one star review from someone. And, and he was like, it was there was like a typical one star angry review. downloaded it, I tried to use it. It couldn't find feeds on my normal work news website. So I'm going to delete it. I want my money back.

Pavlos Vinieratos:

Yeah.

Adam Butler:

Yeah. And so I replied to him in the comments. I said, Hey, look, really sorry to hear it. I like it. Get in touch with me. I'll happy to give you money. But I'm interested to know what news website it was that it couldn't protect feeds, because it not only detects an RSS feed on a website. I wrote this little extension.

Pavlos Vinieratos:

Yeah, yeah, no, for sure. And since you still have like, a low amount of users, I guess it's easy. Or you know, more possible, I guess, to get in touch with them. When you have like, a billion of them. Like it's not gonna be easy to say, Oh, which one didn't work? Right. Yeah. And then for our specifically, I guess, yeah, it should be the site that should support this. Yeah. That will be interesting. Yeah. I'll ask you next week or whatever.

Adam Butler:

No, no. So I've been in touch with him now. Like, we emailed a bit, that was nice, because it turns out he was really nice guy. He was very friendly. And he told me he like told me which websites weren't working. And I tried it out. And he's sort of half right. They kind of worked but they kind of don't. But we had a very nice interaction. But then in the end, he said, but I still want my money.

Unknown:

So I got, I got his paypal and i paypaled him 2.99 back. But I also, I also asked him if he'd reconsider his one star review and he removed it. So I guess like I bought off, I bought off the one star review for 2.99, which is a pretty good deal.

Pavlos Vinieratos:

Yeah, not a bad price, not a bad price. So that's kind of like a side question. But I've never done like refund stuff on the AppStore. Isn't Apple handling this? Like, do you have to? I mean, obviously, there's better ways, official ways, right? Or, or no?

Unknown:

Yeah, the official way is you just go to apple and say, I want my money back. And they generally give you your money back. I mean, I don't know if it always happens. I've the only experience I've had with it was when I tried to when I bought the latest series of succession on Apple TV, but then it turned out to be dubbed into German without the English version. So then I wrote to them and said, I want my money back. And they just immediately refunded. I think that they do pretty much always refund you if you ask. And I said, Look, you can get a refund from Apple, or I can give you the money if you want.

Pavlos Vinieratos:

Yeah, that's a definitely interesting story. And I guess kind of related to this. I have a question of like, what are your expectations of reams? I guess? So. I mean, in general, like, do you expect some amount of money or like some amount of people using it or anything else?

Unknown:

Yeah, that's a good question. Because it's really hard to say, I mean, you know, I, I have a job, but I'm very happy with my job. So I'm not expecting, you know, this is not, I'm not launching a startup or something. But at the same time, it would be nice to I mean, it'd be nice to have people using it. It'll be nice to kind of get feedback and talk to people who are using it. And actually, so what I've decided I'm going to, I decided to start selling it for free, or not selling it for free like giving it away for free. After all now, because I think that's the only way you can get any users on the App Store. Like if you look, if you look through the app store now, I don't know what proportionate, but it must be like 90% of apps are free. And then most of them have got in app purchases. Yeah. So I think that that's actually the only way that you can get people to use your app is to give it away. And so we're going to start doing that now, I think, to make it a bit more interesting. A few more users.

Pavlos Vinieratos:

And then are you already kind of thinking of possible in app purchases, maybe for the syncing or like other stuff? Or?

Adam Butler:

Yeah, so I actually I wrote a sync I wrote a whole sync infrastructure using Firebase. And I actually took it out again, because I decided I just didn't want to use Firebase, but I could imagine, like, building another sync infrastructure, and then making that maybe an in app purchase. I mean, that will be one thing. And then you know, there's, there's so many features that I'd love to add. But it's just a question of time in the end. And if all you get is 30 people buying it and a one star review, then it is gonna be hard to be motivated to keep adding new features. I mean, I would like to be able to add more features.

Pavlos Vinieratos:

Yeah, I guess, I think after like, was it Google Reader or whatever? I think every every other thing that appeared afterwards was either a syncing service that they charge you per month, or whatever, or an app that does the syncing, like locally, and then it's either free, or paid, with more features or whatever. Yeah. So yeah. Interesting. So you said you started with Cordova and then move to React Native. What was the most interesting or unexpected or difficult thing you had to do? Or like technology that you didn't work with? You know, anything that was like out of the ordinary for you? What was that?

Adam Butler:

I mean, I guess the there have been lots of things is, what's nice about having a side project like this is that you can just go off and try things out. And I mean, I guess like, I've got various back end services that I use. And I wanted to explore kind of serverless architectures doing that and learn a bit more about how to work with server functions. And I kind of tried out or looked around at various providers that could do that. And ended up on Vercel basically got the site and they renamed, they rebranded themselves as Vercel, and it's the people who make nextjs, and lots of other stuff. And they're actually a really nice provider. They do really good stuff with server functions, like if you're hosted with them everything as a server function. So I built a back end using server functions, which was quite nice. And then, I guess, probably the biggest thing is, I've got, I've mentioned a lot in the marketing checks, but I got a little bit of machine learning. And yeah, and doing that was interesting as well.

Pavlos Vinieratos:

What did you do with it?

Adam Butler:

It's actually is very simple. So the one of the important things about with reams, like I said, it's, I had this whole thing about making it interesting to read, wanting to make it look like flipping through a magazine. So a lot of the stories that you read, and reams, if they're, if they're like long and interesting, then I often use like a cover image, so that they'll just be a full screen image will be with a title. And that will, that's all that you will see. And then you have to scroll down to actually find the text. And the thing is that these images are very often landscape format, because they're very often created for the web. But obviously, a phone is portrait format. So on a phone, you just get a, you get a slice of the image, you don't get the whole image if you want it to be full screen. And that's often okay. But quite often the image will be a picture of a person. And if you only get like a small slice of the image, you quite often miss the person. And I tried to do various stuff like taking the slice out of the middle, or to the left or in the if there's a place it's usually in the middle or on the left. Long story short, I just I use I use a little very simple ML model to do face recognition. And I find the most prominent face on the image and then put that in the middle.

Pavlos Vinieratos:

Okay, is this with like Swift or JavaScript or with what's what's connecting this?

Adam Butler:

It's actually so there is a there are JavaScript libraries for there are JavaScript libraries for TensorFlow and someone's actually made, they provide a React Native library for TensorFlow. So it's not actually too hard to use. And then there are a number of a number of face detection models that you can just use. So I tried out a few face detection models, and got the one that is like smallest but most accurate. And, and I just use that with TensorFlow. And again, so actually, I originally built that with Firebase as well, because Firebase also offer something similar, but I just Firebase also makes your app huge. So, I took firebase out and then redid it with TensorFlow, which is a lot smaller.

Pavlos Vinieratos:

So the image kind of calculation, I guess, is happening on the device then, basically.

Adam Butler:

Yeah, exactly.

Pavlos Vinieratos:

Nice. That's cool. Yeah, very Apple style, like everything is on device. Nice. Absolutely. Yeah. Cool. I have a question that when I was using the app, I mean, the first time, I guess, when I noticed this bottom, bottom right, button that swaps between like a short kind of text, and long text, is that basically like the RSS, you know, like summary, or whatever, or is that something like smarter happening there?

Adam Butler:

So what you, what you often find with RSS feeds is that people only put a small part of their article into the RSS feed. So you don't normally get the whole article within an RSS feed. So what I'm what I'm actually doing there is, for each article story, I usually prefer to call and when I remember, for each story in the RSS feed, I take the URL, and then I decorate it. So I decorate it by getting going to the webpage and parsing the full text, I can parse the whole thing from the webpage and also extracting a cover image where possible that I can potentially use as a cover image if if like, the algorithm decides that it's a good image, and that this story should have an image. And I can use that, and some other stuff as well. And and that little button switches between the between what you get in the RSS feed and the full text of the story that I've parsed from the webpage.

Pavlos Vinieratos:

Gotcha. Okay. Was the image detection, easy? I mean, I'm asking because I know that some, like, you know, blogs provide these meta tags or whatever the call, you know, like for Instagram and like Twitter, or whatever, or do you just like, go to the HTML, find the biggest image? Or like, what's what's happening? Yeah,

Adam Butler:

yeah, I honestly, I was playing around with that for a long time. And then I found an open source projects called the mercury parser. And the mercury parser is a psrser that is basically designed to do this. And it kind of comes from a very long lineage of these parsers. I think, like the first one I ever came across is maybe like, 15 years ago, a project called readability. And I think that the people who did mercury are the same people who had that readability back in the day. And for a while they had it as a service. So you could just use it. And then at some point, they said, we gonna stopped doing this as a service that we get to open source the code. So I, I run it myself, like, I told you that the server side thing with the server functions, I have the mercury positive running as a sofa function as well.

Pavlos Vinieratos:

Nice. That's cool. And now that you said open source, remember, do I remember correctly that it is open source, the app or no?

Adam Butler:

I mean, it's open source in as much as the GitHub repo is public. Yeah. So Right. Okay. It is. It is open. Yeah. Okay, that's cool. Yeah, and one thing I wanted to pointed out is that I didn't know reams as a word before, R E A M S. And by googling I found that apparently it's 500, and then parentheses formerly 480 sheets of paper. So that made the name way more fun to me. Yeah, so I used, for years, it was called rizzle. Yeah, that was called rizzle in my mind it was just always rizzle and I did like I made splash screens, I did everything using this name rizzle. And I was getting to a point where I was set like I was almost ready to launch it. And then just by chance to have a look on the App Store, like I've been looking on the app store every now and then over the course of many years where it was in development. Because the name came very early, almost from the beginning, I decided it's called rizzle. And then I looked on the App Store, and suddenly someone had made an app called rizzle.

Pavlos Vinieratos:

Really? Was a similar thing, like RSS something or completely different?

Adam Butler:

Totally different. It was like a social video thing. Like, I think it's a tiktok rip-off or something. But they've called it rizzle, exactly the same way that I've been spelling it. So then I was like, Oh, no what do I do? I had to find another name. And so yeah, it took a while trying to find a name. And then yeah, like a ream. A ream of paper is like, I didn't know the thing about how it used to be 480.

Pavlos Vinieratos:

Definitely a good name, good sounding name as well. Alright, I have my last question. And this is, if I forgot to ask you anything, or if you have any answer that I didn't ask, is there anything that I forgot? Or that you would like to say?

Adam Butler:

I mean, okay, like, I guess I could just speak in favour of side projects generally. It's, it's, it's great having a side project, it's just, it's just an excuse to try stuff out and learn new stuff. But it's, it's really nice to make something that. I mean, like I said, it's that it's been my most used app on my phone for the last four years or something. And it's just, it is just the thing that I want, it's the kind of thing that I always wanted. I mean, everybody should do it, I'm sure everybody has some little thing that doesn't exist yet, or, or something that they use, but that just isn't quite right. And take your time, try and make it and there's not necessarily any hurry. And it's nice to have like just a thing that you can do. If you've got a spare 30 minutes, I just go and do some thing or other on reams, like if you try and do it without too much pressure, and then give it to us as a long term thing. It's nice, you know, and then after four or five years, you have something on the App Store. And that's kind of cool. It's a nice experience. So, yeah, that's what I would say, I recommend every go, everybody should do it. Yeah,

Pavlos Vinieratos:

I totally agree. I feel like as developers, we are kind of like, you know, maybe privileged position that we can make something for, you know, our computers or phones a little bit more easily than, than people that don't know how to code. But yeah, I always, you know, have this as a way to motivate people to learn to code, right? Like, if you have something that doesn't work on your computer, like maybe learn some code, and then you can make a little improvement, you know, and that's, that's enough to motivate you for sure.

Adam Butler:

Yeah, absolutely. I mean, it's kind of, I don't know, if it's like unique, you know, maybe when we were blacksmiths, we could have made our own swords or something. But I mean, it's kind of it's amazing that we're in a situation now where he can, you can learn to code and then you can make something and put it on your phone and make it available to everybody else in the world that has the same phone as you and that's just that's kind of a cool thing. So I think it's good to take advantage.

Pavlos Vinieratos:

Yeah, definitely. Cool. Thank you so much for for joining me today. That was really informative and really nice.

Adam Butler:

Yeah, thank you Pavlos, it's been fun.

Pavlos Vinieratos:

Talk to you later. Yep, talk to you later.

Steve Hicks:

Thanks for listening. You can follow us on Twitter at Artsy open source. Keep up with our blog@artsy.github.io This episode was mixed and edited by Alex Higgins. And thank you Eve Essex for our theme music. You can find her on all major streaming platforms. Until next time, this is Artsy Engineering Radio