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)