In a 31 page ruling just handed down by the US District Court, Judge Mark Pittman has determined that restrictions on using third-party web technologies are unlawful.
Upgrading Django with AI
Django 3.2 reaches its end of life in April 2024. We've been busy upgrading all of our sites to Django 4.2, the current LTS. As part of this upgrade cycle, we've begun leaning on artificial intelligence tools to see if we could decrease the time it takes for the upgrade. Happy to report we've seen a significant time savings.
How to asynchronously refresh elements in the Django admin with HTMX
Looking online for answers to the question “how do I dynamically refresh content in the Django admin?” turns up roll-your-own JavaScript solutions, possibly with the help of jQuery. Those solutions were great back in grandad’s day, but nowadays all the cool kids are using HTMX!
Siteconfig: The easy way to toggle Django apps on and off across multiple websites
Siteconfig is an open source Django package from Imaginary Landscape for quickly and easily toggling Django apps on and off across multiple websites, multiple sections within a single website, or both.
Demystifying cookie permission pop-ups: navigating CCPA and GDPR
There are two main reasons websites are popping up cookie disclosures - the CCPA and GDPR - two sets of privacy laws that may (or may not) apply to your website.
Ignorance as an asset
In 2003, Harvard Business Review published a short article entitled "Wanted: Chief Ignorance Officer" in which the author described the benefits of ignorance. Long considered a detriment, this article cataloged all the advantages of ignorance.
Multi-page Forms in Django
Multi-page, or multi-step, forms are a common way to manage complex user inputs. This technical post outlines the techniques we use to build them in Django.
The importance of randomness in online security
I recently visited the website random.org, which is a free/fee-based generator of random numbers. It's been around for a long time - since 1998. It made me revisit the concept of randomness and how oddly hard it is to achieve. Why is randomness important? It's amazing how many things rely…
How to keep all your websites in sync with scraping technology
Would you like to pull in the header and/or footer from a related but separate website for use on your own pages? Here's how.
Using HubSpot’s Custom CRM Cards Without an Integration
The marketing software company HubSpot offers a nifty feature called "custom CRM cards." The idea is that a HubSpot dashboard can send a GET request to an API that you maintain, retrieve some JSON-formatted information and render it in some "cards" alongside other data. One of our clients wished to use…
Implementing dependency management with Python Poetry
One of the biggest issues with Python (our preferred development language) is dependency management. Any individual deployment can result in minor differences in the versions of the files and libraries which make up the application. And these minor variations introduce uncertainty and randomness into our deployment process. So, we've investigated…
Healthcare content too complex, a study
A new study accepted for publication in the British Journal of General Practice asserts that the majority of general practice websites contain content well above the recommended reading level for online content. The study analyzed 3,823 pages of content scraped from 813 Scottish general practice websites. Analysis showed that 2,942 pages…
Make sure you always have the current copyright year in your footer
Whenever I go to a website, my eyes go immediately to the year. You'd be surprised how many websites say 2006 or 2002 or even 1999. At best, is demonstrates no attention to details and at worst it proclaims the site as abandoned. At Imaginary, we have our site and...
Migrate Away from cmsplugin-filer in a Few Easy Steps
Companion code for this post: https://github.com/ImaginaryLandscape/deprecate_cmsplugin_filer If you've been building projects using django CMS for any length of time, chances are you're familiar with Divio's cmsplugin-filer application which provided image, link, file, folder and video plugins for interacting with django-filer. And if you're here, chances are you're aware that cmsplugin-filer has now...
Upgrade Django 1.11 to 2.2 and django CMS 3.4 to 3.7
Through the use of the Poetry project, incremental changes, and a little luck, the Django 1.11 -> 2.2 and django CMS 3.4 -> 3.7 upgrade was a success, but not without some excessively harsh profanity.
Adding Conditional Multifactor Authentication
The ability to bypass multifactor authentication can be useful in certain use cases.
The Key(s) to Client Collaboration
Imaginary has implemented two high tech tools to foster a decidedly low tech essential for success - frequent and productive client collaboration.
Tuning Site Search for Covid-19
The recent spike in usage of the term covid-19 introduced some inconsistent results in Imaginary’s custom site search engine, iScraper, a tool which utilizes Elasticsearch as its indexing engine. We’ll take a closer look at these results and show how we corrected the problem with an Elasticsearch configuration change. iScraper...
Website Search using Django and PostgreSQL Trigrams
Over the years I've become increasingly wary of the word "easy" in software documentation. Pick a software project at random, and there's a good chance the documentation will lead off with something like "Booloogent makes the process of frobnifying your wakalixes easy!" And then you try to use the package...
The absurdity of the fight against accessible websites
2019 was an interesting year in website accessibility. The simple and elegant premise of accessibility has been pushed aside by aggressive law firms, miserly corporations and apathetic regulatory agencies. In October the Supreme Court decided not to hear the appeal of Guillermo Robles v. Domino’s Pizza LLC. The background is...