Safe Ecto Migrations
As an Elixir developer who cares about system up-time and avoiding "scheduled maintenance" windows, and more importantly avoiding "unscheduled maintenance" windows 😉, this guide dives deep into Ecto database migrations and how they can be used safely in production systems.
Nostalgia, Fun, and Programming
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.
Moving the blog to Elixir and Phoenix LiveView
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.
Phoenix LiveView and Views
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.
Starting a New Podcast with Thinking Elixir
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.
Phoenix LiveView: Multi-step forms
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.
Ecto Changesets on Elixir Mix podcast
I was invited to talk on the Elixir Mix podcast. We talked about the Ecto Changesets and modeling change well.
NewTab Notes Extension
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!
Managing ElixirLS updates in Neovim with asdf and vim-plug
How I manage ElixirLS, neovim, and coc.nvim with vim-plug.
Ecto Tips: UUID Boilerplate, Docs, and Composing Changesets
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.
DateTimeParser on Elixir Mix podcast
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.
VIM Testing and Workflow
If you develop in Ruby or Elixir or write Markdown, you might find this helpful!
HTTPoison and Decompression
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.
Ruby, Rails, and CircleCI 2.0 Workflows
Know your tools -- CircleCI 2.0 Workflows
Querying an Embedded Map in PostgreSQL with Ecto
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 Random Data in Emails with Bamboo
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.
Lessons From Using Phoenix 1.3
Phoenix 1.3 introduces contexts, which has been met with some resistance. I've developed an application using it and learned some lessons.
Simple Phoenix Text Inputs with Formulator
Ugh... three lines for a simple text input for a form in Phoenix? How about one with Formulator?
Introduction to Elixir, Phoenix, and Umbrella Apps
Introduction of Elixir and Phoenix for a local coding boot camp. Slides
Developer Life After A Bootcamp
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.
Syncing an External USB Drive with a Network NAS
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.