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 electron.
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 too lazy.
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!