<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Programming My Life</title><link>https://programmingmylife.com/</link><description></description><lastBuildDate>Fri, 07 Mar 2025 08:40:06 +0000</lastBuildDate><item><title>Django Form Basics</title><link>https://programmingmylife.com/2025-03-07-django-form-basics.html</link><description>&lt;p&gt;Despite using Django for a number of years, I haven’t really worked with Django’s Forms until this week. I needed to create a form to handle a file upload, which has an associated category. The form also had to allow users to create new categories from within the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 07 Mar 2025 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2025-03-07:/2025-03-07-django-form-basics.html</guid><category>django</category><category>django</category></item><item><title>Pytest, A Practical Guide</title><link>https://programmingmylife.com/2025-02-07-pytest-a-practical-guide.html</link><description>&lt;p&gt;At a local Python meetup, there were several attendees that weren't familiar with &lt;code&gt;pytest&lt;/code&gt;, which gave me the idea to make this post as a primer on how I use &lt;code&gt;pytest&lt;/code&gt;. This isn't going to be a comprehensive review of &lt;code&gt;pytest&lt;/code&gt; and how to use it. For that, pick up …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 07 Feb 2025 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2025-02-07:/2025-02-07-pytest-a-practical-guide.html</guid><category>python</category><category>python</category><category>pytest</category><category>django</category></item><item><title>Coffee</title><link>https://programmingmylife.com/2025-01-28-coffee.html</link><description>&lt;p&gt;I've been a big fan of coffee for many years, but it's only in the last few that I've really started diving deeper on coffee and its preparation. I don't have an espresso machine, so most of my consumption at home is prepared as a pour over.&lt;/p&gt;
&lt;p&gt;I've almost always …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Tue, 28 Jan 2025 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2025-01-28:/2025-01-28-coffee.html</guid><category>coffee</category><category>coffee</category></item><item><title>[TIL] Killing Long Running Postgres Queries</title><link>https://programmingmylife.com/2025-01-17-til-killing-long-running-postgres-queries.html</link><description>&lt;p&gt;I recently had issues with long running postgres operations and found these two commands, one for finding long running queries, and one for killing them. My issue turned out to be with an &lt;code&gt;UPDATE&lt;/code&gt; instead of a query, but I'm noting this for future use. Note that the interval can …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 17 Jan 2025 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2025-01-17:/2025-01-17-til-killing-long-running-postgres-queries.html</guid><category>postgres</category><category>postgres</category><category>til</category></item><item><title>[TIL] Shell Alias for Failing Commands</title><link>https://programmingmylife.com/2024-05-03-til-shell-alias-for-failing-commands.html</link><description>&lt;p&gt;TL;DR: Instead of &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; use &lt;code&gt;;&lt;/code&gt; after a command that might have errors.&lt;/p&gt;
&lt;p&gt;My main project at work has a nice Make command for getting a new truncated version of our main database. Unfortunately, I can never remember the exact command, and it requires a second command (&lt;code&gt;pg_restore&lt;/code&gt;) to update my …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 03 May 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-05-03:/2024-05-03-til-shell-alias-for-failing-commands.html</guid><category>Shell</category><category>bash</category><category>til</category></item><item><title>TIL: Docker Commands</title><link>https://programmingmylife.com/2024-04-25-til-docker-commands.html</link><description>&lt;p&gt;I set up my main project at work to utilize &lt;a href="https://www.localstack.cloud/"&gt;LocalStack&lt;/a&gt; this week. I wasn't able to get it working using a virtual environment with Python, but another project at work has it set up through Docker. A coworker that is much more familiar with Docker than I am helped …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Thu, 25 Apr 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-04-25:/2024-04-25-til-docker-commands.html</guid><category>TIL</category><category>til</category><category>python</category><category>docker</category><category>aws</category></item><item><title>Mocking in Python tests</title><link>https://programmingmylife.com/2024-03-25-mocking-in-python-tests.html</link><description>&lt;p&gt;For a while now, I've felt unsure about mocking in Python. It has helped me test in the past, but I've also seen a lot of smart people talk or write about its pitfalls.&lt;/p&gt;
&lt;p&gt;Recently, I had to test some functionality around calls to Twilio, so I decided to investigate …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Mon, 25 Mar 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-03-25:/2024-03-25-mocking-in-python-tests.html</guid><category>Python</category><category>python</category><category>testing</category></item><item><title>Django Tasks - Cronjobs vs Celery</title><link>https://programmingmylife.com/2024-03-01-django-tasks-cronjobs-vs-celery.html</link><description>&lt;p&gt;Like &lt;a href="https://programmingmylife.com/2023-06-15-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-django-vs-django-rest-framework-drf.html"&gt;my previous vs post&lt;/a&gt;, this isn't a showdown. Instead, this post is about matching the solution to the problem. The tl;dr is that Celery is great at what it does, but it requires more infrastructure and setup than I needed to solve my problem. &lt;/p&gt;
&lt;h3&gt;The Problem to Solve …&lt;/h3&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 01 Mar 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-03-01:/2024-03-01-django-tasks-cronjobs-vs-celery.html</guid><category>Django</category><category>django</category></item><item><title>ramblr</title><link>https://programmingmylife.com/2024-02-23-ramblr.html</link><description>&lt;p&gt;In writing for this blog, there are some posts I'd like to write that I don't think quite fit the theme of this blog. For example, I want to write short book reviews to link to from &lt;a href="../pages/books.html"&gt;my books page&lt;/a&gt;, but I don't want them showing up on the index …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 23 Feb 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-02-23:/2024-02-23-ramblr.html</guid><category>ramblr</category><category>pelican</category></item><item><title>Keyboards</title><link>https://programmingmylife.com/2024-02-17-keyboards.html</link><description>&lt;p&gt;I &lt;s&gt;recently&lt;/s&gt;* read &lt;a href="http://www.screamingatmyscreen.com/building-a-keyboard-to-last/"&gt;Timo Zimmermann's post&lt;/a&gt; about buying a 'keyboard to last' and it made me realize I haven't posted about my keyboard journey yet.  If you don't know much about mechanical keyboards, &lt;a href="https://snarky.ca/the-many-shapes-and-sizes-of-keyboards/"&gt;Brett Cannon's post&lt;/a&gt; about deciding on a new keyboard has a lot of great info. It also …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sat, 17 Feb 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-02-17:/2024-02-17-keyboards.html</guid><category>2024</category></item><item><title>[TIL] Using Fixtures with pytest `parametrize`</title><link>https://programmingmylife.com/2024-02-08-til-using-fixtures-with-pytest-parametrize.html</link><description>&lt;p&gt;For longer than I care to admit, I was running my end to end tests in only Firefox. I thought it would be trivial to add a fixture to have my tests run using multiple browsers. Unfortunately, there isn't an easy way in &lt;code&gt;pytest&lt;/code&gt; to use fixtures as parametrized values …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Thu, 08 Feb 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-02-08:/2024-02-08-til-using-fixtures-with-pytest-parametrize.html</guid><category>Django</category><category>python</category><category>django</category><category>testing</category><category>til</category></item><item><title>Setting up pre-commit to work with WSL and Fork on Windows</title><link>https://programmingmylife.com/2024-02-02-setting-up-pre-commit-to-work-with-wsl-and-fork-on-windows.html</link><description>&lt;p&gt;For the tl;dr instructions, feel free to skip to the last two paragraphs.&lt;/p&gt;
&lt;p&gt;Years ago, I used SourceTree for visualizing my git graph. At some point, SourceTree became bloated and I really didn't like the direction it went, so I looked around for alternatives. I forget if I settled …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 02 Feb 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-02-02:/2024-02-02-setting-up-pre-commit-to-work-with-wsl-and-fork-on-windows.html</guid><category>Python</category><category>python</category><category>pre-commit</category></item><item><title>[TIL] Mocking Chained Calls</title><link>https://programmingmylife.com/2024-01-29-til-mocking-chained-calls.html</link><description>&lt;p&gt;At work last week, I was asked to write tests for code that reaches out to Twilio's verify service.  Here is what that code looks like (from the &lt;a href="https://www.twilio.com/docs/verify/api"&gt;Twilio docs&lt;/a&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;account_sid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth_token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;verification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt; \
                     &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;v2&lt;/span&gt; \
                     &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; \
                     &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verifications&lt;/span&gt; \
                     &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;+15017122661&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;sms&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I was able to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Mon, 29 Jan 2024 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2024-01-29:/2024-01-29-til-mocking-chained-calls.html</guid><category>Django</category><category>django</category><category>python</category><category>pytest</category><category>mocking</category><category>til</category></item><item><title>Strategies for a Long Running Side Project</title><link>https://programmingmylife.com/2023-12-19-strategies-for-a-long-running-side-project.html</link><description>&lt;p&gt;At DjangoConUS 2023, I gave a lighting talk with this title. It was a lot of fun, and I'd suggest you try to give a lightning talk if you haven't before. It's a great way to try giving a talk at a conference without having to commit to a full …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Tue, 19 Dec 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-12-19:/2023-12-19-strategies-for-a-long-running-side-project.html</guid><category>Django</category><category>django</category><category>python</category></item><item><title>Using SQLite for a Django application on fly.io</title><link>https://programmingmylife.com/2023-11-06-using-sqlite-for-a-django-application-on-flyio.html</link><description>&lt;p&gt;I'd like to run a few small apps I've been developing for learning purposes (to do list, etc.) on a cheap or free platform as a service (PaaS) provider so I don't have to worry about a &lt;a href="https://programmingmylife.com/2023-06-22-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-infrastructure-and-deployment.html"&gt;full deployment setup&lt;/a&gt; like I have on my &lt;a href="https://programmingmylife.com/2023-05-17-astroventure-and-university-of-mars.html"&gt;main project&lt;/a&gt;. These projects aren't …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Mon, 06 Nov 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-11-06:/2023-11-06-using-sqlite-for-a-django-application-on-flyio.html</guid><category>Django</category><category>django</category><category>python</category></item><item><title>Moving from Django Microframework to Django</title><link>https://programmingmylife.com/2023-10-30-moving-from-django-microframework-to-django.html</link><description>&lt;p&gt;At DjangoConUS 2019, &lt;a href="https://noumenal.es/"&gt;Carlton Gibson&lt;/a&gt; gave a talk called &lt;a href="https://www.youtube.com/watch?v=w9cYEovduWI"&gt;Using Django as a Micro-Framework&lt;/a&gt;, where he demonstrated a single file implementation of "Hello, World!" in Django.&lt;/p&gt;
&lt;p&gt;At the sprints during DjangoConUS 2023, Paolo Melchiorre showed off &lt;a href="https://www.paulox.net/2023/10/26/udjango_micro_django/"&gt;an even more minimal version&lt;/a&gt; that sparked some great discussion. Specifically, the usage of …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Mon, 30 Oct 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-10-30:/2023-10-30-moving-from-django-microframework-to-django.html</guid><category>Django</category><category>django</category></item><item><title>Aliases, pip, and dotfiles</title><link>https://programmingmylife.com/2023-10-13-aliases-pip-and-dotfiles.html</link><description>&lt;p&gt;Since my &lt;a href="https://programmingmylife.com/2023-01-24-bash-aliases.html"&gt;last post on aliases&lt;/a&gt;, I've added a few new aliases. Two are from &lt;a href="https://adamchainz.gumroad.com/l/byddx"&gt;Boost Your Django DX&lt;/a&gt;, which I'd highly recommend. The first is a straight cut from the book:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;alias pip=&amp;quot;python -m pip&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Using &lt;code&gt;python -m pip&lt;/code&gt; instead of &lt;code&gt;pip&lt;/code&gt; ensures you are using the version …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 13 Oct 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-10-13:/2023-10-13-aliases-pip-and-dotfiles.html</guid><category>python</category><category>python</category><category>django</category><category>pip</category></item><item><title>Testing Stripe Integration in Django</title><link>https://programmingmylife.com/2023-07-12-testing-stripe-integration-in-django.html</link><description>&lt;p&gt;I have been using &lt;a href="https://stripe.com/"&gt;Stripe&lt;/a&gt; to process payments for my company &lt;a href="https://theastroventure.com"&gt;AstroVenture&lt;/a&gt; (see more context in a previous post &lt;a href="https://programmingmylife.com/2023-05-17-astroventure-and-university-of-mars.html"&gt;here&lt;/a&gt;) for a couple of years now, and it has worked great. One thing that took me quite a while to figure out was how to test that we were properly …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Wed, 12 Jul 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-07-12:/2023-07-12-testing-stripe-integration-in-django.html</guid><category>Django</category><category>stripe</category><category>python</category><category>django</category><category>testing</category></item><item><title>Lessons Learned Teaching Undergraduate Astronomy with a Video Game - Testing</title><link>https://programmingmylife.com/2023-06-29-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-testing.html</link><description>&lt;p&gt;This is the fourth and final installment of the series breaking down my &lt;a href="https://www.youtube.com/watch?v=V2l57CnjakE"&gt;talk from DjangoConUS 2022&lt;/a&gt;. The first entry covered &lt;a href="https://programmingmylife.com/2023-05-17-astroventure-and-university-of-mars.html"&gt;background information about the project&lt;/a&gt;, the second was about using &lt;a href="https://programmingmylife.com/2023-06-15-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-django-vs-django-rest-framework-drf.html"&gt;Django Rest Framework&lt;/a&gt;, and the third was about &lt;a href="https://programmingmylife.com/2023-06-22-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-infrastructure-and-deployment.html"&gt;infrastructure and deployment&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before diving in, I'd like to emphasize that …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Thu, 29 Jun 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-06-29:/2023-06-29-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-testing.html</guid><category>Django</category><category>python</category><category>django</category><category>testing</category></item><item><title>Update for Notarizing Mac Unity Apps</title><link>https://programmingmylife.com/2023-06-26-update-for-notarizing-mac-unity-apps.html</link><description>&lt;p&gt;I recently received an email from Apple stating that they are migrating users from &lt;code&gt;altool&lt;/code&gt; to &lt;code&gt;notarytool&lt;/code&gt; to notarize applications. Apple says &lt;code&gt;altool&lt;/code&gt; will no longer work for notarization starting November 1 2023, but that applications notarized before that will still behave as normal. I previously wrote about &lt;a href="https://programmingmylife.com/2023-02-24-signing-and-notarizing-a-unity-app-for-macos.html"&gt;notarizing a …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Mon, 26 Jun 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-06-26:/2023-06-26-update-for-notarizing-mac-unity-apps.html</guid><category>Unity</category><category>Unity</category></item><item><title>Lessons Learned Teaching Undergraduate Astronomy with a Video Game - Infrastructure and Deployment</title><link>https://programmingmylife.com/2023-06-22-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-infrastructure-and-deployment.html</link><description>&lt;p&gt;This is the third installment of the series breaking down my &lt;a href="https://www.youtube.com/watch?v=V2l57CnjakE"&gt;talk from DjangoConUS 2022&lt;/a&gt;. The first entry covered &lt;a href="https://programmingmylife.com/2023-05-17-astroventure-and-university-of-mars.html"&gt;background information about the project&lt;/a&gt; and the second was about using &lt;a href="https://programmingmylife.com/2023-06-15-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-django-vs-django-rest-framework-drf.html"&gt;Django Rest Framework&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First, some important context: if you are a devops engineer, or have a lot of experience with …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Thu, 22 Jun 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-06-22:/2023-06-22-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-infrastructure-and-deployment.html</guid><category>Django</category><category>python</category><category>django</category><category>devops</category></item><item><title>Lessons Learned Teaching Undergraduate Astronomy with a Video Game - Django vs Django Rest Framework (DRF)</title><link>https://programmingmylife.com/2023-06-15-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-django-vs-django-rest-framework-drf.html</link><description>&lt;p&gt;If you've ended up here from somewhere outside of this blog, and are looking for an exhaustive comparison of these two libraries, I regret to inform you, this isn't that. If you're here for the next installment of the series breaking down my &lt;a href="https://www.youtube.com/watch?v=V2l57CnjakE"&gt;talk from DjangoConUS 2022&lt;/a&gt;, welcome back!&lt;/p&gt;
&lt;p&gt;This …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Thu, 15 Jun 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-06-15:/2023-06-15-lessons-learned-teaching-undergraduate-astronomy-with-a-video-game-django-vs-django-rest-framework-drf.html</guid><category>Django</category><category>python</category><category>django</category><category>django-rest-framework</category></item><item><title>AstroVenture and University of Mars</title><link>https://programmingmylife.com/2023-05-17-astroventure-and-university-of-mars.html</link><description>&lt;p&gt;In this post, I'd like to provide the context for the project I'm currently writing about on this blog. I'm also using this as an opportunity to start a series of blog posts breaking down my &lt;a href="https://www.youtube.com/watch?v=V2l57CnjakE"&gt;recent talk from DjangoConUS 2022&lt;/a&gt; about what I learned related to Django while building …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Wed, 17 May 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-05-17:/2023-05-17-astroventure-and-university-of-mars.html</guid><category>Django</category><category>python</category><category>django</category><category>unity</category></item><item><title>[TIL] Django Admin Permissions, etc.</title><link>https://programmingmylife.com/2023-03-03-til-django-admin-permissions-etc.html</link><description>&lt;p&gt;So far in my main project (more on that to come), the only users of the admin have been myself and my cofounder, so I've made us both superusers. Recently, I had a request to allow an instructor to view and update data from their own courses. This would require …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 03 Mar 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-03-03:/2023-03-03-til-django-admin-permissions-etc.html</guid><category>Django</category><category>django</category><category>til</category></item><item><title>Swapping burrs in my Oxo Coffee Grinder</title><link>https://programmingmylife.com/2023-02-28-swapping-burrs-in-my-oxo-coffee-grinder.html</link><description>&lt;p&gt;And now for something completely different...&lt;/p&gt;
&lt;p&gt;You may have noticed my favicon is a mug of coffee. I'm a huge coffee fan, and the last few years I've gone further down the rabbit hole with third wave/specialty coffee. &lt;/p&gt;
&lt;p&gt;I recently bought a new coffee grinder to upgrade from my …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Tue, 28 Feb 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-02-28:/2023-02-28-swapping-burrs-in-my-oxo-coffee-grinder.html</guid><category>coffee</category><category>coffee</category></item><item><title>Signing and Notarizing a Unity App for MacOS</title><link>https://programmingmylife.com/2023-02-24-signing-and-notarizing-a-unity-app-for-macos.html</link><description>&lt;p&gt;Edit: A lot of the information in this post is still great, but Apple have recently recommended moving from &lt;code&gt;altool&lt;/code&gt; (referenced in the linked scripts below) to &lt;code&gt;notarytool&lt;/code&gt;, so I have added an update to this post &lt;a href="https://programmingmylife.com/2023-06-26-update-for-notarizing-mac-unity-apps.html"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For the past few years, Apple's Gatekeeper has made it difficult to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Fri, 24 Feb 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-02-24:/2023-02-24-signing-and-notarizing-a-unity-app-for-macos.html</guid><category>Unity</category><category>Unity</category></item><item><title>Using Docker for Debugging</title><link>https://programmingmylife.com/2023-01-31-using-docker-for-debugging.html</link><description>&lt;p&gt;My current set of tools for deploying my application to production includes Packer and Terraform. I didn't write all of the code for the deployments, but I've been over most of it now. &lt;/p&gt;
&lt;p&gt;When trying to upgrade my server from Ubuntu 20.01 to 22.01, I ran into some …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Tue, 31 Jan 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-01-31:/2023-01-31-using-docker-for-debugging.html</guid><category>devops</category><category>python</category><category>django</category><category>devops</category><category>docker</category></item><item><title>Bash Aliases</title><link>https://programmingmylife.com/2023-01-24-bash-aliases.html</link><description>&lt;p&gt;This is a short post to tell you to create more bash aliases.&lt;/p&gt;
&lt;p&gt;I have had one for my devops setup for a while because I have to set several environment variables to get just about anything done. More recently, though, I set up a few more for my main …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Tue, 24 Jan 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-01-24:/2023-01-24-bash-aliases.html</guid><category>WSL</category><category>bash</category><category>wsl</category><category>django</category></item><item><title>Code Formatting Configs in Django</title><link>https://programmingmylife.com/2023-01-21-code-formatting-configs-in-django.html</link><description>&lt;p&gt;There are a few code formatting tools I like to use in just about any Python (and Django) project: black, isort, and flake8. These all serve slightly different purposes, and there are alternatives to each. A full discussion/comparison of code formatting tools in Python is beyond the scope of …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sat, 21 Jan 2023 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2023-01-21:/2023-01-21-code-formatting-configs-in-django.html</guid><category>Django</category><category>python</category><category>django</category></item><item><title>Switching from Jekyll to Pelican</title><link>https://programmingmylife.com/2022-11-07-switching-from-jekyll-to-pelican.html</link><description>&lt;p&gt;In the time since I've posted on this blog, I've erased the environment I used to set up and run Jekyll. Since I've never been a Ruby programmer and most of the code I write now is in Python, I thought I'd look into a blogging engine in Python. I …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Mon, 07 Nov 2022 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2022-11-07:/2022-11-07-switching-from-jekyll-to-pelican.html</guid><category>Blog</category><category>pelican</category></item><item><title>Accessing WebPacked TypeScript from Javascript</title><link>https://programmingmylife.com/2019-06-15-accessing-webpacked-typescript-from-javascript.html</link><description>&lt;p&gt;While I was trying to incorporate Stripe’s Javascript library into my codebase, I ran into some issues implementing it in Typescript. I eventually was able to fix those issues, but while I was trying to figure that out, I left the Stripe code as Javascript and stumbled upon an …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sat, 15 Jun 2019 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2019-06-15:/2019-06-15-accessing-webpacked-typescript-from-javascript.html</guid><category>TypeScript</category><category>Webpack</category><category>TypeScript</category><category>Javascript</category></item><item><title>AWS presigned URLS in Django</title><link>https://programmingmylife.com/2019-04-13-aws-presigned-urls-in-django.html</link><description>&lt;p&gt;I found the documentation for presigned URLS on AWS using boto to be insufficient, so here is how I formed the request.&lt;/p&gt;
&lt;p&gt;I wanted to have a file private in S3, but expose it to a user for download if they were authorized to access it. I found the easiest …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sat, 13 Apr 2019 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2019-04-13:/2019-04-13-aws-presigned-urls-in-django.html</guid><category>Django</category><category>Django</category><category>AWS</category></item><item><title>Jekyll Setup for PML</title><link>https://programmingmylife.com/2019-03-31-jekyll-setup-for-pml.html</link><description>&lt;p&gt;I originally created this blog using an EC2 instance on AWS and used that to run Jekyll and host the site. Recently, I shut down that instance in order to move the site generation to my local machine(s) and host the site on S3. &lt;a href="https://medium.com/@willmorgan/moving-a-static-website-to-aws-s3-cloudfront-with-https-1fdd95563106"&gt;This article was very helpful …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sun, 31 Mar 2019 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2019-03-31:/2019-03-31-jekyll-setup-for-pml.html</guid><category>Blog</category><category>Jekyll</category></item><item><title>Setting up Webpack to Modify URL per Environment in TypeScript</title><link>https://programmingmylife.com/2018-10-17-setting-up-webpack-to-modify-url-per-environment-in-typescript.html</link><description>&lt;p&gt;A website I am currently creating has a very simple front end, but I wanted to be able to swap out instances of my API URLs in TypeScript depending which environment I am working in or building for. So far they are all ‘http://127.0.0.1:8000/’, but …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Wed, 17 Oct 2018 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-10-17:/2018-10-17-setting-up-webpack-to-modify-url-per-environment-in-typescript.html</guid><category>TypeScript</category><category>Webpack</category><category>TypeScript</category></item><item><title>Debugging PostgreSQL Port 5433 and Column Does Not Exist Error</title><link>https://programmingmylife.com/2018-10-16-debugging-postgresql-port-5433-and-column-does-not-exist-error.html</link><description>&lt;p&gt;I am creating a Django application using PostgreSQL (PSQL) for my database and was nearly finished with the API when I discovered some strange behavior. After successfully testing the API in the Django app, I decided to run some basic queries on the database. I received the following error for …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Tue, 16 Oct 2018 08:40:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-10-16:/2018-10-16-debugging-postgresql-port-5433-and-column-does-not-exist-error.html</guid><category>Django</category><category>PostgreSQL</category><category>Django</category></item><item><title>Configuring NGINX for localhost</title><link>https://programmingmylife.com/2018-10-14-configuring-nginx-for-localhost.html</link><description>&lt;p&gt;I had a little trouble finding a simple way to set NGINX up to work locally, so I wanted to write up some quick instructions here. I’m using NGINX with Windows Subsystem for Linux (WSL).&lt;/p&gt;
&lt;p&gt;First, I installed NGINX in WSL with ‘sudo apt-get install nginx’&lt;/p&gt;
&lt;p&gt;Then, I created …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sun, 14 Oct 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-10-14:/2018-10-14-configuring-nginx-for-localhost.html</guid><category>NGINX</category><category>NGINX</category></item><item><title>Sending JSON to a server using fetch() in TypeScript</title><link>https://programmingmylife.com/2018-10-11-sending-json-to-a-server-using-fetch-in-typescript.html</link><description>&lt;p&gt;For a new project, I wanted to use TypeScript on the front end but not any of the frameworks that usually include it (React, Angular, etc.). Unfortunately, this means that when I have been trying to figure out how to do something in TypeScript, searches often lead me to solutions …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Thu, 11 Oct 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-10-11:/2018-10-11-sending-json-to-a-server-using-fetch-in-typescript.html</guid><category>TypeScript</category><category>TypeScript</category></item><item><title>Python Reference Talks</title><link>https://programmingmylife.com/2018-10-10-python-reference-talks.html</link><description>&lt;p&gt;While trying to get more familiar with Django, I started watching talks from DjangoCon from the last few years. I can’t seem to find the talk, but one of them had a list of great Python/Django talks, which inspired me to create me own list (with some definite …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Wed, 10 Oct 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-10-10:/2018-10-10-python-reference-talks.html</guid><category>Python</category><category>Python</category><category>Django</category></item><item><title>Setting up Conda, Django, and PostgreSQL in Windows Subsystem for Linux</title><link>https://programmingmylife.com/2018-08-19-setting-up-conda-django-and-postgresql-in-windows-subsystem-for-linux.html</link><description>&lt;p&gt;Because I feel much more comfortable in a terminal than on the Windows command line (or in Powershell), I’ve really been enjoying Windows Subsystem for Linux (WSL). In fact, I use it almost exclusively for accessing the server I run this blog from. WSL is essentially a Linux VM …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sun, 19 Aug 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-08-19:/2018-08-19-setting-up-conda-django-and-postgresql-in-windows-subsystem-for-linux.html</guid><category>WSL</category><category>Python</category><category>Conda</category><category>Django</category><category>PostgreSQL</category></item><item><title>Unity3D Scriptable Objects</title><link>https://programmingmylife.com/2018-07-15-unity3d-scriptable-objects.html</link><description>&lt;p&gt;This week at our local Unity user meetup group, I presented (along with a co-organizer of the group) about Scriptable Objects in Unity. You can find that talk &lt;a href="https://youtu.be/3C0J5w3QGIY?t=3m51s"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is that same content in text form.&lt;/p&gt;
&lt;p&gt;Scriptable objects are a powerful tool in designing and developing games in Unity3D …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sun, 15 Jul 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-07-15:/2018-07-15-unity3d-scriptable-objects.html</guid><category>Unity</category><category>Unity</category></item><item><title>Grocery List App and Flask Deployment Issues</title><link>https://programmingmylife.com/2018-07-01-grocery-list-app-and-flask-deployment-issues.html</link><description>&lt;p&gt;In addition to starting this blog, I wanted to build some small projects to get some experience with technologies I am not currently using at work. Since I’m currently using Django at work, I decided to create a small Grocery List application using Flask and DynamoDB. You can find …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sun, 01 Jul 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-07-01:/2018-07-01-grocery-list-app-and-flask-deployment-issues.html</guid><category>Python</category><category>Python</category></item><item><title>Backups Using a Network Attached Raspberry Pi</title><link>https://programmingmylife.com/2018-03-10-backups-using-a-network-attached-raspberry-pi.html</link><description>&lt;p&gt;After setting up my &lt;a href="https://programmingmylife.com/2018-03-01-setting-up-a-raspberry-pi-as-a-nas-and-plex-server.html"&gt;Raspberry Pi as a NAS&lt;/a&gt;, I wanted to set up backups that are easy to run and check on. Initially, I wanted to set them up to run automatically, but another goal of the Pi set up was for me to turn my PC off more …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sat, 10 Mar 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-03-10:/2018-03-10-backups-using-a-network-attached-raspberry-pi.html</guid><category>RaspberryPi</category><category>RaspberryPi</category></item><item><title>Setting up a Raspberry Pi as a NAS and Plex server</title><link>https://programmingmylife.com/2018-03-01-setting-up-a-raspberry-pi-as-a-nas-and-plex-server.html</link><description>&lt;p&gt;When my external HDD failed, I debated getting a network attached storage device (NAS) before realizing the price wasn’t worth it for me. I don’t have that much data, and really all I wanted was a way to automate backups and have a plex server that requires less …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Thu, 01 Mar 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-03-01:/2018-03-01-setting-up-a-raspberry-pi-as-a-nas-and-plex-server.html</guid><category>RaspberryPi</category><category>RaspberryPi</category></item><item><title>Unity 2D Tools for Level Building</title><link>https://programmingmylife.com/2018-02-24-unity-2d-tools-for-level-building.html</link><description>&lt;p&gt;This week for our local Unity meetup group, I presented an intro to some of the new 2D Tools in Unity (There is an intro about more general Unity topics, so for the 2D stuff skip to 17 minutes in): &lt;a href="https://www.youtube.com/watch?v=xopzxmzFJUs"&gt;https://www.youtube.com/watch?v=xopzxmzFJUs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew Mshar</dc:creator><pubDate>Sat, 24 Feb 2018 12:50:06 +0000</pubDate><guid isPermaLink="false">tag:programmingmylife.com,2018-02-24:/2018-02-24-unity-2d-tools-for-level-building.html</guid><category>Unity</category><category>Unity</category></item></channel></rss>