Episode Transcript
Available transcripts are automatically generated. Complete accuracy is not guaranteed.
Peter (00:02):
What's up, everybody?
Welcome to another episode of
the CompileSwift podcast. Thisweek, we are gonna be talking
about some AI tools and ourexperiences with those. But
first of all, Geoff, how are youdoing, buddy?
Geoff (00:14):
I'm doing pretty good.
I've, been pretty productive on
my apps lately and, you know,hoping to stick around and get
another podcast out.
Peter (00:24):
Awesome. Yeah. This week,
I'm hoping to be productive as
well, and and we're gonna get apodcast episode out for sure. We
took a break last week, folks.We, we had some things we both
needed to take care of.
And, hey, that's that's the wayit goes. Right? You can't do
everything every week even whenyou try hard. And lord knows as
developers, we try hard. I didspend a live stream, in fact, 2
(00:48):
live streams as of thisrecording with an an AI tool.
We're gonna get into it. And itshocked me is is the short
version. We're gonna be talkingabout some AI tools this week
that we think are helpful todevelopers. Some of them are
specifically geared towarddevelopers and tuned for that
and others are AI tools thatyou'll be familiar with probably
(01:09):
that are just general tools thatwe also think are useful. So
with that, I'm gonna hand itover to Geoff who's gonna go
through a couple here and someof his experiences.
Geoff (01:18):
Yeah. So I think the most
general set of tools that people
are gonna be familiar with arejust your standard AI chat bots.
You've got your chat gpts. Yougot Claude by Anthropic. I think
there's a couple other ones outthere that people are using to
do development stuff that aren'tnecessarily geared towards
(01:39):
development, but are still veryuseful for these cases.
You can ask chat gpt or quad orwhatever to generate code for
you, and it will do it. It willspit out code, and you are kind
of responsible for doingeverything on your own after
that. I find it personally morehelpful to kind of have a
(02:00):
conversation about code ratherthan have this stuff generate
code for me, where it's more,I'm trying to figure out a
problem. I know that I need todo x y z kind of thing, and I'm
gonna describe it from a higherlevel. Now you, chatbot, can you
help me accomplish this kind ofpath?
(02:21):
Can you walk me down this path?Can you be my guide rather than
doing it for me? And I thinkthat is a a goal that some of
these tools have is to justreplace it outright. But for a
lot of these more chat basedtools, I think that they are
geared towards, you know, chat,having a conversation, and
(02:41):
having a back and forth withthese kinds of things. And to
that end, you have tools thatkind of put a nice front end on
some of these kinds of thingsand make it more useful for
developer stuff.
We have a friend of the show andformer guest, Adam Wolf, made a
very cool app for this calledDeveloperDoc. We'll link that in
the show notes. And that wasjust a front end to all of
(03:04):
OpenAI's models that kind ofputs a nice developer friendly
front end on some of thesetools, but still is very much
geared towards being a chat toolrather than being a integrated
AI IDE, like some of the toolsthat we might talk about later.
So I've used these toolsminimally. I I I've definitely
used them a little bit.
(03:25):
And like I said, I use it a lotfor the kinds of things where I
know what I need to do, but Idon't know exactly how I'm going
to do that. For example, Irecently had to do a lot of math
stuff for one of the things thatI'm implementing in bark, one of
the new barcode formats that I'mworking on. And I am not a math
(03:50):
expert in any way shape or form.And what I did was I kinda
basically said, hey, I know Ineed to do this. I need to solve
this kind of problem.
How am I going to represent thisin code? And I didn't want it to
automatically just go, like, oh,here. Here's the solution,
because I can't check that. I myskills at math are not well
(04:14):
enough that I can look at thecode and go, oh, yeah. That's
absolutely correct.
I want it to walk me throughstep by step and say, you need
to solve this. This is howyou're gonna solve this part of
the problem. Then you need tosolve this. Here's how you're
gonna solve this part of theproblem, and kinda build it up
from steps like that. Does thatmake sense?
Peter (04:31):
It does because that is
sort of one of the two ways that
I use these tools. I'll quicklydescribe how I use them before
we we dive into sort of toolspecific discussions. So I do
like the idea of this chat toolthat I can have a discussion
with in a sense, kind of pairprogramming the problem without
(04:54):
being specific. Just to say toit sort of, hey. Here's the
problem.
You know, am I on the righttrack? And see what it says.
Because I agree with you. Thingslike, you know, math and those
kind of things, by no means am Ian expert. So if I need a math
formula or I just thought ofanother another good one maybe a
(05:15):
reg x something like that, I'dlove for it to generate that
part then I can take that partand apply it to my code.
Right? Now that's sort of my myfirst way of doing things. The
second way that I use thesetools and and this is one that
I'll talk about when we we diveinto the tools here in a moment
(05:35):
is letting it generate code forsomething that maybe I'm not
familiar with that I can learnfrom. But the important focus
there is to learn from it andnot just okay. The code must be
good because the machine said itwas.
Does that make sense?
Geoff (05:53):
Yeah. Absolutely. That
makes sense. That actually, ties
almost in reverse into anotherway that I use one of these
tools that actually I forgotabout until just now, which is
finding code on the Internetthat does something, and then
you're not understanding whatthat code is doing in the first
place. You can then take thatcode, send it to these chatbots,
(06:15):
and go, can you explain to mewhat is happening here?
And so last year, this was jeez.Oh, yeah. Over a year ago at
this point, I was working onsome machine learning stuff.
It's it's ironic that this isall kinda just layered in on top
of each other. I was working onsome machine learning stuff, and
(06:35):
I didn't really understand whatwas going on.
And being machine learningstuff, all of the sample code
that's out there is in Python.Using, libraries like Python's
NumPy, I all of the Pythonpeople are gonna be yelling at
me that that's not how it'spronounced. I have no idea how
it's pronounced. Using NumPy,using some of that the specialty
(06:56):
math stuff that that does. Andso there was a lot of I was
taking that Python code that Iwas finding on the Internet and
going, please explain to me inEnglish and or in Swift what the
heck this code is doing.
And finding it very useful tounderstand that where if I'm
looking at some Python code, andI have a base level of
familiarity with Python, but Idefinitely don't have any
(07:18):
familiarity with some of thesemore esoteric libraries like
NumPy, that I could take thatcode and I could send it to, an
LLM like this and go, walk methrough what this is actually
doing. And it would do that, andthat was a way that I could then
understand what it's doing andthen reimplement it myself in
(07:39):
Swift or reimplement it in myown code base and tweak it the
way that I needed to in order tomake it fit. And that was very
helpful. That was somethingwhere it's like, I found this
code that does what I wanna do,but I don't wanna just copy and
paste it because, a, it may notfit my use case 1 to 1 exactly,
but also I just don't likehaving code in my code base that
(08:01):
I don't understand. And so verymuch just like, I found this
code.
I wanna take it off theInternet. I wanna use it, but I
don't understand it. Can youhelp walk me through it? And so
I think that's another placewhere this these kinds of tools
are are very useful. You canhave it talk to you about a
piece of code, whether it's yourcode or somebody else's code.
Peter (08:24):
No. Right. It's an like
you say, it's, you know, it's
it's a pair programming,technique, I think, in many
ways. And also useful, as yousay, hadn't occurred to me until
so you mentioned it, but it is agreat way to get started saying,
hey, here's this thing in thislanguage. I need it to be in
(08:44):
this language.
Figure that out for me and then,like you say, take that put it
in the context of what you needand also learn from it from
there because that, for me,actually would be a great way to
learn something like Pythonwhere I really don't know hardly
anything at all. But I know theI know the concept of what I
(09:05):
need.
Geoff (09:06):
And then I think the one
remaining use case that I've
used this for, this is a waydumber use case than any of the
rest of them, is simply, I knowthat this API exists, but I
can't remember what it's called.And Apple's documentation is
we're all familiar with Apple'sdocumentation. And I I just
search is not working. I can'tfind what I need. My Google fu
(09:27):
is is bad.
I can't find this or or it'ssomething obscure, but I know it
exists. And just being able togo in and ask the LLM, hey. I'm
trying to do this thing, and Iknow that it exists. Like but
what what is the API I'm lookingfor? And it's really good at
being a kind of, like, nice,fancy search tool, and it'll go
(09:47):
like, oh, yeah.
You just need to call thismethod. And it's not writing the
code for me. It's not generatingbig giant chunk of code. It's
going like, hey. Here's the oneline you need, and you can kind
of solve the rest of the problemfrom there.
And so that's another thing thatI I find really useful where
it's like, I know that I can dothis, and I'm just I'm just
(10:07):
blanking on how to do it. AndGoogle search isn't helping me.
Apple's documentation isn'thelping me. What is it that I
need to do to get there? Thesetools have been super good.
This is especially true in caseswhere you're talking about
something old or obscure. Thebig one that this helped me with
recently was AppleScript. I wasimplementing AppleScript in an
(10:31):
app in a Mac app that I wasworking on, and all of the
AppleScript documentation waswritten 20 years ago. Apple's
documentation search likes tohide it. Google, if you ask it
about something that's happened20 years ago, it's like 20 years
ago that didn't happen.
That's not an enthusiast. Whatare you talking about? Google
is, like, you know, superagainst showing you anything
(10:54):
older than a couple years. So,yeah, it's impossible to find
anything. You go to the LLM,you're like, hey.
I have this question about how Iimplement an Apple Script,
function in my app, and it goes,oh, yeah. You just do this. And
and it it doesn't complain aboutthe fact that, oh, who's writing
Apple Script in 2024? I am. Dealit.
It just gives you, it just givesyou exactly what you need.
Peter (11:17):
Yeah. And I think that it
raises what you say there
raises, a very important pointhere, which is regardless of the
tool that you use, and by that Imean whether it's a AI chatbot,
Google search or whatever it maybe. At the end of the day, you
(11:39):
still need to know what thequestion is that you need to ask
and how to ask it. And I thinkAI does a better job at helping
you figure out how to phrasethat question. Right?
Because, like you say, we've allsat there putting a putting a
bunch of stuff in a searchengine, and it's just not
(12:00):
working. However, you try tophrase the question. But I think
with AI, you know, sometimes Ifound that the experience is it
sort of figures out what youmean, but you, you know, it's
like I see what you're trying tosay, but you don't have the
words. Let me help you out. Youknow, did you mean this?
Yes. That's exactly what Imeant. And and I do like this
(12:22):
idea of I, you know, I have theknowledge. I can't remember the
name of this API, And, ofcourse, as soon as it tells you,
you're like, oh, yeah. That'sit.
And then you remember, oh, and Iknow and now remember how I used
it. So that is a good use caseas well.
Geoff (12:37):
Yep. Or or, you know, it
it gives you the jumping off
point to go into Apple'sdocumentation and go, okay. Now
what's the specifics about this?What what is now that I know
what class I'm looking at, whatare its functions, what are its
whatever, it it gives youanother point to kind of jump
off and be more learning.
Peter (12:55):
And I I guess the
takeaway lesson here is, now
that we now that you've put itout there is let's hope that
they didn't train, the, youknow, the AI services they're
gonna put in Xcode on thedocumentation. Otherwise, all
hope is lost. Right?
Geoff (13:10):
Let's let's hope they do
and then that gives them excuse
to make better documentation.
Peter (13:14):
Or maybe at that point,
the machine takes over. It's
like, look, I got this. What'sup everybody? I wanna tell you
about CleanMyMac by Macpoor.Now, I have been using this for
years.
So many years that I don't evenremember at this point. But if
you're a Mac user and you don'thave this tool, trust me, you
(13:34):
need it. So let me tell you whatyou can do with this. Now, when
I open up the application, notonly is the UI absolutely
gorgeous but I run SmartCare andall I got to do is open the app
click on SmartCare and hit thescan button. Now when I do that
what's gonna happen it's gonnaanalyze my system and it's gonna
(13:56):
go through and it's gonna lookfor junk.
It's gonna check to make surethat I don't have any malware or
anything like that on my Mac.It's gonna run some performance
checks. It's gonna go throughand check for application
updates and then it's also gonnagive me the option to look at
what I would call the clutter onmy machine, kind of my files,
right? The stuff that that I putthere and I'm not kidding you,
(14:20):
every time I run this and I runthis at least once a week, it
will find at least a couple ofgigs worth of junk files to
clean out. And all I gotta do isto tell it go ahead and run and
it'll clean out the junk files.
The other day when I ran it, itfound 6 gig of files and believe
(14:42):
me when I tell you I ammeticulous about keeping junk
off of my machine and it willjust find this stuff splattered
all over different folders andthen it'll run the performance
checks like I say and it'll justlook and see if there's anything
that it thinks needs to be done.It'll let me know about any app
updates and I can just have itupdate them for me. Now on top
(15:04):
of that, there are other tabs.There's the cleanup tab and
it'll go in there and you cantell it to do various cleanup
operations for you. Again, it'sgonna run an analysis.
As developers, we all know aboutXcode and how much space it
takes up but you will be amazedabout the amount of files that
(15:25):
can build up and caches overtime that you just don't think
about and you know, they justdon't clean themselves up very
well and again, it'll go throughthere and save me gigabytes of
space. It's absolutelyunbelievable. The performance
tab is fantastic. It'll runthings like flushing the DNS for
me and it'll run the maintenancescripts, it'll check disk
(15:48):
permissions for issues there andall of those things to give you
every ounce of performance outof your machine. And if all of
this sounds good to you, and itshould if you're a Mac user,
like I say, I consider this likeone of my first installs.
You can go topetawhidham.comforward/ cmm and
that's gonna jump you to theright spot where you can go in
(16:10):
and you can try out Clean MyMac. You'll get a 7 day free
trial. Personally, like I say,every time they bring out a new
version, it's an instant upgradefor me. So again, go to
peterwhidham.comforward/cmm, andget started with CleanMyMac
today. So then as kind of like
Geoff (16:29):
a half step between
purely chat based tools that
aren't really meant fordeveloper stuff and full fledged
developer IDs that we'll getinto later. We have our tried
and true, our good friend,Xcode. And with Sequoia and with
Xcode 16, you need both. Appleintroduced predictive code
(16:51):
completion, and that is kind ofan expansion of the existing
autocomplete that tries to useAI heuristics to give you what
you need from a developmentperspective. And so I think both
of us have used this, and Ithink both of us have kinda come
across similar answers, which isthat sometimes it's magic.
(17:13):
Sometimes it's great, and itjust does everything that you
absolutely wanted. And othertimes, you're sitting there
going, what on earth are youthinking Xcode? What where did
you get this? Why do you thinkthat this is what I want? And
it's never really clear which iswhich and and what you're gonna
get.
So it's kind of a mixed bag, butit is, I think, a step towards
(17:36):
Apple realizing that, hey. Thesetools could be useful, and maybe
we should start looking intointegrating them with our
software. And what can we doMhmm. From there? So what's
what's your experience?
Peter (17:51):
Yeah. So so my experience
is a mixed bag, and and I did
start by using it when it wasfirst available in the I think
it was the betas. Right? We hadit a little bit before the RCs.
And, you know, I wasn'texpecting miracles, but what I
found was it was good.
(18:12):
It it surprised me in a in a waythat was like, oh, you know, it
would suggest things likevariable names based on my code
and, you know, things alongthose lines, which were good for
helping me think about, youknow, variable naming is hard.
Right? And and it did help sortof, like, yeah. That's a good
(18:33):
idea. Let's go with that.
Right? You know? Now that said,if it in the situations where
there was no code, you know,that was definitely one of
those, yeah, that's that's notso great. Right? But, once there
was a bit of coding there and,you know, it was pretty good for
me at things like initializersand and stuff like that.
(18:58):
So it was a mixed bag, but forthe most part I was impressed
with it from a first attempt byApple. That that's kind of where
I'm at. Now would I would I justtrust it and go with it? No.
Definitely not.
But it was it was a good way tofill that blank screen, if that
(19:18):
helps. You know what I mean?Yeah.
Geoff (19:19):
Definitely. Yeah. I I
think that's been my experience
as well. It is something thatfor a lot of the boilerplatey
type stuff, like you said,initializers, codable
conformance, that kind of thing,it's good. It's it's not
perfect, but it it is good, andit certainly deals with it a lot
(19:42):
better than some of therefactoring tools that they've
had there in the past.
Peter (19:45):
Yeah.
Geoff (19:45):
But there are some times
where it wants to insert
something, and I just go, Idon't I don't know why you
thought that was what I wantedto do.
Peter (19:55):
Yeah. It didn't so much
wrap itself in circles as just
went off on a wild tangent.Yeah. Exactly.
Geoff (20:01):
Yeah. Thankfully, the way
they've integrated this is
pretty easy to ignore, that itjust kinda gives you some ghost
code, and it shows up, and youcan very easily ignore it. But,
you know, sometimes it just doessomething so weird that you're
like you just get to stop for asecond and go, what?
Peter (20:19):
Yeah. Yeah. If you think
of it as a smart autocomplete
tool, it's not too bad.
Geoff (20:25):
Yeah. I I think that's
all it's intended to be. And,
you know, it it has all of theups and downs that being a smart
autocomplete that that's whatwe've known about on keyboard
autocomplete for forever on iOS.
Peter (20:37):
Yeah. Yeah. Right. Yeah.
It's as good as that.
Let's put it that way, folks.Alright. Good luck with that.
Yeah. But that is only step 1 ofthe plan for Xcode.
Right?
Geoff (20:48):
Yeah. They announced at
WWDC that they would have their
own kind of chat adjacent toolcalled Swift Assist. And I don't
know about you, but I haven'tseen hide or hair of that since
WWDC.
Peter (21:03):
Nope. Nothing at all.
Geoff (21:05):
Yeah. So I don't know
that we we haven't had any
announcements about it. Wehaven't had any you know, here's
when you might expect to see it.Even, you know, Apple's talked
about a lot of the Appleintelligence features that
they've announced. And we startto see some of these coming with
image playgrounds in 18.2 andthose kinds of things.
This one seems to just, notreally be coming. So I I don't
(21:29):
know when we expect to see thator if we expect to see it by
next year or what. But, yeah,it'd be a nice to have, but as
of right now, we're just kindawaiting for it to actually
exist.
Peter (21:40):
I think that there's
there's 2 parts to the problem
here, I think, for Apple. Youknow, firstly okay. Depends on
how you look at it. But in myopinion, you know, they were
clearly delayed in their AIservices in general, be it
developer or consumer. Now weare starting to see them as you
(22:03):
say and and so far I've beenreasonably happy with them.
But I think the problem is withthe developer one, you know,
this is what happens when Appleannounces stuff way back in
June. And then we sit here onthis promise for the rest of the
year. And here we are almostgetting ready to start talking
(22:27):
about the next conference, andwe still don't have what was
supposed to be here this timearound. And in the meantime,
everybody else has I I was gonnasay caught them up. But I think
from the get go, everybody elsehad already surpassed him.
And I I wonder if part of thereason, understandably, is
(22:49):
they've not released thembecause they've looked at it and
said, you know, our our stuff'sjust not good enough. But the
problem with that is, well, ifyou hadn't told us about it in
the first place and and it justturned up at some point, we
would have been more impressedthan the promise the empty
promise of a year of waiting.Right?
Geoff (23:07):
Yeah. And if they're
delaying it because it's not
good enough, you know, it's notlike everybody else has stopped.
Peter (23:14):
Yeah. Exactly. Right? You
know? And and it's not like
everybody else has got itperfect.
So at this point, kind of maybeput it out there and not beg for
forgiveness, but just say, hey.Here it is. Just get You know?
Geoff (23:27):
Get it out there and
iterate.
Peter (23:28):
You know? Yeah. At least
that's that's how it feels to
me. I I've sort of I don't wannasay given up waiting for it. You
know, it's like, yeah, I'll tryit out when it gets here, if it
gets here.
But in the meantime, there areother routes that I think are
probably working better thanthis unreleased stuff unless
it's truly stunning. I I I can'tsee how it could be based on the
(23:54):
mixed reviews of the servicesthat are out there now for
consumers, which arguably aregonna be used a lot more. Right?
Geoff (24:01):
Mhmm. Absolutely. So then
on the far other end of the
spectrum, we have these fullydeveloper centric IDEs. And I
haven't really worked with anyof those, but I know you have.
And I know that the one thatyou've interacted with the most
is called Cursor.
We'll have a link to that in theshow notes as well. Why don't
you tell me a little bit aboutyour experiences with Cursor,
(24:22):
what you've used it for, whatyou've liked, what you haven't
liked? Just tell me, everythingabout it.
Peter (24:27):
Yeah. So I'm gonna go
down 2 different tracks here for
2 different tests that I'vedone. We'll put links in the
show notes. I did them on a livestream because I wanted I wanted
everybody to see it as ithappened and thankfully there
was also some folks in the chatroom that had used Cursor before
that were able to give me somepointers. Now let's start with
(24:50):
what is Cursor.
So Cursor is essentially VisualStudio Code with some extra
smarts on top is is how I woulddescribe it. So if you're
familiar with Visual StudioCode, you're already most of the
way there. Right? I did a coupleof experiments that went along
the same lines for 2 different Iwould say 2 radically different
(25:14):
projects. And what I wanted todo was just hand it over to the
tool and say, I'm gonna doexactly what you're gonna tell
me to do.
This seemed like the best way togo about this. So the two
examples, one was a web appusing React and the other one
(25:35):
was to build a iOS SwiftUI app.So let's talk about the the
React one. The way it goes islike this. Right?
I had an empty IDE, essentially,and a chat window. And in the
chat window, you describe whatyou want. Now you can be as
verbose as you wanna be and I dorecommend that or you can build
(25:59):
it up in sections. The way thatI went about this was I'm gonna
give it an overview ofeverything I want this app to
do. In the case of the web app.
Right? I went along the lines ofsomething like I want to build a
web based application usingNode, React, Tailwind CSS,
(26:22):
MySQL, and TypeScript. I wantthe application to have a
registration screen that usesemail and password. I want it to
have a profile screen where Ican change my password. And I
want to have a home screenessentially after I've logged
in.
(26:43):
Plus the ability to, you know,usual crud. Right? You know,
delete the profile and so on.And that was it. And at that
point, I just hit return.
It goes away and thinks about itfor a minute. It was pretty
quick, I gotta say. And it comesback and says, okay. Look.
(27:03):
Here's a series of tasks I thinkyou need to perform to make this
happen.
And it's very much workingthrough the tasks and saying,
yep. Go ahead and do this one.For example, let's let's take my
this my SQL section. It says,okay. You need to create a
database and it shows me the SQLand I'm like, yep.
(27:26):
Go ahead. Do that. And itcreates, you know, along with
the table. It runs that for me,creates that, and then it says,
okay. You know, now you need tobe able to hook up to that
database.
So it'll show me some connectioncode and I'll say, yeah. Go
ahead. Do that. It'll create anew file with all the connection
code and any prompts for thingslike, you know, passwords and
(27:47):
things like that that I got toput in. In this case, it took
the sensible approach ofenvironment variables.
Right? So there was that. Andthen you save these files. And
you go through this process ofcreating a series of files based
on each of the parts. And itfully explains to you what it's
(28:07):
doing.
So if you don't know, you know,what what's going on here, you
can learn from that. The reasonI chose this one was I already
knew how to do these things, andI wanted to see how well its
suggestions matched up with theway that I would have done this.
(28:28):
Now at the end of it, you'regonna go through however many
tasks for, you know, what you'retrying to create, and at the end
it'll say something like, okay,you know, now go ahead and and
run the app. Right? In thiscase, there was a server part
for the node and there was aclient part for the for the
(28:49):
React side.
So I just run them both and sureenough, hey, it popped up in the
browser and, life was not good.The reason being is it's kind of
user error a little bit in thatI had not set, a password on my
my SQL if I remember rightly.You go back to the chat box.
(29:10):
Again, I wanted to hand it allover to the machine. I told it
what the problem was and you cantell it, you know, here's the
problem and it'll go away andanalyze all the files in your
project to give itself context,and then suggest a solution.
And sure enough it comes backand says, ah, yes. I see the
(29:32):
problem. It literally says, ah,yes. I see the problem. It's
trying to be friendly.
Suggest a solution. Again, youcan say go ahead and do that.
Run it again. Great.Everything's working now.
That was the the basics of theweb app. Right? Now the only pre
requirements is I did have tohave Node installed on my SQL,
MySQL. Right? Stands to reason.
(29:55):
So that was track number 1.Pretty pretty straightforward
stuff there. Right? In the nextstream, I wanted to challenge it
further because this is, youknow, I was like, well, this
this thing's not gonna be ableto do this. Right?
So I opened up an Xcode, newempty Xcode project, went to the
app and said, I wanna create aswift UI application that has a
(30:17):
list view with an entry formwith various fields. I want to
be able to edit a record. I wantto be able to, you know, display
the list of records, see thedetails when I tap on 1 and that
was pretty much it. And the onlyother thing I said was I wanted
to use swift data, which Ithought for sure was gonna catch
(30:40):
it out. Same process, it goesthrough and says, okay, Here's
what we're gonna do.
Series of tasks. Go through andperform those. It creates a
series of switch files inside myXcode project. I screwed up. It
was my fault.
It was putting me in the longwrong location. I should have
set that up beforehand. That'son me. But, sure enough, the
(31:04):
files that it created were werefine. Right?
The first thing it did was itcreated the model, a nice model
for me. So if you've not doneSwift data, this was a great way
to see how to create a model inSwift data. And then it created
the list view. It created the,you know, the for loop in there
(31:25):
to to make the list. It createdthe tap event for well, actually
the navigation, I should say,for the details view.
On the details view, I couldactually edit in the screen. Go
back. It would automaticallysave because it's swift data And
I even as a bonus, it gave meswipe to delete, and it just
(31:45):
worked. So, you know, at thispoint, I was like, well, that
was a lot better than Iexpected. And and I know you
were there to see, to see thison the stream, and I, you know,
I didn't do anything in between.
I literally just let it do itsthing. And like I say, the
mistakes some of the mistakesthere were were human error for
(32:07):
sure. I I had, you know,learned, okay, point it to the
right folder next time, and soyou don't have to move files.
That was like the basicexperience. And there's a part 2
that I'll I'll get into in asecond, but I I wanna pause here
for any comments or questionsfrom you since you saw this
happen.
Geoff (32:25):
No. I mean, I saw the
full initial thing, and it was a
little weird that it didn'treally catch up all of the
things that you had already setup with regards to the MTX code
project. But once you had thatworking, it did basically do
everything that it said. Justkinda you just copy and pasted 4
different files, and it's like,yep. Here's your entire app.
(32:47):
It's done. Yeah. And, you know,is it exactly the code I would
have written? No. Not at all.
But it took the machine 30seconds when it would have taken
me probably close to 30 minutes.So, definitely something that is
a huge kick start to a projectlike this.
Peter (33:06):
Yeah. That is a very
important point. That was one of
my takeaways that I mentioned onthe stream was, okay, it's not
done anything I couldn't domyself. But it has done it
significantly quicker than Iwould because hey, I gotta type
the code out and it didn't.Right?
So it is a great time savingtool for the base sort of base
(33:31):
plate, you know, mundane code toget you started And and I agree
with you, you know, some of itwas like, well, I might not have
done it that way. But it got mea running app that I can now
start working with significantlyquicker. That was the good part.
Alright? Now this is wherethings got interesting because I
(33:52):
wanted to one of the specificthings I wanted to do was to
challenge it with adding a newfeature.
I wanted to add this featurewhere basically there was a
screen with a text field, a richtext editor. And you can put
text in, that gets stored withit, and you can have it
associated with one of the preexisting records. So I described
(34:17):
it again what I wanted it to do.I felt I described it pretty
good and sure enough, you know,it analyzed all the files and
said, okay, look here's a bunchof changes we need to make.
Created a new model, right, forfor this new piece of data and
then also created a bunch offiles and made changes to the
(34:40):
existing ones, which isimportant because on the one
hand, you wanted to update theexisting ones.
Like for example, adding, youknow, the models to the
container in in the startup ofthe app and things like that,
but it started to generateerrors. Now having been there
before when I did the web app, Iwasn't too concerned because I
(35:02):
knew that the best way to goabout this is, yes, I could
probably solve them myself, butto trust in the system. And so I
would tell in the chat box, I'dI would literally say, hey, in
this file or when I wasbuilding, I got this error or
couple of times I got thiscrash, right, when it was trying
(35:23):
to run. It would go through andand almost would you say it
almost felt a little bit smugabout the way it was like, oh,
yeah. I see the problem.
Right? And and and I think I waseven saying to the screen, no.
No. No. No.
You created this problem, notme. Yeah. And so it made
(35:45):
suggestions to fix the problem.Again, was like, alright. We're
gonna go with this.
Trust in the system. And Istarted going down and
everything was fine at first. Itwas building, but there was some
issues. So I would read describeagain some of the things that
weren't quite right. But then atthat point, we got so far down a
(36:05):
rabbit hole of trying to fixthese problems that it felt like
I was getting caught in a loopand going around solving one
thing that generated somethingelse that then broke the first
thing that then fixed the firstone, broke the second one.
And and it started to feel likethat after about 30 minutes. Was
that your impression as she waswatching it, or do you think it
(36:25):
was just me?
Geoff (36:27):
I I I I think that that
was at the point where I saw
that it was going in circles,and I had other things to do,
and so I dropped off at thatpoint. So I was like, oh, okay.
This doesn't look good. I don'tknow what I'm gonna be able to
do to help. Let me, I I gotother things that I have to
catch up on.
So, I did unfortunately miss thethe resolution of all of this.
(36:48):
Okay. But yeah. Yeah. Idefinitely saw where you started
to get into a point where youwere editing files, and it was,
like, reediting them, and youkinda got into a thing where
it's, like, hang on.
We've been here before. Yeah.And, and and so, yeah, I I
missed what happened after that.I missed if you ever actually
got out of this circle. But,yeah.
I I did catch you getting to,the rut.
Peter (37:12):
Alright. So spoiler
alert, we did not get out of the
circle. If you had come backabout, I don't know, 40 minutes
later, we were just in adifferent party. It's like like
in England for American driverswhen you get on the roundabout
and you can't figure out how toget off. You know?
It we did not solve the problem.But I think the takeaway lesson
(37:37):
there, discussing it with thechat room, was if you start with
kind of a monolithic, you know,description to build the app and
do that and then try to addfeatures, it's not necessarily
gonna go great for you. So thatis a that is a mark against,
this particular Which is
Geoff (37:57):
weird because it seems
like that's what these tools are
kind of built for. It's needinghaving the knowledge of your
code base as it is.
Peter (38:05):
Yes.
Geoff (38:06):
So it's so it's
surprising to hear that. And I
know that I've seen again, we'regonna go back to friend of the
show Mhmm. Adam Wolf. I knowthat I've seen on his streams
where he is taking his existingcode base, which is huge. He's
got a very large code base
Peter (38:20):
Mhmm.
Geoff (38:21):
And been using stuff like
Cursor for that and being and
using it to add features, and itseems to mostly work fine for
him. So I'm I'm a little bitsurprised, and I I wonder how
representative either of yourexperiences are, honestly. Like,
I'm not gonna just say, like,oh, yeah. Peter's clearly doing
it wrong. But Yeah.
(38:42):
I I I also, like you know, isAdam's project as it exists in a
setup where it just works betterfor some reason? Is it the fact
that you were, like you say,using the latest and greatest
solely to, kind of trip it up?You you said that you were
trying to do that with having ituse Swift data
Peter (39:03):
Yeah.
Geoff (39:04):
Versus Adam's code base
is several years old, and he may
be running into problems that,or sorry. He may not be running
into problems that you wererunning into with trying to have
the latest and greatest, thatthe the LLM just doesn't know
enough about, oh, yeah. Youcan't really do this with Swift
data.
Peter (39:22):
Yeah. I think it's a bit
of both because I my my takeaway
after I sort of thought about itthe next day was, yeah. You
know, okay. First of all, yes,of course, ultimately, the the
AI is drawing from hisexperiences. So he's only gonna
know as much as the data is outthere.
So as far as, like, referring toswift data, that's a
(39:46):
possibility. And I also think onthe flip side, the more it has
to draw from in your code base,the better your chances, which
is a bit of a weird situation tobe in because here you are with
the tool that you're trying touse to build an app to, you
(40:06):
know, expand the code base toadd the features. Yet at the
same time, if it can't help youadd the features at the
beginning, how much is it gonnahelp you later on? And I think I
think that's the weird positionwe're in with a lot of this
stuff at the moment. And I thinkthat that's why I was sort of,
you know, when we were talkingabout, you know, the stuff that
(40:27):
they're going to put in Xcode 16earlier was, yeah, it's only
going to be as good as itsinput.
Right? And so I want to say thatI don't think that's the
definitive experience that Ihad. I I think given that this
was only the second time I hadused it, which is important to
point out because that that thisis also where I wanted to come
(40:50):
from was, hey, I've never usedthis. If I was, you know, a
developer because you let me saythis. You should be a developer
if you're gonna use, like, thistool.
You you gotta know what it'sdoing. Right? Because you've
gotta get yourself out of theseholes. Because I was thinking,
(41:11):
well, this should be a greattool to take one of my existing
apps and say, hey, I want to addthis new feature, which was this
exact scenario and it it didn'tdo so well, which does leave you
questioning. Okay, how useful isit?
Right? But I'm gonna give itgive it a passing grade on on
both of my tests because itcertainly did way better than I
(41:36):
thought it was gonna do. That'sgood.
Geoff (41:39):
Yeah. It's definitely
good to hear. Yeah.
Peter (41:41):
Yeah. Now I do wanna
point out, though, there there
are some things that some folksin the chat room pointed out.
I'm not familiar with them, so Idon't wanna dive into them here.
I might look into it, but it'snot integrated in any way with
Xcode. It is literally dumpingfiles in your Xcode project.
I bet you'd say that. Yeah.Yeah. And so so for example, as
someone said, you know, an Xcodeproject file, you know, as much
(42:04):
as we don't understand them, itknows even less.
Geoff (42:08):
I do actually find that
surprising because it's not like
there's a dearth of Xcodeproject files out there on
GitHub or whatever that I'm I Iactually am a little bit
surprised that these tools don'tunderstand Xcode project files,
maybe even better than Xcodedoes.
Peter (42:25):
Mhmm.
Geoff (42:26):
And, you know, one of the
things that I was hoping that,
an LLM could do is, you know,you you're everybody's familiar
with this, where, oh, I've donea git merge, and now my Xcode
file's broken, and now I'vegotta figure out what exactly is
wrong with my Xcode projectfile. Like, I feel like an LLM
should be pretty smart at, like,here's my Xcode project file.
(42:47):
Find what's wrong and fix it. Imean That seems like the kind of
thing that it should know, andto have the experience that, no.
Actually, these tools are justas confused by Xcode project
files as we are seemscounterintuitive to my
understanding about how LLMs are
Peter (43:03):
designed. I'm sure I do
not know what you mean. I have
never experienced a mergeproblem with Xcode project
files. Sure. If if that was aproblem, there'd be some other
tools out there that wouldgenerate Xcode project files or
some crazy world like that.
Exactly. Yeah. No. You're right.Right?
I feel like it should at leasthave a basic understanding.
(43:27):
There's there's no serious magicin any of these files. And maybe
further down the road it will beinteresting to see if the
Apple's version of thisunderstands project files.
Right? Definitely.
That that would probably betheir most outstanding feature
if it did. But that wasbasically over 2, streams. So
(43:50):
I'm gonna guess about maybe 4hours. That was my experience
with it and and I'm gonna say,in my opinion, this is a tool
worth thinking about.
Geoff (44:02):
Or at least a category of
tools worth thinking
Peter (44:04):
about. Sure. Absolutely.
Let's be fair. And so yeah.
Because I, you know, I I knowthere's some others that we're
gonna sort of touch on. At atthe end of the day, yeah, that's
a better way to put it. Theseare tools that if you use them
to help you, you're gonna go along way with it. Hey folks, if
you like what you're hearing inthis podcast and you want to
help this podcast to continuegoing forward and having great
(44:28):
guests and great conversations,I invite you to become a Patreon
supporter. You can go topatreon.comforward/compileswift,
where you will get ad freeversions of the podcast along
with other content.
Geoff (44:42):
Because I I know
definitely I I've looked at it a
couple times, and my like, I'venever actually used it. I've
never even gone as far asdownloading it.
Peter (44:50):
Mhmm.
Geoff (44:52):
My concerns about Cursor
are not the concerns about what
makes Cursor Cursor. My concernsabout Cursor are the history
that it has with Versus Code andmy experiences with Versus Code.
Peter (45:04):
Yeah. Oh, sure. So Yeah.
Geoff (45:06):
I I know that I've used
that in the past, and I used to
love it. And now I no longerlove it. And so it's it's more
like, what if I could have thecursor things in a project or in
a in a environment that Iactually liked to use?
Peter (45:20):
Mhmm.
Geoff (45:21):
Segway.
Peter (45:24):
Beautifully done.
Geoff (45:25):
Yeah. Professionally
done, Sigmund. Last week, at
their annual conference, GitHubannounced that they were doing
their own version of takingover, I I it's not quite clear
to me, the GitHub Copilot forXcode plug in. Now this existed
before, and I hadn't used it atthat point. It now is an
(45:48):
official GitHub project.
It is now part of the GitHuborganization on GitHub. That
that's confusing to say. It's atgithub.com/github. But this is
now kind of a official fromGitHub's end integration between
Xcode and Copilot. Mhmm.
And it uses some questionablehacks to make it work because
(46:11):
Xcode doesn't have a greatplugin system. So it it is
definitely being a little bit,tricky in order to get to do
what it does. I haven't usedthis yet. I'm pretty sure you
also have not used this yet.
Peter (46:26):
Correct. I haven't used
this yet. And you touched on
right there the one concern tome is well, many concerns. But
the the the most immediate oneis because of the restrictions
in the Xcode plug in system, howmuch can this or any tool that
tries to integrate with Xcodereally do?
Geoff (46:47):
Yep. I I do think this is
something that I will look into
because I think it isinteresting, and it kind of gets
around the issues that I havewith Versus Code as an editor in
allowing me to use Xcodeinstead. So it might be
interesting. I kind of preferthe quad ecosystem rather than
the OpenAI ecosystem, andobviously, this isn't really
integrated with that yet beingthat it's coming from Microsoft
(47:09):
and all of their integrationwith OpenAI.
Peter (47:11):
Mhmm.
Geoff (47:12):
But, I hope that we will
see that eventually. GitHub
seems to have been more open topairing with other model
providers. And
Peter (47:20):
Yep.
Geoff (47:20):
So I I'm I'm hoping that
we see something like that in
the future where it begins towork with things other than
OpenAI's models. And I thinkthat could be another
interesting alternative to atool like Cursor.
Peter (47:32):
You know, one go back I I
should have added here just as a
note for Cursor. You can chooseamong many different, engines. I
was using Claude, which is theone it has by default, but there
is, at the very bottom of thescreen, a drop down. Well, click
it and it's a drop down. So youcan choose your engine of
(47:54):
choice.
Yeah.
Geoff (47:55):
Yeah. Yeah. That that is
one thing that I think, I like
about Cursor more than what wecurrently have with Copilot for
Xcode.
Peter (48:02):
Yeah. Yeah. I'm I'm eager
to see you try that one out. I
think I'm gonna gonna sit andwatch watch the train go by on
that one and and just ride alongwith you as opposed to diving
in. Yeah.
Geoff (48:14):
Yeah. I I I should try
that out in the future, and
maybe we'll do a quick follow-upon,
Peter (48:19):
the
Geoff (48:19):
beginning of one of these
episodes.
Peter (48:21):
Yeah. I I'm sure there
are some folks out there that
are like, gosh. How manyepisodes is are they gonna do on
CompileSwift on AI? But the thefact is this is a this is a a
thing. Right?
I mean, it's a it's a big thing.It's only gonna get bigger and
and it's important to stay ontop and at least be aware even
if you have no intention ofusing any of these things. You
(48:44):
should at least be aware ofwhat's happening like I always
say on, you know, around you asfar as tools, services, and and
approaches. And this is this isfor sure an important one. So,
you know, AI, I'm afraid, it'sbeen around a while.
We've all heard about it in manydifferent contexts. It's not
just for developer tools and youdon't have to use specific
(49:08):
developer tools, you know, asfar as AI goes. There are other
areas where this is important,arguably more important in some
ways depending on yourperspective than helping you
write your code. And youactually have a a couple of
really good examples where youdid, well, you typed into the
(49:30):
machine for me, I guess, is theway to to do it. But it is it's
useful for marketing and andother things, but you have a
couple of, I think, really gooduse cases.
So you wanna go ahead and diveinto those?
Geoff (49:44):
I think what you're
referring to is the icons for
your apps, job finder trackerand endless hurdles. And those
were both icons that I did usingMidjourney. And kinda starting
with a prompt in Midjourney andkinda discussing my way through
it and using a lot ofmidjourney's tools to kinda
tweak the way into it lookingthe way that you want it to. I
(50:07):
think Jobfinder Tracker was donekind of early in midjourney's
experience, and you can kindasee it if you look at it a
little bit. It's like, oh, yeah.
This definitely has some of theweird AI shenanigans around it.
Yeah. Whereas endless hurdles, Ithink, came later, and they had
built more of their tools. Andso you can kind of, you know,
erase parts of it and say, well,hang on. This doesn't look
(50:27):
right.
This this is not how a fencelooks. This is not how a hurdle
looks. And and let's let's buildsomething that looks a little
bit better. So that one's alittle bit cleaner in terms of
what it does. And so this is acase where if you want an app
icon and you can't afford a truedesigner who's gonna build
something custom for you, andyou don't have the skills to do
(50:49):
it yourself, this is somethingthat gets you a, you know, 80%
good enough experience with anapp icon so that you can
actually just have something outthere.
You can have an app that looksgood on the App Store and get
you started on your road tobeing a developer.
Peter (51:05):
Oh, I agree. Like, the
endless hurdles one, when you
did that one and I saw it, itwas an instant, like, oh my god.
Yes. Because it's it's notsomething I would have thought
of, and I certainly couldn'thave done it anywhere near as
well. And and I I just love thatone.
You know, it's one of those justlike, yeah, I just want this to
(51:26):
be the icon forever. You know?Yep. Yeah. You you're right
about the job finder tracker.
It it's appropriate for what itis, but it like you say, it does
feel like, you know, mayberevisit this some sometime.
Geoff (51:41):
Mhmm.
Peter (51:41):
But but either way, I
think the important point here
is, you know, sometimes we wethink, like, oh, the icon or
screenshots are gonna be easy,and they end up being the
hardest thing. Right?
Geoff (51:53):
Oh, yeah. Absolutely.
Peter (51:54):
Yeah. Because you had the
freedom of choice of doing
anything. And I know, you know,having having seen you go
through and do screenshots, forexample, it's like, yeah. You
can take these any direction youwant and that's the problem.
Mhmm.
Right? Yeah.
Geoff (52:09):
Yeah. Absolutely. Yeah.
And that that kinda go ahead.
Peter (52:12):
I was just gonna say,
it's also useful, you know, for
the marketing material. Right?You can, you know, like, okay. I
can describe on a piece of paperor screen what I think it should
say, but I can't necessarilymake it sound right, and I can
use these tools to play withthat.
Geoff (52:30):
Yeah. Definitely. And
that's kinda where I've done
with some of the marketing formy most recent app, Bark, is
I've definitely I didn't have itgenerate anything because, oh,
man, the stuff it generates onits own is bad. Mhmm. And it was
funny because I did have it dothat once, and I was like I I
literally said to the LLM, like,this seems like one of those
(52:51):
really tacky Saturdayinfomercials where it was like
the the the black and whitevideo of you, like, have you
ever done this?
Yeah. It was it was it was justsuper tacky. So, yeah,
definitely don't trust themwith, yeah, let's just go
generate a marketing thing fromscratch. But what I did find is,
(53:11):
similar to what I was discussingat the very beginning of this
episode, is being able to kindof pair market with it and say,
I want to do this. Like, whatare the kinds of things that I
should be thinking about?
What are the aspects ofmarketing that I need to cover?
What are the bare minimum? Hereis my budget. Here is my, you
(53:32):
know, limited resources. Here iswhat I've got.
What are my priorities? Whatshould I be focused on? What
should I really do with youknow, what are the kinds of
things that I I should betackling and in what order. And
with that, it does a lot betterjob. It it's good at kind of
coming up with outlines for youto fill in on your own.
(53:53):
If you do something on your own,it is very good at judging you.
You can kinda sit here and say,like, oh, here, for example, is
the App Store description thatI've written. And it'll go,
well, hey. You probably wannamention this. You probably wanna
mention that.
Here's what you should do tosell your subscription a little
(54:14):
harder. Here's what you shoulddo to do this. And I found it to
be a lot better at that. Don'tlet it go off on its own and
generate stuff for you becauseit it sounds very LLM driven,
very, very tacky. And you'reyou've you've all seen, like,
things that are clearly writtenby chat gbt.
Peter (54:31):
I was gonna say
Geoff (54:31):
A 100%. Yeah.
Peter (54:33):
Yeah. At this point, I
think we've all seen enough on
on many different things to toyou know, it's like, yeah. We
can we can spot them now. Right?You
Geoff (54:42):
know? Whereas bringing
something that you've had and
you've created on your own andhaving it not even have it touch
it up, but more have it have itcritique you, have it coach you,
have it tell you where you needto patch things up. And, of
course, you also have theability to tell it no. Like,
Peter (55:00):
you don't
Geoff (55:01):
I don't wanna do this. I
don't wanna do, say this. I
don't wanna become too scammysounding. I don't wanna become
too market y. But having it kindof give you tips and pointers, I
found that to be really usefulin helping with my app
marketing.
Peter (55:16):
You know, it's
interesting because I have been
playing around with the withApple's AI services, you know,
the text services that you cannow get in The
Geoff (55:25):
writing tools?
Peter (55:26):
Yeah. Exactly. And I'm
not sure how I feel about them.
They sort of walk that linebetween this sounds unnatural,
you know. And and so it'sinteresting that you mentioned
that.
Yeah. Yeah. There there isdefinitely I think the takeaway
from this episode is look,folks. There's a lot of tools
(55:47):
out there that can help youperform whatever task you need
to do, and that's how you shouldlook at this. I do think, in my
own opinion, that is how you'regonna get the most out of these.
You know, be it code inapplications or, like we say,
the marketing materials, thedesigns, all of those kind of
things. You know, that isdefinitely use these as an
(56:11):
assistant, like like I saidearlier, pair programming, pair
whatever, critique, you know,all of those kind of things.
That's gonna be the path to to,I think, your greatest success
on this. Right?
Geoff (56:23):
Absolutely. Alright,
Peter. I think that's it for
today's episode. Where caneverybody find you?
Peter (56:29):
You can find me in
person, not AI.
Geoff (56:32):
Oh my god.
Peter (56:33):
Yeah. I know. Terrible.
You can find me, at
peterwithamm.com, and you canfind this podcast and that at
compileswift.com.
Geoff (56:40):
And I am I at
cocoatype.com and cocoatype on
every social media that you canthink of in the world. There's
always new ones.
Peter (56:48):
Alright, folks. Rest
assured, we won't be replacing
ourselves with with AI as hostsanytime soon. The the ridiculous
crazy comments that you hear arenaturally us and not a mission.
Alright? Yep.
That's it folks. See you in thenext episode.