1
00:00:00,000 --> 00:00:11,360
Hi, you're listening to the Self-HostCast, a podcast dedicated to all things self-hosted.

2
00:00:11,360 --> 00:00:15,720
Today we're sitting down for an interview with Hayden Kodelman, the developer behind

3
00:00:15,720 --> 00:00:19,200
the popular open source projects Melee and Homebox.

4
00:00:19,200 --> 00:00:30,080
Thanks for listening.

5
00:00:30,080 --> 00:00:32,680
Hey everyone, and welcome to the Self-HostCast.

6
00:00:32,680 --> 00:00:37,200
I'm your host, Ethan Schaale, and today I'm joined by Hayden Kodelman, the developer of

7
00:00:37,200 --> 00:00:40,400
the popular self-hosted applications Melee and Homebox.

8
00:00:40,400 --> 00:00:42,680
Hayden, thanks so much for joining me today.

9
00:00:42,680 --> 00:00:44,760
Yeah, happy to be here.

10
00:00:44,760 --> 00:00:47,960
I'm really excited to talk about some of the projects you have cooking up.

11
00:00:47,960 --> 00:00:53,720
Melee, for those of you who don't know, is a recipe manager slash grocery list management

12
00:00:53,720 --> 00:01:00,040
application and Homebox, which is a personal favorite of mine, is a home inventory application

13
00:01:00,040 --> 00:01:05,780
that allows users to track various data points and information about their assets.

14
00:01:05,780 --> 00:01:09,800
But before we dive into either of those, I'd love to give you a chance to share a little

15
00:01:09,800 --> 00:01:13,840
bit about yourself and your background and maybe give the community a chance to get to

16
00:01:13,840 --> 00:01:15,400
know a little bit more about you.

17
00:01:15,400 --> 00:01:22,200
Yeah, so I've been a software developer professionally for about, I think I'm like three years now

18
00:01:22,200 --> 00:01:27,720
I've been a software developer, and I've been writing software for maybe like five years

19
00:01:27,720 --> 00:01:28,720
ish.

20
00:01:28,720 --> 00:01:34,240
I grew up kind of in Alaska and I just recently moved into the Minneapolis area.

21
00:01:34,240 --> 00:01:35,880
That's been super fun.

22
00:01:35,880 --> 00:01:41,400
So when you talk about your software development background, do you have an education software

23
00:01:41,400 --> 00:01:44,760
development or is this something you picked up on your own over time?

24
00:01:44,760 --> 00:01:48,360
Yeah, so I went to college for about two years.

25
00:01:48,360 --> 00:01:52,080
I was originally planning to get a degree in history.

26
00:01:52,080 --> 00:01:53,480
That did not work out too well.

27
00:01:53,480 --> 00:01:58,520
There's not a ton of jobs in history and it happened to coincide with some other family

28
00:01:58,520 --> 00:02:02,880
transitions my parents were leaving state so I had to like get a real job and move out

29
00:02:02,880 --> 00:02:03,960
and be on my own.

30
00:02:03,960 --> 00:02:07,960
So the timing didn't quite work out as well as I'd hoped to finish the degree so I ended

31
00:02:07,960 --> 00:02:12,640
up dropping out after two years and getting a job and building maintenance and doing that

32
00:02:12,640 --> 00:02:14,120
work for a while.

33
00:02:14,120 --> 00:02:18,240
And then I eventually kind of transitioned into building automation work and then through

34
00:02:18,240 --> 00:02:20,020
that I kind of taught myself programming.

35
00:02:20,020 --> 00:02:24,380
So I'm actually working at the same company I did the building automation stuff with doing

36
00:02:24,380 --> 00:02:28,360
software development, just climbing up the ladder as you will.

37
00:02:28,360 --> 00:02:29,900
Wow, that's incredible.

38
00:02:29,900 --> 00:02:34,760
So you're mostly self-taught when I think about or when I look at the technical details

39
00:02:34,760 --> 00:02:41,120
behind your software and the things you provide, all of that you've picked up in your own time

40
00:02:41,120 --> 00:02:42,120
as a hobby?

41
00:02:42,120 --> 00:02:43,120
Yeah, absolutely.

42
00:02:43,120 --> 00:02:48,840
I'm a little obsessive with reading books and watching courses and all kinds of stuff

43
00:02:48,840 --> 00:02:49,840
like that.

44
00:02:49,840 --> 00:02:54,720
So I spend a ridiculous amount of my time looking at a computer and reading books about

45
00:02:54,720 --> 00:02:56,200
computers.

46
00:02:56,200 --> 00:02:57,520
I do want to go back.

47
00:02:57,520 --> 00:03:01,440
So you mentioned you originally had studied history.

48
00:03:01,440 --> 00:03:02,440
That's interesting.

49
00:03:02,440 --> 00:03:07,920
Was that with the goal of maybe teaching it at some point or maybe going in a different

50
00:03:07,920 --> 00:03:09,720
direction with research of some sort?

51
00:03:09,720 --> 00:03:13,280
No, I think I kind of originally wanted to be a teacher.

52
00:03:13,280 --> 00:03:17,160
Like a high school teacher in history, my history teacher in high school was really

53
00:03:17,160 --> 00:03:19,160
impactful for me and he was a really great guy.

54
00:03:19,160 --> 00:03:21,160
And I know I just admired him a lot.

55
00:03:21,160 --> 00:03:23,000
So it was kind of like, I could do that.

56
00:03:23,000 --> 00:03:24,360
You know, that'd be nice.

57
00:03:24,360 --> 00:03:25,360
Yeah.

58
00:03:25,360 --> 00:03:30,440
So have you ever felt that way about computer science and the programming chops you've developed

59
00:03:30,440 --> 00:03:31,440
over time?

60
00:03:31,440 --> 00:03:35,520
Do you think one day you may find yourself teaching or passing that knowledge on in some

61
00:03:35,520 --> 00:03:36,520
way?

62
00:03:36,520 --> 00:03:37,520
Maybe.

63
00:03:37,520 --> 00:03:41,240
I think software development is kind of weird because you're always learning and teaching

64
00:03:41,240 --> 00:03:42,240
people.

65
00:03:42,240 --> 00:03:46,320
Like just today, I was in a call for like two hours walking this guy through some code

66
00:03:46,320 --> 00:03:47,320
that I had written.

67
00:03:47,320 --> 00:03:48,640
So there's always a little bit of that.

68
00:03:48,640 --> 00:03:52,840
And maybe that's why I like working in a team is there's always like somebody doesn't know

69
00:03:52,840 --> 00:03:54,200
how to do something and you know how to do it.

70
00:03:54,200 --> 00:03:56,800
So you jump on a call and you kind of walk them through the process and they can kind

71
00:03:56,800 --> 00:03:58,160
of pick up a little bit too.

72
00:03:58,160 --> 00:04:02,920
So it's a nice little mix of that as well, the teaching stuff.

73
00:04:02,920 --> 00:04:09,320
And what's interesting to me is that you do it full time as your full time job, but you

74
00:04:09,320 --> 00:04:13,360
also spend a lot of your time outside of work programming.

75
00:04:13,360 --> 00:04:18,080
So you must either really enjoy it or you're just a bit of a masochist.

76
00:04:18,080 --> 00:04:19,600
It's probably a little bit of both.

77
00:04:19,600 --> 00:04:20,600
Yeah.

78
00:04:20,600 --> 00:04:24,440
So like, I mean, there's two like main projects that I have that people would probably know

79
00:04:24,440 --> 00:04:25,860
me for is Homebox and Melee.

80
00:04:25,860 --> 00:04:30,880
But if you look at my GitHub, there's like, like seven other projects that I've just like,

81
00:04:30,880 --> 00:04:34,820
you know, spat out as things that I like that I use and I enjoy.

82
00:04:34,820 --> 00:04:35,880
But it's like a lot of code.

83
00:04:35,880 --> 00:04:38,120
So like, I'm writing code like literally all the time.

84
00:04:38,120 --> 00:04:39,400
It's probably not good.

85
00:04:39,400 --> 00:04:43,800
I should probably get some more hobbies, but I really like it.

86
00:04:43,800 --> 00:04:44,800
It's interesting.

87
00:04:44,800 --> 00:04:52,040
I was trying to prep earlier a bit for this recording and I was just looking through your

88
00:04:52,040 --> 00:04:58,080
GitHub pages and I noticed on one of the projects and this was maybe a couple of hours ago.

89
00:04:58,080 --> 00:05:00,920
So it's, you know, we're recording this on a Friday evening.

90
00:05:00,920 --> 00:05:04,380
I'm assuming we both work at our full time jobs today.

91
00:05:04,380 --> 00:05:08,840
And as I was browsing your GitHub, I noticed the most recent action on one of them was you

92
00:05:08,840 --> 00:05:12,740
had committed a change within the last hour or so.

93
00:05:12,740 --> 00:05:16,560
And I think to me that just kind of speaks to probably how much time you spend dedicated

94
00:05:16,560 --> 00:05:17,560
to these projects.

95
00:05:17,560 --> 00:05:18,560
Yeah.

96
00:05:18,560 --> 00:05:19,640
It's a little unhealthy.

97
00:05:19,640 --> 00:05:20,640
It's good though.

98
00:05:20,640 --> 00:05:21,640
Yeah.

99
00:05:21,640 --> 00:05:26,400
It's good for the self-hosted community and people like myself.

100
00:05:26,400 --> 00:05:30,840
So I'm not complaining, but I do hope maybe you can find some sort of balance in there,

101
00:05:30,840 --> 00:05:33,240
healthy balance, and I'm sure you can.

102
00:05:33,240 --> 00:05:40,280
But can you talk a little bit about what inspired Melee and Homebox and even some of these other

103
00:05:40,280 --> 00:05:44,720
projects you might've mentioned that you referenced with your GitHub pages?

104
00:05:44,720 --> 00:05:49,320
It's interesting when I think about the needs of the self-hosted community, occasionally

105
00:05:49,320 --> 00:05:54,680
I'll see people asking, what's your most desired piece of software that you wish someone would

106
00:05:54,680 --> 00:05:58,480
develop and inevitably there are always dozens of answers.

107
00:05:58,480 --> 00:06:01,960
And as I scroll through, I'm always thinking, hey, most of these are really good.

108
00:06:01,960 --> 00:06:06,920
I wouldn't know how to choose what to develop.

109
00:06:06,920 --> 00:06:11,680
And then I think my other problem would be once I pick something, I would struggle sticking

110
00:06:11,680 --> 00:06:13,200
with that for a long time.

111
00:06:13,200 --> 00:06:18,440
I feel like I have a little bit of ADHD when it comes to my self-hosted interests.

112
00:06:18,440 --> 00:06:21,460
So I guess that was kind of a multi-part question.

113
00:06:21,460 --> 00:06:28,080
How did you decide what to go with and how do you maintain and then persevere working

114
00:06:28,080 --> 00:06:31,040
on sticking to those and seeing them through?

115
00:06:31,040 --> 00:06:35,320
I think the important part is finding something that you care about and that you are going

116
00:06:35,320 --> 00:06:40,920
to use is a huge thing, especially if it's open source and it's free and you're not making

117
00:06:40,920 --> 00:06:42,360
money from it.

118
00:06:42,360 --> 00:06:47,720
With Melee, before I did building automation stuff and software, I worked at a catering

119
00:06:47,720 --> 00:06:52,680
company and I did a lot of baking and cooking and it's just kind of a thing I like to do.

120
00:06:52,680 --> 00:06:57,480
So having a place to put all those recipes was something I always wanted and I never

121
00:06:57,480 --> 00:06:58,480
really like...

122
00:06:58,480 --> 00:07:02,680
I do this thing that I'm sure a lot of self-hosting people do is like, I need this.

123
00:07:02,680 --> 00:07:04,280
Well, I'll just make it myself.

124
00:07:04,280 --> 00:07:08,000
Not even just thinking about like, oh, there's somebody who probably already made this or

125
00:07:08,000 --> 00:07:11,880
it already exists or I can Google recipe manager and see what's already there.

126
00:07:11,880 --> 00:07:13,400
No, didn't do any of that.

127
00:07:13,400 --> 00:07:14,480
Just straight to making it.

128
00:07:14,480 --> 00:07:17,240
And it was right around the time I was doing software development or learning software

129
00:07:17,240 --> 00:07:18,240
development.

130
00:07:18,240 --> 00:07:23,520
So it was actually like the first project I ever built and became the most successful

131
00:07:23,520 --> 00:07:25,720
project I've ever released.

132
00:07:25,720 --> 00:07:30,200
It shows if you go through the GitHub history, you can see all of the weird things that I

133
00:07:30,200 --> 00:07:32,980
started with and what it's turned into.

134
00:07:32,980 --> 00:07:37,960
But the reason I think I really stuck with it is because I picked something that I wanted

135
00:07:37,960 --> 00:07:38,960
to use.

136
00:07:38,960 --> 00:07:42,080
So I wasn't just building something like for the community, I was building something for

137
00:07:42,080 --> 00:07:45,840
myself and it also happened to benefit the community.

138
00:07:45,840 --> 00:07:47,680
Because you're going to stick with something like that.

139
00:07:47,680 --> 00:07:51,080
Like you got to find something that you care about.

140
00:07:51,080 --> 00:07:57,960
Is there, when you think about some of these projects, is there ever an end game?

141
00:07:57,960 --> 00:08:02,340
Or do you think it's the development site will always just be a work in progress?

142
00:08:02,340 --> 00:08:06,040
There always be new features that you haven't gotten around to?

143
00:08:06,040 --> 00:08:08,680
I think there's like two answers to this question.

144
00:08:08,680 --> 00:08:11,520
One of them is like all software dies, right?

145
00:08:11,520 --> 00:08:16,560
Like everything dies eventually, except maybe Windows that may live forever.

146
00:08:16,560 --> 00:08:20,880
But you know, anything in the self-hosted community, I kind of think about it just like

147
00:08:20,880 --> 00:08:22,640
it's temporary in a way.

148
00:08:22,640 --> 00:08:26,840
I was like, nobody's going to have time to work on it forever.

149
00:08:26,840 --> 00:08:30,080
So that's one thing that I think about a lot is that one day I'm just going to stop working

150
00:08:30,080 --> 00:08:32,400
on it and that's going to be the end of it.

151
00:08:32,400 --> 00:08:39,800
But the cool thing is, is that it's a community project and recently in Melee, we've been

152
00:08:39,800 --> 00:08:43,680
inching towards a V1 release, which is like the stable release that I've been promising

153
00:08:43,680 --> 00:08:44,680
for two years.

154
00:08:44,680 --> 00:08:47,240
Finally going to do it, I promise.

155
00:08:47,240 --> 00:08:52,960
And the last post I made was for the, I think the RC1, so the release candidate for the

156
00:08:52,960 --> 00:08:53,960
version one.

157
00:08:53,960 --> 00:08:54,960
So we're getting really close.

158
00:08:54,960 --> 00:08:59,720
And I kind of told everybody like, I don't use any of the new stuff that we're building.

159
00:08:59,720 --> 00:09:03,740
I'm not super interested in like where the project is going anymore.

160
00:09:03,740 --> 00:09:06,960
It's not as interesting to me of like all these features that people want.

161
00:09:06,960 --> 00:09:10,640
It's just not, my heart's not in it anymore.

162
00:09:10,640 --> 00:09:14,040
And there's not money there to be made for me.

163
00:09:14,040 --> 00:09:17,680
So I have this other project that I'm working on called Recipient, which is kind of like

164
00:09:17,680 --> 00:09:20,400
the next evolution I think of what that is.

165
00:09:20,400 --> 00:09:24,160
And we can talk more about that later, but I kind of threw that in there of like, this

166
00:09:24,160 --> 00:09:28,740
is the next thing that I'm working on and that I had a call on there for other maintainers.

167
00:09:28,740 --> 00:09:31,560
And at that point we had one other guy who was helping me maintain.

168
00:09:31,560 --> 00:09:33,400
He was doing a super great job.

169
00:09:33,400 --> 00:09:35,360
He's like really into the shopping list features.

170
00:09:35,360 --> 00:09:39,520
And after that post we got, I think two more maintainers to come online.

171
00:09:39,520 --> 00:09:43,920
And that gave me a lot of space and just made me super comfortable about like having the

172
00:09:43,920 --> 00:09:48,400
space and like, see it was really nice to have them get more maintainers to come on

173
00:09:48,400 --> 00:09:53,040
board and then I could kind of take a step back and be more of like an advisor or like,

174
00:09:53,040 --> 00:09:55,080
oh, there's like a critical hot fix or something.

175
00:09:55,080 --> 00:09:59,560
And I can step in and have like, I have, I think probably the biggest brain of the code.

176
00:09:59,560 --> 00:10:01,680
You know, I know where all the nooks and crannies are.

177
00:10:01,680 --> 00:10:05,360
It's easy for somebody to say like, this is broken and I could be like, oh yeah, it's

178
00:10:05,360 --> 00:10:07,560
probably this thing right here.

179
00:10:07,560 --> 00:10:08,960
Sorry.

180
00:10:08,960 --> 00:10:09,960
But that's been great.

181
00:10:09,960 --> 00:10:12,680
And I think that like, that's how the project lives on, you know, it's not going to live

182
00:10:12,680 --> 00:10:13,680
on forever.

183
00:10:13,680 --> 00:10:17,840
Nothing does, but when people step up and they contribute and they offer to help, like

184
00:10:17,840 --> 00:10:20,760
that's how it continues after I run out of steam.

185
00:10:20,760 --> 00:10:27,240
Do you see that same level of community interaction with Homebox as well?

186
00:10:27,240 --> 00:10:29,040
I haven't seen that yet.

187
00:10:29,040 --> 00:10:34,040
I think it's, it's kind of a different product or piece of software.

188
00:10:34,040 --> 00:10:36,720
Neely is written in Python, which I think a lot of people know.

189
00:10:36,720 --> 00:10:39,200
It's just like a really easy programming language to pick up.

190
00:10:39,200 --> 00:10:41,560
It's often the first language you'll learn.

191
00:10:41,560 --> 00:10:47,080
Homebox is written in Go, which is a compiled statically linked language, a little more

192
00:10:47,080 --> 00:10:50,800
complicated, not one of like the super popular languages.

193
00:10:50,800 --> 00:10:55,100
It's definitely below JavaScript and Python and some of those other ones.

194
00:10:55,100 --> 00:10:59,300
So I think there's a little less interest there and it's also maybe a little bit harder

195
00:10:59,300 --> 00:11:00,300
to set up.

196
00:11:00,300 --> 00:11:05,100
Homebox and Melee are different to me in that Homebox is like a much smaller scope.

197
00:11:05,100 --> 00:11:06,160
It's the second project.

198
00:11:06,160 --> 00:11:10,520
So I had like a little bit more like experience in open source and like thinking about how

199
00:11:10,520 --> 00:11:11,520
those things work.

200
00:11:11,520 --> 00:11:13,720
So I had like a really good idea of what I wanted.

201
00:11:13,720 --> 00:11:14,720
Like I wanted something small.

202
00:11:14,720 --> 00:11:17,600
I wanted to do these few things and that's it.

203
00:11:17,600 --> 00:11:21,140
Like I didn't really want to build like a huge community and like get all these people

204
00:11:21,140 --> 00:11:27,200
in and then end up with just like some version of the snipe it or snipe IT software.

205
00:11:27,200 --> 00:11:32,200
That's more complicated version of Homebox is kind of how I would describe it.

206
00:11:32,200 --> 00:11:33,200
It's very complicated.

207
00:11:33,200 --> 00:11:34,200
It's very sophisticated.

208
00:11:34,200 --> 00:11:37,200
You can do all kinds of cool stuff with it, but it's not what I wanted.

209
00:11:37,200 --> 00:11:38,200
Right.

210
00:11:38,200 --> 00:11:41,480
I just wanted to like spin up this little thing and put my stuff in there.

211
00:11:41,480 --> 00:11:42,480
Right.

212
00:11:42,480 --> 00:11:49,040
So from the perspective of myself as someone who doesn't have the technical or programming

213
00:11:49,040 --> 00:11:55,720
experience that you do, why did you choose different programming languages for the two

214
00:11:55,720 --> 00:11:57,280
applications?

215
00:11:57,280 --> 00:12:02,880
Because I feel like when I look at them and then I don't want to oversimplify it, but

216
00:12:02,880 --> 00:12:11,720
they're both two web applications that take inputs from users and then do something with

217
00:12:11,720 --> 00:12:16,520
that input, whether it's reported in the form of recipes that people can then interact with

218
00:12:16,520 --> 00:12:21,320
or Homebox or inputting information about your, I'm going to say assets, but really

219
00:12:21,320 --> 00:12:26,360
whatever you want to track within your home that you're again later digesting in different

220
00:12:26,360 --> 00:12:27,980
views on the application.

221
00:12:27,980 --> 00:12:33,760
So from a developer mindset, why the difference or contrast between the two of those on the

222
00:12:33,760 --> 00:12:35,440
back end?

223
00:12:35,440 --> 00:12:39,840
The short answer is it's just whatever I've wanted to do it in.

224
00:12:39,840 --> 00:12:44,240
I don't know that I have a super good reason, but what I've come to learn from maintaining

225
00:12:44,240 --> 00:12:50,120
Melee is that I don't think Python is a good language to build complicated things.

226
00:12:50,120 --> 00:12:55,480
At least for me, Python is a dynamically typed language, which means you can kind of just

227
00:12:55,480 --> 00:12:57,560
pass anything around as anything.

228
00:12:57,560 --> 00:12:59,800
There's not a lot of like, there's no compilation steps.

229
00:12:59,800 --> 00:13:03,520
So there's no compiler that will like step in and be like, no, you probably shouldn't

230
00:13:03,520 --> 00:13:04,520
do that.

231
00:13:04,520 --> 00:13:05,520
That's not going to work.

232
00:13:05,520 --> 00:13:07,560
And the, the, it's a much older language.

233
00:13:07,560 --> 00:13:11,600
So that's been around like, I think twice as long as go, but there's a lot of like legacy

234
00:13:11,600 --> 00:13:16,360
and baggage, the packaging ecosystem, if you want to publish an app is like very complicated.

235
00:13:16,360 --> 00:13:19,200
I still don't know how to publish a Python package.

236
00:13:19,200 --> 00:13:23,640
And there's just like a lot of dependencies required to build things.

237
00:13:23,640 --> 00:13:25,320
Like you can't just build a web app.

238
00:13:25,320 --> 00:13:29,480
You have to like pick a framework to build the web app in and stuff.

239
00:13:29,480 --> 00:13:32,600
So there's, there's like a lot of those things that make it kind of difficult.

240
00:13:32,600 --> 00:13:34,420
There's also a lot of runtime dependencies.

241
00:13:34,420 --> 00:13:39,720
So we just had an issue this morning, actually with the LDAP library for authentication.

242
00:13:39,720 --> 00:13:42,680
The library we were using got upgraded.

243
00:13:42,680 --> 00:13:46,760
I think, I think this is what happened is it got upgraded and it required a new binary

244
00:13:46,760 --> 00:13:48,720
to be installed in the container.

245
00:13:48,720 --> 00:13:53,520
And that did not happen to get installed in the runtime or when the Docker build finished.

246
00:13:53,520 --> 00:13:59,720
So there's a lot of angry, angry people who installed it and it crashed, but we got it

247
00:13:59,720 --> 00:14:00,720
resolved now.

248
00:14:00,720 --> 00:14:04,920
So, but like, there's like weird things like that, that'll happen in Python in my experiences

249
00:14:04,920 --> 00:14:08,120
that just like random things will break and it won't be like super clear or very easy

250
00:14:08,120 --> 00:14:09,120
to find.

251
00:14:09,120 --> 00:14:11,840
Now my experience with Go has been kind of the opposite.

252
00:14:11,840 --> 00:14:14,080
Like their packaging system I think is really good.

253
00:14:14,080 --> 00:14:18,400
I came on after the Go modules stuff was all figured out.

254
00:14:18,400 --> 00:14:21,160
It's been a super easy breeze for me.

255
00:14:21,160 --> 00:14:22,200
It's statically compiled.

256
00:14:22,200 --> 00:14:25,020
So there's a compilation step and it links all the things together.

257
00:14:25,020 --> 00:14:29,560
So you get a single binary output and it also does like good type checking.

258
00:14:29,560 --> 00:14:33,520
So if I try to pass a dog as a cat, it says, no, you can't do that, man.

259
00:14:33,520 --> 00:14:34,920
Gotta figure something else out.

260
00:14:34,920 --> 00:14:36,040
So I really liked that step.

261
00:14:36,040 --> 00:14:41,120
It's like a little extra piece that just makes me a better developer, I think.

262
00:14:41,120 --> 00:14:44,600
And the build steps and the publishing the app is just so easy.

263
00:14:44,600 --> 00:14:47,880
You just build a binary, you put it in a container and you're done.

264
00:14:47,880 --> 00:14:53,320
Do any of the tools you leverage when you're building Melee and Homebox and any of your

265
00:14:53,320 --> 00:14:59,640
other projects, are they ever inspired by the tools you use in your full-time job?

266
00:14:59,640 --> 00:15:00,960
No.

267
00:15:00,960 --> 00:15:08,560
I work for a very big industry company.

268
00:15:08,560 --> 00:15:10,480
So it's Johnson Controls.

269
00:15:10,480 --> 00:15:13,600
We invented the thermostat is how I try to explain it to people.

270
00:15:13,600 --> 00:15:15,920
So we've been around for a very long time.

271
00:15:15,920 --> 00:15:20,240
We're very good at building automation stuff, but it's a big company.

272
00:15:20,240 --> 00:15:21,800
And with that comes legacy software.

273
00:15:21,800 --> 00:15:29,400
So we are not up to speed on the latest development practices or the bleeding edge, but it all

274
00:15:29,400 --> 00:15:32,560
works and it's great.

275
00:15:32,560 --> 00:15:35,240
But I don't take a lot of that stuff home, I think.

276
00:15:35,240 --> 00:15:38,440
I like to play with the new cutting edge stuff.

277
00:15:38,440 --> 00:15:46,200
I think what I find really fascinating is when I think about, or at least what I imagine

278
00:15:46,200 --> 00:15:50,080
at your full-time job, when I think about a development team who's working on a large

279
00:15:50,080 --> 00:15:56,640
project or a product that thousands or hundreds of other companies or whoever might use or

280
00:15:56,640 --> 00:16:02,800
consumers, you've got departments dedicated to almost every leg of the journey to get

281
00:16:02,800 --> 00:16:05,520
that product to production.

282
00:16:05,520 --> 00:16:10,160
You don't have that or you're managing that yourself for Melee and Homebox.

283
00:16:10,160 --> 00:16:16,480
So where I'm really interested to hear how you manage packaging everything yourself.

284
00:16:16,480 --> 00:16:20,820
And I guess what I mean by that is when I search for either, the first thing I'll come

285
00:16:20,820 --> 00:16:26,280
across is a GitHub page with a really robust read me section that walks everyone through

286
00:16:26,280 --> 00:16:33,120
installation and kind of the basic questions with also various tabs like issues where you're

287
00:16:33,120 --> 00:16:38,720
working with people addressing concerns and issues or problems they have with the software.

288
00:16:38,720 --> 00:16:44,320
While you're managing that, while you're also developing the software, while you're

289
00:16:44,320 --> 00:16:48,200
developing the front end or interface for the software, which I think is probably a

290
00:16:48,200 --> 00:16:51,040
whole other question in itself.

291
00:16:51,040 --> 00:16:54,680
And then you also have websites for each of the applications as well.

292
00:16:54,680 --> 00:17:00,760
So there's a kind of a landing page with screenshots and features and they seem to be up to date

293
00:17:00,760 --> 00:17:01,760
with new features.

294
00:17:01,760 --> 00:17:05,880
So clearly it's not just something you shoved out there and you just don't touch all of

295
00:17:05,880 --> 00:17:08,320
these things interact with each other.

296
00:17:08,320 --> 00:17:15,000
And you're essentially providing a full fledged, a fully packaged product for free on your

297
00:17:15,000 --> 00:17:16,400
own time.

298
00:17:16,400 --> 00:17:19,160
And so honestly, after saying all that, I'm not even sure.

299
00:17:19,160 --> 00:17:22,960
I feel like I have 10 questions within that statement there.

300
00:17:22,960 --> 00:17:28,920
Do you enjoy the aspect of managing all of those things or do you favor certain things

301
00:17:28,920 --> 00:17:29,920
over other?

302
00:17:29,920 --> 00:17:35,720
Are there certain things that you think about and just dread like, Hey, I just updated Melee

303
00:17:35,720 --> 00:17:38,200
and this functionality changed.

304
00:17:38,200 --> 00:17:41,760
I hate that I'm going to have to go back through the documentation and take more screenshots

305
00:17:41,760 --> 00:17:44,200
and outline what the new steps are.

306
00:17:44,200 --> 00:17:48,720
I'd rather spend that time actually developing any preferences in that regard.

307
00:17:48,720 --> 00:17:54,160
Yeah, so I like updating documentation, but I think I write documentation for developers.

308
00:17:54,160 --> 00:17:56,240
I don't write documentation for people.

309
00:17:56,240 --> 00:17:59,360
So I get a lot of comments of like, this doesn't make any sense.

310
00:17:59,360 --> 00:18:02,420
I'm like, yeah, it probably not.

311
00:18:02,420 --> 00:18:06,160
So a lot of the documentation I think is a good community effort.

312
00:18:06,160 --> 00:18:09,280
I'll throw something out there and then a lot of people will come back and clean things

313
00:18:09,280 --> 00:18:11,400
up for me, especially spelling mistakes.

314
00:18:11,400 --> 00:18:12,480
I make them all the time.

315
00:18:12,480 --> 00:18:16,280
So if you're looking for an easy PR, come to one of my repositories and fix some spelling

316
00:18:16,280 --> 00:18:17,280
mistakes.

317
00:18:17,280 --> 00:18:18,840
There are many.

318
00:18:18,840 --> 00:18:19,840
Yeah.

319
00:18:19,840 --> 00:18:21,440
So the documentation, keeping the screenshots up.

320
00:18:21,440 --> 00:18:24,080
I think I've kind of given up on that in a lot of ways.

321
00:18:24,080 --> 00:18:30,120
Like it's just too hard to maintain like cutting edge documentation.

322
00:18:30,120 --> 00:18:34,720
It's one thing to like list out the general ideas and like, you know, here's some of the

323
00:18:34,720 --> 00:18:37,480
features we'll play with it.

324
00:18:37,480 --> 00:18:39,280
That's the best I can really do at this point.

325
00:18:39,280 --> 00:18:43,360
I think, I think my setup documentation for Melee is very good.

326
00:18:43,360 --> 00:18:47,600
I think I spent a lot of time walking through like the step by step and trying to get good

327
00:18:47,600 --> 00:18:49,600
and instructive documentation for that.

328
00:18:49,600 --> 00:18:55,440
We even updated the app recently to be a lot of the like half, not half, but there was

329
00:18:55,440 --> 00:18:58,880
a lot of discord comments of like, what's the default username and password?

330
00:18:58,880 --> 00:19:00,840
And we'd always link them back to the docs.

331
00:19:00,840 --> 00:19:04,480
But we've recently improved that where like when you first start up the app, it'll just

332
00:19:04,480 --> 00:19:08,360
tell you in the pop-up like, hey, here's the credentials log right in.

333
00:19:08,360 --> 00:19:11,000
So I think that like that's the super important part.

334
00:19:11,000 --> 00:19:14,360
And that's what I've spent the most time on, but most of the other documentation I wouldn't

335
00:19:14,360 --> 00:19:16,400
even know if it was up to date to be honest.

336
00:19:16,400 --> 00:19:17,400
Yeah.

337
00:19:17,400 --> 00:19:21,400
And actually talking through that, I think brings up another question that I'm interested

338
00:19:21,400 --> 00:19:23,360
in hearing your response to.

339
00:19:23,360 --> 00:19:28,120
Are you ever apprehensive about receiving help from the community?

340
00:19:28,120 --> 00:19:32,440
I would imagine if you're passionate about a lot of these projects, you know, they are

341
00:19:32,440 --> 00:19:34,700
your babies for lack of a better term.

342
00:19:34,700 --> 00:19:42,880
And so are you worried about someone maybe contributing in a way that's not helpful or

343
00:19:42,880 --> 00:19:44,640
detrimental to the project?

344
00:19:44,640 --> 00:19:51,200
Or are you ever concerned about sloppy translations or documentation from community members, especially

345
00:19:51,200 --> 00:19:55,040
when it's attached to projects that are attached to your name?

346
00:19:55,040 --> 00:19:59,700
Yes, I've gotten a lot thicker skin over the years.

347
00:19:59,700 --> 00:20:02,720
So I worry about it less now than I used to.

348
00:20:02,720 --> 00:20:05,480
But we have like a pretty good review process through GitHub.

349
00:20:05,480 --> 00:20:09,160
So everything kind of goes through somebody on the team looks at it before it gets merged,

350
00:20:09,160 --> 00:20:10,160
which is really awful.

351
00:20:10,160 --> 00:20:16,600
But you do bring up a good point of like, am I worried about people submitting code

352
00:20:16,600 --> 00:20:17,600
to it?

353
00:20:17,600 --> 00:20:19,160
And it's the truth is like all the time.

354
00:20:19,160 --> 00:20:26,080
I don't, if you look through the feature requests on both projects, you'll see you're like people

355
00:20:26,080 --> 00:20:32,160
requesting these like big, not outlandish, but just like really big features that sound

356
00:20:32,160 --> 00:20:33,160
simple.

357
00:20:33,160 --> 00:20:34,160
Like, oh, I just want to do this thing.

358
00:20:34,160 --> 00:20:36,640
And it's like, oh, that's like four months of development.

359
00:20:36,640 --> 00:20:39,440
Or like, yeah, give me a team of three people.

360
00:20:39,440 --> 00:20:41,400
We could have that done in a year.

361
00:20:41,400 --> 00:20:42,400
Stuff like that.

362
00:20:42,400 --> 00:20:46,360
If we're like, it sounds really simple, because I know like all the little knobs and things

363
00:20:46,360 --> 00:20:50,840
I need to turn and like what UI elements I need to build and all this stuff.

364
00:20:50,840 --> 00:20:54,800
It becomes like one thing, little thing becomes like a giant thing.

365
00:20:54,800 --> 00:21:00,440
So I'll see oftentimes, people will come in and do what a lot of people will call like

366
00:21:00,440 --> 00:21:03,200
a drive by commit or a drive by PR.

367
00:21:03,200 --> 00:21:06,200
They'll come to the project, you know, maybe they use it all the time, but they come in

368
00:21:06,200 --> 00:21:08,200
and they like do this like big thing.

369
00:21:08,200 --> 00:21:11,520
They just like throw a bunch of code at the wall and are like, here, I got this new feature

370
00:21:11,520 --> 00:21:13,320
submitted a PR.

371
00:21:13,320 --> 00:21:18,160
And then I have to go look at it and be like, yeah, sorry, man, I can't merge this.

372
00:21:18,160 --> 00:21:20,100
Like there's no tests.

373
00:21:20,100 --> 00:21:21,400
There's no end to end test coverage.

374
00:21:21,400 --> 00:21:24,560
This is a huge PR to be your first PR.

375
00:21:24,560 --> 00:21:26,740
Like are you going to maintain any of this?

376
00:21:26,740 --> 00:21:32,600
I don't really know how a lot of it works, you know, like some of these features are

377
00:21:32,600 --> 00:21:36,200
really complicated and rely on like a bunch of different parts of the app.

378
00:21:36,200 --> 00:21:40,160
So like just to come in and like put all this together and then kind of walk away becomes

379
00:21:40,160 --> 00:21:41,160
really hard.

380
00:21:41,160 --> 00:21:44,680
I think it's like that's like a lesson that I learned for sure by just like trial and

381
00:21:44,680 --> 00:21:48,600
error is it's like the greatest thing in the world when you start a project and people

382
00:21:48,600 --> 00:21:51,320
are just submitting all these like huge PRs and it's like, that's awesome.

383
00:21:51,320 --> 00:21:53,280
That's code I didn't have to write.

384
00:21:53,280 --> 00:21:58,720
After like three or four years it's like becomes like, it's scary now people submit the PRs

385
00:21:58,720 --> 00:22:01,440
it's like, oh, I don't want to maintain that.

386
00:22:01,440 --> 00:22:05,000
But this is if anybody was thinking about starting a new project, I would really think

387
00:22:05,000 --> 00:22:08,120
early about like bringing other people in because you need help.

388
00:22:08,120 --> 00:22:09,120
You can't do it by yourself.

389
00:22:09,120 --> 00:22:10,120
Yeah.

390
00:22:10,120 --> 00:22:11,120
Interesting.

391
00:22:11,120 --> 00:22:15,480
And I feel like in a way it's almost a lose lose situation for you because you want these

392
00:22:15,480 --> 00:22:18,320
to be community driven projects.

393
00:22:18,320 --> 00:22:23,940
So they have the staying power they're being worked on when you don't have the time.

394
00:22:23,940 --> 00:22:30,720
But you also want to be a little selective with who's contributing and how they're contributing

395
00:22:30,720 --> 00:22:38,120
in a way that you can maintain some sort of control or level of, you don't want to scare

396
00:22:38,120 --> 00:22:39,120
people away.

397
00:22:39,120 --> 00:22:40,120
Yeah.

398
00:22:40,120 --> 00:22:43,360
You want to, you want to be receptive to people because like they are taking time out of their

399
00:22:43,360 --> 00:22:46,000
day and like, you know, maintainers are grumpy.

400
00:22:46,000 --> 00:22:47,000
I understand.

401
00:22:47,000 --> 00:22:51,120
I've responded to many a GitHub issue very grumpily that I regret.

402
00:22:51,120 --> 00:22:55,000
And like they're taking time out of their day to like think about the problem, outline

403
00:22:55,000 --> 00:22:58,880
the problem and say, hey, like I think it would be good if this was implemented in here.

404
00:22:58,880 --> 00:23:00,760
I think people would use it.

405
00:23:00,760 --> 00:23:02,640
Sometimes they're right and sometimes they're wrong.

406
00:23:02,640 --> 00:23:03,640
Yeah.

407
00:23:03,640 --> 00:23:09,520
You know, you said something just a minute ago that prompted me to think of an interaction

408
00:23:09,520 --> 00:23:14,960
you and I have had in the past that I debated whether or not I was going to bring up with

409
00:23:14,960 --> 00:23:15,960
you on this.

410
00:23:15,960 --> 00:23:20,440
The only reason I debated about it is because it's embarrassing for me, but I'm going to

411
00:23:20,440 --> 00:23:21,600
talk about it anyway.

412
00:23:21,600 --> 00:23:22,840
It's not me.

413
00:23:22,840 --> 00:23:23,840
Yeah.

414
00:23:23,840 --> 00:23:28,920
When you announced Homebox, I remember on the self-hosted subreddit on Reddit, I installed

415
00:23:28,920 --> 00:23:30,040
it, I started using it.

416
00:23:30,040 --> 00:23:31,160
I loved it.

417
00:23:31,160 --> 00:23:36,960
And this was maybe a couple months after I had discovered object storage.

418
00:23:36,960 --> 00:23:40,880
And so I had installed Minio on one of my servers.

419
00:23:40,880 --> 00:23:44,800
I was using it to host assets for some other self-hosted projects.

420
00:23:44,800 --> 00:23:49,560
I was like, hey, I'm uploading all these manuals and images to Homebox.

421
00:23:49,560 --> 00:23:52,360
It'd be cool if it supported object storage.

422
00:23:52,360 --> 00:23:56,840
And so in the comments on Reddit, and I actually went back today through my profile.

423
00:23:56,840 --> 00:24:01,200
I found it to confirm that it was actually a Homebox and I had asked.

424
00:24:01,200 --> 00:24:05,280
And so in the comments, I was just very cordially saying, hey, this is great.

425
00:24:05,280 --> 00:24:06,280
Thanks for developing it.

426
00:24:06,280 --> 00:24:08,560
Would you ever consider object storage?

427
00:24:08,560 --> 00:24:10,440
And you were very gracious about it.

428
00:24:10,440 --> 00:24:14,000
You were essentially, no, you had no plans for it.

429
00:24:14,000 --> 00:24:18,520
And I think looking back at that, I think a month or two later, I stopped using object

430
00:24:18,520 --> 00:24:24,280
storage because something broke and I was too discouraged to fix it.

431
00:24:24,280 --> 00:24:25,280
And I couldn't figure out what was happening.

432
00:24:25,280 --> 00:24:28,200
And I was like, oh, I'm just going to scrap all of this.

433
00:24:28,200 --> 00:24:32,360
And looking back at that and thinking, oh, I had asked you and not really understanding

434
00:24:32,360 --> 00:24:36,960
the work that probably would have needed to go into it to get it working within Homebox.

435
00:24:36,960 --> 00:24:39,480
I feel a little silly for sure.

436
00:24:39,480 --> 00:24:43,340
That's such a hard thing to know, right?

437
00:24:43,340 --> 00:24:45,160
Is the thing I'm asking good?

438
00:24:45,160 --> 00:24:46,160
I don't know.

439
00:24:46,160 --> 00:24:47,600
I'm just going to ask them.

440
00:24:47,600 --> 00:24:48,600
That's fine.

441
00:24:48,600 --> 00:24:52,960
Realistically, I shouldn't be upset or grumpy about it.

442
00:24:52,960 --> 00:24:56,240
Sometimes it's hard to get the same issue four times and be like, if you just look at

443
00:24:56,240 --> 00:24:59,640
the issues, there's a duplicate and you just would have known.

444
00:24:59,640 --> 00:25:02,080
But we're all just people on the internet.

445
00:25:02,080 --> 00:25:03,080
It's fine.

446
00:25:03,080 --> 00:25:05,440
I can just close the issue and move on.

447
00:25:05,440 --> 00:25:06,520
It's not a big deal.

448
00:25:06,520 --> 00:25:07,520
Sure.

449
00:25:07,520 --> 00:25:08,880
Sometimes I'm grumpy.

450
00:25:08,880 --> 00:25:10,120
Sometimes I'm not.

451
00:25:10,120 --> 00:25:15,560
I feel like this is another tricky thing you probably run into with Melee and Homebox.

452
00:25:15,560 --> 00:25:23,480
And maybe, maybe not, but I feel like probably it's a little exclusive to open source self-hosted

453
00:25:23,480 --> 00:25:24,920
software.

454
00:25:24,920 --> 00:25:32,280
The idea that you are developing an application for a specific purpose, but because of the

455
00:25:32,280 --> 00:25:37,400
self-hosted nature and how other projects play with each other, I feel like there's

456
00:25:37,400 --> 00:25:44,200
this expectation or this bar that people expect self-hosted applications to meet in order

457
00:25:44,200 --> 00:25:47,800
to satisfy whatever requirements people have come up with.

458
00:25:47,800 --> 00:25:53,600
So for instance, if I see a new project announced, I'm normally usually include things in a newsletter

459
00:25:53,600 --> 00:25:55,120
and I try and spotlight new things.

460
00:25:55,120 --> 00:25:59,840
So I'm always digging through GitHub pages and release announcements, just combing through

461
00:25:59,840 --> 00:26:02,120
comments to see what people are saying.

462
00:26:02,120 --> 00:26:06,400
And everyone always wants the full package when people release software.

463
00:26:06,400 --> 00:26:09,720
And by that, I mean, hey, do you support single sign-on?

464
00:26:09,720 --> 00:26:14,120
Can I use Authentic or Othelia or Keycloak to log into this?

465
00:26:14,120 --> 00:26:16,820
Oh, you use a SQLite database.

466
00:26:16,820 --> 00:26:22,640
Can you support MySQL or Postgres or something like that instead?

467
00:26:22,640 --> 00:26:28,360
I think people are just so spoiled by so many mature self-hosted projects coming pre-packaged

468
00:26:28,360 --> 00:26:32,160
to play nicely with all these other things people have deployed that's become somewhat

469
00:26:32,160 --> 00:26:34,160
of an expectation.

470
00:26:34,160 --> 00:26:40,280
And I wonder if that detracts from the actual development of some tools because developers

471
00:26:40,280 --> 00:26:44,840
might be a little hyper-focused on meeting some of these other needs that in reality

472
00:26:44,840 --> 00:26:48,840
probably have little to do with the actual functionality of the software.

473
00:26:48,840 --> 00:26:49,840
100%.

474
00:26:49,840 --> 00:26:54,160
I think that the self-hosted community is very strange.

475
00:26:54,160 --> 00:26:59,720
If you go on the subreddit, people will ask, I think Homebox specifically gets this, where

476
00:26:59,720 --> 00:27:00,880
people ask for things.

477
00:27:00,880 --> 00:27:04,440
I guess Melee too gets this, it's very similar for class.

478
00:27:04,440 --> 00:27:07,520
So people will ask for this, and I know they won't use it.

479
00:27:07,520 --> 00:27:09,680
I know nobody is doing this.

480
00:27:09,680 --> 00:27:15,640
For Melee, they'll ask, hey, it would be really cool if I could scan food and keep an inventory

481
00:27:15,640 --> 00:27:16,720
of food in my house.

482
00:27:16,720 --> 00:27:19,040
And then when I make a recipe, it just takes it out of the inventory.

483
00:27:19,040 --> 00:27:20,040
It's like, great.

484
00:27:20,040 --> 00:27:21,040
Good luck.

485
00:27:21,040 --> 00:27:23,840
You'll do it for a week and then you won't ever use it again.

486
00:27:23,840 --> 00:27:25,360
Yeah, that sounds awful.

487
00:27:25,360 --> 00:27:27,920
I can't imagine anybody maintaining that.

488
00:27:27,920 --> 00:27:31,000
If you are and you're listening to this podcast, good for you, man.

489
00:27:31,000 --> 00:27:34,040
I could never be that organized ever in my entire life.

490
00:27:34,040 --> 00:27:35,040
That's insane.

491
00:27:35,040 --> 00:27:40,280
I feel like if someone had the willpower to actually do that, they're probably a fringe

492
00:27:40,280 --> 00:27:42,360
case anyway.

493
00:27:42,360 --> 00:27:47,080
Not that they don't deserve it, but you would question if the development efforts going

494
00:27:47,080 --> 00:27:49,680
into that are actually worth it or not.

495
00:27:49,680 --> 00:27:50,680
Yeah.

496
00:27:50,680 --> 00:27:53,880
I've been reading this book, the SaaS Playbook.

497
00:27:53,880 --> 00:27:59,160
It's mostly about building a startup and scaling to millions of dollars a year, the dream for

498
00:27:59,160 --> 00:28:00,160
everyone.

499
00:28:00,160 --> 00:28:04,480
But there's a lot of good ideas on building applications and listening to customer feedback.

500
00:28:04,480 --> 00:28:08,840
I remember reading through the book and thinking, oh, this is the complete opposite of everything

501
00:28:08,840 --> 00:28:10,760
I did with Melee.

502
00:28:10,760 --> 00:28:12,120
The complete opposite.

503
00:28:12,120 --> 00:28:16,840
I took every suggestion or every feature and just built it into that.

504
00:28:16,840 --> 00:28:18,080
I was like, yeah, this is awesome.

505
00:28:18,080 --> 00:28:19,080
This is great.

506
00:28:19,080 --> 00:28:20,080
People want it.

507
00:28:20,080 --> 00:28:21,080
Let's put it in there.

508
00:28:21,080 --> 00:28:22,080
Let's do it.

509
00:28:22,080 --> 00:28:26,880
If you looked at the first 100 or 200 feature requests for Melee and then you compared them

510
00:28:26,880 --> 00:28:29,360
to Homebox, it'd be a very different story.

511
00:28:29,360 --> 00:28:34,000
I will just close issues left and right on Homebox for feature requests.

512
00:28:34,000 --> 00:28:36,400
They're asking for something to be like, yeah, no, that's not in the scope of this.

513
00:28:36,400 --> 00:28:37,960
You should check out these other projects.

514
00:28:37,960 --> 00:28:39,560
I think that's healthy.

515
00:28:39,560 --> 00:28:41,880
It can't be everything or it's going to suck.

516
00:28:41,880 --> 00:28:44,320
It's just going to be kind of crappy for everything.

517
00:28:44,320 --> 00:28:48,880
Or we could do this one niche thing that I like and I could do that really well.

518
00:28:48,880 --> 00:28:50,280
I think that's better.

519
00:28:50,280 --> 00:28:52,560
We need more of that.

520
00:28:52,560 --> 00:28:58,200
One of the things I want to make sure we talk about a little bit is do you find it difficult

521
00:28:58,200 --> 00:29:02,640
to design the front end of your applications?

522
00:29:02,640 --> 00:29:06,200
When I think about software development and then we talked a little bit earlier about

523
00:29:06,200 --> 00:29:12,440
how they're usually, when a product is developed, there are teams who manage every part.

524
00:29:12,440 --> 00:29:16,380
I feel like there are all sorts of jokes and memes on the internet about how a backend

525
00:29:16,380 --> 00:29:21,640
programmer thinks versus how a front end designer or graphic designer thinks.

526
00:29:21,640 --> 00:29:28,880
You enjoy both sides of the coin or has it been painful to learn one versus the other?

527
00:29:28,880 --> 00:29:32,400
What's your experience been with that?

528
00:29:32,400 --> 00:29:36,120
In a perfect world, I would write a JSON API and everybody would just use that and they

529
00:29:36,120 --> 00:29:37,120
would be happy with it.

530
00:29:37,120 --> 00:29:39,520
What do you need a UI for?

531
00:29:39,520 --> 00:29:40,520
Write a curl request.

532
00:29:40,520 --> 00:29:41,520
It'll be fine.

533
00:29:41,520 --> 00:29:42,520
You'll figure it out.

534
00:29:42,520 --> 00:29:44,240
But people want a web app.

535
00:29:44,240 --> 00:29:48,560
I don't mind writing the web app stuff or building the front ends or things like that,

536
00:29:48,560 --> 00:29:54,280
especially when it comes to the actually like the code in the background, not like the HTML

537
00:29:54,280 --> 00:29:56,200
and making it look nice.

538
00:29:56,200 --> 00:29:57,400
That stuff I'm really bad at.

539
00:29:57,400 --> 00:30:02,600
But the code of managing requests and doing requests and managing state and stuff like

540
00:30:02,600 --> 00:30:05,560
that, that's not as big of a problem for me.

541
00:30:05,560 --> 00:30:09,860
JavaScript is not my favorite language, but I suffer through it for the community.

542
00:30:09,860 --> 00:30:14,520
For the design portion of it, I like to think that both Melee and Homebox are fairly well

543
00:30:14,520 --> 00:30:16,200
designed programs.

544
00:30:16,200 --> 00:30:18,320
That is mostly not by my doing.

545
00:30:18,320 --> 00:30:24,020
I was very lucky and married a very smart and capable designer who's also a front end

546
00:30:24,020 --> 00:30:25,680
developer now.

547
00:30:25,680 --> 00:30:30,800
I will make some strange looking UI and I will show it to her and she will be like,

548
00:30:30,800 --> 00:30:31,800
no.

549
00:30:31,800 --> 00:30:33,960
She'll tell me how to fix it, which is super helpful.

550
00:30:33,960 --> 00:30:39,840
She's taught me a lot about color composition and UI layouts and how to use whitespace.

551
00:30:39,840 --> 00:30:44,400
And, you know, thinking about user patterns, like where does this stuff belong?

552
00:30:44,400 --> 00:30:48,480
And all those like fancy UI ideas that just stick in my head for like a day and then they're

553
00:30:48,480 --> 00:30:49,600
gone.

554
00:30:49,600 --> 00:30:52,600
I feel like maybe you're cheating a little bit.

555
00:30:52,600 --> 00:30:53,600
100%.

556
00:30:53,600 --> 00:30:58,680
I am a sucker for well designed applications.

557
00:30:58,680 --> 00:31:03,280
As I mentioned, I love Homebox and one of those boxes that it ticks for me is that I

558
00:31:03,280 --> 00:31:08,360
think it's really well designed and it's intuitive and I love using it.

559
00:31:08,360 --> 00:31:10,920
I can very quickly navigate to what I want to do.

560
00:31:10,920 --> 00:31:15,440
I can perform the action and I can get out with no issue.

561
00:31:15,440 --> 00:31:21,540
There are self-hosted applications that I install and deploy because I love how much

562
00:31:21,540 --> 00:31:25,640
they look and almost never use them.

563
00:31:25,640 --> 00:31:31,760
There's a Doodle poll alternative called Rally and it's Rally with three L's and I've never

564
00:31:31,760 --> 00:31:33,640
used Doodle in my life.

565
00:31:33,640 --> 00:31:38,880
And I saw someone had featured it at some point and I was like, wow, that is a very

566
00:31:38,880 --> 00:31:41,760
beautifully designed self-hosted application.

567
00:31:41,760 --> 00:31:46,520
And so I spun it up and I think I've used it twice in maybe a year because I don't organize

568
00:31:46,520 --> 00:31:48,040
events that often.

569
00:31:48,040 --> 00:31:52,960
But I think a lot of people stick kind of like the front end design.

570
00:31:52,960 --> 00:31:54,580
They don't prioritize it.

571
00:31:54,580 --> 00:32:00,480
And I understand when you think about functionality versus design, but I do think design is important

572
00:32:00,480 --> 00:32:06,680
when it comes to adoption and encouraging users to adopt a user application.

573
00:32:06,680 --> 00:32:09,480
So I'm glad to hear you have a process for managing that.

574
00:32:09,480 --> 00:32:14,600
And I do think Melee and Homebox both look great and are easy to use from that aspect.

575
00:32:14,600 --> 00:32:15,600
Thanks.

576
00:32:15,600 --> 00:32:16,600
That's great to hear.

577
00:32:16,600 --> 00:32:17,600
Yeah.

578
00:32:17,600 --> 00:32:21,640
It's one of the things that I think a lot of people don't necessarily think about or

579
00:32:21,640 --> 00:32:26,280
spend the time on, especially if you're a backend developer like me and you build something

580
00:32:26,280 --> 00:32:28,760
and you're like, oh, I got to build a front end for it.

581
00:32:28,760 --> 00:32:32,040
You maybe don't spend as much time on that as you do with like, what should the API be?

582
00:32:32,040 --> 00:32:33,920
How should I lay out the database tables?

583
00:32:33,920 --> 00:32:39,400
That stuff's more fun for you than doing all the stuff in the UI.

584
00:32:39,400 --> 00:32:44,520
So it's taking the time and spending a couple hours and watching some courses on UI design

585
00:32:44,520 --> 00:32:50,960
and just get the basics of how do I lay out a title, a paragraph, and an image that makes

586
00:32:50,960 --> 00:32:51,960
sense.

587
00:32:51,960 --> 00:32:54,240
Getting that basics will just help you get so far.

588
00:32:54,240 --> 00:32:56,640
And then you can lean on libraries.

589
00:32:56,640 --> 00:33:00,800
We use daisy UI in Homebox and that does a lot of the stuff for you.

590
00:33:00,800 --> 00:33:05,160
You get a button, you get a card, and then a lot of it just comes down to layout.

591
00:33:05,160 --> 00:33:09,240
So if you can learn to do the layout stuff, that'll be super far.

592
00:33:09,240 --> 00:33:10,800
Got it.

593
00:33:10,800 --> 00:33:15,600
Does your Bounce also design the logos for you?

594
00:33:15,600 --> 00:33:21,720
Because I feel like in the few instances of my life where I've ever had to design a logo,

595
00:33:21,720 --> 00:33:26,800
I've spent a disproportionate amount of time trying to design that logo versus actually

596
00:33:26,800 --> 00:33:30,280
generating content for what that logo was representing.

597
00:33:30,280 --> 00:33:35,080
Yeah, it's like the blog problem of like, oh, I need to create a blog, so I'm going

598
00:33:35,080 --> 00:33:38,120
to write a blog engine and I'm never going to blog on it.

599
00:33:38,120 --> 00:33:39,440
Is that kind of thing?

600
00:33:39,440 --> 00:33:40,440
Yeah.

601
00:33:40,440 --> 00:33:41,440
Yeah.

602
00:33:41,440 --> 00:33:46,520
So she designed the box for Homebox, like the little logo, which I love.

603
00:33:46,520 --> 00:33:47,760
I think it's like super great.

604
00:33:47,760 --> 00:33:49,600
It's super cute what she did with it.

605
00:33:49,600 --> 00:33:54,040
The Miele logo is actually just like a material design icon.

606
00:33:54,040 --> 00:33:55,040
That was me.

607
00:33:55,040 --> 00:33:56,040
You can see the difference there.

608
00:33:56,040 --> 00:33:58,520
Yeah, it's definitely more minimal.

609
00:33:58,520 --> 00:33:59,800
Yeah, right?

610
00:33:59,800 --> 00:34:00,880
That's what you get when I do it.

611
00:34:00,880 --> 00:34:01,880
You just find something on the internet.

612
00:34:01,880 --> 00:34:02,880
It's like, oh, this is free?

613
00:34:02,880 --> 00:34:03,880
Yeah, we'll just use that.

614
00:34:03,880 --> 00:34:04,880
That's fine.

615
00:34:04,880 --> 00:34:05,880
Who cares?

616
00:34:05,880 --> 00:34:10,840
Anytime I get an idea for a project, I'll show it to her and be like, hey, can you draw

617
00:34:10,840 --> 00:34:12,840
a logo for this?

618
00:34:12,840 --> 00:34:17,720
She just has a list of five or six different things that I'm like, are you going to do

619
00:34:17,720 --> 00:34:18,720
that?

620
00:34:18,720 --> 00:34:21,640
I'm like, I don't know if like, you know, the gopher was like building scaffolding,

621
00:34:21,640 --> 00:34:24,240
you know, you draw that.

622
00:34:24,240 --> 00:34:27,820
So want to pivot back to the community a little bit.

623
00:34:27,820 --> 00:34:33,600
What have been your strangest interactions with the community you've developed applications

624
00:34:33,600 --> 00:34:34,600
for?

625
00:34:34,600 --> 00:34:38,120
Or have you had any truly bizarre interactions?

626
00:34:38,120 --> 00:34:41,360
Most of like the bizarre interactions are just like people being like going out of their

627
00:34:41,360 --> 00:34:44,480
way to be just like super rude, no reason.

628
00:34:44,480 --> 00:34:45,480
Interesting.

629
00:34:45,480 --> 00:34:49,560
I've had a couple of people submit issues that are just like, this is the worst software

630
00:34:49,560 --> 00:34:50,560
I've ever used.

631
00:34:50,560 --> 00:34:51,960
I can't believe you wrote this.

632
00:34:51,960 --> 00:34:53,600
It's complete garbage.

633
00:34:53,600 --> 00:34:56,640
And then I just closed the issue and I'm like, well, that hurt my feelings.

634
00:34:56,640 --> 00:34:57,640
Thanks.

635
00:34:57,640 --> 00:34:58,640
Issue accomplished.

636
00:34:58,640 --> 00:35:01,960
Those are like the super strange ones.

637
00:35:01,960 --> 00:35:06,280
I get a lot that are like, I don't know what we talked about that are like, like, it would

638
00:35:06,280 --> 00:35:08,380
be really cool if it did like X.

639
00:35:08,380 --> 00:35:12,200
And it's just like kind of like a nonchalant statement of like, it's not like a super well

640
00:35:12,200 --> 00:35:13,880
taught on idea.

641
00:35:13,880 --> 00:35:15,680
There's not a lot of like details.

642
00:35:15,680 --> 00:35:18,400
I don't really know what they're talking about.

643
00:35:18,400 --> 00:35:21,760
And those are just always seem kind of strange to me is like, what, what do you expect me

644
00:35:21,760 --> 00:35:22,760
to do with that?

645
00:35:22,760 --> 00:35:25,080
I guess I just don't, I don't know.

646
00:35:25,080 --> 00:35:27,440
I mean, I've sure made sense of that, but when I look at it, it's like, what does that

647
00:35:27,440 --> 00:35:29,280
even mean?

648
00:35:29,280 --> 00:35:35,280
There is a developer online who I thought of as you were talking.

649
00:35:35,280 --> 00:35:41,600
The there's an application, an RSS aggregator called tiny, tiny RSS.

650
00:35:41,600 --> 00:35:47,000
I have, I have used it in the past and it's a great application, but it is infamous online

651
00:35:47,000 --> 00:35:51,040
for having a developer who is extremely rough around the edges.

652
00:35:51,040 --> 00:35:52,040
Oh yeah.

653
00:35:52,040 --> 00:35:54,480
I do remember reading a blog post about this.

654
00:35:54,480 --> 00:35:55,480
Yeah.

655
00:35:55,480 --> 00:35:58,440
To the, to the point where he will just insult you on.

656
00:35:58,440 --> 00:36:03,880
So he has his own discourse forum or some sort of community.

657
00:36:03,880 --> 00:36:09,120
And if you ask basic questions that are covered anywhere in his documentation, he or one of

658
00:36:09,120 --> 00:36:12,240
his moderators will, will insult you.

659
00:36:12,240 --> 00:36:16,600
And earlier this year, I actually wrote a post about it and I got some feedback on the

660
00:36:16,600 --> 00:36:18,400
post and retrospect.

661
00:36:18,400 --> 00:36:22,840
I don't think I'll ever take the post down just for the sake of transparency and, you

662
00:36:22,840 --> 00:36:27,320
know, censorship and all of that, but maybe I should go back, revisit and rewrite it.

663
00:36:27,320 --> 00:36:34,920
Someone had made a point that sometimes not, not excusing that type of behavior, but I

664
00:36:34,920 --> 00:36:41,480
think sometimes they're just enough bad community interactions that some people either are or

665
00:36:41,480 --> 00:36:45,120
feel like they're driven to the point where they have no other choice, but to be sure

666
00:36:45,120 --> 00:36:50,440
with people and direct, maybe they can do it without the insulting, but it's still,

667
00:36:50,440 --> 00:36:54,960
I think it's a kind of a fascinating case and interesting.

668
00:36:54,960 --> 00:36:59,720
If you Google it, I'm, you know, the first five responses you'll get will be people in

669
00:36:59,720 --> 00:37:04,400
various forums across the internet complaining about this developer.

670
00:37:04,400 --> 00:37:09,520
And it's all, the interactions are almost always hilarious.

671
00:37:09,520 --> 00:37:13,360
The insults are clever and you know, if you're the one asking the question, looking for a

672
00:37:13,360 --> 00:37:18,280
response, I know it's not fun, but going back and reading it as an outside observer, it

673
00:37:18,280 --> 00:37:20,600
makes me chuckle for sure.

674
00:37:20,600 --> 00:37:25,000
Even thinking about maybe how many newcomers might be discouraged from self-hosting after

675
00:37:25,000 --> 00:37:27,840
those interactions if those were some of their first.

676
00:37:27,840 --> 00:37:29,480
Yeah, that's super hard.

677
00:37:29,480 --> 00:37:31,000
Like I totally get it.

678
00:37:31,000 --> 00:37:32,200
I think I read your blog post.

679
00:37:32,200 --> 00:37:36,000
I think that's where I remember this from and I remember reading it and being like,

680
00:37:36,000 --> 00:37:38,000
oh no, I totally get where it's going wrong.

681
00:37:38,000 --> 00:37:41,520
Like I 100% get it how you could be driven to this.

682
00:37:41,520 --> 00:37:44,600
Because people will just ask you the same thing all the time and just not, like they

683
00:37:44,600 --> 00:37:46,120
just won't try.

684
00:37:46,120 --> 00:37:52,040
It's like up to you to figure it out or to look it out for them, which gets frustrating.

685
00:37:52,040 --> 00:37:56,680
But like I was also an idiot at one point about something I didn't know.

686
00:37:56,680 --> 00:38:00,560
Maybe not an idiot, but you know, I didn't know all the right things to do.

687
00:38:00,560 --> 00:38:03,560
I didn't know that you could search Reddit, you could search GitHub, you could search

688
00:38:03,560 --> 00:38:04,560
discourse.

689
00:38:04,560 --> 00:38:08,720
Like there's all these places to find information or like, oh, I probably need to look in this

690
00:38:08,720 --> 00:38:10,480
spot in the documentation to find it.

691
00:38:10,480 --> 00:38:14,680
Like this is really, this like hobby that we have is like crazy complicated and just

692
00:38:14,680 --> 00:38:18,480
like expecting everyone to just go to look at a piece of paper and be like, yeah, so

693
00:38:18,480 --> 00:38:21,160
I just deployed it on my system at home.

694
00:38:21,160 --> 00:38:22,440
It's like a little strange.

695
00:38:22,440 --> 00:38:24,680
It's a very weird thing that we do.

696
00:38:24,680 --> 00:38:29,120
So when somebody comes in and they're like, I don't get it, I think that's pretty fair.

697
00:38:29,120 --> 00:38:30,120
It's super weird.

698
00:38:30,120 --> 00:38:32,960
So go to explain it to anybody else you know, like they're not going to understand anything

699
00:38:32,960 --> 00:38:34,240
you're talking about.

700
00:38:34,240 --> 00:38:40,640
I remember when I started self hosting, I avoided GitHub pages because they were intimidating

701
00:38:40,640 --> 00:38:45,040
and it's usually because of the top sections for newcomers I think are the most intimidating

702
00:38:45,040 --> 00:38:51,280
when you go through and you view all the, the Docker images for various builds and what

703
00:38:51,280 --> 00:38:53,280
you should use.

704
00:38:53,280 --> 00:38:56,360
And once you get past that and you get into some of the installation instructions and

705
00:38:56,360 --> 00:39:03,200
configuration, it starts to make sense, but there are entire tools developers have dedicated

706
00:39:03,200 --> 00:39:07,000
to streamline some of these things because they are so complicated.

707
00:39:07,000 --> 00:39:12,680
And I'm thinking of things like Portainer and Unraid's community store where all of

708
00:39:12,680 --> 00:39:16,040
the container templates are set up for you.

709
00:39:16,040 --> 00:39:23,040
It is a complex thing, but in a way we also tend to handhold some users and maybe they

710
00:39:23,040 --> 00:39:28,240
don't always develop the skills they need to adequately deploy some of these things

711
00:39:28,240 --> 00:39:32,400
because their hands are held a little too long when they get started.

712
00:39:32,400 --> 00:39:34,880
And somewhere there's probably a balance.

713
00:39:34,880 --> 00:39:37,040
I'm not trying to stick up for either side.

714
00:39:37,040 --> 00:39:42,040
It's an interesting dynamic and just, I just find it interesting when I view and observe

715
00:39:42,040 --> 00:39:45,200
the interactions the community has with developers.

716
00:39:45,200 --> 00:39:46,200
Yeah.

717
00:39:46,200 --> 00:39:49,440
I think that your point about tooling is really interesting too, because a lot of these tools,

718
00:39:49,440 --> 00:39:54,320
I feel like have low entry points and very low ceilings too.

719
00:39:54,320 --> 00:39:59,880
Specifically, I think TrueNAS is what I've had the most problems with with my applications

720
00:39:59,880 --> 00:40:07,560
of they have very, I think it's TrueNAS, is the, like you can't change the Docker tag.

721
00:40:07,560 --> 00:40:12,720
So whatever somebody publishes as the template, or this might be Unraid that I'm thinking

722
00:40:12,720 --> 00:40:17,200
about, but it's these things that like the abstract Docker away in this way that like

723
00:40:17,200 --> 00:40:19,360
hides a lot of the implementation from you.

724
00:40:19,360 --> 00:40:21,360
So like you don't really know what's happening.

725
00:40:21,360 --> 00:40:24,960
So they'll come into the discord and be like, oh yeah, this like doesn't work and this doesn't

726
00:40:24,960 --> 00:40:26,120
work and this doesn't work.

727
00:40:26,120 --> 00:40:29,320
And then we'll be like, okay, we think we fixed that like the last like three versions.

728
00:40:29,320 --> 00:40:31,360
Could you upgrade to the latest and check it out?

729
00:40:31,360 --> 00:40:34,720
And they'll be like, oh, I can't like I'm stuck on this version until they publish a

730
00:40:34,720 --> 00:40:35,720
new one.

731
00:40:35,720 --> 00:40:39,720
It's like, well, yeah, I don't know what to tell you, man.

732
00:40:39,720 --> 00:40:40,720
Sorry.

733
00:40:40,720 --> 00:40:41,720
We don't manage that.

734
00:40:41,720 --> 00:40:46,040
But like, is it like, I'll just, you know, copy a Docker compose file to a Linux machine

735
00:40:46,040 --> 00:40:48,000
and spin it up because that's what I know how to do.

736
00:40:48,000 --> 00:40:50,920
But I had everybody, not everybody knows how to do that.

737
00:40:50,920 --> 00:40:51,920
Yeah, I guess.

738
00:40:51,920 --> 00:40:55,840
And I mean, there are plenty of great crash courses on YouTube and I think people can

739
00:40:55,840 --> 00:41:01,480
find, but it is intimidating, especially if you're not a technical person, you know, configuring

740
00:41:01,480 --> 00:41:07,000
files and making sure they're formatted correctly and the various errors your command line or

741
00:41:07,000 --> 00:41:08,080
terminal might throw.

742
00:41:08,080 --> 00:41:11,200
If you do something incorrect can be daunting.

743
00:41:11,200 --> 00:41:17,240
And I remember like when I started this, I was, I used computers for 15 years since I

744
00:41:17,240 --> 00:41:19,040
was like a little child.

745
00:41:19,040 --> 00:41:20,800
My dad was into computers.

746
00:41:20,800 --> 00:41:24,620
I've built Windows machines and done all kinds of stuff forever.

747
00:41:24,620 --> 00:41:28,920
The first time I had to install a Docker container, I about threw my computer across the room.

748
00:41:28,920 --> 00:41:32,760
I was just trying to install WikiJS and I could not figure out these Docker volumes

749
00:41:32,760 --> 00:41:35,720
and like getting the access to the ports.

750
00:41:35,720 --> 00:41:37,400
None of it makes any sense.

751
00:41:37,400 --> 00:41:41,300
And I feel like I have a pretty good knowledge base about computers, but like it's just,

752
00:41:41,300 --> 00:41:43,840
it's such a like a different thing to think about.

753
00:41:43,840 --> 00:41:48,800
And it's just so hard to like, I like, I totally get it when people post on self hosted with

754
00:41:48,800 --> 00:41:53,360
like what now I think are like, that's like a really silly question, but like I totally

755
00:41:53,360 --> 00:41:55,720
get how you're there and like, you have no idea what's going on.

756
00:41:55,720 --> 00:41:56,720
Cause I was also there.

757
00:41:56,720 --> 00:42:00,440
Like I just had to give up and be like, this is the dumbest thing ever on ever want to

758
00:42:00,440 --> 00:42:01,440
do this.

759
00:42:01,440 --> 00:42:06,120
Once you pick up on it, you feel like you're the most powerful person in the world because

760
00:42:06,120 --> 00:42:11,120
you can look at any Docker runner compose and, and translate it to your environment

761
00:42:11,120 --> 00:42:12,320
and deploy it.

762
00:42:12,320 --> 00:42:17,060
And I remember getting to that point and then the first time I discovered an application

763
00:42:17,060 --> 00:42:21,760
or piece of software that I had to deploy like five or six different containers in order

764
00:42:21,760 --> 00:42:26,920
for it to work, just kind of like turning around with my tail between my legs and realizing

765
00:42:26,920 --> 00:42:31,320
that I had hit another limit and one that I'm not sure I'm willing to, to surpass or

766
00:42:31,320 --> 00:42:32,320
try to surpass.

767
00:42:32,320 --> 00:42:33,320
Yeah.

768
00:42:33,320 --> 00:42:34,320
But for sure.

769
00:42:34,320 --> 00:42:37,360
But Hey, I do want to spend a little bit of time.

770
00:42:37,360 --> 00:42:40,960
I know we've talked about some of your projects as we wrap up here.

771
00:42:40,960 --> 00:42:47,640
I do want to ask you some pivot back to some more personal questions and specifically related

772
00:42:47,640 --> 00:42:49,200
to your home lab.

773
00:42:49,200 --> 00:42:53,080
I was hoping you could tell us a little bit about what your home lab looks like, what

774
00:42:53,080 --> 00:42:58,040
some of your favorite self hosted applications are.

775
00:42:58,040 --> 00:43:01,160
And then we had talked about this a little bit before we started recording.

776
00:43:01,160 --> 00:43:07,160
I'd love to hear some, some hot takes you might have on technology in general, self

777
00:43:07,160 --> 00:43:10,720
hosted, self hosting related, open source, whatever.

778
00:43:10,720 --> 00:43:13,720
I'm sure you have some interesting opinions and I'd love to hear them.

779
00:43:13,720 --> 00:43:14,720
Yeah.

780
00:43:14,720 --> 00:43:16,080
I'll try to get your podcast canceled.

781
00:43:16,080 --> 00:43:17,080
We'll see.

782
00:43:17,080 --> 00:43:18,080
Two episodes in.

783
00:43:18,080 --> 00:43:19,080
Thanks.

784
00:43:19,080 --> 00:43:20,080
I did it.

785
00:43:20,080 --> 00:43:21,080
Nice.

786
00:43:21,080 --> 00:43:26,400
So for my, my, um, my own lab, I have kind of like a, I try to keep it pretty minimal

787
00:43:26,400 --> 00:43:28,580
just for like power reasons.

788
00:43:28,580 --> 00:43:32,920
So I have, um, a Synology NAS that's like my main storage device.

789
00:43:32,920 --> 00:43:35,280
I think I have like, like 20 terabytes on there.

790
00:43:35,280 --> 00:43:39,880
I just got two new 12 terabyte hard drives that I'm going to swap in over Christmas breaks.

791
00:43:39,880 --> 00:43:41,440
This is very exciting.

792
00:43:41,440 --> 00:43:42,600
And I have a little NUC.

793
00:43:42,600 --> 00:43:47,560
I bought like one of the higher end, I think NUC models got like an i7 processor, like

794
00:43:47,560 --> 00:43:48,720
64 gigs of Ram.

795
00:43:48,720 --> 00:43:51,160
And that's like the main Proxmox server.

796
00:43:51,160 --> 00:43:52,900
So yeah, I run Proxmox on that one.

797
00:43:52,900 --> 00:43:58,720
And then I think I have like two or three Linux virtual machines and then, um, have

798
00:43:58,720 --> 00:44:05,800
a little network box that runs, uh, that also runs Proxmox and then it runs OpenSense inside

799
00:44:05,800 --> 00:44:06,800
of it.

800
00:44:06,800 --> 00:44:09,600
I used to run the Unifi dream machine.

801
00:44:09,600 --> 00:44:13,640
I really liked that until like one day, of course, like I had family over and we were

802
00:44:13,640 --> 00:44:16,320
like playing video games and then it just like, it died.

803
00:44:16,320 --> 00:44:19,640
Like it would only do like one meg up and down.

804
00:44:19,640 --> 00:44:23,080
So that's always embarrassing of when you're like the computer guy and like, oh, my network's

805
00:44:23,080 --> 00:44:24,080
down.

806
00:44:24,080 --> 00:44:25,400
Sorry guys, we can't play Diablo.

807
00:44:25,400 --> 00:44:26,400
Yeah.

808
00:44:26,400 --> 00:44:27,720
So I scrapped that.

809
00:44:27,720 --> 00:44:28,760
It's still sitting in a box.

810
00:44:28,760 --> 00:44:32,920
I need to call them and get a replacement or something because it should work.

811
00:44:32,920 --> 00:44:37,400
But I really liked OpenSense and I was able to consolidate like my DNS server in there.

812
00:44:37,400 --> 00:44:40,920
I use AdGuard for that and Uptime Kuma as well.

813
00:44:40,920 --> 00:44:41,920
I like that one.

814
00:44:41,920 --> 00:44:45,560
That kind of lets me know when something's crashed or I log files fill up and I forget

815
00:44:45,560 --> 00:44:47,440
to clean them, stuff like that.

816
00:44:47,440 --> 00:44:51,520
I think like the most used ones, although of course I have Home Assistant running on

817
00:44:51,520 --> 00:44:52,520
the NUC.

818
00:44:52,520 --> 00:44:56,880
Um, so that's, that's probably my most used application that and doing all the automations

819
00:44:56,880 --> 00:45:00,240
in Node-RED is kind of the one I get into the most.

820
00:45:00,240 --> 00:45:03,360
And then I also run kind of a self-hosted development stack.

821
00:45:03,360 --> 00:45:08,840
I have Git-T running with Drone or the CI and build systems.

822
00:45:08,840 --> 00:45:14,160
I was just going to ask if you use these machines for development or if you have a dedicated

823
00:45:14,160 --> 00:45:18,480
rig that you do most of your development and compiling on.

824
00:45:18,480 --> 00:45:20,960
For the compiling and everything, I do it all on my MacBook.

825
00:45:20,960 --> 00:45:25,160
I have the, I bought like the first edition of the M1 Pro MacBooks.

826
00:45:25,160 --> 00:45:26,160
I love that thing.

827
00:45:26,160 --> 00:45:27,160
It's just great.

828
00:45:27,160 --> 00:45:28,160
It's so fast.

829
00:45:28,160 --> 00:45:32,560
I remember when I bought it, I had, I was doing all my programming on like a big giant

830
00:45:32,560 --> 00:45:35,960
i7 with like 64 gigs of RAM running Windows.

831
00:45:35,960 --> 00:45:40,000
And when I got the M1 backbook, it like cut my compile times in half.

832
00:45:40,000 --> 00:45:41,520
So happy.

833
00:45:41,520 --> 00:45:43,600
So how about some hot takes then?

834
00:45:43,600 --> 00:45:47,800
Any anything you're willing to, uh, to, to go public with?

835
00:45:47,800 --> 00:45:51,840
Yeah, I think that the self-hosting community just like kills applications.

836
00:45:51,840 --> 00:45:57,880
Oh, they just re they will drive them into the ground with feature requests and that

837
00:45:57,880 --> 00:46:03,920
especially for new developers, like when I started Melee, it's just so hard to know,

838
00:46:03,920 --> 00:46:05,400
is this a good idea?

839
00:46:05,400 --> 00:46:06,820
Is it not?

840
00:46:06,820 --> 00:46:08,440
And like people don't know, right?

841
00:46:08,440 --> 00:46:10,680
They'll just like ask for whatever they want.

842
00:46:10,680 --> 00:46:13,280
Whatever they think is like, this is what I need in this application.

843
00:46:13,280 --> 00:46:14,460
Everybody's going to use it.

844
00:46:14,460 --> 00:46:15,560
You should build it.

845
00:46:15,560 --> 00:46:18,600
And then if you're a developer and you're new and like, you haven't been through the

846
00:46:18,600 --> 00:46:21,960
whole thing with the open source projects and where you have all this stuff and you

847
00:46:21,960 --> 00:46:25,480
like, you have to manage expectations and what your thing is going to do.

848
00:46:25,480 --> 00:46:28,920
You just keep building things cause it's super fun and you get like feedback of like, Oh,

849
00:46:28,920 --> 00:46:29,920
thanks so much.

850
00:46:29,920 --> 00:46:30,920
This is exactly what I needed.

851
00:46:30,920 --> 00:46:32,840
And like, that feels good.

852
00:46:32,840 --> 00:46:36,720
It feels really good to like build something that people like and they use, but we just

853
00:46:36,720 --> 00:46:38,920
like, we'll just ask for stuff.

854
00:46:38,920 --> 00:46:44,840
Like I've had so many requests to add SSL into our single sign on into Melee and I won't

855
00:46:44,840 --> 00:46:46,240
do it because I don't care.

856
00:46:46,240 --> 00:46:49,520
And I don't want to maintain it and I don't want to write tests for it.

857
00:46:49,520 --> 00:46:50,520
That's fair.

858
00:46:50,520 --> 00:46:56,240
I see a number of projects and I think the longer I go and the more I self-host, the

859
00:46:56,240 --> 00:46:57,240
more I sympathize.

860
00:46:57,240 --> 00:47:02,960
Occasionally I'll see a project where it will just say, this is feature complete.

861
00:47:02,960 --> 00:47:05,280
I'm not accepting requests.

862
00:47:05,280 --> 00:47:09,400
I'm not accepting PRs of any sort.

863
00:47:09,400 --> 00:47:12,760
And I remember thinking it the first time I had stumbled across that, wow, that's like,

864
00:47:12,760 --> 00:47:14,840
that's very anti-consumer.

865
00:47:14,840 --> 00:47:19,760
But the more I have conversations like this, I think the more I understand that sentiment.

866
00:47:19,760 --> 00:47:25,880
Honestly, I think I would probably be in a similar boat if I were to develop something.

867
00:47:25,880 --> 00:47:28,440
I don't have an incredible amount of time.

868
00:47:28,440 --> 00:47:32,840
And so I feel like I would be hyper-focused on the things I want to do and I wouldn't

869
00:47:32,840 --> 00:47:38,920
want to manage a GitHub issue or issue list or feature requests that's hundreds of items

870
00:47:38,920 --> 00:47:39,920
long.

871
00:47:39,920 --> 00:47:40,920
Absolutely.

872
00:47:40,920 --> 00:47:41,920
Yeah.

873
00:47:41,920 --> 00:47:46,920
And then I think my other one is that programs like Unraid and TrueNAS and Portainer and

874
00:47:46,920 --> 00:47:54,520
these Docker abstraction layers are just a net negative on the community.

875
00:47:54,520 --> 00:47:59,080
There's too much fragmentation on how to do things now instead of using what is already

876
00:47:59,080 --> 00:48:02,680
an abstraction on very complicated dependency management.

877
00:48:02,680 --> 00:48:06,280
And now you've put two or three more layers on top of it.

878
00:48:06,280 --> 00:48:09,040
So now no one online can help you.

879
00:48:09,040 --> 00:48:12,080
People will come into the Discord all the time and be like, I have this really weird

880
00:48:12,080 --> 00:48:13,520
setup and it's not working.

881
00:48:13,520 --> 00:48:18,000
It's like, well, I don't know, man, that's rough.

882
00:48:18,000 --> 00:48:21,400
If you want to deploy it on Debian Linux with the Docker Compose file, I could help you

883
00:48:21,400 --> 00:48:22,400
there.

884
00:48:22,400 --> 00:48:23,960
That's about where my knowledge ends.

885
00:48:23,960 --> 00:48:24,960
It's interesting.

886
00:48:24,960 --> 00:48:29,640
I think it's probably a good point when you hold their hands a little too much, they become

887
00:48:29,640 --> 00:48:34,320
a little too dependent and don't understand the underlying infrastructure.

888
00:48:34,320 --> 00:48:39,040
I'm sure every time you release a project, you get the influx of people saying, is there

889
00:48:39,040 --> 00:48:43,360
an Unraid community template for this or something like that?

890
00:48:43,360 --> 00:48:48,320
And as you mentioned earlier, those inevitably end up being the users who have their database

891
00:48:48,320 --> 00:48:55,600
applications pointed to the latest image version with Watchtower auto updates set as well.

892
00:48:55,600 --> 00:48:58,400
Yes, that's another unpopular opinion.

893
00:48:58,400 --> 00:49:00,040
Latest tags shouldn't exist.

894
00:49:00,040 --> 00:49:01,600
You just shouldn't have them.

895
00:49:01,600 --> 00:49:05,320
What if you're manually managing your updates?

896
00:49:05,320 --> 00:49:08,840
What happens if your server crashes and you have to restore from a backup and you pull

897
00:49:08,840 --> 00:49:10,200
the latest container?

898
00:49:10,200 --> 00:49:11,600
You get the same one you had?

899
00:49:11,600 --> 00:49:17,200
Well, that's a fair point if you weren't aware of what container you were using.

900
00:49:17,200 --> 00:49:18,200
Right.

901
00:49:18,200 --> 00:49:22,480
You're taking something that is deterministic or is supposed to be deterministic.

902
00:49:22,480 --> 00:49:27,520
Docker is made so you build it and you have a virtual machine in a little box.

903
00:49:27,520 --> 00:49:29,040
It has all my Python dependencies.

904
00:49:29,040 --> 00:49:30,520
It has all my runtime dependencies.

905
00:49:30,520 --> 00:49:31,840
It's all in a neat little package.

906
00:49:31,840 --> 00:49:36,320
Then you're taking it and making it unpredictable.

907
00:49:36,320 --> 00:49:39,560
You pull the version image, what you should do.

908
00:49:39,560 --> 00:49:41,840
But the project also has to do that correctly.

909
00:49:41,840 --> 00:49:45,040
I'm one to talk because I'm not really doing it correctly in Melee.

910
00:49:45,040 --> 00:49:48,760
I was going to say that you were making me feel bad, but maybe that makes me feel a little

911
00:49:48,760 --> 00:49:50,600
better now.

912
00:49:50,600 --> 00:49:53,160
I tag my databases with major versions.

913
00:49:53,160 --> 00:49:59,640
I have Postgres 16 and I'll upgrade it as the updates come through.

914
00:49:59,640 --> 00:50:03,800
Then when there's a major version release, I'll set aside an hour on the weekend and

915
00:50:03,800 --> 00:50:10,880
make sure I do the proper SQL dump and then update and restore it back in.

916
00:50:10,880 --> 00:50:16,920
But almost all my non-database things, I don't tag with latest specifically, but I leave

917
00:50:16,920 --> 00:50:17,920
the tag empty.

918
00:50:17,920 --> 00:50:20,520
So I'm implying that it's latest in my file.

919
00:50:20,520 --> 00:50:27,160
Then I use a really handy command line tool that I'll run when I have time that'll check

920
00:50:27,160 --> 00:50:29,240
for container updates.

921
00:50:29,240 --> 00:50:32,280
I'll have to manually specify these are the containers I want to update.

922
00:50:32,280 --> 00:50:37,800
So I have control, but to your point, I do not track what versions I'm on.

923
00:50:37,800 --> 00:50:44,720
So if something were to crash in between updates and an application update, I probably wouldn't

924
00:50:44,720 --> 00:50:48,280
know where I need to point my image.

925
00:50:48,280 --> 00:50:50,760
I had this exact problem with...

926
00:50:50,760 --> 00:50:54,760
I'm one to talk because I will also do this and it will also come back to bite me.

927
00:50:54,760 --> 00:50:55,760
Don't feel bad.

928
00:50:55,760 --> 00:50:56,760
We all do it.

929
00:50:56,760 --> 00:50:58,320
I just think we should.

930
00:50:58,320 --> 00:51:06,080
So I run Vicunja, which is a to-do app for planning household stuff I have to do.

931
00:51:06,080 --> 00:51:07,160
They did a major...

932
00:51:07,160 --> 00:51:11,080
I don't think it was a major update, but there was a pretty big database migration.

933
00:51:11,080 --> 00:51:14,280
And I was just like, a station in my box as I do.

934
00:51:14,280 --> 00:51:18,640
And then I just doc or pull, sure, whatever, corrupted the database.

935
00:51:18,640 --> 00:51:19,640
What do I do?

936
00:51:19,640 --> 00:51:20,640
I'm pulling the latest tag.

937
00:51:20,640 --> 00:51:21,760
I have a corrupted database.

938
00:51:21,760 --> 00:51:24,080
I don't know what version I was on before.

939
00:51:24,080 --> 00:51:25,080
I can guess.

940
00:51:25,080 --> 00:51:29,200
So I restored the backup and I think I pulled like six or seven tags before I linked the

941
00:51:29,200 --> 00:51:30,600
one that I think I was on.

942
00:51:30,600 --> 00:51:33,280
Because of course, I don't remember when the last time I did that was.

943
00:51:33,280 --> 00:51:34,280
I'm not on a regular cadence.

944
00:51:34,280 --> 00:51:35,760
I'm just like, oh, I should probably do that today.

945
00:51:35,760 --> 00:51:36,760
It should be fine.

946
00:51:36,760 --> 00:51:38,640
Well, you've given me a lot to think about.

947
00:51:38,640 --> 00:51:44,600
I'm going to go cry in a corner for a little bit and then rethink my own Docker deployment

948
00:51:44,600 --> 00:51:48,960
strategies before I interview another developer again.

949
00:51:48,960 --> 00:51:53,240
So back on the Home Lab, one of the cool things that I have that I think would help a lot

950
00:51:53,240 --> 00:52:00,000
of people with this is I have renovate bot configured with my Ansible playbook.

951
00:52:00,000 --> 00:52:01,440
The renovate bot is kind of like the Penda bot.

952
00:52:01,440 --> 00:52:04,840
I don't know if you're familiar with that, but it kind of just scans your repository

953
00:52:04,840 --> 00:52:06,520
and says like, oh, you have these things.

954
00:52:06,520 --> 00:52:07,520
They need to be updated.

955
00:52:07,520 --> 00:52:11,200
It creates a PR with the update and then you can just merge it.

956
00:52:11,200 --> 00:52:16,480
So I have all of my Docker images are managed through Ansible, but it's really just like

957
00:52:16,480 --> 00:52:18,680
a Docker compose thing that I do.

958
00:52:18,680 --> 00:52:23,360
So mostly it's just Docker compose gets copied to the machine by Ansible.

959
00:52:23,360 --> 00:52:27,560
So I have my Docker tags defined in there with the specific version.

960
00:52:27,560 --> 00:52:31,460
And then whenever a new version comes out, renovate bot runs and then it will submit

961
00:52:31,460 --> 00:52:33,940
a PR that upgrades that version.

962
00:52:33,940 --> 00:52:35,320
So I could just merge that code in.

963
00:52:35,320 --> 00:52:40,620
And then I have the nicety of like, the updates are like fairly automatic, but I also have

964
00:52:40,620 --> 00:52:42,900
control over when that happens.

965
00:52:42,900 --> 00:52:48,660
And I have the specific tag that I know is like the thing and it's all in version control.

966
00:52:48,660 --> 00:52:50,600
There's a really good history of everything that happens.

967
00:52:50,600 --> 00:52:52,960
And you can set that up for free on GitHub.

968
00:52:52,960 --> 00:52:58,880
I was going to ask you how you track updates because that's kind of a pain too.

969
00:52:58,880 --> 00:53:03,160
I think not everyone has a good system for doing that, but it sounds like you have it

970
00:53:03,160 --> 00:53:06,200
figured out through that deployment you have there.

971
00:53:06,200 --> 00:53:11,080
Yeah, that setting up the renovate bot to do like the PRs to upgrade the tags is really

972
00:53:11,080 --> 00:53:13,800
like, I don't really think about it at all anymore.

973
00:53:13,800 --> 00:53:16,480
It's just, I check the PRs every week or so.

974
00:53:16,480 --> 00:53:19,560
And then if it's a minor version, I'll merge it in and it'll update.

975
00:53:19,560 --> 00:53:20,740
And most of the time it's good.

976
00:53:20,740 --> 00:53:24,760
If not, I restore the backup and try it again or figure out what went wrong.

977
00:53:24,760 --> 00:53:32,160
How many self-hosted applications or pieces of software do you think you deploy just roughly?

978
00:53:32,160 --> 00:53:35,760
I think the last time I counted the applications, it was like 13.

979
00:53:35,760 --> 00:53:36,760
Okay.

980
00:53:36,760 --> 00:53:39,200
Well, I don't know if that's a lot or not, but it feels like a lot.

981
00:53:39,200 --> 00:53:41,400
Yeah, I think it's a fair amount for sure.

982
00:53:41,400 --> 00:53:45,360
I don't know how many I deploy off the top of my head, but yeah, I'd say 13 is a lot

983
00:53:45,360 --> 00:53:46,360
to manage.

984
00:53:46,360 --> 00:53:51,040
Does that include things like open sense and databases?

985
00:53:51,040 --> 00:53:54,400
I guess I'm not counting, I'm counting applications, not necessarily containers.

986
00:53:54,400 --> 00:53:58,600
If you counted containers, it'd probably be like 25, maybe 30.

987
00:53:58,600 --> 00:53:59,680
That's a lot too.

988
00:53:59,680 --> 00:54:00,680
It's all in Ansible.

989
00:54:00,680 --> 00:54:01,680
It's fine.

990
00:54:01,680 --> 00:54:02,680
That's fair.

991
00:54:02,680 --> 00:54:03,680
You keep talking about Ansible.

992
00:54:03,680 --> 00:54:05,840
That is the one thing I'm not familiar with.

993
00:54:05,840 --> 00:54:11,240
I understand the principle behind it and I've read a lot about it, but I've never ventured

994
00:54:11,240 --> 00:54:12,680
into it myself.

995
00:54:12,680 --> 00:54:20,040
I'm very particular with how I deploy my services and every little event that happens on my

996
00:54:20,040 --> 00:54:21,040
machine.

997
00:54:21,040 --> 00:54:27,920
So automating things makes me a little nervous, but enough people use it that I'm sure it's

998
00:54:27,920 --> 00:54:30,200
probably more efficient than what I'm doing myself.

999
00:54:30,200 --> 00:54:31,480
Yeah, it's super neat.

1000
00:54:31,480 --> 00:54:35,400
You do all kinds of cool stuff with provisioning the server in a very specific way.

1001
00:54:35,400 --> 00:54:40,600
I pull down on my.files, I install NeoVam, I get it configured just the way I like it,

1002
00:54:40,600 --> 00:54:42,760
and that all happens automatically.

1003
00:54:42,760 --> 00:54:48,600
But I will say that people throw it around in the subreddit, it's just no big deal.

1004
00:54:48,600 --> 00:54:50,200
Just go check out Ansible.

1005
00:54:50,200 --> 00:54:51,920
But it was like learning Docker for me.

1006
00:54:51,920 --> 00:54:53,120
It was horrible.

1007
00:54:53,120 --> 00:54:58,520
It took weeks of trial and error and trying to figure all this stuff out.

1008
00:54:58,520 --> 00:55:00,280
It's a good skill to learn.

1009
00:55:00,280 --> 00:55:01,280
It's super nice.

1010
00:55:01,280 --> 00:55:07,240
It's really turned the HomeLab thing for me into less of a tinkering hobby and more of

1011
00:55:07,240 --> 00:55:10,560
like, I'll just set it and forget it for a while and then I'll come back to it when I

1012
00:55:10,560 --> 00:55:11,560
have time to do it.

1013
00:55:11,560 --> 00:55:14,520
So it's not like kind of a thing that's always looming over my head.

1014
00:55:14,520 --> 00:55:19,640
And it's like if everything crashes, cool, it kind of sucks, but I can restore it pretty

1015
00:55:19,640 --> 00:55:20,640
easily.

1016
00:55:20,640 --> 00:55:24,000
That's been kind of a nice little load off my mind.

1017
00:55:24,000 --> 00:55:26,440
So hey, I think we need to wrap things up.

1018
00:55:26,440 --> 00:55:29,600
I think we've had a lot of good conversation.

1019
00:55:29,600 --> 00:55:38,000
Hayden, I'm going to throw some links in the show notes to Melee and to Homebox and some

1020
00:55:38,000 --> 00:55:41,760
of your other projects and some of the things we've spoken about.

1021
00:55:41,760 --> 00:55:48,880
Are there any ways, do you have any methods of donations set up for people who are listening

1022
00:55:48,880 --> 00:55:53,480
and want to support you or who maybe deploy your application that can thank you and show

1023
00:55:53,480 --> 00:55:55,720
their appreciation for the work you've done?

1024
00:55:55,720 --> 00:55:59,080
Yeah, the best way right now is through GitHub sponsors.

1025
00:55:59,080 --> 00:56:03,720
So if you go to the repository, there should be a little icon on the right hand side of

1026
00:56:03,720 --> 00:56:06,280
the page and then you can donate there.

1027
00:56:06,280 --> 00:56:09,520
Right now I'm kind of distributing that money amongst the developers who are working on

1028
00:56:09,520 --> 00:56:12,980
it, but we're looking at some different options to make sure everybody gets a little piece

1029
00:56:12,980 --> 00:56:13,980
of the cut.

1030
00:56:13,980 --> 00:56:15,520
So we're working on that.

1031
00:56:15,520 --> 00:56:16,520
So stay tuned.

1032
00:56:16,520 --> 00:56:17,520
Perfect.

1033
00:56:17,520 --> 00:56:21,280
I will try and go grab those links and throw them in the show notes as well.

1034
00:56:21,280 --> 00:56:25,000
But for all of the listeners, just know you can also navigate to the GitHub pages and

1035
00:56:25,000 --> 00:56:27,560
sounds like you can get to those links from there.

1036
00:56:27,560 --> 00:56:30,360
So with that being said, Hayden, thanks again for joining us.

1037
00:56:30,360 --> 00:56:31,360
This has been great.

1038
00:56:31,360 --> 00:56:32,820
I've really enjoyed the conversation.

1039
00:56:32,820 --> 00:56:37,080
This has been really interesting insight into the mind of a developer.

1040
00:56:37,080 --> 00:56:43,260
I'm going to continue loving on Homebox in my own way and I promise I won't make any

1041
00:56:43,260 --> 00:56:46,800
ridiculous feature requests from here on out.

1042
00:56:46,800 --> 00:56:52,320
And if I do, you can just directly turn them down and I promise I won't be offended.

1043
00:56:52,320 --> 00:56:53,320
Awesome.

1044
00:56:53,320 --> 00:56:55,200
Well, yeah, I look forward to hearing from you.

1045
00:56:55,200 --> 00:56:56,200
All right.

1046
00:56:56,200 --> 00:56:57,200
Thanks and thanks everyone for listening.

1047
00:56:57,200 --> 00:56:58,200
I'll see you next time.

1048
00:56:58,200 --> 00:57:27,200
Bye.

