Logo

dev-resources.site

for different kinds of informations.

Taming Phoenix (Framework)'s Wild West amid the crippling indifference of Lockdown San Francisco

Published at
9/15/2021
Categories
elixir
phoenixframework
oldproblemsnewlanguages
depression
Author
thepeoplesbourgeois
Author
19 person written this
thepeoplesbourgeois
open
Taming Phoenix (Framework)'s Wild West amid the crippling indifference of Lockdown San Francisco

Skip ahead to the part about software

The pandemic gave all of us trials we never expected to face. For some, going to bed became an uncomfortable, surreal struggle, while others had a hard time leaving bed completely behind once they had to start their day. Everyone got lonelier (in the U.S., at least), and some people confused small pieces of cloth over their mouth for threats to democracy. Then many of those same people threatened democracy. And, of course, all of this happened against the backdrop of a lot of people getting sick and dying, both of which make it really tough to grease the wheels of Industry by throwing ourselves onto the gears1.

But I was one of the lucky ones. A person who, even before to the pandemic, had weird dreams aplenty, and no reason to put on pants in the morning; who could distinguish between a public health precaution and an attempted violent overthrow of a peacefully-elected government; who had known loneliness ever since childhood and therefore regarded all of this sheltering-in-place as just another snow day. Most importantly, of course, was the fact that I did not succumb to the horrible illness ravaging the planet. So everything was golden and there were no problems.

Or weren't there? As it turns out, having the most significant events of my life in 2019 be that my best friend abandoned me over a misunderstanding on Independence Day; a company whose work I really believed in fired me in my first 10 days there (and a week before my birthday); another company — who made their offer (for more money) before the first job had even made theirs, and were gracious enough to hold the offer open for me — fired me in my first 3 months there (and a week before Christmas)2; and the few spokes of my support system being flung near and far around the world, meant that I spent all of 2020 and a few months of 2021 wrestling with the towering impression that… maybe the people most important to me, and so many colleagues, could so easily discard me because I truly was worthless, and discardable, to anyone and everyone, and that was how I would always be.

It wasn't at all helpful, either — while people would tell me the usual unemployment insurance requirement of looking for work was suspended in light of the fact that, well, nobody could go look for work, and then later that the unemployment office was offering additional financial support to every unemployed person regardless of circumstance — that despite filing for unemployment well into the throes of the pandemic, my benefits were still bound by the unsympathetic, mechanically-administered requirement of, yes, being able to prove I was looking for work, amid shelter-in-place mandates. I have no idea how much unemployment I was even awarded; I only know that I never received any of it. I was disposable, not only to the first real friend I'd made in the five years I'd been living in the Bay Area, and to both of the companies I'd worked for since mid-2018, but to California itself. It felt like I was being told, "You're emotionally devastated, and unsure of whether you even have any redeeming qualities? Well Tough. If you can't muster the energy and nerve to jump through hoops nobody else is being asked to jump through, then maybe you deserve to be going through debilitating emotional devastation."

Being a huge gamer, my first reaction was to bury myself in the quick satisfaction of challenge-reward loops and cleanly-packed, fully resolved internal narratives that only a PS4 and Nintendo Switch could provide3. Being a programmer, my second reaction was to start putting together a business I could build, scale, and maintain by myself.

And having those three goals – short feature turnaround as complexity increases, graceful (and inexpensive) scaling as the user base grows, and low maintenance and upkeep requirements as its usage ramps up – meant that I might not want to remain in my typical, Ruby on Rails, wheelhouse. A maverick doesn't need vibrant communities gathered around tried and true frameworks with incomparable stores of ready-built solutions to the implementation questions I might face.4

These goals would actually be best achieved by building my app in Elixir5 and the Phoenix Framework!6

Or would they actually? As it further turns out, having little to no guidance through the deep processes that are revealed by not-working-in-Rails has given me firsthand appreciation of just how mountainous, jutting, and craggy the terrain really is underneath the leveled-out, perfectly-trimmed lawn that not-not-working-in-Rails provides developers. In my comfy Rails homestead, questions like "How should I integrate with Github?", "What do I do to verify a webhook payload's signature?", and "OAuth?" weren't a matter of digging through reams of esoteric API documentation, and weren't even a matter of digging through one gem's esoteric readme, but were usually a matter of deciding which gem sparkled brightest amid Rubygems.org's gleaming sea of options; each one eager for recognition, praise, and also, possibly, donations in order to help sustain the developer's basic need for survival idk.7

But dagnabbit, I've come this far with my ErlangVM-powered, stubborn, sometimes completely inscrutable functional programming workhorse. I'll be darned if I'm gonna let a little wandering through the desert as I'm dying of thirst make me turn around and reach for Ruby's object oriented, rocket-propelled horseless carriage, that's as configurable, simple, and easy to use as a LEGO playset with thorough, highly detailed instructions and examples. LEGO blocks are toys. I'm not building a toy, I'm building a robust, self-healing, high-uptime software application as a service (SAAaS)! User authentication is better when it takes you two weeks to implement!

But since I did have to figure out so much of this process through my own research, struggle, and persistent reiteration, I figure there might be other people out there, foolhardy enough to say "Maybe my next project would be a good fit for Elixir/Phoenix 🤔." You may be right, you beautiful dreamer, and to help you through some of the rough parts you might encounter, I'm gonna go ahead and tell you how I've been forging my trail. If it helps you cut your own path through this rugged, recursive frontier, then I've made a difference.

You can expect this series to receive regular8 updates about the snags, slowdowns, and showstoppers I've pushed through on my way to building a SAAaS9 on Phoenix in Elixir. That being said, if you felt concerned at all for my livelihood from reading that section I let you skip over, or if you find yourself appreciating the writing style of these tutorials, any amount you could donate to me through Ko-Fi would make you an honest lifesaver. I'm working on launching my business as fast as I can, but if I want to see it become profitable, first I need to be able to keep my head above water as rent, utilities, internet, phone, food costs, unforeseen expenses, the student loans I'm still repaying a decade later, and (last, but only second to rent in being the farthest thing from "least") interest on repayments all threaten to drown me.

In the meanwhile, soon I'll be publishing my first tutorial in this series, "Taming Github OAuth integrations with Ãœberauth and Guardian (but then actually no just Ãœberauth)", and will update this post with a link as soon as that went up fast! Read it here.

Donate to me through Ko-Fi, and be proud that you're keeping me alive


Being alive is nice!


  1. I think that's how that expression goes. ↩

  2. eeeeeyup. Not long stories, but ... not for here, not right now. ↩

  3. If you've never played Dragon Quest XI, Persona 5 (base or Royale), Watch Dogs 2, or Assassin's Creed either Odyssey or Valhalla … definitely don't start playing any of them during the long, dark night of your soul. ↩

  4. I would, of course, later come to question and regret my decision to eschew ready-built solutions to the implementation questions I have faced ↩

  5. Elixir is a great language on a great runtime, and once I have a production server up and running, I'm sure I will discover just how great. ↩

  6. Phoenix is similarly a great framework, but as I have learned, and as you will come to find, it suffers from both a substantial gap between features it provides and features you have to find for yourself, as well as a substantial gap between documentation that's quickly referencable and provides the answers you're looking for, and the documentation that it has. That's not to deride Phoenix or its documentation; explaining a piece of software is hard work, and I'm grateful for the literature its maintainers provide about its ins and outs; it's not as comprehensive as the Rails guide, but Rails has also been downloaded over 295 million times (from Rubygems, which is not where Rails was hosted for the first 45 versions it had) to Phoenix's 56 million total downloads. Bear witness to the network effect in action, people. ↩

  7. please donate to me via Ko-fi! ↩

  8. "Regular" in terms of once the data is smoothed out for irregularities, of course ↩

  9. I know it's not the abbreviation I'm just trying to be funny. I'm just trying to be funny, y'all 😢 ↩

phoenixframework Article's
27 articles in total
Favicon
Leverage ETS for Shared State in Phoenix
Favicon
Masters of Elixir: A Comprehensive Collection of Learning Resources
Favicon
Harness PubSub for Real-Time Features in Phoenix Framework
Favicon
Optimize LiveView Performance with Temporary Assigns
Favicon
Mastering Phoenix Framework - Part 3
Favicon
Mastering Phoenix Framework - Part 1
Favicon
Mastering Phoenix Framework - Introduction
Favicon
Ash AshSqlite - Aggregates not supported
Favicon
Definindo item ativo no menu no Phoenix Framework usando Short-circuit Evaluation
Favicon
Defining active menu item in Phoenix Framework through Short-circuit Evaluation
Favicon
Avoid Trips To The Database With Nebulex - Phoenix Series
Favicon
Optimizing Elixir Phoenix action with huge json response by responding by cached, gzipped values.
Favicon
How to Build a Phoenix LiveView Todo List App with Testing.
Favicon
Configuring TravisCI for phoenix with dart-sass
Favicon
Deploying an Elixir Release using Docker on Fly.io
Favicon
Taming Github OAuth integrations in Phoenix with the help of Ueberauth and Guardian (but then actually no just Ueberauth)
Favicon
Taming Phoenix (Framework)'s Wild West amid the crippling indifference of Lockdown San Francisco
Favicon
A Collection of Tips for Elixir’s Interactive Shell (IEx)
Favicon
Phoenix umbrella proxy application.
Favicon
Phoenix for Rails developers: a practical example - Part 1
Favicon
Phoenix for Rails developers: a practical example - Part 2
Favicon
Web FullStack menggunakan Phoenix LiveView - Publisher Subscriber
Favicon
Web FullStack menggunakan Phoenix LiveView - Membangun Operasi CRUD
Favicon
Web FullStack menggunakan Phoenix LiveView - Memulai Pembangunan
Favicon
Phoenix LiveView live_link
Favicon
Handling PostgreSQL slow counting on Elixir
Favicon
Web FullStack menggunakan Phoenix LiveView - Javascript Interoperability

Featured ones: