Leo Dion (host): Hello and welcome to another episode, EmpowerApps.
I'm your host, Leo Dion.
Today I'm joined once again with Marin Todorov.
Marin.
Thank you so much for coming on.
Marin Todorov (guest): Thank you.
Inviting me again.
I love your show.
I always listen in the car.
It's so great to be here.
Leo Dion (host): You, you actually, you actually drive
and, and you said you, well.
Do you work from home or do you commute or is it mostly for, for trips?
Marin Todorov (guest): Well, I do work from home.
working remotely for a long time, but kindergarten , the way is a little bit
nasty, goes through the train station.
It's a long way.
So I have my daily commute, actually, it's the kindergarten and
Leo Dion (host): So what does the kindergartner think of the podcast?
Marin Todorov (guest): Alright good topics.
Good pace.
She generally likes . . Oh, well, well, on my way, on my way in.
I listen to podcast on the way back.
We'll listen to fairy tale.
So I think it's a, I think it's a fair deal.
Leo Dion (host): Yeah I'm same boat.
Yeah.
Couple of times I've had kids in the car and I usually don't listen to
my podcast, to be honest with you.
Big surprise.
Cuz I already have to edit it anyways.
. But like one time I'll put it on and they'll be like, daddy, that's your voice.
That's a pretty good, you got a pretty good podcast dad.
They're very nice.
They're very nice about it, even though I can tell it's
probably super boring for Yeah.
So let's get into it.
We're gonna talk about your new app today.
dataTile you wanna give an intro to the app and where you
came up with the idea for it?
Right.
Marin Todorov (guest): yeah, currently it, it's on the app store.
It's called dataTile for Simulator, as we just discussed before recording.
so what it does the short pitch is that it's widgets for debugging.
And so you log to Apple's Unified log in your app doesn't.
Where, is it an iPhone app?
Is it a watch app and so forth?
DataTile runs as a companion app to Xcode and just picks up available logs from
the simulator and just shows you a little widgets on screen to visualize your data.
If you're logging numbers, it can show you charts.
If you're logging progress, it can show you progress bars and so forth.
It just makes debugging much easier, much more intuitive.
Adds a little bit of color to it.
That's.
Leo Dion (host): Yeah.
It's awesome.
We talked about how I used it this weekend for, for gBeat app that I
work How does the app actually work?
Like, how does it get the logs and then able to build a chart based on
that, or display the text, right.
So,
Marin Todorov (guest): so the technical details are.
There's this tool that comes with Xcode, the simulated control.
So simctl on the command line, and you can automate some tasks
with for the simulator, right?
Like, so people would use it to set up the sim for tests or like
spawn a bunch of simulators to, to , verify their screenshots and.
things like that.
so you can control functions of the And so dataTile is also using the same
tool to read the logs from the unified log in your front most running sim
through that control command line tool.
And so it gets.
The fire hose of all of the processes log in your simulator.
So , like if you're making nice network calls or if you're making
Bluetooth connections and things like this, a lot of Apples frameworks log
to the same central place as well.
And if you log using the Apples logs, they also go into that same central place
reads this whole spurs amount of text and just filters for the ones that , come from
your app and the ones that look like some valuable data and based on what exactly
you log, picks them apart and says, okay, here there's something that says 20%.
It must be a progress bar.
Bang, it makes a progress , if something else, it can, can guess like a bunch
of types and make switches for them.
Leo Dion (host): Yeah, that's the biggest, most impressive thing
about it is I love how simple it is to set up and also just how it,
knows, oh this is gonna be a number.
We'll, despite it like a graph and it knows, oh, you're using an equal sign as
a separator or a column, it's just super easy to integrate into existing app.
It doesn't require like a, like a third party library, anything like that.
It just works right out of the box.
I love it.
Also in seat, you're talking about simulator control cuz I've, I've
actually been deep diving into that.
have a video coming out about how to fake sign in with Apple on the
simulator using vapor and sim control.
And there's a lot you could do with sim control.
It's, it's really powerful.
. know, like I could go on and on about it, but there's a surface
level of, oh, I wanna record a video or take a screenshot command line.
But there's a lot to, to sim control that people don't even realize.
Marin Todorov (guest): Right.
Yeah.
What, what did you find Mo most interesting?
, that, that it allowed you to do?
Leo Dion (host): So you can't do sign in with Apple on the simulator
on the Apple Watch simulator.
I shouldn't say specifically.
with gBeat for instance, we need to do that.
sometimes, I don't know if this, but debugging on a hardware Apple
Watch doesn't work 30% of the time.
So, or if it does work, it's super slow.
So I want to be able to sign in with Apple using.
It's a vapor backend.
I wanna be able to sign in with Apple on the watch simulator.
So what I do is I track the, whatever you send off of the iOS simulator
to sign in with Apple, whatever the, the, the JSON is, I save
that to every existing simulator.
Watch simulator that has.
save it like to the temp data container, and then when you run
the Apple Watch simulator, it looks for that file just like it would in
the, in the, in the data container.
And then it uses that to try to sign fake sign on with Apple on my backend server.
And it.
Now I can actually like run the app and sign in with Apple, well sign
in with Apple using the simulator.
So yeah, it's, that's a really powerful tool for, for me to just, to get,
get going on Apple Watch development.
I don't know if that made sense, but.
. Marin Todorov (guest): Yeah.
It, it does.
Yeah.
I think this tool is, is exactly the angle that it just offers so many possibilities
to automate things that otherwise would be so cumbersome to do by hand.
Just what you're doing, detect things and then communicate, especially
when there's few simulators involved.
I think that's just crazy.
Leo Dion (host): So Basical.
I was just gonna say like the Vapor app will just call sim control to like find
out what simulators you got running and then save the request to the, to
the watch as a file and then I'm good to go, like, which is really powerful.
Marin Todorov (guest): Yeah, I think, I think, I think especially for testing
things, for recreating whole, whole scenes if you want to call them like, right?
, when the, when the app is, is having some kind of data stored in documents, but
not in, in somewhere else and so forth.
So just setting up like a whole.
Seeing, let's call it like for you to jump on the simulator and test some
certain behavior in given conditions.
I think that's great.
It's amazing.
Yeah.
Yeah, and I was really excited also to go ahead.
to, to just see all the options that that show up.
, when you, when you type in sim sim control help is like Woo.
Leo Dion (host): Yeah.
Oh, seriously.
Yeah, so I have the Get app container and like the, the list
stuff, I have the all set up.
I'll put it link in my Swift package that I'm currently trying to finish
up case folks are interested.
But there's a lot.
If, if people want to add a new command, please feel free So, so yeah, simctl.
Super powerful.
What were the biggest challenges though, in building this app?
Marin Todorov (guest): So I don't know if you've seen it before, may,
maybe you've seen it, but like this last year, I, I've built a whole bunch
of, of different developer tools that like basically tackled like small
problem and some, something like that.
And so I, I would usually just make my coffee in the morning and then,
Timebox about a couple of hours.
I will post live updates on Twitter to see like how far I go within,
within this couple, couple of hours.
And, and this was like one of these ideas.
I basically made a coffee and then made a little rectangle and in
affinity photo with a number in it and I was like, Hmm, this is great.
Like, this is what I want to have.
I wanna while I'm debugging frameworks or, or command line tools
or , anything that doesn't necessarily.
Easily adjustable ui.
Basically, I would like be able to like have a, maybe a small piece
of UI somewhere on the side where I can see data that, that, that, that,
that I'm testing or I'm, I'm, I'm trying out , like more prominently.
And so within couple of hours I had a little window that showed a number that
also changed and animated a little bit and, and this, and this so like the
i, the idea to show a number on screen is not that that complicated, but was
really dedicated to make it a product.
And so this took a long time.
This took the most time.
I think first challenge was I was thinking, okay, so this
is gonna be an app, but it.
Doesn't fit into the sandbox because it needs to read the system log
and therefore it will be a problem for a lot of people to use at work.
And also like at home just for hobbies as well.
you, it might be an issue who knows if they cannot install from, especially for
people at work if they cannot install outside of the app store or it's difficult
to get an approval for this kind of thing.
So regardless, so one of the goals was go to the go to, go into the
sandbox, make it work into the sandbox.
Basically increased the potential audience.
this was a kind of a challenge, but turned out that from this sandbox you
can read the simulators lock stream and so, had to for leave aside command
line tools, something that felt strongly for the possibility to work with iOS
Apps watch OS apps TV So this was the one thing that, that was, was
a it was a hill, but I got over it.
The other thing that, that really tripped me over at a point was wanted
to make a hundred percent Swift UI app.
So for this app, I wanted to start from the beginning and
only use Swift I for everything.
so this was a, a in point was challenging, but it was still possible
and that was really happy with it.
However, I used only the latest and greatest with so it was
a nice process and so forth.
But during the beta, a lot of people.
They were trying out the application, said, Hey , by the way, I don't
wanna upgrade right now to Ventura.
I wanna wait out.
Until sir, so sometime before the release I decided to lower the, the,
the requirements and, and be compatible with macOS 12 and basically giving.
The set of features that they added last year to Swift UI was
Leo Dion (host): really difficult for, I was gonna say, there's like, you, you
do a lot of chart stuff and I'm like you really wanna get let go of that.
And just for Monterey.
did that go?
So,
Marin Todorov (guest): Swift charts, Swift charts.
I had to give up Swift charts.
I had to give up the new navigation.
System in Swift UI.
Yeah.
And I had to give up, most importantly, the new APIs that allow you to open
windows and pass data into them.
Yeah.
And so these three things were, were, were a little bit of a bummer to, to give up.
So had to recreate like what these APIs in code.
Yeah.
It wasn't easy.
But I mean, it kind of works.
think there's, I think.
But the initial version that isn't right now in the app store is still a couple of
visual glitches when you open new windows.
Maybe sometimes.
So, but it's something that I'm gonna work on.
Leo Dion (host): Yeah.
So it's funny you talk about that cuz we've been talking about I've been
building my own macapp bushel and like, I kind of regret supporting Monterey
in a lot of ways because I've had to do the same thing with opening windows.
Like I, we have this discussion with Sarah, but yeah, just I have to use URLs.
That's basically how I ended up doing it is using URLs and the URL listeners
to open new windows, cuz there was just no way I can get around the, that
lack of, it's, it's nice and now I'm like, man, should I just say screw
it and only support Vent Ventura?
It's like already been released.
Five, six months now, it's like, but like I already have all that code in there, so
it's like, well, maybe it's not worth it.
So, yeah, I can understand that.
Are you still happy with the fact that you support Monterey?
Marin Todorov (guest): As an indie app I don't think it has the far and wide
reach so that the additional amount of people who are in the Monterey will make
a difference for the adoption Right, But , I think it's the right thing to
it was the right thing to do, right?
It's enough for developers.
And I do know that developers tend to stay behind for a given
time on the previous version.
And would've been a little bit in your face, kind of, if I
released it only for Ventura.
I just wanted to say about chart actually.
was an interesting, it was an interesting moment because I actually
gave up on charts before lowering the requirements because Okay.
a given point.
Yeah.
At a given point.
noticed that when I was doing stress testing and leaving the app to run
for like a few hours with like a huge amount of, of, of updates per second.
I was testing something with like 300, 400 logs per second, just leaving
it to run for a really long time.
And then I noticed that sometimes when I come back to my desk, like
the computer would've would've restarted in the meantime.
And so , and this was like, really?
That's so good.
Really.
It's not good.
Yeah, that's not good.
and so, yeah.
And and there were no crash logs and no air logs and nothing that I could actually
like track back to being the cause of it.
only thing that I found in, in the system log was that there would be a GPU panic
then, after recreating a few times, I managed to find basically, yeah, a as the
app is updating, the screen will glitch then, there will be like a little freeze.
Then the mouse will be a little bit unresponsive and a little bit
later the computer will restart.
so it, it seems to be something with the GPU that is, that is going very wrong.
, I couldn't track it down, but a point I was desperate.
And so I was tr just trying out, like commenting out code, just like , like
monkey debugging or so like mm-hmm.
I don't know how it's called.
But yeah, after commanding out switch charts, it turned out that
don't have this problem anymore.
So it seems that running the macapp wits with UI charts and the same on the side
somehow GPU to just completely go nuts.
And then the whole system was down.
But since way to debug if you don't have like nothing to go off,
I couldn't really figure it out.
So that's why when I figured out that this is really the reason and like it
was reproducible and you, a hundred percent that this is the cause of problem.
Then I removed it and just made the charts myself.
that's, that's solved the problem somehow.
Leo Dion (host): Did you file on it?
Marin Todorov (guest): They require a they that they require a sample
app and that this meant that I have to, like, put in the, the app
and, and it's in completeness.
Just putting a Swift UI chart in an empty window didn't really do So I tried
Leo Dion (host): to like, which you need a simulator running at the
Marin Todorov (guest): Well, the, the log that was in the system log
said that the that the GPU panic originated from the sim render server.
Okay.
So it was, and, and this is the problem, like this made it so
wild because the, the charts are running in the, in the Mac process.
Right.
And, and the panic was caused by the sim render.
But they, none of them caused it, like, separately only, like Right.
It was, yeah, it was a very difficult issue to track down.
Leo Dion (host): Interesting.
yeah.
But in the app, you, you support bar charts, right.
Is there anything else you support as far as kind of information you display?
Marin Todorov (guest): Right.
So I have, I have charts for the charts.
I have progress bars a switch for bullying values, and then the rest is just text.
I also have I also have timers that show up.
Like it's a, it's a mixture some text and, and some just little images.
Yeah.
Leo Dion (host): was there anything else you wanted to talk about
when it comes to Swift UI on the.
Marin Todorov (guest): I think I just like felt like sharing that, I had
doubts because previously I used to run into issues especially with UI for Mac.
With Xcode 13, for example, I often had compilers sometimes would hang quite
often if you like put in the wrong curly brace somewhere would just cause it
to like lose, lose its But with Xcode 14, I must say that has been great.
I have not had any hangs in Xcode.
I didn't have any.
problems with the compiler?
It looks like everything is much more stable.
So just in case there's somebody out there wondering if Swift UI
is ready for my answer is yes.
I think people should go up with Swift UI by default.
Yeah.
And I think
Leo Dion (host): like, I mean like I think like with AppKit, like there's a
lot you can do there that you can't do in Swift UI or you may have experience
with it, but I think the biggest challenge is just gonna be long-term
maintenance of a AppKit app at this point.
Cuz like that would be the thing I would be afraid of as much as like, oh
yeah, AppKit, I can do everything I want to do, but like in two or three years
it's gonna be like an uphill battle trying to maintain an app like that.
Marin Todorov (guest): Most probably.
Yeah.
And, and also what I, what I was thinking a lot about because as I said, one of
my goals was a hundred percent with I.
So, and then, and then at a point I had to like, stop, stop and, sit down and really
think about like, what does that mean?
Because like, and this application is, is it, is it or is it Swift UI?
Or , and it's notification center.
Is it , is it AKI , or is it Swift UI?
So there, there's a whole bunch of classes that are, that are not Swift UI
per se, but , they're necessary for an app to, to use like the system mm-hmm.
And so I came up with the, with the, with the summary that kinda like the,
the idea that , I have a Swift UI app and for certain things I have
to reach out to other classes that are part of AppKit or But as long as
this is the exception and , the app is defined by being a Swift UI app think
that's a hundred percent Swift UI app.
Yeah.
Leo Dion (host): Yeah, totally.
wanna jump back, I wanna talk to about what we talked about
before the show, cuz we talked about the getting it into the app.
And There, what were some limitations you ran into with sandboxing?
kind of Yeah, well, just that first, let's start with that.
Marin Todorov (guest): Right.
So sandboxing was something that I tried early and.
Now, the design of the app is basically a very straightforward pipeline, right?
Like it, it reads input and then it just processes it, it filters it and then finds
interesting data and then shows the ui.
So it's kind of like a mostly one way data flow.
Mm-hmm.
from the input to like the output, which is the ui.
And so I basically have diff few different input consumers.
And so at first the input consumer was actually starting a binary on, on the
system and reading the standard output.
So this would be very useful for command line tools and things like this.
Mm-hmm.
. So this is the first thing I tried and then I was like, okay maybe
it will be actually much nicer if instead of reading the standard.
for which you need privileges on the system, read the log for which you and you
don't have to start a binary and so forth.
So I did that and then at this point I thought, okay, this is I have these two
and this is great, but at this point, I think to go to the app store, because I
feel that this product is something that.
A wide range of people could use to to improve their productivity.
And as soon as I enabled the sandbox, I got a error message
saying, log the, the system log cannot be read from the sandbox.
And so this seems to be a hard limitation and there is no way around it.
It's, the one thing use a technical support ticket with Apple and they
confirm that you can't read a system.
sandbox, even if you're pseudo and so forth.
So, so this is why I decided to go for supporting the simulator first.
Since you can read the systems.
Log from the sandbox but not the machines log.
And so maybe this is the second step because a lot of people have asked me
on, on release day even though it was specifically for the sim actually almost
all of the questions that I got back from people on product hand or Twitter
and mastered mastodon, I think I.
probably over 90% were about, how about if I wanna macapp or like
yeah, debug something on my machine.
So obviously a non-box version will be like a, a next step for that.
just need to figure out, yeah.
, how to handle payments, updates.
And
Leo Dion (host): so forth.
Yeah, I mean the other thing you could do is just allow some sort of
place where you can read stuff and have, especially if it's a Mac up
you're developing or a command line tool, just have it pipe the log to a
specific place thatdataTile could read.
I mean, you could go that route.
. that way you don't have to Yeah, yeah.
ahead.
Where were you?
Marin Todorov (guest): Sorry.
Yes, it could possibly have a web socket like there, there's
many ways to consume the logs.
But this was one of my other, so I had like few principles that
I wanted to follow when this one of the principles was No, depend.
and no changes.
Yeah, that makes sense.
, like the least effort to adopt the app.
So if you use apple's log logs, go into the, to the unified log,
they disappear after a while.
It's all EF Ural, so it doesn't really you, leave any traces.
You might be already using them anyways.
Mm-hmm.
. And so it's a very lean process to you could be already logging
this way or to start logging.
You don't have to like, change your project or anything, just use apples.
Apples APIs to do this.
And, and, and, and I really wanted to find a solution that doesn't, doesn't require
you to change or add to your project.
Okay.
And you just really, truly just install and start working.
So, yeah, I think that version is a, is a good idea in this case.
Maybe a web socket is a better idea.
I'm still trying to figure out like how to, how to be How to serve the
most, the most people with this app.
Yeah.
But first I need to, as I said, I think first I need to ship a few more
like UI improvements and maybe few more features for the, for the app
that is in the app store right now.
And then we'll see about the next big step.
, Leo Dion (host): have to talk offline if there's a way we could,
we could work with bushel on, on faking logs or getting logs from,
from a Mac, Mac simulator todataTile.
Maybe once I, once I get back into that app, Yeah, cuz
that would be super useful.
But like, like you said, I mean, I do think like a, by far the largest
audience is gonna be iOS developers.
We all know that.
Right.
So I think you've covered that pretty well withdataTile.
you, you talked about kind of a bit about what you want do, what do you, yeah.
What are some things that you want to before you jump into to un sandboxing
this app or supporting Mac O.
Marin Todorov (guest): So I think the, I think one of the best things about
how the app works is that it actually doesn't depend on, on your code very much.
It depends on Apple's Unified log, which is something that Apple ships with your
system and therefore pretty independent from exactly what are you doing.
What I, what I found out it was two weeks ago, is that actually the,
the app also works with, with React native apps because I saw that you
can also write this, which is awesome.
Yeah.
This was so Wait,
Leo Dion (host): there's a wait, hold on.
There's like react native apps out there.
I thought people just use Swift.
I didn't know this.
Oh my gosh, what a revelation.
Marin Todorov (guest): I know.
They, they use a whole bunch of languages, , because like you can
also use it with Objective C it also writes to, to the unified log as well.
then I also, and I also thought, huh, there's like so many other
different kind of technologies.
There is, there's flutter, there's Kotlin.
I mean, all of these, all these people should also be logging
somewhere, I mean, for sure.
Right.
I think that the, the first thing that I, that I wanna do is just you, figure
out like if these people are actually served by the app and, and how this
can help make that more prominent.
then, and then come the, the updates, right?
Like I need to figure out at least a couple of glitches in
the UI that came from lowering.
always requirement.
There, there's a list of maybe five, six features that people required.
Mostly you the log is a fire hose.
There's a lot of things that log to it, including all kind of like system stuff.
So sometimes there's noise that, that will just pop up in your, in yourdataTile
That looks like something useful that you're logging, but is actually
like a framework putting there a.
Just characters and stuff like that.
So building, building an ignore list kinda like ignores whole
frameworks like your L session Yeah.
Noises or Bluetooth noise and so forth that you don't need things like that so
that you can just refine a little bit more what the app does automatically for you.
That'll be great.
Okay.
features like people requested that they wanna control if the
app jumps to the foreground.
when you, when you run the sim or just stay somewhere behind so
that you can decide when do you and when you wanna see it or not.
Because , if it's on a, if it's on a second monitor, that's fine.
It can just stay there forever.
It doesn't really matter.
But right.
, a lot of people use j just laptop and it really makes difference
for them if it jumps to the front anytime they're in the same cell.
a li a little bit more on the setting side , it's a power app, so it needs a
things, how to behave and, and what to do.
then, and that's it.
And that's one this is taken care of.
I think.
Just more widgets like, I think, and, and this is one thing that I
really want to hear from users about is , what kind of data they're.
Logging to their logs and , what will help them as, as a widget, because charts and
numbers switches and pro progress bars is probably something that I am, that I'm
really sure that, that people will use.
But I haven't seen how it's, it's very personal.
So I just want to hear like what, what people put in their logs and,
and what will help them right.
To see their,
Leo Dion (host): What, and that's it.
What, what We talked earlier about the issue you ran into with Swift UI Charts.
What kind of like performance stuff did you find as you built the app you like
had to change something underneath to make sure that it was more optimized
for not, not getting in the way of, of someone's iOS app, so to speak?
Marin Todorov (guest): Right, so, so this is a, I think
this is a very, very, it's a.
Let me call it profound question because it it comes from experience.
It's so, it's a debug app.
It's, it's something that is a companion for your, for your excode.
And so therefore you don't want it to impede like your development
process, which is Right.
, the main thing you're doing.
first of all, Apple's Unified log is, very, very fast because it's not
meant to be consumed in real time.
This is, this is the main point.
Everything goes into a binary format that is EF Ural.
As much work as possible is delayed to to the point where you decide to consume it.
And therefore, since the app is streaming that live it also
adds a little bit of overhead.
Luckily the process is that first you.
Which app are you, are you working with?
So that already filters the log, like to a, to a big, to a big a big
amount to, to like a certain app.
does add a little bit of, of overhead, of course.
so one thing that I had to do, and I really, I really loved it when I did it,
was there, the app would, the app would.
how many logs it receives per second.
So it basically tracks the velocity of the log.
Okay.
And therefore it just counts logs per second.
you, if you there's a little sub sub subtitle in each tile
and you click a few times, you will see different kind of data.
And so one of them is logs per second and.
I had to fine tune behavior of the input consumer so that I know, like if
it's, if you're logging very rarely, let's say once per second that.
Basically renders every update with a little neat animation and so forth.
But if you're logging like a hundred times per second something interesting that
doesn't really mean, like, it doesn't make sense to update the UI every time, right?
Like and mm-hmm.
, if you don't throttle that in any way, this really drives Swift UI.
Into, into, into crazy mode and like this really ease up CPU time as well.
Yeah.
And so forth and so forth.
And so I had to make the model basically for like the amount of
logs that you're, which you're doing.
So the more you log, the more the model will throttle, and then you will
still see like a reasonable amount of updates so that you can Right.
But not too many per perceive the updates, but like, not all of them.
Right, right.
So this isn't.
consumer CPU course for you.
And so this was very interesting.
Like it had to do a lot of fine tuning, like to find out like how
much is reasonable to see while you're traveling and so forth.
And so you still have to like update, update the data
but just like total the ui.
So it was, this was, this was a fun task.
It was a, it was a fun thing to do.
Leo Dion (host): Yeah.
Was , so this is Swift UI.
This is Swift UI updating.
What did you, if you mind me asking, what did you use?
for the reactivity of the Swift UI view and making sure that you're, like, did
you use combine Async Stream or what?
Like how did you, how did you do that?
I'm really curious cuz I don't, we don't hear a lot about like
high performance Swift UI apps.
Right.
Marin Todorov (guest): So, so think the whole, like the whole consumer part of
the pipeline and the data modeling part of the pipeline is very, , I forgot the word.
What's the opposite of reactive?
controller.
It's just, it's simple.
No, no.
It's just a simple Swift code as it gets.
Like there's no tricks, there's no nothing of it.
Just the simplest, yeah.
Fastest code that you can write.
So so this feeds everything into the data in basically the fastest possible way.
And from there there's a, there's an app model.
uses combined to communicate to each of the models that drives
every window in thedataTile.
Because you can be monitoring several apps at the same time.
Right, right.
And then each window would then split the stream into several, basically
tile models that drives every tile.
Right.
Based
Leo Dion (host): on the whatever metric.
Okay.
So when you do the throttling, you're trying to do that way early
on before you even get to combine.
you wanna do it as fast and quickly as possible it sounds like.
Marin Todorov (guest): Right.
But I did have to like this, this kind of like, it's, it's
kind of like a tree, right?
Like it just tr fences out to, to every of, of the views that needs to update.
But some things needed throttling and some things didn't need tring.
So, okay.
For example, when you keep the totals of logs that are, that are being
logged, you don't have to mm-hmm.
, you don't have to you can't really throttle that , you still need
to count all of the logs that are coming in, but the actual.
Properties that are driving the UI need to be dropped.
So for my, so for my models that were being bound via combined, I
had for some of those I have to, I had to kinda move away from the at
published property bonfire because this these drive , every of these updates
drives the whole, the whole model to.
Yeah.
so I had to do custom custom say these and this and this properties,
when they're updated, just have a bid set on them and then buying the
product together and decide when to send an update to based on Okay.
, which they specifically.
Data so I cannot split them.
These things are real time.
This is what updates the data model.
These things are not real time.
This is what drives the ui, and then this kinda like turns on and off
when you hit a certain amount of updates per second and this turns off
I'm sorry, the truckling turns on.
And then from there it just do the amount.
So it was really, that's awesome.
That sounds like fun.
I never had to do like this kind of ui self adjustment . Yeah.
Yeah.
It's basically like, almost like the ui, self-aware, like,
oh, you're loyal too much.
I'm not showing all of that.
Leo Dion (host): Yeah, yeah, yeah.
Before we was there anything else you wanna talk about?
Technical with the app?
I was gonna talk about launching next.
Right.
Marin Todorov (guest): No, I think, I think we covered a lot of, of technical
details and you, people I'm sure have their limits too, listen about
Leo Dion (host): listening about check this app out, like go to the
app store and get it and try it out.
It's definitely worth a So before we close out, let's talk about that.
Launching this app.
So how many, how many, you were mentioning earlier, you have like, you're big into
building like small apps often how.
How long, how is this different?
And then at what point were you like, okay, this is actually going into the app?
, Marin Todorov (guest): right.
So I think last year I think I've built like a whole bunch of niche things.
, like solved one problem that I had and it solved them.
And like, I usually just like package them.
Some of them I put on GitHub, some of them I just keep in a folder on my laptop.
And.
, but like they, oftentimes they just solve one problem.
And, and I'm really not so sure if that's a problem that I had
because of certain way I do things.
Yeah.
Or is it like something that people, without running like really user
interviews, you don't really know that.
like this app it, after I had the prototype and then after, I thought
like, this is possible to actually happen in the sandbox with the sim.
, this made me, made me instantly see the possibility the.
Basically any iPhone developer to use it.
, probably not every iPhone developer should use it or, or could use it,
but yeah, possibly anybody could.
Yeah.
Because it's a real use case for, for, for, for something
that people actually do.
And once I saw that productizing this, making it so to say was, was
really something that I wanted.
Yeah, so,
Leo Dion (host): so just to tell you, I've had this idea too, so you're not
the only one who's come up with this.
My idea was more doing it in the terminal but like the same idea, like totally.
But I, I think as a backup, you're, you get, you get away with it makes a
lot more sense than doing it in the But yeah, it's, it's a really good idea.
Did you face any issues with getting this, besides sandboxing?
Besides that what did you face any issues launching this app getting it out?
Marin Todorov (guest): Right.
So, so I, so I had few back and forth with app review naturally.
Okay.
I was gonna ask, but Yeah, it was, but it was a ni it was like a, it
was a neat coincidence that just before I was submitting apple had
this round the one on office hours.
They're not the one-on-ones.
Yeah, exactly.
The office hours over Zoom.
And, and, and I applied for, every single one like topic that they had open.
And I got approved for a couple of them those.
And that was really great experience.
I, can only recommend it to other people because agreed, yes, in
the, in the application form, you, you just enter your use case.
Possible questions linked to the app store and since the better was already
there, like people could just, people on the team could also just grab it and, and
try it out and see what it's all about.
And so, jumping on the Zoom call.
People have already tried it, already had ideas, already had
some answers we could just really use the time past possible way.
And I, I have only positive feedback for that.
And so they helped me also with app review how to frame.
So
this
Leo Dion (host): was a, this was a app review one-on-one that you had.
Marin Todorov (guest): I had one one-on-one about
the app store and one about.
It was I forgot the framing.
It was like a technical assistance kind of Yep.
Yep.
Gotcha.
And so one, the one that was about the app store I had exactly I, I
wrote them in the application form.
I just wrote them that like.
, it's a developer tool.
It's kind of a difficult setup.
, it requires to work with Xcode.
I don't know how to frame this on, on the App store page.
And also how to introduce this to the, to the app review team.
So, mm-hmm.
, can you help me guide me a little bit in, in that process.
And so they did.
so they did help me understand what were the limitations regarding
showing Xcode and screenshots into sim and screenshots and so forth.
So this kind of like, Topics that are, that are sensitive
for Apple and the App Store.
And, they're not really easy to navigate.
If you, if you need to yeah.
Send a request to the review team, then get an email back on the next date.
Then you send an email back on the next day and so forth.
So this could take some time I know from experience.
Yes.
And being able to talk in the real time on Zoom show people share screen.
This was just amazing.
So it is.
Yeah.
Leo Dion (host): Yeah, I, I agree.
It's take advantage of 'em try to get.
Try to come into it with a good list of questions or discussion topics,
but they are totally invaluable.
They, they know not so much app review, well, app review is super helpful,
but more in like, oh, I got a Swift UI question or a design question.
They know - they use that stuff and they know how it works.
They're gonna come up with great answers for you.
So, yeah, I agree completely.
It's.
very invaluable.
yeah.
Marin Todorov (guest): The last thing was - I mentioned I never
used the technical support.
you they're called incidents I think that you can send to Apple.
Mm-hmm.
When I was trying to make the system log work, I thought,
well, maybe I should write them.
I never did that before.
Mm-hmm.
. And so I did and emails that came back that I was completely floored.
because , this person called the Quin Eskimo, that he answers the
weirdest questions, the most difficult questions on the forms.
Yes.
He wrote me back and he sent like a few emails that were like pages
long, he was like, I see the problem.
I've tried and tried this.
Here's a project that I made in Xcode this problem.
But There's no solution in this way that you're looking for.
This is the things I've tried and here's the code.
And so I was really , I was really So this is something
that I also recommend to people.
Yeah.
I was just it was out of this world, so this was great.
How much do, how many do
you
Leo Dion (host): get per, per year?
Is it like two of those?
Marin Todorov (guest): Two you get, so you get two.
Yeah, and I've seen on the app store for 12 years, so this is 24 that I didn't use
, Leo Dion (host): so I've used.
I've used a couple in the last year, and mostly it ends up being like,
I'll talk to someone and they'll be like, oh, you have to do the, you
have to file a ticket, don't worry.
It's a freebie.
That's usually what ends up being, so I've actually used a couple, couple of 'em
and they were freebies cuz I needed to.
What is it like a access to a specific new entitlement or like like I had
one-on-one and they're like, oh yeah, we couldn't fix this, but here file
a dt dts and we'll take care of it.
So, yeah.
yeah, they're, they are, they'll, they'll give you an answer, the,
at least I'll say that, so, yeah.
Totally useful.
okay.
there anything else you wanted to talk about before we close out?
No,
Marin Todorov (guest): no, that's great.
I, it was a great chat.
Think it's nice time to wrap up.
Yeah.
Leo Dion (host): if wanna try out the app, where can they find it?
Marin Todorov (guest): they, if they search fordataTile it's, it's
one word on the app store, they'll find out the app right away.
Leo Dion (host): Yeah.
Give it a Yeah.
Yeah.
Thank you so much, Marin, for coming on again.
You're, you're a fountain lots of information and experience,
so it's great to have you Where could people find you online?
Marin Todorov (guest): Yeah, my website, is nderplot.com, like the word
under plot and there's all the links.
Leo Dion (host): Yep.
And we'll have his Twitter and Mastodon and everything else
in there as well on the show.
So definitely take a look and enjoy.
I don't know how often you block, like what, once a week?
Pretty much so you can see all his little apps and all
his valuable blog posts there.
Thank you, Marin.
Marin Todorov (guest): Yeah.
Thank you very much for inviting me.
This was, this was fun.
I'm, I'm really glad to see you again too.
Leo Dion (host): Yeah, same here.
can find me on Twitter @leogdion.
@leogdion@c.im is my Mastodon that I can also find my LinkedIn.
All the social media links are in the show notes.
company is BrightDigit.
Please take some time to review this podcast, and if there's any
topics you want me to cover, let me also like, and subscribe if you're
watching this on Thanks again and I look forward to talking to you.
Next time.
Hi everyone.