How to hijack a webpage
In this post I'm going to teach you how to hijack a webpage using the target="_blank" browser vulnerability. I'll also teach you how to defend yourself against hijacking by using a couple of simple …
In this post I'm going to teach you how to hijack a webpage using the target="_blank" browser vulnerability. I'll also teach you how to defend yourself against hijacking by using a couple of simple …

One of the main gripes I had about Keyboard Maestro was the lack of built in functionality to list text expansions. I like the idea of text expansions, but I often forget them while trying to build my…
Note to the reader: These commands are current as of Phoenix 1.3.
I've been working on a side project to hone my skills in another language and web framework. I've decided to pick Elixir and Pho…
On a day-to-day basis, as a software engineer, I spend a lot of time doing non-technical tasks. This is the nature of the career; you're not only going to be interfacing with computers.
I love the te…
This article assumes that you've already installed ffmpeg.
If you want to downscale your videos for sharing, this little one liner is a nice way to do so.
#…

Throughout the last few years I've learned debugging techniques that have helped me to get through some pretty insidious bugs. Through trial and error as well as by osmosis I've come up with a handful…
For the most part scrum-but is inevitable. Scrum doesn't fit every team's dynamic, and that's okay. Here's my version of scrum-but that I've found useful both leading teams and working on them.
The b…
I just grabbed coffee with a young man that's looking to get into the tech industry in Boise. He's been going through a bootcamp and wanted to learn more about what…
I'd like to reflect on what I've learned this week. There aren't any specific concepts that are of focus, this is essentially the net of what I googled throughout the week.
I learned that iex isn't technically a true REPL [5][iexrepl].
I also got to take a deeper foray into application logging. I've be…
Interestingly you can't use @doc macro for private functions. I understand the argument that documentation shouldn't be ge…
Self proclaimed as
The premier destination for learning and mastering Elixir
I've recently played with [Elixir school][elixir-schoo…
Something small, but I realized that you can pass in a default to Map.get in case the key you're looking for doesn't exist.
I also discovered…
kubectl patch pv <pvc-ID> -p '{"metadata":{"finalizers":null}}' kubectl patch pvc <pvc-ID> -p '{"metadata":{"finalizers":null}}' kubectl delete…
export ERL_AFLAGS="-kernel shell_history enabled"
Found that [this][graphql-project-structure] was a …

I've been working on a personal project in my spare time and I've been focusing on writing unit and integration tests. I've probably spent more time writing tests than I have wri…
I've worked in systems where you can specify different groups of test. For example the last place I worked allowed you to mark a test aro…

Github actions allows you to set up arbitrary tasks that can run based upon events in Github. You can use these actions to do all sorts of things. I wanted to use these actions to s…

This guide assumes that you're already running a Gigalixir application and have set up the necessary environment variables in Gigalixir…
Drop into a remote console
gigalixir ps:remote_console
Tear down the database and re-seed it.
# Migrate down Ecto.Migrator.run(MyApp…
config.exs is executed at compile time. Any calls to System.get_env/1 will be executed in your build environm…
This week's post is going to be pretty light on original content. Here's a digest of some informative links I read this week.
I was su…
Ecto has quite a few different ways to preload entities. I always find myself forgetting each of the different ways, so I'm just going to post each approach in h…
Sometimes when you're using IO.inspect/2 to debug values, your output can be a bit overwhelming. To make things
easier to read, you can pass IO.inspect/2 a label option.
Inte…

Application requirements vary tremendously from one application to another. This guide is not meant to be a prescriptive set of steps that anyone can apply to any single …
One of my personal learning goals was to brush up on operating systems. I've heard nothing but high praises about [OSTEP](https://www.amazon.com/Operating-Systems-Three-Easy-Pieces-ebook/dp/B00TPZ17O4…

While at work I was reading through the exq library I stumbled upon an issue that discussed the perils of running a Superviso…
Below are a few references that I thought were good discussions around how to achieve DI in Elixir.

This tutorial aims to get you up and running from zero to a fully hosted kubernetes cluster managed by Argo CD hosted by Digital Ocean. Please be careful following these instructions as I have very li…

I recently discovered that in GraphiQL you can command click fields in your query to jump to the definition in the docs.
Below is a running list of tools that look interesting but I have yet to try.
It is not that we have a short space of time, but that we waste much of it. Life is long enough, and it has been given in sufficiently ge…

I've been tickled by how delightful Amazing Marvin's user experience is. The developers of Amazing Marvin consistently go above and beyond when implementing features. They carefully tailor the experie…
Defining the following ensures that even after system restart your service is restarted
# /lib/systemd/system/torrent_top_10.service
[Unit]
Description=Run top 10 torren…
Many years ago I was told by a very wise man "Mind Ok, Everything Ok". It is so true. I have encountered poor, sick people who are happy, and rich…
And there you have it. A complete prescription for permanently disabling …
The golden rule is: always load data on mount. But if you add live navigation with
live_patch, the data that can be changed on-the-fly must be now…
For a personal project I have some generators for live views. They handle most of the boilerplate of starting a live view based feature and create components, as well as their concomitant test files. …
[expert-beginner] [try]
[12factor]
[boolean-traps]
big [sliding]
While working through some of the ex_twilio documentation, I couldn't find any specific examples of how to respond to incoming…
macOS 11.6.1
16.13.1
{ "name": "repro", "version": "0.0.0", "description": "repro", "type": "module",…
live.html.heex has an element that is injected by Phoenix LiveView which causes a difference in DOM structure between live.html.heex and app.html.heex. This difference in structure mig…
Since the release of Phoenix LiveView 0.18.0 this post is no longer relevant. The remainder of this post is left h…
Instead of leveraging Enum.into/2 you can use Map.new/2 with an enumerable collection.
I learned that you can pattern match structs.
def new(…
Since the release of Phoenix LiveView 0.18.0 this post is no longer relevant. Instead use [dynamic_tag/1](https://…
If you're using Alpine as part of your stack, you'll most likely have run into this one.
# ... def some_component(assigns) do ~H""" <div…
Here's the associated git repo. This is here primarily for seo and simplicity.
{ "version": "2.0.0", "tasks": [ { …
Even when an idea seems obvious, it can be useful to put a label or name to it. That is, once you explicitly identify something, it becomes easier to reason about or remember if you create a simple fa…

When modifying form values in Phoenix LiveView, it is possible to modify the value of all form fields that are not in focus on the client side from the server side. It is not possi…

This week I travelled to Pocatello with my partner Allyanna and it was all possible because I'm able to work remote.
For some projects, avoiding the draw of the JS ecosystem just isn't possible. If you ever find yourself needing to add npm modules to your Phoenix app hosted on fly.io, here are the changes required t…
sanne Hello folks! I’m having a very strange issue and I’m just baffled… I have a component where I’m setting the background colour with and the colours don’t show up if a number is in the interpo…
Recently I was wanting to add Google oauth account registration and login to my Phoenix LiveView app. I found a few articles, but there were a handful of errors in the tutorial. I adapted the changes …
When working with Phoenix LiveView it's possible to use a shorthand for multiple conditional classes. Take the following component as an example.
defmodule AppWeb.Component do use Phoenix…