Artsy Engineering Radio

Whatchu working on (on the side): Forty by Jon Allured

November 16, 2022 Artsy Engineering
Whatchu working on (on the side): Forty by Jon Allured
Artsy Engineering Radio
More Info
Artsy Engineering Radio
Whatchu working on (on the side): Forty by Jon Allured
Nov 16, 2022
Artsy Engineering

Jon Allured talks to Pavlos Vinieratos about Jon's worktime tracking app. It's Forty, and it's about helping you hit that 40 hours a week, while making sure you don't do over! Work/life balance is king.
We discuss how the idea came about, how the development went, how Jon uses it, and a bunch more.
Join us for the first episode of Whatchu working on (on the side), on Artsy Engineering Radio. More to come!

Tiny edit: Side-projects don't have to make money. Side-hustles are usually connected to making money out of them. Side-projects can be anything you want.

Links:
- Forty: https://www.fortyeven.com
- pear tool: https://github.com/jonallured/pear
- Artsy's pear-data: https://github.com/artsy/pear-data
- Jon's podcast: https://puddingtime.buzzsprout.com
- Pavlos' pear-with-fzf tweak: https://github.com/pvinis/chez/blob/e61286d8dd63d19befab1ffa8c219dfc8928b51d/dot_zshrc#L69-L77

Show Notes Transcript

Jon Allured talks to Pavlos Vinieratos about Jon's worktime tracking app. It's Forty, and it's about helping you hit that 40 hours a week, while making sure you don't do over! Work/life balance is king.
We discuss how the idea came about, how the development went, how Jon uses it, and a bunch more.
Join us for the first episode of Whatchu working on (on the side), on Artsy Engineering Radio. More to come!

Tiny edit: Side-projects don't have to make money. Side-hustles are usually connected to making money out of them. Side-projects can be anything you want.

Links:
- Forty: https://www.fortyeven.com
- pear tool: https://github.com/jonallured/pear
- Artsy's pear-data: https://github.com/artsy/pear-data
- Jon's podcast: https://puddingtime.buzzsprout.com
- Pavlos' pear-with-fzf tweak: https://github.com/pvinis/chez/blob/e61286d8dd63d19befab1ffa8c219dfc8928b51d/dot_zshrc#L69-L77

Pavlos Vinieratos:

Hello, hello, my name is Pavlos Vinieratos. Welcome to the Artsy Engineering Podcast. Today I'm here with John Allured for another episode of what you're working on on the sides. Hello, John. Hey, hey,

Jon Allured:

How's it going?

Pavlos Vinieratos:

Good. It's good. Nice to have you over here.

Jon Allured:

Nice to be here.

Pavlos Vinieratos:

Again, my name is Pavlos. I'm a software engineer here at Artsy for two and a bit years, mostly working on the mobile app, currently in the mobile platform team, which is kind of the infrastructure part of the mobile apps. How about you?

Jon Allured:

Yeah, my name is Jon. I'm an engineer at Artsy. I'm currently a tech lead on the grow team. And the grow team is a top of funnel team. So we're concerned about things like signup, onboarding, but even get into things like SEO and like performance as it relates to like Google core web vitals, we kind of go all over the place, but mostly focused on the web, as opposed to yourself who's mostly focused on the app.

Pavlos Vinieratos:

Nice. All right, yeah. And then this episode is one of the series that are one of the episodes of the series that we talk about side projects, with people, with Artsy people. And you have one or more we'll talk about these ones. The main one I would like to talk about is called Forty Even I guess, or maybe it's just Forty. Do you want to give us a quick intro of it?

Jon Allured:

Yeah, definitely. So I, so I, I call it Forty. Just because like, okay, that's what I call it. But the URL I got was fortyeven.com. So I'll take a step back and say like, if this is just like a time tracking app, so just like a way to keep track of how many hours you work during a work week, I have worked for a number of companies that do that have pretty lenient, and, you know, kind of do what you do, as long as you get your work done. We don't really care, like how much PTO you take, or which hours you work, if you want to work 10 hours one day and make up for you know, make up for the next day or like, whatever, even a doctor appointment, whatever. But I found pretty quickly that like, this is bad for me, because I very, like, if left to my own devices, I would probably work far more hours than I should. And so I just wanted to be able to write like when I started working, when I stopped working, and like have a little thing that would track my my hours through the week. And then I started like adding things about like checking how much PTO I've taken, paid time off. And actually but it actually started as like an Excel spreadsheet like way like maybe in 2003, or something like that I had this idea because again, I had like, flex time, whatever. And I wanted to make sure I wasn't giving the company more time than they should get. And but also wants to make sure I was like doing enough work, like hitting that 40 hours. So anyway, yeah, cut to 2016. And I'm like, I want to make this be a Rails app. So that's kind of where this all sort of came to be an app.

Pavlos Vinieratos:

Okay, that makes sense. Totally. My first question was, you know, it says 40 hours a week is plenty on the website, like, you know, if you have problems with this basically. Yeah, totally with you. I have tried using your app. I mean, I really liked it. But it's hard for for me specifically to like, remember to go there, you know, and like,

Jon Allured:

ya know, we're not alone. friend of the show, Steve Hicks, also tried Forty. And when I showed him and kind of talking about it, he was like, this looks like homework, Jon, like, why would I Why? Why would I want to do this? Because I think that there's like maybe kind of different folks in the world. And there's people like myself that I get a kick out of like logging something, at this point I have from 2016 From like November 2016. Through like today, I've every week, how many hours I worked when I started when I started how much PTO I've taken. And so for some reason that just like, makes me happy. It's like, cool to me. Okay, I can definitely also understand how it would seem like work to have to do this. To have to, you know, remember to go to an app every day. Yeah. When you start when you stop whatever.

Pavlos Vinieratos:

So, is it your first like, thought of the day and the last one of the work day?

Jon Allured:

Yeah, like, like, it's just ingrained in my schedule. Like, I don't even think about it. I just go there and I type in the numbers and off I go. Okay. Okay. But I mean, I say that but like, of course there are days that I forget. You know what I mean? A lot of times, like another habit I have is all like when I first started my day, I'll go to slack. I'll open up slack and start cruising around. And I'll usually say like, a hi like a hi hi, everybody. Good morning. How's it going? Whatever. And they'll usually say like, Okay, I'm done working today see ya. So like, I can kind of usually reconstruct my hours if I need to, like, just like go into Slack and seeing what I posted.

Pavlos Vinieratos:

Yeah, that's definitely a good way to do this. Because, I mean, some days I do this, sometimes they don't show it's a good way to have a log of this. I mean, I was thinking about, you know, knowing you would expect you to have like, a script that does this, you know, like, call some API on Forty, or whatever.

Jon Allured:

The thing is, I like it. Like, I like going to the app and like using it like, yes, like, it gives me a thrill to like, use my software you know.

Pavlos Vinieratos:

So just for to describe a little bit. So the the main page of the app basically has, you know, seven, seven columns?

Jon Allured:

Five.

Pavlos Vinieratos:

Okay. Make sense. Monday to Friday. And then he has four entry fields for each of those days. One is your start time. One is your end time. One is the the amount of hours you took as PTO, as you said, like paid time off. And then there's the adjustment field, which I guess is kind of like, for breaks, or whatever else. Right? Yeah. Okay, that makes sense. And then it kind of adds this together and gives you like, a grand total of your week as you go. Right?

Jon Allured:

Right. So like every day, you know, you can look in your column and see like, hey, Monday, I worked eight hours, Tuesday work seven hours and 45 minutes, and then you can see that total. So I'm on the upper left hand corner. For me right now I've got 23 hours and 45 minutes going. And so I know that I'm like 15 behind. And so then that's a very easy way for me to know, hey, I gotta pick up 15 hours somewhere, eh 15 minutes, if I can.

Pavlos Vinieratos:

Okay. And then I just could be, I guess my last question to you as a user of this. Because then it would be as a developer of this, but, you know,

Jon Allured:

I got things to talk about

Pavlos Vinieratos:

Yeah, I'm sure. To you, you often. Do you find yourself sometimes being over 40 or under 40? And then, like, fixing it, you know, with the week after, or whatever? Or is this kind of like 40, like, whatever. However, we have to do

Jon Allured:

yeah, like, if I worked 45 hours, one week, maybe this, you know, I'll work 35 hours, the next week, I I'm not a fan of that, I try to really do stick to 40 hours a week, if I'm under a week, I'll usually just like fill with PTO. And then the next week, I'm not trying to like make it up. I'm just trying to hit 40. And I found that to be like, good for myself, personally, you know, I've got a wife and kids. So I've got some built in like constraints on my time where it's actually really hard for me at this point in my life to work more than 40 hours. There were times in my life where it was very easy for me to work more than 40 hours. But anyway, so yeah, yeah. So that's kind of where I come down on that.

Pavlos Vinieratos:

Okay, that's cool. Yeah.

Jon Allured:

Sorry one more thing, I'll point out on the interface. So there's this big number, the grand total in the upper left hand corner, there's a little number next to it. And that can be a positive number or a negative number. And that's I'm calling pace. I don't know what else to call it. It's like, if you know, if the goal is eight hours a day, and you know, it's Thursday, today, when we're recording, the pace is going to take into account eight times four, and like, show your pace, like reflect your pace based on that. And so that's another handy way to kind of know how close or how far off you are on eight hours,

Pavlos Vinieratos:

right? I definitely remember when I was trying to use this, that it was like the interface had anything or everything I need, right, like everything was there, everything was clear and helpful. Yeah, it was my personal failure to like remember, so you know, I had to like put the reminder, and I was like, Okay, this is to become easier for me. So

Jon Allured:

Pavlos, one more thing to talk about is a very inhumane way, you have to enter these things. So for those maybe outside the United States, maybe you're used to 24 hour clock, but just because of the way that it was easiest for me to develop this out has to be 24 hours. So like you're in time might be nine colon 00. And you're out if you're out at five, let's say would have to then be 17 colon 00. So that I can do 17 Minus nine and hit and hit eight. I have a very long running branch to make this like AM/PM aware. And I just like haven't done it because well, we can talk about reasons. But anyway, just sort of just noting that that like one of the oddities that people always ask me about the first time through is like, well, what am I supposed to enter here? Because that's a little weird.

Pavlos Vinieratos:

Yeah, I mean, it's definitely the place where there doesn't, but I do remember the first time I tried to use it, I just typed nine, you know, and when I left I typed 17, and I was like that makes sense in my brain, and I didn't do anything so, Yeah, yeah, that makes sense. I mean, you know, formatting and who knows. But I mean, if it works for you, and you try to make it easy for the user, right, so like, and you're the main user right now, I guess, like you developed it for you, right. And I, while I'm playing right now, I totally made it so that I start at 9 o'clock, and then I end at 86 o'clock, whatever that means. So I already did almost double of my week, I guess.

Jon Allured:

Boom. You're ahead of schedule.

Pavlos Vinieratos:

All right. That's cool. So I mean, you know, we talked about the users, maybe that's a good segue to the next. Was this, your goal? Was it mostly to make something for you? Or was it to make some like money on the side? Was it to get some? What was your initial goal? I guess?

Jon Allured:

It's a great question. So I mean, this is really for me. And like, if I'm really honest with myself, it's for me. But I had some ambition of, maybe if I polish this up a little bit and do a little more, to make it friendly to other folks, maybe they will use it to, I'm just like, have discovered, like, I'm not good at marketing, I'm not good at business. Like I don't know how to tell people about this thing. It's just not I literally have zero users, right. And like, I integrated with stripe, and so you can theoretically pay me for this thing. But like, mostly, I just like learned a lot through that process of setting all that stuff up. And so I consider that a win in and of itself that like, I had to figure out how to integrate with stripe, I had to like make a Stripe account I had like, and maybe I've done some of this stuff for like client work, but I've never really like done it for myself. And like, I got to kind of make my own choices about how it should work and what integration points I would have, etc. So that was fun. But I mean, really, there's there's no actual users besides me.

Pavlos Vinieratos:

Okay. Okay. So that answers my question of is the mobile app coming soon?

Jon Allured:

I even have the repo Right. Like I've even done some of the work. But, you know, mostly what I do is just go to the website in the morning, go to the website in the afternoon, or, you know, yeah, or on quittin time. And that's about it.

Pavlos Vinieratos:

So you talked about stripe, and how you learned how to do this, you know, besides the client work. What else did you learn from this? Like, was there something that was unexpected, you know, something that you got, like, I'd never thought I wouldn't need this thing or, you know?

Jon Allured:

yeah, totally, I can talk about a few things. I'll start with, like I said, I was able to find fortyeven.com. That's the URL that I registered, I have long thought,

Pavlos Vinieratos:

That's cool. Was there anything that felt it's a cool way to organize a project to have like, www.domain.com Be like a static site, and then have the like, have the app be under app.domain.com. And so that's it was fortyeve. so www.fortyeven.com goes to like a digital ocean. Apache, like, middleman is the Ruby library. But there's a lot of there's a lot of these like static site generators. Anyway. So that's like, literally, HTML, CSS and JavaScript, put on a server and served with Apache. And it's just extremely fast and simple and easy. My thought process is like, if it ever did get popular, I wouldn't have to even think about, like having performance problems, because it's just like the fastest web server around serving some static stuff. Then when you click like, sign in, or sign up or whatever, then it flips over to the app subdomain. And then that's being served through Heroku. And that's like the Rails application. So I have a repo for the static site, I have a repo for the Rails app. One thing I did that I thought was clever that I think now is probably over engineering, is I made a repo called forty time management, that is a Typescript and Ruby project that publishes to NPM and Ruby gems. And it is essentially a wrapper class that lets me do some of this date and time math, so that I can unit test those two, like, I want to be able to do that, that like some of these math operations, both on the client and on the server. And I wanted them to agree. And so I made a repo with these two products that got published, so that I could like demonstrate to myself that both sides of the equation are calculating the same way, whatever. I thought maybe I would do like a swift version, if I ever did the iOS app. And then it'd be kind of cool because it'd be like three different publishing. Like, this is totally, like, over engineered, I should have just kept this. I never, you know, like, it's, it's a little silly, but I learned a lot like I learned how to set up a project with like, multiple languages, how to like get CI to publish to NPM and Ruby gems, and like, you know, set all the infrastructure up. And so that was satisfying. Like, I thought that was cool. I know a lot more about that. Now. hard or, you know, or something that you started and then you just gave up on or something We're about in maybe a feature or maybe a technology, anything?

Jon Allured:

Yeah, let's take a step back and talk about the tech stack here. So it's a Rails application. At the time, I was new to react, you know, I joined Artsy in 2017, I had done some react but not a ton. And so I wrote the front end and react. And so to do that, with Rails, like the coolest way to do it, at the time was using webpacker stuff. They've since kind of like changed the rails idioms around that. But regardless, that's how it's set up today. Like if you go to 40 seven.com, you're like in Hamel, and CSS and JavaScript land, when you sign in and get to the main screen, like you were describing with the columns for the days, that's all pretty much gonna be react. And so what happens is there's like an initial payload that gets written to the DOM. And then there's like a, like a rehydration step, when like, the DOM is ready, then react starts to boot, it reads that initial payload, and starts, you know, displaying things. And then as you interact with the page, all that's going through react, I didn't I didn't ever do anything with like, relay or any other network layer. So in terms of like, persisting anything, it's always gonna be like REST calls, I wrote like, a little wrapper around window.fetch, just to kind of like, do that stuff. Because I think relay is a lot. Yeah, so that's it. And so that led me to the relay stripe, wrapper or whatever. So that's how I'm doing. So that's how I'm integrating with stripe. I just figured, why not just keep going down that relay route.

Pavlos Vinieratos:

Right. Yeah, that makes sense. And then what do you use for storage for this whole thing?

Jon Allured:

Oh, Postgres. yeah. The database. Yep. The way the interface works is it's like fortyeven.com, or app.fourtyeven.com/work weeks, slash, and then it's like a year hyphen, a number. So there's 52 weeks in a year. And so that number at the end is just like which week number you're looking at. And then the database I have that kind of correspond to the different days. And I'm just storing the ins and outs. PTS is essentially like an adjacent v column. It's nothing fancy. It's just being stored that way. And I can store it and rehydrate it pretty quickly that way.

Pavlos Vinieratos:

Yeah. Okay, cool. I check the GitHub repo. And so that the last commit was September on forty-web, or am I looking at the wrong thing?

Jon Allured:

Yes. Forty-web is the right one, September 8. Wow.

Pavlos Vinieratos:

So does that mean that you're still adding stuff on it? Would you consider it finished?

Jon Allured:

It's a good question. So there is a thing on GitHub, that's like your GitHub contribution graph that sort of shows you like, which days of the week are you most active on GitHub? And so I was kind of inspired by that, like very visual, like cool looking visualization, I thought it'd be cool to see like, which days, are you working the most? which days do you tend to like maybe take off earlier, whatever, maybe like, maybe you would see that like Fridays, you work less like whatever. So anyway, I was thinking about some kind of visualization to kind of dig into the data. So that was one thought I had, again, because it's just for me, and I don't have much outside interest. It's hard to like, get excited about working on it. Because it just works. Like it's just really a very, quote unquote, done project in my mind.

Pavlos Vinieratos:

Okay, so we talked about all the, like, what you use to build it. And you know, what you learned what you had an easy time with, a hard time with and all that. right now, do you have, I mean, you said it's kind of done, and it works at this point. So would you say that you have a specific goal, let's say for this app from now on? Or is it kind of like, as long as it's good for you, like, that's all you need? I do you have a challenge, and my challenge is Heroku has changed their minds about how they're going to price things? Yeah. And specifically, I use free Postgres and free Redis, I think. And so I have to decide, like, I've got four different projects on Heroku. And they're all in the same zone of like, really just about for me, and very little traffic. And I might like getting away with some paid dynos, in some cases, free dynos and other cases, but definitely using like, free Postgres everywhere. I should probably, like collapse these all down into one Rails application that like serves all these different needs, but like, you know, they are side projects, and so it's not always easy to find the time to make that happen. Right. I'm gonna have to do something because they're going to make that switch here in a few weeks. Yeah. Okay, that makes sense. Maybe we can. And this is totally up to you. We can talk about some of the other things that I know you have done, like as kind of side projects, like I wouldn't maybe call them side projects if they're not making an income but you know..

Jon Allured:

I mean, this is not making any income!

Pavlos Vinieratos:

I mean, you know, it's connected to stripe, so like, technically you can pay it. Yeah. So, you know, while I was looking around besides fortyeven, I totally remember using the script you have called pear, right for pairing, I found the podcast you have. And I found the word-rot Game, which I remember, like seems some visual stuff of it is any of those three or all of them something that you would like to talk about?,

Jon Allured:

I'm an open book. So pear p, e, a, r, like the fruit is an oclif. oaclif is a framework for command line tools that came out of Heroku. And I thought it was really cool. It's, it's all like TypeScript based. And so because Artsy loves TypeScript so much, I thought it'd be good for me to like, understand how some of the, like tooling behind that stuff works. Anyway, so I made this thing called pear. And what it does is help you manage your like co authored by bit in your, in your Git commits. This is a not new, but like, not well known maybe feature of GitHub, where if you are pair programming with someone, and you want to give them credit, there's a there's like a way you can sign the commit that will cause their, their their GitHub like account to be tied to that commit as well. So in like the GitHub UI, you would see like your face and their face, as like authors, nominate scales, you can do like three or more authors, and it's kind of neat. Anyway, so this tool pair, the idea is you can like configure it with, you know, the people you pay with most often. Basically, you need like a GitHub username and email address and like, their name, and then it'll, and then you can like, add to your list of known hair buddies. And then you can say, hey, I'm currently pairing with Pavlos, whoever else. And then when you go to commit, you can configure it so that it'll just automatically add you to the author's when I worked at hash rocket, we pay program like all day, every day. And so we had tools like this, and I was used to using them. And so I wanted to make something again, just to make it easier. So I liked that tool, I use that tool. One thing that I wish I had followed up on there is like making it easy to populate your list of known authors. So for example, you should be able to like, have a pair for all through GitHub and like find all your co workers and like set that up for you right now. It's kind of a manual process, right. But most of that one just works, too. Yeah,

Pavlos Vinieratos:

it's definitely a great tool. And I mean, it definitely feels nice and fits with the Artsy culture to like, give credit to whoever you're pairing with, right? One more thing, I also like wish that I could better support tab completion, and then also updating your shell prompt. So like, for myself, I'm on Z shell, I've been on Z shell for a long time, I have like a way to autocomplete the GitHub user names, that's just like very manual, that oclif framework out of Heroku, like, they have a little bit of documentation around how to do autocomplete, or you know, to have completion, but it's not great. And I just could never get like, get it to work the way I wanted it to. So I ended up just like rolling it myself. And then in terms of prompts, so I thought it'd be cool to like, literally show the pair fruit emoji on my, on my terminal, prompt when pairing with someone and then remove it when I'm stopping with someone. So like a visual reminder that I'm currently like a status. Yeah, that's good.

Jon Allured:

But again, I had a hard time getting that to work with oclif. But I've just like, made it work on my own. And, you know, so. So that's like, a common theme with some of these sites. If it works for me, I tend to, like get bored and move

Pavlos Vinieratos:

Yeah, I mean, that makes sense. You know, if on. you start for a need that you have so, it scratches it and solves it like why not? Right? I mean, I'm sure I'm sure you've seen, like, I've shown this in knowledge sharing, that I basically took your pair command and put fzf like the fuzzy finder thingy. in front of it, because that was, you know, I could never remember, everyone's like, user names, or like some people, you know, when I think of their face, the user name comes and for some the name comes, like I just wanted to be able to fuzzy find all of the things. Yeah. And that totally works great. And then we also have now under the Artsy org, I guess, on GitHub, the pear-data repo, right, which is, like people can go and add their data so that everyone else can pull it if they want. So, but you know, it's not like a global enough thing, because not everyone uses this tool. Not everyone adds this thing. So like, you know, it's a little bit all over the place but for the people that want it it's there, which is great. Yeah. Okay, that's cool.

Jon Allured:

The next project we might cover, I'm actually gonna go to rubyconferences.org. So this was a side project I worked on. In 2014. I was thinking about how like, at work, I had a budget where I could go to conferences. And I'd always be like, oh, yeah, I forgot about my budget, oh, what Ruby conferences are coming up, because I was doing mostly Ruby at the time. And, and so it was, like, sometimes difficult to find all of the upcoming events in the Ruby community. I mean, COVID times have kind of altered the landscape of conferences. But at the time, like, I was really interested in trying to go to like a conference or two every year, I still love the energy of a tech conference. My life situation, and the world as it is, I don't know that I'll go to conference anytime soon. But regardless, I made this website, I made open source, I made it very easy for folks to contribute. And so what it is just like a list of Ruby conferences, it's just like the ones that are coming up. In some years, I had, like, you know, 50 plus entries in the year just because the ecosystem was thriving. Um, there were tons of even like, little like, local conferences, this one in Vegas, this one in you know, I think one of like, Jersey popped up anyway. So it was like, pretty cool. And interesting. So this is another middleman app that's going to spin out HTML, CSS, and JavaScript, go to an Apache server and just be super fast, super easy. And so the way folks contribute is like open a pull request against the repo. And there's like a Yamo file that powers the thing, right? And so you just go to that Yamo file, you enter your events, information. There's even like a CI step that checks to make sure you get the yaml correctly or whatever, there's no typos. There's the key names are correct, whatever. And then I just merge it. And that causes a redeploy, like a rebuilding of the static site, deploys out and

Pavlos Vinieratos:

off it goes. Nice. And so it goes all the way back to 2014. First entry. And then the last one is 2023. That's cool.

Jon Allured:

Yeah. And again, like no more ambition than that, right? Like, it's just a static site of Ruby conferences. It's a thing I do, because I thought that it would be cool and helpful to people. And I've had a ton of contributions from folks over the years. And that's kind of cool, too.

Pavlos Vinieratos:

Yeah. And I mean, it's a totally a tool that does one thing great. Like, it's, it's there, and everyone can fix it and help and yeah, that's great. Would you like to talk about the other two? Or?

Jon Allured:

Yeah, so pudding time is, is a very dumb podcast, I deal with a friend of mine, Josh, we used to work together at hash rocket, you know, I mean, I really, it's, it's hard to recommend anyone listen, if you are interested in dev banter, you could certainly give it a shot. Yeah. What was the last one?

Pavlos Vinieratos:

The last one was the Word Rot? It's hard to say!

Jon Allured:

Yes. So I have forever wanted to make an iOS game. And my, like, I remember when they announced Swift was it like, was it like 2014 2015. Something like that. I was like, Oh, my God, this is my chance, I'm going to become an iOS engineer. I can't understand Objective C, but I can totally read this Swift code. Anyway. So the first sort of like pet project I did to learn Swift to learn the iOS ecosystem was this word game. And it's one of those word like pile games. So you have like a board at the top half of your screen, the bottom half of your screen is just like a bunch of letters like letter tiles, and you can tap on those tiles to make a word. The reason is called Word Rot is because every time you make a word and play it, then like, the tiles, like get dimmer, the ones you didn't use, and so you have to like, like the like the game of it is you have to, like keep using all of the different letters, or else they're gonna like run away, and you'll have fewer letters to make, when I'm still like, again, is that I've been working on it since 2014. And it's not even like a real thing yet. I sort of like get passionate about it every once in a while I work on it, and then I fizzle out and I get distracted. Again, I've learned a ton in the most recent iteration, because I've built it a bunch of times the most recent iteration is using Swift UI. So that was like, wow, I learned a ton about how that works, but how much better it is, and some of the other ways I've built apps using iOS tools.

Pavlos Vinieratos:

Yeah, that was my my first question. If you've used swift UI, at least, you know, in the latest

Jon Allured:

I did. And, and so that caused me to learn all iterations. kinds of things about how Apple sort of like sees people making apps using their tools these days. A fun thing that I got to sort of figure out there was persistence, and like, what do I do about going to the background or like, you want to resume a game, whatever. So I ended up finding sqlite, as like a pretty good way to do this. So my only dependency in that project is a pretty light wrapper around sqlite,. Yeah, because you can actually pretty easily read the source code of this. What's called packages Swift package manager. when I read it, it's like doing some pretty crazy C stuff that I didn't quite follow with like debouncing. I don't know, like, it was just like, a little over my head. And so like, you know what I wanted? I mean, I want it to be dependency free on the project. But I was like this one, I think I'm gonna pull it out. And I'm glad I did. But yeah, so it's pretty simple, straightforward. stuff, it just like, makes a game for each time you start a new game. And then it has like, the way of keeping track of like, what words you've played. Um, so you can't relive the same word again. And again, this is all just like in a database. And so I can just like make SQL statements to, you know, fetch like, Is your word valid, like I have a dictionary, table in the database. And then I have words, and I have letters, and I can kind of like, figure out where you are, maintain state that way. And that's been fun to try to, like, figure out how to get some of those database ideas to meld with Swift UI ideas and around like, observer patterns, and like, when to rerender?

Pavlos Vinieratos:

Yes, swift and swift UI have their own way of, you know, or best way to do state. And I mean, sqlite, is definitely a thing that has been even from Objective C times, like, the default, easy thing to do state. That totally makes sense. And just a quick question, is the one that you used? Are you writing SQL for this? Or are you writing like an ORM? or whatever it's called, like, Swift-looking code that translate?

Jon Allured:

That was, that was a choice I had to make? Do I want to have like the swift and like the Swift quote, unquote, like type safety? Or do I want to just be able to like write raw SQL strings. And I'm the kind of person that likes to write raw SQL strings. And those type safety wasn't that much of an interest to me. And so I import that package. But I mostly just use the one like the one API gives you where it's like, execute a rent like a random SQL statement, and then it'll try to do some typing around the results. And it can get that stuff wrong. So you know, there's a little bit of like, massaging you have to do with the result sometimes.

Pavlos Vinieratos:

okay. Yeah, I'm asking because a friend of mine, the the opposite, basically, he had the same choice. And he decided, like, Let's go full swift. And he definitely had some issues with some of the, like, more interesting queries that, but I mean, yeah, trade offs, I guess, right?

Jon Allured:

That's exactly right. trade offs. And because I'm just like, I just happen to be very comfortable with with SQL. I just didn't want the abstraction. I didn't need the type safety. I felt comfortable doing that. And so that's the direction I went. And like, it's just for me, you know, so it's like, I don't have to think about like, what's best for a team? I can just think about what's best. Right?

Pavlos Vinieratos:

Yeah. Yeah, that makes sense. Cool. I think we have gone through all of my, my questions, and anything that came up randomly. Is there anything that I forgot to ask or that you would like to say?

Jon Allured:

Yeah, I mean, maybe we can just talk a little bit about like, my attitude about side projects. And like, I'm like that I don't beat myself up about them not working.

Pavlos Vinieratos:

Very healthy.

Jon Allured:

I hope that other people don't feel pressure like, so I think I made like a side projects channel in Slack. Artsy slack about this. So we could kind of like some of us that do have side projects kind of commiserate. Yeah. Another engineer, director, actually, on our on our team, Kathy, she's had like a cookie, like a cookie like, like a recipe organizer app in the App Store for a long time. And it's like, pretty high on the list of popular recipe managers. But anyway, so like, I'm inspired by her. I think that that's so cool. She has done a great job keeping that app up to date and whatever. But like, I don't I try not to judge myself against that, like, yes, forty has no users. I've never made a dime on this thing. But like, I have gotten a lot of joy out of it. I do use these things. And I have, like learned, I've been able to like explore technologies I didn't understand, you know, improve my understanding of like, the end to end, like, Okay, you have to make all of the things of a product, including like, a little bit of marketing, like whatever. And I found that like, I don't love it, and that's okay, too. So I would just like to say that I hope folks aren't too hard on themselves about the side project.

Pavlos Vinieratos:

No, that totally makes sense. And we should say that And I totally feel the same way even though I am like one step even further behind that, because I, you know, if you go to my GitHub repo have like, I don't know, 300 repos, or whatever, all of them could have been a side project or whatever. And most of them don't even get to the point of like, forty-even and like, sure, you know, Ruby conferences or whatever, it's just like, me trying out stuff, you know, and it's, it's fine. As long as it isn't, then when it's not. And when I'm not learning anything, and when I need to do, you know, marketing, as you say, whatever, like, that's where I'm like, I don't want this. Like, who cares.

Jon Allured:

I've lost interest.

Pavlos Vinieratos:

Yeah, exactly. Exactly. And I do have to say that I like the name of your org is "very nice code", right? It's not "very nice management or marketing".

Jon Allured:

Yeah, I actually made like, a business. Like, I went through the motions of like, contacting my state, fill out some paperwork. And like, made a company, again, because I want to like, literally have to go through all of the steps of making a product. Like now I've done that, and, you know, found that I don't I don't like it that much.

Pavlos Vinieratos:

But I mean, you have to try it. Yeah. That's cool. That's great. Nice. Thank you so much. Thank you so much for talking through all of this stuff. And being a great guest over here.

Jon Allured:

Awesome. loved walking through this. Thanks for allowing me to, to introspect myself a little bit and talk to

Pavlos Vinieratos:

Yeah. See you soon. Thank you. Thank you. That you later. was another great chat with Jon. Thank you so much for listening. Follow us on Twitter at@ArtsyOpenSource. Let us know Do you have any side projects finished, ongoing or abandoned? You have any questions that you'd like answered from our next guests. Thank you to Jesse for editing. See you soon.