50: Runestone - Simon Støvring

Transcript

Autogenerated by MacWhisper

00:00:00.000 --> 00:00:02.600

[MUSIC PLAYING]

00:00:02.600 --> 00:00:03.640

Welcome to Launched.

00:00:03.640 --> 00:00:04.600

I'm Charlie Chapman.

00:00:04.600 --> 00:00:06.100

And today, I'm excited to bring you

00:00:06.100 --> 00:00:09.080

the prolific developer behind the text editor RuneStone,

00:00:09.080 --> 00:00:10.200

Simon Sterling.

00:00:10.200 --> 00:00:13.560

[MUSIC PLAYING]

00:00:13.560 --> 00:00:26.520

Simon, welcome to the show.

00:00:26.520 --> 00:00:27.080

Hi.

00:00:27.080 --> 00:00:28.560

Thanks for having me.

00:00:28.560 --> 00:00:31.080

been looking forward to chatting with you today.

00:00:31.080 --> 00:00:34.840

Yeah, I'm, I'm, we've actually been, I feel like we've been planning this for a while.

00:00:34.840 --> 00:00:42.280

I think we, RuneStone came out earlier this year, and we were starting to plan this episode.

00:00:42.280 --> 00:00:45.540

And then summer, you know, came barreling down.

00:00:45.540 --> 00:00:50.240

And for me, summer is a kind of like, everything pauses because all the family's home.

00:00:50.240 --> 00:00:52.100

And so I usually pause the show.

00:00:52.100 --> 00:00:54.400

And so this one ended up getting pushed.

00:00:54.400 --> 00:00:57.600

But it's kind of nice, because there's a little more time for RuneStone to kind of be out

00:00:57.600 --> 00:00:59.900

in the world and it ended up being,

00:00:59.900 --> 00:01:00.740

- Yeah.

00:01:00.740 --> 00:01:02.580

- You're on kind of a really special episode

00:01:02.580 --> 00:01:04.400

because you're probably not aware of this

00:01:04.400 --> 00:01:05.640

'cause of the way I record.

00:01:05.640 --> 00:01:07.900

This will be episode number 50.

00:01:07.900 --> 00:01:10.700

So I've actually made it to 50 episodes,

00:01:10.700 --> 00:01:13.460

which it's taken me longer than I feel like most podcasts do

00:01:13.460 --> 00:01:16.160

but that probably fits me pretty well.

00:01:16.160 --> 00:01:17.780

But I don't know that I would have expected

00:01:17.780 --> 00:01:19.000

I would have made it this far.

00:01:19.000 --> 00:01:21.060

So it feels kind of cool.

00:01:21.060 --> 00:01:24.700

- Yeah, I mean, well, congratulations on your 50th episode.

00:01:24.700 --> 00:01:26.040

That's huge.

00:01:27.340 --> 00:01:30.500

Yeah, I don't know. I feel like you've been launching something,

00:01:30.500 --> 00:01:35.820

no pun intended, but launching this podcast with great success, super fast.

00:01:35.820 --> 00:01:39.300

So I don't feel like you've been that slow at hitting 50.

00:01:39.300 --> 00:01:41.660

I mean, I don't really know where I'm getting at with this,

00:01:41.660 --> 00:01:44.780

but it's just been so high quality from the beginning,

00:01:44.780 --> 00:01:48.100

your podcast, that I just think it's just been going great for you.

00:01:48.100 --> 00:01:51.740

Actually, I feel like it's been going fast because you just...

00:01:51.740 --> 00:01:56.860

It felt like you hit the ground running with your episode 1 to 10 and so on.

00:01:56.860 --> 00:01:58.460

It's a great podcast, man.

00:01:58.460 --> 00:01:59.860

Well, I appreciate that.

00:01:59.860 --> 00:02:04.260

Yeah, I think I like hacked a little bit with that weird whenever I started it.

00:02:04.260 --> 00:02:06.360

I released an episode every day for five days.

00:02:06.360 --> 00:02:12.860

So that helped, you know, maybe make it appear like I was a little more prolific than I actually am.

00:02:12.860 --> 00:02:14.560

But it feels really cool.

00:02:14.560 --> 00:02:19.460

And I feel like you're a perfect person to have on for episode 50.

00:02:19.460 --> 00:02:20.960

So I'm excited to get into this.

00:02:20.960 --> 00:02:23.060

And yeah, we've been planning it for a long time.

00:02:23.060 --> 00:02:26.740

So I had a long time to like, I was about to say prepare,

00:02:26.740 --> 00:02:28.420

but I don't really think I've prepared that much,

00:02:28.420 --> 00:02:32.260

but I've had a long time to look forward to this at least.

00:02:32.260 --> 00:02:34.260

- Before we get into RuneStone itself then,

00:02:34.260 --> 00:02:36.780

I wanna give everyone an introduction into who you are.

00:02:36.780 --> 00:02:39.380

So the three questions I always ask to kick off the show

00:02:39.380 --> 00:02:41.020

is where are you from?

00:02:41.020 --> 00:02:43.700

Do you have a formal education related to what you do?

00:02:43.700 --> 00:02:45.900

And then what was your career like

00:02:45.900 --> 00:02:48.460

and apps leading up to RuneStone?

00:02:48.460 --> 00:02:50.500

- Yeah, so I'm Simon and I live in Denmark

00:02:50.500 --> 00:02:51.940

in the suburbs of Denmark.

00:02:51.940 --> 00:02:55.220

I grew up in the suburbs many years ago.

00:02:55.220 --> 00:02:58.980

Then I, then I moved to Copenhagen and I just recently last year

00:02:58.980 --> 00:03:00.660

moved back to the suburbs.

00:03:00.660 --> 00:03:03.500

So for those of you who don't know, Copenhagen is like the

00:03:03.500 --> 00:03:04.620

capital city of Denmark.

00:03:04.620 --> 00:03:08.660

And that's so that that's the biggest city we have in Denmark.

00:03:08.660 --> 00:03:09.380

Yeah.

00:03:09.380 --> 00:03:13.580

You're like the, you're the second Copenhagen person that we've had in the

00:03:13.580 --> 00:03:17.380

last, like, I don't know, five episodes or something, because Michael was on recently.

00:03:17.380 --> 00:03:17.660

Oh yeah.

00:03:17.660 --> 00:03:19.060

You had, you had Michael on earlier.

00:03:19.060 --> 00:03:19.660

Yeah.

00:03:19.660 --> 00:03:21.380

I used to work with Michael, but that's.

00:03:21.380 --> 00:03:21.820

Oh really?

00:03:21.820 --> 00:03:23.080

That's many years ago.

00:03:23.080 --> 00:03:27.520

I live in the suburbs in a small terraced house with my girlfriend.

00:03:27.520 --> 00:03:29.560

We've been doing that for a year,

00:03:29.560 --> 00:03:34.520

just enjoying the slow pace of living outside the city.

00:03:34.520 --> 00:03:37.020

That's great. I do have a formal education.

00:03:37.020 --> 00:03:41.480

I studied software engineering for five years back in...

00:03:41.480 --> 00:03:46.160

When was this? That was like 2011 to 2016.

00:03:46.160 --> 00:03:47.760

Yeah, must have been it.

00:03:47.760 --> 00:03:49.820

Yeah, I just really had to...

00:03:49.860 --> 00:03:53.820

It was always important for me to just have like, I wanted my formal education.

00:03:53.820 --> 00:03:58.140

I also think like my parents were like, "Ah, that's a good idea, Simon."

00:03:58.140 --> 00:04:03.300

Even though, you know, you enjoy building software and that seems to be working out.

00:04:03.300 --> 00:04:06.380

Maybe having a new education is still a good plan.

00:04:06.380 --> 00:04:08.020

And I always felt the same way.

00:04:08.020 --> 00:04:10.140

So I just tried to rush through it.

00:04:10.140 --> 00:04:13.220

I mean, as fast as you can, nonetheless.

00:04:13.220 --> 00:04:18.500

But you were into, so you were into software development before university.

00:04:18.620 --> 00:04:22.220

And then that's what you went into. It's like computer science or something like that.

00:04:22.220 --> 00:04:28.300

To some degree, I feel like I've been doing some kind of software always. I mean, my dad,

00:04:28.300 --> 00:04:34.620

since I was born, and also before I was born, he was building software and working with hardware

00:04:34.620 --> 00:04:40.620

and all sorts of ways. I mean, he built back then it was building websites. He worked with

00:04:40.620 --> 00:04:47.100

modding different game consoles. And so we had all of these game consoles laying around our house.

00:04:47.100 --> 00:04:47.740

Oh, wow.

00:04:47.740 --> 00:04:51.420

And when he wasn't modding those, he was building like small software projects.

00:04:51.420 --> 00:04:54.300

And yeah, just, I kind of just grew into it, you know?

00:04:54.300 --> 00:04:58.340

So you were surrounded by the sort of hacker, like tinker

00:04:58.340 --> 00:04:59.780

mentality your whole life then?

00:04:59.780 --> 00:05:01.080

Yeah, I think something like that.

00:05:01.080 --> 00:05:04.020

My dad's not working with software anymore at all.

00:05:04.020 --> 00:05:08.100

I mean, yeah, he is to some degree he is actually, but he had a

00:05:08.100 --> 00:05:09.300

period where he wasn't at least.

00:05:09.300 --> 00:05:13.060

But back then everything was like software and hardware in our home.

00:05:13.060 --> 00:05:16.820

So just, it always kind of came natural to look into that.

00:05:17.060 --> 00:05:22.360

So then out of out of university, then was the idea like find a firm to work for?

00:05:22.360 --> 00:05:23.760

Or did you want to do stuff on your own?

00:05:23.760 --> 00:05:25.660

Like, how'd you how'd you get into what you're doing now?

00:05:25.660 --> 00:05:27.560

Let's rewind back a bit.

00:05:27.560 --> 00:05:31.220

Maybe before university, I went to a gymnasium.

00:05:31.220 --> 00:05:35.620

That's like basically the Danish equivalent of a high school.

00:05:35.620 --> 00:05:36.760

OK, give and take.

00:05:36.760 --> 00:05:41.060

You know, you go there for three years and already back then I was working like

00:05:41.060 --> 00:05:47.020

small freelance gigs for various companies and building my own things on the side.

00:05:47.020 --> 00:05:52.020

Back then it was like websites and backend development.

00:05:52.020 --> 00:05:55.020

I don't think we called it backend development back then.

00:05:55.020 --> 00:05:57.240

At least I didn't know that word,

00:05:57.240 --> 00:05:59.580

but that was basically what I did.

00:05:59.580 --> 00:06:02.780

Some things in like Flash and ActionScript.

00:06:02.780 --> 00:06:03.620

- Oh, nice.

00:06:03.620 --> 00:06:04.720

- All that kind of things.

00:06:04.720 --> 00:06:07.440

And then I got my first iPhone in 2008.

00:06:07.440 --> 00:06:09.460

That was the iPhone 3GS.

00:06:09.460 --> 00:06:12.740

I bought that iPhone because I wanted to develop for it.

00:06:12.740 --> 00:06:14.980

It wasn't like the other way around.

00:06:14.980 --> 00:06:15.820

- Yeah.

00:06:15.820 --> 00:06:19.020

that I wanted to build software that you can touch.

00:06:19.020 --> 00:06:23.220

And I wanted the best touchscreen that I could get back then.

00:06:23.220 --> 00:06:26.140

To this day, I still believe that that was the best touchscreen

00:06:26.140 --> 00:06:28.740

that you could buy for money, basically.

00:06:28.740 --> 00:06:32.340

That's kind of how I got into building iPhone and iPad apps.

00:06:32.340 --> 00:06:36.220

Yeah, and I built my first app shortly after I got my first iPhone.

00:06:36.220 --> 00:06:38.020

I think it was like a year after.

00:06:38.020 --> 00:06:39.580

I mean, I tinkered with different things,

00:06:39.580 --> 00:06:44.180

and then I built my first app and had it on the App Store

00:06:44.300 --> 00:06:46.140

maybe half a year or a year after.

00:06:46.140 --> 00:06:47.260

Oh, wow. Okay.

00:06:47.260 --> 00:06:51.500

That was for a Danish music festival,

00:06:51.500 --> 00:06:58.620

where I partnered with them to build the festival schedule into an app

00:06:58.620 --> 00:07:00.460

that you could have it in your pocket,

00:07:00.460 --> 00:07:02.380

and you could favorite different concerts.

00:07:02.380 --> 00:07:06.620

So it's like a four-day festival with 100 concerts.

00:07:06.620 --> 00:07:09.820

And then you could favorite them and get reminders

00:07:09.820 --> 00:07:12.540

half an hour before the concert started.

00:07:12.540 --> 00:07:17.980

then. It's like a map of the whole area and things like that. That was the first app I

00:07:17.980 --> 00:07:18.980

had on the App Store.

00:07:18.980 --> 00:07:25.000

So you've been playing around with iOS and the App Store from basically the beginning?

00:07:25.000 --> 00:07:29.360

Not really, right? I think the App Store, wasn't it like three years old back then?

00:07:29.360 --> 00:07:30.700

This was the iPhone 3GS.

00:07:30.700 --> 00:07:35.980

Well, the iPhone came out in 2007, but the original iPhone didn't have the App Store.

00:07:35.980 --> 00:07:40.560

It would have been like right then, like 2008, 2009 was right whenever the App Store came

00:07:40.560 --> 00:07:41.560

out, I think.

00:07:41.560 --> 00:07:46.040

Maybe I've got the years wrong then. Wasn't the iPhone 3 just released in 2008?

00:07:46.040 --> 00:07:49.400

You would know better than me. I was on the Android train back...

00:07:49.400 --> 00:07:52.280

Well, maybe back then I wasn't even on a smartphone, but

00:07:52.280 --> 00:07:55.800

it was a while before I was on the Android... or the iPhone train.

00:07:55.800 --> 00:08:00.840

Maybe I didn't get the year right. I know I got the iPhone model right.

00:08:00.840 --> 00:08:04.440

Either way, that's pretty early days, I would say. Either way, though.

00:08:04.440 --> 00:08:07.240

Yeah, it was early days, at least.

00:08:07.240 --> 00:08:09.880

Yeah, I mean, then I went to university,

00:08:09.880 --> 00:08:13.880

I studied there for five years, still did some freelancing on the side.

00:08:13.880 --> 00:08:21.960

And then before I left university, I signed my first contract with the company that I

00:08:21.960 --> 00:08:25.920

would then work for and actually still work for to this day.

00:08:25.920 --> 00:08:26.920

Oh, nice.

00:08:26.920 --> 00:08:28.720

Now, is that iOS development?

00:08:28.720 --> 00:08:30.920

Is that what you're doing for your day job?

00:08:30.920 --> 00:08:31.920

Yes.

00:08:31.920 --> 00:08:33.560

So I started as...

00:08:33.560 --> 00:08:37.480

It's an agency called Shape based in Copenhagen, Denmark.

00:08:37.480 --> 00:08:40.480

And I started there as a student developer in...

00:08:40.480 --> 00:08:44.520

It must have been like early 2016.

00:08:44.520 --> 00:08:50.260

And then that same summer, I finished my studies at the university

00:08:50.260 --> 00:08:52.300

and I went there full-time.

00:08:52.300 --> 00:08:56.840

Then I had actually had one year where I was working for another company.

00:08:56.840 --> 00:08:58.680

That was last year.

00:08:58.680 --> 00:09:03.180

That's when we moved out of Copenhagen and we moved to another part of Denmark.

00:09:03.220 --> 00:09:07.120

And I thought at the same time, you know, I'm going to change my job.

00:09:07.120 --> 00:09:10.000

So I worked there for just short of a year.

00:09:10.000 --> 00:09:12.860

And then then my old manager contacted me, like

00:09:12.860 --> 00:09:15.920

if I wanted to come back and try something else and so on.

00:09:15.920 --> 00:09:19.360

And then, yeah, then we made a deal that that worked out for both of us.

00:09:19.360 --> 00:09:25.660

Nice. OK, so it sounds like you've been tinkering and making side projects

00:09:25.660 --> 00:09:30.560

basically your whole life and in the iPhone from pretty early on after university.

00:09:30.920 --> 00:09:37.160

So I guess if we like fast forward a little bit, I feel like maybe this has been the way it's always been.

00:09:37.160 --> 00:09:42.920

But by the time I started, like noticing your projects and stuff, there was sort of this.

00:09:42.920 --> 00:09:51.600

It felt like you were just constantly coming out with these like sort of developer automation kind of apps.

00:09:51.600 --> 00:09:56.600

So this is like JSON and data jar and scriptable in your head.

00:09:56.600 --> 00:09:59.880

were those like a different thing that kind of started?

00:09:59.880 --> 00:10:02.120

Or was that really what you were kind of doing this whole time?

00:10:02.120 --> 00:10:05.560

I guess it was like, yes and no.

00:10:05.560 --> 00:10:07.800

It was kind of what I was doing the whole time

00:10:07.800 --> 00:10:11.960

because I've always had like some kind of side project going on.

00:10:11.960 --> 00:10:16.200

Usually it would be smaller projects that I would just like abandon

00:10:16.200 --> 00:10:17.720

and move on to something else.

00:10:17.720 --> 00:10:21.400

Just trying to figure out like, what do I want to do?

00:10:21.400 --> 00:10:22.280

What do I enjoy?

00:10:22.280 --> 00:10:24.440

You know, things like that.

00:10:24.440 --> 00:10:25.560

Learning new technologies.

00:10:25.560 --> 00:10:29.880

I mean, that's always been a huge driver for me when starting a new side project.

00:10:29.880 --> 00:10:33.960

And yeah, so when I started Scriptable, I think that was also part of it.

00:10:33.960 --> 00:10:37.560

I found out about this thing called JavaScript Core on iOS,

00:10:37.560 --> 00:10:38.920

where I could run JavaScript.

00:10:38.920 --> 00:10:41.720

And that looked interesting.

00:10:41.720 --> 00:10:47.240

And at the same time, this was like, is it four years ago, maybe?

00:10:47.240 --> 00:10:49.480

Something like that, back in 2018.

00:10:49.480 --> 00:10:52.920

That's when Workflow was like, that was quite big back then.

00:10:52.920 --> 00:10:53.560

Yeah, yeah.

00:10:54.200 --> 00:11:01.320

workflow. Now, shortcuts. I was like, "This thing, workflow, is great."

00:11:01.320 --> 00:11:07.960

I mean, that was like a whole new thing. We hadn't seen anything like it in the iOS ecosystem,

00:11:07.960 --> 00:11:13.400

really. And I just thought it was super great. It was a super fun idea, but it didn't really

00:11:13.400 --> 00:11:18.760

work for me because it had this like... And still to this day, as shortcuts has this like

00:11:19.640 --> 00:11:23.520

visual language for building your shortcuts, right?

00:11:23.520 --> 00:11:25.880

Your scripts or whatever you want to call them.

00:11:25.880 --> 00:11:29.320

And as someone who's been developing for a long time,

00:11:29.320 --> 00:11:31.760

it felt a bit cumbersome to me.

00:11:31.760 --> 00:11:34.880

I think today I've gotten more used to it.

00:11:34.880 --> 00:11:37.520

I can make some shortcuts, but back then,

00:11:37.520 --> 00:11:39.600

it just felt like it didn't really work for me.

00:11:39.600 --> 00:11:41.800

And I thought, "Okay, what if I could take

00:11:41.800 --> 00:11:45.120

some of the same things that shortcuts can do,

00:11:45.120 --> 00:11:46.960

integrating with system frameworks

00:11:46.960 --> 00:11:53.560

like the calendar, reminders, the share sheet, all of those things, and then use this JavaScript

00:11:53.560 --> 00:11:57.520

core thing, use JavaScript to do basically the same.

00:11:57.520 --> 00:12:04.360

Then I can write small programs, which for me would be faster at least, because that's

00:12:04.360 --> 00:12:05.920

a different language, right?

00:12:05.920 --> 00:12:11.720

That's a written programming language rather than this visual thing, which just to me at

00:12:11.720 --> 00:12:13.780

least comes more natural.

00:12:13.780 --> 00:12:16.000

So I thought that would be a fun challenge.

00:12:16.000 --> 00:12:18.880

So that started way back then.

00:12:18.880 --> 00:12:25.580

So the idea was workflow and shortcuts and a bunch of apps kind of in that vein, even

00:12:25.580 --> 00:12:29.360

outside of the iOS world, they're kind of this like no code concept or whatever.

00:12:29.360 --> 00:12:35.240

But you were almost, it almost sounds like your inspiration was like, oh, they have all

00:12:35.240 --> 00:12:39.520

these hooks into the system and give users the ability to write stuff for that.

00:12:39.520 --> 00:12:41.280

What if we brought it back to code?

00:12:41.280 --> 00:12:46.980

Yeah, I mean, it basically gave it a scripting language, like if you were just going to write

00:12:46.980 --> 00:12:51.960

a quick bash script or something on the Mac. And that was that was sort of the inspiration

00:12:51.960 --> 00:12:52.960

for starting that.

00:12:52.960 --> 00:12:58.480

Yeah, yeah, I guess in that sense, I was like the old grumpy man. Because of course, this

00:12:58.480 --> 00:13:04.800

no code thing was huge back then and still is very huge today. I think it's even bigger

00:13:04.800 --> 00:13:11.800

today, and you can do many things without coding just a tiny bit.

00:13:11.800 --> 00:13:18.000

And I think they were kind of frontrunners on that, the workflow team, the whole no code

00:13:18.000 --> 00:13:19.000

thing.

00:13:19.000 --> 00:13:23.440

So in that sense, I was like the old Grumpy Man saying, "Yeah, what you're doing is kind

00:13:23.440 --> 00:13:25.920

of cool, but what if we still code?"

00:13:25.920 --> 00:13:29.000

But that's because they were frontrunners on two things, I think.

00:13:29.000 --> 00:13:34.120

There was the whole no code thing, and then there was this thing of building an app that

00:13:34.120 --> 00:13:37.080

used to build something else.

00:13:37.080 --> 00:13:39.920

Which on iOS was pretty unique.

00:13:39.920 --> 00:13:40.920

Yeah.

00:13:40.920 --> 00:13:46.260

So in that sense, they were unique in two different ways, the no code and the hooks

00:13:46.260 --> 00:13:48.120

into the system.

00:13:48.120 --> 00:13:53.140

I thought the hooks that they had into the system, the reminders calendar and so on,

00:13:53.140 --> 00:13:58.600

they were super intriguing, but I just wanted to do things in a way that I was more used

00:13:58.600 --> 00:13:59.760

to.

00:13:59.760 --> 00:14:08.360

And that was like, I don't think I had developed any developer tools before that.

00:14:08.360 --> 00:14:14.040

Nothing more than a bash script or my own little command line tool.

00:14:14.040 --> 00:14:15.400

It hadn't really been a thing for me.

00:14:15.400 --> 00:14:21.480

And I don't think I had any intentions to build developer tools back then, at least.

00:14:21.480 --> 00:14:28.360

And then since then, I found that that's something I really enjoy, building tools basically for

00:14:28.360 --> 00:14:29.360

myself.

00:14:29.360 --> 00:14:32.760

So Scriptable was the first one kind of like that.

00:14:32.760 --> 00:14:36.160

What was the launch like of that?

00:14:36.160 --> 00:14:41.160

Were you releasing it to an audience and it kind of took off right away?

00:14:41.160 --> 00:14:43.160

Or was it a slow growth to kind of the...

00:14:43.160 --> 00:14:48.560

I feel like it's a well-known sort of notable app now for people who are sort of power users.

00:14:48.560 --> 00:14:50.660

How was the launch back then?

00:14:50.660 --> 00:14:51.760

I mean, it's four years ago.

00:14:53.160 --> 00:15:03.840

It was... I think I got lucky, honestly, because I was just building this on my own

00:15:03.840 --> 00:15:08.880

and I was showing it to people, I was showing it to friends and colleagues

00:15:08.880 --> 00:15:10.800

who I don't really think they understood it.

00:15:10.800 --> 00:15:12.640

And I don't think I understood it myself either.

00:15:12.640 --> 00:15:19.080

I remember the first prototype I made, you could write a tiny JavaScript

00:15:19.080 --> 00:15:21.640

And the first script that I wrote in it,

00:15:21.640 --> 00:15:25.680

it only took any sentence as input,

00:15:25.680 --> 00:15:27.320

you know, a couple of words,

00:15:27.320 --> 00:15:29.800

then it would split that sentence into words

00:15:29.800 --> 00:15:31.840

and put emojis between the words.

00:15:31.840 --> 00:15:33.600

It sounds stupid and it was.

00:15:33.600 --> 00:15:36.560

So it was like, you know, there's this thing on Twitter.

00:15:36.560 --> 00:15:38.600

- Yeah, I mean, it's like a slightly more fancy

00:15:38.600 --> 00:15:40.200

"Hello, world."

00:15:40.200 --> 00:15:41.440

- Yeah, basically.

00:15:41.440 --> 00:15:43.440

So it could do this thing, like, you know,

00:15:43.440 --> 00:15:45.560

sometimes people post a sentence

00:15:45.560 --> 00:15:48.720

and then they have the clap emoji between each word.

00:15:48.720 --> 00:15:50.960

That's basically what I did.

00:15:50.960 --> 00:15:55.400

And then I showed it to my friends and colleagues and showed them, "Look how cool this is."

00:15:55.400 --> 00:15:58.200

And they said, "But you haven't done anything."

00:15:58.200 --> 00:16:02.320

It's like, "No, but imagine the possibilities.

00:16:02.320 --> 00:16:04.520

What if we wrote another script?"

00:16:04.520 --> 00:16:06.880

And yeah, so people didn't really get it.

00:16:06.880 --> 00:16:09.880

And I don't think I really understood it myself either.

00:16:09.880 --> 00:16:16.280

So I just started tweeting about it, just hoping to find someone who would think this

00:16:16.280 --> 00:16:20.080

was fun and who could also point me in some direction,

00:16:20.080 --> 00:16:23.320

saying, "Oh yeah, this is great. What if you did this and that?"

00:16:23.320 --> 00:16:26.320

I think I got lucky that I found that on Twitter,

00:16:26.320 --> 00:16:29.120

someone who could point me in some direction

00:16:29.120 --> 00:16:31.920

and who also thought this was cool.

00:16:31.920 --> 00:16:35.080

And then I got lucky again, as the launch was nearing,

00:16:35.080 --> 00:16:39.120

that Federico Vecchietti of MagStories

00:16:39.120 --> 00:16:41.220

kind of found out about the app

00:16:41.220 --> 00:16:45.620

and decided to cover it during the launch.

00:16:45.660 --> 00:16:48.780

and also, I think before, got onto the beta and so on.

00:16:48.780 --> 00:16:51.740

And back then, that was huge for me.

00:16:51.740 --> 00:16:56.300

And of course, it still is today, if someone wants to cover my apps.

00:16:56.300 --> 00:16:58.940

But, I mean, I had...

00:16:58.940 --> 00:17:02.180

Like, that was... I didn't know anyone in the iOS community

00:17:02.180 --> 00:17:05.100

on Twitter or online back then, really.

00:17:05.100 --> 00:17:10.060

I mean, I knew people, but I hadn't really talked or written to anyone.

00:17:10.060 --> 00:17:13.580

I just sent my tweets into, you know, this...

00:17:13.620 --> 00:17:14.620

Into the void.

00:17:14.620 --> 00:17:17.620

Dark space, yeah, hoping someone would pick it up.

00:17:17.620 --> 00:17:19.620

And basically that happened.

00:17:19.620 --> 00:17:24.120

So in that sense, I think I got quite lucky with the launch of Scriptable.

00:17:24.120 --> 00:17:29.420

That it got picked up by someone without me doing anything else

00:17:29.420 --> 00:17:31.420

than just talking about what I've built.

00:17:31.420 --> 00:17:33.920

And that's basically been my strategy ever since.

00:17:33.920 --> 00:17:35.920

If you can call that a strategy.

00:17:35.920 --> 00:17:38.920

You're kind of in an interesting cross-section, right,

00:17:38.920 --> 00:17:47.480

of like power users who advanced enough that they're going to want to write code in JavaScript,

00:17:47.480 --> 00:17:55.480

but also who are going to appreciate and want to do that on iOS. Yeah. And that like Federico is

00:17:55.480 --> 00:18:01.160

sort of, you know, the person who's probably the most prolific in terms of writing about that

00:18:01.160 --> 00:18:05.400

community and, and talking about it and everything. And so the fact that he picked up on it,

00:18:06.600 --> 00:18:11.000

Yes, it was like lucky in the sense that, you know, he then could send it to his people.

00:18:11.000 --> 00:18:14.120

But I think it's also indicative of like, you were making something that

00:18:14.120 --> 00:18:17.800

that community would be really excited about to like, it works both ways, I think.

00:18:17.800 --> 00:18:23.000

And you really did touch on something where, like, everybody talks about even with shortcuts,

00:18:23.000 --> 00:18:27.720

it's like, it feels really powerful. But then you run across you run into these walls,

00:18:27.720 --> 00:18:32.920

something like scriptable is like a way to get over those walls. And then you kind of see,

00:18:32.920 --> 00:18:35.160

"Oh my gosh, there's even more stuff I can do."

00:18:35.160 --> 00:18:40.120

And since that's come out, you've just kind of kept adding more and more system features, right?

00:18:40.120 --> 00:18:45.720

Yeah. Back when I started developing Scriptable, I didn't really... Shortcuts wasn't a thing.

00:18:45.720 --> 00:18:50.440

Workflow was a thing, right? But that same year, Apple announced that they had acquired the

00:18:50.440 --> 00:18:56.280

workflow team. And at DubDub that summer, they announced that the same summer that I started

00:18:56.280 --> 00:19:01.880

Scriptable a few months before, they announced that the shortcuts would be like opened up for

00:19:01.880 --> 00:19:06.760

for developers with this, was it called Intents back then?

00:19:06.760 --> 00:19:08.040

Or maybe just SiriKit?

00:19:08.040 --> 00:19:11.040

- Yeah, the SiriKit Intents framework.

00:19:11.040 --> 00:19:13.840

- The second that got announced during DubDub,

00:19:13.840 --> 00:19:16.040

I immediately pivoted my project

00:19:16.040 --> 00:19:18.320

to be like a shortcuts companion.

00:19:18.320 --> 00:19:21.280

I thought that that's what's gonna make sense now.

00:19:21.280 --> 00:19:25.440

I had no intention even before that announcement

00:19:25.440 --> 00:19:27.880

to kind of compete with workflow.

00:19:28.800 --> 00:19:32.700

I wanted them to work in parallel somehow,

00:19:32.700 --> 00:19:35.420

but I hadn't figured out how exactly yet.

00:19:35.420 --> 00:19:37.300

Back then we had these X callback URLs,

00:19:37.300 --> 00:19:39.020

and I thought maybe I'll just look into that

00:19:39.020 --> 00:19:42.220

and find out if I can do something fun with that.

00:19:42.220 --> 00:19:43.060

But when they announced

00:19:43.060 --> 00:19:45.000

that you can actually hook into Shortcuts,

00:19:45.000 --> 00:19:47.100

it was like a no-brainer for me

00:19:47.100 --> 00:19:51.220

to turn my app into a Shortcuts companion.

00:19:51.220 --> 00:19:54.620

- Since then, you just have kept adding new features.

00:19:54.620 --> 00:19:56.940

Like the one that I feel like,

00:19:56.940 --> 00:19:57.860

I mean, you've added a bunch,

00:19:57.860 --> 00:20:01.540

But the one that I feel like I saw kind of have another explosion

00:20:01.540 --> 00:20:03.900

in terms of new people using it and everything

00:20:03.900 --> 00:20:07.340

was when you added the ability to build your own widgets.

00:20:07.340 --> 00:20:11.700

I've kind of focused on things that Shortcuts doesn't do.

00:20:11.700 --> 00:20:13.740

Again, because I don't really want to compete with it.

00:20:13.740 --> 00:20:16.180

I want to be something different.

00:20:16.180 --> 00:20:20.780

And Shortcuts doesn't really have a sense of building UIs.

00:20:20.780 --> 00:20:23.300

For example, Shortcuts doesn't...

00:20:23.300 --> 00:20:26.300

Like, it has no interactions with widgets at all.

00:20:26.300 --> 00:20:30.300

So I thought that's an area for me to explore.

00:20:30.300 --> 00:20:33.300

And I mean, there's been other things where like,

00:20:33.300 --> 00:20:37.300

I have tried to make some just small bridges

00:20:37.300 --> 00:20:40.800

or APIs inscriptable that might fill a gap

00:20:40.800 --> 00:20:42.700

for someone at least, because it's something

00:20:42.700 --> 00:20:44.700

that Shortcuts doesn't do.

00:20:44.700 --> 00:20:47.240

I think, if I remember correctly,

00:20:47.240 --> 00:20:50.700

back when I added support for Reminders inscriptable,

00:20:50.700 --> 00:20:53.140

Shortcuts didn't know anything about Reminders.

00:20:53.140 --> 00:20:55.100

You couldn't work with it.

00:20:55.100 --> 00:20:58.900

I believe you can today, but that was one of the motivations

00:20:58.900 --> 00:21:01.900

for building a reminder script in Scriptable.

00:21:01.900 --> 00:21:03.460

- You kind of want to be the answer

00:21:03.460 --> 00:21:05.460

to somebody's Reddit question of,

00:21:05.460 --> 00:21:06.980

"How can I make it do X?"

00:21:06.980 --> 00:21:08.980

And if the system doesn't allow it,

00:21:08.980 --> 00:21:12.160

you want, not that you're trolling around Reddit,

00:21:12.160 --> 00:21:16.140

but you want to be an answer to those problems.

00:21:16.140 --> 00:21:17.820

- Yeah, exactly.

00:21:17.820 --> 00:21:21.420

Kind of the same way that Toolbox Pro does.

00:21:21.420 --> 00:21:29.500

that's also a bunch of actions that Shortcuts doesn't support. I believe, I mean, I don't

00:21:29.500 --> 00:21:33.420

know what the developers' intentions were, but it seems that that must have been the

00:21:33.420 --> 00:21:34.740

intention to like fill some…

00:21:34.740 --> 00:21:36.700

Yeah, he's been on the show, actually, Alex.

00:21:36.700 --> 00:21:37.700

Oh, okay.

00:21:37.700 --> 00:21:38.700

Yeah, yeah, yeah.

00:21:38.700 --> 00:21:39.700

That's great.

00:21:39.700 --> 00:21:42.900

Yeah, that's very much it. He was a power user and wanted it to do more.

00:21:42.900 --> 00:21:49.460

Yeah, exactly. And then I just, I have this twist of, I want to do the things in JavaScript,

00:21:49.460 --> 00:21:53.760

which I think also allows me to support some of the same things that shortcuts do,

00:21:53.760 --> 00:21:59.460

because then I can offer people to do it in JavaScript instead,

00:21:59.460 --> 00:22:01.760

which some might prefer.

00:22:01.760 --> 00:22:06.660

And then you have to underline the whole scriptable is a companion to shortcuts thing.

00:22:06.660 --> 00:22:10.160

I think two years ago, I introduced this concept

00:22:10.160 --> 00:22:14.360

of running a script inline in shortcuts.

00:22:14.360 --> 00:22:18.660

And the whole idea with that was that you can have a complex shortcut,

00:22:18.660 --> 00:22:22.920

But then at some point, you might have to do a task

00:22:22.920 --> 00:22:26.920

that either Shortcuts can't do or that's just easier to do in Scriptable.

00:22:26.920 --> 00:22:31.520

My own use case for this run inline action in Shortcuts

00:22:31.520 --> 00:22:35.720

that Scriptable offers is almost always to transform some data.

00:22:35.720 --> 00:22:39.520

Doing data manipulation in Shortcuts is quite complicated

00:22:39.520 --> 00:22:41.220

and requires a lot of actions.

00:22:41.220 --> 00:22:46.720

But mapping a JSON object in JavaScript is almost trivial.

00:22:46.720 --> 00:22:50.960

And with this running line action that Scriptable offers,

00:22:50.960 --> 00:22:54.000

you can just provide any object as input,

00:22:54.000 --> 00:22:57.200

or maybe any JSON object, or it could also be other things,

00:22:57.200 --> 00:22:59.120

and then output the transformed object.

00:22:59.120 --> 00:23:03.680

From there, you've kind of created a couple more apps that were,

00:23:03.680 --> 00:23:07.280

I would say, companions to shortcuts.

00:23:07.280 --> 00:23:10.880

So like DataJar is one of them, JSON's another one.

00:23:10.880 --> 00:23:14.640

Was that sort of in a similar vein, how those came about?

00:23:15.280 --> 00:23:21.040

Yeah, at least for DataGuard, that was always intended as a companion for shortcuts from

00:23:21.040 --> 00:23:22.040

like day one.

00:23:22.040 --> 00:23:25.120

You can say it's scriptable, it wasn't really because it was started before.

00:23:25.120 --> 00:23:26.440

Right, yeah, true.

00:23:26.440 --> 00:23:28.480

Before shortcuts was a thing.

00:23:28.480 --> 00:23:34.600

But DataGuard very much, and it still is intended to be a companion for shortcuts to this day.

00:23:34.600 --> 00:23:38.120

I mean, I get mails from people who wanted to do other things.

00:23:38.120 --> 00:23:41.800

I get support emails from people who wanted to do things that are not really strictly

00:23:41.800 --> 00:23:43.320

shortcuts related.

00:23:43.320 --> 00:23:45.520

And that's just basically a blank no from me.

00:23:45.520 --> 00:23:47.240

That's not really what I want to do with that app.

00:23:47.240 --> 00:23:49.800

That is a clear shortcuts companion.

00:23:49.800 --> 00:23:54.080

We should say what Data Jar is.

00:23:54.080 --> 00:23:59.400

You can correct me if I'm wrong, but it's essentially like a way to store data in iCloud

00:23:59.400 --> 00:24:04.800

so it'll sync between devices, essentially for the purposes of shortcuts, right?

00:24:04.800 --> 00:24:06.360

Yeah, exactly.

00:24:06.360 --> 00:24:08.600

It is a database for shortcuts.

00:24:08.600 --> 00:24:10.520

That's basically it.

00:24:10.520 --> 00:24:13.200

With JSON, that was a bit different.

00:24:13.200 --> 00:24:16.360

I think that for two reasons, actually.

00:24:16.360 --> 00:24:23.900

One is that shortcuts got popular on iOS and people started building complicated shortcuts

00:24:23.900 --> 00:24:27.620

that talked with APIs and consumed JSON.

00:24:27.620 --> 00:24:34.100

So there was a bigger need both for people in the community and also myself to view JSON,

00:24:34.100 --> 00:24:38.600

complex JSON objects on the iPhone or iPad.

00:24:38.600 --> 00:24:40.420

So I wanted to fill that need.

00:24:40.420 --> 00:24:47.460

And at the same time, I just found myself, I think I started building JSON shortly after

00:24:47.460 --> 00:24:49.220

I bought my first iPad Pro.

00:24:49.220 --> 00:24:51.340

I wasn't shortly after, I was shortly before.

00:24:51.340 --> 00:24:53.780

At least I knew back then that I wanted to buy an iPad Pro.

00:24:53.780 --> 00:24:58.380

I think I had decided to buy the next one that was released.

00:24:58.380 --> 00:25:01.380

So I started JSON around that time.

00:25:01.380 --> 00:25:06.860

And I moved some of my work for my day-to-day job to that iPad Pro.

00:25:06.860 --> 00:25:13.860

I often have the need to view a JSON document in my day job.

00:25:13.860 --> 00:25:16.860

And that was just something that the iPad couldn't really do.

00:25:16.860 --> 00:25:20.860

I mean, there were other apps, but it didn't really work that well for me.

00:25:20.860 --> 00:25:24.860

Yeah, that's true. Because if you open it in any browser on the phone or on the iPad,

00:25:24.860 --> 00:25:27.860

it's just going to download it as a text file or something, right?

00:25:27.860 --> 00:25:28.860

Yeah, exactly.

00:25:28.860 --> 00:25:32.860

It's not like you can get that sort of default view that you get in Chrome or something like that.

00:25:32.860 --> 00:25:35.860

No, exactly. Yeah, Chrome has pretty good support for it out of the box.

00:25:35.860 --> 00:25:41.480

the box. That's right. Yes, I just felt like if I want to work more on my iPad Pro, I feel

00:25:41.480 --> 00:25:44.940

like I need this thing. So that's basically how that went.

00:25:44.940 --> 00:25:55.100

So naturally, you build an entire parser and syntax highlighting, like code viewer, I guess,

00:25:55.100 --> 00:25:56.520

specifically around JSON.

00:25:56.520 --> 00:26:00.760

I didn't really write a parser at first. I thought that wouldn't be necessary because

00:26:00.760 --> 00:26:04.500

you know, Foundation already has a JSON parser.

00:26:04.500 --> 00:26:06.140

Oh, yeah, that's true.

00:26:06.140 --> 00:26:10.980

But yeah, funny thing is, you know, JSON objects are unordered by default.

00:26:10.980 --> 00:26:15.860

I mean, you shouldn't expect any order in the keys.

00:26:15.860 --> 00:26:21.820

But when you have a text document and you view a representation of that text document,

00:26:21.820 --> 00:26:24.900

you expect the keys to be in the same order, right?

00:26:24.900 --> 00:26:29.900

So I actually had to write my own parser to get that behavior because Apple's parser doesn't

00:26:29.900 --> 00:26:30.900

do that.

00:26:30.900 --> 00:26:31.900

Oh, interesting.

00:26:31.900 --> 00:26:35.180

Oh man, that must have been a horrible realization.

00:26:35.180 --> 00:26:38.540

Because that was probably the only reason why you needed it then, right?

00:26:38.540 --> 00:26:39.040

Yeah.

00:26:39.040 --> 00:26:43.260

The first versions, I don't think they ever got to the App Store, actually.

00:26:43.260 --> 00:26:46.940

But the first many beta builds I was testing myself,

00:26:46.940 --> 00:26:53.260

just used the, what's it called, like, NSJSON serialization or whatever.

00:26:53.260 --> 00:26:55.100

And that worked fine until I realized,

00:26:55.100 --> 00:27:00.300

"There's a problem here. I mean, this doesn't compare well."

00:27:00.300 --> 00:27:05.100

As often, at least, I know for myself, when I'm writing JSON by hand,

00:27:05.100 --> 00:27:08.620

there will be some logical order of the keys.

00:27:08.620 --> 00:27:11.740

You know, I might have the IDs, the first and name.

00:27:11.740 --> 00:27:13.100

So I wanted my app to do the same.

00:27:13.100 --> 00:27:15.020

And then it just has to write my own parser.

00:27:15.020 --> 00:27:18.540

And yeah, that was a horrible realization that I would need that.

00:27:18.540 --> 00:27:21.500

But it turned out to be quite simple, actually.

00:27:21.500 --> 00:27:25.660

JSON is quite a simple language to parse.

00:27:25.660 --> 00:27:27.180

I guess that's true.

00:27:27.180 --> 00:27:28.780

Yeah, kind of on purpose.

00:27:29.500 --> 00:27:35.500

We should clarify too, we've been using the terms interchangeably, but JSON, J-S-O-N,

00:27:35.500 --> 00:27:45.180

is the file format, but the app itself is a pun. It's J-A-S-O-N, like the name, Jason. It's J-A-Y-S-O-N,

00:27:45.180 --> 00:27:50.780

which is a very good name. When I chose that name, I intended it to be confusing because I

00:27:50.780 --> 00:27:55.820

thought that would be funny. Turns out not so much. That was a horrible idea.

00:27:57.660 --> 00:27:59.420

Has that caused issues?

00:27:59.420 --> 00:28:01.020

You end up in situations like this.

00:28:01.020 --> 00:28:03.580

And then when you're talking with people about it, they're like,

00:28:03.580 --> 00:28:06.700

"Yeah, but how do you spell it? Is it just J-S-O-N? No.

00:28:06.700 --> 00:28:11.420

Okay, then it's J-A-S-O-N? No, no, that's actually a Y in there."

00:28:11.420 --> 00:28:13.420

That's really funny.

00:28:13.420 --> 00:28:16.060

Well, if anybody listening is still confused,

00:28:16.060 --> 00:28:17.420

there will be a link in the show notes.

00:28:17.420 --> 00:28:20.620

That's great.

00:28:20.620 --> 00:28:24.380

Okay, so you have that guy.

00:28:24.940 --> 00:28:30.940

Scriptable feels like that's sort of your almost marquee app in terms of it being big. I don't know

00:28:30.940 --> 00:28:35.820

what your actual user numbers are, but it feels like that's the really big one. And then DataJar

00:28:35.820 --> 00:28:43.180

and JSON are kind of these shortcuts, companion apps. And then at some point, you decided you

00:28:43.180 --> 00:28:48.460

wanted to make like a full-blown code editor. So let's get into Runestone. And I'm curious how that

00:28:48.460 --> 00:28:50.220

that came about?

00:28:50.220 --> 00:28:51.060

- Yeah, sure.

00:28:51.060 --> 00:28:55.980

Scriptable is definitely like, that's my biggest app.

00:28:55.980 --> 00:28:57.860

It was also like my first,

00:28:57.860 --> 00:29:03.180

that the first, it was the first developer tool I built

00:29:03.180 --> 00:29:05.180

and it kind of got a lot of traction

00:29:05.180 --> 00:29:09.620

as we already discussed, or touched upon briefly at least.

00:29:09.620 --> 00:29:11.940

Scriptable has a text editor.

00:29:11.940 --> 00:29:14.700

A big part of Scriptable is a text editor.

00:29:14.700 --> 00:29:15.740

I mean, when you open it,

00:29:15.740 --> 00:29:18.220

there's a list of the scripts that you have.

00:29:18.220 --> 00:29:21.060

Then you select a script and that will either run it

00:29:21.060 --> 00:29:23.620

or if you press the small three dots,

00:29:23.620 --> 00:29:25.300

it will open a text editor.

00:29:25.300 --> 00:29:28.060

And your entire screen will basically be a text view

00:29:28.060 --> 00:29:29.860

with syntax highlighted text.

00:29:29.860 --> 00:29:33.220

And that was built using an open source framework

00:29:33.220 --> 00:29:36.100

that's actually written in JavaScript

00:29:36.100 --> 00:29:40.260

called Highlight.js or HighlightR.js.

00:29:40.260 --> 00:29:41.700

I don't remember exactly.

00:29:41.700 --> 00:29:43.980

And then someone made a wrapper around that

00:29:43.980 --> 00:29:45.260

to expose it to Swift.

00:29:45.260 --> 00:29:47.060

And I used that for years

00:29:47.060 --> 00:29:50.020

And I know plenty of other apps use that as well.

00:29:50.020 --> 00:29:53.100

- So that's just running in the JavaScript engine

00:29:53.100 --> 00:29:55.180

that you can run in iOS?

00:29:55.180 --> 00:29:56.460

- Yeah. - Okay.

00:29:56.460 --> 00:29:59.620

- Yeah, it's running in JavaScript Core, yeah.

00:29:59.620 --> 00:30:03.620

And then as you mentioned, I also built the JSON app,

00:30:03.620 --> 00:30:07.540

which is also, to some degree, a text view,

00:30:07.540 --> 00:30:10.420

or has at least a big part of that app is also a text view,

00:30:10.420 --> 00:30:13.340

'cause there's a visual representation of JSON,

00:30:13.340 --> 00:30:15.820

as like that's a kind of a simple text list,

00:30:15.820 --> 00:30:19.980

Sorry, that's a simple list or UI table view or whatever it's called.

00:30:19.980 --> 00:30:22.980

And then the other side of that is a text view

00:30:22.980 --> 00:30:26.020

with the textual representation of the JSON.

00:30:26.020 --> 00:30:28.820

So that was like this common thing

00:30:28.820 --> 00:30:32.260

of dealing with syntax highlighted text in some of my apps.

00:30:32.260 --> 00:30:34.780

And I always thought two things.

00:30:34.780 --> 00:30:38.300

One, if I want to take these apps to the next level,

00:30:38.300 --> 00:30:41.300

or if I want to take these text editors to the next level,

00:30:41.300 --> 00:30:43.220

I need to build it on my own.

00:30:43.260 --> 00:30:47.020

I needed to be more performant, I needed to do some things

00:30:47.020 --> 00:30:49.520

that I just can't do with the current setup.

00:30:49.520 --> 00:30:51.520

And then I thought, as well,

00:30:51.520 --> 00:30:56.520

it might be a fun challenge to build a text editor.

00:30:56.520 --> 00:31:02.020

So back in, I think, must have been 2020,

00:31:02.020 --> 00:31:06.020

yeah, December 2020, around, I think, 1st of December,

00:31:06.020 --> 00:31:10.220

I decided to give myself a month to build a text editor

00:31:10.220 --> 00:31:14.420

and just see how far I can get a month of evenings and weekends.

00:31:14.420 --> 00:31:17.720

And then around New Year, I will kind of revisit

00:31:17.720 --> 00:31:23.320

if it's a sane decision to continue down this path.

00:31:23.320 --> 00:31:26.020

And after a month, I had gotten pretty far.

00:31:26.020 --> 00:31:29.620

And I thought, "Oh yeah, I'm going to be done in no time building this text editor."

00:31:29.620 --> 00:31:35.820

And then months went by and it ended up taking me like over one and a half year

00:31:35.820 --> 00:31:39.220

to build this text editor of like, not full-time,

00:31:39.220 --> 00:31:41.620

but of just evenings and weekends.

00:31:41.620 --> 00:31:46.020

The classic, like, the last 10% takes 90% of the time or something.

00:31:46.020 --> 00:31:47.700

Yeah, exactly. Something like that.

00:31:47.700 --> 00:31:52.020

And had I known it would have taken one and a half years,

00:31:52.020 --> 00:31:56.820

I probably would have stopped the project after a month.

00:31:56.820 --> 00:32:00.020

But now I'm super glad that I have built it,

00:32:00.020 --> 00:32:02.260

and I learned a lot during the process.

00:32:02.260 --> 00:32:07.460

And now I can kind of go back to some of my other apps,

00:32:08.100 --> 00:32:11.300

in particular, scriptable and integrate this text editor.

00:32:11.300 --> 00:32:14.100

Yeah, so let's talk about that piece of it.

00:32:14.100 --> 00:32:17.940

So you built a text editor that's an app, Runestone,

00:32:17.940 --> 00:32:19.540

which is like a plain text editor.

00:32:19.540 --> 00:32:23.220

And I feel like the main feature sort of is,

00:32:23.220 --> 00:32:26.820

you know, it's a nice text editor that has syntax highlighting

00:32:26.820 --> 00:32:29.300

for all these different languages.

00:32:29.300 --> 00:32:35.300

But part of this also is you released an open source library

00:32:35.300 --> 00:32:36.740

also called Runestone, correct?

00:32:37.300 --> 00:32:42.100

Yeah, again, intentionally confusing and apparently a bad idea

00:32:42.100 --> 00:32:44.500

to release an app and a framework under the same name.

00:32:44.500 --> 00:32:49.620

But what was the idea behind open sourcing that?

00:32:49.620 --> 00:32:52.580

It was always meant to be open source.

00:32:52.580 --> 00:32:54.420

Actually, I never meant to build an app.

00:32:54.420 --> 00:32:59.620

At least I never meant to build a text editor that should be published on the App Store.

00:32:59.620 --> 00:33:04.660

So from day one, I wanted to build a framework and I wanted it to be open source.

00:33:04.660 --> 00:33:06.700

before I started building RuneStone,

00:33:06.700 --> 00:33:10.860

I had of course researched if there were other similar frameworks.

00:33:10.860 --> 00:33:12.780

Right.

00:33:12.780 --> 00:33:13.980

And there were none back then.

00:33:13.980 --> 00:33:17.860

I mean, there were some, but they just didn't do what I wanted them to do.

00:33:17.860 --> 00:33:20.500

And some of them weren't that performant.

00:33:20.500 --> 00:33:24.500

It's quite difficult to get syntax highlighting performant

00:33:24.500 --> 00:33:25.900

in a text editor on iOS.

00:33:25.900 --> 00:33:26.900

Yeah, for sure.

00:33:26.900 --> 00:33:29.460

So I thought I needed to tackle that.

00:33:29.460 --> 00:33:32.100

And then my thinking was, like,

00:33:32.100 --> 00:33:36.360

If I have a need for an open-source text editor

00:33:36.360 --> 00:33:38.860

with syntax highlighting, line numbers, and so on,

00:33:38.860 --> 00:33:42.360

then probably others will need it as well, so I should open-source it.

00:33:42.360 --> 00:33:44.060

Yeah, so that was always the idea.

00:33:44.060 --> 00:33:46.960

And then, of course, when you have an open-source framework...

00:33:46.960 --> 00:33:50.060

I'm saying "of course," but it's quite common, at least.

00:33:50.060 --> 00:33:53.260

When you have an open-source framework, you also have an example app

00:33:53.260 --> 00:33:56.260

that shows, one, what does this framework do,

00:33:56.260 --> 00:33:58.260

and two, how can you integrate it?

00:33:58.960 --> 00:34:03.960

So RuneStone was really just the example project back then.

00:34:03.960 --> 00:34:07.520

That's how I tested it myself.

00:34:07.520 --> 00:34:09.240

That's how I played around with it.

00:34:09.240 --> 00:34:12.040

- And so the idea was really that you,

00:34:12.040 --> 00:34:13.720

it was more about building the library

00:34:13.720 --> 00:34:17.480

that you could then bring into Scriptable or JSON.

00:34:17.480 --> 00:34:20.040

And the app was just the sample project.

00:34:20.040 --> 00:34:20.880

- Totally.

00:34:20.880 --> 00:34:21.960

- Huh.

00:34:21.960 --> 00:34:22.800

- Yeah, totally.

00:34:22.800 --> 00:34:26.240

I had no intentions of releasing a standalone text editor.

00:34:26.240 --> 00:34:28.720

But as I progressed, as I built features

00:34:28.720 --> 00:34:31.720

into the framework and build them into the example app.

00:34:31.720 --> 00:34:37.420

I just one day looked at it and found that I kind of built a text editor

00:34:37.420 --> 00:34:40.120

that I wish existed for iOS.

00:34:40.120 --> 00:34:43.120

There are great text editors already.

00:34:43.120 --> 00:34:45.720

Textastic is great. There's one named Codex.

00:34:45.720 --> 00:34:48.320

And there are different text editors.

00:34:48.320 --> 00:34:52.920

Back then, when I had this realization, and I still think to this day,

00:34:52.920 --> 00:34:56.320

none of the text editors are using the...

00:34:56.320 --> 00:34:59.120

What's it called? The UI document browser view controller.

00:34:59.120 --> 00:35:02.480

You know, this component that gives you basically the files app.

00:35:02.480 --> 00:35:05.200

It's like a file-based app. Like when you open the app,

00:35:05.200 --> 00:35:12.800

it opens up Finder, or not Finder, files. And yeah, that's sort of the driving force

00:35:12.800 --> 00:35:14.320

behind the app. Yeah, exactly.

00:35:14.320 --> 00:35:20.480

And I built my example project on that because, I mean, I didn't really want to deal with,

00:35:20.480 --> 00:35:24.160

you know, browsing files and having a document picker and so on.

00:35:25.920 --> 00:35:29.420

And then I just found that this is a quite nice way to browse

00:35:29.420 --> 00:35:32.420

and open your plain text files.

00:35:32.420 --> 00:35:35.420

I think it's a good way to...

00:35:35.420 --> 00:35:41.120

If you receive a text file from Slack and you save it in the Files app,

00:35:41.120 --> 00:35:44.720

it will automatically appear under Recent or...

00:35:44.720 --> 00:35:47.520

I'm saying Slack, it could be from anywhere.

00:35:47.520 --> 00:35:51.720

The Files app has these ways of surfacing files that you might want to use.

00:35:51.720 --> 00:35:54.220

I thought that works quite well for me.

00:35:54.220 --> 00:35:56.220

So I decided to release it.

00:35:56.220 --> 00:36:02.220

So did you release RuneStone the library and RuneStone the app together?

00:36:02.220 --> 00:36:07.220

Yeah, they were released together back in May.

00:36:07.220 --> 00:36:09.220

I think they were released on the same day.

00:36:09.220 --> 00:36:10.220

Yeah.

00:36:10.220 --> 00:36:14.220

And how did that... I guess let's focus first on the app itself.

00:36:14.220 --> 00:36:16.220

How did that go? Was it received well?

00:36:16.220 --> 00:36:20.220

Does there seem like there was kind of a market of people that were looking for something similar?

00:36:20.220 --> 00:36:24.220

So I think it was received well for a text editor

00:36:24.220 --> 00:36:25.920

because in the end, it's just a text editor.

00:36:25.920 --> 00:36:30.120

And it's not a problem that hasn't been solved on iOS before.

00:36:30.120 --> 00:36:31.320

So it's not like...

00:36:31.320 --> 00:36:35.420

In that sense, there's not much novelty.

00:36:35.420 --> 00:36:40.520

Yeah, it's hard to tell a story in terms of press or getting attention.

00:36:40.520 --> 00:36:46.520

Exactly. So I think the story that I told was kind of similar to Scriptable.

00:36:46.520 --> 00:36:48.420

I just tweeted about the development.

00:36:48.420 --> 00:36:52.820

I was very open about this thing that I built and showed people the progress

00:36:52.820 --> 00:36:56.820

from day one that I started my open-source framework,

00:36:56.820 --> 00:36:59.620

and then throughout the development.

00:36:59.620 --> 00:37:02.920

And then at some point, I think six months or so

00:37:02.920 --> 00:37:05.620

after I started developing the open-source framework,

00:37:05.620 --> 00:37:09.120

I found that I wanted to release this app at some point,

00:37:09.120 --> 00:37:10.620

and I started a beta.

00:37:10.620 --> 00:37:15.620

And I think the app was actually in beta on TestFlight for a year, over a year.

00:37:15.620 --> 00:37:16.620

Oh, man.

00:37:16.620 --> 00:37:24.860

And throughout that year, I had also gathered some kind of audience and people were already

00:37:24.860 --> 00:37:29.260

using the app and were used to using the app.

00:37:29.260 --> 00:37:36.900

So I think just beta testing an app on TestFlight is sort of like a soft launch.

00:37:36.900 --> 00:37:39.380

Yeah, exactly.

00:37:39.380 --> 00:37:40.860

At least it can be.

00:37:40.860 --> 00:37:42.600

And I had done that for a year.

00:37:42.600 --> 00:37:48.160

So when I decided to launch it, I already had some people who could talk kindly about

00:37:48.160 --> 00:37:55.360

the app and who had already tried it and who are very kind to tweet and blog about it and

00:37:55.360 --> 00:37:57.420

so on.

00:37:57.420 --> 00:38:02.600

So in that sense, the launch was quite simple, actually.

00:38:02.600 --> 00:38:07.380

I felt like I had already, to some degree, I felt like I had already launched it.

00:38:07.380 --> 00:38:08.680

It just wasn't on the app store.

00:38:08.680 --> 00:38:09.680

Yeah.

00:38:09.680 --> 00:38:11.400

It's less stressful, right?

00:38:11.400 --> 00:38:14.760

Because it's not like...

00:38:14.760 --> 00:38:18.540

You've already had so many people looking at it that the at least really obvious rough

00:38:18.540 --> 00:38:20.740

corners had already been rounded out.

00:38:20.740 --> 00:38:24.840

And so there's a little bit less stress that all these people are going to see it for the

00:38:24.840 --> 00:38:31.480

very first time and who knows what bugs or hidden problems or whatever are hiding there.

00:38:31.480 --> 00:38:34.480

Yeah, yeah, exactly.

00:38:34.480 --> 00:38:38.440

It also means that you can't really do your big bang launch, right?

00:38:38.440 --> 00:38:43.940

where you're just surprising some people and having a big splash in that sense.

00:38:43.940 --> 00:38:46.540

But that was not really my intention.

00:38:46.540 --> 00:38:49.940

Again, I never really intended to build an app and release it until later,

00:38:49.940 --> 00:38:53.940

and I didn't really solve a new problem here and so on.

00:38:53.940 --> 00:38:56.940

So I think this was actually a quite good way to do it

00:38:56.940 --> 00:39:00.240

because it grew the user base slowly,

00:39:00.240 --> 00:39:03.440

and I felt pretty confident with the thing that I actually ended up launching,

00:39:03.440 --> 00:39:05.940

as you mentioned, because I already had...

00:39:06.440 --> 00:39:09.040

I ended up with quite a lot of people on the beta,

00:39:09.040 --> 00:39:13.080

just because I think it was during the same period,

00:39:13.080 --> 00:39:17.240

if I remember correctly, that Apple introduced these public test flight links.

00:39:17.240 --> 00:39:19.480

Or maybe it was actually the other thing before then.

00:39:19.480 --> 00:39:23.580

But I think it was the first time that I really tried the public test flight links.

00:39:23.580 --> 00:39:29.120

And I just tweeted those and sent those to people.

00:39:29.120 --> 00:39:31.520

And I didn't set a limit on how many could join

00:39:31.520 --> 00:39:33.320

until a bit later in the process.

00:39:33.360 --> 00:39:38.560

I think the first few days there were a limit while I was like smoothing out the rough edges.

00:39:38.560 --> 00:39:43.920

I didn't want a lot of people on it. But then throughout the beta, I just opened it up to

00:39:43.920 --> 00:39:48.640

a lot of people. So I ended up with a lot of people on my beta. Yeah.

00:39:48.640 --> 00:39:52.960

Yeah, I definitely think that that's... I understand there's different reasons for

00:39:52.960 --> 00:39:59.440

different choices for people. But for me, having as big of a beta as I can get before a launch has

00:39:59.440 --> 00:40:02.440

has been really nice, if anything, for my peace of mind.

00:40:02.440 --> 00:40:04.840

But then also, like you said, it's sort of like,

00:40:04.840 --> 00:40:09.320

you know, it builds a little bit of an audience,

00:40:09.320 --> 00:40:12.180

and if some of those people tweet about it

00:40:12.180 --> 00:40:14.640

or talk to people they know about it or whatever,

00:40:14.640 --> 00:40:19.660

that can help make that launch a little bit more of a thing.

00:40:19.660 --> 00:40:23.280

- I also definitely recommend that you have

00:40:23.280 --> 00:40:25.560

as big a beta as you can get, basically,

00:40:25.560 --> 00:40:27.520

because as you mentioned, it is really,

00:40:29.200 --> 00:40:32.000

It's great for your own peace of mind that once you hit the App Store,

00:40:32.000 --> 00:40:34.400

all the rough edges have been smoothed out.

00:40:34.400 --> 00:40:37.500

And I also think it's a pretty good strategy

00:40:37.500 --> 00:40:42.100

to launch and soft launch an app these days

00:40:42.100 --> 00:40:45.600

because as an app developer, at least I found that for me,

00:40:45.600 --> 00:40:47.800

and I think for most others as well,

00:40:47.800 --> 00:40:50.600

it is quite difficult to get some coverage for your app

00:40:50.600 --> 00:40:53.300

if you're just launching it all of a sudden.

00:40:53.300 --> 00:40:57.700

There aren't that many media writing about apps anymore.

00:40:57.700 --> 00:41:00.460

There are some, and they're doing us all,

00:41:00.460 --> 00:41:01.960

all the developers, a huge favor.

00:41:01.960 --> 00:41:03.020

- Yes. (laughs)

00:41:03.020 --> 00:41:04.100

- That's so kind.

00:41:04.100 --> 00:41:06.740

But actually having a test flight and a big test flight

00:41:06.740 --> 00:41:08.380

and growing an audience before a launch

00:41:08.380 --> 00:41:11.660

is a way to get some people speaking about your app

00:41:11.660 --> 00:41:12.940

the day that you launch.

00:41:12.940 --> 00:41:15.700

- Yeah, another thing I've done too is,

00:41:15.700 --> 00:41:19.780

on launch day, I'll push a test flight update

00:41:19.780 --> 00:41:23.300

that's specific to test flight that pops up a banner

00:41:23.300 --> 00:41:25.100

that's basically like, "Hey, I'm not taking it away

00:41:25.100 --> 00:41:30.100

right now, but like this thing came out would be great if you shared this with people and

00:41:30.100 --> 00:41:31.260

you know, it had links or whatever.

00:41:31.260 --> 00:41:32.820

Oh, yeah, that's a great idea.

00:41:32.820 --> 00:41:36.380

I don't know how effective that really is, but it's another sort of marketing channel,

00:41:36.380 --> 00:41:37.380

at least potentially.

00:41:37.380 --> 00:41:38.380

Yeah, it's a great idea.

00:41:38.380 --> 00:41:39.380

I never thought of that.

00:41:39.380 --> 00:41:42.580

But that's a super good tip.

00:41:42.580 --> 00:41:46.660

So that was runestone the app, but runestone the library itself.

00:41:46.660 --> 00:41:48.140

How did that launch go?

00:41:48.140 --> 00:41:49.860

Has it found somewhat of an audience?

00:41:49.860 --> 00:41:52.540

Are there people like using it that you know about already?

00:41:52.540 --> 00:41:53.620

Yeah.

00:41:53.620 --> 00:41:59.200

I mean, it's the first time that I launched an open source framework that I really feel

00:41:59.200 --> 00:42:01.780

like I've put some effort into at least.

00:42:01.780 --> 00:42:07.800

I mean, I have other small open source frameworks, but this one I feel like that was properly

00:42:07.800 --> 00:42:10.580

documented and I had a nice readme.

00:42:10.580 --> 00:42:12.620

And it's a quite complex project.

00:42:12.620 --> 00:42:15.100

Yeah, it's a big thing.

00:42:15.100 --> 00:42:16.100

Yeah.

00:42:16.100 --> 00:42:20.260

So that really felt like launching something.

00:42:20.260 --> 00:42:23.660

when I've open sourced a project, it didn't really feel like launching anything.

00:42:23.660 --> 00:42:25.660

It's just like putting something out in the void.

00:42:25.660 --> 00:42:29.700

But this was actually a launch, but I had nothing to compare it against.

00:42:29.700 --> 00:42:31.060

I've never done it before.

00:42:31.060 --> 00:42:33.060

But people were really...

00:42:33.060 --> 00:42:37.860

Some people were more interested in the project than I had thought.

00:42:37.860 --> 00:42:42.060

I mean, I think I once again, I thought that I would launch this out into the void.

00:42:42.060 --> 00:42:45.380

And then maybe in a year or two, some people will find it and think,

00:42:45.380 --> 00:42:48.940

"Oh, this is the framework that I need," you know, randomly.

00:42:48.940 --> 00:42:54.660

but it turned out that that need that I thought would be there at some point

00:42:54.660 --> 00:42:57.460

was maybe a bit bigger than I thought.

00:42:57.460 --> 00:43:02.260

So already from before I open sourced my project,

00:43:02.260 --> 00:43:07.140

I had people write to me that they were intending to integrate it into their app.

00:43:07.140 --> 00:43:09.260

- Oh, wow. - And they were eager to try it out.

00:43:09.260 --> 00:43:13.260

Was that a little scary too? Like, obviously exciting, but...

00:43:13.260 --> 00:43:15.460

- A little bit of pressure? - That's a lot of pressure.

00:43:15.460 --> 00:43:18.460

It was like super intimidating because all of a sudden,

00:43:18.460 --> 00:43:22.460

All of a sudden, I knew that there would be people looking at my code.

00:43:22.460 --> 00:43:24.460

Oh, yeah. I didn't even think about that.

00:43:24.460 --> 00:43:26.460

I don't know if they're actually looking at it.

00:43:26.460 --> 00:43:29.460

I can't know if they're looking at it, but at least they have the opportunity to look at it.

00:43:29.460 --> 00:43:30.460

Right, right.

00:43:30.460 --> 00:43:32.460

If they want to. And that's super intimidating.

00:43:32.460 --> 00:43:36.460

That put a lot of additional stress on the development.

00:43:36.460 --> 00:43:43.460

I was writing a small hack or doing something that I knew was a little bit

00:43:43.460 --> 00:43:47.260

an ugly workaround or so, I always felt like,

00:43:47.260 --> 00:43:48.960

how am I gonna communicate this to people?

00:43:48.960 --> 00:43:51.700

Like, how am I gonna put this in the documentation?

00:43:51.700 --> 00:43:53.940

Am I-- - Yeah, that's interesting.

00:43:53.940 --> 00:43:56.340

- I felt like that was a bit more,

00:43:56.340 --> 00:43:59.700

it was, yeah, I felt like it was a bit more intimidating.

00:43:59.700 --> 00:44:01.540

But it was, at the same time, it was super nice

00:44:01.540 --> 00:44:04.180

to know that there would be people who were interested.

00:44:04.180 --> 00:44:06.140

- Yeah, for sure. - That it wasn't just

00:44:06.140 --> 00:44:10.400

something that I believed, but that I had tangible proof,

00:44:10.400 --> 00:44:15.100

just in form, just as you know, messages and so on,

00:44:15.100 --> 00:44:18.400

that people were interested in to some degree.

00:44:18.400 --> 00:44:22.400

I actually did a small beta of the open source framework as well.

00:44:22.400 --> 00:44:28.200

I contacted some of these people that had told me that they wanted to integrate it

00:44:28.200 --> 00:44:34.100

and just had them play around with it for, I think, a week or two before I open sourced it.

00:44:34.100 --> 00:44:36.700

Again, just to smooth out the edges

00:44:36.700 --> 00:44:41.700

and give myself a chance to receive some of the questions

00:44:41.700 --> 00:44:45.100

that people would just have on day one,

00:44:45.100 --> 00:44:48.560

have those answered if I could.

00:44:48.560 --> 00:44:49.760

- Right, exactly.

00:44:49.760 --> 00:44:52.780

So you're prepared with a smaller group size.

00:44:52.780 --> 00:44:53.760

- Yeah, exactly.

00:44:53.760 --> 00:44:55.200

But yeah, then when I open sourced it,

00:44:55.200 --> 00:44:59.700

it turned out like, I think just a few weeks later,

00:44:59.700 --> 00:45:02.080

the first apps were out that were using it,

00:45:02.080 --> 00:45:02.920

besides my own.

00:45:02.920 --> 00:45:04.300

- Oh, that's cool.

00:45:04.300 --> 00:45:06.200

- So that was super cool.

00:45:06.200 --> 00:45:07.920

And then after a few months,

00:45:07.920 --> 00:45:11.440

some of the mobile team from GitHub wrote me

00:45:11.440 --> 00:45:13.760

that they were integrating it.

00:45:13.760 --> 00:45:15.120

- Whoa! - So that's also super cool.

00:45:15.120 --> 00:45:20.120

So yeah, it has been quite good

00:45:20.120 --> 00:45:21.920

for the open source framework.

00:45:21.920 --> 00:45:24.880

- Yeah, seriously, that's like the,

00:45:24.880 --> 00:45:26.800

that's kind of the ultimate, you know,

00:45:26.800 --> 00:45:30.760

I mean, how many people are viewing code in,

00:45:30.760 --> 00:45:32.720

or editing code in the GitHub app?

00:45:32.720 --> 00:45:36.040

Like, that's gotta be one of the bigger iOS apps

00:45:36.040 --> 00:45:38.680

in existence for people doing that thing?

00:45:38.680 --> 00:45:39.520

- Yeah, probably.

00:45:39.520 --> 00:45:41.340

I mean, I don't know the user base,

00:45:41.340 --> 00:45:43.600

but I do remember like a year ago

00:45:43.600 --> 00:45:45.720

when I was talking with some of my friends,

00:45:45.720 --> 00:45:48.080

they're like, "Why are you open sourcing this?

00:45:48.080 --> 00:45:48.920

What do you imagine?"

00:45:48.920 --> 00:45:50.000

And I said, "Nothing."

00:45:50.000 --> 00:45:53.800

But I mean, it would be cool if someone like GitHub

00:45:53.800 --> 00:45:54.640

would use it one day.

00:45:54.640 --> 00:45:56.800

I remember myself saying that sentence

00:45:56.800 --> 00:45:58.080

and not really believing it.

00:45:58.080 --> 00:46:01.920

And then to this day, it turns out that they are.

00:46:01.920 --> 00:46:03.680

So that's great.

00:46:03.680 --> 00:46:04.920

- That's so cool.

00:46:04.920 --> 00:46:11.640

Sweet. Well, I mean, it's been fun watching you do this. And actually, I don't know if

00:46:11.640 --> 00:46:16.360

you want to talk about it at all, but I feel like you're in the midst of essentially one

00:46:16.360 --> 00:46:22.280

of these stories again right now. You are yet again building something that seems kind

00:46:22.280 --> 00:46:29.120

of crazy. It doesn't even have a name yet, right? This is your like JavaScript to Swift

00:46:29.120 --> 00:46:31.120

UI project that you're building?

00:46:31.120 --> 00:46:34.320

Yeah, I mean, that is the name right now.

00:46:34.320 --> 00:46:38.120

I mean, of course, one day I might...

00:46:38.120 --> 00:46:41.320

It's no secret, if this project goes well,

00:46:41.320 --> 00:46:44.720

it would be natural to integrate it into Scriptable.

00:46:44.720 --> 00:46:46.720

Yeah.

00:46:46.720 --> 00:46:48.320

That would make sense.

00:46:48.320 --> 00:46:52.120

So I guess that's the long-term goal.

00:46:52.120 --> 00:46:54.320

But right now, it is like an exploration of

00:46:54.320 --> 00:46:59.320

what else can I do in the space of JavaScript,

00:47:00.520 --> 00:47:03.220

JavaScript bridged to Swift.

00:47:03.220 --> 00:47:04.920

That was like the idea of Scriptable, right?

00:47:04.920 --> 00:47:06.720

JavaScript bridged to Swift.

00:47:06.720 --> 00:47:08.520

Or actually, the other way around, right?

00:47:08.520 --> 00:47:12.920

Swift frameworks and APIs bridged to JavaScript.

00:47:12.920 --> 00:47:14.520

- Right. - Yeah.

00:47:14.520 --> 00:47:16.420

That's the way.

00:47:16.420 --> 00:47:19.420

And then...

00:47:19.420 --> 00:47:22.920

tying a little into what we briefly touched upon earlier,

00:47:22.920 --> 00:47:26.920

Shortcuts doesn't really have this sense of building UIs.

00:47:26.920 --> 00:47:30.120

So I thought it would be fun to, like,

00:47:30.120 --> 00:47:36.120

investigate and research if it's possible to bridge SwiftUI to JavaScript

00:47:36.120 --> 00:47:38.120

through JavaScript Core.

00:47:38.120 --> 00:47:41.120

So that's a project that I've been...

00:47:41.120 --> 00:47:44.620

that actually, I think, again, it started like a year ago

00:47:44.620 --> 00:47:49.120

and then it's been like just sitting on a shelf as I wrapped up RuneStone.

00:47:49.120 --> 00:47:55.120

But then now that RuneStone is like out and lives and has its own life,

00:47:55.120 --> 00:47:59.120

I've picked up this project again and made some progress.

00:47:59.120 --> 00:48:04.840

I was just gonna say if any like if these stories of of Simon talking about building

00:48:04.840 --> 00:48:08.720

these things and talking about it online if that sounds interesting to you you have a

00:48:08.720 --> 00:48:13.200

chance to watch him do it right now like it has been really fun watching you on Twitter

00:48:13.200 --> 00:48:19.620

and often just being like oh my gosh this guy's very brave you are you are like definitely

00:48:19.620 --> 00:48:25.240

becoming the master of JavaScript and the intersection of JavaScript and Swift but it's

00:48:25.240 --> 00:48:29.320

It's so much fun watching you in these phases where you're clearly

00:48:29.320 --> 00:48:33.880

very excited about something technical and you don't quite know exactly where

00:48:33.880 --> 00:48:34.880

it's all going to land yet.

00:48:34.880 --> 00:48:37.840

You're just discovering and being very,

00:48:37.840 --> 00:48:39.880

very open and talking about it constantly.

00:48:39.880 --> 00:48:43.160

And it was really fun watching you do that with runestone.

00:48:43.160 --> 00:48:47.000

It's been fun watching you do that in, I didn't see the beginning of it,

00:48:47.000 --> 00:48:49.360

but with scriptable, there's been lots of phases of it that have been fun.

00:48:49.360 --> 00:48:52.280

And I kind of feel like I'm watching it again with this,

00:48:52.280 --> 00:48:54.720

with this project right now, which who knows if it'll go anywhere,

00:48:54.720 --> 00:48:57.120

but it's a fun journey to watch either way.

00:48:57.120 --> 00:49:00.120

Yeah, sure. I'm super glad to hear that.

00:49:00.120 --> 00:49:03.220

I really enjoy building things in the open, as they say.

00:49:03.220 --> 00:49:06.020

I think it's just a fun way to build software

00:49:06.020 --> 00:49:08.620

because you get a lot of inputs,

00:49:08.620 --> 00:49:13.520

and especially with this project of bridging SwiftUI to JavaScript,

00:49:13.520 --> 00:49:16.020

two parts that I know very little about.

00:49:16.020 --> 00:49:17.920

I don't have much experience with SwiftUI,

00:49:17.920 --> 00:49:24.120

and I certainly don't have much experience writing production-ready JavaScript.

00:49:24.120 --> 00:49:30.280

So it's just fun to put it out there and hear, get some feedback from both sides.

00:49:30.280 --> 00:49:38.200

I've gotten some really, really valuable feedback from both sides that has shaped the project

00:49:38.200 --> 00:49:43.560

or the project and the APIs that I'm working with these days.

00:49:43.560 --> 00:49:50.680

And that's true for this JavaScript to SwiftUI project, or again, the other way around, really,

00:49:50.680 --> 00:49:51.720

depending on how you look at it.

00:49:53.160 --> 00:49:58.440

But it's true for that project, and it was also true for Scriptable.

00:49:58.440 --> 00:50:00.840

Back then, I had zero knowledge of JavaScript,

00:50:00.840 --> 00:50:06.040

other than just fiddling around with my own CLIs written in Node.js.

00:50:06.040 --> 00:50:11.800

But I didn't really know what would work in the JavaScript world in terms of APIs.

00:50:11.800 --> 00:50:16.440

So if people can, I definitely recommend building things in the open.

00:50:16.440 --> 00:50:20.760

I also understand that some people want to keep their projects a secret, but...

00:50:22.040 --> 00:50:24.520

Yeah, that's never really been my thing.

00:50:24.520 --> 00:50:27.480

Before we wrap up, I do want to ask you the question

00:50:27.480 --> 00:50:30.000

that I ask everybody at the end of the show, which is,

00:50:30.000 --> 00:50:32.680

what's a person or people out there that have inspired you

00:50:32.680 --> 00:50:35.400

and your work that you'd recommend others check out?

00:50:35.400 --> 00:50:39.360

Yeah, this was a super hard one to prepare for.

00:50:39.360 --> 00:50:44.480

'Cause I don't really, I don't feel like I can point

00:50:44.480 --> 00:50:47.640

at one person or any person really,

00:50:47.640 --> 00:50:50.440

and that's not to say that no one is inspiring me.

00:50:50.440 --> 00:50:52.960

It's right to say that there are lots of people.

00:50:52.960 --> 00:50:55.240

It's not like I don't really have one person

00:50:55.240 --> 00:50:59.240

where I feel like this person is like,

00:50:59.240 --> 00:51:01.640

that's who I want to be, they inspire me.

00:51:01.640 --> 00:51:02.680

Yeah, yeah.

00:51:02.680 --> 00:51:05.440

It's more like something that they do.

00:51:05.440 --> 00:51:09.200

So like, if you asked me this question 10 years ago,

00:51:09.200 --> 00:51:12.040

I would say that anyone who lives off...

00:51:12.040 --> 00:51:16.440

who can make a living of making iOS apps,

00:51:16.440 --> 00:51:18.440

they inspire me.

00:51:18.480 --> 00:51:21.780

If you asked me 20 years ago, or 15 years ago,

00:51:21.780 --> 00:51:26.580

I would say anyone who makes a living of making software, they inspire me.

00:51:26.580 --> 00:51:29.380

So it's always something people do.

00:51:29.380 --> 00:51:32.380

And then I can dive into these...

00:51:32.380 --> 00:51:38.180

and have these periods of time throughout a year

00:51:38.180 --> 00:51:41.880

where there is one specific person who inspires me.

00:51:41.880 --> 00:51:45.280

And again, that's because of something really specific that they've done.

00:51:45.280 --> 00:51:50.080

I remember earlier this year it was a person named Marc Sieman

00:51:50.080 --> 00:51:54.000

who's been very vocal around design patterns

00:51:54.000 --> 00:52:00.160

and challenging some of the design patterns presented by Martin Fowler.

00:52:00.160 --> 00:52:05.360

And then I had a month where I just dived deep into the work of Marc Sieman.

00:52:05.360 --> 00:52:07.440

And everyone who would hear me talk about it,

00:52:07.440 --> 00:52:08.800

I would just talk with them about it.

00:52:08.800 --> 00:52:12.080

"Oh, do you know this guy named Marc Sieman? He does this and that."

00:52:12.080 --> 00:52:16.960

But that's again for some very particular things that he made that I really believed in.

00:52:16.960 --> 00:52:18.400

And I still have it to this day.

00:52:18.400 --> 00:52:25.760

I mean, you're an inspiration to me for doing this podcast and like Christian Sielig for

00:52:25.760 --> 00:52:35.440

doing these funny things in his apps, like this PixelPale thing, making that work.

00:52:35.440 --> 00:52:37.680

I mean, that really inspires me.

00:52:37.680 --> 00:52:41.520

That's something that I hope to do with my apps one day as well.

00:52:41.520 --> 00:52:49.120

Well, can I make a serious app somehow and then making this fun twist on top of it?

00:52:49.120 --> 00:52:54.560

That is also technically challenging and impressive from a technical perspective,

00:52:54.560 --> 00:52:59.360

even though it's this goofy, delightful thing embedded in an app.

00:52:59.360 --> 00:53:03.920

Oh yeah, sure. It's definitely not easy to do what Christian did.

00:53:03.920 --> 00:53:09.920

But yeah, so it's difficult to point at particular persons.

00:53:09.920 --> 00:53:16.640

I guess I did that anyways, but it's like, I feel like every day it's a new person because

00:53:16.640 --> 00:53:20.240

then I tweet something where I'm like, "Oh, this is super cool. I want to do that.

00:53:20.240 --> 00:53:21.680

I want to do what they have done."

00:53:21.680 --> 00:53:26.800

Yeah. It's almost like the answer is the community, in a sense.

00:53:26.800 --> 00:53:34.320

It feels weird on this day. Today is November 15th. So at this point, at least, Twitter is

00:53:34.320 --> 00:53:40.920

still alive. And so Twitter, you know, that, that sort of world of, of people

00:53:40.920 --> 00:53:44.920

that are openly talking about the things that they build. This is something I

00:53:44.920 --> 00:53:49.480

found in the iOS community in particular, really inspiring is like a lot of

00:53:49.480 --> 00:53:53.220

people talking about what they're working on. Like I've, cause I came from

00:53:53.220 --> 00:53:56.560

the web world and lots of people talk openly about technical things they're

00:53:56.560 --> 00:54:01.480

working on, but like the product side and all of the different pieces all

00:54:01.480 --> 00:54:03.480

coming together and people being really open about that.

00:54:03.480 --> 00:54:10.400

The iOS community in general, for whatever reason, has this sort of general vibe of

00:54:10.400 --> 00:54:15.360

people just being really open and talking a lot about what they're doing.

00:54:15.360 --> 00:54:17.100

And I, yeah, I've, I find the same way.

00:54:17.100 --> 00:54:19.080

Like I ha I could have a list.

00:54:19.080 --> 00:54:24.160

Well, I could have a list 50 people long, uh, as this podcast maybe shows of people

00:54:24.160 --> 00:54:26.900

who've like been big inspirations for me.

00:54:27.380 --> 00:54:32.000

And like you said, it's like, there are times when I'm really into a particular

00:54:32.000 --> 00:54:37.700

person, um, like recently, uh, Daniel Gauthier with, uh, with up ahead.

00:54:37.700 --> 00:54:38.600

Oh yeah.

00:54:38.600 --> 00:54:43.180

Like, I just want everything about that to be things that I'm doing, but I've had

00:54:43.180 --> 00:54:47.880

lots of people, you know, my career or throughout my iOS time that have been

00:54:47.880 --> 00:54:51.460

like that, and you can probably see pieces of all that in my app.

00:54:51.460 --> 00:54:54.880

It's like a tapestry of these different people I've been obsessed with over time.

00:54:54.880 --> 00:54:55.540

Yeah.

00:54:55.540 --> 00:54:56.000

Yeah.

00:54:56.000 --> 00:55:03.240

up ahead, that's really a great app. Yeah, I mean, it's difficult to time to talk about

00:55:03.240 --> 00:55:08.720

things like Twitter and so on and the iOS community, because as you mentioned, yeah,

00:55:08.720 --> 00:55:12.040

Twitter is still alive. I don't know about you, I haven't checked it within the last

00:55:12.040 --> 00:55:14.840

one and a half hour while we've been chatting, but...

00:55:14.840 --> 00:55:18.680

Right, it might not be there when we shut down.

00:55:18.680 --> 00:55:28.200

Exactly. But yeah, I think you have a good point. It's a good way of phrasing it, the

00:55:28.200 --> 00:55:34.840

one you just had, of saying that the iOS community is their inspiration here. Because that is

00:55:34.840 --> 00:55:40.600

a community that I don't believe you find something... You might find something like

00:55:40.600 --> 00:55:46.480

it, but you don't find something exactly like that for many other platforms. I have some

00:55:46.480 --> 00:55:49.680

I have some friends who build apps for Android.

00:55:49.680 --> 00:55:56.000

Yeah, I have friends who build apps for Android, and they're looking at the iOS community saying

00:55:56.000 --> 00:56:00.880

that there is something special here that they feel like they're missing out on.

00:56:00.880 --> 00:56:04.680

Of course, they're also going to conferences and meeting people.

00:56:04.680 --> 00:56:09.480

But I think we have the benefit when we meet in real life, we've usually talked before

00:56:09.480 --> 00:56:11.360

that on Twitter.

00:56:11.360 --> 00:56:14.240

It feels like people already know each other somehow.

00:56:14.240 --> 00:56:17.100

And I don't think you have that feeling in many other communities.

00:56:17.100 --> 00:56:21.120

And that is because we share a lot of our work.

00:56:21.120 --> 00:56:26.500

And that's just like, it's a difficult thing to talk about because like, for all we know,

00:56:26.500 --> 00:56:27.920

in a week, we might not have this.

00:56:27.920 --> 00:56:29.880

Or maybe it's on another platform.

00:56:29.880 --> 00:56:30.880

Or yeah.

00:56:30.880 --> 00:56:35.600

Yeah, the good news is the people, the people are there.

00:56:35.600 --> 00:56:42.360

That I, you know, I wasn't part of the Apple development community until more recently.

00:56:42.360 --> 00:56:52.040

Like I've talked to a lot of people who have been and a lot of people talk about like panic and the sort of delicious app generation as a similar kind of feel.

00:56:52.040 --> 00:56:53.200

They didn't have Twitter.

00:56:53.200 --> 00:57:01.240

So I think I hope that the community exists if if for whatever reason, Twitter isn't where they live.

00:57:01.880 --> 00:57:10.440

I really hope that they still can find a place to continue that sort of tradition of sharing

00:57:10.440 --> 00:57:15.960

and being quirky and making fun, delightful things for the sake of making fun, delightful things and

00:57:15.960 --> 00:57:20.680

inspiring each other in some way. So yeah, we'll see where it is.

00:57:20.680 --> 00:57:25.160

I mean, there was a time before Twitter and of course, there'll be a time after Twitter,

00:57:25.160 --> 00:57:29.640

but let's see. I mean, maybe Twitter will still be a thing. I hope. I mean,

00:57:30.600 --> 00:57:34.040

I've tweeted that before and I'll mention it again.

00:57:34.040 --> 00:57:39.080

I'll be the last person to leave, not because I endorse all the things that are going on,

00:57:39.080 --> 00:57:41.720

but just because it's where people are.

00:57:41.720 --> 00:57:47.720

And it's where I get a lot of my news, at least my tech news.

00:57:47.720 --> 00:57:50.680

So it's just the place to be, right?

00:57:50.680 --> 00:57:52.280

Yep, for sure.

00:57:52.280 --> 00:57:57.720

I'm definitely scrambling around and trying to build any social graphs I can

00:57:57.720 --> 00:57:59.240

in other places, just in case.

00:57:59.240 --> 00:58:05.360

But, uh, for now, anyway, I really hope that it stays as Twitter and things

00:58:05.360 --> 00:58:07.920

stabilize in whatever form that that needs to take.

00:58:07.920 --> 00:58:09.160

That isn't horrible.

00:58:09.160 --> 00:58:14.160

Uh, that isn't hopefully like a bad thing, but you know, we'll see how it goes.

00:58:14.160 --> 00:58:14.720

We'll see.

00:58:14.720 --> 00:58:15.000

Yeah.

00:58:15.000 --> 00:58:15.440

Yeah.

00:58:15.440 --> 00:58:15.640

Yeah.

00:58:15.640 --> 00:58:21.040

I don't want to end on a, on a sad note though, uh, because Twitter, as long as

00:58:21.040 --> 00:58:24.680

it's still here, you're going to be tweeting about the, the crazy projects,

00:58:24.680 --> 00:58:27.080

uh, bringing JavaScript and Swift together.

00:58:27.760 --> 00:58:30.080

And so definitely check that out.

00:58:30.080 --> 00:58:35.680

And where should people go to find that and any other projects that you're working on?

00:58:35.680 --> 00:58:40.400

Yeah, I think the best place to find me is on Twitter right now,

00:58:40.400 --> 00:58:41.840

where I'm @simonbs.

00:58:41.840 --> 00:58:46.560

And you can also find me on simonbs.dev,

00:58:46.560 --> 00:58:52.000

where there'll be links to all my projects and other social platforms.

00:58:52.000 --> 00:58:56.000

Thanks for listening.

00:58:56.000 --> 00:59:00.960

This episode was edited by Jonathan Ruiz. If you'd like to discuss the show, you can find me

00:59:00.960 --> 00:59:07.520

on Twitter @_chuckyc or tweet the show directly @LaunchedFM. I'd really appreciate a rating or

00:59:07.520 --> 00:59:23.840

review in your podcast app of choice. And you can find show notes and more at LaunchedFM.com.

00:59:23.840 --> 00:59:26.420

(upbeat music)

00:59:26.420 --> 00:59:29.000

(upbeat music)

00:59:29.000 --> 00:59:31.580

(upbeat music)

00:59:31.580 --> 00:59:33.500

(whooshing)