When we recognize music, movies, old photos, or video games of the past, it has a powerful effect: nostalgia. It's a pattern of the past that we remember fondly. When we write code, we recall patterns of the past to consider as tools to help solve today's problem. I'd like to explore the connection between software development and nostalgia, and have some fun while we're exploring the theory.
I moved my blog. It's now powered by Phoenix LiveView. Let me tell you about the transition. I outline the features I lost, I gained, and some performance surprises along the way.
Every time I build a LiveView application, I learn something new and find a new pattern, and some concept finally _clicks_. Today, that concept that cemented in my mind is how Phoenix and Phoenix LiveView renders templates. I want to show you a couple different View-rendering strategies. This should help you decide which strategy to use.
I joined the Thinking Elixir Podcast! I would really love it if you shared it with shared with your friends who know or are discovering Elixir.
Big forms are a pain to manage-- even harder to manage when you need to change values based on previous input and compute data based on that new selection. Phoenix LiveView can make this easier. Check out some techniques I used to help organize these forms.
I was invited to talk on the Elixir Mix podcast. We talked about the Ecto Changesets and modeling change well.
Today I published a new Chrome Extension in the Chrome Web Store. This extension replaces the New Tab page with a rendered markdown page that you can edit. It's customizable too!
How I manage ElixirLS, neovim, and coc.nvim with vim-plug.
There are some helpful techniques you can employ to help you and your coworkers when writing long changeset functions. It's hard to remember what's required, optional, and defaulted. DB-generated UUIDs. And composing changesets.
I was invited to talk on the Elixir Mix podcast. We talked about the Elixir community, how to contribute, and the DateTimeParser library I released.
If you develop in Ruby or Elixir or write Markdown, you might find this helpful!
I learned the hard way that the popular HTTP client for Elixir doesn't automatically decompress or re-encode responses. I had to fix it myself.
Know your tools -- CircleCI 2.0 Workflows
Structs and maps are easy to work with in Elixir, but if they are stored in the database as JSON and accessed via an Ecto Schema, it's not as clear how to query them. We're going to explore how to do that, and make it clear and easy.
Testing a scenario where an app sends an email is easy, but how do you test something random in an email, like a password reset token? When we test a function that intentionally returns random data, it's a little tougher.
Phoenix 1.3 introduces contexts, which has been met with some resistance. I've developed an application using it and learned some lessons.
Ugh... three lines for a simple text input for a form in Phoenix? How about one with Formulator?
Introduction of Elixir and Phoenix for a local coding boot camp. Slides
What a boot camp developer can expect after graduating their course. Slides
Refactoring is scary. I've seen some comments on Twitter indicating that it's generally something really risky, sending tremors through the rest of the team. It's true, it's risky, but it's generally for the better. But I often need to refactor something a bit more scary: life.
I recently bought a MacBook Pro with a limited 256GB SSD. It's great, btw, but it requires me to now store all my music, movies, and archival-type files on an external drive. It scares me a bit to have all that stuff on a single USB-powered drive, so I also set up a network NAS that contains 2 mirrored 1TB drives (I salvaged these from my desktop that I sold to buy my MacBook). Enter problem: I'm lazy. I don't like manually backing everything up. I just want to manage the stuff I put on the external drive, not the NAS drive. Enter solution: BASH script, and launchd.