The world is moving towards making everything available via the browser and I'm
moving the other way where I want to build desktop apps.
I'm not the only one that thinks this way.
Also, it's always easier to build apps that don't need a web-server to exist and
can handle data and work in and around the system, makes it easier to keep
personal data safe and thus less things to worry about for the developer. Again,
just my opinion.
So I've been crying and ranting about electron being heavy, apps being ram
hungry, my mac giving up it's life trying to keep up with all the things I
multi-task with, for a really long time now.
On the other hand I did mention about learning rust and go quite a times as
well. So quick update, haven't been working on rust much but definitely have
tried out a little more in go and this post is basically going to lead to that
and why it was the chosen solution.
I'm quite a lazy person and that's why sitting in one place while typings lines
and lines of code everyday is something I enjoy but this laziness can get to
your head and then you start using your head more than you use your body.
example: thinking of every possible way to get the remote from the dining
table without moving anything but the hand and the broom stick that was lying on
the floor in front of you.
Similar situation lead to the experiment , this time the distance was a full
king sized bed with a table on one side and my old phone connected to the
charger on the other side.
This is a daily setup, this phone is put on charge after my main device is
charged overnight and is responsible for playing my spotify playlists over the
day, problem is, to change playlist and or tracks I need to either open it on
the laptop or my main device which is again on some corner of the bed because I
don't like distractions when i'm working.
Last option? The open.spotify.com web app, but then this page takes a good
300-400MB worth of ram on Safari and close 290-340MB on chrome with the GPU
helper using up to about 50-100MB so yeah, back to 300-400MB of RAM usage which
while I could afford if I wasn't running anything else of the system but in my
normal dev workflows there's a few code editors, a few docker containers, figma
for design reference(which takes 1GB because of the amount of designs in that
one window) and a few simulators because I do too muhc React Native dev right
now for office projects.
RAM Available - 8GB( ignoring the paging cache ) RAM Used - 7.1 ( Swap prevents
the remaining from being used) SWAP Used - 1.5-3Gig (based on which
emulator/simulator is running)
At that point , opening another webpage that takes up 400MB worth of ram is
bascially pushing the macbook at it's limit which in turn slows down everything
else that's moved to the swap and certain electron apps don't like working from
swap because they weren't built with that in mind but that's on the devs and not
So now, I either get up, walk to the other side of the bed and change the tracks
or find my main device and change it on that. Either way, it wastes time and i'm
The name is as original as it can get, that reminds me , I'm to put a disclaimer
on the readme for this.
Back to the topic, so what did I build ? A simple GUI interface with 4 buttons
and a Text showing the current playing track.
Oh ah, a config screen that you'll see when you first open the app and it's
available only for Mac right because it was built it 5 hours, how much do you
expect from me!?
Anyway, yeah, it's a mac client for now, but since both the framework and the
language used can cross compile, I might get linux and windows releases out soon
as well, though I'd first sit and clean up my code, right now its a disaster.
Close to what a 5 year old would scribble all over the house, only he
understands the code, same vibe.
The simple principle of building it is already explained above but why build a
desktop app over a web app that could've done the same thing and I could've
built it in half the time?
I wanted to learn go and get better at it, I always slow down the moment strict
typing comes into the picture and I would like to change that, yes I've worked
with TypeScript but I just write
any and escape from situations where I don't
want to define the types which is bad , both for code and speed so to improve my
speed with types involved this is was necessary.
The experience was good, I had a good 5 hours to spare since I woke up early, I
did hit some segfaults because of lack of knowledge of channels and go routines
but have a better understanding now so it's all good.
Still most web app oauth flows don't have PKCE protocol well implemented and
need a redirect url which a desktop app can't really provide so I ended up going
with the usual OAuth2 flow but the user has to set it up for himself which I
think is fine since It adds to the security. Your client token and secrets are
not stored on some external servers but your own device and you can delete the
app from your dashboard whenever you want to avoid Spotify lite from using it.
All teasing aside, I'll link you to the repo.
That's all for now, Adios!