<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Django on Caktus Group</title><link>https://www.caktusgroup.com/tags/django/</link><description>Recent content in Django on Caktus Group</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 27 Apr 2026 09:00:00 -0400</lastBuildDate><atom:link href="https://www.caktusgroup.com/tags/django/index.xml" rel="self" type="application/rss+xml"/><item><title>Accessible Traffic Stop Data with NC CopWatch</title><link>https://www.caktusgroup.com/case-study/accessible-nc-traffic-stops-data/</link><pubDate>Tue, 21 Oct 2025 09:00:00 +0400</pubDate><guid>https://www.caktusgroup.com/case-study/accessible-nc-traffic-stops-data/</guid><description>Forward Justice partnered with Caktus to transform North Carolina&amp;rsquo;s 32 million+ inaccessible traffic stop records into an open-source public resource. This tool empowers communities and advocates to analyze law enforcement data and drive data-driven policy reform.</description></item><item><title>Easily Stream LLM Responses with Django-Bolt and PydanticAI</title><link>https://www.caktusgroup.com/blog/2026/04/27/django-bolt-easy-pydanticai-streaming/</link><pubDate>Mon, 27 Apr 2026 09:00:00 -0400</pubDate><guid>https://www.caktusgroup.com/blog/2026/04/27/django-bolt-easy-pydanticai-streaming/</guid><description>&lt;p>I like how easy it is to create an async streaming endpoint with &lt;a href="https://bolt.farhana.li/" target="_blank" rel="noopener noreferrer">django-bolt&lt;/a> and &lt;a href="https://pydantic.dev/docs/ai/overview/" target="_blank" rel="noopener noreferrer">PydanticAI&lt;/a> from scratch. With only a few commands you can set it up.&lt;/p></description></item><item><title>DjangoCon 2025 The Attendee's Experience</title><link>https://www.caktusgroup.com/blog/2026/03/02/djangocon-2025-the-attendees-experience/</link><pubDate>Mon, 02 Mar 2026 09:00:00 -0600</pubDate><guid>https://www.caktusgroup.com/blog/2026/03/02/djangocon-2025-the-attendees-experience/</guid><description>&lt;p>This post is &lt;strong>the second in a three-part series&lt;/strong> reflecting on DjangoCon US 2025. In this post, I’m reflecting on experiencing DjangoCon 2025 from the audience while serving as conference chair.&lt;/p></description></item><item><title>Behind the Curtain as a Conference Chair</title><link>https://www.caktusgroup.com/blog/2025/11/12/behind-the-curtain-as-a-conference-chair/</link><pubDate>Wed, 12 Nov 2025 00:00:00 -0600</pubDate><guid>https://www.caktusgroup.com/blog/2025/11/12/behind-the-curtain-as-a-conference-chair/</guid><description>&lt;p>This post is &lt;strong>the first in a three-part series&lt;/strong> reflecting on DjangoCon US 2025 — In this post, I’m taking you behind the scenes of DjangoCon US 2025 to share what it taught me about leadership, community, and the power of holding space for others.&lt;/p></description></item><item><title>Hitting Limits and Noticing Clues in Graphs</title><link>https://www.caktusgroup.com/blog/2025/11/05/hitting-limits-and-noticing-clues-in-graphs/</link><pubDate>Wed, 05 Nov 2025 16:53:53 -0600</pubDate><guid>https://www.caktusgroup.com/blog/2025/11/05/hitting-limits-and-noticing-clues-in-graphs/</guid><description>&lt;p>Editor’s Note: This post was updated November 11, 2025 to correct the graphs that are linked to the text in the blog.&lt;/p></description></item><item><title>Don't Let Search Take You Down</title><link>https://www.caktusgroup.com/blog/2025/10/07/dont-let-search-take-you-down/</link><pubDate>Tue, 07 Oct 2025 14:00:00 -0400</pubDate><guid>https://www.caktusgroup.com/blog/2025/10/07/dont-let-search-take-you-down/</guid><description>&lt;p>Twice in the last few months we&amp;rsquo;ve had to deal with &lt;strong>Django production site issues&lt;/strong> caused by inefficient search queries.&lt;/p></description></item><item><title>DjangoCon US 2025: A Celebration of Community, Code and 20 Years of Django</title><link>https://www.caktusgroup.com/blog/2025/10/06/djangocon-us-2025-celebration-community-code-20-years/</link><pubDate>Mon, 06 Oct 2025 09:00:00 -0500</pubDate><guid>https://www.caktusgroup.com/blog/2025/10/06/djangocon-us-2025-celebration-community-code-20-years/</guid><description>&lt;figure>&lt;img src="https://www.caktusgroup.com/blog/2025/10/06/djangocon-us-2025-celebration-community-code-20-years/djangocon25.jpg"
 alt="Group photo at DjangoCon US 2025">&lt;figcaption>
 &lt;p>Celebrating 20 years of Django&lt;/p>
 &lt;/figcaption>
&lt;/figure>

&lt;p>DjangoCon US 2025 was a milestone year for the community, as we gathered in Chicago to celebrate 20 years of Django. Attendees from around the world came together to learn about the latest developments, share their work, and strengthen the bonds that make DjangoCon such a special event. Caktus was well-represented once again, with our team contributing as organizers, speakers, and active participants throughout the week.&lt;/p></description></item><item><title>How to migrate from pip-tools to uv</title><link>https://www.caktusgroup.com/blog/2025/08/25/migrate-pip-tools-to-uv/</link><pubDate>Mon, 25 Aug 2025 14:00:00 -0400</pubDate><guid>https://www.caktusgroup.com/blog/2025/08/25/migrate-pip-tools-to-uv/</guid><description>&lt;p>At Caktus, many of our projects use &lt;code>pip-tools&lt;/code> for dependency management. Following Tobias&amp;rsquo; post &lt;a href="https://www.caktusgroup.com/blog/2025/06/11/migrating-python-django-projects-uv/">How to Migrate your Python &amp;amp; Django Projects to uv&lt;/a>, we were looking to migrate other projects to &lt;code>uv&lt;/code>, but the path seemed less clear with existing pip-tools setups. Our requirements are often spread across multiple files, like this:&lt;/p></description></item><item><title>Why Open Source Makes Sense For Your Business Web Projects</title><link>https://www.caktusgroup.com/blog/2025/08/12/why-open-source-makes-sense-for-your-business-web-projects/</link><pubDate>Tue, 12 Aug 2025 13:15:00 -0500</pubDate><guid>https://www.caktusgroup.com/blog/2025/08/12/why-open-source-makes-sense-for-your-business-web-projects/</guid><description>&lt;h2 id="what-is-open-source">What Is Open Source?&lt;/h2>
&lt;p>Open source software is publicly available code that anyone can use, modify, and improve. It’s the foundation of much of the modern internet and it’s trusted by global enterprises, startups, nonprofits, and government agencies alike.&lt;/p></description></item><item><title>Happy 20th Birthday Django!</title><link>https://www.caktusgroup.com/blog/2025/08/11/happy-20th-birthday-django/</link><pubDate>Mon, 11 Aug 2025 12:27:30 -0400</pubDate><guid>https://www.caktusgroup.com/blog/2025/08/11/happy-20th-birthday-django/</guid><description>&lt;p>This Tuesday (tomorrow!), August 12th, we’re teaming up with &lt;a href="https://www.meetup.com/tripython/" target="_blank" rel="noopener noreferrer">TriPython&lt;/a> to host an informal Django Birthday event at &lt;a href="https://boxyard.rtp.org/" target="_blank" rel="noopener noreferrer">Boxyard RTP&lt;/a> in Durham.&lt;/p></description></item><item><title>Avoiding Timezone Traps: Correctly Extracting Date/Time Subfields in Django with PostgreSQL</title><link>https://www.caktusgroup.com/blog/2025/06/16/avoiding-timezone-traps-correctly-extracting-datetime-subfields-django-postgresql/</link><pubDate>Mon, 16 Jun 2025 19:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/06/16/avoiding-timezone-traps-correctly-extracting-datetime-subfields-django-postgresql/</guid><description>&lt;p>Working with timezones can sometimes lead to confusing results,
especially when combining Django's ORM, raw SQL for performance (like
in PostgreSQL materialized views), and specific timezone requirements. I
recently had an issue while aggregating traffic stop data by year, where
all yearly calculations needed to reflect the 'America/New_York'
(EST/EDT) timezone, even though our original data contained
&lt;code>timestamp with time zone&lt;/code> fields. We were using
&lt;a href="https://github.com/xelixdev/django-pgviews-redux" target="_blank" rel="noopener noreferrer">django-pgviews-redux&lt;/a>
to manage materialized views, and I mistakenly attempted to apply
timezone logic to a &lt;code>date&lt;/code> field that had no time or timezone
information.&lt;/p></description></item><item><title>How to Migrate your Python &amp; Django Projects to uv</title><link>https://www.caktusgroup.com/blog/2025/06/11/migrating-python-django-projects-uv/</link><pubDate>Wed, 11 Jun 2025 05:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/06/11/migrating-python-django-projects-uv/</guid><description>&lt;p>&lt;em>Editor&amp;rsquo;s note:&lt;/em> This post was updated on July 17th, 2025, to use the
&lt;code>PATH_add&lt;/code> hook for direnv and to recommend including &lt;code>uv sync --locked&lt;/code>
in your &lt;code>.envrc&lt;/code> file.&lt;/p></description></item><item><title>DjangoCon Europe 2025 Highlights</title><link>https://www.caktusgroup.com/blog/2025/05/27/djangocon-europe-2025-highlights/</link><pubDate>Tue, 27 May 2025 05:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/05/27/djangocon-europe-2025-highlights/</guid><description>&lt;p>Three Cakti recently attended DjangoCon Europe 2025 in Dublin and it was a wonderful experience! It was great to see and chat with various Django community members we usually only see once or twice a year. Beyond that, we were most impressed by the consistently high quality of the talks throughout all three days of the conference. It was a pleasure to listen to so many excellent presentations, including the lightning talks at the end of each day. Here are some of our favorite talks.&lt;/p></description></item><item><title>Chicago Like a Local: Part 2</title><link>https://www.caktusgroup.com/blog/2025/04/24/chicago-local-part-2/</link><pubDate>Thu, 24 Apr 2025 23:54:16 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/04/24/chicago-local-part-2/</guid><description>&lt;h2 id="chicago-like-a-local-hidden-gems--unique-experiences-part-2">Chicago Like a Local: Hidden Gems &amp;amp; Unique Experiences (Part 2)&lt;/h2>
&lt;p>&lt;a href="https://2025.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon US 2025&lt;/a> is getting closer, and while we&amp;rsquo;ve covered some classic must-see spots in Part 1, there’s so much more to explore beyond the typical tourist attractions. If you’re looking for unique experiences, quirky hidden gems, and places where locals actually hang out, this guide is for you.&lt;/p></description></item><item><title>Tips for Tracking Django Model Changes with django-pghistory</title><link>https://www.caktusgroup.com/blog/2025/04/07/tips-tracking-django-model-changes-django-pghistory/</link><pubDate>Mon, 07 Apr 2025 10:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/04/07/tips-tracking-django-model-changes-django-pghistory/</guid><description>&lt;p>Django and its admin interface are a big part of &lt;a href="https://www.caktusgroup.com/blog/2016/12/14/django-boring-or-why-tech-startups-should-use-django/">why Caktus uses
Django&lt;/a>,
but the admin's ability to log database changes is limited. For
example, it shows only changes made via the Django admin, not via other
parts of the site.&lt;/p></description></item><item><title>Cakti Share Their Favorite Tools For Streamlined Workflows</title><link>https://www.caktusgroup.com/blog/2025/03/27/cakti-share-their-favorite-tools-for-streamlined-worklows/</link><pubDate>Thu, 27 Mar 2025 20:09:03 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/03/27/cakti-share-their-favorite-tools-for-streamlined-worklows/</guid><description>&lt;p>Let’s jump into it!&lt;/p>
&lt;p>At Caktus, we’re always looking for tools that help us streamline our workflows, increase productivity, and make our day-to-day tasks more efficient. Whether you&amp;rsquo;re managing projects, writing code, or debugging, the right tools can make all the difference. Here are some of our favorite tools that we love using to get the job done!&lt;/p></description></item><item><title>Upgrade Smarter, Not Harder: Python Tools for Code Modernization</title><link>https://www.caktusgroup.com/blog/2025/03/27/upgrade-smarter-not-harder-python-tools-code-modernization/</link><pubDate>Thu, 27 Mar 2025 10:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/03/27/upgrade-smarter-not-harder-python-tools-code-modernization/</guid><description>&lt;p>Upgrading projects is somewhat equivalent to flossing, you know you have
to do it, but rarely make time for it. After all, if the project is in
active development, there are exciting new features to build. And we all
know that &lt;strong>new features&lt;/strong> &amp;gt; &lt;strong>project upgrades&lt;/strong>. Well not to worry,
Caktus wants to make you aware of some tools that will save you from
considerable repetitive work &amp;amp; time while simultaneously modernizing
your codebase. Combined, these tools will automate part of the upgrade
process, decreasing the likelihood of neglecting parts of the codebase.&lt;/p></description></item><item><title>How to Create a Helm Chart for a Django App</title><link>https://www.caktusgroup.com/blog/2025/03/18/how-create-helm-chart-django-app/</link><pubDate>Tue, 18 Mar 2025 08:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/03/18/how-create-helm-chart-django-app/</guid><description>&lt;p>At Caktus, we use &lt;a href="https://helm.sh/" target="_blank" rel="noopener noreferrer">Helm charts&lt;/a> to simplify our
deployment process for Django projects. Helm is a package manager for
Kubernetes, and using Helm charts allows us to automate the process of
writing Kubernetes configuration files for our Django applications. We
use it together with GitHub Actions and Ansible to streamline our
deployment processes.&lt;/p></description></item><item><title>One Thing to Look Out For While Testing django-import-export</title><link>https://www.caktusgroup.com/blog/2025/03/17/one-thing-look-out-while-testing-django-import-export/</link><pubDate>Mon, 17 Mar 2025 14:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/03/17/one-thing-look-out-while-testing-django-import-export/</guid><description>&lt;p>Often the applications we build at Caktus deal with large sets of Django
objects. The attributes of these objects can vary, and may need updating
in certain instances. One of the best ways to manage this data is via
&lt;a href="https://django-import-export.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer">django-import-export&lt;/a>,
which is a tool that creates a way to perform these bulk updates with a
file upload such as a .csv or .xlsx file.&lt;/p></description></item><item><title>Chicago Like A Local</title><link>https://www.caktusgroup.com/blog/2025/03/06/chicago-local/</link><pubDate>Thu, 06 Mar 2025 18:16:09 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/03/06/chicago-local/</guid><description>&lt;h2 id="chicago-like-a-local-things-to-do-during-djangocon-us-2025-part-1">Chicago Like a Local: Things to Do During DjangoCon US 2025 (Part 1)&lt;/h2>
&lt;p>&lt;a href="https://2025.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon US 2025&lt;/a> is coming to Chicago, and while you’ll be busy soaking in all things Django, there’s no reason you can’t experience the city like a local while you’re here. Whether you’re looking for great food, cultural spots, or just a cool place to unwind, here are some top recommendations from a Chicago native.&lt;/p></description></item><item><title>How to fix factory_boy post-generation deprecation warnings</title><link>https://www.caktusgroup.com/blog/2025/02/18/how-fix-factory_boy-post-generation-deprecation-warning/</link><pubDate>Tue, 18 Feb 2025 17:52:17 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2025/02/18/how-fix-factory_boy-post-generation-deprecation-warning/</guid><description>&lt;p>We use &lt;a href="https://factoryboy.readthedocs.io/en/stable/" target="_blank" rel="noopener noreferrer">factory_boy&lt;/a> for
bootstrapping test data on many Python and Django projects at Caktus.
Recently, we encountered a deprecation warning on an older project that
had been using &lt;code>factory_boy&lt;/code> for some time:&lt;/p></description></item><item><title>Reflections on DjangoCon US 2024: Highlights, Takeaways, and Community Connections</title><link>https://www.caktusgroup.com/blog/2024/12/16/reflections-djangocon-us-2024-highlights-takeaways-and-community-connections/</link><pubDate>Mon, 16 Dec 2024 23:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2024/12/16/reflections-djangocon-us-2024-highlights-takeaways-and-community-connections/</guid><description>&lt;p>DjangoCon 2024 was a resounding success for the community, with attendees from all over the world gathering to learn about the latest developments in Django and to connect with the Django community. Caktus was well-represented at the conference, with six of our team members attending. In this blog post, we share our experiences at DjangoCon 2024, including our favorite talks, the people we met, and the things we learned. We also offer some tips for future attendees on how to get the most out of DjangoCon.&lt;/p></description></item><item><title>Migrating a Django Project from a GPU to a Convenience Image on CircleCI</title><link>https://www.caktusgroup.com/blog/2023/08/22/migrating-django-project-gpu-convenience-image-circleci/</link><pubDate>Tue, 22 Aug 2023 11:22:07 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2023/08/22/migrating-django-project-gpu-convenience-image-circleci/</guid><description>&lt;p>Recently we learned that as of &lt;em>September 30th, 2023&lt;/em> &lt;a href="https://discuss.circleci.com/t/linux-cuda-deprecation-and-image-policy/48568?mkt_tok=NDg1LVpNSC02MjYAAAGM6em0j1c6QSwAzSPHBw_kbCD6VmHwcrtr74I_yJ4R5W6GlyyUFsm1Qtv7LLzkwkVqvCeh2UqgD4lY4ZjnezxuvYUcc9HgZ2xXuihHBlv_45J_" target="_blank" rel="noopener noreferrer">several linux
images will be
deprecated&lt;/a>,
including the one we used, &lt;code>ubuntu-2004:202111-02&lt;/code>. Therefore, after
September 30th, our pipelines would have failed. To avoid this, we
switched several machines in our Django project from Ubuntu GPU images
to convenience images; This writing details that switch.&lt;/p></description></item><item><title>An introduction to Django Simple History</title><link>https://www.caktusgroup.com/blog/2023/02/13/introduction-django-simple-history/</link><pubDate>Mon, 13 Feb 2023 15:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2023/02/13/introduction-django-simple-history/</guid><description>&lt;p>Wouldn&amp;rsquo;t it be useful if we could document changes in our life and
revisit them later at will? It would allow us to better analyze
situations, remember what we were thinking, or help us remember how we
got to our current state. Although no such tool currently exists for
changes in life, one such tool does exist in Django. It is called
&lt;a href="https://django-simple-history.readthedocs.io/en/latest/" target="_blank" rel="noopener noreferrer">django-simple-history&lt;/a>.&lt;/p></description></item><item><title>Reflection on DjangoCon 2022</title><link>https://www.caktusgroup.com/blog/2023/01/06/django-con-2022/</link><pubDate>Fri, 06 Jan 2023 15:33:37 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2023/01/06/django-con-2022/</guid><description>&lt;h2 id="ronards-recap">Ronard&amp;rsquo;s Recap&lt;/h2>
&lt;p>&lt;em>&amp;ldquo;It takes a village&amp;rdquo;&lt;/em> the African proverb goes. Nowhere was this as apparent as in DjangoCon. It was my first technology conference and my experience could not have been better. People from the most senior developer to fellow juniors and even one of the co-creators of Django made the experience feel warm and inviting. Perhaps knowing that you are surrounded by introverts alleviates the social pressure, knowing that everyone has a common interest, or perhaps even love for programming also brought a soothing feeling to the experience.&lt;/p></description></item><item><title>Meet the New Owners of Caktus</title><link>https://www.caktusgroup.com/blog/2022/01/14/meet-new-owners-caktus/</link><pubDate>Fri, 14 Jan 2022 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2022/01/14/meet-new-owners-caktus/</guid><description>&lt;p>Nearly every week, I receive an email or two from a third party
expressing interest in buying Caktus. As a matter of habit, I don't
open them, let alone respond. Most are scattershot, venture capital
firms looking for Software-as-a-Service companies (which Caktus is not).
But when an employee approached me in 2018 expressing an interest in
making Caktus employee-owned, I listened.&lt;/p></description></item><item><title>How Django Got Its Name</title><link>https://www.caktusgroup.com/blog/2021/11/19/how-django-got-its-name/</link><pubDate>Fri, 19 Nov 2021 13:49:17 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/11/19/how-django-got-its-name/</guid><description>&lt;p>&lt;em>Pictured: From left to right, musicians Sebastian Peszko, Francisco Batista, and Filippo Dall&amp;rsquo;Asta in Berlin, Germany.&lt;/em>&lt;/p>
&lt;p>In early November, my husband and I celebrated a friend’s birthday with dinner and a show. The birthday boy has eclectic tastes and it’s always a treat to be included in his plans. Little did I know, however, that our night out in Berlin, Germany, would be related to my day job with Caktus, which is of course, based in Durham, North Carolina &amp;hellip; As a side note, I’ve been working remotely from Berlin since August 2021.&lt;/p></description></item><item><title>DjangoCon is Back and Free of Charge</title><link>https://www.caktusgroup.com/blog/2021/10/08/djangocon-2021/</link><pubDate>Fri, 08 Oct 2021 18:02:16 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/10/08/djangocon-2021/</guid><description>&lt;p>We’ve waited eagerly for &lt;a href="https://2021.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon 2021&lt;/a> since last year’s event was cancelled due to COVID-19. Not only is the event back, but it’s free to attend! DjangoCon will take place virtually on October 22 and 23 — it will be unprecedented since this is the first time the conference will be virtual.&lt;/p></description></item><item><title>How to Use Celery for Scheduling Tasks</title><link>https://www.caktusgroup.com/blog/2021/08/11/using-celery-scheduling-tasks/</link><pubDate>Wed, 11 Aug 2021 18:14:40 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/08/11/using-celery-scheduling-tasks/</guid><description>&lt;p>There are multiple ways to schedule tasks in your Django app, but there
are some advantages to using Celery. It&amp;rsquo;s supported, scales well, and
works nicely with Django. Given its wide use, there are also lots of
resources for learning more about it, and once learned, that knowledge
is likely to be useful on other projects.&lt;/p></description></item><item><title>Django Chat is Where it’s At</title><link>https://www.caktusgroup.com/blog/2021/06/14/django-chat-podcast/</link><pubDate>Mon, 14 Jun 2021 13:11:11 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/06/14/django-chat-podcast/</guid><description>&lt;p>&lt;strong>Have you heard of the &lt;a href="https://djangochat.com/" target="_blank" rel="noopener noreferrer">Django Chat&lt;/a> podcast? With more than 90 episodes on all things Django, it’s full of informative interviews featuring some of the best and brightest in the industry.&lt;/strong>&lt;/p></description></item><item><title>How to Decouple Your App From its Operating System with Docker</title><link>https://www.caktusgroup.com/blog/2021/06/04/decouple-app-operating-system/</link><pubDate>Fri, 04 Jun 2021 13:48:53 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/06/04/decouple-app-operating-system/</guid><description>&lt;p>We regularly update and improve our &lt;a href="https://www.caktusgroup.com/services/python-django-upgrades-and-sustainability/">upgrades and sustainability service
offerings&lt;/a>
at Caktus, and a recent upgrade for a client precipitated a solution
that I felt might be worth sharing. At Caktus, the preferred approach
for addressing upgrades and sustainability is to make incremental
updates to a project over time, trying to keep both Django and the
servers themselves on a long-term support version. These are select
versions of Django and Ubuntu, for example, that generally have much
longer support periods than other versions, i.e., they are a good fit
for applications that you will need to continue maintaining well into
the future.&lt;/p></description></item><item><title>How to Simplify Django Migrations and Deployment</title><link>https://www.caktusgroup.com/blog/2021/05/25/django-migrations-and-deployment/</link><pubDate>Tue, 25 May 2021 17:34:09 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/05/25/django-migrations-and-deployment/</guid><description>&lt;p>&lt;strong>When removing fields from Django models, or adding non-nullable
fields, it can be hard to avoid a mismatch between code running on some
servers and the database in use.&lt;/strong>&lt;/p></description></item><item><title>Python, Django, and React Development on Apple Silicon</title><link>https://www.caktusgroup.com/blog/2021/04/02/python-django-react-development-apple-silicon/</link><pubDate>Fri, 02 Apr 2021 17:06:27 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/04/02/python-django-react-development-apple-silicon/</guid><description>&lt;p>Last year, Apple announced that they would transition their entire Mac
line from Intel processors to their ARM64 Apple Silicon chip &lt;a href="https://www.apple.com/mac/m1/" target="_blank" rel="noopener noreferrer">called the
M1&lt;/a>. Several weeks ago, I started testing
development on MacBook Air with the Apple M1 chip (pictured above).&lt;/p></description></item><item><title>Our Top 20 Blogs in 2020</title><link>https://www.caktusgroup.com/blog/2021/01/05/top-20-blogs-2020/</link><pubDate>Tue, 05 Jan 2021 15:26:55 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/01/05/top-20-blogs-2020/</guid><description>&lt;p>We’ve published summaries of our most popular blog posts before (see &lt;a href="https://www.caktusgroup.com/blog/2020/01/01/top-19-blogs-2019/">Top 19 of 2019&lt;/a> and &lt;a href="https://www.caktusgroup.com/blog/2019/01/01/caktus-blog-top-18-posts-2018/">Top 18 of 2018&lt;/a>), but this time, we’re taking it a step further. We’re sharing the 20 most popular posts in 2020, regardless of the year the post was originally published. And some of these have been around a while! Based on total pageviews, here are the blogs that rose to the top of the popularity list, from most viewed to least viewed.&lt;/p></description></item><item><title>My Favorite Technical Blogs and Mailing Lists</title><link>https://www.caktusgroup.com/blog/2020/11/04/favorite-technical-blogs-and-mailing-lists/</link><pubDate>Wed, 04 Nov 2020 19:16:51 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2020/11/04/favorite-technical-blogs-and-mailing-lists/</guid><description>&lt;p>I keep up with what's happening in my field by following a number of
blogs and an occasional email list. I don't read everything posted in
all of these, but by scanning the topics in a feed reader, I can keep up
with what's going on, without wasting a lot of time.&lt;/p></description></item><item><title>A Quick Guide to Generating Fake Data with Pandas</title><link>https://www.caktusgroup.com/blog/2020/04/15/quick-guide-generating-fake-data-with-pandas/</link><pubDate>Wed, 15 Apr 2020 10:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2020/04/15/quick-guide-generating-fake-data-with-pandas/</guid><description>&lt;p>Last August, our CTO Colin Copeland wrote about &lt;a href="https://www.caktusgroup.com/blog/2019/08/13/import-multiple-excel-sheets-pandas/">how to import multiple Excel files in your Django project using pandas&lt;/a>. We have used &lt;a href="https://pandas.pydata.org/docs/" target="_blank" rel="noopener noreferrer">pandas&lt;/a> on multiple Python-based projects at Caktus and are adopting it more widely.&lt;/p></description></item><item><title>Our Top 19 Blogs of 2019</title><link>https://www.caktusgroup.com/blog/2020/01/01/top-19-blogs-2019/</link><pubDate>Wed, 01 Jan 2020 17:17:32 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2020/01/01/top-19-blogs-2019/</guid><description>&lt;p>During the last year we gave our popular technical blog an official name: Developer Access. We published 32 posts on the blog, including technical how-to’s, conference information, web development best practices and detailed guides. Among all those posts, 19 rose to the top of the popularity list (based on total pageviews):&lt;/p></description></item><item><title>Single Page Application + REST as an Abstraction: The Benefits of Decoupling Your Front &amp; Back Ends</title><link>https://www.caktusgroup.com/blog/2019/12/19/single-page-application-rest-abstraction/</link><pubDate>Thu, 19 Dec 2019 19:18:18 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/12/19/single-page-application-rest-abstraction/</guid><description>&lt;p>Monolithic, consolidated applications are not bad. These are your Rails apps, your Django apps, etc. — the ones where your server sends back HTML and assets. You’ve faithfully followed the Model-View-Controller (MVC) pattern as best you can and your concerns are “separated.” This design principle is not passé. It just so happens that for a long time, it was your only option.&lt;/p></description></item><item><title>One Team’s Development Patterns With Vue.js and Django REST Framework</title><link>https://www.caktusgroup.com/blog/2019/11/18/development-patterns-vuejs-and-drf/</link><pubDate>Mon, 18 Nov 2019 18:44:02 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/11/18/development-patterns-vuejs-and-drf/</guid><description>&lt;p>Within the past year, my development team at Caktus worked on a project
that required a front-end framework to build a fast, easy-to-use product
for a client. After a discussion of frameworks such as React, Vue, and
Angular, and their approaches, our team settled on using
&lt;a href="https://vuejs.org/" target="_blank" rel="noopener noreferrer">Vue.js&lt;/a>, along with a Django back-end with Django
REST Framework (DRF). Initially, we chose Vue because we were more
familiar with it, rather than its current competitor React, but as we
worked on the product, we ended up having a number of team discussions
about how to organize our code well and avoid extra code debt. This blog
outlines some of the development patterns we chose as we worked through
a number of issues, such as simplifying a multitude of almost identical
Vuex mutations, finding a consistent way of holding temporary state, and
working with nested objects on the front-end and back-end.&lt;/p></description></item><item><title>DjangoCon 2019 Delivered Again</title><link>https://www.caktusgroup.com/blog/2019/10/03/djangocon-2019/</link><pubDate>Thu, 03 Oct 2019 21:05:01 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/10/03/djangocon-2019/</guid><description>&lt;p>&lt;em>Above: Django Fellow Carlton Gibson gives a talk on &amp;ldquo;Your Web Framework Needs You: An Update.&amp;rdquo;&lt;/em>&lt;/p>
&lt;p>Again this year, DjangoCon more than delivered on its promise of something for everyone. A keynote on burnout and balance? Thoroughly entertaining! &lt;a href="https://2019.djangocon.us/talk/keynote-jessica-rose/" target="_blank" rel="noopener noreferrer">Jessica Rose’s talk&lt;/a> left us in stitches. Who knew a talk about occupational burnout could be so fun? It was one of a wide range of subjects covered in three days of talks, bookended by a day of tutorials and two days of sprints. The conference took place in San Diego and ran from September 22 - 26. What a great week of learning and networking!&lt;/p></description></item><item><title>DjangoCon, Here We Come!</title><link>https://www.caktusgroup.com/blog/2019/08/20/djangocon-here-we-come/</link><pubDate>Tue, 20 Aug 2019 18:13:01 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/08/20/djangocon-here-we-come/</guid><description>&lt;p>We’re looking forward to the international gathering at &lt;a href="https://2019.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon 2019&lt;/a>, in San Diego, CA. The six-day conference, from September 22 - 27, is focused on the Django web framework, and we’re proud to attend as sponsors for the tenth year! We’re also hosting the second annual Caktus Mini Golf event.&lt;/p></description></item><item><title>How to Set Up a Centralized Log Server with rsyslog</title><link>https://www.caktusgroup.com/blog/2019/06/20/how-to-set-up-centralized-log-server-rsyslog/</link><pubDate>Thu, 20 Jun 2019 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/06/20/how-to-set-up-centralized-log-server-rsyslog/</guid><description>&lt;p>For many years, we've been running an ELK (Elasticsearch, Logstash,
Kibana) stack for centralized logging. We have a specific project that
requires on-premise infrastructure, so sending logs off-site to a hosted
solution was not an option. Over time, however, the maintenance
requirements of this self-maintained ELK stack were staggering.
Filebeat, for example, filled up all the disks on all the servers in a
matter of hours, not once, but twice (and for different reasons) when it
could not reach its Logstash/Elasticsearch endpoint. Metricbeat suffered
from a similar issue: It used far too much disk space relative to the
value provided in its Elasticsearch indices. And while provisioning a
self-hosted ELK stack has gotten easier over the years, it's still a
lengthy process, which requires extra care anytime an upgrade is needed.
Are these problems solvable? Yes. But for our needs, a simpler solution
was needed.&lt;/p></description></item><item><title>How to Switch to a Custom Django User Model Mid-Project</title><link>https://www.caktusgroup.com/blog/2019/04/26/how-switch-custom-django-user-model-mid-project/</link><pubDate>Fri, 26 Apr 2019 16:32:33 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/04/26/how-switch-custom-django-user-model-mid-project/</guid><description>&lt;p>The Django documentation recommends always &lt;a href="https://docs.djangoproject.com/en/2.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project" target="_blank" rel="noopener noreferrer">starting your project with a
custom user
model&lt;/a>
(even if it's identical to Django's to begin with), to make it easier
to customize later if you need to. But what are you supposed to do if
you didn't see this when starting a project, or if you inherited a
project without a custom user model and you need to add one?&lt;/p></description></item><item><title>Coding for Time Zones &amp; Daylight Saving Time — Oh, the Horror</title><link>https://www.caktusgroup.com/blog/2019/03/21/coding-time-zones-and-daylight-saving-time/</link><pubDate>Thu, 21 Mar 2019 16:45:36 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/03/21/coding-time-zones-and-daylight-saving-time/</guid><description>&lt;p>In this post, I review some reasons why it's really difficult to
program correctly when using times, dates, time zones, and daylight
saving time, and then I'll give some advice for working with them in
Python and Django. Also, I'll go over why I hate daylight saving time
(DST).&lt;/p></description></item><item><title>Why We Love Wagtail (and You Will, Too)</title><link>https://www.caktusgroup.com/blog/2019/03/07/why-we-love-wagtail/</link><pubDate>Thu, 07 Mar 2019 14:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/03/07/why-we-love-wagtail/</guid><description>&lt;p>New clients regularly ask us if we build WordPress sites. When we dig deeper, we generally learn that they’re looking for a user-friendly content management system (CMS) that will allow them to effortlessly publish and curate their site content. As we’ve &lt;a href="https://www.caktusgroup.com/blog/2018/08/14/django-vs-wordpress/">written about previously&lt;/a>, WordPress can be a good fit for simple sites. However, the majority of our clients need a more robust technical solution with customizable content management tools. For the Python-driven web applications that we develop, we love to work with Wagtail.&lt;/p></description></item><item><title>Django: Recommended Reading</title><link>https://www.caktusgroup.com/blog/2019/03/01/django-recommended-reading/</link><pubDate>Fri, 01 Mar 2019 22:19:42 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/03/01/django-recommended-reading/</guid><description>&lt;p>&lt;em>Pictured: Our library of reference books at Caktus cover topics including Django and Python, as well as project management and Agile methodologies.&lt;/em>&lt;/p></description></item><item><title>A Guide To Creating An API Endpoint With Django Rest Framework</title><link>https://www.caktusgroup.com/blog/2019/02/01/creating-api-endpoint-django-rest-framework/</link><pubDate>Fri, 01 Feb 2019 20:42:28 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/02/01/creating-api-endpoint-django-rest-framework/</guid><description>&lt;p>As part of our work to make sharp web apps at Caktus, we frequently
create API endpoints that allow other software to interact with a
server. Oftentimes this means using a frontend app (React, Vue, or
Angular), though it could also mean connecting some other piece of
software to interact with a server. A lot of our API endpoints, across
projects, end up functioning in similar ways, so we have become
efficient at writing them, and this blog post gives an example of how to
do so.&lt;/p></description></item><item><title>How to Use Django Bulk Inserts for Greater Efficiency</title><link>https://www.caktusgroup.com/blog/2019/01/09/django-bulk-inserts/</link><pubDate>Wed, 09 Jan 2019 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/01/09/django-bulk-inserts/</guid><description>&lt;p>It's been awhile since we &lt;a href="https://www.caktusgroup.com/blog/2011/09/20/bulk-inserts-django/">last discussed bulk
inserts&lt;/a>
on the Caktus blog. The idea is simple: if you have an application that
needs to insert a lot of data into a Django model &amp;mdash; for example a
background task that processes a CSV file (or some other text file) &amp;mdash;
it pays to &amp;quot;chunk&amp;quot; those updates to the database so that multiple
records are created through a single database operation. This reduces
the total number of round-trips to the database, something my colleague
Dan Poirier discussed in more detail in the post linked above.&lt;/p></description></item><item><title>Caktus Blog: Top 18 Posts of 2018</title><link>https://www.caktusgroup.com/blog/2019/01/01/caktus-blog-top-18-posts-2018/</link><pubDate>Tue, 01 Jan 2019 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/01/01/caktus-blog-top-18-posts-2018/</guid><description>&lt;p>In 2018, we published 44 posts on our blog, including technical how-to’s, a series on UX research methods, web development best practices, and tips for project management. Among all those posts, 18 rose to the top of the popularity list in 2018.&lt;/p></description></item><item><title>Django Depends on You: A Takeaway from DjangoCon</title><link>https://www.caktusgroup.com/blog/2018/11/13/django-depends-you/</link><pubDate>Tue, 13 Nov 2018 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/11/13/django-depends-you/</guid><description>&lt;p>&lt;em>Photo by &lt;a href="https://bartpawlik.format.com/" target="_blank" rel="noopener noreferrer">Bartek Pawlik&lt;/a>.&lt;/em>&lt;/p>
&lt;p>DjangoCon 2018 attracted attendees from around the world, including myself and several other Cakti (check out our &lt;a href="https://www.caktusgroup.com/blog/2018/10/25/djangocon-2018-recap/">DjangoCon recap post&lt;/a>). Having attended a number of DjangoCons in the past, I looked forward to reconnecting with old colleagues and friends within the community, learning new things about our favorite framework, and exploring San Diego.&lt;/p></description></item><item><title>DjangoCon 2018 Recap</title><link>https://www.caktusgroup.com/blog/2018/10/25/djangocon-2018-recap/</link><pubDate>Thu, 25 Oct 2018 11:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/10/25/djangocon-2018-recap/</guid><description>&lt;p>&lt;em>Above: Hundreds of happy Djangonauts at DjangoCon 2018. (Photo by Bartek Pawlik.)&lt;/em>&lt;/p>
&lt;p>That’s it, folks — another &lt;a href="https://2018.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon&lt;/a> in the books! Caktus was thrilled to sponsor and attend this fantastic gathering of Djangonauts for the ninth year running. This year’s conference ran from October 14 - 19, in sunny San Diego. ☀️&lt;/p></description></item><item><title>Filtering and Pagination with Django</title><link>https://www.caktusgroup.com/blog/2018/10/18/filtering-and-pagination-django/</link><pubDate>Thu, 18 Oct 2018 14:40:42 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/10/18/filtering-and-pagination-django/</guid><description>&lt;p>If you want to build a list page that allows filtering and pagination,
you have to get a few separate things to work together. Django provides
some tools for pagination, but the documentation doesn't tell us how to
make that work with anything else. Similarly, django_filter makes it
relatively easy to add filters to a view, but doesn't tell you how to
add pagination (or other things) without breaking the filtering.&lt;/p></description></item><item><title>Django or Drupal for Content Management: Which Fits your Needs?</title><link>https://www.caktusgroup.com/blog/2018/09/28/django-or-drupal-content-management/</link><pubDate>Fri, 28 Sep 2018 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/09/28/django-or-drupal-content-management/</guid><description>&lt;p>If you’re building or updating a website, you’re probably wondering about which content management system (CMS) to use. A CMS helps users — particularly non-technical users — to add pages and blog posts, embed videos and images, and incorporate other content into their site.&lt;/p></description></item><item><title>Diverse Speaker Line-up for DjangoCon is Sharp</title><link>https://www.caktusgroup.com/blog/2018/09/20/speakers-djangocon/</link><pubDate>Thu, 20 Sep 2018 13:37:18 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/09/20/speakers-djangocon/</guid><description>&lt;p>&lt;em>Above: Caktus Account Manager Tim Scales gears up for DjangoCon.&lt;/em>&lt;/p>
&lt;p>We’re looking forward to taking part in the international gathering of Django enthusiasts at &lt;a href="https://2018.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon&lt;/a> 2018, in San Diego, CA. We’ll be there from October 14 - 19, and we’re proud to attend as sponsors for the ninth year! As such, we’re hosting a mini golf event for attendees (details below).&lt;/p></description></item><item><title>Django vs WordPress: How to Decide?</title><link>https://www.caktusgroup.com/blog/2018/08/14/django-vs-wordpress/</link><pubDate>Tue, 14 Aug 2018 10:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/08/14/django-vs-wordpress/</guid><description>&lt;p>In the early stages of a web development project, your first step is a big decision: what’s the right tool for the job? What kind of software makes the most sense for me?&lt;/p></description></item><item><title>Make ALL Your Django Forms Better</title><link>https://www.caktusgroup.com/blog/2018/06/18/make-all-your-django-forms-better/</link><pubDate>Mon, 18 Jun 2018 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/06/18/make-all-your-django-forms-better/</guid><description>&lt;p>Website experiences need to be consistent as much as they need to be well thought out and aesthetically pleasing. Structure, visual design, user interactions, and accessibility concerns are among many considerations that go into building quality websites. While achieving consistency of experience and implementation is an essential goal of web development, efficiency of execution is also very important. An efficient workflow means this consistent experience doesn’t require redoing work across the site.&lt;/p></description></item><item><title>Creating Dynamic Forms with Django</title><link>https://www.caktusgroup.com/blog/2018/05/07/creating-dynamic-forms-django/</link><pubDate>Mon, 07 May 2018 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/05/07/creating-dynamic-forms-django/</guid><description>&lt;p>&lt;em>Editor&amp;rsquo;s note: This post was written in 2018 when Django 1.11 and Django 2.0 were current. The code samples may need to be updated to work with more recent versions of Django.&lt;/em>&lt;/p></description></item><item><title>Basics of Django Rest Framework</title><link>https://www.caktusgroup.com/blog/2018/02/26/basics-django-rest-framework/</link><pubDate>Mon, 26 Feb 2018 14:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/02/26/basics-django-rest-framework/</guid><description>&lt;h3 id="what-is-django-rest-framework">What Is Django Rest Framework?&lt;/h3>
&lt;p>&lt;a href="http://www.django-rest-framework.org/" target="_blank" rel="noopener noreferrer">Django Rest Framework&lt;/a> (DRF) is a library which works with standard Django models to build a flexible and powerful API for your project.&lt;/p></description></item><item><title>Add Value To Your Django Project With An API</title><link>https://www.caktusgroup.com/blog/2018/02/19/add-value-to-django-project-api/</link><pubDate>Mon, 19 Feb 2018 14:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/02/19/add-value-to-django-project-api/</guid><description>&lt;p>How do your users interact with your web app? Do you have users who are requesting new features? Are there more good feature requests than you have developer hours to build? Often, a small addition to your app can open the door to let users build features they want (within limits) without using more of your own developers’ time, and you can still keep control over how data can be accessed or changed. That small addition is called an application programming interface, or API. APIs are used across the web, but if you aren’t a developer, you may not have heard of them. They can be easily built on top of Django projects, though, and can provide great value to your own developers as well as to your users.&lt;/p></description></item><item><title>Caktus Blog Best of 2017</title><link>https://www.caktusgroup.com/blog/2018/01/01/caktus-blog-best-2017/</link><pubDate>Mon, 01 Jan 2018 14:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/01/01/caktus-blog-best-2017/</guid><description>&lt;p>With 2017 now over, we highlight the top 17 posts published or updated on the Caktus blog this year. Have you read them all?&lt;/p></description></item><item><title>Caktus is Excited about Django 2.0</title><link>https://www.caktusgroup.com/blog/2017/12/04/caktus-excited-about-django-2/</link><pubDate>Mon, 04 Dec 2017 14:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/12/04/caktus-excited-about-django-2/</guid><description>&lt;p>Did you know Django 2.0 is out? The development team at Caktus knows and we’re excited! You should be excited too if you work with or depend on Django. Here’s what our Cakti have been saying about the recently-released 2.0 beta.&lt;/p></description></item><item><title>Automating Dokku Setup with AWS Managed Services</title><link>https://www.caktusgroup.com/blog/2017/10/16/automating-dokku-setup-aws-managed-services/</link><pubDate>Mon, 16 Oct 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/10/16/automating-dokku-setup-aws-managed-services/</guid><description>&lt;p>&lt;a href="http://dokku.viewdocs.io/dokku/" target="_blank" rel="noopener noreferrer">Dokku&lt;/a> is a great little tool. It lets
you set up your own virtual machine (VM) to facilitate quick and easy
Heroku-like deployments through a &lt;code>git push&lt;/code> command. Builds are fast,
and updating environment variables is easy. The problem is that Dokku
includes all of your services on a single instance. When you run your
database on the Dokku instance, you risk losing it (and any data that's
not yet backed up) should your VM suddenly fail.&lt;/p></description></item><item><title>Advanced Django File Handling</title><link>https://www.caktusgroup.com/blog/2017/08/28/advanced-django-file-handling/</link><pubDate>Mon, 28 Aug 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/08/28/advanced-django-file-handling/</guid><description>&lt;h2 id="advanced-django-file-handling">Advanced Django File Handling&lt;/h2>
&lt;p>Modern Django's file handling capabilities go well beyond what's
covered in the tutorial. By customizing the handlers that Django uses,
you can do things pretty much any way you want.&lt;/p></description></item><item><title>ShipIt Day Recap Q3 2017</title><link>https://www.caktusgroup.com/blog/2017/08/14/shipit-day-recap-q3-2017/</link><pubDate>Mon, 14 Aug 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/08/14/shipit-day-recap-q3-2017/</guid><description>&lt;p>Caktus recently held the Q3 2017 ShipIt Day. Each quarter, employees take a step back from business as usual and take advantage of time to work on personal projects or otherwise develop skills. This quarter, we enjoyed fresh crêpes while working on a variety of projects, from coloring books to Alexa skills.&lt;/p></description></item><item><title>Is Django the Right Fit for your Project?</title><link>https://www.caktusgroup.com/blog/2017/07/24/django-right-fit-your-project/</link><pubDate>Mon, 24 Jul 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/07/24/django-right-fit-your-project/</guid><description>&lt;p>You need a website. You may have done some searches, and come back overwhelmed and empty-handed, having found hosting providers offering services that may have sounded familiar (“WordPress”) and ones that may have sounded like a foreign language (“cPanel”). You may have considered hiring someone to build your website, and gotten conflicting answers about what you need and what it would cost. You may have also heard about Django, but you&amp;rsquo;re not sure how it it fits into the picture and whether or not it&amp;rsquo;s the right fit for your project. This is common, because there are many different types of websites out there. To help answer the question of whether Django is the right fit for your project, let’s take a look at the landscape.&lt;/p></description></item><item><title>Caktus at DjangoCon2017</title><link>https://www.caktusgroup.com/blog/2017/07/17/caktus-djangocon2017/</link><pubDate>Mon, 17 Jul 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/07/17/caktus-djangocon2017/</guid><description>&lt;p>In less than a month we’ll be heading out to Spokane, WA for DjangoCon 2017. We’re proud to be attending as &lt;a href="https://2017.djangocon.us/news/caktusgroup/" target="_blank" rel="noopener noreferrer">sponsors&lt;/a> for the eighth year, and look forward to greeting everyone at our booth. On August 16th, we’ll be raffling off a GoPro Session action camera, so be sure to stop by and enter. We’ll also have our comfy new t-shirts and some limited-edition Caktus 10th Anniversary water bottles to give away. They went fast at PyCon, so don’t wait to get yours.&lt;/p></description></item><item><title>Managing your AWS Container Infrastructure with Python</title><link>https://www.caktusgroup.com/blog/2017/06/28/managing-your-aws-container-infrastructure-with-python/</link><pubDate>Wed, 28 Jun 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/06/28/managing-your-aws-container-infrastructure-with-python/</guid><description>&lt;p>We deploy Python/Django apps to a wide variety of hosting providers at
Caktus. Our
&lt;a href="https://github.com/caktus/django-project-template" target="_blank" rel="noopener noreferrer">django-project-template&lt;/a>
includes a &lt;a href="https://docs.saltstack.com/en/latest/topics/" target="_blank" rel="noopener noreferrer">Salt&lt;/a>
configuration to set up an Ubuntu virtual machine on just about any
hosting provider, from scratch. We've also modified this a number of
times for local hosting requirements when our customer required the
application we built to be hosted on hardware they control. In the past,
we also &lt;a href="http://fabulaws.readthedocs.io/en/latest/architecture.html" target="_blank" rel="noopener noreferrer">built our own
tool&lt;/a> for
creating and managing EC2 instances automatically via the Amazon Web
Services (AWS) APIs. In March, my colleague &lt;a href="https://www.caktusgroup.com/about/dan-poirier/">Dan
Poirier&lt;/a> wrote an excellent post about &lt;a href="https://www.caktusgroup.com/blog/2017/03/23/hosting-django-sites-amazon-elastic-beanstalk/">deploying
Django applications to Elastic
Beanstalk&lt;/a>
demonstrating how we&amp;rsquo;ve used that service.&lt;/p></description></item><item><title>Python at Instagram (PyCon 2017 Must-See Talk 2/6)</title><link>https://www.caktusgroup.com/blog/2017/06/12/python-instagram/</link><pubDate>Mon, 12 Jun 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/06/12/python-instagram/</guid><description>&lt;p>&lt;em>Part two of six in the 2017 edition of our annual &lt;a href="https://www.caktusgroup.com/blog/tags/pycon-must-see-series/">PyCon Must-See Series&lt;/a>, highlighting the talks our staff especially loved at PyCon. While there were many great talks, this is our team&amp;rsquo;s shortlist.&lt;/em>&lt;/p></description></item><item><title>3 Reasons to Upgrade to the Latest Version of Django</title><link>https://www.caktusgroup.com/blog/2017/05/22/3-reasons-upgrade-latest-version-django/</link><pubDate>Mon, 22 May 2017 15:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/05/22/3-reasons-upgrade-latest-version-django/</guid><description>&lt;p>When considering a website upgrade, many business stakeholders probably think about the frontend, i.e., how the website looks or the features users interact with. Perhaps less often considered is the importance of upgrading the backend; that is, the databases, applications, and servers powering all the behind-the-scenes activity. Infrastructure support and upgrades are necessary but often performed as a separate project from any improvements to design or user experience, rather than as part of a holistic update project.&lt;/p></description></item><item><title>ShipIt Day Recap Q2 2017</title><link>https://www.caktusgroup.com/blog/2017/05/03/shipit-day-recap-q2-2017/</link><pubDate>Wed, 03 May 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/05/03/shipit-day-recap-q2-2017/</guid><description>&lt;p>Once per quarter, Caktus employees have the opportunity to take a day away from client work to focus on learning or refreshing skills, testing out ideas, or working on open source contributions. The Q2 2017 ShipIt Day work included building apps, updating open source projects, trying out new tools, and more. Keep reading for the details.&lt;/p></description></item><item><title>Building a Custom Block Template Tag</title><link>https://www.caktusgroup.com/blog/2017/05/01/building-custom-block-template-tag/</link><pubDate>Mon, 01 May 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/05/01/building-custom-block-template-tag/</guid><description>&lt;p>Building custom tags for Django templates has gotten much easier over
the years, with decorators provided that do most of the work when
building common, simple kinds of tags.&lt;/p></description></item><item><title>Digging Into Django QuerySets</title><link>https://www.caktusgroup.com/blog/2017/04/05/digging-into-django-querysets/</link><pubDate>Wed, 05 Apr 2017 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/04/05/digging-into-django-querysets/</guid><description>&lt;h2 id="digging-into-django-querysets">Digging Into Django QuerySets&lt;/h2>
&lt;p>&lt;a href="https://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank" rel="noopener noreferrer">Object-relational
mappers&lt;/a> (or
ORMs for short), such as the one that comes built-in with Django, make
it easy for even new developers to become productive without needing to
have a large body of knowledge about how to make use of relational
databases. They abstract away the details of database access, replacing
tables with declarative model classes and queries with chains of method
calls. Since this is all done in standard Python developers can build on
top of it further, adding instance methods to a model to wrap reusable
pieces of logic. However, the abstraction provided by ORMs is not
perfect. There are pitfalls lurking for unwary developers, such as the
&lt;strong>N + 1 problem&lt;/strong>. On the bright side, it is not difficult to explore
and gain a better understanding of Django's ORM. Taking the time and
effort to do so will help you become a better Django developer.&lt;/p></description></item><item><title>Come Visit Us at PyCon 2017</title><link>https://www.caktusgroup.com/blog/2017/03/29/come-visit-us-pycon-2017/</link><pubDate>Wed, 29 Mar 2017 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/03/29/come-visit-us-pycon-2017/</guid><description>&lt;p>PyCon 2017 is fast approaching, and we’re excited to support the event this year as sponsors once again. It’s a great opportunity to meet new friends, exchange ideas and interact with the community at large.&lt;/p></description></item><item><title>Hosting Django Sites on Amazon Elastic Beanstalk</title><link>https://www.caktusgroup.com/blog/2017/03/23/hosting-django-sites-amazon-elastic-beanstalk/</link><pubDate>Thu, 23 Mar 2017 15:45:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/03/23/hosting-django-sites-amazon-elastic-beanstalk/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>Amazon Web Services (AWS)' &lt;a href="http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html" target="_blank" rel="noopener noreferrer">Elastic
Beanstalk&lt;/a>
is a service that bundles up a number of their lower-level services to
manage many details for you when deploying a site. We particularly like
it for deploys and autoscaling.&lt;/p></description></item><item><title>Here's a Production-Ready Dockerfile for Your Python/Django App</title><link>https://www.caktusgroup.com/blog/2017/03/14/production-ready-dockerfile-your-python-django-app/</link><pubDate>Tue, 14 Mar 2017 08:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/03/14/production-ready-dockerfile-your-python-django-app/</guid><description>&lt;p>&lt;strong>Update (October 29, 2019):&lt;/strong> I updated this post with more recent
Django and Postgres versions, to use Python and pip directly in the
container (instead of in a separate virtual environment, which was
unnecessary), and switched to a non-root user via Docker instead of
uWSGI.&lt;/p></description></item><item><title>Python type annotations</title><link>https://www.caktusgroup.com/blog/2017/02/22/python-type-annotations/</link><pubDate>Wed, 22 Feb 2017 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/02/22/python-type-annotations/</guid><description>&lt;p>When it comes to programming, I have a belt &lt;em>and&lt;/em> suspenders philosophy.
Anything that can help me avoid errors early is worth looking into.&lt;/p></description></item><item><title>Caktus Attends Wagtail CMS Sprint in Reykjavik</title><link>https://www.caktusgroup.com/blog/2017/02/17/caktus-attends-wagtail-cms-sprint-reykjavik/</link><pubDate>Fri, 17 Feb 2017 23:15:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/02/17/caktus-attends-wagtail-cms-sprint-reykjavik/</guid><description>&lt;p>Caktus CEO Tobias McNulty and Sales Engineer David Ray recently had the opportunity to attend a &lt;a href="https://wagtail.io/blog/reykjavik-2017/" target="_blank" rel="noopener noreferrer">development sprint&lt;/a> for the &lt;a href="https://wagtail.io/" target="_blank" rel="noopener noreferrer">Wagtail&lt;/a> Content Management System (CMS) in Reykjavik, Iceland. The two-day software development sprint attracted 15 attendees hailing from a total of 5 countries across North America and Europe.&lt;/p></description></item><item><title>Caktus at PyCaribbean</title><link>https://www.caktusgroup.com/blog/2017/02/01/Caktus-at-pycaribbean/</link><pubDate>Wed, 01 Feb 2017 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/02/01/Caktus-at-pycaribbean/</guid><description>&lt;p>For the first time, Caktus will be gold sponsors at PyCaribbean February 18-19th in Bayamon, Puerto Rico. We’re pleased to announce two speakers from our team.&lt;/p></description></item><item><title>Ship It Day Q1 2017</title><link>https://www.caktusgroup.com/blog/2017/01/18/ship-it-day-q1-2017/</link><pubDate>Wed, 18 Jan 2017 16:39:28 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/01/18/ship-it-day-q1-2017/</guid><description>&lt;p>Last Friday, Caktus set aside client projects for our regular quarterly
ShipIt Day. From gerrymandered districts to RPython and meetup planning,
the team started off 2017 with another great ShipIt.&lt;/p></description></item><item><title>New year, new Python: Python 3.6</title><link>https://www.caktusgroup.com/blog/2017/01/11/new-year-new-python-3-6/</link><pubDate>Wed, 11 Jan 2017 19:44:14 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/01/11/new-year-new-python-3-6/</guid><description>&lt;p>Python 3.6 was released in the tail end of 2016. Read on for a few
highlights from this release.&lt;/p>
&lt;h2 id="new-module-secrets">New module: secrets&lt;/h2>
&lt;p>Python 3.6 introduces a new module in the standard library called
&lt;code>secrets&lt;/code>. While the &lt;code>random&lt;/code> module has long existed to provide us with
pseudo-random numbers suitable for applications like modeling and
simulation, these were not &amp;quot;cryptographically random&amp;quot; and not suitable
for use in cryptography. &lt;code>secrets&lt;/code> fills this gap, providing a
cryptographically strong method to, for instance, create a new, random
password or a secure token.&lt;/p></description></item><item><title>Django is Boring, or Why Tech Startups (Should) Use Django</title><link>https://www.caktusgroup.com/blog/2016/12/14/django-boring-or-why-tech-startups-should-use-django/</link><pubDate>Wed, 14 Dec 2016 15:04:32 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/12/14/django-boring-or-why-tech-startups-should-use-django/</guid><description>&lt;p>I recently attended &lt;a href="https://www.djangounderthehood.com/" target="_blank" rel="noopener noreferrer">Django Under The Hood&lt;/a> in Amsterdam, an annual gathering of Django core team members and developers from around the world. A common theme discussed at the conference this year is that “Django is boring.” While it’s not the first time this has been discussed, it still struck me as odd. Upon further reflection, however, I see Django’s “boringness” as a huge asset to the community and potential adopters of the framework.&lt;/p></description></item><item><title>Django Under the Hood 2016 Recap</title><link>https://www.caktusgroup.com/blog/2016/11/29/django-under-hood-2016-recap/</link><pubDate>Tue, 29 Nov 2016 17:31:25 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/11/29/django-under-hood-2016-recap/</guid><description>&lt;p>Caktus was a proud sponsor of Django Under the Hood (DUTH) 2016 in Amsterdam this year. Organized by Django core developers and community members, DUTH is a highly technical conference that delves deep into Django.&lt;/p></description></item><item><title>RapidCon 2016: RapidPro Developer's Recap</title><link>https://www.caktusgroup.com/blog/2016/11/16/rapidcon-2016-rapidpro-developers-recap/</link><pubDate>Wed, 16 Nov 2016 15:41:07 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/11/16/rapidcon-2016-rapidpro-developers-recap/</guid><description>&lt;p>Developer &lt;a href="https://www.caktusgroup.com/about/erin-mullaney/">Erin Mullaney&lt;/a> was just in Amsterdam for RapidCon, a UNICEF-hosted event for developers using RapidPro, an SMS tool built on Django. The teams that have worked on RapidPro and its predecessor RapidSMS have gotten to know each other virtually over the years. This marks the second time they’ve all come from across the globe to share learnings on RapidPro and to discuss its future.&lt;/p></description></item><item><title>Common web site security vulnerabilities</title><link>https://www.caktusgroup.com/blog/2016/11/10/common-web-site-vulnerabilities-Django-security/</link><pubDate>Thu, 10 Nov 2016 17:47:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/11/10/common-web-site-vulnerabilities-Django-security/</guid><description>&lt;p>I recently decided I wanted to understand better what Cross-Site
Scripting and Cross-Site Request Forgery were, and how they compared to
that classic vulnerability, SQL Injection.&lt;/p></description></item><item><title>Managing multiple Python projects: Virtual environments</title><link>https://www.caktusgroup.com/blog/2016/11/03/managing-multiple-python-projects-virtual-environments/</link><pubDate>Thu, 03 Nov 2016 12:06:49 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/11/03/managing-multiple-python-projects-virtual-environments/</guid><description>&lt;p>Even Python learning materials that get into very advanced language
features rarely mention some practical things that would be very helpful
to know as soon as you start working on more serious projects, like:&lt;/p></description></item><item><title>Presidential debate questions influenced by open source platform</title><link>https://www.caktusgroup.com/blog/2016/10/25/presidential-debate-questions-influenced-open-source-platform/</link><pubDate>Tue, 25 Oct 2016 18:40:02 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/10/25/presidential-debate-questions-influenced-open-source-platform/</guid><description>&lt;p>During the past two presidential debates, moderators from ABC and Fox asked candidates Hillary Clinton and Donald Trump voter-submitted questions from PresidentialOpenQuestions.com. The site, created by the bipartisan Open Debate Coalition (ODC) with the support of Caktus Group, is built on top of the open source Django web framework.&lt;/p></description></item><item><title>ShipIt Day Recap Q3 2016</title><link>https://www.caktusgroup.com/blog/2016/10/24/shipit-day-recap-october-2016/</link><pubDate>Mon, 24 Oct 2016 15:50:02 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/10/24/shipit-day-recap-october-2016/</guid><description>&lt;p>This ShipIt day marks four years of ShipIt days at Caktus! We had a wide range of projects that people came together to build. Most importantly, we all had fun and learned through actively working on the projects. People explored new technologies and tools, and had a chance to dig a bit deeper into items that piqued their interest in their regular work.&lt;/p></description></item><item><title>Don't keep important data in your Celery queue</title><link>https://www.caktusgroup.com/blog/2016/10/18/dont-keep-important-data-your-celery-queue/</link><pubDate>Tue, 18 Oct 2016 19:53:34 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/10/18/dont-keep-important-data-your-celery-queue/</guid><description>&lt;p>The Celery library (&lt;a href="https://www.caktusgroup.com/blog/tags/celery/">previous posts&lt;/a>) makes it as
easy to schedule a task to run later as calling a function. Just change:&lt;/p></description></item><item><title>PyData Carolinas 2016 Recap</title><link>https://www.caktusgroup.com/blog/2016/10/17/pydata-carolinas-2016-recap/</link><pubDate>Mon, 17 Oct 2016 19:29:14 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/10/17/pydata-carolinas-2016-recap/</guid><description>&lt;p>We had a great time at the inaugural PyData Carolinas hosted nearby at IBM in the Research Triangle Park. People from Caktus presented a number of talks and the videos are now up online:&lt;/p></description></item><item><title>Caktus Group @ PyData Carolinas 2016</title><link>https://www.caktusgroup.com/blog/2016/09/14/Caktus-group-pydata-carolinas-2016/</link><pubDate>Wed, 14 Sep 2016 17:23:47 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/09/14/Caktus-group-pydata-carolinas-2016/</guid><description>&lt;p>Tomorrow marks the official beginning of PyData Carolinas 2016 (though technically, the tutorials started today). This is the first time PyData has hosted a conference in our area. We’re especially proud of the way local leaders and members of meetups like TriPython, TechGirlz, Girl Develop It RDU, and PyLadies have worked in tandem to put this event together for the Python community.&lt;/p></description></item><item><title>ShipIt Day Recap - July 2016</title><link>https://www.caktusgroup.com/blog/2016/07/25/shipit-day-recap-july-2016/</link><pubDate>Mon, 25 Jul 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/07/25/shipit-day-recap-july-2016/</guid><description>&lt;p>We finished up last week with another successful ShipIt Day. ShipIt Days are quarterly events where we put down client work for a little bit and focus on learning, stretching ourselves, and sharing. Everyone chooses to work together or individually on an itch or a project that has been on the back of their mind for the last few months. This time, we stretched ourselves by trying out new frameworks, languages, and pluggable apps. Here are some of the projects we worked on during ShipIt Day:&lt;/p></description></item><item><title>Caktus at DjangoCon 2016 - Talks that Have Us Talking</title><link>https://www.caktusgroup.com/blog/2016/07/14/caktus-djangocon-2016-talks-have-us-talking/</link><pubDate>Thu, 14 Jul 2016 16:51:21 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/07/14/caktus-djangocon-2016-talks-have-us-talking/</guid><description>&lt;p>Caktus is headed to Philadelphia for our seventh DjangoCon. We’re Gold Sponsors this year, so definitely come by our booth to chat with our team and grab t-shirts, stickers, and a 40% off coupon for &lt;em>Lightweight Django&lt;/em>, co-written by our technical director, Mark Lavin. Also be sure to enter our raffle for an Amazon Echo.&lt;/p></description></item><item><title>Query Expressions are Amazing</title><link>https://www.caktusgroup.com/blog/2016/06/20/query-expressions-are-amazing/</link><pubDate>Mon, 20 Jun 2016 11:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/06/20/query-expressions-are-amazing/</guid><description>&lt;p>The Django 1.8 release added support for complex query expressions. The
&lt;a href="https://docs.djangoproject.com/en/1.8/ref/models/expressions/" target="_blank" rel="noopener noreferrer">documentation&lt;/a>
has some nice examples but they don't do justice to how crazy awesome
these are. In this post, we will go through some additional examples of
how to leverage these expressions.&lt;/p></description></item><item><title>The Journal of Medical Internet Research Features Epic Allies Phase 1 Study Results</title><link>https://www.caktusgroup.com/blog/2016/06/16/journal-medical-internet-research-features-epic-allies-phase-1-study-results/</link><pubDate>Thu, 16 Jun 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/06/16/journal-medical-internet-research-features-epic-allies-phase-1-study-results/</guid><description>&lt;p>&lt;em>The Journal of Medical Internet Research&lt;/em> recently published “&lt;a href="http://games.jmir.org/2016/1/e6/" target="_blank" rel="noopener noreferrer">Epic Allies: Development of a Gaming App to Improve Antiretroviral Therapy Adherence Among Young HIV-Positive Men Who Have Sex With Men&lt;/a>”. Epic Allies, initially funded by a federal Small Business Innovation Research (SBIR) grant, represents a partnership between Caktus, UNC’s Institute of Global Health and Infection Diseases, and Duke Global Health Institute.&lt;/p></description></item><item><title>PyCon 2016 Recap</title><link>https://www.caktusgroup.com/blog/2016/06/14/pycon-2016-recap/</link><pubDate>Tue, 14 Jun 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/06/14/pycon-2016-recap/</guid><description>&lt;p>PyCon, beyond being the best community event for Python developers, is also an event that we happily began thinking about eleven months ago. Almost as soon as PyCon 2015 ended, we had the good fortune of planning the look and feel of PyCon 2016 with organizer extraordinaires Ewa Jodlowska, Diana Clark, and new this year, Brandon Rhodes. Our team has loved working with the organizers on the PyCon websites for the past three years now. They’re great people who always prioritize the needs of PyCon attendees, whether that’s babysitting services or a smooth PyCon web experience.&lt;/p></description></item><item><title>My First Conference Talk: Reflecting on Support and Inclusivity at DjangoCon Europe 2016</title><link>https://www.caktusgroup.com/blog/2016/06/13/my-first-conference-talk-reflecting-support-and-inclusivity-djangocon-europe-2016/</link><pubDate>Mon, 13 Jun 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/06/13/my-first-conference-talk-reflecting-support-and-inclusivity-djangocon-europe-2016/</guid><description>&lt;p>The environment at Caktus is, above all, one of encouragement. I experienced that encouragement as an intern and continue to experience it as a full-time developer. In addition to providing workplace mentorship, Caktus encourages all of its employees to submit talks to conferences. My manager Mark Lavin and mentor Karen Tracy encouraged me to get over my concerns about being new to the field and to start submitting talks.&lt;/p></description></item><item><title>What We’re Clicking - May Link Roundup</title><link>https://www.caktusgroup.com/blog/2016/06/08/what-were-clicking-may-link-roundup/</link><pubDate>Wed, 08 Jun 2016 14:16:14 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/06/08/what-were-clicking-may-link-roundup/</guid><description>&lt;p>Below you can find this month’s roundup of articles and posts shared by Cakti that drew the most attention on Twitter. The list covers coding for matrix factorization algorithms in Python, designing apps that optimize for sequential dual screen usage, preventing technical debt, and understanding the complexities and limitations involved in building apps for low-income American families.&lt;/p></description></item><item><title>Where to Find Cakti at PyCon 2016</title><link>https://www.caktusgroup.com/blog/2016/05/26/where-find-cakti-pycon-2016/</link><pubDate>Thu, 26 May 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/05/26/where-find-cakti-pycon-2016/</guid><description>&lt;p>As Django developers, we always look forward to PyCon. This year, working with the &lt;a href="https://www.python.org/psf/" target="_blank" rel="noopener noreferrer">Python Software Foundation&lt;/a> on the &lt;a href="https://www.caktusgroup.com/blog/2015/09/23/pycon-2016-behind-design/">design for PyCon 2016’s site&lt;/a> kindled our enthusiasm early. Our team is so excited for all the fun to begin. With an array of fantastic events, speakers, and workshops, we thought we would highlight all the events we’ll be participating in. Come find us!&lt;/p></description></item><item><title>Mark Lavin to Give Keynote at Python Nordeste</title><link>https://www.caktusgroup.com/blog/2016/05/16/mark-lavin-give-keynote-python-nordeste/</link><pubDate>Mon, 16 May 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/05/16/mark-lavin-give-keynote-python-nordeste/</guid><description>&lt;p>&lt;a href="https://www.caktusgroup.com/about/mark-lavin/">Mark Lavin&lt;/a> will be giving the keynote address at &lt;a href="http://2016.pythonnordeste.org/#" target="_blank" rel="noopener noreferrer">Python Nordeste&lt;/a> this year. Python Nordeste is the largest gathering of the Northeast Python community, which takes place annually in cities of northeastern Brazil. This year’s conference will be held in Teresina, the capital of the Brazilian state of Piauí.&lt;/p></description></item><item><title>Caktus CTO Colin Copeland Invited to the White House Open Police Data Initiative</title><link>https://www.caktusgroup.com/blog/2016/05/12/Caktus-CTO-Colin-Copeland-White-House-Open-Police-Data-Initiative/</link><pubDate>Thu, 12 May 2016 18:46:57 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/05/12/Caktus-CTO-Colin-Copeland-White-House-Open-Police-Data-Initiative/</guid><description>&lt;p>We at Caktus were incredibly proud when the White House Police Data Initiative invited CTO Colin Copeland to celebrate their first year accomplishments. While at the White House, Colin also joined private breakout sessions to share ideas with law enforcement officials, city staff, and other civic technologists from across the country. Colin is the co-founder of Code for Durham and served as lead developer for &lt;a href="OpenDataPolicingNC.com">OpenDataPolicingNC.com&lt;/a>. &lt;a href="OpenDataPolicingNC.com">OpenDataPolicingNC.com&lt;/a>, a site built for the Southern Coalition for Social Justice, displays North Carolina police stop data.&lt;/p></description></item><item><title>What We’re Clicking - April Link Roundup</title><link>https://www.caktusgroup.com/blog/2016/05/05/what-were-clicking-april-link-roundup/</link><pubDate>Thu, 05 May 2016 14:04:27 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/05/05/what-were-clicking-april-link-roundup/</guid><description>&lt;p>It&amp;rsquo;s time for this month’s roundup of articles and posts shared by Cakti that drew the most attention on Twitter. The list highlights new work in civic tech and international development as well as reasons for the increasing popularity of Python and open source development.&lt;/p></description></item><item><title>Florida Open Debate Platform Receives National Attention (The Atlantic, USA Today, Engadget)</title><link>https://www.caktusgroup.com/blog/2016/05/03/florida-open-debate-platform-receives-national-attention-atlantic-usa-today-engadget/</link><pubDate>Tue, 03 May 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/05/03/florida-open-debate-platform-receives-national-attention-atlantic-usa-today-engadget/</guid><description>&lt;p>Several national publications have featured the &lt;a href="https://floridaopendebate.com/watch/" target="_blank" rel="noopener noreferrer">Florida Open Debate&lt;/a> platform, including &lt;a href="http://www.usatoday.com/story/news/politics/onpolitics/2016/04/19/florida-senate-race-crowd-sourced-debate/83208788/?utm_content=29189403&amp;amp;utm_medium=social&amp;amp;utm_source=twitter" target="_blank" rel="noopener noreferrer">&lt;em>USA Today&lt;/em>&lt;/a>, &lt;a href="http://www.engadget.com/2016/04/19/submit-your-questions-for-the-us-senates-first-open-debate/?utm_content=32878275&amp;amp;utm_medium=social&amp;amp;utm_source=twitter" target="_blank" rel="noopener noreferrer">&lt;em>Engadget&lt;/em>&lt;/a>, and &lt;a href="http://www.theatlantic.com/politics/archive/2016/04/a-debate-where-the-voters-pick-the-questions/479958/?utm_source=SFFB" target="_blank" rel="noopener noreferrer">&lt;em>The Atlantic&lt;/em>&lt;/a>. Caktus helped develop the Django-based platform on behalf of the &lt;a href="http://opendebatecoalition.com/" target="_blank" rel="noopener noreferrer">Open Debate Coalition (ODC)&lt;/a> in advance of the nation’s first-ever open Senate debate held in Florida on April 25th. The site enabled citizens to submit debate questions as well as vote on which questions mattered most to them. Moderators then used the thirty most popular questions from the site to structure the debate between Florida Senate candidates David Jolly (R) and Alan Grayson (D). According to *The Atlantic, *more than 400,000 votes were submitted by users on the site, including more than 84,000 from Florida voters.&lt;/p></description></item><item><title>ES6 For Django Lovers</title><link>https://www.caktusgroup.com/blog/2016/05/02/es6-django-lovers/</link><pubDate>Mon, 02 May 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/05/02/es6-django-lovers/</guid><description>&lt;h2 id="es6-for-django-lovers">ES6 for Django Lovers!&lt;/h2>
&lt;p>The Django community is not one to fall to bitrot. Django supports every
new release of Python at an impressive pace. Active Django websites are
commonly updated to new releases quickly and we take pride in providing
stable, predictable upgrade paths.&lt;/p></description></item><item><title>Florida Open Debate Site Powers First-Ever Crowd-Sourced Open Senate Debate</title><link>https://www.caktusgroup.com/blog/2016/04/25/florida-open-debate-site-powers-first-ever-crowd-sourced-open-senate-debate/</link><pubDate>Mon, 25 Apr 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/04/25/florida-open-debate-site-powers-first-ever-crowd-sourced-open-senate-debate/</guid><description>&lt;p>&lt;a href="https://floridaopendebate.com/" target="_blank" rel="noopener noreferrer">Florida Open Debate&lt;/a> launched ahead of the upcoming, bi-partisan debate between candidates for the Florida Senate. The site, which crowdsources debate questions from the general public, was met with &lt;a href="http://www.usatoday.com/story/news/politics/onpolitics/2016/04/19/florida-senate-race-crowd-sourced-debate/83208788/" target="_blank" rel="noopener noreferrer">national acclaim&lt;/a>. Citizens can not only submit questions, but also vote on which ones matter most. Caktus helped develop the tool on behalf of the &lt;a href="http://opendebatecoalition.com/" target="_blank" rel="noopener noreferrer">Open Debate Coalition (ODC)&lt;/a>, a non-partisan organization dedicated to supporting participatory democracy through the use of civic tech.&lt;/p></description></item><item><title>From Intern to Professional Developer: Advice on a Mid-Career Pivot</title><link>https://www.caktusgroup.com/blog/2016/04/13/intern-professional-developer-advice-mid-career-pivot/</link><pubDate>Wed, 13 Apr 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/04/13/intern-professional-developer-advice-mid-career-pivot/</guid><description>&lt;p>A few weeks ago, &lt;a href="https://www.caktusgroup.com/about/rebecca-conley/">Rebecca Conley&lt;/a> attended &lt;a href="https://2016.djangocon.eu/" target="_blank" rel="noopener noreferrer">DjangoCon Europe 2016&lt;/a> in Budapest, Hungary. The event is a five-day conference that brings together Django lovers from all over the world to learn about and share each other’s experiences with Django.&lt;/p></description></item><item><title>Adopting Scrum in a Client-services, Multi-project Organization</title><link>https://www.caktusgroup.com/blog/2016/04/11/adopting-scrum-client-services-multi-project-organization/</link><pubDate>Mon, 11 Apr 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/04/11/adopting-scrum-client-services-multi-project-organization/</guid><description>&lt;p>Caktus began the process of adopting Scrum mid-November 2015 with two days of onsite Scrum training and fully transitioned to a Scrum environment in January 2016. From our original epiphany of “Yes! We want Scrum!” to the beginning of our first sprint, it took us six weeks to design and execute a process and transition plan. This is how we did it:&lt;/p></description></item><item><title>What We're Clicking - March Link Roundup</title><link>https://www.caktusgroup.com/blog/2016/04/05/what-were-clicking-march-link-roundup/</link><pubDate>Tue, 05 Apr 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/04/05/what-were-clicking-march-link-roundup/</guid><description>&lt;p>We’re starting a new, monthly series on the Caktus blog highlighting the articles and posts shared by Cakti that drew the most attention on Twitter. These roundups will include everything from Django how-tos to explorations of the tech industry, to innovations for social good.&lt;/p></description></item><item><title>New white paper: "Shipping faster: Django team improvements"</title><link>https://www.caktusgroup.com/blog/2016/04/04/new-white-paper-shipping-faster-django-team-improvements/</link><pubDate>Mon, 04 Apr 2016 13:26:38 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/04/04/new-white-paper-shipping-faster-django-team-improvements/</guid><description>&lt;p>For the past couple months, we’ve been working on a new white paper, “&lt;a href="http://learn.caktusgroup.com/shipping-faster-django-team-improvements?utm_source=web&amp;amp;utm_medium=bloglaunch&amp;amp;utm_campaign=shippingfaster" target="_blank" rel="noopener noreferrer">Shipping Faster: Django Team Improvements&lt;/a>”. We examined our existing processes, looked at best practices, and considered what has or hasn’t worked across our dozens of simultaneous projects.&lt;/p></description></item><item><title>Lightweight Django now in Portuguese!</title><link>https://www.caktusgroup.com/blog/2016/04/02/lightweight-django-now-portuguese/</link><pubDate>Sat, 02 Apr 2016 17:18:24 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/04/02/lightweight-django-now-portuguese/</guid><description>&lt;p>We&amp;rsquo;re proud to report that &lt;em>Lightweight Django&lt;/em> (O&amp;rsquo;Reilly Media) is now available in Portuguese as &lt;em>Django Essencial&lt;/em>. The book was written by our technical director Mark Lavin and Caktus alumnus Julia Elman to great reviews. &lt;em>Django Essencial&lt;/em> comes just in time for Mark&amp;rsquo;s keynote talk during PyCon Nordeste.&lt;/p></description></item><item><title>Checking That It's All Translatable</title><link>https://www.caktusgroup.com/blog/2016/03/28/checking-its-all-translatable/</link><pubDate>Mon, 28 Mar 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/03/28/checking-its-all-translatable/</guid><description>&lt;p>When building a translated application, it's important to test that all
of the text is going to be translated, but difficult to tell until the
translation has been done. Until then, even when you switch languages
you still see English everywhere. It's not until all the text that's
been set up to be translated actually is that you can see the site in
the other language, at which point the English messages stick out like a
sore thumb. But that's usually very late in the process. How can we
catch those errors earlier?&lt;/p></description></item><item><title>Best Python Libraries</title><link>https://www.caktusgroup.com/blog/2016/03/17/best-python-libraries/</link><pubDate>Thu, 17 Mar 2016 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/03/17/best-python-libraries/</guid><description>&lt;p>Our love for Python is no secret. But with so many modules, tools, and libraries, it can be overwhelming for beginning developers to identify the most useful. Obviously, our &lt;a href="https://www.caktusgroup.com/blog/2009/01/13/why-caktus-uses-django/">favorite framework is Django&lt;/a>. But we’re setting aside our undying love for that framework for a moment to offer a list of other helpful Python libraries. From those offering standard solutions to everyday programming problems, to ones that hold a special place in the heart of the dev who created them, these are some of our developer’s favorite tools for Python development.&lt;/p></description></item><item><title>Wagtail: 2 Steps for Adding Pages Outside of the CMS</title><link>https://www.caktusgroup.com/blog/2016/02/15/wagtail-2-steps-adding-pages-outside-cms/</link><pubDate>Mon, 15 Feb 2016 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/02/15/wagtail-2-steps-adding-pages-outside-cms/</guid><description>&lt;p>My first Caktus project went live late in the summer of 2015. It's a
&lt;a href="https://community.rapidpro.io" target="_blank" rel="noopener noreferrer">community portal&lt;/a> for users of an
SMS-based product called RapidPro. The portal was built in the &lt;a href="https://wagtail.io" target="_blank" rel="noopener noreferrer">Wagtail
CMS framework&lt;/a> which has a lovely, intuitive admin
interface and &lt;a href="http://docs.wagtail.io" target="_blank" rel="noopener noreferrer">excellent documentation&lt;/a> for
developers and content editors. The code for our Wagtail-based project
is all &lt;a href="https://github.com/rapidpro/rapidpro-community-portal" target="_blank" rel="noopener noreferrer">open sourced on
GitHub&lt;/a>.&lt;/p></description></item><item><title>Writing Unit Tests for Django Migrations</title><link>https://www.caktusgroup.com/blog/2016/02/02/writing-unit-tests-django-migrations/</link><pubDate>Tue, 02 Feb 2016 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/02/02/writing-unit-tests-django-migrations/</guid><description>&lt;p>&lt;em>Editor's note: This post was originally published in February 2016 and
was updated in August 2017 to incorporate improvements suggested by our
readers. It has also been tested for compatibility as of the Django 1.11
release.&lt;/em>&lt;/p></description></item><item><title>ShipIt Day Recap: Q1 2016</title><link>https://www.caktusgroup.com/blog/2016/01/20/shipit-day-recap-q1-2016/</link><pubDate>Wed, 20 Jan 2016 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/01/20/shipit-day-recap-q1-2016/</guid><description>&lt;p>Last Friday, the Cakti set aside regular client projects for our quarterly &lt;a href="https://www.caktusgroup.com/blog/2012/10/01/planning-our-first-shipit-day-caktus/">ShipIt Day&lt;/a>, a chance for personal development and independent projects. People work individually or in groups to flex their creativity, tackle interesting problems, or expand their personal knowledge. This quarter’s ShipIt Day saw everything from cat animations to improvements on our Taylor Swift lyric generator app. Read about the various ShipIt Day projects for Q1 of 2016 below.&lt;/p></description></item><item><title>Modified Preorder Tree Traversal in Django</title><link>https://www.caktusgroup.com/blog/2016/01/04/modified-preorder-tree-traversal-django/</link><pubDate>Mon, 04 Jan 2016 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/01/04/modified-preorder-tree-traversal-django/</guid><description>&lt;p>Hierarchical data are everywhere, from product catalogs to blog post
comments. A classic example is the tree of life, where kingdoms are
subdivided into a hierarchy of phylum and class down to genus and
species. What if you wish to store this data in a database table, which
is inherently flat? Databases do not natively store hierarchies, so you
need to work around that.&lt;/p></description></item><item><title>What We Open Sourced in 2015: A New Year's Retrospective</title><link>https://www.caktusgroup.com/blog/2015/12/31/what-we-open-sourced-2015-new-years-retrospective/</link><pubDate>Thu, 31 Dec 2015 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/12/31/what-we-open-sourced-2015-new-years-retrospective/</guid><description>&lt;p>This year we had the pleasure of building a number of unique solutions for several organizations. In addition, we had the support of these clients to open source the tools we built. By open sourcing our work, we enable others to use, replicate, and even improve upon the tools we’ve created.&lt;/p></description></item><item><title>Reflecting on My Time as Caktus' Open Source Fellow</title><link>https://www.caktusgroup.com/blog/2015/12/21/reflecting-my-time-caktus-open-source-fellow/</link><pubDate>Mon, 21 Dec 2015 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/12/21/reflecting-my-time-caktus-open-source-fellow/</guid><description>&lt;p>My name is Ben Phillips and I am Caktus&amp;rsquo; Open Source Fellow. As my fellowship comes to a close, I wanted to reflect on my time at Caktus and to share my experience and some of what I&amp;rsquo;ve learned here. First, however, I should probably share how I ended up here in the first place.&lt;/p></description></item><item><title>Caktus CTO Colin Copeland Helps Launch Open Data Policing Website</title><link>https://www.caktusgroup.com/blog/2015/12/17/cto-colin-copeland-helps-launch-open-data-policing-website/</link><pubDate>Thu, 17 Dec 2015 13:50:11 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/12/17/cto-colin-copeland-helps-launch-open-data-policing-website/</guid><description>&lt;p>Today, at Caktus headquarters, CTO and co-founder of Caktus Colin Copeland will stand at a press conference along with activists, police representatives, and elected officials to announce the launch of &lt;a href="http://OpenDataPolicingNC.com" target="_blank" rel="noopener noreferrer">OpenDataPolicingNC.com&lt;/a>. The first site of its kind, OpenDataPolicingNC.com draws on public records to publish up-to-date stop, search, and use-of-force data—broken down by race and ethnicity—for every police department and officer in the state of North Carolina. The volunteer effort, led by The Southern Coalition for Social Justice (SCSJ) and technical leadership by Colin, includes approximately 20 million anonymized data points from 15 years of NC traffic stop data.&lt;/p></description></item><item><title>Cyber Monday: 50% off Django book and videos</title><link>https://www.caktusgroup.com/blog/2015/11/30/cyber-monday-50-django-book-and-videos/</link><pubDate>Mon, 30 Nov 2015 15:52:56 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/11/30/cyber-monday-50-django-book-and-videos/</guid><description>&lt;p>Are you looking for a good gift for a current or future Django developer? Check out Caktus technical director Mark Lavin&amp;rsquo;s work for O&amp;rsquo;Reilly:&lt;/p></description></item><item><title>Initial Data in Django</title><link>https://www.caktusgroup.com/blog/2015/11/10/initial-data-django/</link><pubDate>Tue, 10 Nov 2015 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/11/10/initial-data-django/</guid><description>&lt;p>I&amp;rsquo;ve struggled to find an ideal way to load initial data for Django projects. By “initial data,” I&amp;rsquo;m referring to the kind of data that you need on a new system for it to be functional, but could change later. These are largely lists of possible choices, such as time zones, countries, or crayon colors.&lt;/p></description></item><item><title>Open Sourcing SmartElect: Libya's SMS Voter Registration System</title><link>https://www.caktusgroup.com/blog/2015/10/28/open-sourcing-smartelect-libyas-sms-voter-registration-system/</link><pubDate>Wed, 28 Oct 2015 17:01:54 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/10/28/open-sourcing-smartelect-libyas-sms-voter-registration-system/</guid><description>&lt;p>We are proud to say that, with the Libyan High National Elections Commission (HNEC) and consultative support from the United Nations Support Mission to Libya, we have open sourced their elections management platform today under a permissive Apache 2.0 license. Open sourcing means other governments and organizations can freely adopt and adapt the elections tools which cover nine functional areas. The tools range from SMS voter registration, the first of its kind, to bulk alerts to voters and call center support software. You can learn more at our brand new &lt;a href="http://www.smartelect.com" target="_blank" rel="noopener noreferrer">SmartElect homepage&lt;/a>. This is the cumulation of two years of work, so we’re incredibly excited to share SmartElect with the rest of the world.&lt;/p></description></item><item><title>Identifying Racial Bias in Policing with a Data-driven App</title><link>https://www.caktusgroup.com/blog/2015/10/16/identifying-racial-bias-policing-tech/</link><pubDate>Fri, 16 Oct 2015 21:16:16 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/10/16/identifying-racial-bias-policing-tech/</guid><description>&lt;p>Recently, Caktus co-founder Colin Copeland spoke about the creation of a web app that analyzes North Carolina traffic stop data to identify racial bias during the Code for America 2015 Summit. The website allows both police departments and community members to visualize a dataset of more than 18 million stops statewide. Colin spoke with Ian Mance, the originator of the app idea and staff attorney with the Southern Coalition for Social Justice. Together with fellow community members, Andy Shapiro and Dylan Young, they used Django, an open source web framework, to make policing data more accessible.&lt;/p></description></item><item><title>ShipIt Day ReCap: Q4 2015</title><link>https://www.caktusgroup.com/blog/2015/10/14/shipit-day-recap-q4-2015/</link><pubDate>Wed, 14 Oct 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/10/14/shipit-day-recap-q4-2015/</guid><description>&lt;p>Members of one team joined forces with local meetup &lt;a href="http://codefordurham.com/" target="_blank" rel="noopener noreferrer">Code for Durham&lt;/a> to help with the alpha launch of the &lt;a href="http://codefordurham.com/blog/alpha_launch--school_navigator" target="_blank" rel="noopener noreferrer">School Navigator App&lt;/a>. Using publicly available data, the &lt;a href="https://schools.codefordurham.com/#/" target="_blank" rel="noopener noreferrer">School Navigator&lt;/a>, allows users to geolocate nearby Durham schools and view information like performance ratings. The team included Code for Durham co-founder &lt;a href="https://www.caktusgroup.com/about/colin-copeland/">Colin Copeland&lt;/a> who upgraded the Django template for the latest version of SALT. &lt;a href="https://www.caktusgroup.com/about/erin-mullaney/">Erin Mullaney&lt;/a> helped expand a feature denoting different school zones on the map, using Angular for the first time to do so. She also worked on a query change to more closely match the rules of districting on the map’s display. [Victor Rocha] developed various bug fixes, and merged pull requests. In the meantime, &lt;a href="https://www.caktusgroup.com/about/david-ray/">David Ray&lt;/a> put his new Ionic skills to the test by building a &lt;a href="https://play.google.com/store/apps/details?id=com.ionicframework.schoolnavigatormobile195852" target="_blank" rel="noopener noreferrer">mobile app version of the School Navigator&lt;/a>, now available from the Google App store. (David’s starting Ship It Day project was working through an Ionic tutorial to create a Reddit viewing app with pull refresh and infinite scrolling.)&lt;/p></description></item><item><title>Django Girls Workshop Recap</title><link>https://www.caktusgroup.com/blog/2015/10/08/django-girls-workshop-recap/</link><pubDate>Thu, 08 Oct 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/10/08/django-girls-workshop-recap/</guid><description>&lt;p>This past Saturday we had the pleasure of holding a &lt;a href="https://djangogirls.org/RDU" target="_blank" rel="noopener noreferrer">Django Girls RDU&lt;/a> workshop at Caktus in downtown Durham, NC. We hosted 22 students and 10 coaches for a free, all-day coding workshop. Aimed at increasing diversity in tech and encouraging women to gain the skills they need to fall in love with coding, Django Girls is a global nonprofit that provides the framework for these workshops. In regular Django Girls style, the day was part party, part coding marathon and every student left having deployed their very own website!&lt;/p></description></item><item><title>Colin Copeland to Speak on Police Data and Racial Bias at Code for America Summit</title><link>https://www.caktusgroup.com/blog/2015/09/29/caktus-group-co-founder-colin-copeland-speak-police-data-and-racial-bias-code-america-summit/</link><pubDate>Tue, 29 Sep 2015 17:33:09 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/09/29/caktus-group-co-founder-colin-copeland-speak-police-data-and-racial-bias-code-america-summit/</guid><description>&lt;p>This Thursday, Colin Copeland, CTO and Caktus Group Co-founder, will be co-presenting “Case Study from North Carolina: Identifying Racial Bias in Policing Practices” during the prestigious 2015 &lt;a href="http://www.codeforamerica.org/summit/" target="_blank" rel="noopener noreferrer">Code for America Summit&lt;/a> in Oakland, CA. This invite-only event joins technologists, activists, and officials ranging from mayors to White House officials to discuss technology’s role in civic participation.&lt;/p></description></item><item><title>Introduction to Monte Carlo Tree Search</title><link>https://www.caktusgroup.com/blog/2015/09/24/introduction-monte-carlo-tree-search-1/</link><pubDate>Thu, 24 Sep 2015 13:47:08 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/09/24/introduction-monte-carlo-tree-search-1/</guid><description>&lt;script type="text/javascript"
 src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
&lt;/script>
&lt;script type="text/x-mathjax-config">
 MathJax.Hub.Config({ TeX: { extensions: ["color.js"] }});
&lt;/script>
&lt;p>&lt;em>For DjangoCon 2015, Jeff Bradberry created an A.I. for our booth game,
Ultimate Tic Tac Toe. Reprinted here from jeffbradberry.com is his
explanation of the Monte Carlo Tree Search used to build the A.I.&lt;/em>&lt;/p></description></item><item><title>PyCon 2016: Behind the Design</title><link>https://www.caktusgroup.com/blog/2015/09/23/pycon-2016-behind-design/</link><pubDate>Wed, 23 Sep 2015 18:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/09/23/pycon-2016-behind-design/</guid><description>&lt;p>Having helped to design an &lt;a href="https://www.caktusgroup.com/blog/2015/04/29/caktus-wins-two-communicator-awards-pycon-2015/">award-winning event site&lt;/a> for last year’s PyCon in Montreal, we are thrilled to collaborate again with the Python Software Foundation (PSF) on this year’s site for &lt;a href="https://us.pycon.org" target="_blank" rel="noopener noreferrer">PyCon 2016&lt;/a>.&lt;/p></description></item><item><title>Caktus at DjangoCon 2015</title><link>https://www.caktusgroup.com/blog/2015/09/04/caktus-djangocon-2015/</link><pubDate>Fri, 04 Sep 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/09/04/caktus-djangocon-2015/</guid><description>&lt;p>Django is kind of our thing, so we’ve been looking forward to &lt;a href="https://2015.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon 2015&lt;/a> for months! Now that it is finally here, we thought we would give a little preview of what Cakti will be up to at this year’s conference.&lt;/p></description></item><item><title>Making Clean Code a Part of Your Build Process (And More!)</title><link>https://www.caktusgroup.com/blog/2015/08/15/making-clean-code-part-your-build-process/</link><pubDate>Sat, 15 Aug 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/08/15/making-clean-code-part-your-build-process/</guid><description>&lt;p>At Caktus, &amp;ldquo;clean&amp;rdquo; (in addition to &amp;ldquo;working&amp;rdquo;!) code is an important part of our delivery. For all new projects, we achieve that by using &lt;a href="https://flake8.readthedocs.org/en/latest/" target="_blank" rel="noopener noreferrer">flake8&lt;/a>. &lt;strong>flake8&lt;/strong> is a wrapper around several tools: &lt;a href="http://pep8.readthedocs.org/en/latest/" target="_blank" rel="noopener noreferrer">pep8&lt;/a>, &lt;a href="https://pypi.python.org/pypi/pyflakes" target="_blank" rel="noopener noreferrer">pyflakes&lt;/a>, and &lt;a href="https://pypi.python.org/pypi/mccabe" target="_blank" rel="noopener noreferrer">McCabe&lt;/a>. &lt;strong>pep8&lt;/strong> checks to make sure your code matches the &lt;a href="https://www.python.org/dev/peps/pep-0008/" target="_blank" rel="noopener noreferrer">PEP 0008&lt;/a> style guidelines, &lt;strong>pyflakes&lt;/strong> looks for a few additional things like unused imports or variables, and &lt;strong>McCabe&lt;/strong> raises warnings about overly complex sections of code.&lt;/p></description></item><item><title>AWS load balancers with Django</title><link>https://www.caktusgroup.com/blog/2015/08/10/aws-load-balancers-django/</link><pubDate>Mon, 10 Aug 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/08/10/aws-load-balancers-django/</guid><description>&lt;p>We recently had occasion to reconfigure some of our existing servers to use Amazon Web Services Elastic Load Balancers in front of them. Setting this up isn&amp;rsquo;t hard, exactly, but there are a lot of moving parts that have to mesh correctly before things start to work, so I thought I&amp;rsquo;d write down what we did.&lt;/p></description></item><item><title>Announcing the Caktus Open Source Fellowship</title><link>https://www.caktusgroup.com/blog/2015/08/06/announcing-caktus-open-source-fellowship/</link><pubDate>Thu, 06 Aug 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/08/06/announcing-caktus-open-source-fellowship/</guid><description>&lt;p>We are excited to announce the creation and funding of a pilot program for open source contributions here at Caktus Group. This program is inspired by the Django Software Foundation’s &lt;a href="https://www.djangoproject.com/weblog/2015/mar/06/welcome-our-full-time-django-fellow/" target="_blank" rel="noopener noreferrer">fellowship&lt;/a> as well as the &lt;a href="http://twodaymanifesto.com/" target="_blank" rel="noopener noreferrer">Two Day Manifesto&lt;/a>. For this program, Caktus seeks to hire a part-time developer for twelve weeks this fall for the sole purpose of contributing back to open source projects. Caktus builds web applications based on open source tools and the continued growth of these projects is important to us. Open source projects such as Python and Django have given so much to this company and this is one of many ways we are trying to give back.&lt;/p></description></item><item><title>Announcing Django Girls RDU: Free Coding Workshop for Women</title><link>https://www.caktusgroup.com/blog/2015/08/05/announcing-django-girls-rdu-free-coding-workshop-women/</link><pubDate>Wed, 05 Aug 2015 18:02:23 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/08/05/announcing-django-girls-rdu-free-coding-workshop-women/</guid><description>&lt;p>We’re incredibly excited to announce the launch of &lt;a href="https://djangogirls.org/RDU/" target="_blank" rel="noopener noreferrer">Django Girls RDU&lt;/a>, a group in NC’s Triangle region that hosts free one-day Django coding workshops for women. Django Girls is part of an international movement that’s helped 1,600 (and counting!) women learn how to code.&lt;/p></description></item><item><title>Using Unsaved Related Models for Sample Data in Django 1.8</title><link>https://www.caktusgroup.com/blog/2015/07/28/using-unsaved-related-models-sample-data-django-18/</link><pubDate>Tue, 28 Jul 2015 15:54:33 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/07/28/using-unsaved-related-models-sample-data-django-18/</guid><description>&lt;p>&lt;strong>Note:&lt;/strong> In between the time I originally wrote this post and it
getting published, a
&lt;a href="https://code.djangoproject.com/ticket/25160" target="_blank" rel="noopener noreferrer">ticket&lt;/a> and &lt;a href="https://github.com/django/django/pull/5060" target="_blank" rel="noopener noreferrer">pull
request&lt;/a> were opened in
Django to remove &lt;code>allow_unsaved_instance_assignment&lt;/code> and move validation
to the model &lt;code>save()&lt;/code> method, which makes much more sense anyways. It's
likely this will even be backported to Django 1.8.4. So, if you're
using a version of Django that doesn't require this, hopefully you'll
never stumble across this post in the first place! If this is still an
issue for you, here's the original post:&lt;/p></description></item><item><title>PyCon 2015 Workshop Video: Building SMS Applications with Django</title><link>https://www.caktusgroup.com/blog/2015/07/24/pycon-2015-workshop-video-building-sms-applications-django/</link><pubDate>Fri, 24 Jul 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/07/24/pycon-2015-workshop-video-building-sms-applications-django/</guid><description>&lt;iframe src='https://www.youtube.com/embed/HBVgcVlow4w' frameborder='0' allowfullscreen>&lt;/iframe>
&lt;p>As proud sponsors of PyCon, we hosted a one and a half hour free workshop. We see the workshops as a wonderful opportunity to share some practical, hands-on experience in our area of expertise: building applications in Django. In addition, it’s a way to give back to the open source community.&lt;/p></description></item><item><title>Reviews of two recent Django Books</title><link>https://www.caktusgroup.com/blog/2015/07/23/reviews-two-recent-django-books/</link><pubDate>Thu, 23 Jul 2015 19:21:26 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/07/23/reviews-two-recent-django-books/</guid><description>&lt;h4 id="introduction">Introduction&lt;/h4>
&lt;p>When I started building sites in Django, I learned the basics from the excellent Django tutorial. But I had to learn by trial and error which approaches to using Django&amp;rsquo;s building blocks worked well and which approaches tended to cause problems later on. I looked for more intermediate-level documentation, but beyond James Bennett&amp;rsquo;s &lt;a href="http://amazon.com/Practical-Django-Projects-Experts-Development-ebook/dp/B002ECESU0/" target="_blank" rel="noopener noreferrer">Practical Django Projects&lt;/a> and our &lt;a href="https://www.caktusgroup.com/about/karen-tracey/">Karen Tracey&lt;/a>&amp;rsquo;s &lt;a href="http://amazon.com/Django-Testing-Debugging-Tracey-Karen/dp/1847197566/" target="_blank" rel="noopener noreferrer">Django 1.1 Testing and Debugging&lt;/a>, there wasn&amp;rsquo;t much to be found.&lt;/p></description></item><item><title>Q3 2015 ShipIt Day ReCap</title><link>https://www.caktusgroup.com/blog/2015/07/14/q3-2015-shipit-day-recap/</link><pubDate>Tue, 14 Jul 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/07/14/q3-2015-shipit-day-recap/</guid><description>&lt;p>Last Friday marked another ShipIt Day at Caktus, a chance for our employees to set aside client work for experimentation and personal development. It’s always a wonderful chance for our developers to test new boundaries, learn new skills and sometimes even build something entirely new in a single day.&lt;/p></description></item><item><title>Stanford Social Innovation Review Highlights Caktus' Work in Libya</title><link>https://www.caktusgroup.com/blog/2015/06/12/stanford-social-innovation-review-highlights-caktus-work-libya/</link><pubDate>Fri, 12 Jun 2015 18:43:50 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/06/12/stanford-social-innovation-review-highlights-caktus-work-libya/</guid><description>&lt;p>The Stanford Social Innovation Review recently featured Caktus in “Text the Vote” in Suzie Boss’ “What’s Next: New Approaches to Social Change” column. It describes how our team of developers built the world’s first SMS voter registration system in Libya using RapidSMS.&lt;/p></description></item><item><title>Robots Robots Ra Ra Ra!!! (PyCon 2015 Must-See Talk: 6/6)</title><link>https://www.caktusgroup.com/blog/2015/06/10/robots-robots-ra-ra-ra/</link><pubDate>Wed, 10 Jun 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/06/10/robots-robots-ra-ra-ra/</guid><description>&lt;p>&lt;em>Part six of six in our &lt;a href="https://www.caktusgroup.com/blog/2015/04/28/pycon-2015-must-see-talk-favorites/">PyCon 2015 Must-See Series&lt;/a>, a weekly highlight of talks our staff enjoyed at PyCon.&lt;/em>&lt;/p>
&lt;p>I&amp;rsquo;ve had an interest in robotics since high school, but always thought it would be expensive and time consuming to actually do. Over the past few years, though, I&amp;rsquo;ve observed the rise of open hardware such as the Arduino and the Raspberry Pi, and modules and kits built on top of them, that make this type of project more affordable and accessible to the casual hobbyist. I was excited by Katherine&amp;rsquo;s talk because Robot Operating System (ROS) seems to do for the software side what Arduino and such do for the hardware side.&lt;/p></description></item><item><title>Testing Client-Side Applications with Django Post Mortem</title><link>https://www.caktusgroup.com/blog/2015/06/08/testing-client-side-applications-django-post-mortem/</link><pubDate>Mon, 08 Jun 2015 12:22:35 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/06/08/testing-client-side-applications-django-post-mortem/</guid><description>&lt;p>I had the opportunity to give a &lt;a href="http://www.oreilly.com/pub/e/3302" target="_blank" rel="noopener noreferrer">webcast for O’Reilly Media&lt;/a> during which I encountered a presenter’s nightmare: a broken demo. Worse than that it was a test failure in a presentation about testing. Is there any way to salvage such an epic failure?&lt;/p></description></item><item><title>PyLadies RDU and Astro Code School Team Up for an Intro to Django Workshop</title><link>https://www.caktusgroup.com/blog/2015/06/05/pyladies-rdu-and-astro-code-school-team-intro-django-workshop/</link><pubDate>Fri, 05 Jun 2015 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/06/05/pyladies-rdu-and-astro-code-school-team-intro-django-workshop/</guid><description>&lt;p>This past Saturday, Caktus developer &lt;a href="https://www.caktusgroup.com/about/rebecca-conley/">Rebecca Conley&lt;/a> taught a 4-hour introductory level workshop in Django hosted by &lt;a href="http://www.meetup.com/pyladies-rdu/" target="_blank" rel="noopener noreferrer">PyLadies RDU&lt;/a>. PyLadies RDU is the local chapter of an international mentorship group for women who love coding in Python. Their main focus is to empower women to become more active participants and leaders in the Python open-source community.&lt;/p></description></item><item><title>Cakti at CRS ICT4D 2015</title><link>https://www.caktusgroup.com/blog/2015/05/27/cakti-crs-ict4d-2015/</link><pubDate>Wed, 27 May 2015 12:39:51 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/05/27/cakti-crs-ict4d-2015/</guid><description>&lt;p>This is Caktus’ first year taking part in the Catholic Relief Service’s (CRS) Information and Communication Technologies for Development (ICT4D) conference. The theme of this year’s conference is increasing the impact of aid and development tools through innovation. We’re especially looking forward to all of the speakers from organizations like the International Rescue Committee, USAID, World Vision, and the American Red Cross. In fact, the offerings are so vast, we thought we would provide a little cheat sheet to help you find Cakti throughout this year’s conference.&lt;/p></description></item><item><title>PyPy.js: What? How? Why? by Ryan Kelly (PyCon 2015 Must-See Talk: 5/6)</title><link>https://www.caktusgroup.com/blog/2015/05/26/pypyjs-what-how-why-ryan-kelly/</link><pubDate>Tue, 26 May 2015 17:21:14 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/05/26/pypyjs-what-how-why-ryan-kelly/</guid><description>&lt;p>&lt;em>Part five of six in our &lt;a href="https://www.caktusgroup.com/blog/2015/04/28/pycon-2015-must-see-talk-favorites/">PyCon 2015 Must-See Series&lt;/a>, a weekly highlight of talks our staff enjoyed at PyCon.&lt;/em>&lt;/p>
&lt;p>From Ryan Kelly&amp;rsquo;s talk I learned that it is actually possible, today, to run Python in a web browser (not something that interprets Python-like syntax and translates it into JavaScript, but an actual Python interpreter!). PyPy.js combines two technologies, &lt;a href="http://pypy.org/" target="_blank" rel="noopener noreferrer">PyPy&lt;/a> (the Python interpreter written in Python) and &lt;a href="http://kripken.github.io/emscripten-site/" target="_blank" rel="noopener noreferrer">Emscripten&lt;/a> (an LLVM-to-JavaScript converter, typically used for getting games running in the browser), to run PyPy in the browser. This talk is a must-see for anyone who&amp;rsquo;s longed before to write client-side Python instead of JavaScript for a web app. While realistically being able to do this in production may still be a ways off, at least in part due to the multiple megabytes of JavaScript one needs to download to get it working, I enjoyed the view Ryan&amp;rsquo;s talk provided into the internals of this project. PyPy itself is always fascinating, and this talk made it even more so.&lt;/p></description></item><item><title>Keynote by Catherine Bracy (PyCon 2015 Must-See Talk: 4/6)</title><link>https://www.caktusgroup.com/blog/2015/05/19/keynote-catherine-bracy-pycon-2015-must-see-talk-46/</link><pubDate>Tue, 19 May 2015 14:12:27 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/05/19/keynote-catherine-bracy-pycon-2015-must-see-talk-46/</guid><description>&lt;p>&lt;em>Part four of six in our &lt;a href="https://www.caktusgroup.com/blog/2015/04/28/pycon-2015-must-see-talk-favorites/">PyCon 2015 Must-See Series&lt;/a>, a weekly highlight of talks our staff enjoyed at PyCon.&lt;/em>&lt;/p>
&lt;p>My recommendation would be Catherine Bracy&amp;rsquo;s Keynote about Code for America. Cakti should be familiar with Code for America. Colin Copeland, Caktus CTO, is the founder of &lt;a href="http://codefordurham.com/" target="_blank" rel="noopener noreferrer">Code for Durham&lt;/a> and many of us are members. Her talk made it clear how important this work is. She was funny, straight-talking, and inspirational. For a long time before I joined Caktus, I was a &amp;ldquo;hobbyist&amp;rdquo; programmer. I often had time to program, but wasn&amp;rsquo;t sure what to build or make. Code for America is a great opportunity for people to contribute to something that will benefit all of us. I have joined Code for America and hope to contribute locally soon through Code for Durham.&lt;/p></description></item><item><title>Q2 2015 ShipIt Day ReCap</title><link>https://www.caktusgroup.com/blog/2015/05/14/q2-2015-shipit-day-recap/</link><pubDate>Thu, 14 May 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/05/14/q2-2015-shipit-day-recap/</guid><description>&lt;p>Last Friday everyone at Caktus set aside their regular client projects for our quarterly ShipIt Day, a chance for Caktus employees to take some time for personal development and independent projects. People work individually or in groups to flex their creativity, tackle interesting problems, or expand their personal knowledge. This quarter’s ShipIt Day saw everything from game development to Bokeh data visualization, Lego robots to superhero animation. Read more about the various projects from our Q2 2015 ShipIt Day.&lt;/p></description></item><item><title>Interactive Data for the Web by Sarah Bird (PyCon 2015 Must-See Talk: 3/6)</title><link>https://www.caktusgroup.com/blog/2015/05/12/interactive-data-web-sarah-bird-pycon-2015-must-see-talk-36/</link><pubDate>Tue, 12 May 2015 17:07:28 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/05/12/interactive-data-web-sarah-bird-pycon-2015-must-see-talk-36/</guid><description>&lt;p>&lt;em>Part three of six in our &lt;a href="https://www.caktusgroup.com/blog/2015/04/28/pycon-2015-must-see-talk-favorites/">PyCon 2015 Must-See Series&lt;/a>, a weekly highlight of talks our staff enjoyed at PyCon.&lt;/em>&lt;/p>
&lt;p>Sarah Bird&amp;rsquo;s talk made me excited to try the Bokeh tutorials. The Bokeh library has very approachable methods for creating data visualizations inside of &lt;a href="http://www.w3schools.com/html/html5_canvas.asp" target="_blank" rel="noopener noreferrer">Canvas&lt;/a> elements all via Python. No javascript necessary.
Who should see this talk? Python developers who want to add a beautiful data visualization to their websites without writing any javascript. Also, Django developers who would like to use QuerySets to create data visualizations should watch the entire video, and then rewind to minute 8:50 for instructions on how to use Django QuerySets with a couple of lines of code.&lt;/p></description></item><item><title>Cakti Comment on Django's Class-based Views</title><link>https://www.caktusgroup.com/blog/2015/05/11/cakti-comment-djangos-class-based-views/</link><pubDate>Mon, 11 May 2015 12:47:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/05/11/cakti-comment-djangos-class-based-views/</guid><description>&lt;p>After &lt;a href="https://us.pycon.org" target="_blank" rel="noopener noreferrer">PyCon 2015&lt;/a>, we were surprised when we realized how many Cakti who attended had all been asked about Django&amp;rsquo;s &lt;a href="https://docs.djangoproject.com/en/dev/topics/class-based-views/" target="_blank" rel="noopener noreferrer">class-based views&lt;/a> (CBVs). We talked about why this might be, and this is a summary of what we came up with.&lt;/p></description></item><item><title>PyCon 2015 Talks: Our Must See Picks (1/6)</title><link>https://www.caktusgroup.com/blog/2015/04/28/pycon-2015-must-see-talk-favorites/</link><pubDate>Tue, 28 Apr 2015 14:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/04/28/pycon-2015-must-see-talk-favorites/</guid><description>&lt;p>Whether you couldn’t make it to PyCon this year, were busy attending one of the other amazing talks, or were simply too enthralled by the always popular “hallway track”, there are bound to be talks you missed out on. Thankfully, the PyCon staff does an amazing job not only organizing the conference for the attendees and the days of the conference, but also by producing recordings of all the talks for anyone who couldn’t attend. Even if you attended, you couldn’t have seen every talk, so these recordings are a great safety net.&lt;/p></description></item><item><title>Why did Caktus Group start Astro Code School?</title><link>https://www.caktusgroup.com/blog/2015/04/27/why-did-caktus-group-start-astro-code-school/</link><pubDate>Mon, 27 Apr 2015 19:55:38 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/04/27/why-did-caktus-group-start-astro-code-school/</guid><description>&lt;p>Our Astro Code School is now officially &lt;a href="http://astrocodeschool.com/apply/" target="_blank" rel="noopener noreferrer">accepting applications&lt;/a> to its twelve-week &lt;a href="http://astrocodeschool.com/classes/be102/" target="_blank" rel="noopener noreferrer">Python &amp;amp; Django Web Development&lt;/a> class for intermediate programmers! To kick off Astro’s opening, we asked Caktus’ CTO and co-founder Colin Copeland, who recently won a &lt;a href="https://www.caktusgroup.com/blog/2015/04/22/caktus-groups-colin-copeland-recognized-among-tbjs-40-under-40/">2015 Triangle Business Journal 40 Under 40 Leadership Award&lt;/a>, and Astro’s Director Brian Russell to reflect on the development of Astro as well as the role they see the school playing in the Django community.&lt;/p></description></item><item><title>Caktus Group's Colin Copeland Recognized Among TBJ’s 40 Under 40</title><link>https://www.caktusgroup.com/blog/2015/04/22/caktus-groups-colin-copeland-recognized-among-tbjs-40-under-40/</link><pubDate>Wed, 22 Apr 2015 14:56:43 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/04/22/caktus-groups-colin-copeland-recognized-among-tbjs-40-under-40/</guid><description>&lt;p>Caktus co-founder and Chief Technology Officer, Colin Copeland, is among an outstanding group of top business leaders to receive the Triangle Business Journal’s 2015 40 Under 40 Leadership Award. The award recognizes individuals for their remarkable contributions to their organizations and to the community.&lt;/p></description></item><item><title>Now Launching: Astro Code School for Django and Python Education</title><link>https://www.caktusgroup.com/blog/2015/04/20/now-launching-astro-code-school-django-and-python-education/</link><pubDate>Mon, 20 Apr 2015 16:23:28 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/04/20/now-launching-astro-code-school-django-and-python-education/</guid><description>&lt;p>Since moving to Durham in Fall 2014, we&amp;rsquo;ve been busy here at Caktus. We just finished renovating the first floor of our headquarters to bring the Triangle&amp;rsquo;s (and East Coast&amp;rsquo;s!) first Django and Python code school, &lt;a href="http://astrocodeschool.com/" target="_blank" rel="noopener noreferrer">Astro Code School&lt;/a>. We&amp;rsquo;re proud to say that the school is now officially open and we&amp;rsquo;ll be celebrating with a public launch party on May 1st.&lt;/p></description></item><item><title>DiamondHacks 2015 Recap</title><link>https://www.caktusgroup.com/blog/2015/04/02/diamondhacks-2015/</link><pubDate>Thu, 02 Apr 2015 13:50:21 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/04/02/diamondhacks-2015/</guid><description>&lt;p>&lt;sub>&lt;em>Image via &lt;a href="https://www.facebook.com/ncsudiamondhacks/photos/pb.584970504980863.-2207520000.1427984192./618909331586980/?type=3&amp;amp;theater" target="_blank" rel="noopener noreferrer">Diamond Hacks Facebook Page&lt;/a>&lt;/em>&lt;sub>&lt;/p>
&lt;p>This past weekend, Technical Director Mark Lavin came out to support &lt;a href="http://www.ncsudiamondhacks.com/" target="_blank" rel="noopener noreferrer">DiamondHacks&lt;/a>, NCSU’s first ever hackathon and conference event for women interested in computer science. Not only is NCSU Mark’s alma mater, but he’s also a strong supporter of co-organizer &lt;a href="http://www.caktusgroup.com/blog/2014/12/03/caktus-hosts-lightweight-django-book-launch-girl-develop-it/" target="_blank" rel="noopener noreferrer">Girl Develop It RDU (GDI)&lt;/a>, of which Caktus is an official sponsor.&lt;/p></description></item><item><title>Welcome to Our New Staff Members</title><link>https://www.caktusgroup.com/blog/2015/03/27/welcome-our-new-staff-members/</link><pubDate>Fri, 27 Mar 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/03/27/welcome-our-new-staff-members/</guid><description>&lt;p>We’ve hit one of our greatest growth points yet in 2015, adding nine new team members since January to handle our increasing project load. There are many exciting things on the horizon for Caktus and &lt;a href="http://www.caktusgroup.com/casestudies/" target="_blank" rel="noopener noreferrer">our clients&lt;/a>, so it’s wonderful to have a few more hands on deck.&lt;/p></description></item><item><title>Astro Code School Now Accepting Applications - Intermediate Django + Python</title><link>https://www.caktusgroup.com/blog/2015/03/20/astro-code-school-now-accepting-applications-intermediate-django-python/</link><pubDate>Fri, 20 Mar 2015 15:49:52 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/03/20/astro-code-school-now-accepting-applications-intermediate-django-python/</guid><description>&lt;p>I&amp;rsquo;m really happy to officially announce the first &lt;strong>Python and Django Web Engineering&lt;/strong> class at &lt;a href="http://astrocodeschool.com" target="_blank" rel="noopener noreferrer">Astro Code School&lt;/a>. I&amp;rsquo;ll outline some details here and you can also find them on our &lt;a href="http://astrocodeschool.com/classes/" target="_blank" rel="noopener noreferrer">classes page&lt;/a>.&lt;/p></description></item><item><title>Why RapidSMS for SMS Application Development</title><link>https://www.caktusgroup.com/blog/2015/03/16/why-rapidsms-SMS-applications/</link><pubDate>Mon, 16 Mar 2015 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/03/16/why-rapidsms-SMS-applications/</guid><description>&lt;p>Caktus has been involved in quite a few projects (&lt;a href="http://www.caktusgroup.com/case-study/libya-SMS-text-message-voter-registration/" target="_blank" rel="noopener noreferrer">Libyan voter registration&lt;/a>, &lt;a href="http://www.caktusgroup.com/case-study/Project-Mwana/" target="_blank" rel="noopener noreferrer">UNICEF Project Mwana&lt;/a>, and several others) that include text messaging (a.k.a. Short Message Service, or SMS), and we always use RapidSMS as one of our tools. We&amp;rsquo;ve also invested our own resources in &lt;a href="http://www.caktusgroup.com/blog/2014/02/05/caktus-completes-rapidsms-community-coordinator-development-unicef/" target="_blank" rel="noopener noreferrer">supporting and extending RapidSMS&lt;/a>.&lt;/p></description></item><item><title>Django Logging Configuration: How the Default Settings Interfere with Yours</title><link>https://www.caktusgroup.com/blog/2015/01/27/Django-Logging-Configuration-logging_config-default-settings-logger/</link><pubDate>Tue, 27 Jan 2015 16:04:04 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/01/27/Django-Logging-Configuration-logging_config-default-settings-logger/</guid><description>&lt;p>My colleague &lt;a href="http://www.caktusgroup.com/about/vinod-kurup/" target="_blank" rel="noopener noreferrer">Vinod&lt;/a> recently found the answer on Stack Overflow to something that&amp;rsquo;s been bugging me for a long time - why do my Django logging configurations so often not do what I think they should?&lt;/p></description></item><item><title>We’re Launching a Django code school: Astro Code School</title><link>https://www.caktusgroup.com/blog/2015/01/26/were-launching-django-code-school-astro-code-school/</link><pubDate>Mon, 26 Jan 2015 13:15:28 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/01/26/were-launching-django-code-school-astro-code-school/</guid><description>&lt;p>One of the best ways to grow the Django community is to have more high-quality Django developers. The good news is that we’ve seen sharply increasing demand for Django web applications. The challenge that we and many other firms face is that there’s much higher demand than there is supply: there aren’t enough high-quality Django developers. We’ve talked about this issue intensely internally and with our friends while at DjangoCon and PyCon. We decided that we can offer at least one solution: a new Django-focused code school.&lt;/p></description></item><item><title>Why I Love Technical Blogging</title><link>https://www.caktusgroup.com/blog/2015/01/23/why-i-love-technical-blogging/</link><pubDate>Fri, 23 Jan 2015 16:06:51 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/01/23/why-i-love-technical-blogging/</guid><description>&lt;p>I love writing blog posts, and today I’m setting out to do something I’ve never tried before: write a blog post about writing blog posts. A big part of our mission at Caktus is to foster and help grow the Python and Django development communities, both locally and nationally. Part of how we’ve tried to accomplish this in the past is through hosting development sprints, sponsoring and attending conferences such as PyCon and DjangoCon, and building a knowledge base of common problems in Python and Django development in our blog. Many in the Django community first get to know Caktus through our blog, and it’s both gratifying and humbling when I meet someone at a conference and the person thanks me for a post Caktus wrote that helped him or her solve a technical problem at some point in the past.&lt;/p></description></item><item><title>Caktus is looking for a Web Design Director</title><link>https://www.caktusgroup.com/blog/2015/01/22/caktus-looking-web-design-director/</link><pubDate>Thu, 22 Jan 2015 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/01/22/caktus-looking-web-design-director/</guid><description>&lt;p>Over the last two years Caktus’ &lt;a href="https://dribbble.com/caktusgroup" target="_blank" rel="noopener noreferrer">design portfolio&lt;/a> has rapidly been growing. We’ve taken on new &lt;a href="https://us.pycon.org/2015/" target="_blank" rel="noopener noreferrer">projects&lt;/a> &lt;a href="http://www.ncgetcovered.org/" target="_blank" rel="noopener noreferrer">primarily&lt;/a> focused on design and have &lt;a href="http://www.caktusgroup.com/blog/2014/11/12/weve-won-two-w3-awards-creative-excellence-1/" target="_blank" rel="noopener noreferrer">received community recognition&lt;/a> for those efforts. We are happy to have grown our design capabilities to match the level of quality we demand from our Django developers. We have found it’s important to have strength on both sides of the table as each side challenges the other and forces the final product of our process to be as high quality as possible.&lt;/p></description></item><item><title>Webinar: Testing Client-Side Applications with Django</title><link>https://www.caktusgroup.com/blog/2015/01/20/webinar-testing-client-side-applications-django/</link><pubDate>Tue, 20 Jan 2015 16:40:09 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/01/20/webinar-testing-client-side-applications-django/</guid><description>&lt;p>Technical Director &lt;a href="http://www.caktusgroup.com/about/mark-lavin/" target="_blank" rel="noopener noreferrer">Mark Lavin&lt;/a> will be hosting a free &lt;a href="http://www.oreilly.com/pub/e/3302" target="_blank" rel="noopener noreferrer">O’Reilly webinar&lt;/a> today at 4PM EST or 1PM PT on Testing Client-Side Applications with Django. Mark says testing is one of the most popular question topics he receives. It’s also a topic near and dear to Caktus’ quality-loving heart. Mark’s last webinar garnered more than 500 viewers, so sign up quick!&lt;/p></description></item><item><title>Caktus Hosts Lightweight Django Book Launch with Girl Develop It</title><link>https://www.caktusgroup.com/blog/2014/12/03/caktus-hosts-lightweight-django-book-launch-girl-develop-it/</link><pubDate>Thu, 04 Dec 2014 03:13:42 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/12/03/caktus-hosts-lightweight-django-book-launch-girl-develop-it/</guid><description>&lt;p>With &lt;a href="http://www.meetup.com/Girl-Develop-It-RDU/" target="_blank" rel="noopener noreferrer">Girl Develop It RDU&lt;/a>, we celebrated the launch of &lt;em>Lightweight Django&lt;/em> (O&amp;rsquo;Reilly) with the authors, Caktus Technical Director &lt;a href="http://www.caktusgroup.com/about/mark-lavin/" target="_blank" rel="noopener noreferrer">Mark Lavin&lt;/a> and Caktus alum Julia Elman. Sylvia Richardson of Girl Develop It MCed. The event was open to the public and so popular we kept recounting the RSVPs and fretting over the fire code. But, phew, we were good. In attendance were friends, family, fellow Cakti, and Django fans from around the Triangle.&lt;/p></description></item><item><title>Using Amazon S3 to Store your Django Site's Static and Media Files</title><link>https://www.caktusgroup.com/blog/2014/11/10/Using-Amazon-S3-to-store-your-Django-sites-static-and-media-files/</link><pubDate>Mon, 10 Nov 2014 16:28:11 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/11/10/Using-Amazon-S3-to-store-your-Django-sites-static-and-media-files/</guid><description>&lt;p>&lt;em>Editor's note: This post was updated in September 2017.&lt;/em>&lt;/p>
&lt;h2 id="using-amazon-s3-to-store-your-django-sites-static-and-media-files">Using Amazon S3 to Store your Django Site's Static and Media Files&lt;/h2>
&lt;p>Storing your Django site's static and media files on Amazon S3, instead
of serving them yourself, can improve site performance. It frees your
servers from handling static files themselves, lets you scale your
servers easier by keeping media files in a common place, and is a
necessary step to using Amazon CloudFront as a Content Delivery Network
(CDN).&lt;/p></description></item><item><title>Webcast: Creating Enriching Web Applications with Django and Backbone.js</title><link>https://www.caktusgroup.com/blog/2014/11/04/enriching-web-apps-django-backbonejs/</link><pubDate>Tue, 04 Nov 2014 15:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/11/04/enriching-web-apps-django-backbonejs/</guid><description>&lt;p>&lt;strong>Update: The live webcast is now available at &lt;a href="http://www.oreilly.com/pub/e/3154" target="_blank" rel="noopener noreferrer">O&amp;rsquo;Reilly Media&lt;/a>&lt;/strong>&lt;/p>
&lt;p>Our technical director, Mark Lavin, will be giving a tutorial on Django and Backbone.js during a free webcast for O’Reilly Media tomorrow, November 6th, 1pm EST. There will be demos and a discussion of common stumbling blocks when building rich client apps.&lt;/p></description></item><item><title>Celery in Production</title><link>https://www.caktusgroup.com/blog/2014/09/29/celery-production/</link><pubDate>Mon, 29 Sep 2014 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/09/29/celery-production/</guid><description>&lt;p>(Thanks to &lt;a href="https://www.caktusgroup.com/about/mark-lavin/">Mark Lavin&lt;/a> for significant
contributions to this post.)&lt;/p>
&lt;p>In a &lt;a href="https://www.caktusgroup.com/blog/2014/06/23/scheduling-tasks-celery/">previous post&lt;/a>, we
introduced using Celery to schedule tasks.&lt;/p>
&lt;p>In this post, we address things you might need to consider when planning
how to deploy Celery in production.&lt;/p></description></item><item><title>DjangoCon Ticket Giveaway!</title><link>https://www.caktusgroup.com/blog/2014/08/14/djangocon-2014-ticket-giveaway/</link><pubDate>Thu, 14 Aug 2014 18:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/08/14/djangocon-2014-ticket-giveaway/</guid><description>&lt;p>&lt;strong>Update: Congratulations to @dmpayton for winning this giveaway!&lt;/strong>&lt;/p>
&lt;p>Caktus is giving away a &lt;a href="http://www.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon&lt;/a> ticket valued at $850! DjangoCon is the main US Django conference and it’s returning to Portland this year, August 30 - September 4th. Meet fellow Django developers, learn what others are doing, and have a good time!&lt;/p></description></item><item><title>OSCON 2014 &amp; REST API Client Best Practices</title><link>https://www.caktusgroup.com/blog/2014/08/04/oscon-2014-rest-api-client-best-practices/</link><pubDate>Mon, 04 Aug 2014 11:36:53 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/08/04/oscon-2014-rest-api-client-best-practices/</guid><description>&lt;p>&lt;a href="http://www.caktusgroup.com/about/mark-lavin/" target="_blank" rel="noopener noreferrer">Mark Lavin&lt;/a>, Caktus Technical Director and author of the forthcoming &lt;a href="http://shop.oreilly.com/product/0636920032502.do" target="_blank" rel="noopener noreferrer">LightWeight Django&lt;/a> was recently at &lt;a href="http://www.oscon.com/oscon2014" target="_blank" rel="noopener noreferrer">OSCON 2014&lt;/a> in Portland where he gave a talk on improving the relationship between server and client for REST APIs. OSCON, with over 3000 attendees, is one of the largest open source conferences around. I sat down with him to ask him about his time there.&lt;/p></description></item><item><title>Contributing Back to Symposion</title><link>https://www.caktusgroup.com/blog/2014/07/21/contributing-back-to-Symposion/</link><pubDate>Mon, 21 Jul 2014 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/07/21/contributing-back-to-Symposion/</guid><description>&lt;p>Recently Caktus collaborated with the organizers of PyOhio, a free regional Python conference, to launch the &lt;a href="http://pyohio.org" target="_blank" rel="noopener noreferrer">PyOhio 2014 conference website&lt;/a>. The conference starts this weekend, July 26 - 27. As in prior years, the conference web site utilizes Eldarion’s &lt;a href="http://eldarion.com/symposion/" target="_blank" rel="noopener noreferrer">Symposion&lt;/a>, an opensource conference management system. Symposion powers a number of annual conference sites including &lt;a href="http://www.pycon.org" target="_blank" rel="noopener noreferrer">PyCon&lt;/a> and &lt;a href="http://djangocon.us" target="_blank" rel="noopener noreferrer">DjangoCon&lt;/a>. In fact, as of this writing, there are &lt;a href="https://github.com/pinax/symposion/network" target="_blank" rel="noopener noreferrer">78 forks of Symposion&lt;/a>, a nod to its widespread use for events both large and small. This collaboration afforded us the opportunity to abide by one our core tenets, that of giving back to the community.&lt;/p></description></item><item><title>July 2014 ShipIt Day Recap</title><link>https://www.caktusgroup.com/blog/2014/07/14/july-2014-shipit-day/</link><pubDate>Mon, 14 Jul 2014 21:28:13 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/07/14/july-2014-shipit-day/</guid><description>&lt;p>This past Friday we celebrated another ShipIt day at Caktus. There was a lot of open source contribution, exploring, and learning happening in the office. The projects ranged from native mobile Firefox OS apps, to development on our automated server provisioning templates via Salt, to front-end apps aimed at using web technology to create interfaces where composing new music or &lt;a href="https://www.youtube.com/watch?v=HzS-7-bT9g4" target="_blank" rel="noopener noreferrer">performing Frozen’s Let It Go is so easy anyone can do it&lt;/a>.&lt;/p></description></item><item><title>O'Reilly Deal: 50% Off Lightweight Django</title><link>https://www.caktusgroup.com/blog/2014/07/01/oreilly-deal-50-lightweight-django/</link><pubDate>Tue, 01 Jul 2014 10:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/07/01/oreilly-deal-50-lightweight-django/</guid><description>&lt;p>O'Reilly Media, the go-to source for technical books, just let us know that they're having a 50% off sale on eBook pre-orders of &lt;a href="http://shop.oreilly.com/product/0636920032502.do">Lightweight Django&lt;/a> today. Use coupon code: DEAL.
&lt;/p></description></item><item><title>Getting Started Scheduling Tasks with Celery</title><link>https://www.caktusgroup.com/blog/2014/06/23/scheduling-tasks-celery/</link><pubDate>Mon, 23 Jun 2014 11:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/06/23/scheduling-tasks-celery/</guid><description>&lt;p>&lt;strong>UPDATE:&lt;/strong> &lt;a href="https://www.caktusgroup.com/blog/2021/08/11/using-celery-scheduling-tasks/">A newer version of this blog post is available for Celery
Version
5.0.x&lt;/a>.&lt;/p>
&lt;h2 id="getting-started-using-celery-for-scheduling-tasks">Getting Started Using Celery for Scheduling Tasks&lt;/h2>
&lt;p>Many Django applications can make good use of being able to schedule
work, either periodically or just not blocking the request thread.&lt;/p></description></item><item><title>Caktus has a new website!</title><link>https://www.caktusgroup.com/blog/2014/04/09/caktus-has-new-website/</link><pubDate>Wed, 09 Apr 2014 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/04/09/caktus-has-new-website/</guid><description>&lt;p>It&amp;rsquo;s been a few years since we last updated our website, and we gave it
a whole new look!&lt;/p>
&lt;p>With the new site, it&amp;rsquo;s easy to see just what
&lt;a href="http://www.caktusgroup.com/services/" target="_blank" rel="noopener noreferrer">services&lt;/a> we offer, and our
&lt;a href="http://www.caktusgroup.com/process/" target="_blank" rel="noopener noreferrer">processes&lt;/a> for bringing our
client&amp;rsquo;s ideas to life. The new layout allows for more in-depth reviews
of our &lt;a href="http://www.caktusgroup.com/casestudies/" target="_blank" rel="noopener noreferrer">projects&lt;/a>, and also
highlights our talented and growing
&lt;a href="http://www.caktusgroup.com/about/" target="_blank" rel="noopener noreferrer">team&lt;/a>. We also wanted to share more
information on our commitment to the open source community and social
good. And the updated structure makes finding out about
&lt;a href="http://www.caktusgroup.com/events/" target="_blank" rel="noopener noreferrer">events&lt;/a> and reading our
ever-popular &lt;a href="http://www.caktusgroup.com/blog/" target="_blank" rel="noopener noreferrer">blog&lt;/a> posts simple.&lt;/p></description></item><item><title>New for PyCon: App for Group Outings + Giant Duck</title><link>https://www.caktusgroup.com/blog/2014/04/08/new-pycon-app-group-outings-giant-duck/</link><pubDate>Tue, 08 Apr 2014 14:57:52 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/04/08/new-pycon-app-group-outings-giant-duck/</guid><description>&lt;p>For PyCon 2014, we&amp;rsquo;ve been working for the past few months
on &lt;a href="http://duckling.us" target="_blank" rel="noopener noreferrer">Duckling&lt;/a>, an app to make it easier to find and
join casual group outings. Our favorite part of PyCon is meeting up with
fellow Pythonistas, but without someone rounding everyone up and sorting
the logistics, we&amp;rsquo;ve found it difficult to figure who&amp;rsquo;s going where and
when. Our answer to this age-old conference conundrum is
&lt;a href="https://duckling.us" target="_blank" rel="noopener noreferrer">Duckling&lt;/a>! &lt;/p></description></item><item><title>Congrats to PearlHacks Winners (Including Our Intern, Annie)!</title><link>https://www.caktusgroup.com/blog/2014/03/25/congrats-pearlhacks-winners-including-our-intern-annie/</link><pubDate>Tue, 25 Mar 2014 14:01:01 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/03/25/congrats-pearlhacks-winners-including-our-intern-annie/</guid><description>&lt;p>&lt;em>Caleb Smith, Caktus developer, awarding the third place prize to TheRightFit creators Bipasa Chattopadhyay, Ping Fu, and Sarah Andrabi.&lt;/em>&lt;/p>
&lt;p>Many congratulations to the &lt;a href="http://pearlhacks.com/" target="_blank" rel="noopener noreferrer">PearlHacks&lt;/a> third place winners who won Sphero Balls! The team from UNC’s Computer Science department created &lt;a href="https://www.hackerleague.org/hackathons/pearl-hacks/hacks/therightfit" target="_blank" rel="noopener noreferrer">TheRightFit&lt;/a>, an Android app that helps shoppers know what sizes will fit them and their families among various brands. Their prize of &lt;a href="http://www.gosphero.com/" target="_blank" rel="noopener noreferrer">Sphero Balls&lt;/a>, programmable balls that can interact and play games via smart phones, was presented by Caktus developer and Pearl Hacks mentor Caleb Smith as part of our sponsorship. PearlHacks, held at UNC-Chapel Hill, is a conference designed to encourage female high school and college programmers from the NC and VA area.&lt;/p></description></item><item><title>Caktus Completes RapidSMS Community Coordinator Development for UNICEF</title><link>https://www.caktusgroup.com/blog/2014/02/05/caktus-completes-rapidsms-community-coordinator-development-unicef/</link><pubDate>Wed, 05 Feb 2014 14:12:35 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/02/05/caktus-completes-rapidsms-community-coordinator-development-unicef/</guid><description>&lt;p>Colin Copeland, Managing Member at Caktus, has wrapped up work,
supported by UNICEF, as the Community Coordinator for the open source
&lt;a href="http://rapidsms.org" target="_blank" rel="noopener noreferrer">RapidSMS&lt;/a> project. RapidSMS is a text messaging
application development library built on top of the Django web
framework. It creates a SMS provider agnostic way of sending and
receiving text messages. RapidSMS has been used widely in the mobile
health field, in particular in areas where internet access cannot be
taken for granted and cell phones are the best communication tool
available. This has included projects initiated by UNICEF country
offices in Ethiopia, Madagascar, Malawi, Rwanda, Uganda, Zambia, and
Zimbabwe.&lt;/p></description></item><item><title>Managing Events with Explicit Time Zones</title><link>https://www.caktusgroup.com/blog/2014/01/09/managing-events-explicit-time-zones/</link><pubDate>Thu, 09 Jan 2014 14:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/01/09/managing-events-explicit-time-zones/</guid><description>&lt;h2 id="managing-events-with-explicit-time-zones">Managing Events with Explicit Time Zones&lt;/h2>
&lt;p>Recently we wanted a way to let users create real-life events which
could occur in any time zone that the user desired. By default, Django
interprets any date/time that the user enters as being in the user&amp;rsquo;s
time zone, but it never displays that time zone, and it converts the
time zone to UTC before storing it, so there is no record of what time
zone the user initially chose. This is fine for most purposes, but if
you want to specifically give the user the ability to choose different
time zones for different events, this won&amp;rsquo;t work.&lt;/p></description></item><item><title>Using strace to Debug Stuck Celery Tasks</title><link>https://www.caktusgroup.com/blog/2013/10/30/using-strace-debug-stuck-celery-tasks/</link><pubDate>Wed, 30 Oct 2013 19:56:31 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/10/30/using-strace-debug-stuck-celery-tasks/</guid><description>&lt;p>&lt;a href="http://www.celeryproject.org/" target="_blank" rel="noopener noreferrer">Celery&lt;/a> is a great tool for background
task processing in &lt;a href="https://www.djangoproject.com/" target="_blank" rel="noopener noreferrer">Django&lt;/a>. We use it
in a lot of the custom web apps we build at Caktus, and it's quickly
becoming the standard for all variety of task scheduling work loads,
from simple to highly complex.&lt;/p></description></item><item><title>ShipIt Day 4: SaltStack, Front-end Exploration, and Django Core</title><link>https://www.caktusgroup.com/blog/2013/10/29/shipit-day-4-saltstack-front-end-exploration-and-django-core/</link><pubDate>Tue, 29 Oct 2013 16:51:54 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/10/29/shipit-day-4-saltstack-front-end-exploration-and-django-core/</guid><description>&lt;p>Last week everyone at Caktus stepped away from client work for a day and a
half to focus on learning and experimenting. This was our fourth ShipIt day at
Caktus, our first being almost exactly a year ago. Each time we all learn a
ton, not only by diving head first into something new, but also by hearing the
experiences of everyone else on the team.&lt;/p></description></item><item><title>Skipping Test DB Creation</title><link>https://www.caktusgroup.com/blog/2013/10/02/skipping-test-db-creation/</link><pubDate>Wed, 02 Oct 2013 12:48:59 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/10/02/skipping-test-db-creation/</guid><description>&lt;p>We are always looking for ways to make our tests run faster. That means
writing tests which don't preform I/O (DB reads/writes, disk
reads/writes) when possible. Django has a &lt;a href="https://docs.djangoproject.com/en/stable/topics/testing/overview/#provided-test-case-classes" target="_blank" rel="noopener noreferrer">collection of TestCase
subclasses&lt;/a>
for different use cases. The common &lt;code>TestCase&lt;/code> handles the fixture
loading and the creation the of &lt;code>TestClient&lt;/code>. It uses the database
transactions to ensure that the database state is reset for every test.
That is it wraps each test in a transaction and rolls it back once the
test is over. Any transaction management inside the test becomes a
no-op. Since [TestCase]{.title-ref}[ overrides the transaction
facilities, if you need to test the transactional behavior of a piece of
code you can instead use
]{.title-ref}[TransactionTestCase]{.title-ref}[.
]{.title-ref}[TransactionTestCase]{.title-ref}` resets the database
after the test runs by truncating all tables which is much slower than
rolling back the transaction particularly if you have a large number of
tables.&lt;/p></description></item><item><title>Central logging in Django with Graylog2 and graypy</title><link>https://www.caktusgroup.com/blog/2013/09/18/central-logging-django-graylog2-and-graypy/</link><pubDate>Wed, 18 Sep 2013 14:00:12 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/09/18/central-logging-django-graylog2-and-graypy/</guid><description>&lt;p>Django's &lt;a href="https://docs.djangoproject.com/en/1.5/topics/logging/" target="_blank" rel="noopener noreferrer">logging
configuration&lt;/a>
facilities, which arrived in version 1.3, have greatly eased (and
standardized) the process of configuring logging for Django projects.
When building complex and interactive web applications at Caktus, we've
found that detailed (and properly configured!) logs are key to
successful and efficient debugging. Another step in that process &amp;mdash;
which can be particularly useful in environments where you have multiple
web servers &amp;mdash; is setting up a centralized logging server to receive
all your logs and make them available through an easily accessible web
interface. There are a number useful tools to do this, but one we've
found that works quite well is &lt;a href="http://graylog2.org/" target="_blank" rel="noopener noreferrer">Graylog2&lt;/a>.
Installing and configuring Graylog2 is outside the scope of this post,
but there are plenty of tutorials on how to do so accessible through
your search engine of choice.&lt;/p></description></item><item><title>Caktus Participates in DjangoCon 2013</title><link>https://www.caktusgroup.com/blog/2013/09/02/caktus-participates-djangocon-2013/</link><pubDate>Mon, 02 Sep 2013 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/09/02/caktus-participates-djangocon-2013/</guid><description>&lt;p>Caktus is happy to be involved in this
year&amp;rsquo;s &lt;a href="http://www.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon&lt;/a> hosted in Chicago.  We are
pumped about the great lineup of speakers and can&amp;rsquo;t wait to see some of
our old friends as well as meet some new folks. Beyond going to see the
wonderful talks, Caktus is participating as a sponsor and Tobias McNulty
will be speaking on scaling Django web apps. Come stop by our booth or
see Tobias&amp;rsquo; talk to connect with us.&lt;/p></description></item><item><title>Raspberry IO Open Sourced</title><link>https://www.caktusgroup.com/blog/2013/08/14/raspberry-io-open-sourced/</link><pubDate>Wed, 14 Aug 2013 14:40:39 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/08/14/raspberry-io-open-sourced/</guid><description>&lt;p>Back in March, at &lt;a href="https://us.pycon.org/2013/" target="_blank" rel="noopener noreferrer">PyCon
2013&lt;/a>, the &lt;a href="http://pyfound.blogspot.com/" target="_blank" rel="noopener noreferrer">PSF&lt;/a> provided
each attendee with a &lt;a href="http://www.raspberrypi.org/" target="_blank" rel="noopener noreferrer">Raspberry Pi&lt;/a>, a tiny
credit-card sized computer meant to be paired with the Python
programming language. The power and portability of the Raspberry Pi has
stimulated an explosion of interest among hobbyists and educators. Their
uses seem to be limited only by our collective imagination.&lt;/p></description></item><item><title>Migrating to a Custom User Model in Django</title><link>https://www.caktusgroup.com/blog/2013/08/07/migrating-custom-user-model-django/</link><pubDate>Wed, 07 Aug 2013 13:10:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/08/07/migrating-custom-user-model-django/</guid><description>&lt;p>&lt;strong>UPDATE: Read a&lt;/strong> &lt;a href="https://www.caktusgroup.com/blog/2019/04/26/how-switch-custom-django-user-model-mid-project/">&lt;strong>newer blog post on this
topic&lt;/strong>&lt;/a>.&lt;/p>
&lt;p>The new &lt;a href="https://docs.djangoproject.com/en/1.5/topics/auth/customizing/" target="_blank" rel="noopener noreferrer">custom user model
configuration&lt;/a>
that arrived in Django makes it relatively straightforward to swap in
your own model for the Django user model. In most cases, Django's
built-in &lt;code>User&lt;/code> model works just fine, but there are times when certain
limitations (such as the &lt;a href="https://docs.djangoproject.com/en/1.5/ref/models/fields/#emailfield" target="_blank" rel="noopener noreferrer">length of the email
field&lt;/a>)
require a custom user model to be installed. If you're starting out
with a custom user model, setup and configuration are relatively
straightforward, but if you need to migrate an existing legacy project
(e.g., one that started out in Django 1.4 or earlier), there are a few
gotchas that you might run into. We did this recently for one of our
larger, long-term client projects at Caktus, and here's an outline of
how we'd recommend tackling this issue:&lt;/p></description></item><item><title>Factory Boy as an Alternative to Django Testing Fixtures</title><link>https://www.caktusgroup.com/blog/2013/07/17/factory-boy-alternative-django-testing-fixtures/</link><pubDate>Wed, 17 Jul 2013 14:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/07/17/factory-boy-alternative-django-testing-fixtures/</guid><description>&lt;p>When testing a Django application you often need to populate the test
database with some sample data. The standard Django &lt;code>TestCase&lt;/code> has
support for fixture loading but there are a number of problems with
using fixtures:&lt;/p></description></item><item><title>Caktus is hiring a Design Visionary and User Experience Virtuoso with a Knack for Coding</title><link>https://www.caktusgroup.com/blog/2013/07/15/caktus-hiring-design-visionary-and-user-experience-virtuoso-knack-coding/</link><pubDate>Mon, 15 Jul 2013 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/07/15/caktus-hiring-design-visionary-and-user-experience-virtuoso-knack-coding/</guid><description>&lt;p>Do your mornings usually consist of reading design blogs and drinking coffee? Are you obsessive about fonts? Are you constantly seeking out new inspiration to make your designs better? As a Front-End Developer + Designer at Caktus, you’ll be able to put your passion for design and development to work by creating beautiful designs for complex websites. You will work closely with clients to bring their visions to life and help lead the branding and design process. Our designers take ownership of the user experience and design process from the beginning and collaborate with our development team to implement the vision. You should be passionate about the open source community and the philosophy behind it. If you’re interested in becoming part of and contributing to a creative, dynamic team, here’s an idea of what you’ll do:&lt;/p></description></item><item><title>Caktus and Python Software Foundation Collaborate on PyCon 2014 in Montreal Site</title><link>https://www.caktusgroup.com/blog/2013/07/10/caktus-and-python-software-foundation-collaborate-pycon-2014-montreal-site/</link><pubDate>Wed, 10 Jul 2013 15:36:12 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/07/10/caktus-and-python-software-foundation-collaborate-pycon-2014-montreal-site/</guid><description>&lt;p>[Caktus is proud to be a part of the launch of
the]{style=&amp;ldquo;color:#000000; background-color:transparent; font-style:normal;&amp;rdquo;}
&lt;a href="http://us.pycon.org/2014/" target="_blank" rel="noopener noreferrer">PyCon 2014 in Montreal&lt;/a>[ website. We were
delighted to be selected as this year&amp;rsquo;s partner for software development
and brand updates. In the past, we've enjoyed working with the
]{style=&amp;ldquo;color:#000000; background-color:transparent; font-style:normal;&amp;rdquo;}&lt;a href="http://www.python.org/psf/" target="_blank" rel="noopener noreferrer">Python
Software Foundation&lt;/a>[ as a collaborator for
the
]{style=&amp;ldquo;color:#000000; background-color:transparent; font-style:normal;&amp;rdquo;}&lt;a href="http://raspberry.io/" target="_blank" rel="noopener noreferrer">Raspberry.io&lt;/a>[
branding and development and are excited to help out with the PyCon
website.]{style=&amp;ldquo;color:#000000; background-color:transparent; font-style:normal;&amp;rdquo;}&lt;/p></description></item><item><title>MEDIA_ROOT and Django Tests</title><link>https://www.caktusgroup.com/blog/2013/06/26/media-root-and-django-tests/</link><pubDate>Wed, 26 Jun 2013 14:54:30 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/06/26/media-root-and-django-tests/</guid><description>&lt;p>If you&amp;rsquo;ve ever written a test for a view or model with associated
uploaded files you might have noticed a small problem with those files
hanging around after the tests are complete. Since version 1.3, Django
won&amp;rsquo;t delete the files associated with your model instances when they
are deleted. &lt;a href="http://stackoverflow.com/questions/5372934/how-do-i-get-django-admin-to-delete-files-when-i-remove-an-object-from-the-datab" target="_blank" rel="noopener noreferrer">Some work-arounds for this
issue&lt;/a>
involve writing a custom delete for your model or using a post_delete
signal handler. But even with those in place the files would not be
deleted during tests because the model instances are not explicitly
deleted at the end of the test case. Instead, Django simply rolls back
the transaction and the delete method is never called nor are the
signals fired. This can be quite an annoyance when running the tests
repeatedly and watching your &lt;code>MEDIA_ROOT&lt;/code> (or worse your S3 bucket) fill
up with garbage data. More than annoyance, this introduces something you
always want to avoid in unittests: global state.&lt;/p></description></item><item><title>Making your Django app more pluggable</title><link>https://www.caktusgroup.com/blog/2013/06/12/making-your-django-app-more-pluggable/</link><pubDate>Wed, 12 Jun 2013 12:08:27 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/06/12/making-your-django-app-more-pluggable/</guid><description>&lt;p>This blog post is about ways of doing things in your Django app, and
pitfalls to avoid, so your app is easier to plug in to other sites.&lt;/p></description></item><item><title>AngularJS to PyGame: Caktus’ 2nd ShipIt Day</title><link>https://www.caktusgroup.com/blog/2013/04/30/caktus-2nd-shipit-day/</link><pubDate>Tue, 30 Apr 2013 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/04/30/caktus-2nd-shipit-day/</guid><description>&lt;p>We had our 2nd ShipIt Day at Caktus last week. ShipIt (coined
by &lt;a href="http://www.atlassian.com/company/about/shipit" target="_blank" rel="noopener noreferrer">Atlassian&lt;/a>), in case
you don&amp;rsquo;t know, is an exercise that allows your team to work on
alternative projects in a 24-hour hackathon. We brainstorm ideas related
to Caktus, break into small groups and try to build a project by the end
of the day on Friday. It&amp;rsquo;s a lot of fun and provides an opportunity to
work on internal tools, try something new and collaborate together. \&lt;/p></description></item><item><title>Managing Django Translations with Transifex</title><link>https://www.caktusgroup.com/blog/2013/04/25/managing-django-translations-transifex/</link><pubDate>Thu, 25 Apr 2013 15:51:27 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/04/25/managing-django-translations-transifex/</guid><description>&lt;p>We manage a number of open source Django apps here at Caktus. While many
of us here are proficient in a number of programming languages, the same
can&amp;rsquo;t be said for our ability to read or write in languages other than
English. The Django community is global and we want our apps to support
other languages. For that we&amp;rsquo;ve turned
to &lt;a href="https://www.transifex.com/" target="_blank" rel="noopener noreferrer">Transifex&lt;/a> which it the same tool Django
itself uses for translations.&lt;/p></description></item><item><title>Caktus sponsoring and speaking on mobile health at SwitchPoint 2013</title><link>https://www.caktusgroup.com/blog/2013/04/18/caktus-sponsoring-and-speaking-mobile-health-switchpoint-2013/</link><pubDate>Thu, 18 Apr 2013 14:13:21 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/04/18/caktus-sponsoring-and-speaking-mobile-health-switchpoint-2013/</guid><description>&lt;p>SwitchPoint is a one-of-a-kind conference and a unique opportunity to
learn, share ideas, and hear about global and mobile health efforts
around the world. We had a great time at SwitchPoint last year. I&amp;rsquo;m
excited to announce that Caktus, for the second year in a row, is
sponsoring &lt;a href="http://event.switchpointideas.com/" target="_blank" rel="noopener noreferrer">[SwitchPoint
2013]{style=&amp;ldquo;color: rgb(17, 85, 204);&amp;rdquo;}&lt;/a>.&lt;/p></description></item><item><title>A helper script for runserver</title><link>https://www.caktusgroup.com/blog/2013/04/11/helper-script-runserver/</link><pubDate>Thu, 11 Apr 2013 16:17:37 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/04/11/helper-script-runserver/</guid><description>&lt;h4 id="my-django-runserver-shortcut-script">My Django runserver shortcut script&lt;/h4>
&lt;p>This is a little shell script I save as &lt;code>rs&lt;/code>, put on my path, and use as
a shortcut to start the Django development server. It has several
features that make me more productive:&lt;/p></description></item><item><title>PyCon 2013 Recap---Teaching and Learning with the Python Community</title><link>https://www.caktusgroup.com/blog/2013/04/04/pycon-2013-recap-teaching-and-learning-python-community/</link><pubDate>Thu, 04 Apr 2013 14:30:47 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/04/04/pycon-2013-recap-teaching-and-learning-python-community/</guid><description>&lt;p>Caktus had a wonderful time at this year&amp;rsquo;s PyCon conference.  We believe
strongly in supporting our developers in their quest to become the best
coders that they can be and think that being at PyCon is a great way for
them to learn about what&amp;rsquo;s going on in the Python community.  We sent
ten people to the conference to work at our booth and attend conference
events.  The organizers of PyCon, headed by Jesse Noller, put on an
amazing event that created a space for people to meet face to face in
order to work and learn together.&lt;/p></description></item><item><title>Raspberry IO announced at PyCon</title><link>https://www.caktusgroup.com/blog/2013/03/13/raspberry-io-announced-pycon/</link><pubDate>Wed, 13 Mar 2013 16:51:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/03/13/raspberry-io-announced-pycon/</guid><description>&lt;p>&lt;a href="https://us.pycon.org/2013/" target="_blank" rel="noopener noreferrer">PyCon&lt;/a> is one of our favorite conferences
here at Caktus. We&amp;rsquo;ve been attending for the past 4 years now and it is
amazing to see how much the community has grown. This year is especially
special because Jesse Noller and the Python Software Foundation (PSF)
came to us to help them build &lt;a href="http://raspberry.io/" target="_blank" rel="noopener noreferrer">Raspberry IO&lt;/a>. The
site features work from the Python community and their adventures in
using Raspberry Pi with Python.&lt;/p></description></item><item><title>Caktus is hiring a Web Project Manager</title><link>https://www.caktusgroup.com/blog/2013/03/06/project-manager/</link><pubDate>Wed, 06 Mar 2013 22:10:24 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2013/03/06/project-manager/</guid><description>&lt;p>Caktus is currently hiring for a full time Web Project Manager to be a
part of our awesome team. We&amp;rsquo;re a diverse team of smart, sharp
developers and designers with a passion for creating customizable,
content rich sites and web applications using Django. As one of the
project managers at Caktus, you&amp;rsquo;ll have the opportunity to develop your
professional skills and also get the chance to work with some very
capable and nice people.&lt;/p></description></item><item><title>Caktus Celebrates 5 Year Anniversary</title><link>https://www.caktusgroup.com/blog/2012/12/12/caktus-celebrates-5-year-anniversary/</link><pubDate>Wed, 12 Dec 2012 15:02:35 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/12/12/caktus-celebrates-5-year-anniversary/</guid><description>&lt;p>Caktus celebrated the end of our fifth year in business recently.  We
threw ourselves a party and invited our local friends who helped us grow
from our infancy through our awkward phases into a successful and
sustainable small business.&lt;/p></description></item><item><title>django-scribbler, a lightweight front-end interface for Django template editing</title><link>https://www.caktusgroup.com/blog/2012/10/30/django-scribbler-a-lightweight-front-end-interface-for-Django-template-editing/</link><pubDate>Tue, 30 Oct 2012 13:36:44 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/10/30/django-scribbler-a-lightweight-front-end-interface-for-Django-template-editing/</guid><description>&lt;p>&lt;a href="https://github.com/caktus/django-scribbler/" target="_blank" rel="noopener noreferrer">django-scribbler&lt;/a> is a new
open-source project published by the team at Caktus. Its goal is to
create a seamless way for authorized end users to make edits to specific
blocks of content in their Django template.&lt;/p></description></item><item><title>PBS' Half the Sky Documentary Site Developed by Caktus</title><link>https://www.caktusgroup.com/blog/2012/10/05/pbs-half-sky-documentary-site-developed-caktus/</link><pubDate>Fri, 05 Oct 2012 19:03:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/10/05/pbs-half-sky-documentary-site-developed-caktus/</guid><description>&lt;p>Earlier this year Caktus had the honor of working with Sonnet Media and
PBS&amp;rsquo; Independent Lens on the documentary, &lt;a href="http://www.pbs.org/independentlens/half-the-sky/" target="_blank" rel="noopener noreferrer">[&lt;em>Half the Sky: Turning
Oppression into Opportunity for Women
Worldwide.&lt;/em>]{.underline}&lt;/a>
Originally a best-selling book by Nicholas Kristof and Sheryl WuDunn,
the book adapted into a two part documentary series. The documentary
gives a voice to oppressed women around the world and brings a greater
awareness to their struggles to the rest of the globe. Half the Sky also
highlights a few of the amazing women who are directly making a change
in their countries by community organizing and advocating for women&amp;rsquo;s
rights through non-governmental organizations.&lt;/p></description></item><item><title>Planning Our First ShipIt Day at Caktus</title><link>https://www.caktusgroup.com/blog/2012/10/01/planning-our-first-shipit-day-caktus/</link><pubDate>Mon, 01 Oct 2012 16:10:33 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/10/01/planning-our-first-shipit-day-caktus/</guid><description>&lt;p>I'm delighted to write that last Friday, we announced we'll be trying
our first &amp;quot;ShipIt Day&amp;quot; at Caktus in October. ShipIt Days, also known
as FedEx Days, provide a time for the team to set aside what occupies us
most days&amp;mdash;building fantastic &lt;a href="https://www.caktusgroup.com/services/custom-web-applications/">web
applications&lt;/a> using Python and
Django for our wonderful &lt;a href="https://www.caktusgroup.com/portfolio/">clients&lt;/a>&amp;mdash;and pick up something
new or scratch an itch that's been bugging us for awhile. We got the
idea from the book &lt;em>&lt;a href="http://www.danpink.com/drive" target="_blank" rel="noopener noreferrer">Drive&lt;/a>&lt;/em> by Daniel
Pink, and it was also suggested independently by a number of &lt;a href="https://www.caktusgroup.com/about/">team
members&lt;/a>.&lt;/p></description></item><item><title>Project Mwana featured in the BBC</title><link>https://www.caktusgroup.com/blog/2012/09/25/project-mwana-featured-bbc/</link><pubDate>Tue, 25 Sep 2012 14:20:13 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/09/25/project-mwana-featured-bbc/</guid><description>&lt;p>Caktus has had the opportunity to work on the infrastructure of
RapidSMS, an application framework that allows data collection and
logistics coordination using mobile phone text messages for
communication. The BBC World News recently posted an article,
&lt;a href="http://www.bbc.com/future/story/20120803-saving-a-life-in-160-characters/" target="_blank" rel="noopener noreferrer">&amp;quot;RapidSMS: Saving a life in 160
characters&amp;quot;&lt;/a>
detailing the effects of RapidSMS technology is having on HIV/AIDS
treatment in the developing world. The article focuses on work being
done to combat the HIV/AIDS epidemic in Malawi where there is one of the
highest rates of infection in the world.&lt;/p></description></item><item><title>Thoughts after attending Djangocon</title><link>https://www.caktusgroup.com/blog/2012/09/11/thoughts-after-attending-djangocon/</link><pubDate>Tue, 11 Sep 2012 13:50:02 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/09/11/thoughts-after-attending-djangocon/</guid><description>&lt;figure style=" padding: 25px; margin-left: 25px; width: 400">
&lt;img src="https://farm9.staticflickr.com/8039/7976379747_78565496e1.jpg"
 width="350" >
&lt;figcaption>&lt;b>The Caktus team attending and having a great time at Djangocon!&lt;/b>&lt;/figcaption>
&lt;/figure>
&lt;p>It&amp;rsquo;s been one week since I posted my &lt;a href="http://www.caktusgroup.com/blog/2012/09/05/live-djangocon-2012-notes-first-day/">wrap-up of the first day at Djangocon&lt;/a>, and although I didn&amp;rsquo;t get the chance to cover each day individually I wanted to post a quick conference wrap up.&lt;/p></description></item><item><title>Djangocon 2012 First Day</title><link>https://www.caktusgroup.com/blog/2012/09/05/live-djangocon-2012-notes-first-day/</link><pubDate>Wed, 05 Sep 2012 15:24:10 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/09/05/live-djangocon-2012-notes-first-day/</guid><description>&lt;p>The Caktus team arrived in DC for Djangocon on Monday evening, 9/3 and
I've been keeping notes about what the presenters have been discussing
and generally what the mood and experience have been like. I am taking a
few minutes out of my Tuesday schedule to share with everyone how
Djangocon 2012 is shaping up! I stayed in Track 1 throughout the day, so
I can only report on talks given there.&lt;/p></description></item><item><title>Caktus Team Members Presenting at DjangoCon 2012</title><link>https://www.caktusgroup.com/blog/2012/09/03/caktus-team-members-presenting-djangocon-2012/</link><pubDate>Mon, 03 Sep 2012 14:00:13 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/09/03/caktus-team-members-presenting-djangocon-2012/</guid><description>&lt;p>Caktus is proud to announce that four of our developers will be
presenting at this year&amp;rsquo;s &lt;a href="http://www.djangocon.us/" target="_blank" rel="noopener noreferrer">DjangoCon&lt;/a>. We are
also happy to announce that we will be sponsors of DjangoCon, taking
place in Washington D.C. on September 4th through the 7th. In addition
to the four Caktus team members who will be presenting this year, our
entire development staff will be in attendance enjoying the conference
and city.&lt;/p></description></item><item><title>Caktus is hiring a Web Project Manager</title><link>https://www.caktusgroup.com/blog/2012/08/23/caktus-hiring-web-project-manager/</link><pubDate>Thu, 23 Aug 2012 12:51:37 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/08/23/caktus-hiring-web-project-manager/</guid><description>&lt;p>Caktus is currently hiring for a full time Web Project Manager to be a
part of our awesome team. We&amp;rsquo;re a diverse team of smart, sharp
developers and designers with a passion for creating customizable,
content rich sites and web applications using Django. As one of the
project managers at Caktus, you&amp;rsquo;ll have the opportunity to develop your
professional skills and also get the chance to work with some very
capable and nice people.&lt;/p></description></item><item><title>Thoughts after attending the UNICEF Rwanda mHealth Conference</title><link>https://www.caktusgroup.com/blog/2012/08/08/thoughts-after-attending-unicef-rwanda-mhealth-conference/</link><pubDate>Wed, 08 Aug 2012 17:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/08/08/thoughts-after-attending-unicef-rwanda-mhealth-conference/</guid><description>&lt;p>This past July, I had the pleasure of attending the UNICEF Rwanda
Conference in Kigali, Rwanda. The conferences focus was on developing a
comprehensive eHealth suite for numerous nations to implement.&lt;/p></description></item><item><title>Django Training</title><link>https://www.caktusgroup.com/blog/2012/07/20/announcing-new-service-training/</link><pubDate>Fri, 20 Jul 2012 21:14:29 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/07/20/announcing-new-service-training/</guid><description>&lt;p>Caktus is proud to announce that we are now offering Django training
services. This new service includes both off and on-site training for
you and your team to become a Djangonaut.&lt;/p></description></item><item><title>Django Fundamentals Bootcamp Recap</title><link>https://www.caktusgroup.com/blog/2012/07/12/django-fundamentals-bootcamp-recap/</link><pubDate>Thu, 12 Jul 2012 20:34:03 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/07/12/django-fundamentals-bootcamp-recap/</guid><description>&lt;p>On June 8th and 9th, Caktus hosted its first
&lt;a href="http://www.caktusgroup.com/events/details/django-fundamentals-bootcamp" target="_blank" rel="noopener noreferrer">&lt;/a>Django
Fundamentals Bootcamp. The Caktus team developed the idea for the
course, which was a crossword drill application, and has been developing
the structure and content of the course over the past year. The bootcamp
was designed to teach programmers who have experience in programming
with different languages and introduce them to the fundamentals of
building a web application with Django. We created an interactive
environment where the instructors and students were able to communicate
with one another which solved the issue of how to begin developing in an
unfamiliar language.&lt;/p></description></item><item><title>Karen Tracey to Deliver Keynote at DjangoCon Europe 2012</title><link>https://www.caktusgroup.com/blog/2012/05/31/karen-tracey-deliver-keynote-djangocon-europe-2012/</link><pubDate>Thu, 31 May 2012 19:47:14 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/05/31/karen-tracey-deliver-keynote-djangocon-europe-2012/</guid><description>&lt;p>I am very proud to announce that &lt;a href="https://www.caktusgroup.com/about/#kmtracey">Karen Tracey&lt;/a>, Lead
Developer at Caktus and Django Core Developer, will be &lt;a href="http://2012.djangocon.eu/blog/announcing-our-final-keynote-speaker-karen-tracey/" target="_blank" rel="noopener noreferrer">delivering a
keynote
address&lt;/a>
at &lt;a href="http://2012.djangocon.eu/" target="_blank" rel="noopener noreferrer">DjangoCon Europe&lt;/a> next week. This will be
Karen's first speech to the Django community, of which she has been an
exemplary member since 2006.&lt;/p></description></item><item><title>Narrowing the Gender Gap in the Open Source community</title><link>https://www.caktusgroup.com/blog/2012/05/24/narrowing-gender-gap-open-source-community/</link><pubDate>Thu, 24 May 2012 20:44:57 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/05/24/narrowing-gender-gap-open-source-community/</guid><description>&lt;p>Diversity is important in a workplace environment. Having different
points of view from people with different life experiences brings
&lt;a href="http://www.brighthub.com/office/human-resources/articles/90910.aspx" target="_blank" rel="noopener noreferrer">creative new ideas and innovative
solutions&lt;/a>
to the software development process. As a team of web developers that
designs and builds custom web applications, creativity and gender
diversity, I would argue, are closely tied and both crucial to the
success of our projects.&lt;/p></description></item><item><title>Project Mwana in MobileActive</title><link>https://www.caktusgroup.com/blog/2012/04/16/project-mwana-mobileactive/</link><pubDate>Mon, 16 Apr 2012 13:52:51 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/04/16/project-mwana-mobileactive/</guid><description>&lt;p>This past week, Project Mwana was a featured article on the site
MobileActive. Project Mwana is a RapidSMS application that connects
rural health clinic workers in Zambia and Malawi to HIV testing centers,
increasing the collection and turn around time for results to over 50%.
Tobias worked with the UNICEF Innovation team on the ground in Zambia
and Malawi to assist with the systems architecture and training local
developers to maintain the system. The RapidSMS platform allows the
application to be easily scalable at a very affordable cost, making it
one of the most efficient ways to connect people and send data between
people. By the end of 2012, the goal is to have 250 clinics in Malawi
using Project Mwana and complete coverage in Zambia by three years.&lt;/p></description></item><item><title>Caktus' Django Fundamentals Bootcamp</title><link>https://www.caktusgroup.com/blog/2012/04/06/caktus-django-bootcamp/</link><pubDate>Fri, 06 Apr 2012 20:10:45 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/04/06/caktus-django-bootcamp/</guid><description>&lt;p>I&amp;rsquo;m excited to announce that on June 9th and 10th, Caktus will be hosting our first Django bootcamp. It will be a two day intensive bootcamp session where you&amp;rsquo;ll learn the basics of developing a web application using Django through constructing a crossword drill application, created by the Caktus staff. It will go over the architecture of Django and also different third party applications that will allow you to enhance the finished product. For more information regarding our bootcamp, you can check out the &lt;a href="https://www.caktusgroup.com/events/details/django-fundamentals-bootcamp/">schedule of the day&amp;rsquo;s events&lt;/a>.&lt;/p></description></item><item><title>Caktus seeking a Django Contractor</title><link>https://www.caktusgroup.com/blog/2012/03/28/were-hiring-web-developer/</link><pubDate>Wed, 28 Mar 2012 19:19:05 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/03/28/were-hiring-web-developer/</guid><description>&lt;p>I'm excited to announce that Caktus is looking for a developer to join
our team on a contract basis!&lt;/p>
&lt;p>We're looking for a strong software developer who enjoys working on a
team and is excited to learn and experiment with new technologies. We do
have a preference for local candidates, but will consider all
submissions. Initial work will focus on maintaining small Django-powered
websites. This position will involve managing existing Django projects,
data modeling complex business ideas and deploying Django sites.&lt;/p></description></item><item><title>Front End Developer 2012 Summer Internship</title><link>https://www.caktusgroup.com/blog/2012/03/10/front-end-developer-2012-summer-internship/</link><pubDate>Sat, 10 Mar 2012 16:23:53 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/03/10/front-end-developer-2012-summer-internship/</guid><description>&lt;p>I'm excited to announce that Caktus is looking for candidates for our
front end developer/designer summer internship program. It is a 12 week
paid position in our Carrboro, NC office. We're driving distance from
UNC Chapel Hill, NC State Univeristy in Raleigh, and Duke in Durham, so
students from all parts of the NC Research Triangle are welcome to
apply.&lt;/p></description></item><item><title>Caktus is Sponsoring Pycon 2012</title><link>https://www.caktusgroup.com/blog/2012/03/08/caktus-sponsoring-pycon-2012/</link><pubDate>Thu, 08 Mar 2012 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/03/08/caktus-sponsoring-pycon-2012/</guid><description>&lt;p>Caktus is sponsoring Pycon 2012 in Santa Clara, CA this coming weekend!
Nearly the entire office will be attending this year's event, which
means Mark, Caleb, Calvin, David, Karen, Dan, Tobias, Colin, Julia,
Nicole and I will be on site contributing and learning with the rest of
the Python community. Nicole and I will be in charge of manning the
booth, and so if you managed to wrangle tickets to the sold-out event,
we invite you to stop by our booth #213 and say hello! Also Karen, Mark
and Calvin will be sprinting after the talks, working on Django and
Python3 tickets.&lt;/p></description></item><item><title>Using LESS with Django</title><link>https://www.caktusgroup.com/blog/2012/03/05/using-less-django/</link><pubDate>Mon, 05 Mar 2012 14:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/03/05/using-less-django/</guid><description>&lt;p>Lately, I&amp;rsquo;ve been working on creating a simplified work flow for my front end work here at Caktus. There are all sorts of new and helpful tools to optimize the creative process, allowing for faster iterations, and greater overall enjoyment. As with any new tool, there are a few options to choose from: LESS and SASS. Having read lots of reviews and reading through the documentation, I&amp;rsquo;ve decided LESS is more for me.&lt;/p></description></item><item><title>Configuring a Jenkins Slave</title><link>https://www.caktusgroup.com/blog/2012/01/10/configuring-jenkins-slave/</link><pubDate>Tue, 10 Jan 2012 13:50:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2012/01/10/configuring-jenkins-slave/</guid><description>&lt;p>We're pretty avid testers here at Caktus and when one of our Django
projects required upgrading to Python 2.7, we also needed to upgrade our
Jenkins build environment. Luckily, Jenkins supports distributed builds
to allow a master install to delegate tasks to slaves instances. This
way we can continue to run our primary build system on Ubuntu 10.04,
which defaults to Python 2.6, and delegate tasks to an Ubuntu 11.04
environment running Python 2.7. The setup is fairly easy, but since I
didn't find much out there already, I figured I write up a quick post
outlining what we did.&lt;/p></description></item><item><title>Class-based views in Django 1.3</title><link>https://www.caktusgroup.com/blog/2011/12/29/class-based-views-django-13/</link><pubDate>Thu, 29 Dec 2011 11:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/12/29/class-based-views-django-13/</guid><description>&lt;p>Django class-based views&lt;/p>
&lt;hr>
&lt;h3 id="introduction">Introduction&lt;/h3>
&lt;p>Django 1.3 added class-based views, but neglected to provide
documentation to explain what they were or how to use them. So here's a
basic introduction.&lt;/p></description></item><item><title>OpenBlock Geocoder, Part 3: External Geocoders</title><link>https://www.caktusgroup.com/blog/2011/12/28/openblock-geocoder-part-3-external-geocoders/</link><pubDate>Wed, 28 Dec 2011 13:23:21 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/12/28/openblock-geocoder-part-3-external-geocoders/</guid><description>&lt;p>The OpenBlock geocoder is powerful and robust. It uses PostGIS for
spacial queries, can extract addresses from bodies of text, and can
understand block and intersection notation. We've run into a few issues
with it, however, including a low geocoding success rate. This is a
tough problem to solve and depends on a lot of factors (the extent of
street and block data in OpenBlock, format of the street addresses,
etc.), so your mileage may vary. Below I constructed a simple test using
Google's Geocoding API to have as an alternative.&lt;/p></description></item><item><title>Using Django and Celery with Amazon SQS</title><link>https://www.caktusgroup.com/blog/2011/12/19/using-django-and-celery-amazon-sqs/</link><pubDate>Mon, 19 Dec 2011 16:26:48 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/12/19/using-django-and-celery-amazon-sqs/</guid><description>&lt;p>Amazon's &lt;a href="http://aws.amazon.com/sqs/" target="_blank" rel="noopener noreferrer">Simple Queue Service&lt;/a> (SQS) is a
relatively new offering in the family of Amazon Web Services (AWS).
It's also an appealing one, because it proposes to quickly and easily
replace a common component of the stack in a typical web application,
thereby obviating the need to run a separate queue server like
&lt;a href="http://www.rabbitmq.com/" target="_blank" rel="noopener noreferrer">RabbitMQ&lt;/a>. While RabbitMQ &amp;mdash; the typical
favorite for Celery users &amp;mdash; is not necessarily difficult to install or
maintain, removing it from the stack of a web application means one less
component that might fail, offloading that service to AWS &amp;mdash; especially
for applications with a small to moderate queue volume &amp;mdash; might prove
financially advantageous.&lt;/p></description></item><item><title>OpenBlock Geocoder, Part 2: Text Parsing and Entity Extraction</title><link>https://www.caktusgroup.com/blog/2011/12/16/openblock-geocoder-part-2-text-parsing-and-entity-extraction/</link><pubDate>Fri, 16 Dec 2011 13:30:19 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/12/16/openblock-geocoder-part-2-text-parsing-and-entity-extraction/</guid><description>&lt;p>This is the second post in our &lt;a href="https://github.com/openrural" target="_blank" rel="noopener noreferrer">OpenRural&lt;/a>
series reviewing &lt;a href="http://openblockproject.org/" target="_blank" rel="noopener noreferrer">OpenBlock&lt;/a> and it's
geocoder. &lt;a href="http://www.caktusgroup.com/blog/2011/12/12/openblock-geocoder-part-1-data-model-and-geocoding/" target="_blank" rel="noopener noreferrer">OpenBlock Geocoder, Part 1: Data Model and
Geocoding&lt;/a>
covers the internals of the OpenBlock geocoder and it's geocoding
capabilities. As this posts builds upon topics covered there, you may
wish to read Part 1 before proceeding. In this post we step back from
the internals of the geocoder and explore how to use it along with other
OpenBlock tools to parse unstructured text.&lt;/p></description></item><item><title>OpenBlock Geocoder, Part 1: Data Model and Geocoding</title><link>https://www.caktusgroup.com/blog/2011/12/12/openblock-geocoder-part-1-data-model-and-geocoding/</link><pubDate>Mon, 12 Dec 2011 16:17:20 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/12/12/openblock-geocoder-part-1-data-model-and-geocoding/</guid><description>&lt;p>As Tobias mentioned in &lt;a href="http://www.caktusgroup.com/blog/2011/12/06/scraping-data-and-web-standards/">Scraping Data and Web Standards&lt;/a>, Caktus is collaborating with the UNC School of Journalism to help develop Open Rural (the code is on &lt;a href="https://github.com/openrural">GitHub&lt;/a>). Open Rural hopes to help rural newspapers in North Carolina leverage &lt;a href="http://openblockproject.org/">OpenBlock&lt;/a>. This blog post is the first of several covering the internals of OpenBlock and, specifically, the geocoder.&lt;/p></description></item><item><title>Django Without the Web</title><link>https://www.caktusgroup.com/blog/2011/10/24/django-without-web/</link><pubDate>Mon, 24 Oct 2011 16:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/10/24/django-without-web/</guid><description>&lt;p>One of the things I like best about Django is how easy its ORM makes it
to work with databases. Too bad Django is only for web applications.
Sure, you could deploy a Django app and then make use of it from a
non-web application using a REST API, but that would be too awkward.&lt;/p></description></item><item><title>Caktus 2012 Summer Internship Program</title><link>https://www.caktusgroup.com/blog/2011/10/12/caktus-2012-summer-internship-program/</link><pubDate>Wed, 12 Oct 2011 16:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/10/12/caktus-2012-summer-internship-program/</guid><description>&lt;p>I'm excited to announce that Caktus is looking for candidates for our
summer internship program. It is a 12 week paid position in our
Carrboro, NC office. We're driving distance from UNC Chapel Hill, NC
State Univeristy in Raleigh, and Duke in Durham, so students from all
parts of the NC Research Triangle are welcome to apply.&lt;/p></description></item><item><title>Caktus Hosts 3rd Django Sprint in North Carolina</title><link>https://www.caktusgroup.com/blog/2011/10/10/caktus-hosts-3rd-django-sprint-north-carolina/</link><pubDate>Mon, 10 Oct 2011 19:41:55 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/10/10/caktus-hosts-3rd-django-sprint-north-carolina/</guid><description>&lt;p>Here at Caktus, we love Django and use it to make all of our web
applications. To help support the Django community, we are hosting a
development sprint on November 12th and 13th at our office in Carrboro,
NC in preparation for the 1.4 release. The sprint is a great is an
excuse for people to get together and focus their undivided attention on
improving Django. You will be helping out by providing bug fixes,
improving the documentation and also adding features
to existing packages.   &lt;/p></description></item><item><title>Caktus Group Welcomes Designer and Front End Developer Julia Elman</title><link>https://www.caktusgroup.com/blog/2011/09/30/caktus-group-welcomes-designer-and-front-end-developer-julia-elman/</link><pubDate>Fri, 30 Sep 2011 15:52:22 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/09/30/caktus-group-welcomes-designer-and-front-end-developer-julia-elman/</guid><description>&lt;p>I'm delighted to announce that Julia Elman has joined our growing team
of web developers here at Caktus. Julia started her design career almost
10 years ago in an internal marketing group, and first learned about
Django at the SXSW Interactive Festival in 2008. Prior to joining the
Caktus team, Julia worked at the Lawrence Journal World (the birthplace
of Django) and as a freelance designer.&lt;/p></description></item><item><title>Bulk inserts in Django</title><link>https://www.caktusgroup.com/blog/2011/09/20/bulk-inserts-django/</link><pubDate>Tue, 20 Sep 2011 18:08:52 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/09/20/bulk-inserts-django/</guid><description>&lt;p>I recently found a way to speed up a large data import far more than I
expected.&lt;/p>
&lt;p>The task was to read data from a text file and create data records in
Django, and the naive implementation was managing to import about 55
records per second, which was going to take far too long given the
amount of data that needed to be imported.&lt;/p></description></item><item><title>Testing Web Server Configurations with Fabric and ApacheBench</title><link>https://www.caktusgroup.com/blog/2011/09/13/testing-web-server-configurations-fabric-and-apachebench/</link><pubDate>Tue, 13 Sep 2011 18:16:33 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/09/13/testing-web-server-configurations-fabric-and-apachebench/</guid><description>&lt;p>Load testing a site with ApacheBench is fairly straight forward.
Typically you'd just SSH to a machine on the same network as the one
you want to test, and run a command like this:&lt;/p></description></item><item><title>Getting Started using Python in Eclipse</title><link>https://www.caktusgroup.com/blog/2011/08/31/getting-started-using-python-eclipse/</link><pubDate>Wed, 31 Aug 2011 19:05:53 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/08/31/getting-started-using-python-eclipse/</guid><description>&lt;p>Eclipse with the PyDev module has a lot to offer the Python programmer
these days. If you haven't looked at PyDev before, or not in a while,
it's worth checking out.&lt;/p></description></item><item><title>Caktus Consulting Group Sponsors DjangoCon 2011</title><link>https://www.caktusgroup.com/blog/2011/08/31/caktus-consulting-group-sponsors-djangocon-2011/</link><pubDate>Wed, 31 Aug 2011 14:13:49 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/08/31/caktus-consulting-group-sponsors-djangocon-2011/</guid><description>&lt;p>&lt;a href="http://djangocon.us/" title="DjangoCon 2011">DjangoCon 2011&lt;/a> is coming up next week and I&amp;rsquo;m excited to announce that Caktus is sponsoring the conference again this year! It is being held once again in beautiful Portland, Oregon from September 5th through the 10th. We&amp;rsquo;ve grown quite a bit from last year, there will be 9 team members-Colin, Tobias, Karen, Mark, Dan, Scott, George, Caleb and myself-attending the conference this year.&lt;/p></description></item><item><title>Junior Django Developer Wanted</title><link>https://www.caktusgroup.com/blog/2011/08/09/junior-django-developer-wanted/</link><pubDate>Tue, 09 Aug 2011 19:03:01 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/08/09/junior-django-developer-wanted/</guid><description>&lt;p>Caktus is currently seeking a junior Django developer for our team. The
ideal candidate would have 6 months of experience of building dynamic
web applications in any language, at least 3 months of experience using
Python and Django, and also have a basic understanding of relational
databases such as PostgreSQL and MySQL. The junior developer position
will consist of data modeling complex business ideas, creating and
integrating Django applications in new projects, maintaining existing
Django projects and also assisting with Django deployments. &lt;/p></description></item><item><title>We're hiring a Front End Web Developer</title><link>https://www.caktusgroup.com/blog/2011/08/04/were-hiring-front-end-web-developer/</link><pubDate>Thu, 04 Aug 2011 21:36:33 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/08/04/were-hiring-front-end-web-developer/</guid><description>&lt;p>I'm excited to announce that Caktus is actively seeking a Front End Web
Developer. The position would entail creating wireframes and mock ups of
proposed designs and user stories, performing front end jQuery and
Javascript development, converting PSD's into standards compliant HTML
and CSS, and also cloning repositories and running Django sites locally
for development. The position would also consist of doing user
experience design for internal and client projects. This is a contract
for hire position with the potential to become a full time position with
benefits. For a more detailed description of what you'd do as a Front
End Web Developer here at Caktus, check out the full job posting
&lt;a href="http://www.caktusgroup.com/careers/front-end-web-developer/" target="_blank" rel="noopener noreferrer">here&lt;/a>. &lt;/p></description></item><item><title>An alternative RapidSMS router implementation (with Celery!)</title><link>https://www.caktusgroup.com/blog/2011/07/18/alternative-rapidsms-router-implementation-celery/</link><pubDate>Mon, 18 Jul 2011 18:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/07/18/alternative-rapidsms-router-implementation-celery/</guid><description>&lt;p>We've been using &lt;a href="http://www.rapidsms.org/" target="_blank" rel="noopener noreferrer">RapidSMS&lt;/a>, a Django-powered
SMS framework, &lt;a href="http://www.caktusgroup.com/mobile-health/" target="_blank" rel="noopener noreferrer">more&lt;/a> and
&lt;a href="http://www.caktusgroup.com/blog/2010/12/29/hiv-results-birth-reminders-and-clinic-communication-malawi/" target="_blank" rel="noopener noreferrer">more&lt;/a>
frequently here at Caktus. It's evolved a lot over the past year--
from being reworked to feel more like a Django app, to
&lt;a href="http://groups.google.com/group/rapidsms/browse_thread/thread/526a752d695e85d2/c1075330937e1791?lnk=gst&amp;amp;q=core#c1075330937e1791" target="_blank" rel="noopener noreferrer">merging&lt;/a>
the rapidsms-core-dev and rapidsms-contrib-apps-dev repositories into a
single codebase (no more submodules!), to finally becoming installable
via
&lt;a href="http://groups.google.com/group/rapidsms/browse_thread/thread/19820972177b7845/1d1886cae96eb0c8?lnk=gst&amp;amp;q=pypi#1d1886cae96eb0c8" target="_blank" rel="noopener noreferrer">pypi&lt;/a>.
The &amp;quot;new core&amp;quot; is in a great state now and is much easier to work
with. However, one particular aspect of RapidSMS, the route process, has
always been complicated and confusing to deal with. Tobias began the
conversation on this
&lt;a href="http://groups.google.com/group/rapidsms/browse_thread/thread/18b053d468e699f3#" target="_blank" rel="noopener noreferrer">issue&lt;/a>
after returning from a 6-week long UNICEF project in Zambia.
He &lt;a href="https://github.com/rapidsms/rapidsms/wiki/Router-decoupling-and-HTTP-message-processing" target="_blank" rel="noopener noreferrer">summarized&lt;/a> the
route process like so:&lt;/p></description></item><item><title>Caktus Lightning Talk Lunches</title><link>https://www.caktusgroup.com/blog/2011/07/13/caktus-lightning-talk-lunches/</link><pubDate>Wed, 13 Jul 2011 15:03:11 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/07/13/caktus-lightning-talk-lunches/</guid><description>&lt;p>Last month we hosted the first talk in our new Caktus Lightning Talk Lunch series. We started this series to get together and learn about new projects, different applications, and interesting topics that the Caktus team has been working on. Lunch was provided from Buns in Chapel Hill and Mark Lavin gave the first talk.&lt;/p></description></item><item><title>The Buddha Website Wins Two Webby Awards</title><link>https://www.caktusgroup.com/blog/2011/05/18/buddha-wins-two-webby-awards/</link><pubDate>Wed, 18 May 2011 19:20:03 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/05/18/buddha-wins-two-webby-awards/</guid><description>&lt;p>I am excited to announce that &lt;a href="http://www.pbs.org/thebuddha/" title="The Buddha">The Buddha&lt;/a> site won two Webby Awards! It was built in partnership with Sonnet Media as a companion to &lt;a href="http://video.pbs.org/video/1418075805" title="The Buddha">The Buddha&lt;/a> documentary directed by David Grubin that aired on PBS in April 2010. The site was built using Django to create a multi layered interactive experience to further explore the life and times of the Buddha.&lt;/p></description></item><item><title>The Buddha Website Nominated for Webby Award</title><link>https://www.caktusgroup.com/blog/2011/04/12/buddha-website-nominated-webby-award/</link><pubDate>Tue, 12 Apr 2011 16:09:44 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/04/12/buddha-website-nominated-webby-award/</guid><description>&lt;p>I'm delighted to announce that the &lt;a href="https://www.caktusgroup.com/portfolio/project/the-buddha-a-pbs-documentary/">PBS companion website for The
Buddha&lt;/a>
&amp;mdash; a site that Caktus helped build using the Django web framework &amp;mdash;
has been nominated for a Webby Award in the Religion and Spirituality
category! Online voting for the People&amp;rsquo;s Voice awards is now underway
and we would appreciate you &lt;a href="http://webby.aol.com/media_types/web?focused_on_category=973#cat_id_973" target="_blank" rel="noopener noreferrer">voting for the
site&lt;/a>
and encouraging others to do so as well. You can also view the entry
page directly
&lt;a href="http://webby.aol.com/entries/57606" target="_blank" rel="noopener noreferrer">here&lt;/a>.&lt;/p></description></item><item><title>Caktus 2011 Summer Internship Program</title><link>https://www.caktusgroup.com/blog/2011/03/25/caktus-2011-summer-internship-program/</link><pubDate>Fri, 25 Mar 2011 18:51:25 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/03/25/caktus-2011-summer-internship-program/</guid><description>&lt;p>I'm excited to announce that Caktus is launching its summer internship
program. It is a 12 week paid position in our Carrboro, NC office.
We're in driving distance from UNC Chapel Hill, NC State in Raleigh,
and Duke in Durham, so students from all parts of the NC Research
Triangle are welcome to apply.&lt;/p></description></item><item><title>Sprinting on Django: A Layperson's Perspective</title><link>https://www.caktusgroup.com/blog/2011/03/15/sprinting-django-laypersons-perspective/</link><pubDate>Tue, 15 Mar 2011 17:32:37 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/03/15/sprinting-django-laypersons-perspective/</guid><description>&lt;p>We just got back from another fun and successful PyCon. While we didn't
get to stay for much of the sprints we did get to spend some time in the
Django sprint Sunday and Monday. Monday morning I was there early and I
noticed a bit of confusion among the Django sprinters. While I'm not a
frequent contributor I've participated a few sprints at previous
conferences and
&lt;a href="http://www.caktusgroup.com/blog/2009/12/06/caktus-consulting-group-hosts-django-sprint-in-triangle-nc-area/" target="_blank" rel="noopener noreferrer">local&lt;/a>
&lt;a href="http://www.caktusgroup.com/blog/2010/03/16/caktus-consulting-group-hosts-2nd-django-sprint-in-nc-triangle-area/" target="_blank" rel="noopener noreferrer">sprints&lt;/a>
with Caktus. I shared with them my experiences and it seemed generally
helpful so I thought I would share them here as well.&lt;/p></description></item><item><title>New Job Posting: Linux Systems Administrator with Python/Django experience</title><link>https://www.caktusgroup.com/blog/2011/03/12/new-job-posting-linux-systems-administrator-pythondjango-experience/</link><pubDate>Sat, 12 Mar 2011 16:56:33 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/03/12/new-job-posting-linux-systems-administrator-pythondjango-experience/</guid><description>&lt;p>I'm delighted to announce that we've just published another job
posting for a Linux Systems Administrator at Caktus. The position will
involve maintaining existing Linux servers, designing and building
highly-scalable deployments, and assistance with Django deployment and
development as time permits. This is a full-time position, with
benefits, and is based out of our Carrboro, NC office (a short drive
from Raleigh, Durham, and Chapel Hill).&lt;/p></description></item><item><title>Caktus Consulting Group Sponsors PyCon 2011</title><link>https://www.caktusgroup.com/blog/2011/03/09/caktus-consulting-group-sponsors-pycon-2011/</link><pubDate>Thu, 10 Mar 2011 03:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/03/09/caktus-consulting-group-sponsors-pycon-2011/</guid><description>&lt;p>&lt;a href="http://us.pycon.org/2011/home/" target="_blank" rel="noopener noreferrer">PyCon 2011
Atlanta&lt;/a> is just
around the corner, and I'm proud to announce that Caktus is a gold
sponsor at the conference this year! We sponsored DjangoCon in both 2009
and 2010, and this year agreed to extend that support to the Python
community in general.&lt;/p></description></item><item><title>New Careers Page Inaugurated with Django Job Posting</title><link>https://www.caktusgroup.com/blog/2011/02/09/new-careers-page-inaugurated-django-job-posting/</link><pubDate>Wed, 09 Feb 2011 16:50:47 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2011/02/09/new-careers-page-inaugurated-django-job-posting/</guid><description>&lt;p>I&amp;rsquo;m pleased to announce that we just released a new &lt;a href="https://www.caktusgroup.com/careers/" title="Careers at Caktus">Careers section&lt;/a> of our web site here at Caktus. The section has been inaugurated with a new posting for a full-time Django developer position based out of our Carrboro, NC office (not far from Raleigh, Durham, or Chapel Hill), so kindly check it out and let us know if you or someone you know might be a good fit!&lt;/p></description></item><item><title>HIV Results, Birth Reminders, and Clinic Communication in Malawi</title><link>https://www.caktusgroup.com/blog/2010/12/29/hiv-results-birth-reminders-and-clinic-communication-malawi/</link><pubDate>Wed, 29 Dec 2010 23:52:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/12/29/hiv-results-birth-reminders-and-clinic-communication-malawi/</guid><description>&lt;p>I recently returned from a 6 week trip in Malawi, where I was heavily
involved in the implementation and deployment of &lt;a href="https://www.caktusgroup.com/portfolio/project/unicef-project-mwana/">Project
Mwana&lt;/a>, an Information and
Communication Technology (ICT) project focused on Maternal and Newborn
Child Health (MNCH). The project is currently running as a pilot in both
Zambia and Malawi. This post is a fairly technical overview of what the
project does and the way in which it was developed.&lt;/p></description></item><item><title>Simplifying the Testing of Unmanaged Database Models in Django (Updated for Django 4.2 in 2024)</title><link>https://www.caktusgroup.com/blog/2010/09/24/simplifying-the-testing-of-unmanaged-database-models-in-django/</link><pubDate>Fri, 24 Sep 2010 15:01:09 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/09/24/simplifying-the-testing-of-unmanaged-database-models-in-django/</guid><description>&lt;p>&lt;em>Editor's note: This post was originally published in September, 2010
and was updated in December, 2024 to incorporate changes in Django and
improvements suggested by our readers. It has also been tested for
compatibility as of the Django 4.2 release.&lt;/em>&lt;/p></description></item><item><title>Caktus Consulting Group Seeks Two Python/Django Web Developers</title><link>https://www.caktusgroup.com/blog/2010/09/03/caktus-consulting-group-seeks-two-python-django-web-developers/</link><pubDate>Fri, 03 Sep 2010 15:13:03 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/09/03/caktus-consulting-group-seeks-two-python-django-web-developers/</guid><description>&lt;p>I'm delighted to announce that &lt;a href="https://www.caktusgroup.com/">Caktus&lt;/a>
is looking for two Python and/or Django web developers to join our team
on a contract or part-time basis, with the potential for full-time work
in the future.&lt;/p></description></item><item><title>Caktus Consulting Group Sponsors DjangoCon 2010</title><link>https://www.caktusgroup.com/blog/2010/08/26/caktus-consulting-group-sponsors-djangocon-2010/</link><pubDate>Thu, 26 Aug 2010 17:50:45 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/08/26/caktus-consulting-group-sponsors-djangocon-2010/</guid><description>&lt;p>&lt;a href="http://djangocon.us" target="_blank" rel="noopener noreferrer">DjangoCon 2010&lt;/a> is just around the corner, and
I'm proud to announce that Caktus is sponsoring the conference again
this year!&lt;/p></description></item><item><title>Caktus Consulting Group Welcomes Lead Developer Karen Tracey</title><link>https://www.caktusgroup.com/blog/2010/08/12/caktus-consulting-group-welcomes-lead-developer-karen-tracey/</link><pubDate>Thu, 12 Aug 2010 19:10:43 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/08/12/caktus-consulting-group-welcomes-lead-developer-karen-tracey/</guid><description>&lt;p>I'm delighted to welcome Karey Tracey to our growing team of web
developers here at Caktus. Karen is a core developer of the Django web
framework and specializes in the development and testing of applications
for the web. She is also the author of &lt;a href="https://www.packtpub.com/django-1-1-testing-and-debugging/book" target="_blank" rel="noopener noreferrer">&lt;em>Django 1.1 Testing and
Debugging&lt;/em>&lt;/a>,
published by Packt Publishing in April, 2010.&lt;/p></description></item><item><title>Expanded services, portfolio, and more in the new Caktus web site</title><link>https://www.caktusgroup.com/blog/2010/06/07/expanded-services-portfolio-and-more-in-the-new-caktus-web-site/</link><pubDate>Mon, 07 Jun 2010 20:46:20 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/06/07/expanded-services-portfolio-and-more-in-the-new-caktus-web-site/</guid><description>&lt;p>We're pleased to announce the release of the latest and greatest Caktus
web presence yet. This edition features an enhanced &lt;a href="https://www.caktusgroup.com/services/">services
section&lt;/a> and &lt;a href="https://www.caktusgroup.com/portfolio/">portfolio&lt;/a>. Among other things,
the new site demonstrates how our &lt;a href="https://www.caktusgroup.com/content-management/">Django-based content management
system&lt;/a> can be used to connect related pages in
customized, innovative ways.&lt;/p></description></item><item><title>Basic Django deployment with virtualenv, fabric, pip and rsync</title><link>https://www.caktusgroup.com/blog/2010/04/22/basic-django-deployment-with-virtualenv-fabric-pip-and-rsync/</link><pubDate>Fri, 23 Apr 2010 00:46:37 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/04/22/basic-django-deployment-with-virtualenv-fabric-pip-and-rsync/</guid><description>&lt;p>Deployment is usually a tedious process with lots of tinkering until
everything is setup just right. We deploy quite a few Django sites on a
regular basis here at Caktus and still do tinkering, but we've
attempted to functionalize some of the core tasks to ease the process.
I've put together a basic example that outlines local and remote
environment setup. This is a simplified example and just one of many
ways to deploy a Django project (I learned a lot from Jacob
Kaplan-Moss'
&lt;a href="http://github.com/jacobian/django-deployment-workshop/" target="_blank" rel="noopener noreferrer">django-deployment-workshop&lt;/a>),
so I encourage you to browse around the Django community to learn more.
The entire source for this example project can be found in the
&lt;a href="http://www.bitbucket.org/copelco/caktus-deployment/src/tip/example-django-project/" target="_blank" rel="noopener noreferrer">caktus-deployment Bitbucket
repository&lt;/a>.&lt;/p></description></item><item><title>Caktus Consulting Group hosts 2nd Django sprint in NC Triangle area</title><link>https://www.caktusgroup.com/blog/2010/03/16/caktus-consulting-group-hosts-2nd-django-sprint-in-nc-triangle-area/</link><pubDate>Tue, 16 Mar 2010 16:36:31 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/03/16/caktus-consulting-group-hosts-2nd-django-sprint-in-nc-triangle-area/</guid><description>&lt;p>&lt;a href="http://www.djangoproject.com/" target="_blank" rel="noopener noreferrer">Django&lt;/a> is a tool we use every day to
build &lt;a href="https://www.caktusgroup.com/services/">fantastic web apps&lt;/a> here at Caktus, and a development
sprint is a concerted, focused period of time in which developers meet
in the same space to get things done on a project.&lt;/p></description></item><item><title>Decoupled Django Apps and the Beauty of Generic Relations</title><link>https://www.caktusgroup.com/blog/2010/03/11/decoupled-django-apps-and-the-beauty-of-generic-relations/</link><pubDate>Thu, 11 Mar 2010 21:18:02 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/03/11/decoupled-django-apps-and-the-beauty-of-generic-relations/</guid><description>&lt;p>Like just about everyone else, we've written our own suite of tools to
help with building complex content management systems in Django here at
&lt;a href="https://www.caktusgroup.com/services">Caktus&lt;/a>. We reviewed a number of the existing CMSes out
there, but in almost every case the navigation and page structure were
so tightly coupled the system broke down when it came time to add
additional, non-CMS pages.&lt;/p></description></item><item><title>Continuous Integration with Django and Hudson CI (Day 1)</title><link>https://www.caktusgroup.com/blog/2010/03/08/django-and-hudson-ci-day-1/</link><pubDate>Mon, 08 Mar 2010 15:58:48 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/03/08/django-and-hudson-ci-day-1/</guid><description>&lt;p>We're always looking for new tools to make our development environment
more robust here at Caktus. We write a lot of
&lt;a href="https://www.caktusgroup.com/blog/2009/05/26/testing-django-views-for-concurrency-issues/">tests&lt;/a>
to ensure proper functionality as new features land and bug fixes are
added to our projects. The next step is to integrate with a &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration" target="_blank" rel="noopener noreferrer">continuous
integration&lt;/a> system
to automate the process and regularly check that status of the build.&lt;/p></description></item><item><title>Caktus Sends Team of Five to PyCon 2010 in Atlanta</title><link>https://www.caktusgroup.com/blog/2010/02/17/caktus-sends-team-of-five-to-pycon-2010-in-atlanta/</link><pubDate>Wed, 17 Feb 2010 18:08:30 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2010/02/17/caktus-sends-team-of-five-to-pycon-2010-in-atlanta/</guid><description>&lt;p>&lt;a href="http://www.python.org" target="_blank" rel="noopener noreferrer">Python&lt;/a> and
&lt;a href="http://www.djangoproject.org" target="_blank" rel="noopener noreferrer">Django&lt;/a> are tools we use on a daily basis
to build &lt;a href="https://www.caktusgroup.com/services/">fantastic web apps&lt;/a> here at Caktus. I'm pleased
to announce that Caktus is sending five developers--Colin, Alex, Mike,
Mark, and myself--to &lt;a href="http://us.pycon.org/2010/about/" target="_blank" rel="noopener noreferrer">PyCon 2010&lt;/a>!
PyCon is an annual gathering for users and developers of the open source
Python programming language. This year the US conference is being held
in Atlanta, GA. We'll be driving down tomorrow (Thursday) from Chapel
Hill, NC and staying for the conference weekend plus one day of the
sprints.&lt;/p></description></item><item><title>Caktus Consulting Group hosts Django sprint in Triangle, NC area</title><link>https://www.caktusgroup.com/blog/2009/12/06/caktus-consulting-group-hosts-django-sprint-in-triangle-nc-area/</link><pubDate>Sun, 06 Dec 2009 19:37:17 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/12/06/caktus-consulting-group-hosts-django-sprint-in-triangle-nc-area/</guid><description>&lt;p>&lt;a href="http://www.djangoproject.com/" target="_blank" rel="noopener noreferrer">Django&lt;/a> is a tool we use every day to
build &lt;a href="http://www.caktusgroup.com/services/" target="_blank" rel="noopener noreferrer">rock-solid web apps&lt;/a> here
at Caktus, and a development sprint is a concerted, focused period of
time in which developers meet in the same space to get things done on a
project.&lt;/p></description></item><item><title>Custom JOINs with Django's query.join()</title><link>https://www.caktusgroup.com/blog/2009/09/28/custom-joins-with-djangos-queryjoin/</link><pubDate>Mon, 28 Sep 2009 14:26:02 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/09/28/custom-joins-with-djangos-queryjoin/</guid><description>&lt;p>Django's ORM is great. It handles simple to fairly complex queries
right out the box without having to write any SQL. If you need a
complicated query, Django's lets you use .extra(), and you can always
fallback to raw SQL if need be, but then you lose the ORM's bells and
whistles. So it's always nice to find solutions that allow you to tap
into the ORM at different levels.&lt;/p></description></item><item><title>Web Developer for Hire</title><link>https://www.caktusgroup.com/blog/2009/09/23/developer-for-hire/</link><pubDate>Wed, 23 Sep 2009 14:26:58 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/09/23/developer-for-hire/</guid><description>&lt;p>We're pleased to announce that &lt;a href="http://www.caktusgroup.com/" target="_blank" rel="noopener noreferrer">Caktus&lt;/a> is
looking for a developer to join our team on a contract basis!&lt;/p>
&lt;p>What do we do? We build custom web applications for local and remote
clients using a variety of open-source technologies. We are a small team
founded in the Chapel Hill/Carrboro area (currently residing in
&lt;a href="http://www.carrborocoworking.com/" target="_blank" rel="noopener noreferrer">Carrboro Creative Coworking&lt;/a>) who
believe in face-to-face contact and employ agile development techniques
that emphasize teamwork and collaboration.&lt;/p></description></item><item><title>Open Source Django Projects from Caktus Consulting Group</title><link>https://www.caktusgroup.com/blog/2009/09/07/open-source-django-apps-from-caktus-consulting-group/</link><pubDate>Mon, 07 Sep 2009 23:48:44 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/09/07/open-source-django-apps-from-caktus-consulting-group/</guid><description>&lt;p>At Caktus we're big fans of reusing code. We leverage many open source
projects--especially Django apps--to accomplish a variety of tasks. In
addition, we've written quite a few pluggable apps over the paste two
years that we reuse over and over again for different projects. As a way
of giving back to the community, we've polished and released a portion
of that code as open source ourselves. While some of the projects have
been available on Google Code for awhile now, we just put together a
consolidated list of &lt;a href="http://www.caktusgroup.com/portfolio/community/" target="_blank" rel="noopener noreferrer">open source Django
projects&lt;/a> on our web
site to serve as a jumping off point for all the projects we like, we
contributed to, and we created. Enjoy!&lt;/p></description></item><item><title>Caktus Consulting Group, LLC sponsors DjangoCon 2009</title><link>https://www.caktusgroup.com/blog/2009/09/05/djangocon-2009/</link><pubDate>Sun, 06 Sep 2009 03:58:29 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/09/05/djangocon-2009/</guid><description>&lt;p>&lt;a href="http://www.djangoproject.com/" target="_blank" rel="noopener noreferrer">Django&lt;/a> is a tool we use on a daily
basis to build &lt;a href="http://www.caktusgroup.com/services/" target="_blank" rel="noopener noreferrer">fantastic web
apps&lt;/a> here at Caktus, and
&lt;a href="http://www.djangocon.org" target="_blank" rel="noopener noreferrer">DjangoCon&lt;/a> is the annual conference for
Django developers and other community members. We are proud to announce
that Caktus Consulting Group, LLC is sponsoring DjangoCon 2009!&lt;/p></description></item><item><title>Creating recursive, symmetrical many-to-many relationships in Django</title><link>https://www.caktusgroup.com/blog/2009/08/14/creating-recursive-symmetrical-many-to-many-relationships-in-django/</link><pubDate>Fri, 14 Aug 2009 18:10:43 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/08/14/creating-recursive-symmetrical-many-to-many-relationships-in-django/</guid><description>&lt;p>In Django, a recursive many-to-many relationship is a &lt;code>ManyToManyField&lt;/code>
that points to the same model in which it's defined &lt;code>('self')&lt;/code>. A
symmetrical relationship is one in where, when &lt;code>a.contacts = [b]&lt;/code>, a is
in &lt;code>b.contacts&lt;/code>.&lt;/p></description></item><item><title>Towards a Standard for Django Session Messages</title><link>https://www.caktusgroup.com/blog/2009/06/19/towards-a-standard-for-django-session-messages/</link><pubDate>Fri, 19 Jun 2009 15:31:13 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/06/19/towards-a-standard-for-django-session-messages/</guid><description>&lt;p>Django needs a standard way in which session-specific messages can be created and retrieved for display to the user. For years we&amp;rsquo;ve been surviving using &lt;code>user.message_set&lt;/code> to store messages that are really specific to the current session, not the user, or using the latest and greatest Django snippet, pluggable app, or custom crafted middleware to handle messages in a more appropriate way.&lt;/p></description></item><item><title>Testing Django Views for Concurrency Issues (Updated for Django 4.2 in 2024)</title><link>https://www.caktusgroup.com/blog/2009/05/26/testing-django-views-for-concurrency-issues/</link><pubDate>Tue, 26 May 2009 19:59:25 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/05/26/testing-django-views-for-concurrency-issues/</guid><description>&lt;p>&lt;em>Editor's note: This post was originally published in May, 2009 and was
updated in December, 2024 to incorporate changes in Django and
improvements suggested by our readers. It has also been tested for
compatibility as of the Django 4.2 release.&lt;/em>&lt;/p></description></item><item><title>Explicit Table Locking with PostgreSQL and Django</title><link>https://www.caktusgroup.com/blog/2009/05/26/explicit-table-locking-with-postgresql-and-django/</link><pubDate>Tue, 26 May 2009 18:59:10 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/05/26/explicit-table-locking-with-postgresql-and-django/</guid><description>&lt;p>By default, &lt;a href="http://www.djangoproject.com/" target="_blank" rel="noopener noreferrer">Django&lt;/a> doesn't do explicit
table locking. This is OK for most read-heavy scenarios, but sometimes
you need guaranteed, exclusive access to the data. Caktus uses
&lt;a href="http://www.postgresql.org/" target="_blank" rel="noopener noreferrer">PostgreSQL&lt;/a> in most of our production
environments, so we can use the &lt;a href="http://www.postgresql.org/docs/8.3/interactive/explicit-locking.html" target="_blank" rel="noopener noreferrer">various lock
modes&lt;/a>
it provides to control concurrent access to the data. Once we obtain a
lock in PostgreSQL, it is held for the remainder of the current
transaction. Django provides transaction management, so all we need to
do is execute a &lt;a href="http://www.postgresql.org/docs/8.3/interactive/sql-lock.html" target="_blank" rel="noopener noreferrer">SQL LOCK
statement&lt;/a>
within a transaction, and Django and PostgreSQL will handle the rest.&lt;/p></description></item><item><title>Parsing Microseconds in a Django Form</title><link>https://www.caktusgroup.com/blog/2009/05/26/parsing-microseconds-in-a-django-form/</link><pubDate>Tue, 26 May 2009 13:43:56 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/05/26/parsing-microseconds-in-a-django-form/</guid><description>&lt;p>There's currently no way to accept microsecond-precision input through
a Django form's DateTimeField. This is an &lt;a href="http://code.djangoproject.com/ticket/9459%20" target="_blank" rel="noopener noreferrer">acknowledged
bug&lt;/a>, but the official
solution might not come very soon, because the real fix is non-trivial.&lt;/p></description></item><item><title>Seamlessly switch off (and on) a Django (or other WSGI) site for upgrades</title><link>https://www.caktusgroup.com/blog/2009/05/25/seamlessly-switch-off-and-on-a-django-or-other-wsgi-site-for-upgrades/</link><pubDate>Mon, 25 May 2009 19:53:18 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/05/25/seamlessly-switch-off-and-on-a-django-or-other-wsgi-site-for-upgrades/</guid><description>&lt;p>In preparation for migrating the &lt;a href="http://www.everywatt.com" target="_blank" rel="noopener noreferrer">EveryWatt&lt;/a>
database from one machine to another, I wrote this little
&lt;a href="http://www.wsgi.org/wsgi/What_is_WSGI" target="_blank" rel="noopener noreferrer">WSGI&lt;/a> script to easily disable
the site while I copy the data. Since it doesn't depend on
&lt;a href="http://www.djangoproject.com/" target="_blank" rel="noopener noreferrer">Django&lt;/a> or really anything else (other
than a functioning WSGI server), you can use it for other upgrades, too.&lt;/p></description></item><item><title>Eclipse Ganymede and Subclipse on Ubuntu - JavaHL (JNI) not available</title><link>https://www.caktusgroup.com/blog/2009/05/21/eclipse-ganymede-and-subsclipe-on-ubuntu-javahl-jni-not-available/</link><pubDate>Thu, 21 May 2009 15:10:25 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/05/21/eclipse-ganymede-and-subsclipe-on-ubuntu-javahl-jni-not-available/</guid><description>&lt;p>I finally got around to updating my &lt;a href="http://www.eclipse.org" target="_blank" rel="noopener noreferrer">Eclipse&lt;/a>,
&lt;a href="http://pydev.sourceforge.net/" target="_blank" rel="noopener noreferrer">PyDev&lt;/a>, and
&lt;a href="http://subclipse.tigris.org/" target="_blank" rel="noopener noreferrer">Subclipse&lt;/a> environment today, which I use
for &lt;a href="http://www.djangoproject.com" target="_blank" rel="noopener noreferrer">Django&lt;/a> development.&lt;/p>
&lt;p>Formerly I was using the SvnKit (pure-Java) libraries. SvnKit &amp;quot;felt&amp;quot;
slow to me, compared to my command line SVN client, so this time I tried
to get the JavaHL (JNI) libraries working.&lt;/p></description></item><item><title>Migrating from django-photologue 1.x to 2.x</title><link>https://www.caktusgroup.com/blog/2009/03/27/migrating-from-django-photologue-1x-to-2x/</link><pubDate>Fri, 27 Mar 2009 17:52:30 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/03/27/migrating-from-django-photologue-1x-to-2x/</guid><description>&lt;p>We're in the process of updating a web app for a client that was built
last year about this time using &lt;a href="http://www.djangoproject.com" target="_blank" rel="noopener noreferrer">Django&lt;/a>
and &lt;a href="http://code.google.com/p/django-photologue/" target="_blank" rel="noopener noreferrer">Photologue&lt;/a>. Needless
to say, there have been a lot of changes to both over the past year!&lt;/p></description></item><item><title>Solving NFS issues on embedded machines</title><link>https://www.caktusgroup.com/blog/2009/03/25/solving-nfs-issues-on-embedded-machines/</link><pubDate>Wed, 25 Mar 2009 16:07:27 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/03/25/solving-nfs-issues-on-embedded-machines/</guid><description>&lt;p>As part of my work on &lt;a href="http://www.everywatt.com" target="_blank" rel="noopener noreferrer">EveryWatt&lt;/a>, I setup an
NFS-based development environment for one of the data loggers we use for
energy monitoring in the Caktus office. The stock 2.4 Linux kernel in
the machine seemed to have some trouble mounting the file system root I
had exported from one of our servers. The symptoms included long delays
for most if not all activities that used the file system and lots of
messages like these in dmesg:&lt;/p></description></item><item><title>Overriding Django admin templates for fun and profit</title><link>https://www.caktusgroup.com/blog/2009/01/20/overriding-django-admin-templates-for-fun-and-profit/</link><pubDate>Tue, 20 Jan 2009 18:25:48 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/01/20/overriding-django-admin-templates-for-fun-and-profit/</guid><description>&lt;h4 id="motivation--goal">Motivation &amp;amp; Goal&lt;/h4>
&lt;p>I sometimes find the admin interface's lists of instances of models
overwhelming. The filters and searching helps, but it would be nice to
get an overview of the data that is being shown. Particularly I wanted
to generate a graph based on the filters selected by the user, so that
only items displayed after a filter would be graphed.&lt;/p></description></item><item><title>Why Caktus Uses Django</title><link>https://www.caktusgroup.com/blog/2009/01/13/why-caktus-uses-django/</link><pubDate>Tue, 13 Jan 2009 15:45:31 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/01/13/why-caktus-uses-django/</guid><description>&lt;p>Here at &lt;a href="http://www.caktusgroup.com/services/" target="_blank" rel="noopener noreferrer">Caktus&lt;/a>, we use the
popular &lt;a href="http://www.djangoproject.com" target="_blank" rel="noopener noreferrer">Django&lt;/a> web framework for a lot
of our custom web application development. We don't use Django simply
because it's popular, easy to learn, or happened to be the first thing
we found. We've written web apps in PHP, Java, and Ruby on Rails--all
before we discovered Django--but were never quite satisfied. Following
are just a few of the reasons that we both enjoy working with Django and
believe it gives you (the client) the best end-product.&lt;/p></description></item><item><title>minibooks: Small Business Bookkeeping</title><link>https://www.caktusgroup.com/blog/2009/01/07/minibooks-small-business-bookkeeping/</link><pubDate>Wed, 07 Jan 2009 15:49:06 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2009/01/07/minibooks-small-business-bookkeeping/</guid><description>&lt;p>Caktus released minibooks (open-sourced under the AGPL) as a bookkeeping
package for small tech agencies. Boasting a &lt;a href="http://en.wikipedia.org/wiki/Double-entry_bookkeeping_system" target="_blank" rel="noopener noreferrer">double-entry
accounting&lt;/a>
system, &lt;a href="http://en.wikipedia.org/wiki/Customer_relationship_management" target="_blank" rel="noopener noreferrer">customer relationship management
(CRM)&lt;/a>
and transaction reconciliation, minibooks provides a clean, multiuser
web-based interface to manage simple accounting needs for small
businesses.&lt;/p></description></item><item><title>Caktus' New Web Presence</title><link>https://www.caktusgroup.com/blog/2008/10/27/caktus-new-web-presence/</link><pubDate>Mon, 27 Oct 2008 14:11:22 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2008/10/27/caktus-new-web-presence/</guid><description>&lt;p>In honor of our recent one year anniversary (August 31st), we revamped
our web presence to address a couple concerns about the original site:&lt;/p></description></item><item><title>Asterisk CDR &amp; Django integration with ODBC</title><link>https://www.caktusgroup.com/blog/2008/10/13/asterisk-cdr-django-odbc/</link><pubDate>Mon, 13 Oct 2008 14:58:09 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2008/10/13/asterisk-cdr-django-odbc/</guid><description>&lt;p>Tobias already
&lt;a href="http://www.caktusgroup.com/blog/2007/12/15/is-asterisk-more-silent-than-youd-like/" target="_blank" rel="noopener noreferrer">mentioned&lt;/a>
how Caktus uses &lt;a href="http://www.asterisk.org/" target="_blank" rel="noopener noreferrer">Asterisk&lt;/a> as our PBX. He also
mentioned how we tested various frontends both for managing the asterisk
configuration and interacting with asterisk to, for example, check our
voicemail. We were inticed by some of the client management solutions
that we could plumb up with asterisk. Caktus has a loose administration
structure, which allows us to be flexible and not have levels of
managers between clients and coders. But, this flexiblility can leave
loose ends unchecked when the person in charge of a project is
distracted for a day or two. We saw this as an opportunity where Caktus
could add a level of group accountability and use some neat technology.
We also wanted a tool that would integrate well with our current
homegrown &lt;a href="http://www.djangoproject.com" target="_blank" rel="noopener noreferrer">Django&lt;/a>ERP/CRM as well as Trac,
our prefered tool for project management. So, we decided to write some
sweet code.&lt;/p></description></item></channel></rss>