<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title><![CDATA[Timmy O'Mahony Website]]></title>
        <description><![CDATA[An independent full-stack web developer from Ireland.]]></description>
        <link>https://timmyomahony.com</link>
        <generator>RSS for Node and Next.js</generator>
        <lastBuildDate>Mon, 29 Dec 2025 10:37:06 GMT</lastBuildDate>
        <atom:link href="https://timmyomahony.com/feed.rss" rel="self" type="application/rss+xml"/>
        <pubDate>Mon, 29 Dec 2025 10:37:01 GMT</pubDate>
        <copyright><![CDATA[Copyright 2025, Timmy O'Mahony]]></copyright>
        <language><![CDATA[en-IE]]></language>
        <managingEditor><![CDATA[hey@timmyomahony.com (Timmy O'Mahony)]]></managingEditor>
        <webMaster><![CDATA[hey@timmyomahony.com (Timmy O'Mahony)]]></webMaster>
        <ttl>60</ttl>
        <item>
            <title><![CDATA[Useful utility views for every Django project]]></title>
            <description><![CDATA[A small collection of simple utility views that I add to all my Django projects.]]></description>
            <link>https://timmyomahony.com/blog/useful-utility-views-for-every-django-project/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/useful-utility-views-for-every-django-project/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Fri, 02 May 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Private Git Submodules with Vercel]]></title>
            <description><![CDATA[How to set up Vercel to clone your private Git repo submodules when installing & building your app.]]></description>
            <link>https://timmyomahony.com/blog/private-git-submodule-with-vercel/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/private-git-submodule-with-vercel/</guid>
            <category><![CDATA[Vercel]]></category>
            <category><![CDATA[git]]></category>
            <category><![CDATA[next.js]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Tue, 15 Apr 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Adding an intermediate date range to Django Import/Export]]></title>
            <description><![CDATA[How to add a "from" and "to" date range to the Django Import/Export export form]]></description>
            <link>https://timmyomahony.com/blog/adding-intermediate-date-range-to-django-import-export/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/adding-intermediate-date-range-to-django-import-export/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Understanding Django's Host Header Error Emails]]></title>
            <description><![CDATA[One of the most common errors in Django is the annoying host header mismatch error email. While easy to fix, it's also easy to miss the point.]]></description>
            <link>https://timmyomahony.com/blog/understanding-django-host-header-error-emails/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/understanding-django-host-header-error-emails/</guid>
            <category><![CDATA[django]]></category>
            <category><![CDATA[nginx]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 13 Sep 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Paginating Blog Posts In Next.js (App Directory)]]></title>
            <description><![CDATA[Paginating a Next.js app using the app directory has a few caveats, so this post goes through an example to make life easier. ]]></description>
            <link>https://timmyomahony.com/blog/paginating-blog-posts-in-nextjs-app-directory/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/paginating-blog-posts-in-nextjs-app-directory/</guid>
            <category><![CDATA[nextjs]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Thu, 28 Sep 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Kiosk Mode on iPads with PWAs and Guided Access Mode]]></title>
            <description><![CDATA[A great way to get an "almost-native" locked down app experience on iPads, perfect for using at live events where devices need to be unattended.]]></description>
            <link>https://timmyomahony.com/blog/kiosk-mode-on-ipads-with-pwa/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/kiosk-mode-on-ipads-with-pwa/</guid>
            <category><![CDATA[ipad]]></category>
            <category><![CDATA[pwas]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Tue, 12 Sep 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Demystifying Digital Ocean's App Platform for Django]]></title>
            <description><![CDATA[Digital Ocean's App Platform documentation is awful. Here's a primer to help make life easier when deploying apps to their PAAS.]]></description>
            <link>https://timmyomahony.com/blog/demystifying-digital-oceans-app-platform-for-django/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/demystifying-digital-oceans-app-platform-for-django/</guid>
            <category><![CDATA[digital-ocean]]></category>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 13 Sep 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Backing Up WhatsApp Media From iCloud]]></title>
            <description><![CDATA[Every so often I like to copy all of the WhatsApp media from my iPhone/iCloud to my Mac. This is sadly much trickier than it should be.]]></description>
            <link>https://timmyomahony.com/blog/backing-up-whatsapp-media-from-icloud/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/backing-up-whatsapp-media-from-icloud/</guid>
            <category><![CDATA[whatsapp]]></category>
            <category><![CDATA[icloud]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Tue, 12 Sep 2023 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Substack's UI and 1Password just cost me $2,023]]></title>
            <description><![CDATA[A quick guide on how to accidentally spend $2k in two clicks live on a client Zoom call.]]></description>
            <link>https://timmyomahony.com/blog/substacks-ui-and-1password-just-cost-me-2023-dollars/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/substacks-ui-and-1password-just-cost-me-2023-dollars/</guid>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 22 Mar 2021 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[What Saturday on Hacker News Looks Like]]></title>
            <description><![CDATA[Yesterday, [a post I had submitted to Hacker News](https://news.ycombinator.com/item?id=24867077) got pushed up to the front page. Outside of retiring and basking in my new-found internet fame, I wanted to show what a few hours on the front-page looks like.]]></description>
            <link>https://timmyomahony.com/blog/what-saturday-on-hacker-news-looks-like/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/what-saturday-on-hacker-news-looks-like/</guid>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Sun, 25 Oct 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Home Made Standing Desk Raspberry Pi Controller]]></title>
            <description><![CDATA[One of my lockdown projects was to make my sit/stand controller smart. I used a Raspberry Pi to create a custom controller that could control the motor on my desk and allow me to rise and lower it over the network as well as via a touch-interface.]]></description>
            <link>https://timmyomahony.com/blog/home-made-standing-desk-raspberry-pi-controller/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/home-made-standing-desk-raspberry-pi-controller/</guid>
            <category><![CDATA[raspberry-pi]]></category>
            <category><![CDATA[hardware]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Sun, 11 Oct 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Django Pagedown Image Uploads]]></title>
            <description><![CDATA[It only took 5 years. After years of dithering you can upload images with Django Pagedown.]]></description>
            <link>https://timmyomahony.com/blog/django-pagedown-image-uploads/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/django-pagedown-image-uploads/</guid>
            <category><![CDATA[django]]></category>
            <category><![CDATA[django-pagedown]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Thu, 06 Aug 2020 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Django and CircleCI 2.0]]></title>
            <description><![CDATA[Most of the time, deployment sucks. Using a continuous integration app can help automate your deployments so you can focus on writing code and buildings things. In this post I'll show you how to set up a basic Django project with CircleCI so that publishing your code is as simple as pushing to GitHub.]]></description>
            <link>https://timmyomahony.com/blog/django-and-circleci-2/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/django-and-circleci-2/</guid>
            <category><![CDATA[django]]></category>
            <category><![CDATA[circleci]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 01 May 2019 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Sending Ember actions down to components]]></title>
            <description><![CDATA[_Data down, actions up_ is an often repeated mantra of the Ember community, and for good reason. Sometimes though, you need to call actions on components in a 'downward' direction. In this post I'll give you an approach for breaking this DDAU rule."]]></description>
            <link>https://timmyomahony.com/blog/sending-ember-actions-down-to-components/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/sending-ember-actions-down-to-components/</guid>
            <category><![CDATA[ember]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Fri, 06 Apr 2018 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Ember Ajax and Ember Simple Auth]]></title>
            <description><![CDATA[It can be tricky to properly configure `ember-ajax` to play nicely with `ember-simple-auth`. You will need to manually configure a service to mimic the authorisation functionality you get for free when using Ember Simple Auth with Ember Data. This post will show you how to get up and running properly.]]></description>
            <link>https://timmyomahony.com/blog/ember-ajax-and-ember-simple-auth/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/ember-ajax-and-ember-simple-auth/</guid>
            <category><![CDATA[ember]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Fri, 20 Apr 2018 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Twitter controlled power switches with a Raspberry Pis]]></title>
            <description><![CDATA[Using off-the-shelf parts with a Raspberry Pi, you can make a remote controlled power switch to turn appliances on/off. I've used this approach to create Twitter controlled snowblowers, remote controlled car headlights, a Twitter activated Christmas trees ... the possibilities are endless. This post will show you how to set up a power switch that will activate when a certain hashtag is posted to Twitter.]]></description>
            <link>https://timmyomahony.com/blog/twitter-controlled-power-switches-raspberry-pis/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/twitter-controlled-power-switches-raspberry-pis/</guid>
            <category><![CDATA[raspberry-pi]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 11 May 2016 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[A simple pagination component with Ember]]></title>
            <description><![CDATA[Ember's ethos of 'components everywhere' makes it really quick and easy to make reuseable widgets. This takes the tedium out of implementing some of the more basic features of web sites and applications. An example of this is pagination. This post shows you how to create a very basic pagination component that allows you to page through a list of items.]]></description>
            <link>https://timmyomahony.com/blog/simple-pagination-component-ember/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/simple-pagination-component-ember/</guid>
            <category><![CDATA[ember]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 20 Jun 2016 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA['Route variable' pattern with Ember]]></title>
            <description><![CDATA[There are a couple of different libraries for Ember that add the ability to set the page title for each page in your application by simply creating a `title` property on each route. This is a great general purpose pattern for declarative information that needs to be set across routes. For example you might want to add breadcrumbs, or just a different heading on each page. This post will outline how to go about creating this pattern yourself.]]></description>
            <link>https://timmyomahony.com/blog/route-variable-pattern-ember-routes/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/route-variable-pattern-ember-routes/</guid>
            <category><![CDATA[ember]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 13 Jul 2016 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Making USB Push Buttons]]></title>
            <description><![CDATA[Using a microcontroller/USB HID you can easily create physical push buttons for your project that, when pressed, will appear as key strokes in your application. This is a really flexible approach to adding physical buttons to an array of different web, desktop or even mobile applications. This post will show you how to do it.]]></description>
            <link>https://timmyomahony.com/blog/making-usb-push-buttons/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/making-usb-push-buttons/</guid>
            <category><![CDATA[arduino]]></category>
            <category><![CDATA[teensy]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 11 May 2016 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Making a draggable Ember component]]></title>
            <description><![CDATA[HTML5 makes it really easy to create elements that can be both dragged and dropped. This is a really powerful API to add rich functionality to your application. In this post we'll use this API to make a simple Ember component that can be repositioned on the screen by dragging it with the mouse.]]></description>
            <link>https://timmyomahony.com/blog/making-draggable-ember-component/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/making-draggable-ember-component/</guid>
            <category><![CDATA[ember]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 01 Jun 2016 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Django access mixin for active users only]]></title>
            <description><![CDATA[As of Django 1.9, there are a number of new permission mixins you can use with your views to make access control easier. One that isn't included by default is a mixin allowing you to only permit users who have activated their account (`user.is_active = True`)]]></description>
            <link>https://timmyomahony.com/blog/django-access-permission-mixin-active-users-only/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/django-access-permission-mixin-active-users-only/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Tue, 12 Jan 2016 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Adding labels to Ember Leaflet markers]]></title>
            <description><![CDATA[This post shows you how to create a custom marker component that integrates the Leaflet.label add-on to get nice pop-up labels on your ember-leaflet maps.]]></description>
            <link>https://timmyomahony.com/blog/adding-labels-ember-leaflet-markers/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/adding-labels-ember-leaflet-markers/</guid>
            <category><![CDATA[ember]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Fri, 25 Mar 2016 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Uploading and validating an image from an URL with Django]]></title>
            <description><![CDATA[This post outlines a simple Django app that allows the user to upload an image via an URL while making sure the image file is valid.]]></description>
            <link>https://timmyomahony.com/blog/upload-and-validate-image-from-url-in-django/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/upload-and-validate-image-from-url-in-django/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Fri, 20 Jun 2014 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Updating your cert_fingerprint for offlineimap with Fastmail.fm]]></title>
            <description><![CDATA[Fastmail recently updated their SSL certificate, breaking my offlineimap email backups. This post has the updated cert_fingerprint value you need to add to get it back running]]></description>
            <link>https://timmyomahony.com/blog/updating-your-cert-fingerprint-for-fastmail-and-offlineimap/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/updating-your-cert-fingerprint-for-fastmail-and-offlineimap/</guid>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Tue, 30 Dec 2014 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[An Updated General Django Project Structure or Folder Layout]]></title>
            <description><![CDATA[In a previous post I outlined a sane folder structure for a new Django project. Since then Django 1.5 (and 1.6) has been released along with an updated default folder structure. This post goes through some further tips on keeping your django project layout sensible.]]></description>
            <link>https://timmyomahony.com/blog/updated-django-project-structure-or-folder-layout/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/updated-django-project-structure-or-folder-layout/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Sat, 22 Mar 2014 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[The Missing Manager for Django Models with GFK Relationships]]></title>
            <description><![CDATA[Save yourself writing the same queries time and time again by creating a simple model manager with common queries for your generic foreign keys]]></description>
            <link>https://timmyomahony.com/blog/the-missing-gfk-model-manager-for-django-models/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/the-missing-gfk-model-manager-for-django-models/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Tue, 14 Oct 2014 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Understanding, setting up, accessing and serving media files and static files in Django]]></title>
            <description><![CDATA[One of my most popular Stackoverflow answers is to a question regarding the confusion between static and media files in Django. This post elaborates on that theme.]]></description>
            <link>https://timmyomahony.com/blog/static-vs-media-and-root-vs-path-in-django/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/static-vs-media-and-root-vs-path-in-django/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 11 Jun 2014 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Importing Big Databases with MAMP & phpMyAdmin on OSX]]></title>
            <description><![CDATA[When you are using phpMyadmin on MAMP or MAMP Pro out of the box, you might run into trouble trying to import large databases due to PHP's default upload and timeout settings. This post explains the quick-fix needed to get it working.]]></description>
            <link>https://timmyomahony.com/blog/mamp-phpmyadmin-and-big-database-imports-errors-or-timeouts/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/mamp-phpmyadmin-and-big-database-imports-errors-or-timeouts/</guid>
            <category><![CDATA[php]]></category>
            <category><![CDATA[mysql]]></category>
            <category><![CDATA[mamp]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 25 Jun 2014 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[SuspiciousOperation Invalid HTTP_HOST header with Django]]></title>
            <description><![CDATA[I was recently getting this error while trying to deploy a new project to production. It turns out that due to a recent security update, you need to make sure that the incoming host name in your request is valid.]]></description>
            <link>https://timmyomahony.com/blog/suspiciousoperation-invalid-http-host-header-django/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/suspiciousoperation-invalid-http-host-header-django/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 24 Apr 2013 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Autodeploy Jekyll using bitbucket post-commit service hooks and Flask]]></title>
            <description><![CDATA[A very nice and clean way to deploy a Jekyll (or any other static generated site) is to setup a very small application on your sites webserver to listen for post commit hooks from Bitbucket. This allows you to have your site automatically updated and regenerated every time you push to your repository. This post shows you how.]]></description>
            <link>https://timmyomahony.com/blog/autodeploy-jekyll-using-bitbucket-post-commit-service-hooks-and-flask/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/autodeploy-jekyll-using-bitbucket-post-commit-service-hooks-and-flask/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 21 Oct 2013 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Using a virtualenv with CodeRunner.app]]></title>
            <description><![CDATA[I'm a big fan of using Virtualenv (and virtualenvwrapper) where possible. It allows you to cleanly manage multiple Python environments. I also occasionally use CodeRunner to test, debug and run standalone scripts. It wasn't immediately clear to me how to make CodeRunner run inside one of my virtualenvs so this post gives a quick outline on how to get the two to work nicely together.]]></description>
            <link>https://timmyomahony.com/blog/using-virtualenv-coderunnerapp/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/using-virtualenv-coderunnerapp/</guid>
            <category><![CDATA[python]]></category>
            <category><![CDATA[macos]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 22 Oct 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[A Custom Cropping Engine With sorl-thumbnail]]></title>
            <description><![CDATA[Sorl-thumbnail has a sensible crop function in the default engine, but sometimes you need a little more control over the results. This post provides a custom cropping PIL engine that can be used to return specific, i.e. from (x1, y1) to (x2, y2), cropped thumbnails]]></description>
            <link>https://timmyomahony.com/blog/custom-cropping-engine-with-sorl-thumbnail/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/custom-cropping-engine-with-sorl-thumbnail/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Thu, 13 Dec 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Using sorl thumbnail and easy thumbnails in the same template]]></title>
            <description><![CDATA[At times you need to use both <code>sorl.thumbnail</code> and <code>easy_thumbnails</code> in the same template. Both of these apps define a <code>thumbnail</code> template tag from a <code>thumbnail</code> template module meaning that you will be able to use one or the other but not both. To get around this, you can install a great app called <code>django-smart-load-tag</code>]]></description>
            <link>https://timmyomahony.com/blog/using-sorl-thumbnail-and-easy-thumbnails-in-the-same-template/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/using-sorl-thumbnail-and-easy-thumbnails-in-the-same-template/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 22 Oct 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Reversing a unique Generic Foreign Key with Django]]></title>
            <description><![CDATA[When using <code>GenericRelations</code> with Django to create unique generic foreign keys between objects, it can become tiresome having to navigate the <code>RelatedManager</code> every time you need to retrieve the single instance of the one-to-one relationship. This post shows how creating a quick `Mixin` can help overcome this inconvenience.]]></description>
            <link>https://timmyomahony.com/blog/reversing-unique-generic-foreign-key-django/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/reversing-unique-generic-foreign-key-django/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Sat, 01 Dec 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Automatically generating admin URLs for your objects]]></title>
            <description><![CDATA[It's very easy to generate URLs to your django models using <code>get_absolute_url()</code>, but you can also use this pattern to just as easily create URLs to the admin page for your django models too. This post shows you how to make a <code>get_admin_url()</code> model method that generates links to give you quick access to your admin.]]></description>
            <link>https://timmyomahony.com/blog/reversing-admin-urls-and-creating-admin-links-you-models/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/reversing-admin-urls-and-creating-admin-links-you-models/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 12 Dec 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Misconceptions with "select_related" in Django]]></title>
            <description><![CDATA[Django's <code>select_related</code> QuerySet method is a great way to reduce the query count when joining tables but it should come with small print in the documentation. This post goes over that small print.]]></description>
            <link>https://timmyomahony.com/blog/misconceptions-select-related-in-django/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/misconceptions-select-related-in-django/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 22 Oct 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Middleware to ensure Facebook Auth on all views with Fandjango]]></title>
            <description><![CDATA[Fandjango is a great application for getting a Facebook Canvas application up and running. It provides a nice view decorator to ensure a user is authorised with Facebook before allowing them access to that view. This post provides a piece of middleware that makes use of that decorator, allowing you to enforce Facebook authorisation on *all* views in your application.]]></description>
            <link>https://timmyomahony.com/blog/middleware-ensure-facebook-auth-all-views-fandjango/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/middleware-ensure-facebook-auth-all-views-fandjango/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Sat, 10 Nov 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[A General Django Project Structure or Folder Layout]]></title>
            <description><![CDATA[When beginning with Django I always found it difficult to decide on basic project layouts. What should go where and why? Having read many of the great articles on the topic already out there this post outlines how I have come to manage the folder structure of most of my new Django projects, making sure everything is tidy and safe]]></description>
            <link>https://timmyomahony.com/blog/general-django-project-structure-or-folder-layout/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/general-django-project-structure-or-folder-layout/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Fri, 09 Nov 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Filtering on annotations in Django]]></title>
            <description><![CDATA[Django's annotate method can be useful for counting particular attributes on every member of a queryset (i.e. count the number of books an author has). Unfortunately you can't use the ORM to do any filtering on those attribute. This would be useful for only considering an attribute if it were above a certain value, or belonged to a certain object (i.e. count the number of books with the tag 'Horror'). This post shows how to make use of the `extra` method Django provides to create filtered annotations]]></description>
            <link>https://timmyomahony.com/blog/filtering-on-annotations-in-django/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/filtering-on-annotations-in-django/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Fri, 16 Nov 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Don't keep sensitive information in your Django settings]]></title>
            <description><![CDATA[If you are checking your settings.py into Git, make sure you aren't including any potentially sensitive information such as database passwords, secret keys and so on. A quick and easy way to avoid this is to create a separate `sensitive.py` file.]]></description>
            <link>https://timmyomahony.com/blog/dont-keep-sensitive-settings-settingspy/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/dont-keep-sensitive-settings-settingspy/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 22 Oct 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Using Django's request after updating POST or GET attributes]]></title>
            <description><![CDATA[If you update `request.POST` or `request.GET` in a view (or else where), any subsequent calls to `request.REQUEST` will still return values from the old, outdated `GET` and `POST` dictionaries.]]></description>
            <link>https://timmyomahony.com/blog/djangos-request-updating-with-request-get/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/djangos-request-updating-with-request-get/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 12 Dec 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Django CMS Urls not reversing properly]]></title>
            <description><![CDATA[I encountered a strange problem when making use of a custom AppHook with [django-cms](https://www.django-cms.org/en/). When I mounted a custom app on a cms page, reversing the urls in the template for that app (using get_absolute_url) was producing incorrect urls.]]></description>
            <link>https://timmyomahony.com/blog/django-cms-urls-not-reversing-correctly/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/django-cms-urls-not-reversing-correctly/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Wed, 16 May 2012 00:00:00 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[Create automatic redirects upon changing an URL dependent field in your Django Models]]></title>
            <description><![CDATA[When the generated URLs of your objects depends on a field in your model that could potentially change (for example a slug field that is generated from a title which your editor just changed), you can get yourself into trouble with Google as your old URL will now return a 404. This posts outlines an approach to dynamically create redirects whenever an objects changes an url dependant field.]]></description>
            <link>https://timmyomahony.com/blog/create-automatic-redirects-upon-changing-an-url-dependent-field-in-your-django-models/</link>
            <guid isPermaLink="true">https://timmyomahony.com/blog/create-automatic-redirects-upon-changing-an-url-dependent-field-in-your-django-models/</guid>
            <category><![CDATA[django]]></category>
            <dc:creator><![CDATA[Timmy O'Mahony]]></dc:creator>
            <pubDate>Mon, 22 Oct 2012 00:00:00 GMT</pubDate>
        </item>
    </channel>
</rss>