The Django shell provides an environment where developers can interact with the database via Django's ORM. While the shell is great for basic interactions, it quickly becomes laborious to work in, be it due to manual imports, having to scroll through shell history to repeat commands, or working with / viewing queries returning more than, say, 20 records. These issues, and more, can be remedied by interacting with the ORM in Jupyter notebooks, using Pandas.

All relationships end. It doesn't matter whether they are personal or professional, at some point and for many reasons, they end. No one thinks about this when the relationship is budding - everything is wonderful. There is trust, there is competence, there is relief that finally the needle can be moved forward. This overflowing optimism can cloud a vital aspect of establishing a new relationship - how to get out of it gracefully. Unless a prior vendor experience has made an impact, very little attention is given to an end-of-life scenario until end-of-life is imminent. However, with a little prenuptial preparation, end-of-life drama and uncertainty can be greatly eased.

In February 2017, Google announced its plans to discontinue its Google Site Search product. Those clients of Imaginary Landscape who had relied on Google to provide their users with a search engine service for their website looked to us for a new solution. Finding no obvious equivalent replacement, we decided to create our own website scraper and accompanying search app.