<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python on Caktus Group</title><link>https://www.caktusgroup.com/tags/python/</link><description>Recent content in Python 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/python/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>PydanticAI Agents Intro</title><link>https://www.caktusgroup.com/blog/2025/12/16/pydanticai-agents-intro/</link><pubDate>Tue, 16 Dec 2025 08:00:00 -0500</pubDate><guid>https://www.caktusgroup.com/blog/2025/12/16/pydanticai-agents-intro/</guid><description>&lt;p>In previous posts, we explored function calling and how it enables models to interact with external tools. However, manually defining schemas and managing the request/response loop can get tedious as an application grows. Agent frameworks can help here.&lt;/p></description></item><item><title>LLM Basics: Ollama Function Calling</title><link>https://www.caktusgroup.com/blog/2025/12/03/learning-llm-basics-ollama-function-calling/</link><pubDate>Wed, 03 Dec 2025 19:42:14 +0300</pubDate><guid>https://www.caktusgroup.com/blog/2025/12/03/learning-llm-basics-ollama-function-calling/</guid><description>&lt;p>In our &lt;a href="https://www.caktusgroup.com/blog/2025/12/01/learning-llm-basics-openai-function-calling/">previous post&lt;/a>, we introduced function calling and learned how to do it with OpenAI&amp;rsquo;s LLMs.
In this post, we&amp;rsquo;ll call the same &lt;code>cactify_name&lt;/code> function from that post using Meta&amp;rsquo;s
Llama 3.2 model, installed locally using Ollama. The techniques in this post should also work
with &lt;a href="https://ollama.com/search?c=tools" target="_blank" rel="noopener noreferrer">other Ollama models that support function-calling&lt;/a>.&lt;/p></description></item><item><title>LLM Basics: OpenAI Function Calling</title><link>https://www.caktusgroup.com/blog/2025/12/01/learning-llm-basics-openai-function-calling/</link><pubDate>Mon, 01 Dec 2025 10:00:00 -0500</pubDate><guid>https://www.caktusgroup.com/blog/2025/12/01/learning-llm-basics-openai-function-calling/</guid><description>&lt;p>In our &lt;a href="https://www.caktusgroup.com/blog/2025/10/28/learning-llm-basics-ollama/">previous post&lt;/a>, we explored how to send text to an LLM and receive a text response in return. That is useful for chatbots, but often we need to integrate LLMs with other systems. We may want the model to query a database, call an external API, or perform calculations.&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>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>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 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>Getting Started with Dagster</title><link>https://www.caktusgroup.com/blog/2024/12/09/getting-started-dagster/</link><pubDate>Mon, 09 Dec 2024 23:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2024/12/09/getting-started-dagster/</guid><description>&lt;p>Recently, Caktus has been using Tailscale to manage VPN connections
between Android tablets and a central server. We wanted to report on the
devices connected to the network using the Tailscale API. While we could
use tools like &lt;a href="https://docs.celeryq.dev/en/stable/" target="_blank" rel="noopener noreferrer">Celery&lt;/a> to fetch
data from the API and load it into a database&amp;mdash;given its widespread use
in the Django ecosystem&amp;mdash;we also wanted to explore other options.&lt;/p></description></item><item><title>Analyze data with SQL window functions</title><link>https://www.caktusgroup.com/blog/2023/04/05/analyze-data-sql-window-functions/</link><pubDate>Wed, 05 Apr 2023 14:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2023/04/05/analyze-data-sql-window-functions/</guid><description>&lt;p>We regularly use tools like &lt;a href="https://www.postgresql.org/" target="_blank" rel="noopener noreferrer">PostgreSQL&lt;/a>,
&lt;a href="https://pandas.pydata.org/" target="_blank" rel="noopener noreferrer">Pandas&lt;/a>, and &lt;a href="https://jupyter.org/" target="_blank" rel="noopener noreferrer">Jupyter
Notebooks&lt;/a> to analyze data here at Caktus.
Recently, we were reviewing North Carolina traffic stop data for the &lt;a href="https://nccopwatch.org/" target="_blank" rel="noopener noreferrer">NC
CopWatch&lt;/a> project and had the opportunity to
use &lt;a href="https://www.postgresql.org/docs/current/tutorial-window.html" target="_blank" rel="noopener noreferrer">PostgreSQL's window
functions&lt;/a>,
which are helpful when aggregating data.&lt;/p></description></item><item><title>Begin your Data Analysis Journey with Pandas and Seaborn</title><link>https://www.caktusgroup.com/blog/2023/03/28/begin-your-data-analysis-journey-pandas-and-seaborn/</link><pubDate>Tue, 28 Mar 2023 14:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2023/03/28/begin-your-data-analysis-journey-pandas-and-seaborn/</guid><description>&lt;p>Lately, there has been a lot of talk about scoring in the NBA because
LeBron James surpassed Kareem Abdul-Jabbar with 38,390 career points. I
have noticed that there is not much discussion about post-season
scoring, so I searched for this
&lt;a href="https://www.kaggle.com/datasets/isaienkov/nba-top-25-alltime-playoff-scorers" target="_blank" rel="noopener noreferrer">dataset&lt;/a>
on Kaggle (nba_playoffs.csv) which contains the top 25 all-time
post-season scoring leaders. Post-season scoring is its own beast. Since
teams face one opponent multiple times in a row, they can better
concentrate on the opposing team and its individual players,
particularly star players. This results in improved defenses across the
board. However, the post-season also means players improving their game.
What is the result of improved defenses and players alike? Only elite
players score consistently and thus, only the NBA's elite are on this
list. This post will first examine the dataset using &lt;strong>Pandas&lt;/strong> and then
use &lt;strong>Seaborn&lt;/strong> to graph such data.&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>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 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>Highlights from PyCon US 2021</title><link>https://www.caktusgroup.com/blog/2021/06/24/pycon-us-2021/</link><pubDate>Thu, 24 Jun 2021 17:10:44 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/06/24/pycon-us-2021/</guid><description>&lt;p>I had the opportunity to attend &lt;a href="https://us.pycon.org/2021/" target="_blank" rel="noopener noreferrer">PyCon US&lt;/a>,
which was held entirely virtually. Though an in-person experience is
impossible to replicate (the last time I attended PyCon in person was in
2018), I found that many aspects of the live conference were still
available in an online format. Here are some of my highlights:&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>PyCon US 2021 is Around the Corner</title><link>https://www.caktusgroup.com/blog/2021/04/30/pycon-us-2021-around-corner/</link><pubDate>Fri, 30 Apr 2021 18:23:52 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/04/30/pycon-us-2021-around-corner/</guid><description>&lt;p>PyCon US 2021 will be completely virtual this year. For the first time ever you’ll be able to enjoy this popular event from the comfort of your favorite armchair!&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>Automating PyPI releases with Github Actions</title><link>https://www.caktusgroup.com/blog/2021/02/11/automating-pypi-releases/</link><pubDate>Thu, 11 Feb 2021 14:37:42 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/02/11/automating-pypi-releases/</guid><description>&lt;p>At Caktus, we maintain some &lt;a href="https://github.com/caktus" target="_blank" rel="noopener noreferrer">open source packages&lt;/a>, which are usually pieces of code that we&amp;rsquo;ve found useful when building an application, and we figure they might be useful to others. From time to time, those open source projects need a little maintenance: Maybe a bug fix has been provided from a community member, or we need to update to support a new version of Python or Django. I always hesitate to do this because I know there are multiple steps involved to ensure that any updates are properly tested, documented, versioned, and released. One of my silly blockers is that I always seem to forget how to upload a release to PyPI, which is the Python Package Index, a repository of software for Python. I call it silly because it shouldn’t really be a blocker, seeing how simple it actually is, but I still forget it each time and have to walk through the documentation step by step to make sure I do it properly. I recently found a tool that helps with this process.&lt;/p></description></item><item><title>My Python Development Environment</title><link>https://www.caktusgroup.com/blog/2021/01/14/python-development-environment/</link><pubDate>Thu, 14 Jan 2021 14:40:35 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2021/01/14/python-development-environment/</guid><description>&lt;p>This is how to set up the One True Development Environment for Python.&lt;/p>
&lt;p>Haha, just kidding, there is no such thing. Here's one way to do it
that works for me, and an attempt to explain the benefits of doing it
this way.&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>What to do About Email: How to Extract Data from Microsoft PST Files</title><link>https://www.caktusgroup.com/blog/2020/03/19/email-extract-data-microsoft-pst-files/</link><pubDate>Thu, 19 Mar 2020 12:27:52 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2020/03/19/email-extract-data-microsoft-pst-files/</guid><description>&lt;p>In my previous line of work as an archivist, the question of what to do
about email archives was an ongoing and deeply-considered topic. Email
is everywhere. Yes, even Gen Z and millennials use it, despite thousands
of think pieces that would have you believe that the old ways are giving
way to business meetings conducted on fixed-gear bicycles, over avocado
toast and Instagram.&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>A Review of ReportLab: PDF Processing with Python</title><link>https://www.caktusgroup.com/blog/2019/08/28/review-reportlab-pdf-processing-python/</link><pubDate>Wed, 28 Aug 2019 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/08/28/review-reportlab-pdf-processing-python/</guid><description>&lt;p>These days it&amp;rsquo;s easy to get swept up into the buzz around Python&amp;rsquo;s
strengths as a data science package, but Python is also great for the
more mundane, business process side of computing. One of the most
important business processes is generating reports, and the most used
and venerable form of report is the PDF. Python has a great library for
generating and manipulating PDFs:
&lt;a href="https://pypi.org/project/reportlab/" target="_blank" rel="noopener noreferrer">ReportLab&lt;/a>. I recently read more
about this extremely useful library in ReportLab: PDF Processing with
Python, by Michael Driscoll. With a few caveats, it&amp;rsquo;s an excellent
resource.&lt;/p></description></item><item><title>Book Review: Creating GUI Applications with wxPython</title><link>https://www.caktusgroup.com/blog/2019/07/10/book-review-gui-applications/</link><pubDate>Wed, 10 Jul 2019 12:22:06 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/07/10/book-review-gui-applications/</guid><description>&lt;p>I enjoyed working through the book &lt;a href="https://leanpub.com/creatingapplicationswithwxpython" target="_blank" rel="noopener noreferrer">Creating GUI Applications with wxPython&lt;/a> by Michael Driscoll, learning various techniques for programming GUI applications in Python using wxPython.&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>Our Favorite PyCon 2019 Presentations</title><link>https://www.caktusgroup.com/blog/2019/06/11/favorite-pycon-2019-presentations/</link><pubDate>Tue, 11 Jun 2019 18:31:31 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/06/11/favorite-pycon-2019-presentations/</guid><description>&lt;p>&lt;em>Above: A view of the busy exhibit hall. Photo copyright © 2019 by Sean Harrison. All rights reserved.&lt;/em>&lt;/p>
&lt;p>&lt;a href="https://us.pycon.org/2019/" target="_blank" rel="noopener noreferrer">PyCon 2019&lt;/a> attracted 3,393 attendees, including a group of six Cakti. When we weren’t networking with attendees at our booth, we attended some fascinating presentations. Below are some of our favorites. You can watch these talks and more on the &lt;a href="https://www.youtube.com/channel/UCxs2IIVXaEHHA4BtTiWZ2mQ/videos" target="_blank" rel="noopener noreferrer">PyCon 2019 YouTube channel&lt;/a>.&lt;/p></description></item><item><title>Be Quick or Eat Potatoes: A Newbie’s Guide to PyCon</title><link>https://www.caktusgroup.com/blog/2019/05/23/newbies-guide-pycon/</link><pubDate>Thu, 23 May 2019 20:49:07 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/05/23/newbies-guide-pycon/</guid><description>&lt;p>&lt;em>Pictured: I traveled to Cleveland, OH, for PyCon 2019, where I got this shot of the city skyline.&lt;/em>&lt;/p>
&lt;p>This year I attended PyCon for the first time. It’s rather amazing that I haven’t been before, since I’ve been using Python professionally for over 15 years. &lt;a href="https://us.pycon.org/2019/" target="_blank" rel="noopener noreferrer">PyCon 2019&lt;/a> was held in Cleveland from May 1–9. There was so much to take in, and there are so many good things to say about it. It was a fantastic experience. But rather than provide a “mission report: 2019” a la &lt;em>Winter Soldier&lt;/em>, I thought I’d do something more useful — write a guide to PyCon from a newbie perspective. Here are six lessons I learned from my first PyCon.&lt;/p></description></item><item><title>We're Eagerly Preparing for PyCon 2019!</title><link>https://www.caktusgroup.com/blog/2019/04/11/pycon-2019/</link><pubDate>Thu, 11 Apr 2019 13:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2019/04/11/pycon-2019/</guid><description>&lt;p>&lt;em>Pictured: The final rush is on! Staff quickly check materials for our PyCon booth.&lt;/em>&lt;/p>
&lt;p>&lt;a href="https://us.pycon.org/2019/" target="_blank" rel="noopener noreferrer">PyCon 2019&lt;/a> is almost here, and we’re excited to continue to sponsor this premier Python event, which takes place in Cleveland, OH, from May 1 - 9. PyCon attracts attendees from around the world, and for the first time, the conference will include a &lt;a href="https://us.pycon.org/2019/hatchery/charlas/" target="_blank" rel="noopener noreferrer">track of Spanish talks&lt;/a>.&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>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>My New Year’s Resolution: Work Less to Code Better</title><link>https://www.caktusgroup.com/blog/2018/12/27/new-years-resolution-work-less-code-better/</link><pubDate>Thu, 27 Dec 2018 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/12/27/new-years-resolution-work-less-code-better/</guid><description>&lt;p>You may look at my job title (or picture) and think, “Oh, this is easy, he’s going to resolve to stand up at his desk more.” Well, you’re not wrong, that is one of my resolutions, but I have an even more important
one. I, Jeremy Gibson, resolve to do less work in 2019. You’re probably thinking that it’s bold to admit this on my employer’s blog. Again, you’re not wrong, but I think I can convince them that the less work I
do, the more clear and functional my code will become. My resolution has three components.&lt;/p></description></item><item><title>How to Fix your Python Code's Style</title><link>https://www.caktusgroup.com/blog/2018/12/10/how-to-fix-python-code-style/</link><pubDate>Mon, 10 Dec 2018 12:00:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/12/10/how-to-fix-python-code-style/</guid><description>&lt;p>Sometimes we inherit code that doesn't follow the style guidelines we
prefer when we're writing new code. We could just run
&lt;a href="http://flake8.pycqa.org/en/latest/" target="_blank" rel="noopener noreferrer">flake8&lt;/a> on the whole codebase and
fix everything before we continue, but that's not necessarily the best
use of our time.&lt;/p></description></item><item><title>Better Python Dependency Management with pip-tools</title><link>https://www.caktusgroup.com/blog/2018/09/18/python-dependency-management-pip-tools/</link><pubDate>Tue, 18 Sep 2018 14:37:29 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/09/18/python-dependency-management-pip-tools/</guid><description>&lt;p>I recently looked into whether I could use
&lt;a href="https://github.com/jazzband/pip-tools" target="_blank" rel="noopener noreferrer">pip-tools&lt;/a> to improve my
workflow around projects' Python dependencies. My conclusion was that
pip-tools would help on some projects, but it wouldn't do everything I
wanted, and I couldn't use it everywhere. (I tried pip-tools version
2.0.2 in August 2018. If there are newer versions, they might fix some
of the things I ran into when trying pip-tools.)&lt;/p></description></item><item><title>Stories of Security (PyCon 2018 Must-See Talk Series)</title><link>https://www.caktusgroup.com/blog/2018/06/13/pycon-2018-must-see-talk-series/</link><pubDate>Wed, 13 Jun 2018 13:50:52 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/06/13/pycon-2018-must-see-talk-series/</guid><description>&lt;p>&lt;em>This is the second post in the 2018 edition of our annual &lt;a href="https://www.caktusgroup.com/blog/tags/pycon-must-see-series/">PyCon Must-See Series&lt;/a>, which highlights 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>Love Your Bugs (PyCon 2018 Must-See Talk Series)</title><link>https://www.caktusgroup.com/blog/2018/05/23/love-your-bugs-pycon-2018-must-see-talk-series/</link><pubDate>Wed, 23 May 2018 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/05/23/love-your-bugs-pycon-2018-must-see-talk-series/</guid><description>&lt;p>&lt;em>Welcome to the 2018 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>PyCon 2018 Recap</title><link>https://www.caktusgroup.com/blog/2018/05/21/pycon-2018-recap/</link><pubDate>Mon, 21 May 2018 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/05/21/pycon-2018-recap/</guid><description>&lt;h3 id="making-connections">Making connections&lt;/h3>
&lt;p>Before the conference, our team listed “making connections” as one of the main reasons to attend PyCon. We certainly did that, welcoming visitors to the booth and catching up with friends old and new.&lt;/p></description></item><item><title>Caktus at PyCon 2018</title><link>https://www.caktusgroup.com/blog/2018/04/09/caktus-pycon-2018/</link><pubDate>Mon, 09 Apr 2018 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2018/04/09/caktus-pycon-2018/</guid><description>&lt;p>We’re one month away from PyCon 2018 and are looking forward to this year’s event in Cleveland, OH. Caktus is proud to sponsor once again and will be in attendance with a booth.&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>Readability Counts (PyCon 2017 Must-See Talk 6/6)</title><link>https://www.caktusgroup.com/blog/2017/07/10/readability-counts-pycon-2017-must-see-talk-66/</link><pubDate>Mon, 10 Jul 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/07/10/readability-counts-pycon-2017-must-see-talk-66/</guid><description>&lt;p>&lt;em>Part 6 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>Python Tool Review: Using PyCharm for Python Development - and More</title><link>https://www.caktusgroup.com/blog/2017/07/05/python-tool-review-using-pycharm-python-development-and-more/</link><pubDate>Wed, 05 Jul 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/07/05/python-tool-review-using-pycharm-python-development-and-more/</guid><description>&lt;p>Back in 2011, I wrote a blog post on &lt;a href="https://www.caktusgroup.com/blog/2011/08/31/getting-started-using-python-eclipse/">using Eclipse for Python
Development&lt;/a>.&lt;/p>
&lt;p>I've never updated that post, and it's probably terribly outdated by
now. But there's a good reason for that - I haven't used Eclipse in
years. Not long after that post, I came across
&lt;a href="https://www.jetbrains.com/pycharm/" target="_blank" rel="noopener noreferrer">PyCharm&lt;/a>, and I haven't really
looked back.&lt;/p></description></item><item><title>Requests, Under the Hood (PyCon 2017 Must-See Talk 5/6)</title><link>https://www.caktusgroup.com/blog/2017/07/03/requests-under-hood-pycon-2017-must-see-talk-56/</link><pubDate>Mon, 03 Jul 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/07/03/requests-under-hood-pycon-2017-must-see-talk-56/</guid><description>&lt;p>&lt;em>Part five 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>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>5 Ways to Deploy Your Python Web App in 2017 (PyCon 2017 Must-See Talk 4/6)</title><link>https://www.caktusgroup.com/blog/2017/06/26/5-ways-deploy-your-python-web-app-2017-pycon-2017-must-see-talks-46/</link><pubDate>Mon, 26 Jun 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/06/26/5-ways-deploy-your-python-web-app-2017-pycon-2017-must-see-talks-46/</guid><description>&lt;p>&lt;em>Part four 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>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>Decorators, Unwrapped: How Do They Work? (PyCon 2017 Must-See Talk 1/6)</title><link>https://www.caktusgroup.com/blog/2017/06/05/decorators-unwrapped-how-do-they-work-pycon-2017-must-see-talk-16/</link><pubDate>Mon, 05 Jun 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/06/05/decorators-unwrapped-how-do-they-work-pycon-2017-must-see-talk-16/</guid><description>&lt;p>&lt;em>Part one 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>Subtests are the Best</title><link>https://www.caktusgroup.com/blog/2017/05/29/subtests-are-best/</link><pubDate>Mon, 29 May 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/05/29/subtests-are-best/</guid><description>&lt;h2 id="subtests-are-the-best">Subtests are the best&lt;/h2>
&lt;p>Testing our code is important. Because developers write bugs, it&amp;rsquo;s
valuable to catch and correct them before the code gets to production so
our apps work as they should. Specifically, we want tests that are DRY
(Don&amp;rsquo;t Repeat Yourself), thorough, and readable. Though there are many
ways to try to accomplish these goals, subtests make each of them
easier. If you&amp;rsquo;re not using subtests in your test classes, you probably
should be.&lt;/p></description></item><item><title>PyCon 2017 Recap</title><link>https://www.caktusgroup.com/blog/2017/05/24/pycon-2017-recap/</link><pubDate>Wed, 24 May 2017 13:30:00 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2017/05/24/pycon-2017-recap/</guid><description>&lt;p>Caktus attended PyCon 2017 in Portland from May 18-21. It was the first PyCon for some, while others were PyCon veterans. All of us were looking forward to the opportunity to hear some great talks and make or renew connections in the Python community.&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>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>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>Python Nordeste 2016 Recap</title><link>https://www.caktusgroup.com/blog/2016/08/15/python-nordeste-2016-recap/</link><pubDate>Mon, 15 Aug 2016 15:52:15 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/08/15/python-nordeste-2016-recap/</guid><description>&lt;p>&lt;em>Image via &lt;a href="https://twitter.com/PythonNordeste" target="_blank" rel="noopener noreferrer">@pythonnordeste&lt;/a> &lt;a href="https://photos.google.com/share/AF1QipObas3hoK7856ocD15R0SlRKrjLedhlXgHS_PO_ekLR4-OMGbkxvMHbcqlnL12g-A?key=QXRuYmNPWlZNME81R1JlMjFkV05seUhCQmRkdmpR" target="_blank" rel="noopener noreferrer">#pyselfie&lt;/a>&lt;/em>&lt;/p>
&lt;p>I don’t know anyone there. I don’t know the language. What about this Zika virus? What about this political unrest? These were some of the doubts and fears racing through my mind at the start of my trip. I had barely settled back home from my trip from PyCon US when it was time to start making the trip to Python Nordeste. It’s a long set of flights to Teresina in the northeast region of Brazil, and I was alone.&lt;/p></description></item><item><title>Bake the Cookies (PyCon 2016 Must-See Talk: 5/6)</title><link>https://www.caktusgroup.com/blog/2016/08/10/bake-cookies-pycon-2016-must-see-talk-56/</link><pubDate>Wed, 10 Aug 2016 17:29:12 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/08/10/bake-cookies-pycon-2016-must-see-talk-56/</guid><description>&lt;p>&lt;em>Part five of six in our annual &lt;a href="https://www.caktusgroup.com/blog/tags/PyCon%20Must%20See%20Series/">PyCon Must-See Series&lt;/a>, a weekly highlight of talks our staff especially loved at PyCon. With so many fantastic talks, it’s hard to know where to start, so here’s our short list.&lt;/em>&lt;/p></description></item><item><title>How I Built a Power Debugger (PyCon 2016 Must-See Talk: 3/6)</title><link>https://www.caktusgroup.com/blog/2016/07/27/how-i-built-power-debugger-pycon-2016-must-see-talk-36/</link><pubDate>Wed, 27 Jul 2016 14:15:27 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/07/27/how-i-built-power-debugger-pycon-2016-must-see-talk-36/</guid><description>&lt;p>&lt;em>Part three of six in our annual &lt;a href="https://www.caktusgroup.com/blog/tags/PyCon%20Must%20See%20Series/">PyCon Must-See Series&lt;/a>, a weekly highlight of talks our staff especially loved at PyCon. With so many fantastic talks, it’s hard to know where to start, so here’s our short list.&lt;/em>&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>Better Testing With Less Code (PyCon 2016 Must-See Talk: 2/6)</title><link>https://www.caktusgroup.com/blog/2016/07/13/better-testing-less-code-pycon-2016-must-see-talk-26/</link><pubDate>Wed, 13 Jul 2016 13:37:37 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/07/13/better-testing-less-code-pycon-2016-must-see-talk-26/</guid><description>&lt;p>&lt;em>Part two of six in our annual &lt;a href="https://www.caktusgroup.com/blog/tags/PyCon%20Must%20See%20Series/">PyCon Must-See Series&lt;/a>, a weekly highlight of talks our staff especially loved at PyCon. With so many fantastic talks, it’s hard to know where to start, so here’s our short list.&lt;/em>&lt;/p></description></item><item><title>From Developer to Manager by Sean O'Connor (PyCon 2016 Must-See Talk: 1/6)</title><link>https://www.caktusgroup.com/blog/2016/07/08/developer-manager-sean-oconnor-pycon-2016-must-see-talk-16/</link><pubDate>Fri, 08 Jul 2016 17:56:11 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2016/07/08/developer-manager-sean-oconnor-pycon-2016-must-see-talk-16/</guid><description>&lt;p>&lt;em>Part one of six in our annual &lt;a href="https://www.caktusgroup.com/blog/tags/PyCon%20Must%20See%20Series/">PyCon Must-See Series&lt;/a>, a weekly highlight of talks our staff especially loved at PyCon. With so many fantastic talks, it’s hard to know where to start, so here’s our short list.&lt;/em>&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>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>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>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>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>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>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>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>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>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>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>Beyond PEP 8 by Raymond Hettinger (PyCon 2015 Must-See Talk: 2/6)</title><link>https://www.caktusgroup.com/blog/2015/05/05/pycon-2015-must-see-talk-beyond-pep-8-raymond-hettinger-26/</link><pubDate>Tue, 05 May 2015 12:10:53 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/05/05/pycon-2015-must-see-talk-beyond-pep-8-raymond-hettinger-26/</guid><description>&lt;p>&lt;em>Part two 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 think everyone who codes in any language and uses any automated PEP-8 or linter sort of code checker should watch this talk. Unfortunately to go into any detail on what I learned (or really was reminded of) would ruin the effect of actually watching the talk. I&amp;rsquo;d encourage everyone to watch it. I came away from the talk wanting to figure out a way to incorporate its lesson into our Caktus development practices.&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>PyCon 2015 Ticket Giveaway</title><link>https://www.caktusgroup.com/blog/2015/02/24/pycon-2015-ticket-giveaway/</link><pubDate>Tue, 24 Feb 2015 21:43:36 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2015/02/24/pycon-2015-ticket-giveaway/</guid><description>&lt;p>Caktus is giving away a PyCon 2015 ticket, valued at $350. We love going to &lt;a href="https://us.pycon.org/2015/" target="_blank" rel="noopener noreferrer">PyCon&lt;/a> every year. It’s the largest gathering of developers using &lt;a href="http://www.nature.com/news/programming-pick-up-python-1.16833" target="_blank" rel="noopener noreferrer">Python&lt;/a>, the open source programming language that Caktus relies on. This year, it’ll be held April 8th-16th at the beautiful Palais des congrès de Montréal (the inspiration we used to &lt;a href="http://pycon.blogspot.com/2015/01/a-look-at-how-caktus-group-built-pycon.html" target="_blank" rel="noopener noreferrer">design the website&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>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>PyOhio Recap: Celery with Python</title><link>https://www.caktusgroup.com/blog/2014/08/11/PyOhio-Recap-Celery-with-Python/</link><pubDate>Mon, 11 Aug 2014 11:07:39 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/08/11/PyOhio-Recap-Celery-with-Python/</guid><description>&lt;p>&lt;a href="http://www.caktusgroup.com/about/caleb-smith" target="_blank" rel="noopener noreferrer">Caleb Smith&lt;/a> recently gave a talk, “Intro to Celery,” at PyOhio (video below). Celery is a pretty &lt;a href="http://www.caktusgroup.com/blog/search/?q=celery" target="_blank" rel="noopener noreferrer">popular topic&lt;/a> for us here at Caktus. We use it often in our client work and find it very handy. So we were happy Caleb was out in the world, promoting its use. We sat down with him to hear more about &lt;a href="http://www.pyohio.org/" target="_blank" rel="noopener noreferrer">PyOhio&lt;/a> and Celery.&lt;/p></description></item><item><title>Website Redesign for PyCon 2015</title><link>https://www.caktusgroup.com/blog/2014/07/31/django-python-website-redesign-pycon-2015/</link><pubDate>Thu, 31 Jul 2014 20:14:48 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/07/31/django-python-website-redesign-pycon-2015/</guid><description>&lt;p>PyCon 2015’s website launched today (a day early!). PyCon is the premiere conference for the Python community and one we look forward to attending every year. We’re honored that the Python Software Foundation returned to us this year to revamp the site. We were especially happy to work again with organizer-extraordinaires Ewa Jodlowska and Diana Clarke.&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>Caleb and Rebecca at this Month’s Girl Develop It Intro to Python Class</title><link>https://www.caktusgroup.com/blog/2014/04/25/caleb-and-rebecca-months-girl-develop-it-intro-python-class/</link><pubDate>Fri, 25 Apr 2014 17:35:45 +0000</pubDate><guid>https://www.caktusgroup.com/blog/2014/04/25/caleb-and-rebecca-months-girl-develop-it-intro-python-class/</guid><description>&lt;p>One of Caktus’ most pedagogically focused developers, Caleb Smith, will be teaching a class to a group of local budding Pythonistas tomorrow, Saturday 26th, and Caktus’ Rebecca Lovewell will be contributing as a teaching assistant. You can read more about it, and sign up via the &lt;a href="http://www.meetup.com/Girl-Develop-It-RDU/events/173715312/" target="_blank" rel="noopener noreferrer">meetup page for the event&lt;/a>. The class is run by the local chapter of Girl Develop It, a group focused on improving the landscape of women in tech via women focused (but not exclusive) educational opportunities.&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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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 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>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>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>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>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>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>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></channel></rss>