<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>PythonAnywhere News</title>
    <link>https://blog.pythonanywhere.com/</link>
    <description>Recent content on PythonAnywhere News</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 09 Mar 2026 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.pythonanywhere.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How PythonAnywhere Became a Publish Target for BeeWare Apps</title>
      <link>https://blog.pythonanywhere.com/223/</link>
      <pubDate>Mon, 09 Mar 2026 06:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/223/</guid>
      <description>&lt;h3 id=&#34;tldr&#34;&gt;tl;dr&lt;/h3&gt;&#xA;&lt;p&gt;You can now deploy &lt;a href=&#34;https://beeware.org/&#34;&gt;BeeWare&lt;/a&gt; apps as web apps on&#xA;PythonAnywhere with a single command. Install the&#xA;&lt;a href=&#34;https://github.com/pythonanywhere/pythonanywhere-briefcase-plugin&#34;&gt;pythonanywhere-briefcase-plugin&lt;/a&gt;,&#xA;run &lt;code&gt;briefcase publish web static&lt;/code&gt;, done. There&amp;rsquo;s a&#xA;&lt;a href=&#34;https://briefcase.pythonanywhere.com/&#34;&gt;step-by-step tutorial&lt;/a&gt; if you want to&#xA;try it right now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changes on PythonAnywhere Free Accounts</title>
      <link>https://blog.pythonanywhere.com/221/</link>
      <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/221/</guid>
      <description>&lt;h2 id=&#34;tldr&#34;&gt;tl;dr&lt;/h2&gt;&#xA;&lt;p&gt;Starting in January 2026, all free accounts will shift to community-powered&#xA;support instead of direct support and will have some reduced features. If you&#xA;want to upgrade, you can lock in the current $5/month (€5/month in the EU&#xA;system) Hacker plan rate before January 8 (EU) or January 15 (US). After that,&#xA;the base paid tier will be $10/month (€10/month in the EU system).&lt;/p&gt;&#xA;&lt;p&gt;If you’re currently a paying customer, you can learn more about the new pricing&#xA;tiers and guidance for current customers &lt;a href=&#34;./222/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New PythonAnywhere Plans: Updated Features and Pricing</title>
      <link>https://blog.pythonanywhere.com/222/</link>
      <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/222/</guid>
      <description>&lt;h2 id=&#34;tldr&#34;&gt;tl;dr&lt;/h2&gt;&#xA;&lt;p&gt;We&amp;rsquo;re restructuring our pricing for the first time since 2013. We’re combining&#xA;the Hacker ($5/month or €5/month in the EU system) and Web Developer ($12/month&#xA;or €12/month in the EU system) tiers into a new Developer tier ($10/month&#xA;€10/month in the EU system).&lt;/p&gt;&#xA;&lt;p&gt;These changes will start January 8 (EU) and January 15 (US). Free users who&#xA;upgrade before the change will lock in the current Hacker rate of $5/month&#xA;(€5/month in the EU system). This lets us invest in platform upgrades, better&#xA;security, and the features you&amp;rsquo;ve been requesting.&lt;/p&gt;&#xA;&lt;p&gt;Read about the broader changes to PythonAnywhere and guidance for free tier&#xA;users &lt;a href=&#34;./221/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Direct interaction of LLM chats with PythonAnywhere via the Model Context Protocol</title>
      <link>https://blog.pythonanywhere.com/220/</link>
      <pubDate>Fri, 11 Jul 2025 10:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/220/</guid>
      <description>&lt;h3 id=&#34;tldr&#34;&gt;tl;dr&lt;/h3&gt;&#xA;&lt;p&gt;Check out the &lt;a href=&#34;https://github.com/pythonanywhere/pythonanywhere-mcp-server?tab=readme-ov-file#installation&#34;&gt;instructions on&#xA;GitHub&lt;/a&gt;&#xA;and connect your Claude Desktop, GitHub Copilot, Cursor or any similar tool&#xA;supporting MCP to PythonAnywhere directly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>innit: a new system image, with Python 3.13 and Ubuntu 22.04</title>
      <link>https://blog.pythonanywhere.com/219/</link>
      <pubDate>Thu, 27 Mar 2025 13:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/219/</guid>
      <description>&lt;p&gt;If you signed up for an account on PythonAnywhere after 25 March 2025, you&amp;rsquo;ll&#xA;have Python versions 3.11, 3.12 and 3.13 available.  Additionally, the underlying operating system for&#xA;your account will be Ubuntu 22.04, rather than the 20.04 used by older accounts.&lt;/p&gt;&#xA;&lt;p&gt;If you signed up before that date, you&amp;rsquo;ll be on an older &amp;ldquo;system image&amp;rdquo; &amp;ndash;&#xA;essentially the version of the operating system and the set of installed packages&#xA;that you have access to.  You can&#xA;&lt;a href=&#34;https://help.pythonanywhere.com/pages/ChangingSystemImage&#34;&gt;switch to the new system image from the &amp;ldquo;Account&amp;rdquo; page&lt;/a&gt;,&#xA;but you may need to make changes to your code and/or virtualenvs to make&#xA;everything work &amp;ndash; there&amp;rsquo;s more information on that page.&lt;/p&gt;&#xA;&lt;p&gt;This post has more details on what&amp;rsquo;s new in the &amp;ldquo;innit&amp;rdquo; system image.  There&amp;rsquo;s a lot!&lt;/p&gt;</description>
    </item>
    <item>
      <title>We&#39;re hiring!</title>
      <link>https://blog.pythonanywhere.com/218/</link>
      <pubDate>Fri, 10 Jan 2025 14:03:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/218/</guid>
      <description>&lt;p&gt;Are you so keen on PythonAnywhere that you&amp;rsquo;d like to work with us?  We have an&#xA;open role, and the recruitment team at our parent company &lt;a href=&#34;https://www.anaconda.com/&#34;&gt;Anaconda&lt;/a&gt;&#xA;are looking for great people.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re looking for &lt;strong&gt;a senior engineer&lt;/strong&gt; with lots of experience in backend&#xA;stuff, but an interest in working across the full stack from obscure kernel wrangling,&#xA;custom Linux container-based virtualization, Django and Flask on the mid-tier,&#xA;up to TypeScript and React on the front end.  There&amp;rsquo;s even a (tiny) bit of Lua&#xA;thrown in there.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re an &lt;a href=&#34;https://en.wikipedia.org/wiki/Extreme_programming&#34;&gt;Extreme Programming&lt;/a&gt; team&#xA;so you&amp;rsquo;ll be pairing with other team members from day one.  All work is remote (bar&#xA;occasional team meetups), and we can currently hire people based in the UK.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s more detailed information about the role on the&#xA;&lt;a href=&#34;https://ats.rippling.com/en-GB/anaconda/jobs/31371521-e9fb-4004-bea0-2705044019cc&#34;&gt;official Anaconda jobs board&lt;/a&gt;,&#xA;and you can also apply there.  If you do, drop us a line at&#xA;&lt;a href=&#34;jobs@pythonanywhere.com&#34;&gt;jobs@pythonanywhere.com&lt;/a&gt; too so that we can tell the&#xA;recruitment team to pull you to the front of the queue :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improving PythonAnywhere&#39;s File Storage System</title>
      <link>https://blog.pythonanywhere.com/217/</link>
      <pubDate>Tue, 22 Oct 2024 08:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/217/</guid>
      <description>&lt;h3 id=&#34;update-2024-11-05&#34;&gt;UPDATE 2024-11-05&lt;/h3&gt;&#xA;&lt;p&gt;As of today, we have migrated all of our US storage systems over to newer infrastructure.&#xA;We&amp;rsquo;ll post again with more details about this migration once everything has had&#xA;a week or so to bed in, but since we did the equivalent migration on our EU systems&#xA;a few months back, we have had no issues at all there.  So (touch wood) we&amp;rsquo;re feeling&#xA;quietly confident :-)&lt;/p&gt;&#xA;&lt;h3 id=&#34;original-post&#34;&gt;Original post&lt;/h3&gt;&#xA;&lt;p&gt;PythonAnywhere has been around &lt;a href=&#34;https://blog.pythonanywhere.com/197/&#34;&gt;for over 10&#xA;years&lt;/a&gt;, and as our platform continues to&#xA;grow with tens of thousands of users, we&amp;rsquo;re committed to keeping it in top shape. Part&#xA;of this involves upgrading some of the older parts of our infrastructure, with a&#xA;special focus on our file storage servers &amp;ndash; some of the oldest systems we have.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Serving UTF-8 static files? Headers to the rescue (an epic tutorial)!</title>
      <link>https://blog.pythonanywhere.com/216/</link>
      <pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/216/</guid>
      <description>&lt;p&gt;Imagine there&amp;rsquo;s a PythonAnywhere user, &lt;code&gt;homer8bc&lt;/code&gt;, with poetic&#xA;inclinations. He wants to serve his newest poem (he believes it&amp;rsquo;s quite&#xA;epic) as a static text page. He&amp;rsquo;s old school — he doesn’t believe in HTML,&#xA;and as for CSS? Forget it! His friend, S. Yodos, lives in Cyme, while&#xA;&lt;code&gt;homer8bc&lt;/code&gt; resides on Ios island, so in-person communication is difficult&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Issues after system maintenance on 2024-09-05</title>
      <link>https://blog.pythonanywhere.com/215/</link>
      <pubDate>Tue, 10 Sep 2024 11:40:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/215/</guid>
      <description>&lt;h3 id=&#34;tldr&#34;&gt;tl;dr&lt;/h3&gt;&#xA;&lt;p&gt;On Thursday 5 September 2024 we performed some system maintenance.  It appeared&#xA;to have gone well, and was completed at the scheduled time (06:20 UTC), but&#xA;unfortunately there were unexpected knock-on effects that caused issues later&#xA;on in the day, and further problems on Saturday 7 September.  This post gives&#xA;the details of why we needed to perform the maintenance, what happened, and&#xA;what we will do to prevent a recurrence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Belated announcement of latest updates</title>
      <link>https://blog.pythonanywhere.com/214/</link>
      <pubDate>Wed, 21 Aug 2024 14:03:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/214/</guid>
      <description>&lt;p&gt;Here is a slightly delayed (and short) run-down of the new stuff that we&#xA;deployed recently.&lt;/p&gt;&#xA;&lt;p&gt;The main change for this update is that we have updated the underlying OS&#xA;running PythonAnywhere to Ubuntu 22.04. This is an LTS release so it will be&#xA;supported for some time to come. This will not affect user environments, but it&#xA;is setting us up for a new user environment that should be coming soon.&lt;/p&gt;&#xA;&lt;p&gt;We have also:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Started the process of updating our file servers to be more robust&lt;/li&gt;&#xA;&lt;li&gt;Improved our alerting so that we are alerted to many new forms of failure on PythonAnywhere&lt;/li&gt;&#xA;&lt;li&gt;Made some improvements to the ASGI beta systems and their documentation&lt;/li&gt;&#xA;&lt;li&gt;Fixed a number of security issues&lt;/li&gt;&#xA;&lt;li&gt;Fixed various bugs&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Postal code validation for card payments</title>
      <link>https://blog.pythonanywhere.com/213/</link>
      <pubDate>Wed, 14 Aug 2024 11:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/213/</guid>
      <description>&lt;h3 id=&#34;tldr&#34;&gt;tl;dr&lt;/h3&gt;&#xA;&lt;p&gt;We recently started validating that the postal codes used for paid PythonAnywhere accounts&#xA;match the ones that people&amp;rsquo;s banks have on file for the card used.  This has led to&#xA;some confusion, in particular because banks handle postal code validation in a&#xA;complicated way &amp;ndash; charges that fail because of this kind of error can show up&#xA;in your bank app as a payment that then disappears later, or even as a charge&#xA;followed by a refund.  This blog post is to summarise why that is, so hopefully&#xA;it will make things a bit less confusing!&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-long-version&#34;&gt;The long version&amp;hellip;&lt;/h3&gt;&#xA;&lt;p&gt;Card fraud is, sadly, a fact of life on the Internet.  If you have a website that&#xA;accepts payments, eventually someone will try to use a stolen card on it.  If&#xA;your site is online for some time, hackers might even start using you to test lists&#xA;of stolen cards &amp;ndash; that is, they don&amp;rsquo;t want to use your product in particular, they&amp;rsquo;re&#xA;just trying each of the cards to find the ones that are valid, so that they can&#xA;use them elsewhere.&lt;/p&gt;&#xA;&lt;p&gt;We recently saw an uptick in the number of these &amp;ldquo;card probers&amp;rdquo; (as we call them&#xA;internally) on PythonAnywhere.  We have processes in place to identify them, so that we can refund&#xA;all payments they get through, and report them as fraudulent to Stripe &amp;ndash; our card processor &amp;ndash; so&#xA;that the cards in question are harder for them to use on other sites. But this&#xA;takes time &amp;ndash; time which we would much rather spend on building new&#xA;features for PythonAnywhere.&lt;/p&gt;&#xA;&lt;p&gt;Looking into the recent charges, we discovered that many of them were using the wrong postal code&#xA;when testing the cards.  The probers had the numbers, the expiry dates, the CVVs, but&#xA;not the billing addresses.  So we re-introduced something that had been disabled on our&#xA;Stripe account for some time: postal code validation for payments.  You may be&#xA;wondering why it wasn&amp;rsquo;t enabled already, or why it might even be something that&#xA;anyone &lt;em&gt;would&lt;/em&gt; disable; this blog post is an introduction to why postal codes&#xA;and card payments can be more complicated than you might think.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New help page: Playwright</title>
      <link>https://blog.pythonanywhere.com/212/</link>
      <pubDate>Thu, 23 May 2024 11:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/212/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve had an increasing number of people asking us how to use&#xA;&lt;a href=&#34;https://playwright.dev/python/&#34;&gt;Playwright&lt;/a&gt; on&#xA;PythonAnywhere.  Playwright is a browser automation framework that was&#xA;developed by Microsoft; like the more-established&#xA;&lt;a href=&#34;https://www.selenium.dev/&#34;&gt;Selenium&lt;/a&gt; it&amp;rsquo;s really useful for testing&#xA;and web-scraping, and it&amp;rsquo;s getting a reputation for being a robust and fast&#xA;library for that kind of work.&lt;/p&gt;&#xA;&lt;p&gt;Getting it set up to run on PythonAnywhere is pretty easy, but you need to&#xA;do the installation slightly differently to the way it&amp;rsquo;s documented&#xA;on Playwright&amp;rsquo;s own site; user &lt;strong&gt;hcaptcha&lt;/strong&gt; on our&#xA;&lt;a href=&#34;https://www.pythonanywhere.com/forums/topic/30302/&#34;&gt;forums&lt;/a&gt; worked out&#xA;what the trick was to making it work, so now we have a&#xA;&lt;a href=&#34;https://help.pythonanywhere.com/pages/Playwright&#34;&gt;new help page&lt;/a&gt; documenting&#xA;how to do it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CPU resetting issues report: 3 - 5 May 2024</title>
      <link>https://blog.pythonanywhere.com/211/</link>
      <pubDate>Tue, 07 May 2024 15:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/211/</guid>
      <description>&lt;h3 id=&#34;tldr&#34;&gt;tl;dr&lt;/h3&gt;&#xA;&lt;p&gt;We have a number of background processes that execute periodically on&#xA;our systems; one of these is the one that resets the amount of CPU&#xA;used, so that you get a fresh allowance every day.  Early in the&#xA;morning of 2024-05-03, on our US-hosted system, that service failed&#xA;silently.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, we only realized it was not working on the morning of&#xA;2024-05-04.  Putting a fix in place required another day.&lt;/p&gt;&#xA;&lt;p&gt;At the same time, our load balancing system was experiencing a DDoS&#xA;attack by malicious bots, which led to an overall decline of&#xA;performance.&lt;/p&gt;&#xA;&lt;p&gt;For some of our users, who noticed the CPU issue, these two separate&#xA;events correlated, leading to confusion.&lt;/p&gt;&#xA;&lt;p&gt;These issues appeared only on our US-based system &amp;ndash; users on our EU&#xA;system were not affected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Five steps to create your own PythonAnywhere AI guru, on PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/210/</link>
      <pubDate>Fri, 17 Nov 2023 14:03:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/210/</guid>
      <description>&lt;p&gt;AI is the coolest thing in tech right now, but getting an AI-powered website up and running can seem pretty daunting.  Luckily, there&#xA;are a bunch of useful tools to make it easier.&lt;/p&gt;&#xA;&lt;p&gt;A while back we started seeing if we could use large language models to&#xA;provide a helpful assistant for PythonAnywhere; we found that the capabilities (and perhaps more importantly, our own AI skills) aren&amp;rsquo;t quite there yet,&#xA;but it was a lot of fun, and&#xA;it felt like it would be a good basis for a new tutorial :-)&lt;/p&gt;&#xA;&lt;p&gt;So, would you like to create your own personal PythonAnywhere guru &amp;ndash; albeit one that occasionally gets things wrong or makes things up?&#xA;This tutorial shows you how to set up a website that uses OpenAI&amp;rsquo;s libraries,&#xA;but can answer questions about our site with more in-depth knowledge than ChatGPT has on its own.  We&amp;rsquo;ll also touch on how to run&#xA;much simpler AI models on PythonAnywhere itself, without needing to use external APIs.  It&amp;rsquo;s meant as a jumping-off point &amp;ndash; you&amp;rsquo;ll build&#xA;something and understand it well enough that you can start customizing it to do something you want to do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage report 9 October 2023</title>
      <link>https://blog.pythonanywhere.com/209/</link>
      <pubDate>Wed, 11 Oct 2023 14:03:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/209/</guid>
      <description>&lt;h3 id=&#34;tldr&#34;&gt;tl;dr&lt;/h3&gt;&#xA;&lt;p&gt;On 2023-10-09 we had an unplanned outage. While we were preparing our systems for a scheduled system update the&#xA;following morning, we faced some issues. These in themselves would not have caused problems, but responding to them&#xA;resulted in the accidental termination of the old, running cluster&amp;rsquo;s machines at 15:22 UTC. To avoid additional&#xA;downtime, we decided to do the planned update to recover the service. It took longer than expected, but we were able to&#xA;get all hosted websites up and running by 17:30 UTC; unfortunately always-on tasks took longer and were only fully&#xA;working by 21:42 UTC.&lt;/p&gt;</description>
    </item>
    <item>
      <title>We&#39;re hiring!</title>
      <link>https://blog.pythonanywhere.com/208/</link>
      <pubDate>Wed, 28 Dec 2022 14:03:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/208/</guid>
      <description>&lt;p&gt;Now that we&amp;rsquo;re &lt;a href=&#34;https://www.anaconda.com/blog/anaconda-acquires-pythonanywhere&#34;&gt;part of Anaconda&lt;/a&gt;,&#xA;we&amp;rsquo;re growing the team so that we can do more, faster :-)&lt;/p&gt;&#xA;&lt;p&gt;Right now we&amp;rsquo;re looking for &lt;strong&gt;a senior engineer&lt;/strong&gt; with lots of experience in backend&#xA;stuff, but an interest in working across the full stack from obscure kernel wrangling,&#xA;custom Linux container-based virtualization, Django and Flask on the mid-tier,&#xA;up to TypeScript and React on the front end.  There&amp;rsquo;s even a (tiny) bit of Lua&#xA;thrown in there.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re an &lt;a href=&#34;https://en.wikipedia.org/wiki/Extreme_programming&#34;&gt;Extreme Programming&lt;/a&gt; team&#xA;so you&amp;rsquo;ll be pairing with other team members from day one.  All work is remote (bar&#xA;occasional team meetups), and&#xA;we can currently hire people based in the UK or in Germany.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s more detailed information about the role on the &lt;a href=&#34;https://boards.greenhouse.io/anaconda/jobs/4767148&#34;&gt;official Anaconda jobs board&lt;/a&gt;,&#xA;and you can also apply there &amp;ndash; or you can also drop us a line at &lt;a href=&#34;jobs@pythonanywhere.com&#34;&gt;jobs@pythonanywhere.com&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slightly late announcement of latest updates</title>
      <link>https://blog.pythonanywhere.com/207/</link>
      <pubDate>Wed, 07 Sep 2022 14:03:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/207/</guid>
      <description>&lt;p&gt;Updated on 25 August 2022 (US) and 9 August 2022 (EU)!&lt;/p&gt;&#xA;&lt;p&gt;Here is a slightly delayed (and short) run-down of the new stuff that we&#xA;deployed recently.&lt;/p&gt;&#xA;&lt;p&gt;The main addition for this update is a new system image.&#xA;It&amp;rsquo;s name is &amp;ldquo;haggis&amp;rdquo; and it has Python 3.10! There are also a number of new Python&#xA;packages installed. See &lt;a href=&#34;https://www.pythonanywhere.com/batteries_included/&#34;&gt;our batteries included page&lt;/a&gt;&#xA;for a full list. There are also many new system libraries installed. You can&#xA;learn about system images and how to change yours&#xA;&lt;a href=&#34;https://help.pythonanywhere.com/pages/ChangingSystemImage/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;We have also:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Updated Jupyter notebooks - updated notebooks are only available when you&#xA;are running the new &amp;ldquo;haggis&amp;rdquo; system image&lt;/li&gt;&#xA;&lt;li&gt;Fixed a number of security issues&lt;/li&gt;&#xA;&lt;li&gt;Fixed various bugs&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Our Commitment to Providing Free Accounts</title>
      <link>https://blog.pythonanywhere.com/206/</link>
      <pubDate>Fri, 26 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/206/</guid>
      <description>&lt;h2 id=&#34;update-2025-12-15&#34;&gt;Update 2025-12-15&lt;/h2&gt;&#xA;&lt;p&gt;On 2026-01-15 we introduced some changes related to free accounts&amp;rsquo; features, you&#xA;can read about them in detail &lt;a href=&#34;./221/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original post&lt;/h2&gt;&#xA;&lt;p&gt;Managing fraud and abuse of free products is a challenge that nearly every SaaS&#xA;company contends with, but too often the perceived solution is to simply end&#xA;free accounts. We&amp;rsquo;ve seen this happen time and again across the open-source&#xA;ecosystem, most recently &lt;a href=&#34;https://blog.heroku.com/next-chapter&#34;&gt;from Heroku&lt;/a&gt;,&#xA;and we fear this comes at the detriment of the community.&lt;/p&gt;&#xA;&lt;p&gt;We believe we&amp;rsquo;ve found a better way to solve this problem and are therefore&#xA;committed to maintaining free &lt;a href=&#34;https://www.pythonanywhere.com/&#34;&gt;PythonAnywhere&lt;/a&gt; accounts for the foreseeable&#xA;future. Yes, this does cost us money and we do need to handle fraud and abuse,&#xA;but over the 10 years we&amp;rsquo;ve been running we’ve found that the benefits to the&#xA;community and to the service itself outweigh the costs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>We are hiring!</title>
      <link>https://blog.pythonanywhere.com/205/</link>
      <pubDate>Wed, 03 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/205/</guid>
      <description>As you probably already know, PythonAnywhere is now part of the Anaconda family! As we expected Anaconda’s investment in PythonAnywhere will allow us to expand and improve to better serve our users. So we&amp;rsquo;re starting to grow our team, and first time since 2014 we&amp;rsquo;re officially hiring!&#xA;If you are an experienced frontend developer who wants to get their feet wet with the backend stuff, we might be looking for you.</description>
    </item>
    <item>
      <title>Anaconda Acquisition FAQs</title>
      <link>https://blog.pythonanywhere.com/204/</link>
      <pubDate>Wed, 22 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/204/</guid>
      <description>In June 2022, Anaconda announced its acquisition of PythonAnywhere. This acquisition expands Python team collaboration in the cloud and adds capabilities designed to unite teams and create access to more robust cloud resources. We’ve compiled the following list of frequently asked questions to aid users in navigating the transition.&#xA;&amp;ndash; Will this affect my PythonAnywhere account?&#xA;For now, it won’t! There are no plans to change PythonAnywhere user accounts, and you can continue to use yours as usual without interruption.</description>
    </item>
    <item>
      <title>File storage security update</title>
      <link>https://blog.pythonanywhere.com/203/</link>
      <pubDate>Wed, 16 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/203/</guid>
      <description>Last Wednesday, a security researcher working under our bug bounty program found a way that they could access one account&amp;rsquo;s file storage from another by using the &amp;ldquo;Dirty Pipe&amp;rdquo; Linux kernel vulnerability. We put a mitigation system in place to stop that from happening, and then on Thursday we were able to patch the underlying issue. On Friday, another researcher found a similar issue, which the mitigation system we&amp;rsquo;d put in place originally made relatively harmless &amp;ndash; we were able to patch that one within minutes.</description>
    </item>
    <item>
      <title>Accessing the files API using our new CLI tool</title>
      <link>https://blog.pythonanywhere.com/202/</link>
      <pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/202/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://pypi.org/project/pythonanywhere/0.10.1/&#34;&gt;new release&lt;/a&gt; of the &lt;code&gt;pythonanywhere&lt;/code&gt; helper scripts package introduces&#xA;new commands covering our &lt;a href=&#34;https://help.pythonanywhere.com/pages/API/#files&#34;&gt;files API&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>More secure websites on PythonAnywhere: sunsetting TLS 1.0 and 1.1</title>
      <link>https://blog.pythonanywhere.com/201/</link>
      <pubDate>Fri, 12 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/201/</guid>
      <description>&lt;p&gt;As of this week, websites hosted on PythonAnywhere using HTTPS will only be accessible using&#xA;modern versions of TLS (the encryption protocol on which HTTPS is based) by default.  This&#xA;will make them all more secure.&lt;/p&gt;&#xA;&lt;p&gt;We can still support older versions of TLS for custom domains if you need to support them, but&#xA;you&amp;rsquo;ll need to get in touch with us to get it set up.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve written a &lt;a href=&#34;https://help.pythonanywhere.com/pages/TLSVersionSupport&#34;&gt;help page&lt;/a&gt; with&#xA;the background &amp;ndash; please let us know in the comments if there&amp;rsquo;s anything confusing there!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Understanding multiple web workers and multiple users of your website</title>
      <link>https://blog.pythonanywhere.com/200/</link>
      <pubDate>Fri, 29 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/200/</guid>
      <description>&lt;p&gt;Over the years, we&amp;rsquo;ve found that one regular source of confusion for people who&#xA;are just getting started with web development is how to handle what we call &amp;ldquo;global state&amp;rdquo;.&#xA;We&amp;rsquo;ve written &lt;a href=&#34;https://help.pythonanywhere.com/pages/GlobalStateAndWebApps&#34;&gt;a help page explaining how to solve problems like this&lt;/a&gt;&#xA;and wanted to expand on it here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Our October system update</title>
      <link>https://blog.pythonanywhere.com/199/</link>
      <pubDate>Wed, 20 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/199/</guid>
      <description>&lt;p&gt;On 6 October we upgraded our EU-based systems to the latest version of our platform, and today, 20&#xA;October, we did the same upgrade on our US-based system.  There are a bunch of&#xA;changes to report!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Async work in Web Apps or – Have Your Cake and Eat It Too</title>
      <link>https://blog.pythonanywhere.com/198/</link>
      <pubDate>Thu, 30 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/198/</guid>
      <description>&lt;h2 id=&#34;update-2025-12-15&#34;&gt;Update 2025-12-15&lt;/h2&gt;&#xA;&lt;p&gt;On 2026-01-15 we introduced some changes related to free accounts&amp;rsquo; features, you&#xA;can read about them in detail &lt;a href=&#34;./221/&#34;&gt;here&lt;/a&gt;.  The original post relies on&#xA;accessibility of MySQL databases for all accounts, however it stil can be&#xA;followed on a free account by using an SQLite database instead.&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original post&lt;/h2&gt;&#xA;&lt;p&gt;This post is intended for users who begin their adventure with web&#xA;applications.  You&amp;rsquo;ll find below how to structure a web app that relies on&#xA;heavy processing of the input data &amp;ndash; processing that takes so long that&#xA;you can&amp;rsquo;t do it inside a request handler with a five-minute timeout, or at&#xA;least so long that you don&amp;rsquo;t want to risk slowing down your website by&#xA;doing it inside the website&amp;rsquo;s own code.  You want it to happen in the&#xA;background.  You&amp;rsquo;ll see an example implementing some hints from the &lt;a href=&#34;https://help.pythonanywhere.com/pages/AsyncInWebApps/&#34;&gt;&amp;ldquo;Async&#xA;work in Web apps&amp;rdquo; help page&lt;/a&gt;, which involve writing a &lt;code&gt;jQuery&lt;/code&gt; script polling&#xA;simple API endpoint communicating with a database updated by an external&#xA;script (so there will be some &lt;code&gt;sqlalchemy&lt;/code&gt; stuff too).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ten years on</title>
      <link>https://blog.pythonanywhere.com/197/</link>
      <pubDate>Thu, 05 Aug 2021 08:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/197/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;./5/&#34;&gt;Ten years ago today&lt;/a&gt;, on the blog for Project Dirigible, we announced that we&amp;rsquo;d recently&#xA;launched a new site called PythonAnywhere.  It almost didn&amp;rsquo;t happen!  The project&#xA;we were working on was something completely different, and it was only when we looked at how it was being&#xA;used that we realised that it held the seed of a much better idea.&lt;/p&gt;&#xA;&lt;p&gt;Project Dirigible was an online spreadsheet,&#xA;based on Python.  Unlike a traditional spreadsheet, where cells can hold only numbers, dates and text,&#xA;it supported any Python type, so a cell could contain a list, an object, a numpy array, or even a function&#xA;(so, if you don&amp;rsquo;t value your sanity very highly, you could write a formula like this: &lt;code&gt;=A1(A2.value, A3[6], A4(A5))&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;d been hoping that Dirigible would be the breakout success that Resolver One, our desktop Pythonic&#xA;spreadsheet, had never been, and would help us free the world from the tyranny of Excel.&#xA;It was getting some interest, with a reasonable number of people signing up and using it, but we&amp;rsquo;d discovered&#xA;something odd:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When we asked Dirigible&amp;rsquo;s beta testers what they were using it for, a surprising number said that it was&#xA;for general Python development online. They weren&amp;rsquo;t using the spreadsheet grid at all!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In retrospect, perhaps it shouldn&amp;rsquo;t have been so surprising.  People want to write Python code, and&#xA;sometimes they don&amp;rsquo;t have a computer with it installed to hand &amp;ndash; and it&amp;rsquo;s always useful to have your code&#xA;accessible so that you can work from anywhere.  Programmers have&#xA;flexibility in the tools they use and can relatively easily move to a new system.  By contrast, spreadsheet users&#xA;have a lot of existing documents that they want to keep, and many of them are far from being technical people.&#xA;They really don&amp;rsquo;t want to move to something new.&lt;/p&gt;&#xA;&lt;p&gt;So, we started PythonAnywhere.  Here&amp;rsquo;s a potted history of what happened next.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Glastonbury: a new system image, with Python 3.9 and Ubuntu 20.04</title>
      <link>https://blog.pythonanywhere.com/196/</link>
      <pubDate>Wed, 30 Jun 2021 13:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/196/</guid>
      <description>&lt;p&gt;If you signed up for an account on PythonAnywhere after 21 June 2021, you&amp;rsquo;ll have Python 3.9 available &amp;ndash; you can use it just like any other Python version.  Additionally, the underlying operating system for your account will be Ubuntu 20.04, rather than the 16.04 used by older accounts.&lt;/p&gt;&#xA;&lt;p&gt;If you signed up before that date, you&amp;rsquo;ll be on an older &amp;ldquo;system image&amp;rdquo; &amp;ndash; essentially the version of the operating system and the set of installed packages that you have access to.  You can &lt;a href=&#34;https://help.pythonanywhere.com/pages/ChangingSystemImage&#34;&gt;switch to the new system image from the &amp;ldquo;Account&amp;rdquo; page&lt;/a&gt;, but you may need to make changes to your code and/or virtualenvs to make everything work &amp;ndash; there&amp;rsquo;s more information on the linked page.&lt;/p&gt;&#xA;&lt;p&gt;This post has more details on what&amp;rsquo;s new in the glastonbury system image.  There&amp;rsquo;s a lot!&lt;/p&gt;</description>
    </item>
    <item>
      <title>June system update brings easier task management</title>
      <link>https://blog.pythonanywhere.com/195/</link>
      <pubDate>Thu, 17 Jun 2021 11:00:00 +0100</pubDate>
      <guid>https://blog.pythonanywhere.com/195/</guid>
      <description>&lt;p&gt;The most recent system upgrade brings a new way to organize&#xA;&lt;a href=&#34;https://help.pythonanywhere.com/pages/ScheduledTasks/&#34;&gt;scheduled&lt;/a&gt; and&#xA;&lt;a href=&#34;https://help.pythonanywhere.com/pages/AlwaysOnTasks/&#34;&gt;always-on&lt;/a&gt; tasks.&#xA;A new optional description field, combined with sorting, allows you to manage&#xA;big herds of multiple tasks.&lt;/p&gt;&#xA;&lt;p&gt;Under the hood there were some more, larger changes, but we&amp;rsquo;ll be announcing the&#xA;details of those later.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System updates on 10 February and 11 March</title>
      <link>https://blog.pythonanywhere.com/194/</link>
      <pubDate>Thu, 11 Mar 2021 14:00:00 +0100</pubDate>
      <guid>https://blog.pythonanywhere.com/194/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been a year since PythonAnywhere &lt;a href=&#34;https://blog.pythonanywhere.com/188/&#34;&gt;went all-remote&lt;/a&gt;,&#xA;but it has not slowed us down, and today was the time to deploy an&#xA;exciting set of changes to our system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brexit update</title>
      <link>https://blog.pythonanywhere.com/193/</link>
      <pubDate>Tue, 29 Dec 2020 21:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/193/</guid>
      <description>&lt;p&gt;PythonAnywhere is a UK-based company, and the transition period for the UK&amp;rsquo;s exit from the European&#xA;Union on will end on 31 December 2020.  This will not have any visible effect for people who use our free&#xA;service.  For our paying customers &lt;em&gt;outside&lt;/em&gt; the EU, including in the UK, there will also&#xA;be no changes.&lt;/p&gt;&#xA;&lt;p&gt;For paying customers &lt;em&gt;inside&lt;/em&gt; the EU, the only effect should be that you&amp;rsquo;ll receive two billing reminders&#xA;for January, a &amp;ldquo;pro-forma&amp;rdquo; one that will come at the usual time, just before&#xA;your monthly payment is made, and another one later on in the month, which will&#xA;be the formal &amp;ldquo;VAT invoice&amp;rdquo; required by EU tax law.&lt;/p&gt;&#xA;&lt;p&gt;You will,&#xA;of course, only be charged once; the second billing reminder will just provide&#xA;some extra tax information.  The remainder of this post is the details of why those two billing reminders&#xA;will be sent, and we&amp;rsquo;re posting it here for those who like reading about tax&#xA;laws&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Tale of Two Deployments</title>
      <link>https://blog.pythonanywhere.com/192/</link>
      <pubDate>Mon, 05 Oct 2020 16:00:00 +0100</pubDate>
      <guid>https://blog.pythonanywhere.com/192/</guid>
      <description>It was the best of times, it was the worst of times, it was the age of remote work, it was the age of pyjamas, it was the epoch of bread baking, it was the epoch of pineapple pizza, it was the season of Light, it was the season of Darkness&amp;hellip;&#xA;This is a short but exciting story about two system updates. Spoiler alert: no one has been guillotined.</description>
    </item>
    <item>
      <title>How to use Ansible to update your Django web app</title>
      <link>https://blog.pythonanywhere.com/191/</link>
      <pubDate>Wed, 23 Sep 2020 12:00:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/191/</guid>
      <description>&lt;p&gt;Now, as you have overcome or evaded the reefs, shoals and swirls of initial development and deployment and your appetite&#xA;grows, you ask &amp;ldquo;How do I automate the update and restart of my web app when I change the code?&amp;rdquo; There is already&#xA;&lt;a href=&#34;https://blog.pythonanywhere.com/87/&#34;&gt;one simple and elegant method&lt;/a&gt;  on our blog, that uses one of the possible&#xA;&lt;em&gt;push to publish&lt;/em&gt; methods, but this time we will dip our toes into vast waters of Ansible automation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introduction to scheduled tasks helper scripts</title>
      <link>https://blog.pythonanywhere.com/190/</link>
      <pubDate>Tue, 04 Aug 2020 18:40:39 +0100</pubDate>
      <guid>https://blog.pythonanywhere.com/190/</guid>
      <description>Update 2025-12-15 On 2026-01-15 we introduced some changes related to free accounts&amp;rsquo; features, you can read about them in detail here. Free accounts created after 2026-01-15 will no longer have access to scheduled tasks.&#xA;Original post For all PythonAnywhere users who like to automate their workflow using scripts there&amp;rsquo;s already the pythonanywhere package which provides an interface for some PythonAnywhere API features. If you&amp;rsquo;re one of them, you might be interested in some recent additions for programmatic management of Scheduled Tasks.</description>
    </item>
    <item>
      <title>Outage report 7 July 2020</title>
      <link>https://blog.pythonanywhere.com/189/</link>
      <pubDate>Thu, 09 Jul 2020 12:59:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/189/</guid>
      <description>&lt;h3 id=&#34;tl-dr&#34;&gt;tl; dr&lt;/h3&gt;&#xA;&lt;p&gt;We had an unplanned outage the day before yesterday; it was our first big one since &lt;a href=&#34;https://blog.pythonanywhere.com/156/&#34;&gt;July 2017&lt;/a&gt;.  It was caused by an extremely unlikely storage system failure, but despite that it should not have led to such a lengthy downtime, and should not have affected so many people.  We have some plans on what our next steps should be, and will be implementing at least some of them over the coming months.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-details&#34;&gt;The details&lt;/h3&gt;&#xA;&lt;p&gt;At 16:06 UTC on 7 July 2020, a storage volume failure on one of our storage servers caused a number of outages, starting with our own site and also with our users&amp;rsquo; programs (including websites) that were dependent on that volume, and later spreading to other hosted sites.  Because all of the data that we store on behalf of our users is backed up and mirrored, no data was lost or at risk, but the outage was significantly longer than we would like.&lt;/p&gt;&#xA;&lt;p&gt;The effects were:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Our own site was unavailable or generating an excessive number of errors from 16:06 to 18:53 UTC.&lt;/li&gt;&#xA;&lt;li&gt;For accounts that were stored on the affected file storage:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Websites were unavailable in general from 16:06 to 19:46 UTC, with some taking until 21:24 UTC to be fully available.&lt;/li&gt;&#xA;&lt;li&gt;Scheduled tasks did not run between 16:06 and 18:53-19:46 UTC (the precise end time depending on the account)&lt;/li&gt;&#xA;&lt;li&gt;Always-on tasks did not run between 16:06 and 18:53-19:46 UTC (the precise end time depending on the account)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;For accounts that were not using the affected file storage&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Scheduled tasks, and always-on tasks were unaffected apart from a short window of about five minutes between 18:53 and 19:46 UTC.&lt;/li&gt;&#xA;&lt;li&gt;Websites were also unaffected apart from that window if they were already up and running when the problems started at 16:06 UTC.  However, they could not be started up or reloaded between 16:06 and 18:53, and would have had a brief outage sometime between 18:53 and 19:46 UTC.&lt;/li&gt;&#xA;&lt;li&gt;However, of course, the problems on our own site would also have affected the owners of these accounts if they needed to log in to run or change things.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This post gives a more detailed timeline of what happened, and describes what steps we are taking to prevent a recurrence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>COVID-19 update: PythonAnywhere is now all-remote</title>
      <link>https://blog.pythonanywhere.com/188/</link>
      <pubDate>Fri, 20 Mar 2020 12:52:59 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/188/</guid>
      <description>&lt;p&gt;Scary times.  We hope everyone reading this is well and keeping safe!&lt;/p&gt;&#xA;&lt;p&gt;We thought it would be a good idea to tell you how we&amp;rsquo;re managing the current&#xA;crisis at PythonAnywhere. We switched over to remote working last Thursday, 12 March;&#xA;there are obviously private and public health reasons why that was a good idea,&#xA;but there&amp;rsquo;s a reason specific to us, which we thought would be worth sharing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use shared in-browser consoles to cooperate while working remotely.</title>
      <link>https://blog.pythonanywhere.com/187/</link>
      <pubDate>Thu, 12 Mar 2020 14:12:01 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/187/</guid>
      <description>&lt;p&gt;One of the challenges of remote work is when you need to work together on one thing.&lt;/p&gt;&#xA;&lt;p&gt;Our in-browser consoles are one of the core features of our service. Almost since the beginning, PythonAnywhere&#xA;has been able to share consoles &amp;ndash; you entered the name of another user or an email&#xA;address, and they got an email telling them how to log in and view your Python&#xA;(or Bash, or IPython) console. If you use an email, the person you invite doesn&amp;rsquo;t have to be PythonAnywhere registered user.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System updates on 3 and 5 March</title>
      <link>https://blog.pythonanywhere.com/186/</link>
      <pubDate>Thu, 05 Mar 2020 14:50:55 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/186/</guid>
      <description>&lt;p&gt;On 3 March we upgraded our EU-based system at &lt;code&gt;eu.pythonanywhere.com&lt;/code&gt; to the latest version of our code, and this morning (5 March) we upgraded our US-based system at &lt;code&gt;www.pythonanywhere.com&lt;/code&gt; to the same version.&lt;/p&gt;&#xA;&lt;p&gt;Everything went very smoothly, and all systems are working well.  There were a bunch of infrastructure-related changes in this update:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve made some improvements to the beta of our new virtualisation system, which is currently in public beta.  More about that next week, we hope!&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve updated almost all of our machines to the most recent AWS Intel server types; the remainder will be upgraded over the coming two weeks.   CPU geeks will be glad to hear that we&amp;rsquo;re going to start experimenting with AMD.  We might also consider ARM for our own internal systems, though right now it feels like sticking with x86-64 for the servers where our users run their code is the best option (let us know if in the comments if you disagree!)&lt;/li&gt;&#xA;&lt;li&gt;A certain amount of code that was (somewhat embarrassingly) still Python 2 was upgraded to Python 3.  &lt;em&gt;blush&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As usual, there were also a number of minor tweaks and minor bugfixes.&lt;/p&gt;&#xA;&lt;p&gt;Onwards and upwards!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, January 2020</title>
      <link>https://blog.pythonanywhere.com/185/</link>
      <pubDate>Tue, 14 Jan 2020 17:01:44 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/185/</guid>
      <description>&lt;p&gt;So, we have managed to break another record for our longest period ever between two monthly newsletters.  It has been sixteen busy months between &lt;a href=&#34;https://blog.pythonanywhere.com/168/&#34;&gt;September 2018&lt;/a&gt; and now, so we have made 2019 an official &lt;strong&gt;Year Without a Newsletter&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Happy New Year, and a warm welcome to the &lt;strong&gt;January 2020&lt;/strong&gt; PythonAnywhere newsletter. Hooray!&#xA;Here is what has happened since our last one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3.8 now available!</title>
      <link>https://blog.pythonanywhere.com/184/</link>
      <pubDate>Wed, 27 Nov 2019 19:49:40 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/184/</guid>
      <description>&lt;p&gt;If you signed up since 26 November, you&amp;rsquo;ll have Python 3.8 available on your account &amp;ndash; you can use it just like any other Python version.&lt;/p&gt;&#xA;&lt;p&gt;If you signed up before then, it&amp;rsquo;s a little more complicated, because adding Python 3.8 to your account requires changing your system image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System update on 21 November 2019</title>
      <link>https://blog.pythonanywhere.com/183/</link>
      <pubDate>Thu, 21 Nov 2019 17:40:17 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/183/</guid>
      <description>&lt;p&gt;This morning&amp;rsquo;s system update went smoothly; some websites did take a bit longer than we expected to start up afterwards, but all is well now.&lt;/p&gt;&#xA;&lt;p&gt;There are two big new features that we have introduced which are going through some final post-deploy tests before they go live &amp;ndash; a new system image (called &lt;code&gt;fishnchips&lt;/code&gt;) to support &lt;strong&gt;Python 3.8&lt;/strong&gt; and to add on a number of extra OS packages that people have been asking us for, and an update to our virtualization system that will fix a number of problems with specific programs.  We&amp;rsquo;ll be posting more about those when they&amp;rsquo;re ready to go live.  [Update: we&amp;rsquo;ve posted about the &lt;strong&gt;fishnchips&lt;/strong&gt; system image &lt;a href=&#34;./184/&#34;&gt;here&lt;/a&gt;.]&lt;/p&gt;&#xA;&lt;p&gt;But there were a number of other things we added:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve added the ability to &lt;strong&gt;restart an always-on task&lt;/strong&gt; without stopping it, waiting for it to stop, and then starting it again &amp;ndash; there&amp;rsquo;s a new &amp;ldquo;restart&amp;rdquo; button on the far right of the tasks table.&lt;/li&gt;&#xA;&lt;li&gt;You can now temporarily &lt;strong&gt;disable a website&lt;/strong&gt; without deleting it &amp;ndash; the button is near the bottom of the &amp;ldquo;Web&amp;rdquo; page.&lt;/li&gt;&#xA;&lt;li&gt;And, of course, the normal set of minor tweaks, bugfixes, and the like.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Happy coding!&lt;/p&gt;</description>
    </item>
    <item>
      <title>EU migrations are now live!</title>
      <link>https://blog.pythonanywhere.com/182/</link>
      <pubDate>Fri, 08 Nov 2019 16:01:01 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/182/</guid>
      <description>&lt;p&gt;In brief: if you have an account on &lt;code&gt;www.pythonanywhere.com&lt;/code&gt; you can have it&#xA;migrated to &lt;code&gt;eu.pythonanywhere.com&lt;/code&gt; &amp;ndash; just let us know via email to &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;support@pythonanywhere.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;d like to know more about what that means, read on&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Our new CPU API</title>
      <link>https://blog.pythonanywhere.com/181/</link>
      <pubDate>Wed, 11 Sep 2019 09:36:03 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/181/</guid>
      <description>&lt;p&gt;We received many requests from PythonAnywhere users to make it possible to programmatically monitor&#xA;usage of CPU credit, so we decided to add a new endpoint to our&#xA;&lt;a href=&#34;https://help.pythonanywhere.com/pages/API&#34;&gt;experimental API&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using our file API</title>
      <link>https://blog.pythonanywhere.com/180/</link>
      <pubDate>Thu, 11 Jul 2019 15:51:46 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/180/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://help.pythonanywhere.com/pages/API&#34;&gt;Our API&lt;/a&gt; supports lots of common&#xA;PythonAnywhere operations, like creating and managing consoles, scheduled and&#xA;always-on tasks, and websites.  We recently added support for reading/writing&#xA;files; this blog post gives a brief overview of how you can use it to do that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System update on 26 June</title>
      <link>https://blog.pythonanywhere.com/179/</link>
      <pubDate>Thu, 04 Jul 2019 15:25:39 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/179/</guid>
      <description>&lt;p&gt;Our system update on 26 June went pretty smoothly :-)   There were a number of useful changes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://help.pythonanywhere.com/pages/API&#34;&gt;Our API&lt;/a&gt; now supports uploading, downloading and listing files in your private file storage.  There is &lt;a href=&#34;./180/&#34;&gt;another blog post&lt;/a&gt; about this.&lt;/li&gt;&#xA;&lt;li&gt;We now have an official system in place to migrate your MySQL data between database servers, which means that if you&amp;rsquo;re on an older version, we can move you over to 5.7.  &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;Let us know if you&amp;rsquo;re interested!&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Our system for migrating user accounts from our US-based system at &lt;code&gt;www.pythonanywhere.com&lt;/code&gt; to our EU-based one at &lt;code&gt;eu.pythonanywhere.com&lt;/code&gt; is almost finished &amp;ndash; just a few final bugs to work out.  We&amp;rsquo;ll post about this again when it&amp;rsquo;s ready to go live.  &lt;strong&gt;Update:&lt;/strong&gt; &lt;a href=&#34;./182/&#34;&gt;it&amp;rsquo;s now live&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We also pushed a number of bugfixes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A number of issues which meant that always-on tasks could lose access to the network have been fixed.&lt;/li&gt;&#xA;&lt;li&gt;Previously, if you tried to change the command for an always-on task that was disabled, you&amp;rsquo;d get an error &amp;ndash; this has been addressed.&lt;/li&gt;&#xA;&lt;li&gt;Some HTTP libraries (which seem particularly common on IoT devices) put the port number in the host header on requests (eg. they send &lt;code&gt;www.somedomain.com:80&lt;/code&gt; rather than &lt;code&gt;www.somedomain.com&lt;/code&gt;).  This is perfectly valid HTTP, albeit uncommon, but our system failed to parse them correctly and would respond with a 404 error.  We&amp;rsquo;ve fixed that.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There were also a whole bunch of minor UI tweaks and the like.&lt;/p&gt;&#xA;&lt;p&gt;Right now we&amp;rsquo;re working on making sure that our billing system supports the &lt;a href=&#34;https://stripe.com/gb/guides/strong-customer-authentication&#34;&gt;Strong Customer Authentication (SCA) regulations&lt;/a&gt; that will come into force for all payments from European credit/debit cards this September; hopefully we can make this as seamless as possible for you.&lt;/p&gt;&#xA;&lt;p&gt;Happy coding!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using MongoDB on PythonAnywhere with MongoDB Atlas</title>
      <link>https://blog.pythonanywhere.com/178/</link>
      <pubDate>Fri, 14 Jun 2019 12:59:26 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/178/</guid>
      <description>&lt;p&gt;&lt;strong&gt;This requires a paid PythonAnywhere account&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lots of people want to use MongoDB with PythonAnywhere; we don&amp;rsquo;t have support for it&#xA;built in to the system, but it&amp;rsquo;s actually pretty easy to use with a database provided by&#xA;MongoDB Atlas &amp;ndash; and as Atlas is a cloud service provided by Mongo&amp;rsquo;s creators, it&amp;rsquo;s&#xA;probably a good option anyway :-)&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re experienced with MongoDB and Atlas, then&#xA;&lt;a href=&#34;https://help.pythonanywhere.com/pages/MongoDB/&#34;&gt;our help page&lt;/a&gt;&#xA;has all of the details you need for connecting to them from our systems.&lt;/p&gt;&#xA;&lt;p&gt;But if you&amp;rsquo;d just like to dip your toe in the water and find out what all of this&#xA;MongoDB stuff is about, this blog post explains step-by-step how to get started so that you can&#xA;try it out.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System update this morning</title>
      <link>https://blog.pythonanywhere.com/177/</link>
      <pubDate>Thu, 14 Mar 2019 09:44:40 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/177/</guid>
      <description>&lt;p&gt;This morning&amp;rsquo;s system update went smoothly :-)&lt;/p&gt;&#xA;&lt;p&gt;It was primarily a maintenance update, bringing our &lt;a href=&#34;https://www.pythonanywhere.com/&#34;&gt;US-based system&lt;/a&gt; up to the same version as our &lt;a href=&#34;https://eu.pythonanywhere.com&#34;&gt;EU-based system&lt;/a&gt;.  There were a number of minor bugfixes, along with a bunch of improvements to our system administration tools, which won&amp;rsquo;t be visible to you, but do mean that we&amp;rsquo;ll be able to spend less time on admin stuff &amp;ndash; which gives us more time to work on adding cool new features!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Announcing eu.pythonanywhere.com</title>
      <link>https://blog.pythonanywhere.com/176/</link>
      <pubDate>Thu, 07 Feb 2019 13:20:42 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/176/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re proud to announce today that we now have an EU-hosted PythonAnywhere system :-)  You can access it at &lt;a href=&#34;https://eu.pythonanywhere.com/&#34;&gt;eu.pythonanywhere.com&lt;/a&gt;.   It&amp;rsquo;s completely separated from our normal system, but has all of the same features &amp;ndash; plus billing in euros.&lt;/p&gt;&#xA;&lt;img src=&#34;./images/eu-billing.png&#34;&gt;</description>
    </item>
    <item>
      <title>How DNS works: a beginner&#39;s guide</title>
      <link>https://blog.pythonanywhere.com/175/</link>
      <pubDate>Fri, 01 Feb 2019 20:16:55 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/175/</guid>
      <description>&lt;p&gt;&lt;strong&gt;The blog post below has now been &amp;ldquo;promoted&amp;rdquo; to being an official help page &amp;ndash; &lt;a href=&#34;https://help.pythonanywhere.com/pages/DNSPrimer&#34;&gt;you can read the most current version here&lt;/a&gt;.  The version below is the original published version and may be out of date.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;We sometimes get emails from people who are trying to point their custom domain at PythonAnywhere so that they can host their website, but are struggling to set up their DNS settings.  Normally DNS setup is pretty simple, but sometimes people can get bogged down due to confusing interfaces on their registrar&amp;rsquo;s site, or complexities in the terminology people use.&lt;/p&gt;&#xA;&lt;p&gt;The parts of DNS that you need to know about in order to host a website are actually not all that complicated, but some domain registrars have complicated, hard-to-understand interfaces.  Either they assume that you understand all of the technical details about how the whole thing works &amp;ndash; which makes it hard for first-timers &amp;ndash; or they try to put a simple user-friendly interface on top of it, but simplify it so much that it&amp;rsquo;s actually harder to use because they&amp;rsquo;re hiding important stuff from you.&lt;/p&gt;&#xA;&lt;p&gt;Given that basic DNS stuff really isn&amp;rsquo;t all that hard, we felt that it would be a good idea to post an explanation, going from the basics up to some slightly deeper stuff.  This post is written so that if you only want the basics, you can just read the first part, while if you want a deeper understanding &amp;ndash; either out of interest, or because your domain registrar has got such a low-level interface that you need to &amp;ndash; then you can keep reading.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s worth noting that for most people, you don&amp;rsquo;t need to know any of this stuff to set up a website on PythonAnywhere, even with a custom domain; it&amp;rsquo;s meant more as an explanation so that people who do run into problems with their registrar have the background knowledge they need to solve the problem &amp;ndash; or, indeed, to explain to the registrar&amp;rsquo;s tech support team what the problem is.  And, of course, it&amp;rsquo;s a bit of light reading for people who are just interested in this stuff :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slow scheduled tasks after yesterday&#39;s system update</title>
      <link>https://blog.pythonanywhere.com/174/</link>
      <pubDate>Thu, 20 Dec 2018 19:19:25 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/174/</guid>
      <description>&lt;p&gt;After our system update yesterday, there was a period when some people&amp;rsquo;s&#xA;scheduled tasks were running slowly.  This is an update on what caused the issue and what we did to fix it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Today&#39;s upgrade: Let&#39;s Encrypt auto-renew and much much more!</title>
      <link>https://blog.pythonanywhere.com/173/</link>
      <pubDate>Wed, 19 Dec 2018 10:22:37 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/173/</guid>
      <description>&lt;p&gt;This morning&amp;rsquo;s system update went pretty smoothly, and we have some cool new stuff to announce:&lt;/p&gt;&#xA;&lt;h3 id=&#34;lets-encrypt-certificates-with-automatic-renewal&#34;&gt;Let&amp;rsquo;s Encrypt certificates with automatic renewal&lt;/h3&gt;&#xA;&lt;p&gt;You can now get an HTTPS certificate for your custom domain using &lt;a href=&#34;https://letsencrypt.org/&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt; without all that tedious mucking around with &lt;code&gt;dehydrated&lt;/code&gt; &amp;ndash; and you don&amp;rsquo;t need to remember to renew the certificate either, or even set up a scheduled task to renew your certificate for you.&lt;/p&gt;&#xA;&lt;p&gt;Just go to the new &amp;ldquo;HTTPS certificate&amp;rdquo; line in the &amp;ldquo;Security&amp;rdquo; section of the &amp;ldquo;Web&amp;rdquo; tab.  You&amp;rsquo;ll see a pencil icon next to the kind of certificate you have (which will probably be &amp;ldquo;None&amp;rdquo; or &amp;ldquo;Custom&amp;rdquo;).  Click the pencil, and you&amp;rsquo;ll see that there&amp;rsquo;s an option called &amp;ldquo;Auto-renewed Let&amp;rsquo;s Encrypt certificate&amp;rdquo;.   If you select that and click &amp;ldquo;Save&amp;rdquo;, we&amp;rsquo;ll get a fresh certificate for your site from Let&amp;rsquo;s Encrypt &amp;ndash; and well before it expires, our system will automatically renew it for you.&lt;/p&gt;&#xA;&lt;p&gt;If you have a certificate that you&amp;rsquo;ve bought from some other organisation like Comodo or GoDaddy, you can also configure it from here &amp;ndash; select the &amp;ldquo;Custom certificate&amp;rdquo; option, and you&amp;rsquo;ll get input fields where you can copy and paste the private key and the combined certificate.&lt;/p&gt;&#xA;&lt;p&gt;We have &lt;a href=&#34;https://help.pythonanywhere.com/pages/HTTPSSetup&#34;&gt;detailed instructions with screenshots on the help site&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The old ways of setting up a certificate still work &amp;ndash; you can use &lt;code&gt;dehydrated&lt;/code&gt;, or get a certificate from a third party like GoDaddy, and upload everything using the command-line scripts.&lt;/p&gt;&#xA;&lt;h3 id=&#34;mysql-57&#34;&gt;MySQL 5.7&lt;/h3&gt;&#xA;&lt;p&gt;New accounts created from today will use MySQL 5.7.   If you&amp;rsquo;re still on 5.6 and would like your databases moved over to a 5.7-compatible server, get in touch over &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;support@pythonanywhere.com&lt;/a&gt; &amp;ndash; the move won&amp;rsquo;t happen until early next year, though.&lt;/p&gt;&#xA;&lt;h3 id=&#34;fixes-for-firefox-and-selenium-from-website-code&#34;&gt;Fixes for Firefox and Selenium from website code&lt;/h3&gt;&#xA;&lt;p&gt;Several people reported a problem where you could not run Selenium from website code from a Hacker account &amp;ndash; you needed a Web Dev account or better.   This was a bug, not a feature, so we fixed it :-)&lt;/p&gt;&#xA;&lt;h3 id=&#34;cpu-sharing-enhancements&#34;&gt;CPU sharing enhancements&lt;/h3&gt;&#xA;&lt;p&gt;There was a problem where people who had used all of their CPU allowance could continue to use lots of server resources; this isn&amp;rsquo;t something that would have been useful for anyone or that we think anyone was doing deliberately &amp;ndash; it would only happen if they started processes which did nothing and then restarted.   So it just meant that if one person had a certain kind of bug in their code and then went into the tarpit, they&amp;rsquo;d use up CPU that could have been put to better use by people who were actually trying to run working code :-)   We&amp;rsquo;ve put a fix in place to stop that from happening.&lt;/p&gt;&#xA;&lt;h3 id=&#34;and-thats-it&#34;&gt;And that&amp;rsquo;s it!&lt;/h3&gt;&#xA;&lt;p&gt;Of course, there were the normal minor tweaks and bugfixes, but those are the highlights.   A very happy holiday season to everyone, and we look forward to being able to show you some cool new stuff in the new year!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Always-on tasks</title>
      <link>https://blog.pythonanywhere.com/172/</link>
      <pubDate>Wed, 07 Nov 2018 18:35:53 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/172/</guid>
      <description>&lt;p&gt;Always-on tasks are a new feature we rolled out in &lt;a href=&#34;https://blog.pythonanywhere.com/171/&#34;&gt;our last system update&lt;/a&gt;.   Essentially, they&amp;rsquo;re a way you&#xA;can specify a program and tell us that you want us to keep it running all the time.  If it exits for any&#xA;reason, we&amp;rsquo;ll automatically restart it &amp;ndash; and even in extreme circumstances, for instance if the server&#xA;that it&amp;rsquo;s running on has a hardware failure, it will fail over to a working machine quickly.&lt;/p&gt;&#xA;&lt;img src=&#34;https://help.pythonanywhere.com/always-on-task-running.png&#34; width=&#34;600px&#34; /&gt;</description>
    </item>
    <item>
      <title>Today&#39;s Upgrades: Always-On Tasks</title>
      <link>https://blog.pythonanywhere.com/171/</link>
      <pubDate>Wed, 24 Oct 2018 07:38:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/171/</guid>
      <description>&lt;h3 id=&#34;always-on-tasks&#34;&gt;Always-On Tasks&lt;/h3&gt;&#xA;&lt;p&gt;We are officially live with our &lt;a href=&#34;https://help.pythonanywhere.com/pages/AlwaysOnTasks&#34;&gt;always-on tasks&lt;/a&gt;! All paying customers will get one always-on task, and you can add more by customizing your plan on our accounts page. Our infrastructure will try to keep your script always running (ie. we will restart it if your script errors and stops etc).  We&amp;rsquo;d love to know what you think- Just drop us a line using the &amp;ldquo;Feedback&amp;rdquo; link, or email us at &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;support@pythonanywhere.com&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;h3 id=&#34;logging-improvements&#34;&gt;Logging Improvements&lt;/h3&gt;&#xA;&lt;p&gt;We have also improved user experience working with log files. You can now access our &lt;a href=&#34;https://help.pythonanywhere.com/pages/API/&#34;&gt;API&lt;/a&gt; to delete log files (or wipe the file if your particular log file is currently in use), and we have better formatting in place when logging certain web app errors.&lt;/p&gt;&#xA;&lt;h3 id=&#34;other-stuff&#34;&gt;Other Stuff&lt;/h3&gt;&#xA;&lt;p&gt;We also optimized the editor that you can access from the &amp;lsquo;Files&amp;rsquo; tab  to make consoles within it start faster and to avoid scripts rerunning unintentionally.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Auto-renewing your Let&#39;s Encrypt certificate with scheduled tasks</title>
      <link>https://blog.pythonanywhere.com/170/</link>
      <pubDate>Mon, 15 Oct 2018 14:59:47 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/170/</guid>
      <description>&lt;p&gt;&lt;strong&gt;This blog post is out-of-date &amp;ndash; we can now manage all of your Let&amp;rsquo;s Encrypt certificates automatically.  &lt;a href=&#34;https://help.pythonanywhere.com/pages/HTTPSSetup&#34;&gt;See this help page for details&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s Encrypt certificates are really useful for custom domains &amp;ndash; you can get&#xA;HTTPS working on your site for free.  Their one downside is that the certificate&#xA;only lasts for 90 days, so you need to remember to renew it.&lt;/p&gt;&#xA;&lt;p&gt;The good news is that you can set up a scheduled task to do that all for you &amp;ndash;&#xA;no need to put anything in your calendar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Turning a Python script into a website</title>
      <link>https://blog.pythonanywhere.com/169/</link>
      <pubDate>Tue, 02 Oct 2018 15:37:14 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/169/</guid>
      <description>&lt;h2 id=&#34;update-2025-12-15&#34;&gt;Update 2025-12-15&lt;/h2&gt;&#xA;&lt;p&gt;On 2026-01-15 we introduced some changes related to free accounts&amp;rsquo; features, you&#xA;can read about them in detail &lt;a href=&#34;./221/&#34;&gt;here&lt;/a&gt;. After that date all free accounts&#xA;will have shorter expiry date on web apps (one month, instead of three months&#xA;mentioned in the original post).&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original post&lt;/h2&gt;&#xA;&lt;p&gt;One question we often hear from people starting out with PythonAnywhere is &amp;ldquo;how do I turn this&#xA;script I&amp;rsquo;ve written into a website so that other people can run it?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s actually a bigger topic than you might imagine, and a complete answer would wind up&#xA;having to explain almost everything about web development.   So we won&amp;rsquo;t do all of that in this&#xA;blog post :-)   The good news is that simple scripts can often be turned into simple websites&#xA;pretty easily, and in this blog post we&amp;rsquo;ll work through a couple of examples.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get started!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, September 2018</title>
      <link>https://blog.pythonanywhere.com/168/</link>
      <pubDate>Tue, 25 Sep 2018 18:14:27 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/168/</guid>
      <description>&lt;p&gt;Well, our last &amp;ldquo;monthly&amp;rdquo; newsletter was in &lt;a href=&#34;https://blog.pythonanywhere.com/157/&#34;&gt;September 2017&lt;/a&gt;.  We must have shifted the bits in the period left one, or something like that :-)&lt;/p&gt;&#xA;&lt;p&gt;Anyway, welcome to the September &lt;em&gt;2018&lt;/em&gt; PythonAnywhere newsletter :-)   Here&amp;rsquo;s what we&amp;rsquo;ve been up to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Force HTTPS on your website</title>
      <link>https://blog.pythonanywhere.com/167/</link>
      <pubDate>Mon, 17 Sep 2018 13:45:45 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/167/</guid>
      <description>&lt;p&gt;One smaller feature we added in our last system update was the ability to force&#xA;HTTPS without needing to change your code.  Here&amp;rsquo;s a bit more information about&#xA;why you might want to do that, and how it works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3.7 now available!</title>
      <link>https://blog.pythonanywhere.com/166/</link>
      <pubDate>Mon, 10 Sep 2018 14:33:51 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/166/</guid>
      <description>&lt;p&gt;If you signed up since 28 August, you&amp;rsquo;ll have Python 3.7 available on your account &amp;ndash; you can use it just like any other Python version.&lt;/p&gt;&#xA;&lt;p&gt;If you signed up before then, it&amp;rsquo;s a little more complicated, because adding Python 3.7 to your account requires changing your system image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New feature: self-installation of SSL certificates!</title>
      <link>https://blog.pythonanywhere.com/165/</link>
      <pubDate>Tue, 28 Aug 2018 12:40:56 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/165/</guid>
      <description>&lt;p&gt;&lt;strong&gt;This blog post is out-of-date &amp;ndash; we can now manage all of your Let&amp;rsquo;s Encrypt certificates automatically, and have a UI to upload custom certificates.  &lt;a href=&#34;https://help.pythonanywhere.com/pages/HTTPSSetup&#34;&gt;See this help page for details&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Our system update last week added on an API to let you install HTTP certificates yourself&#xA;instead of having to email us.  We&amp;rsquo;ve been beta-testing it over the last seven days, and it&amp;rsquo;s&#xA;now ready to go live :-)&lt;/p&gt;&#xA;&lt;p&gt;You can either use it by accessing the API directly from your code, or by using our helper scripts&#xA;(which you can &lt;code&gt;pip install&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;This is the first step towards a much improved system for HTTPS &amp;ndash; watch this space for more information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System update this morning</title>
      <link>https://blog.pythonanywhere.com/164/</link>
      <pubDate>Tue, 21 Aug 2018 14:03:46 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/164/</guid>
      <description>&lt;p&gt;We deployed a new version of PythonAnywhere this morning.   Everything went pretty smoothly; there were a few problems with some hosted websites shortly afterwards (an error in a load-distribution algorithm put too many websites on some servers, and not enough on others) but some sharp-eye customers spotted the problem and let us know, and we were able to rebalance things and fix the issue quickly.&lt;/p&gt;&#xA;&lt;p&gt;There are a couple of great new features in the new system, but we&amp;rsquo;re doing some last-minute testing before making them live &amp;ndash; watch this space for more information :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blocked in Russia</title>
      <link>https://blog.pythonanywhere.com/163/</link>
      <pubDate>Fri, 27 Apr 2018 13:11:30 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/163/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve heard reports from some Russian users that PythonAnywhere, and sites that we host, are blocked by their ISPs.&#xA;The specific error message that they get when visiting the sites in Chrome is ERR_CONNECTION_TIMED_OUT &amp;ndash; Firefox&#xA;has a similar one.&lt;/p&gt;&#xA;&lt;p&gt;This appears to be the fallout from &lt;a href=&#34;https://arstechnica.com/information-technology/2018/04/in-effort-to-shut-down-telegram-russia-blocks-amazon-google-network-addresses/&#34;&gt;the Russian government&amp;rsquo;s ongoing attempts to block the use of the Telegram&#xA;instant messaging app&lt;/a&gt;.   Because Telegram use various cloud hosting providers, including AWS and Google, the government has responded by blocking&#xA;very large ranges of IPs owned by those providers.  We&amp;rsquo;re included in those ranges.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terms and conditions and privacy policy update (yes, it&#39;s another GDPR thing)</title>
      <link>https://blog.pythonanywhere.com/162/</link>
      <pubDate>Tue, 17 Apr 2018 18:32:38 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/162/</guid>
      <description>&lt;p&gt;Like a lot of companies, we&amp;rsquo;re updating our terms and conditions and privacy and cookies policy&#xA;in order to comply with the&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/General_Data_Protection_Regulation&#34;&gt;GDPR&lt;/a&gt;.&#xA;The GDPR is a large regulatory change from the&#xA;European Union, and is mostly about people&amp;rsquo;s personal data and&#xA;how it is shared.&lt;/p&gt;&#xA;&lt;p&gt;The new T&amp;amp;Cs and PP will come into effect on&#xA;10 May 2018&#xA;and if you carry on using PythonAnywhere after that date, you&amp;rsquo;ll be agreeing to them, so&#xA;we figured it would be a good idea to post an explanation about the highlights of the changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing the beta for always-on tasks</title>
      <link>https://blog.pythonanywhere.com/161/</link>
      <pubDate>Tue, 12 Dec 2017 18:47:10 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/161/</guid>
      <description>&lt;p&gt;&lt;em&gt;Update 24 October 2018 &amp;ndash; always-on tasks has now been released to paying users.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today we&amp;rsquo;re starting the beta for a new paid feature on PythonAnywhere:&#xA;always-on tasks.   If you have a paid account and would like to try them out,&#xA;drop us a line at &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;support@pythonanywhere.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;img width=&#34;500&#34; src=&#34;./images/always-on-tasks.png&#34;&gt;&#xA;&lt;p&gt;With always-on tasks, you can keep a script constantly running. Once the&#xA;feature&amp;rsquo;s been switched on for your account, they can be set up in the &amp;ldquo;Tasks&amp;rdquo;&#xA;tab &amp;ndash; you specify a bash command (eg. &amp;ldquo;python3.6 /home/username/myscript.py&amp;rdquo;),&#xA;and the system will start running it.   If it exits &amp;ndash; say, if it crashes, or&#xA;if the server has a problem &amp;ndash; it will be restarted quickly.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;d be really grateful for any and all feedback people have about this. We&amp;rsquo;ve&#xA;been testing it internally for some months, and a private beta has been running&#xA;for a while &amp;ndash; so we&amp;rsquo;re reasonably certain it&amp;rsquo;s solid and reliable, but please&#xA;do remember that it is currently beta, and there may be bugs we don&amp;rsquo;t know about.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New look and feel!</title>
      <link>https://blog.pythonanywhere.com/160/</link>
      <pubDate>Thu, 30 Nov 2017 09:03:52 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/160/</guid>
      <description>&lt;p&gt;We updated PythonAnywhere this morning :-)&lt;/p&gt;&#xA;&lt;p&gt;The most visible change is that we&amp;rsquo;ve refreshed the look and feel &amp;ndash; we&amp;rsquo;d love&#xA;to know what you think, especially about the new dashboard page that you get&#xA;when you log in or click the PythonAnywhere logo.   Is it useful?  Is there&#xA;other stuff we should add there, or are there things we should remove?   Just&#xA;drop us a line using the &amp;ldquo;Feedback&amp;rdquo; link.&lt;/p&gt;&#xA;&lt;p&gt;There have also been some big changes under the hood.   The most important ones&#xA;are part of a project we&amp;rsquo;re not quite ready to announce (coming soon, we&#xA;promise!) but more visibly, we&amp;rsquo;ve improved scalability for Jupyter/IPython&#xA;notebooks, so hopefully you&amp;rsquo;ll notice a speedup if you using them.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve also fixed a couple of minor bugs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A few issues with editing scheduled tasks have been fixed.&lt;/li&gt;&#xA;&lt;li&gt;You used to get an internal server error if you tried to start a MySQL console when you were out of disk quota.  Now you don&amp;rsquo;t.&lt;/li&gt;&#xA;&lt;li&gt;Similarly, starting a Jupyter notebook with non-ASCII characters in its filename works properly now.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That&amp;rsquo;s all for today&amp;rsquo;s update.   Any feedback much appreciated!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Response times now available in webapp logs</title>
      <link>https://blog.pythonanywhere.com/159/</link>
      <pubDate>Thu, 19 Oct 2017 07:46:34 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/159/</guid>
      <description>&lt;p&gt;we deployed a new version this morning.  Most of the work was on a sekrit hidden feature that we can&amp;rsquo;t talk about yet (oooo) but there is one small thing we&amp;rsquo;ve added that we hope you find useful:  we&amp;rsquo;ve added response times to your webapp access logs:&lt;/p&gt;&#xA;&lt;img src=&#34;./images/response_times.png&#34; width=80% /&gt;&#xA;&lt;p&gt;you can see them at the end of each line, in the format &lt;code&gt;response_time=N.NNN&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;We hope that you&amp;rsquo;ll find these useful if you ever have to chase down performance issues. Let us know what you think!&lt;/p&gt;</description>
    </item>
    <item>
      <title>A beginner&#39;s guide to building a simple database-backed Flask website on PythonAnywhere: part 2</title>
      <link>https://blog.pythonanywhere.com/158/</link>
      <pubDate>Mon, 16 Oct 2017 20:34:23 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/158/</guid>
      <description>&lt;h2 id=&#34;update-2025-12-15&#34;&gt;Update 2025-12-15&lt;/h2&gt;&#xA;&lt;p&gt;On 2026-01-15 we introduced some changes related to free accounts&amp;rsquo; features, you&#xA;can read about them in detail &lt;a href=&#34;./221/&#34;&gt;here&lt;/a&gt;.  The original post uses MySQL&#xA;database which would no longer be available for new free accounts &amp;ndash; you can&#xA;still follow the tutorial on a free account by using an SQLite database instead.&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original post&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the second part in our tutorial for getting started with Flask development on PythonAnywhere!&#xA;This is a continuation of &lt;a href=&#34;https://blog.pythonanywhere.com/121/&#34;&gt;our previous tutorial&lt;/a&gt;, so if you haven&amp;rsquo;t&#xA;been through it, you should do that first.  In particular, this tutorial will assume that you&amp;rsquo;re starting&#xA;with the code that you had at the end of the last one: a simple website that allowed you to post comments on&#xA;a page, all of those comments being stored in a database:&lt;/p&gt;&#xA;&lt;img width=&#34;500&#34; src=&#34;./images/flask-tutorial-final-result.png&#34;&gt;&#xA;&lt;p&gt;It was made up of two files; a Python file which controlled what it did, and a template file that controlled&#xA;how it was displayed.  All of our code was under source-code control, and it was running as a website on&#xA;PythonAnywhere.&lt;/p&gt;&#xA;&lt;p&gt;Obviously this was a rather limited website!  It would be nice if we could add some features &amp;ndash; and in this&#xA;tutorial, that&amp;rsquo;s exactly what we&amp;rsquo;ll do.   Our original site used the slightly ugly password protection&#xA;built in to PythonAnywhere; this means that in order for people to post on it, they had to enter a username&#xA;and password &amp;ndash; but it was the same username and password for everyone, which isn&amp;rsquo;t terribly secure.   We&amp;rsquo;re&#xA;going to add our own login page &amp;ndash; which means that we can also store a record of who posted what, and when.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what it will look like:&lt;/p&gt;&#xA;&lt;img width=&#34;500&#34; src=&#34;./images/flask-tutorial-incorrect-username-or-password.png&#34;&gt;&#xA;&lt;img width=&#34;500&#34; src=&#34;./images/flask-tutorial-part-two-final-result.png&#34;&gt;&#xA;&lt;p&gt;Adding these new features will require us to do a bit of work in the background; our existing site works&#xA;fine for what it is, but it&amp;rsquo;s not very extensible, and we&amp;rsquo;ll fix that as we go.   You&amp;rsquo;ll learn about the&#xA;Flask-Login extension, database migrations, and virtualenvs &amp;ndash; all very useful stuff.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get started!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, September 2017</title>
      <link>https://blog.pythonanywhere.com/157/</link>
      <pubDate>Wed, 13 Sep 2017 17:59:06 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/157/</guid>
      <description>&lt;p&gt;Gosh, and we were doing so well.  After managing a record seven of our &amp;ldquo;monthly&amp;rdquo; newsletters back in&#xA;2016, it&amp;rsquo;s mid-September and we haven&amp;rsquo;t sent a single one so far this year :-(   Well, better late than&#xA;never!   Let&amp;rsquo;s see what&amp;rsquo;s been going on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage report: 20, 21 and 22 July 2017</title>
      <link>https://blog.pythonanywhere.com/156/</link>
      <pubDate>Mon, 24 Jul 2017 16:44:38 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/156/</guid>
      <description>&lt;p&gt;We had several outages over the last few days.   The problem appears to be fixed now, but investigations into the underlying cause are still underway.   This post is a summary of what happened, and what we know so far.  Once we&amp;rsquo;ve got a better understanding of the issue, we&amp;rsquo;ll post more.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s worth saying at the outset that while the problems related to the way we manage our users&amp;rsquo; files, those files themselves were always safe.   While availability problems are clearly a big issue, we regard data integrity as more important.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using the PythonAnywhere API:  an (open source) helper script to create a Django webapp with a virtualenv</title>
      <link>https://blog.pythonanywhere.com/155/</link>
      <pubDate>Tue, 27 Jun 2017 17:11:52 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/155/</guid>
      <description>&lt;p&gt;With the beta launch of our &lt;a href=&#34;https://help.pythonanywhere.com/pages/API&#34;&gt;API&lt;/a&gt;, we want to start&#xA;making it possible for people to do more scripted things with PythonAnywhere.&lt;/p&gt;&#xA;&lt;p&gt;Our starter for 10 was this:  our web-based UI has some helpers for&#xA;creating new web apps for common web frameworks (Django, Flask, web2py, etc),&#xA;but they pin you to the system-installed version of those packages.&#xA;Using a virtualenv would give the user more flexibility, but currently that&#xA;means using the more complicated &amp;ldquo;manual config&amp;rdquo; option.&lt;/p&gt;&#xA;&lt;p&gt;The API means it&amp;rsquo;s now possible to build a single command-line tool that&#xA;you can run from a PythonAnywhere console to create, from scratch, a new&#xA;Django project, with a virtualenv, all in one go.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere API:  beta now available for all users</title>
      <link>https://blog.pythonanywhere.com/154/</link>
      <pubDate>Thu, 22 Jun 2017 12:12:36 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/154/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve been slowly developing an API for PythonAnywhere, and we&amp;rsquo;ve now enabled it&#xA;so that all users can try it out if they wish.&#xA;&lt;a href=&#34;https://www.pythonanywhere.com/account/#api_token&#34;&gt;Head over to your accounts page and find the &amp;ldquo;API Token&amp;rdquo; tab&lt;/a&gt; to get started.&lt;/p&gt;&#xA;&lt;p&gt;The API is still very much in beta, and it&amp;rsquo;s by no means complete!&#xA;We&amp;rsquo;ve started out with a few endpoints that we thought we ourselves would find&#xA;useful, and some that we needed internally.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System update this morning</title>
      <link>https://blog.pythonanywhere.com/153/</link>
      <pubDate>Thu, 18 May 2017 07:36:49 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/153/</guid>
      <description>&lt;p&gt;This morning&amp;rsquo;s system update went well :-)&lt;/p&gt;&#xA;&lt;p&gt;There aren&amp;rsquo;t any major visible new features in the new system &amp;ndash; it was&#xA;primarily an infrastructural change.  The operating system on our underlying&#xA;servers has been upgraded from Ubuntu 14.04 to 16.04 (so we had to rewrite all&#xA;of our upstart system jobs as systemd ones, which was&amp;hellip; fun).  The sandboxes&#xA;where your code runs have been kept as Ubuntu 14.04, so that your code doesn&amp;rsquo;t&#xA;break due to the system it runs on changing unexpectedly.&lt;/p&gt;&#xA;&lt;p&gt;A future update, hopefully soon, will enable a 16.04-based system image that&#xA;you&amp;rsquo;ll be able to opt in to use when it&amp;rsquo;s convenient to you.  There&amp;rsquo;s also a big&#xA;new feature that we&amp;rsquo;re working on that required the OS upgrade &amp;ndash; more about&#xA;that another time&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tomorrow&#39;s system update cancelled</title>
      <link>https://blog.pythonanywhere.com/152/</link>
      <pubDate>Tue, 09 May 2017 21:01:40 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/152/</guid>
      <description>&lt;p&gt;At the last minute, we discovered a bug in the version of PythonAnywhere we were planning to deploy tomorrow.  We&amp;rsquo;re pretty certain about the fix, but rather than rush code into the live system without thorough testing, we&amp;rsquo;re delaying the system update.  We hope it&amp;rsquo;ll all be ready to go early next week.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release! Python 3.6 :-)</title>
      <link>https://blog.pythonanywhere.com/151/</link>
      <pubDate>Thu, 16 Mar 2017 08:40:25 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/151/</guid>
      <description>&lt;p&gt;Today&amp;rsquo;s system update was mostly infrastructure changes and security fixes, but&#xA;there&amp;rsquo;s one big visible change &amp;ndash; we now support Python 3.6!&lt;/p&gt;&#xA;&lt;p&gt;The new version is only available for accounts using the new &lt;strong&gt;dangermouse&lt;/strong&gt; image,&#xA;so if you&amp;rsquo;d like to be switched over and get not just the latest Python, but&#xA;also new shiny versions of all of our installed system images, just send us a&#xA;message using the &amp;ldquo;Send feedback&amp;rdquo; link.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blocked in Russia</title>
      <link>https://blog.pythonanywhere.com/150/</link>
      <pubDate>Fri, 03 Mar 2017 19:31:56 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/150/</guid>
      <description>&lt;p&gt;A week ago, one of the sites we were hosting was reported to us by the Russian&#xA;authorities (specifically, the Federal Service for Supervision in the Sphere of&#xA;Telecom, Information Technologies and Mass Communications [ROSKOMNADZOR]) for&#xA;hosting illegal content.  They said that we must take it down, or risk having&#xA;the associated IP address blocked in Russia.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release!  File sharing, and some nice little fixes and improvements</title>
      <link>https://blog.pythonanywhere.com/149/</link>
      <pubDate>Thu, 19 Jan 2017 10:29:48 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/149/</guid>
      <description>&lt;p&gt;Honestly, it&amp;rsquo;s strange.  We&amp;rsquo;ll work on a bunch of features, care about them deeply for a few days or weeks, commit them to the CI server, and then when we come to deploy them a little while later, we&amp;rsquo;ll have almost forgotten about them.  Take today, when Glenn and I were discussing writing the blog post for the release&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;Not much user-visible stuff in this one was there?  Just infrastructure I think&amp;hellip;&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Let&amp;rsquo;s have a look.  Oh yes, we fixed the ipad text editor.   And we did the disable-webapps-on-downgrade thing. Oh yeah, and change-webapp-python-version, people have been asking for that.  Oh, wow, and shared files!  I&amp;rsquo;d almost totally forgotten!&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So actually, dear users, lots of nice things to show you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a simple Telegram bot using PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/148/</link>
      <pubDate>Mon, 02 Jan 2017 20:32:58 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/148/</guid>
      <description>&lt;h3 id=&#34;update-2024-06-20-it-should-work-on-free-accounts-again&#34;&gt;Update 2024-06-20: it should work on free accounts again!&lt;/h3&gt;&#xA;&lt;p&gt;On &lt;strong&gt;2020-01-12&lt;/strong&gt; we updated the original post with the following comment:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;For some reason Telegram has stopped accepting wildcard HTTPS&#xA;certificates for bots, so unfortunately this tutorial will no longer&#xA;work on a PythonAnywhere free account. For the webhooks part of the&#xA;tutorial to work, you will have to get a paying account with a&#xA;custom domain.  Thanks to fivechar for letting us know in the&#xA;comments.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On &lt;strong&gt;2024-06-18&lt;/strong&gt; user &lt;code&gt;FizzFanatic&lt;/code&gt; posted on our forums that webhook&#xA;solution is working on free accounts &amp;ndash; and it looks like it is,&#xA;thanks!&lt;/p&gt;&#xA;&lt;h3 id=&#34;original-post&#34;&gt;Original post&lt;/h3&gt;&#xA;&lt;p&gt;There&amp;rsquo;s an explosion of chat apps and bots at the moment, and it&amp;rsquo;s&#xA;easy to see why.  They&amp;rsquo;re a useful new way of interacting with&#xA;computer systems, they&amp;rsquo;re interesting to code, and they&amp;rsquo;re&#xA;actually surprisingly easy to create.&lt;/p&gt;&#xA;&lt;p&gt;This blog post shows how you can get a simple bot up and running,&#xA;using &lt;a href=&#34;https://telegram.org/&#34;&gt;Telegram&lt;/a&gt;.  Telegram isn&amp;rsquo;t as popular&#xA;a messaging platform as WhatsApp or Skype, but it&amp;rsquo;s &lt;em&gt;much&lt;/em&gt; easier to&#xA;build bots for.  You&amp;rsquo;ll need a normal computer and also a phone on which&#xA;you can install the Telegram app.  When you&amp;rsquo;ve finished working through&#xA;the steps here, you&amp;rsquo;ll have a bot that can have an almost-plausible&#xA;conversation with you.&lt;/p&gt;&#xA;&lt;img src=&#34;./images/bot-chat-session.png&#34; width=&#34;60%&#34;&gt;&#xA;&lt;p&gt;It uses PythonAnywhere, which probably isn&amp;rsquo;t very surprising given&#xA;the name of this blog ;-)   You can do everything in here using&#xA;a free PythonAnywhere account, and the bot you wind up with will&#xA;be fully-functional.  You&amp;rsquo;ll only need a paid-for account if your&#xA;bot starts getting lots of users &amp;ndash; of the order of thousands of&#xA;messages a day.&lt;/p&gt;&#xA;&lt;p&gt;So, without further ado, let&amp;rsquo;s get started!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere Newsletter, December 2016</title>
      <link>https://blog.pythonanywhere.com/147/</link>
      <pubDate>Thu, 22 Dec 2016 00:13:51 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/147/</guid>
      <description>&lt;p&gt;Welcome to our Christmas newsletter!   Featuring a selection of the Internet&amp;rsquo;s very worst Christmas-themed animated Gifs!&lt;/p&gt;&#xA;&lt;img src=&#34;https://upload.wikimedia.org/wikipedia/commons/6/61/Christmas_snow_animation.gif&#34; alt=&#34;snow with christmas tree in foreground&#34; /&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what we&amp;rsquo;ve been up to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System update this morning -- why it took so long</title>
      <link>https://blog.pythonanywhere.com/146/</link>
      <pubDate>Wed, 14 Dec 2016 13:04:28 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/146/</guid>
      <description>&lt;p&gt;This morning we deployed a new version of PythonAnywhere &amp;ndash; we&amp;rsquo;ve &lt;a href=&#34;./145/&#34;&gt;blogged about the new&#xA;stuff that you can see in it&lt;/a&gt;, and this post is a run-down on why it took longer than we&#xA;were expecting.&lt;/p&gt;&#xA;&lt;p&gt;Our normal system updates tend to take between 15 and 20 minutes.  Today&amp;rsquo;s was meant to&#xA;take about 40 minutes &amp;ndash; more about why later &amp;ndash; but it wound up taking over an hour and&#xA;forty minutes.  That definitely warrants an explanation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release, ft. 2016-style Javascript and the Deep Tarpit.</title>
      <link>https://blog.pythonanywhere.com/145/</link>
      <pubDate>Wed, 14 Dec 2016 11:34:52 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/145/</guid>
      <description>&lt;p&gt;The main driver for our release this morning was a move, behind the scenes, to&#xA;put our servers into a &amp;ldquo;VPC&amp;rdquo;, and despite the fact that it&amp;rsquo;ll have no visible&#xA;impact, it was a significant change to the infrastructure, and not without its&#xA;challenges, as you&amp;rsquo;ll hear in more detail from Giles later :)&lt;/p&gt;&#xA;&lt;h3 id=&#34;one-yak-fully-shaved&#34;&gt;One Yak, Fully Shaved.&lt;/h3&gt;&#xA;&lt;img src=&#34;./images/new_consoles_list.png&#34; alt=&#34;new consoles list ui screenshot&#34; /&gt;&#xA;&lt;p&gt;One change you might notice is that the Consoles page has changed, and includes some little red Xs for killing consoles.  The original idea was just to change them from being links that cause a page refresh to being ajax calls, which would let you kill multiple consoles at the same time.  Somehow though, that small user interface tweak turned into the whole office deciding to treat that &lt;a href=&#34;https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f&#34;&gt;How it feels to learn JavaScript in 2016&lt;/a&gt; comedy blog post as if it were an instruction manual, and we have now spent several days knee deep in React, ES6, promises, webpack, npm, Enzyme, fetch, promises, promises, and many, many more.  Still, by the end of it, it all worked, and we have to conclude that ES6 is much nicer to work with than horrible old javascript.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-deep-tarpit&#34;&gt;The Deep Tarpit&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://www.pythonanywhere.com/tarpit/&#34;&gt;tarpit&lt;/a&gt; is one of the key ways we balance the resource needs of our various users.  What happens when you exceed your CPU quota is that your processes still run, but they get a lower priority compared to people who are still within the amount they paid for.  That&amp;rsquo;s been working fairly well, but as with all things, we notice there&amp;rsquo;s a power law at work, and there are a small number of users who regularly go massively over their tarpit limit.  We&amp;rsquo;ve added some code that will automatically kill processes of these kinds of users, and send them a friendly notification email.  Bad programmer!  No biscuit.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve also added some code to limit the amount of output in consoles, so that kids (and adults) whose first Python program is &lt;code&gt;while True: print(&amp;ldquo;farts&amp;rdquo;)&lt;/code&gt; will have less of an impact on the system.  Although plenty of farts will still be printed, fear ye not.&lt;/p&gt;&#xA;&lt;p&gt;The upshot of all that should be that console performance will hopefully be a little more consistent from now on.&lt;/p&gt;&#xA;&lt;h3 id=&#34;better-support-for-non-english-keyboards&#34;&gt;Better support for non-English keyboards&lt;/h3&gt;&#xA;&lt;p&gt;We do our best to avoid the classic Anglocentric, parochial laziness of imagining that the world ends with ASCII, but it takes work!  For a while we&amp;rsquo;ve known that users on certain operating systems with certain keyboard types &amp;amp; layouts would have difficulties entering certain text into our consoles.  So we&amp;rsquo;ve rolled out the ability to switch from &lt;a href=&#34;https://chromium.googlesource.com/apps/libapps/+/HEAD/hterm&#34;&gt;hterm&lt;/a&gt; to &lt;a href=&#34;http://xtermjs.org/&#34;&gt;xterm.js&lt;/a&gt; for our client-side terminal emulation.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;d like to try it out, &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;give us a shout&lt;/a&gt; and we can switch it on for you. NB - keyboard shortcuts for copy + paste will be different, it&amp;rsquo;ll be Ctrl+Ins / Shift+Ins instead of Ctrl-C &amp;amp; Ctrl-V.&lt;/p&gt;&#xA;&lt;h3 id=&#34;general-bugfixes-and-security-fixes&#34;&gt;General bugfixes and security fixes&lt;/h3&gt;&#xA;&lt;p&gt;And the usual retinue of bug fixes.  Some of which were (minor) security fixes, incidentally, as reported by some enthusiastic security researchers.  &lt;a href=&#34;https://help.pythonanywhere.com/pages/BugBounty&#34;&gt;Find out more about our bug bounty&lt;/a&gt; if that describes you!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, November 2016: Two-factor auth and a new system image</title>
      <link>https://blog.pythonanywhere.com/144/</link>
      <pubDate>Tue, 29 Nov 2016 14:17:19 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/144/</guid>
      <description>&lt;p&gt;We try to get a newsletter out every month, but sometimes we just get too&#xA;distracted working on our latest and greatest features to manage it. It wasn&amp;rsquo;t&#xA;that we were all out in Norway doing an &lt;a href=&#34;https://www.facebook.com/KildenKrs/videos/1187573517966787/&#34;&gt;opera&lt;/a&gt;, honest :-)&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what we were up to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nitrous.io shuts down</title>
      <link>https://blog.pythonanywhere.com/143/</link>
      <pubDate>Fri, 04 Nov 2016 18:46:39 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/143/</guid>
      <description>&lt;p&gt;We were sad to hear about the &lt;a href=&#34;https://community.nitrous.io/posts/nitrous-service-shutdown-november-14th&#34;&gt;sudden departure of our frenemies* at Nitrous&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Today&#39;s upgrade: improving websites, better security</title>
      <link>https://blog.pythonanywhere.com/141/</link>
      <pubDate>Thu, 13 Oct 2016 12:00:43 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/141/</guid>
      <description>&lt;p&gt;This morning&amp;rsquo;s system update went smoothly, and we&amp;rsquo;ve made a couple of great changes :-)&lt;/p&gt;&#xA;&lt;h3 id=&#34;improved-website-routing&#34;&gt;Improved website routing&lt;/h3&gt;&#xA;&lt;p&gt;This one should be pretty much transparent to you, but we&amp;rsquo;ve revamped the way we route requests for the websites that we host; this should speed things up for some people.&lt;/p&gt;&#xA;&lt;p&gt;Noisy neighbours always cause problems, in the real world and on the Internet.  When someone writes a website that hogs system resources on PythonAnywhere, sometimes it can impact other people who happen to be on the same server.  Naturally, we monitor the system, and when we find a particularly badly-behaved website we notify its owner by email and ask them to fix it &amp;ndash; or in extreme cases, if it&amp;rsquo;s causing serious problems, we shut it down.  But that&amp;rsquo;s far from ideal.&lt;/p&gt;&#xA;&lt;p&gt;Today&amp;rsquo;s update makes that all a lot better.  We&amp;rsquo;ve given ourselves, the system administrators, fine-grained control over where websites run.  So now, if we see a website that&amp;rsquo;s causing slowdowns for other users, as well as notifying the owner so that they can fix it, we can move it right away onto a server where it won&amp;rsquo;t impact other people.  We&amp;rsquo;re calling it &amp;ldquo;putting them in the sin bin&amp;rdquo;&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;security-is-important&#34;&gt;Security is important&lt;/h3&gt;&#xA;&lt;p&gt;&amp;hellip;as people have reminded us frequently in &lt;a href=&#34;https://twitter.com/allanjorch/status/446689706428739584&#34;&gt;suspiciously&lt;/a&gt;-&lt;a href=&#34;https://twitter.com/ellmetha/status/743890486910418944&#34;&gt;similar&lt;/a&gt; &lt;a href=&#34;https://twitter.com/Renegade98/status/508831478386393088&#34;&gt;Tweets&lt;/a&gt;.  And they&amp;rsquo;re right!  So we&amp;rsquo;ve implemented two-factor authentication, using Google Authenticator (or any other TOTP app).  It&amp;rsquo;s currently going through a short internal-only testing process (in other words, we&amp;rsquo;ve switched it on for our own accounts to see if it breaks anything) and if all is well, we&amp;rsquo;ll provide it as an option for everyone next week.&lt;/p&gt;&#xA;&lt;p&gt;On the subject of security, we&amp;rsquo;ve also fixed a couple of bugs: &lt;a href=&#34;https://twitter.com/c0d3G33k&#34;&gt;Nikhil Mittal&lt;/a&gt; reported a CSRF issue on PythonAnywhere that would have allowed an attacker who knew both your username and the internal database ID of one of your scheduled tasks to delete that task, if they tricked you into visiting a web page that they controlled while you were logged in to PythonAnywhere.  It wouldn&amp;rsquo;t have given the attacker access to any of your data, but it could have been really irritating, and we&amp;rsquo;re glad it was reported so that we could fix it.  Bug: fixed.  Bug bounty: paid.  Nikhil also reported some issues around our email confirmation system, which we&amp;rsquo;ve also fixed.&lt;/p&gt;&#xA;&lt;h3 id=&#34;and-the-rest&#34;&gt;&amp;hellip;and the rest&lt;/h3&gt;&#xA;&lt;p&gt;As always, we&amp;rsquo;ve put in a number of user interface tweaks, including fixing the print preview on IPython notebooks.&lt;/p&gt;&#xA;&lt;h3 id=&#34;thats-it&#34;&gt;That&amp;rsquo;s it!&lt;/h3&gt;&#xA;&lt;p&gt;Thanks for reading, and for using PythonAnywhere :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, September 2016</title>
      <link>https://blog.pythonanywhere.com/140/</link>
      <pubDate>Wed, 14 Sep 2016 17:50:51 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/140/</guid>
      <description>&lt;p&gt;We try to get a newsletter out every month, but in August we were all too busy working on our latest and&#xA;greatest features to manage it.  It wasn&amp;rsquo;t that we were all out sunning ourselves, honest :-)&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what we were up to.&lt;/p&gt;</description>
    </item>
    <item>
      <title> Latest deploy: Some nice new features and a surprise</title>
      <link>https://blog.pythonanywhere.com/139/</link>
      <pubDate>Thu, 25 Aug 2016 14:09:02 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/139/</guid>
      <description>&lt;h3 id=&#34;rename-web-apps&#34;&gt;Rename web apps&lt;/h3&gt;&#xA;&lt;p&gt;Yes, we know it&amp;rsquo;s been a long time coming, but now you can rename your web apps&#xA;(and, as a result change the domain they&amp;rsquo;re served from) right on the web app&#xA;setup page. Look for the little edit pencil icon next to your web app address.&lt;/p&gt;&#xA;&lt;h3 id=&#34;students-can-share-with-teacher&#34;&gt;Students can share with teacher&lt;/h3&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve made it easier for students to share their consoles with their teacher.&lt;/p&gt;&#xA;&lt;h3 id=&#34;list-invoices-on-accounts-page&#34;&gt;List invoices on accounts page&lt;/h3&gt;&#xA;&lt;p&gt;For those of you that may be wondering how much of your hard-earned money&#xA;you&amp;rsquo;ve spent on PythonAnywhere, we&amp;rsquo;ve added a list of all of your invoices to&#xA;the Account page.&lt;/p&gt;&#xA;&lt;h3 id=&#34;pdf-export-for-jupyter-notebooks-works&#34;&gt;PDF export for Jupyter notebooks works&lt;/h3&gt;&#xA;&lt;p&gt;A helpful user pointed out that &amp;ldquo;Download as PDF&amp;rdquo; wasn&amp;rsquo;t working in Jupyter&#xA;notebooks on PythonAnywhere. So we fixed it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;bash-console-here-on-editor-page&#34;&gt;&amp;ldquo;bash console here&amp;rdquo; on editor page&lt;/h3&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re ever editing a file and want to open a Bash console in the same&#xA;directory as the file, now you can.&lt;/p&gt;&#xA;&lt;h3 id=&#34;general-security-usability-and-stability-fixes&#34;&gt;General security, usability and stability fixes&lt;/h3&gt;&#xA;&lt;p&gt;As usual. This is usually where we put all the fixes for bugs that are too embarrassing to list.&lt;/p&gt;&#xA;&lt;h3 id=&#34;something-great-that-were-not-telling-you-anything-about&#34;&gt;Something great that we&amp;rsquo;re not telling you anything about&lt;/h3&gt;&#xA;&lt;p&gt;until we&amp;rsquo;ve tested it ourselves.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Back to school tips for teachers, from PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/138/</link>
      <pubDate>Wed, 17 Aug 2016 17:07:12 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/138/</guid>
      <description>&lt;p&gt;Dear teachers,&lt;/p&gt;&#xA;&lt;p&gt;If there&amp;rsquo;s one thing we know, it&amp;rsquo;s that teachers (and students) love, it&amp;rsquo;s being reminded that the holidays&#xA;is that the holidays are coming to an end.  Hooray!&lt;/p&gt;&#xA;&lt;img src=&#34;./images/ned_stark_back_to_school.png&#34; width=&#34;60%&#34;&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a few ideas and pointers for some of the things that we hope will make your life, as a teacher, easier.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Latest deploy: new stylings, editor fixes, and our API beta</title>
      <link>https://blog.pythonanywhere.com/137/</link>
      <pubDate>Fri, 24 Jun 2016 08:47:52 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/137/</guid>
      <description>&lt;p&gt;Morning all!  A lovely day for &lt;em&gt;leave&lt;/em&gt;-ing an old server image behind and welcoming in a new, independent, codebase.  #brupgrade #brelease #breployment.&lt;/p&gt;&#xA;&lt;h3 id=&#34;style-tweaks-improvements-to-responsiveness&#34;&gt;Style tweaks, improvements to responsiveness&lt;/h3&gt;&#xA;&lt;p&gt;On a bit of a whim we decided to upgrade to bootstrap 3, so you&amp;rsquo;ll notice slightly different stylings.  Flat buttons!  Oh-so-3-years-ago.  But also, there are some improvements to the way the site displays on mobile and smaller displays, which is nice.&lt;/p&gt;&#xA;&lt;p&gt;We also upgraded to the latest version of the &lt;a href=&#34;https://ace.c9.io/&#34;&gt;ace editor&lt;/a&gt;, which should bring a few little improvements too, like better vim keybindings, and better support for ipads (you can now scroll, yay!)&lt;/p&gt;&#xA;&lt;h3 id=&#34;api-beta&#34;&gt;API beta&lt;/h3&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not ready for prime-time yet, but we&amp;rsquo;ve started work on a PythonAnywhere API.  It may end up not being something we publish for general use, and just something for us to use behind the scenes, but if you&amp;rsquo;re keen to take a look, get in touch, and we&amp;rsquo;ll switch it on for you.  Currently the API allows you to do stuff to your web apps, namely:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;create new web app&lt;/li&gt;&#xA;&lt;li&gt;reload web app&lt;/li&gt;&#xA;&lt;li&gt;update webapp settings: virtualenv, static files.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You should bear in mind that anything you build using that api will probably break when we next do a release, we&amp;rsquo;re making no guarantees about backward-compatibility, or that the api will even work as it is.  So really it&amp;rsquo;s just for playing around or for the curious for now.  Still, &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;email us&lt;/a&gt; if you&amp;rsquo;re interested, we&amp;rsquo;d love to hear from you.&lt;/p&gt;&#xA;&lt;h3 id=&#34;other-changes&#34;&gt;Other changes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There&amp;rsquo;s now a UI for updating the working directory and source files location for your web apps.&lt;/li&gt;&#xA;&lt;li&gt;The editor now gives you a useful warning when you try and save if you&amp;rsquo;re over your quota (and it no longer deletes your whole file, which some consider a bonus)&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve made some changes to try and make it easier for us to deal with forum spam.  ugh.&lt;/li&gt;&#xA;&lt;li&gt;and a few assorted minor bugfixes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Your comments and suggestions are always welcome.  Enjoy!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, June 2016</title>
      <link>https://blog.pythonanywhere.com/136/</link>
      <pubDate>Thu, 02 Jun 2016 14:55:53 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/136/</guid>
      <description>&lt;p&gt;Summer is just around the corner in the northern hemisphere &amp;ndash; here in London we&#xA;can tell because the rain is just that little bit warmer.  We&amp;rsquo;re taking full&#xA;advantage of the lighter and later grey in the sky by working even longer hours to&#xA;make PythonAnywhere better.  How?  Just read on&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Today&#39;s upgrade - postgres price drop, mysql scaling improvements</title>
      <link>https://blog.pythonanywhere.com/135/</link>
      <pubDate>Wed, 18 May 2016 08:50:32 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/135/</guid>
      <description>&lt;p&gt;Nothing earth-shattering to report today, but some good news:&lt;/p&gt;&#xA;&lt;h3 id=&#34;postgres-is-cheaper&#34;&gt;Postgres is cheaper&lt;/h3&gt;&#xA;&lt;img src=&#34;./images/elephant_emoji.png&#34; /&gt;&#xA;&lt;img src=&#34;./images/money_wings_emoji.png&#34; /&gt;&#xA;&lt;p&gt;It&amp;rsquo;s been over a year since we first tentatively launched our postgres service, and we&amp;rsquo;ve found that we&amp;rsquo;re able to optimise the service so that it scales better than we thought, so we&amp;rsquo;re pleased to pass on the cost savings to you.&lt;/p&gt;&#xA;&lt;p&gt;Postgres is now $7/month instead of $15.  That price will apply to all new plans and upgrades, and we&amp;rsquo;ll also start applying the new price to existing users for their next bill.  So that more moolah in your pockets dear users, don&amp;rsquo;t spend it all at once ;)&lt;/p&gt;&#xA;&lt;h3 id=&#34;mysql-infrastructure-changes&#34;&gt;MySQL infrastructure changes&lt;/h3&gt;&#xA;&lt;p&gt;These changes won&amp;rsquo;t really be very visible from the user point of view, so this isn&amp;rsquo;t very interesting to you, beloved readers, &lt;em&gt;per se&lt;/em&gt;, but it took us loads of time and effort so we have to say something to make it all feel worthwhile and satisfy our own egos.  Anyways, we made some changes to the way we shard users amongst MySQL servers in our clusters, which mean it&amp;rsquo;s now much easier for us to add extra MySQL capacity whenever we want to.&lt;/p&gt;&#xA;&lt;p&gt;For the curious, did you know that (depending on your OS and config), filesystem limits on the number of hard links in a single directory might limit you to a maximum of 32,000 databases on a single mysql instance?  Not that we &lt;em&gt;ever&lt;/em&gt; came anywhere near that, but still, good to know. #tipsforpaasproviders.&lt;/p&gt;&#xA;&lt;h3 id=&#34;pythonorg-console-now-python-35&#34;&gt;Python.org console now Python 3.5&lt;/h3&gt;&#xA;&lt;p&gt;Our live consoles on the &lt;a href=&#34;https://www.python.org&#34;&gt;python.org front page&lt;/a&gt; are now Python 3.5 instead of 3.4.  We&amp;rsquo;ve also made them &amp;ldquo;regular&amp;rdquo; Python consoles instead of IPython &lt;small&gt;(which was always a slightly weird decision, even though IPython is all awesome and everything, but a regular Python console is what new users are most likely to see, and ours do have tab-completion switched on you know?)&lt;/small&gt;&lt;/p&gt;&#xA;&lt;p&gt;Onwards and upwards folks!  In our next iteration we hope to be able to release a first beta of an &lt;a href=&#34;https://www.pythonanywhere.com/forums/topic/3716/&#34;&gt;API for PythonAnywhere&lt;/a&gt;.  Watch this space :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scaling a startup from side project to 20 million hits/month - an interview with railwayapi.com creator Kaustubh</title>
      <link>https://blog.pythonanywhere.com/134/</link>
      <pubDate>Thu, 12 May 2016 12:44:07 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/134/</guid>
      <description>&lt;p&gt;&lt;em&gt;We recently wished farewell to a customer who had been with us for about 18 months, during which time he saw some incredible growth in what was originally just a side project.  We spoke to him about how he found the experience of scaling on PythonAnywhere, and why he decided to move on.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anatomy of a bug</title>
      <link>https://blog.pythonanywhere.com/133/</link>
      <pubDate>Fri, 06 May 2016 18:09:16 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/133/</guid>
      <description>&lt;p&gt;We recently fixed a problem in our website hosting code that was causing weird&#xA;errors under very specific and rare circumstances.   The problem had been there&#xA;for several years, and &amp;ndash; while we knew that odd stuff happened every now and&#xA;then &amp;ndash; we&amp;rsquo;d never been able to reproduce it reliably enough to debug it.  But a&#xA;lucky coincidence of circumstances, when two people tripped over the bug in&#xA;quick succession, clarified the issues and let us work out the solution.&#xA;It&amp;rsquo;s an interesting tale, so we thought we&amp;rsquo;d share it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, April 2016</title>
      <link>https://blog.pythonanywhere.com/132/</link>
      <pubDate>Tue, 19 Apr 2016 14:54:35 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/132/</guid>
      <description>&lt;p&gt;Spring is here, we&amp;rsquo;re filled with good intentions, and here is another newsletter,&#xA;almost exactly a month after the previous one, which is 800% better than our&#xA;previous interval.&lt;/p&gt;&#xA;&lt;p&gt;So other than good intentions, clock changes, and eating too much chocolate, what&amp;rsquo;s&#xA;been going on?  Plenty of stuff it turns out, and it&amp;rsquo;s all for you, dear users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System upgrade, 2016-04-12: Python 3.5</title>
      <link>https://blog.pythonanywhere.com/131/</link>
      <pubDate>Tue, 12 Apr 2016 07:30:59 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/131/</guid>
      <description>&lt;p&gt;We upgraded PythonAnywhere today.  The big story for this release is that we now support Python 3.5.1 everywhere :-)   We&amp;rsquo;ve put it through extensive testing, but of course it&amp;rsquo;s possible that glitches remain &amp;ndash; please do let us know in the forums or by email if you find any.&lt;/p&gt;&#xA;&lt;p&gt;There were a few other minor changes &amp;ndash; basically, a bunch of system package installs and upgrades:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;mysqlclient for Python 3.x (so now Django should work out of the box with Python 3)&lt;/li&gt;&#xA;&lt;li&gt;pyodbc and its lower-level dependencies, so you should be able to connect to Microsoft SQL Servers elsewhere on the Internet.&lt;/li&gt;&#xA;&lt;li&gt;pdftk&lt;/li&gt;&#xA;&lt;li&gt;basemap for Python 3.x.&lt;/li&gt;&#xA;&lt;li&gt;pint&lt;/li&gt;&#xA;&lt;li&gt;uncertainties&lt;/li&gt;&#xA;&lt;li&gt;flask-openid&lt;/li&gt;&#xA;&lt;li&gt;And finally, we&amp;rsquo;ve upgraded Twilio so that it works properly from free accounts.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>The PythonAnywhere newsletter, March 2016</title>
      <link>https://blog.pythonanywhere.com/130/</link>
      <pubDate>Wed, 16 Mar 2016 18:27:31 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/130/</guid>
      <description>&lt;p&gt;Well, it&amp;rsquo;s been nine months since our last newsletter and we&amp;rsquo;ve got a lot to&#xA;tell you&amp;hellip; Let&amp;rsquo;s get started.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webapps and scheduled task expiries</title>
      <link>https://blog.pythonanywhere.com/129/</link>
      <pubDate>Wed, 16 Mar 2016 13:52:47 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/129/</guid>
      <description>&lt;h2 id=&#34;update-2025-12-15&#34;&gt;Update 2025-12-15&lt;/h2&gt;&#xA;&lt;p&gt;On 2026-01-15 we introduced some changes related to free accounts&amp;rsquo; features, you&#xA;can read about them in detail &lt;a href=&#34;./221/&#34;&gt;here&lt;/a&gt;. After 2026-01-15 all free accounts&#xA;will have shorter expiry on web apps (one month) and only free accounts created&#xA;before that date will keep access to one scheduled task.&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original post&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; for free accounts, web apps and scheduled tasks will stop running&#xA;after a while if you don&amp;rsquo;t log in. We&amp;rsquo;ll email you a warning before this&#xA;happens. Here&amp;rsquo;s why:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Loads of people create free Python websites on PythonAnywhere and this is a&#xA;really cool thing. Some of these websites are active ones where people are&#xA;hosting their personal stuff, doing academic things, etc., and they want to&#xA;keep them running. This is awesome! We want people to do that and we&amp;rsquo;re happy&#xA;to host this stuff for free.&lt;/p&gt;&#xA;&lt;p&gt;For other use cases, some people may setup a webapp to try out a new web&#xA;framework. Their owners may not intend to keep them running forever. That&amp;rsquo;s&#xA;fine too! We&amp;rsquo;re glad to help people learn.&lt;/p&gt;&#xA;&lt;p&gt;The problem for us is that we can&amp;rsquo;t tell which is which.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deprecation warning: &#34;mysql.server&#34; hostname being retired</title>
      <link>https://blog.pythonanywhere.com/128/</link>
      <pubDate>Thu, 10 Mar 2016 18:28:08 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/128/</guid>
      <description>&lt;img src=&#34;./images/303px-IBM_Electronic_Data_Processing_Machine_-_GPN-2000-001881.jpg&#34; /&gt;&#xA;&lt;p&gt;Relax everyone!  We&amp;rsquo;re not switching off our mysql service, just switching off&#xA;one of the old names it was available under.   You&amp;rsquo;ll still be able to access it,&#xA;and more reliably, under the new name, with no downtime. Details follow&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Jupyter notebooks finance demo</title>
      <link>https://blog.pythonanywhere.com/127/</link>
      <pubDate>Wed, 09 Mar 2016 14:01:23 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/127/</guid>
      <description>The goal of this demo is to show how ipython notebooks can be used in conjunction with different datasources (eg: Quandl) and useful python libraries (eg: pandas) to do financial analysis. It will try to slowly introduce new and useful functions for the new python user.&#xA;Since oil-equity corr has been all the talk these days (this demo was written in Jan 2016), let&#39;s take a look at it!</description>
    </item>
    <item>
      <title>Quickstart: TensorFlow-Examples on PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/126/</link>
      <pubDate>Fri, 04 Mar 2016 17:56:30 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/126/</guid>
      <description>&lt;p&gt;Aymeric Damien&amp;rsquo;s &amp;ldquo;&lt;a href=&#34;https://github.com/aymericdamien/TensorFlow-Examples&#34;&gt;TensorFlow Examples&lt;/a&gt;&amp;rdquo; repository popped up on Hacker News today, and I decided to take a look.  &lt;a href=&#34;https://www.tensorflow.org/&#34;&gt;TensorFlow&lt;/a&gt; is an Open Source library Machine Intelligence, built by Google, and Aymeric&amp;rsquo;s examples are not only pretty neat, but they also have IPython notebook versions.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s how I got it all running on a PythonAnywhere account, from a bash console.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Security update applied for CVE-2016-0728</title>
      <link>https://blog.pythonanywhere.com/125/</link>
      <pubDate>Wed, 20 Jan 2016 12:08:21 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/125/</guid>
      <description>&lt;p&gt;Yesterday, Yevgeny Pats of Perception Point security announced publicly&#xA;&lt;a href=&#34;http://perception-point.io/2016/01/14/analysis-and-exploitation-of-a-linux-kernel-vulnerability-cve-2016-0728/&#34;&gt;a local privilege escalation vulnerability in the Linux kernel&lt;/a&gt;,&#xA;which has been given the code CVE-2016-0728.   Most Linux systems had this vulnerability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New stuff: UI changes, new packages, and limited Java</title>
      <link>https://blog.pythonanywhere.com/124/</link>
      <pubDate>Thu, 14 Jan 2016 08:44:53 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/124/</guid>
      <description>&lt;p&gt;A big infrastructure update this morning, but we managed to fit in some nice new features too!&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A popular request, especially from people using PythonAnywhere in education: when you run a Python file from inside our in-browser code editor, it now shows the output of the file in a pane underneath the editor, instead of trying to pop up a new browser tab.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://plot.ly/python/&#34;&gt;Plotly&lt;/a&gt; is a popular package for generating interactive charts, especially in IPython notebooks.  We now have it installed by default.&lt;/li&gt;&#xA;&lt;li&gt;For anyone who&amp;rsquo;s keen on using external databases that need ODBC to connect, we now have all of the operating system packages installed to support it on our site.  Just run &lt;code&gt;pip2.7 install --user pyodbc&lt;/code&gt; (adjusting the Python version as required) to get the Python package.&lt;/li&gt;&#xA;&lt;li&gt;We have no plans to become JavaAnywhere, but Java can be useful for some purposes, even in a Python program.  We&amp;rsquo;ve started the process towards making it available; if you have Docker consoles enabled for your account, the Java command-line program will work.  It doesn&amp;rsquo;t currently work in scheduled tasks or web applications.  We&amp;rsquo;ll be extending support for Java in the future, but if all you want to do is run it from the command line, get in touch and we&amp;rsquo;ll enable it for your account.  Feedback will definitely be appreciated!&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Seasonal notebooks!</title>
      <link>https://blog.pythonanywhere.com/123/</link>
      <pubDate>Wed, 23 Dec 2015 17:30:53 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/123/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve got a present for all of our paying customers &amp;ndash; if you celebrate Christmas, you can call it a Christmas present, and if you don&amp;rsquo;t you can just call it a present :-)&lt;/p&gt;&#xA;&lt;p&gt;IPython notebooks are now available on all paid accounts on PythonAnywhere.  Give them a go!  You can start a new one, or run one that you&amp;rsquo;ve saved or uploaded, from the &amp;ldquo;Files&amp;rdquo; tab.  It&amp;rsquo;s a new feature, so we&amp;rsquo;re particularly keen on hearing any feedback you&amp;rsquo;d like to send us.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re not a paying customer yet, you don&amp;rsquo;t need to feel left out &amp;ndash; we&amp;rsquo;ll be supporting them (perhaps with a couple of limitations) on free accounts in the New Year.&lt;/p&gt;&#xA;&lt;p&gt;Happy holidays to everyone, and we look forward to seeing you in the New Year.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Security advisory: please change your PythonAnywhere MySQL password</title>
      <link>https://blog.pythonanywhere.com/122/</link>
      <pubDate>Mon, 23 Nov 2015 18:33:18 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/122/</guid>
      <description>&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; On 19 November we were notified of a security vulnerability on&#xA;PythonAnywhere.  It could &lt;strong&gt;not&lt;/strong&gt; have been used to access files on your&#xA;PythonAnywhere storage, including your code, nor was any personally&#xA;identifiable data in our databases exposed.  We also have no indication that it&#xA;was ever exploited.  It was fixed within two hours of notification.  However,&#xA;as a precautionary measure, we are recommending that if you use MySQL on&#xA;PythonAnywhere, you should change your MySQL password.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A beginner&#39;s guide to building a simple database-backed Flask website on PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/121/</link>
      <pubDate>Fri, 13 Nov 2015 19:59:30 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/121/</guid>
      <description>&lt;h2 id=&#34;update-2025-12-15&#34;&gt;Update 2025-12-15&lt;/h2&gt;&#xA;&lt;p&gt;On 2026-01-15 we introduced some changes related to free accounts&amp;rsquo; features, you&#xA;can read about them in detail &lt;a href=&#34;./221/&#34;&gt;here&lt;/a&gt;.  The original post uses MySQL&#xA;database which would no longer be available for new free accounts &amp;ndash; you can&#xA;still follow the tutorial on a free account by using an SQLite database instead.&lt;/p&gt;&#xA;&lt;h2 id=&#34;original-post&#34;&gt;Original post&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s really easy to get started with Flask on PythonAnywhere, but if it&amp;rsquo;s the&#xA;first database-backed website you&amp;rsquo;ve ever built, it can feel a little daunting.&#xA;Here are some step-by-step instructions.  We&amp;rsquo;ll build a really simple website &amp;ndash;&#xA;just a page where anyone can leave a comment, with the comments stored in a&#xA;database so that they last forever.  We&amp;rsquo;ll also password-protect it so that&#xA;it doesn&amp;rsquo;t fill up with spam.  Here&amp;rsquo;s what it will look like:&lt;/p&gt;&#xA;&lt;img width=&#34;500&#34; src=&#34;./images/flask-tutorial-final-result.png&#34;&gt;&#xA;&lt;p&gt;We assume that you&amp;rsquo;ve got a little bit of basic Python and HTML knowledge &amp;ndash; for&#xA;example, that you&amp;rsquo;ve done an online course in both of them.  Everything else&#xA;we&amp;rsquo;ll explain as we go along.  Let&amp;rsquo;s get started!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Search Results</title>
      <link>https://blog.pythonanywhere.com/search/</link>
      <pubDate>Mon, 09 Nov 2015 13:49:44 +0400</pubDate>
      <guid>https://blog.pythonanywhere.com/search/</guid>
      <description> </description>
    </item>
    <item>
      <title>Share your code using gist consoles</title>
      <link>https://blog.pythonanywhere.com/120/</link>
      <pubDate>Fri, 30 Oct 2015 12:14:43 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/120/</guid>
      <description>&lt;p&gt;Have you ever wanted to share some code with someone, and make it really easy for them to run it and see what it does?  Perhaps an answer to a Stack Overflow question, or just something you want to link from an IRC chat where you&amp;rsquo;re explaining something?  GitHub has gists, an excellent feature for sharing version-tracked code snippets, but sometimes just sharing the code isn&amp;rsquo;t enough &amp;ndash; you want people to see what happens when they run it.&lt;/p&gt;&#xA;&lt;p&gt;With PythonAnywhere, you can create a link that will run a gist from GitHub in a browser-based console.  It&amp;rsquo;s really easy to set up!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker Consoles (beta)</title>
      <link>https://blog.pythonanywhere.com/119/</link>
      <pubDate>Wed, 23 Sep 2015 11:27:51 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/119/</guid>
      <description>&lt;p&gt;Here at PythonAnywhere industries, there&amp;rsquo;s nothing we love better than a bandwagon.  Plus the logos are so cool!  So it&amp;rsquo;s docker-fever in the office.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/octopus_blocks_die.png&#34; &gt;&lt;/img&gt;&lt;/p&gt;&#xA;&lt;p&gt;In all seriousness, we&amp;rsquo;ve been rolling our own sandboxing/virtualisation/isolation&#xA;solution and evolving it since the very first days of PythonAnywhere (4 years ago,&#xA;if you can believe that), based on chroot and cgroups and all that wonderful&#xA;containerey stuff.   But we wanted to investigate Docker as an alternative&#xA;shrinkwrapped solution, and the first step of that is ready now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage report: 5 September 2015</title>
      <link>https://blog.pythonanywhere.com/118/</link>
      <pubDate>Mon, 07 Sep 2015 18:46:46 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/118/</guid>
      <description>&lt;p&gt;From 20:30 to 23:50 UTC on 5 September, there were a number of problems on PythonAnywhere.  Our own site, and those of our customers, were generally up and running, but were experiencing intermittent failures and frequent slowdowns.  We&amp;rsquo;re still investigating the underlying cause of this issue; this blog post is an interim report.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release - Web app charts, MySQL upgrade and bug fixes</title>
      <link>https://blog.pythonanywhere.com/117/</link>
      <pubDate>Wed, 26 Aug 2015 08:02:56 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/117/</guid>
      <description>&lt;h3 id=&#34;hit-charts-for-web-apps&#34;&gt;Hit charts for web apps&lt;/h3&gt;&#xA;&lt;img src=&#34;./images/hit-charts.png&#34; width=&#34;670px&#34; alt=&#34;Screenshot of hit charts&#34;&gt;&#xA;&lt;p&gt;The main change for this release is that we now report hits and errors to your web apps on the web app page. If you&amp;rsquo;re a paying user, you get pretty charts over a range of time periods. If you&amp;rsquo;re not, you&amp;rsquo;ll get a text report.&lt;/p&gt;&#xA;&lt;h3 id=&#34;web-app-error-reporting&#34;&gt;Web app error reporting&lt;/h3&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve greatly improved the errors that are reported when you reload a web app.&lt;/p&gt;&#xA;&lt;h3 id=&#34;batteries-included&#34;&gt;Batteries included&lt;/h3&gt;&#xA;&lt;p&gt;As much as is possible, we have tried to bring the packages that we install for Python 3 to parity with Python 2. That means that the number of packages that come preinstalled for Python 3 has increased dramatically.&lt;/p&gt;&#xA;&lt;h3 id=&#34;database-upgrade&#34;&gt;Database upgrade&lt;/h3&gt;&#xA;&lt;p&gt;All of your databases have been upgraded to MySQL 5.5.&lt;/p&gt;&#xA;&lt;h3 id=&#34;other-stuff&#34;&gt;Other stuff&lt;/h3&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve also applied a number of small bug fixes, user interface improvements and stability fixes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Handling millions of visitors for $12 a month: an interview with Kamil, creator of TickCounter</title>
      <link>https://blog.pythonanywhere.com/116/</link>
      <pubDate>Wed, 05 Aug 2015 12:41:59 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/116/</guid>
      <description>&lt;p&gt;&lt;em&gt;Kamil is the creator of &lt;a href=&#34;http://www.tickcounter.com&#34;&gt;TickCounter&lt;/a&gt;, a simple&#xA;online time counter. It allows you to create countdown and countup timers as&#xA;well as measure time with stopwatches and egg timers.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;TickCounter is hosted by &lt;a href=&#34;https://www.pythonanywhere.com&#34;&gt;PythonAnywhere&lt;/a&gt;, a&#xA;Python-focused PaaS and browser-based programming environment.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release!  MySQL connection settings, CNAMEs, and backend changes</title>
      <link>https://blog.pythonanywhere.com/115/</link>
      <pubDate>Fri, 10 Jul 2015 08:11:43 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/115/</guid>
      <description>&lt;p&gt;A big release today&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release!  Add custom console launchers to your dashboard</title>
      <link>https://blog.pythonanywhere.com/114/</link>
      <pubDate>Thu, 11 Jun 2015 07:05:30 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/114/</guid>
      <description>&lt;p&gt;Well, from our point of view, one of the most important things in this release was probably the akismet integration which we hope will prevent forums spam, and thus save us a tedious admin process of deleting spammy posts.  So you&amp;rsquo;ll have to go somewhere else for your updates on which are the food supplements for muscle growth.&lt;/p&gt;&#xA;&lt;h3 id=&#34;custom-consoles&#34;&gt;Custom consoles&lt;/h3&gt;&#xA;&lt;p&gt;But we do also care about users of the site other than ourselves, so we&amp;rsquo;re equally pleased to announce a nice little features on the Consoles page, &amp;ldquo;Custom&amp;rdquo; launchers.  You can use them to create your own console types, little shortcuts for running your favourite scripts.  Congrats to our newest employee &lt;a href=&#34;https://twitter.com/conradho&#34;&gt;Conrad&lt;/a&gt; for coming up with this idea, and pushing tirelessly to get it out.&lt;/p&gt;&#xA;&lt;img src=&#34;./images/custom_consoles.png&#34; width=&#34;80%&#34; /&gt;&#xA;&lt;h3 id=&#34;education-beta-nominate-teacher&#34;&gt;Education beta: nominate teacher&lt;/h3&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve added the ability for you to nominate a &amp;ldquo;teacher&amp;rdquo;, as part of our &lt;a href=&#34;https://www.pythonanywhere.com/wiki/Education&#34;&gt;education beta&lt;/a&gt;, so you can now use PythonAnywhere&amp;rsquo;s education features for ad-hoc programming workshops or training sessions, without needing to tell us in advance who your students will be.  Just get attendees to sign up, fill in the teacher field, and you&amp;rsquo;re good to go.&lt;/p&gt;&#xA;&lt;p&gt;Other than that, we&amp;rsquo;ve made some minor tweaks to the process dashboard &amp;ndash; you can now see how much CPU each process has used, so you can identify those CPU-quota-nommming rogue tasks, and we&amp;rsquo;ve added a little warning on the web tab to detect mis-matches between your virtualenv python version and the web application&amp;rsquo;s.&lt;/p&gt;&#xA;&lt;p&gt;Hope you find this all useful!  As ever, we&amp;rsquo;re always interested in feedback and suggestions.  Mesozoic mammals, yo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Baby&#39;s First Steps (Part 3)</title>
      <link>https://blog.pythonanywhere.com/113/</link>
      <pubDate>Sat, 06 Jun 2015 21:06:08 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/113/</guid>
      <description>&lt;p&gt;Hi guys,&lt;/p&gt;&#xA;&lt;p&gt;Today, I want to change gears a little bit and talk about our TDD development&#xA;process, which has always been very &lt;a href=&#34;http://www.obeythetestinggoat.com/&#34; title=&#34;Harry promises that the next superhero costumer party he goes to, he will dress up as a goat&#34;&gt;dear to our hearts&lt;/a&gt;.&#xA;Just as a disclaimer, this is going to be a very general overview and if you are&#xA;an experienced TDD developer, you may not get a lot out of it. However,&#xA;continuing along the &lt;a href=&#34;https://blog.pythonanywhere.com/111/&#34; title=&#34;sharing is caring!&#34;&gt;mentorship/educational theme&lt;/a&gt;,&#xA;I hope this will be useful for the people out there who are just starting out,&#xA;and are trying to figure out what is a good style/process for developing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Baby&#39;s First Steps (Part 2)</title>
      <link>https://blog.pythonanywhere.com/108/</link>
      <pubDate>Wed, 27 May 2015 11:27:04 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/108/</guid>
      <description>&lt;p&gt;Hi guys,&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a &lt;a href=&#34;https://blog.pythonanywhere.com/106/&#34; title=&#34;A Baby&#39;s First Steps (Part 1)&#34;&gt;long overdue&lt;/a&gt; post about my work environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere&#39;s latest newsletter (ever)</title>
      <link>https://blog.pythonanywhere.com/112/</link>
      <pubDate>Thu, 21 May 2015 11:55:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/112/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Welcome to PythonAnywhere&amp;rsquo;s latest newsletter.  Latest not only because it&amp;rsquo;s the most recent, but also because it&amp;rsquo;s the most overdue!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Hi there fellow nerds!  Another edition of our incredibly-rare-and-infrequent-newsletter (currently coming out about once a year).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Today&#39;s Upgrade: Sharing is Caring</title>
      <link>https://blog.pythonanywhere.com/111/</link>
      <pubDate>Tue, 12 May 2015 07:19:40 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/111/</guid>
      <description>&lt;p&gt;Hi guys,&lt;/p&gt;&#xA;&lt;p&gt;With today&amp;rsquo;s deploy, we added some console sharing and file system features to make helping other people easier, whether it&amp;rsquo;s in a group setting, or a more in-depth one-on-one session.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s been great to see more and more initiatives to teach Python, over the last few years, but it&amp;rsquo;s never as easy as it should be. Personally, we have definitely experienced the struggle of our friends who are new to programming, from general commandline stuff and installing modules, to understanding different error messages and trace backs etc. We want to see if there&amp;rsquo;s more we can to do help make the mentoring process as easy and painless as possible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr: go mentor someone today and tell us how to make the sharing features even better for you!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;new-sharing-features&#34;&gt;New Sharing Features&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We added the ability to share your console read-only, so that your sharee cannot type into or resize your view window (which can get super annoying when your mentee does not realize resizing their window has an effect on you!)&lt;/li&gt;&#xA;&lt;li&gt;For the &lt;a href=&#34;https://www.pythonanywhere.com/details/education&#34;&gt;education beta&lt;/a&gt; specific stuff, we also added these two features in response to popular requests:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An extra option for teachers to share a console with all their students in one click&lt;/li&gt;&#xA;&lt;li&gt;Mount the student&amp;rsquo;s home directories so that the teacher can see them (ie. teachers can now access /home/student1 in addition to /home/teacher)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;cool-infrastructure-stuff&#34;&gt;Cool Infrastructure Stuff&lt;/h3&gt;&#xA;&lt;p&gt;We also continued on our epic quest towards zero downtime by stupidifying the file server. Previously, our file server shared the same code base as our web/console servers, and used the django code to do tasks such as updating user storage quotas (eg: after an account upgrade). It was a good idea at the time because it meant that we could handle a quota update request, grab what a user&amp;rsquo;s storage quota changed to, and then apply the new quota- all very easily from within django.&lt;/p&gt;&#xA;&lt;p&gt;However, this violates the concept of keeping things modular and meant that we had an extra dependency to manage properly. Whenever we updated the source code and wanted to push it out to production, this meant that we needed to do it to the file server as well. This then meant that we needed to make sure nobody was writing to the file server during that time and that all the changes were flushed to disk. This is one reason why we needed downtime when deploying (to ensure data consistency etc).&lt;/p&gt;&#xA;&lt;p&gt;Anyway, now all the fileserver has on it is a minimal flask microservice independent of our main django code, so the hope is that we can cut out this particular source of downtime. Yay!&lt;/p&gt;</description>
    </item>
    <item>
      <title>XFS to ext4 for user storage - why we made the switch</title>
      <link>https://blog.pythonanywhere.com/110/</link>
      <pubDate>Tue, 24 Mar 2015 19:04:19 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/110/</guid>
      <description>&lt;p&gt;Last Tuesday, we changed the filesystem we use to store our users&amp;rsquo; files&#xA;over from XFS to ext4fs.  This required a much longer maintenance outage than&#xA;normal &amp;ndash; 2 hours instead of our normal 20-30 minutes.&lt;/p&gt;&#xA;&lt;p&gt;This post explains why we made the change, and how we did it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Today&#39;s maintenance upgrade: Fileserver migration complete, other updates </title>
      <link>https://blog.pythonanywhere.com/109/</link>
      <pubDate>Tue, 17 Mar 2015 07:42:24 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/109/</guid>
      <description>&lt;p&gt;Morning all!&lt;/p&gt;&#xA;&lt;h3 id=&#34;xfs---ext4&#34;&gt;XFS -&amp;gt; ext4&lt;/h3&gt;&#xA;&lt;p&gt;So the reason for our extra-long maintenance window this morning was primarily a migration from XFS to ext4 as our filesystem for user storage.  We&amp;rsquo;ll write more about the whys and wherefores of this later, but the short version is that the main reason for using XFS, project quotas, were no longer needed, and a bug in the version of XFS support by Ubuntu LTS left us vulnerable to long periods of downtime after unplanned reboots, while XFS did some unnecessary quotachecks.  The switch to ext4 removes that risk, and has simplified some of our code too, bonus!&lt;/p&gt;&#xA;&lt;p&gt;In other news, we&amp;rsquo;ve managed to squeeze in a few more user-visible improvements :)&lt;/p&gt;&#xA;&lt;h3 id=&#34;features-bump-for-paid-plans&#34;&gt;Features bump for paid plans&lt;/h3&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve decided to tweak the &lt;a href=&#34;https://www.pythonanywhere.com/pricing/&#34;&gt;pricing&lt;/a&gt; and &lt;a href=&#34;https://www.pythonanywhere.com/account/&#34;&gt;accounts&lt;/a&gt; pages so that all plans are customisable.  As a bonus side-effect, we&amp;rsquo;ve slightly improved all the existing paid plans, so our beloved customers are going to get some free stuff:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All Hacker plans now allow you to replace your .pythonanywhere.com domain with a custom one&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve bumped the disk space for Hacker plans from 512MB to 2Gigs&lt;/li&gt;&#xA;&lt;li&gt;And we&amp;rsquo;ve bumped the Web Developer CPU quota from 3000 to 4000 seconds&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;package-installs&#34;&gt;Package installs&lt;/h3&gt;&#xA;&lt;p&gt;bottlenose, python-amazon-simple-product-api, py-bcrypt, Flask-Bcrypt, flask-restful, markdown (for Python 3), wheezy.template, pydub, and simpy (for Python 3) are now part of our standard &lt;a href=&#34;https://www.pythonanywhere.com/batteries_included/&#34;&gt;batteries included&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;pip-wheels-available&#34;&gt;Pip wheels available&lt;/h3&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve re-written our server build scripts to use wheels, and to build them for each package we install.  We&amp;rsquo;ve made them available (at &lt;em&gt;/usr/share/pip-wheels&lt;/em&gt;), and we&amp;rsquo;ve added them to the PythonAnywhere default pip config.  So, if you&amp;rsquo;re installing things into a virtualenv, if it so happens we already have a wheel for the package you want, pip will find it and the install will complete much faster.&lt;/p&gt;&#xA;&lt;h3 id=&#34;python-3-is-now-the-default-for-save--run&#34;&gt;Python 3 is now the default for save + run&lt;/h3&gt;&#xA;&lt;p&gt;The &amp;ldquo;Save and Run&amp;rdquo; button at the top of the editor, much beloved of teachers and beginners (and highly relevant for our &lt;a href=&#34;https://www.pythonanywhere.com/details/education&#34;&gt;education beta&lt;/a&gt;) now defaults to Python 3.  It&amp;rsquo;s 2015, this is the future after all.  We didn&amp;rsquo;t want to break things for existing users, so they will still have 2 as the default, but we can change that for you if you want.  Just drop us a line to &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;support@pythonanywhere.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;security-and-performance-improvements&#34;&gt;Security and performance improvements&lt;/h3&gt;&#xA;&lt;p&gt;Other than that, we&amp;rsquo;ve added a few minor security and performance tweaks.&lt;/p&gt;&#xA;&lt;p&gt;Onwards and upwards!&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Baby&#39;s First Steps (Part 1)</title>
      <link>https://blog.pythonanywhere.com/106/</link>
      <pubDate>Tue, 10 Feb 2015 17:00:48 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/106/</guid>
      <description>&lt;p&gt;Hi guys,&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m Conrad- a new member of the PythonAnywhere team. As a rather junior and&#xA;beginner programmer, I would like to share with you my story of how I set up my&#xA;work environment- my rationale for choosing and customizing my text editor, my&#xA;shell, my windows manager etc, and what I learned along the way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release -- better virtualenv handling for webapps, tmux, mutt, and our education beta</title>
      <link>https://blog.pythonanywhere.com/107/</link>
      <pubDate>Tue, 03 Feb 2015 06:56:28 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/107/</guid>
      <description>&lt;p&gt;Morning all!&lt;/p&gt;&#xA;&lt;p&gt;A pleasingly smooth deploy this morning, allowing us to bring you some new features we hope you&amp;rsquo;ll like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The web tab now has the option to specify a &lt;em&gt;virtualenv&lt;/em&gt;, which will then be used by the uWSGI workers that run your web app.  This avoids the ugly &lt;code&gt;exec activate_this&lt;/code&gt; hack we had to recommend, and should avoid issues with shadowing.  More info &lt;a href=&#34;https://www.pythonanywhere.com/wiki/Virtualenvs&#34;&gt;here&lt;/a&gt; and &lt;a href=&#34;https://www.pythonanywhere.com/wiki/UpgradingToTheNewVirtualenvSystem&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Thanks to Conrad (yay new guy!), we&amp;rsquo;ve added &lt;code&gt;tmux&lt;/code&gt; and &lt;code&gt;mutt&lt;/code&gt; as available binaries in consoles, for all you terminal wizzzards out there.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;And we&amp;rsquo;re doing a soft launch of our (very lean, very early) &lt;a href=&#34;https://www.pythonanywhere.com/details/education&#34;&gt;education beta&lt;/a&gt;.  We&amp;rsquo;ve started to built out some more features to make PythonAnywhere a great place to teach + learn Python, so do &lt;a href=&#34;https://www.pythonanywhere.com/details/education&#34;&gt;get in touch&lt;/a&gt; if you&amp;rsquo;re and educator and want to get involved.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That&amp;rsquo;s about that!  Keep hassling us for new features, and we&amp;rsquo;ll keep trying to deliver them as soon as we can&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>#VATMESS - or, how a taxation change took 4 developers a week to handle</title>
      <link>https://blog.pythonanywhere.com/105/</link>
      <pubDate>Fri, 19 Dec 2014 12:36:11 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/105/</guid>
      <description>&lt;p&gt;A lot of people are talking about the problems that are being caused by a recent&#xA;change to taxation in the EU;&#xA;&lt;a href=&#34;http://techcrunch.com/2014/11/25/eus-new-vatmoss-rules-could-create-a-vatmess-for-startups/&#34;&gt;this TechCrunch article&lt;/a&gt;&#xA;gives a nice overview of the issues.  But we thought it would be fun just to&#xA;tell about our experience - for general interest, and as an example of what one&#xA;UK startup had to do to implement these changes.  Short version: it hasn&amp;rsquo;t been fun.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New PythonAnywhere update: Mobile, UI, packages, reliability, and the dreaded EU VAT change</title>
      <link>https://blog.pythonanywhere.com/104/</link>
      <pubDate>Fri, 19 Dec 2014 09:23:58 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/104/</guid>
      <description>&lt;p&gt;We released a bunch of updates to PythonAnywhere today :-)   Short version:&#xA;we&amp;rsquo;ve made some improvements to the iPad and Android experience, applied fixes&#xA;to our in-browser console, added a bunch of new pre-installed packages, done a&#xA;big database upgrade that should make unplanned outages rarer and shorter, and&#xA;made changes required by EU VAT legislation (EU customers will soon be charged&#xA;their local VAT rate instead of UK VAT).&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere now supports Postgres</title>
      <link>https://blog.pythonanywhere.com/103/</link>
      <pubDate>Tue, 09 Dec 2014 18:48:41 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/103/</guid>
      <description>&lt;figure&gt;&#xA;    &lt;img src=&#34;./images/postgres_trac.png&#34; width=&#34;640px&#34; /&gt;&#xA;    &lt;figcaption&gt;Finally!&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr: upgrade to a &lt;a href=&#34;https://www.pythonanywhere.com/account/&#34;&gt;Custom account&lt;/a&gt; and you can now add Postgres&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release -- new console with 256 colours, some fixes to task logging, and the P-thing.</title>
      <link>https://blog.pythonanywhere.com/102/</link>
      <pubDate>Wed, 03 Dec 2014 09:03:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/102/</guid>
      <description>&lt;p&gt;Exciting new deploy today!&lt;/p&gt;&#xA;&lt;h3 id=&#34;a-new-console&#34;&gt;A new console&lt;/h3&gt;&#xA;&lt;p&gt;Obviously, the most important thing we did was to switch out our javascript console for a new one that supports 256 colours!  And slightly more sane copy + paste.  And it works on Android, or at least it does on Lollipop.  Giles recommends the &lt;a href=&#34;https://play.google.com/store/apps/details?id=org.pocketworkstation.pckeyboard&amp;amp;hl=en_GB&#34;&gt;Hackers keyboard&lt;/a&gt;.  Still doesn&amp;rsquo;t work on my blackberry though.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/256-colours-vim.png&#34; width=&#34;500px&#34;&gt;&lt;/img&gt;&lt;/p&gt;&#xA;&lt;p&gt;For the curious, it&amp;rsquo;s based on &lt;a href=&#34;https://chromium.googlesource.com/chromiumos/platform/assets/+/factory-2914.B/chromeapps/hterm/doc/faq.txt&#34;&gt;hterm&lt;/a&gt; which is a part of Chromium&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;some-new-packages&#34;&gt;Some new packages&lt;/h3&gt;&#xA;&lt;p&gt;Of secondary importance, we added a few new packages, including &lt;a href=&#34;http://ta-lib.org/&#34;&gt;TA-lib&lt;/a&gt;, &lt;a href=&#34;https://pypi.python.org/pypi/pytesseract/0.1&#34;&gt;pytesseract&lt;/a&gt;, and a thing called &lt;a href=&#34;http://www.ruffus.org.uk/&#34;&gt;ruffus&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;improved-logging-of-scheduled-tasks&#34;&gt;Improved logging of scheduled tasks&lt;/h3&gt;&#xA;&lt;p&gt;Scheduled tasks now log directly to files in &lt;em&gt;/var/log&lt;/em&gt;, rather than storing their output in our database.  That means they&amp;rsquo;ll get log-rotated like everything else in there, and if you call flush on your sys.stdout, you may even be able to see live updates while tasks are still running.  I think.&lt;/p&gt;&#xA;&lt;h3 id=&#34;new-database-type-supported&#34;&gt;New database type supported.&lt;/h3&gt;&#xA;&lt;p&gt;Oh, and we also released a new database type, it&amp;rsquo;s called Postgres, I&amp;rsquo;m told it&amp;rsquo;s quite popular.  Skip on over to the &lt;a href=&#34;https://www.pythonanywhere.com/pricing&#34;&gt;accounts page&lt;/a&gt; and get yourself a Custom account if you want to check it out.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/postgres3_thumb.png&#34; width=&#34;300px&#34;&gt;&lt;/img&gt;&lt;/p&gt;&#xA;&lt;p&gt;Happy coding everyone!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage report: 1st November 2014</title>
      <link>https://blog.pythonanywhere.com/101/</link>
      <pubDate>Sat, 01 Nov 2014 11:10:19 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/101/</guid>
      <description>&lt;p&gt;We had an outage this morning that lasted about an hour.  We&amp;rsquo;ve established the cause, fixed the problem, and all sites are now back up.  Apologies to all those affected.  More detail follows.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maintenance release:  trusty &#43; process listings</title>
      <link>https://blog.pythonanywhere.com/100/</link>
      <pubDate>Wed, 29 Oct 2014 07:51:13 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/100/</guid>
      <description>&lt;p&gt;Hi All,&lt;/p&gt;&#xA;&lt;p&gt;A maintenance release today, so nothing too exciting.   Still, a couple of things you may care about:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve updated to Ubuntu Trusty.  Although we &lt;a href=&#34;https://www.pythonanywhere.com/forums/topic/1663/&#34;&gt;weren&amp;rsquo;t vulnerable&lt;/a&gt; to shellshock, it&amp;rsquo;s nice to have the updated Bash, and to be on an LTS release&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve added an oft-requested feature to be able to view all your running console processes.  You&amp;rsquo;ll find it at the bottom of the &lt;a href=&#34;https://www.pythonanywhere.com/consoles&#34;&gt;consoles page&lt;/a&gt;.  The UI probably needs a bit of work, you need to hit refresh to update the list, but it&amp;rsquo;s a solution for when you think you have some detached processes chewing up your CPU quota!  Let us know what you think.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Other than that, we&amp;rsquo;ve updated our client-side for our Postgres beta to 9.4, and added some of the PostGIS utilities. (&lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;Email us&lt;/a&gt; if you want to check out the beta).  We also fixed an issue where a redirect loop would break the &amp;ldquo;reload&amp;rdquo; button on web apps, and we&amp;rsquo;ve added weasyprint and python-svn to the batteries included.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Try PythonAnywhere for free for a month!</title>
      <link>https://blog.pythonanywhere.com/99/</link>
      <pubDate>Mon, 27 Oct 2014 16:32:21 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/99/</guid>
      <description>&lt;figure&gt;&#xA;    &lt;img src=&#34;./images/1024px-Steps-ankor.jpg&#34; width=&#34;512&#34; alt=&#34;Angkor Wat steps&#34; title=&#34;Step Right Up Folks&#34;/&gt;&#xA;    &lt;figcaption&gt;Step Right Up Folks, Step Right Up...&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;OK, so we already have a free account, but we&amp;rsquo;d like to give out a free trial of our most popular paid plan, the &amp;ldquo;Web Developer&amp;rdquo; plan.  Here&amp;rsquo;s what you have to do to claim your free schtuff.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Site updates on 1 October 2014</title>
      <link>https://blog.pythonanywhere.com/98/</link>
      <pubDate>Wed, 01 Oct 2014 06:52:32 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/98/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just updated PythonAnywhere, and there&amp;rsquo;s some great news: Postgres is now in beta!  We&amp;rsquo;ve switched it on for a select list of beta testers; if you&amp;rsquo;d like to join, drop us a line at &lt;a href=&#34;mailto:support@pythonanywhere.com&#34;&gt;support@pythonanywhere.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;There have also been some minor tweaks and updates:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;New installed packages: OpenCV, the libproj Ubuntu package (useful for some Python GIS packages), WeasyPrint,&lt;/li&gt;&#xA;&lt;li&gt;General website speedup (improved minifying of CSS and JavaScript).&lt;/li&gt;&#xA;&lt;li&gt;The &amp;ldquo;Web&amp;rdquo; and &amp;ldquo;Databases&amp;rdquo; tabs remember which sub-tab you&amp;rsquo;re on between visits.&lt;/li&gt;&#xA;&lt;li&gt;Better validation on the web tab.&lt;/li&gt;&#xA;&lt;li&gt;The page displayed for web apps that have their DNS set up to route to PythonAnywhere but haven&amp;rsquo;t been set up has a better explanation of what&amp;rsquo;s going on.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Test-Driving a docker-based Postgres service using py.test</title>
      <link>https://blog.pythonanywhere.com/97/</link>
      <pubDate>Thu, 11 Sep 2014 16:05:58 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/97/</guid>
      <description>&lt;p&gt;&lt;em&gt;[cross-posted at &lt;a href=&#34;https://www.obeythetestinggoat.com/test-driving-a-docker-based-postgres-service-using-pytest.html&#34;&gt;Obey The Testing Goat!&lt;/a&gt;]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve been working on incorporating a Postgres database service into&#xA;PythonAnywhere, and we decided to make it into a bit of a standalone project.&#xA;The shiny is that we&amp;rsquo;re using Docker to containerise Postgres servers for our&#xA;users, and while we were at it we thought we&amp;rsquo;d try a bit of a different approach&#xA;to testing.  I&amp;rsquo;d be interested in feedback &amp;ndash; what do you like, what might you&#xA;do differently?&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release - a few new packages, some steps towards postgres, and forum post previews</title>
      <link>https://blog.pythonanywhere.com/96/</link>
      <pubDate>Thu, 21 Aug 2014 07:05:44 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/96/</guid>
      <description>&lt;p&gt;Today&amp;rsquo;s upgrade included a few new packages in the standard server image:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OpenSCAD&lt;/li&gt;&#xA;&lt;li&gt;FreeCAD&lt;/li&gt;&#xA;&lt;li&gt;inkscape&lt;/li&gt;&#xA;&lt;li&gt;Pillow for 3.3 and 3.4&lt;/li&gt;&#xA;&lt;li&gt;flask-bootstrap&lt;/li&gt;&#xA;&lt;li&gt;gensim&lt;/li&gt;&#xA;&lt;li&gt;textblob&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We also improved the default &amp;ldquo;Unhandled Exception&amp;rdquo; page, which is shown when a users&amp;rsquo; web app allows an exception to bubble up to our part of the stack.  We now include a slightly friendlier message, explaining to any of the users&amp;rsquo; users that there&amp;rsquo;s an error, and explaining to the user where they can find their log files and look for debug info.&lt;/p&gt;&#xA;&lt;p&gt;And in the background, we&amp;rsquo;ve deployed a bunch of infrastructure changes related to postgres support.  We&amp;rsquo;re getting there, slowly slowly!&lt;/p&gt;&#xA;&lt;p&gt;Oh yes, and we&amp;rsquo;ve enabled dynamic previews in the forums, so you get an idea of how the markdown syntax will translate.  It actually uses the same library as stackoverflow, it&amp;rsquo;s called &lt;a href=&#34;https://code.google.com/p/pagedown/&#34;&gt;pagedown&lt;/a&gt;.  Hope you find &amp;rsquo;em useful!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slides for Giles Thomas&#39; EuroPython talk now online</title>
      <link>https://blog.pythonanywhere.com/95/</link>
      <pubDate>Wed, 20 Aug 2014 12:21:14 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/95/</guid>
      <description>&lt;p&gt;Our founder, Giles Thomas, gave a high-level introduction to our load-balancing system as a talk at this summer&amp;rsquo;s EuroPython.  There&amp;rsquo;s a video up on PyVideo: &lt;a href=&#34;http://pyvideo.org/video/2994/an-http-requests-journey-through-a-platform-as-a&#34;&gt;An HTTP request&amp;rsquo;s journey through a platform-as-a-service&lt;/a&gt;.  And &lt;a href=&#34;./static/GT-EuroPython-talk-20140723.pdf&#34;&gt;here are the slides&lt;/a&gt; [PDF].&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere is looking for a new developer</title>
      <link>https://blog.pythonanywhere.com/94/</link>
      <pubDate>Thu, 14 Aug 2014 17:05:12 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/94/</guid>
      <description>&lt;img src=&#34;./images/200px-NAMA_Mystères_d&#39;Eleusis.jpg&#34; alt=&#34;ancient greek cult initiation&#34; title=&#34;ancient greek cult initiation&#34; /&gt;&#xA;&lt;p&gt;&lt;strong&gt;This position is now filled&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Fancy helping to build the Python world&amp;rsquo;s favourite PaaS (probably)?  We&amp;rsquo;re looking for a &amp;ldquo;junior&amp;rdquo; programmer with plenty of smarts to come and join the team, learn the stuff we do, and inject some new ideas&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Release</title>
      <link>https://blog.pythonanywhere.com/93/</link>
      <pubDate>Wed, 06 Aug 2014 06:59:54 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/93/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s new in the latest version of PythonAnywhere that we released this morning:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;User files are now on SSDs, so we&amp;rsquo;re expecting to see some performance improvements.&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve implemented a fix for the issue that we believe has been causing the recent outages and database access issues.&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve improved the general security of the PythonAnywhere web site.&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve added some minor fixes to the user interface&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Outage Report for 15 July 2014</title>
      <link>https://blog.pythonanywhere.com/92/</link>
      <pubDate>Wed, 16 Jul 2014 14:27:31 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/92/</guid>
      <description>&lt;p&gt;After a lengthy outage last night, we want to let you know about the&#xA;events that led up to it and how we can improve our outage responses to reduce&#xA;or eliminate downtime when things go wrong.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage report: lengthy upgrade this morning</title>
      <link>https://blog.pythonanywhere.com/91/</link>
      <pubDate>Fri, 20 Jun 2014 09:19:11 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/91/</guid>
      <description>&lt;p&gt;This morning we upgraded PythonAnywhere, and the upgrade process took much longer than expected.  Here&amp;rsquo;s what happened.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release: Python 3.4, and more!</title>
      <link>https://blog.pythonanywhere.com/90/</link>
      <pubDate>Fri, 20 Jun 2014 08:08:21 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/90/</guid>
      <description>&lt;p&gt;We released a new version of PythonAnywhere this morning.  There were some nasty problems with the go-live (more about that later) but here&amp;rsquo;s what we added:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Python 3.4 support, both for web applications and consoles.&lt;/li&gt;&#xA;&lt;li&gt;sftp and rsync&lt;/li&gt;&#xA;&lt;li&gt;Move from Amazon&amp;rsquo;s us-east-1a region to us-east-1c &amp;ndash; this will allow us to switch to newer, faster instances next week!&lt;/li&gt;&#xA;&lt;li&gt;And various minor bugfixes.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to gregdelozier, Malcolm, robert, aaronzimmerman, Cartroo, barnsey, andmalc, corvax, giorgostzampanakis, dominochinese, stablum, algoqueue for the suggestions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Minor release - bugfixes and performance tweaks</title>
      <link>https://blog.pythonanywhere.com/89/</link>
      <pubDate>Thu, 29 May 2014 06:10:15 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/89/</guid>
      <description>&lt;p&gt;A minor release today, which included:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A fix for the cairo/matplotlib regression&lt;/li&gt;&#xA;&lt;li&gt;Tweaks to log file permissions, to prevent an issue where they would become non-readable by the user&lt;/li&gt;&#xA;&lt;li&gt;Moving from several smaller servers to fewer larger ones, for web and console servers.  Overall visible performance impact should be minor, but positive.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Happy coding everyone!&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere News Round-up</title>
      <link>https://blog.pythonanywhere.com/88/</link>
      <pubDate>Tue, 06 May 2014 16:24:18 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/88/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been about 6 months since we last delivered a state-of-the-PythonAnywhere&#xA;address and, looking at everything that&amp;rsquo;s happened since the last one, it&amp;rsquo;s&#xA;long-overdue.&lt;/p&gt;&#xA;&lt;p&gt;Following the extremely &amp;hellip; mixed &amp;hellip; reaction to our &lt;a href=&#34;./76/&#34;&gt;upworthy/buzzfeed spoof&#xA;report&lt;/a&gt;, we decided to gauge the reaction&#xA;if we went in totally the opposite direction. So let&amp;rsquo;s get straight into&#xA;PythonAnywhere&amp;rsquo;s very first newsletter of 2014 — the &amp;ldquo;style is for wimps&amp;rdquo;&#xA;edition!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git push deployments on PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/87/</link>
      <pubDate>Thu, 01 May 2014 15:49:31 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/87/</guid>
      <description>&lt;img src=&#34;./images/push_git_off_cliff.png&#34; style=&#34;float: left; margin: 20px;&#34;&gt;&#xA;&lt;p&gt;Some of our frenemies in the PaaS world, who shall remain nameless, offer a&#xA;&amp;ldquo;git push&amp;rdquo; model for deployment.  People are fond of it, and sometimes ask us&#xA;whether they could do that on PythonAnywhere too.&lt;/p&gt;&#xA;&lt;p&gt;The answer is: you totally can! Because PythonAnywhere is, at heart, just a&#xA;web-based UI wrapped around a fully-featured Linux server environment, you&#xA;can do lots and lots of things.&lt;/p&gt;&#xA;&lt;p&gt;Here are the ingredients:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You&amp;rsquo;ll need a paid account so that SSH access is enabled.&lt;/li&gt;&#xA;&lt;li&gt;You set up a bare repo on PythonAnywhere, and set it as a remote to your&#xA;local code repo.&lt;/li&gt;&#xA;&lt;li&gt;And then you use a git &lt;em&gt;hook&lt;/em&gt; to automatically deploy your code and reload the&#xA;site on push.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>New release: a smorgasbord of changes</title>
      <link>https://blog.pythonanywhere.com/86/</link>
      <pubDate>Fri, 25 Apr 2014 11:30:57 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/86/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just released a new version of PythonAnywhere.  It has a lot of small changes: we&amp;rsquo;ve installed a bunch of new packages, and added the option to put basic HTTP authentication in front of your web app (for example, for sites that are under development).&lt;/p&gt;&#xA;&lt;p&gt;The big changes in this release are all under the hood.  We&amp;rsquo;ve completely reworked the way we construct the sandboxes that your code runs in.  This means that in the future it will be much easier for us to install new packages when people want them, and &amp;ndash; perhaps more importantly &amp;ndash; we&amp;rsquo;ll soon be able to support different sandbox images for different people.  This means that we&amp;rsquo;ll soon be able (for example) to provide Django 1.6 for new users without breaking the web apps of the people who use 1.3.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Securing PythonAnywhere from the Heartbleed bug</title>
      <link>https://blog.pythonanywhere.com/85/</link>
      <pubDate>Tue, 08 Apr 2014 12:53:42 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/85/</guid>
      <description>&lt;h3 id=&#34;the-short-version&#34;&gt;The short version&lt;/h3&gt;&#xA;&lt;p&gt;The Heartbleed bug impacted PythonAnywhere (along with pretty much every&#xA;Linux-based web service out there).  We don&amp;rsquo;t believe there&amp;rsquo;s any risk that&#xA;customer data has been leaked as a result of this problem, with the single&#xA;exception of private keys for HTTPS certificates for custom domains &amp;ndash; that is,&#xA;for websites hosted with us that &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; end with &lt;code&gt;.pythonanywhere.com&lt;/code&gt;.  We&#xA;don&amp;rsquo;t have any reason to believe that those private keys were leaked either &amp;ndash;&#xA;they&amp;rsquo;re just the only data that we think could possibly have been leaked by it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release: Custom plans</title>
      <link>https://blog.pythonanywhere.com/84/</link>
      <pubDate>Fri, 21 Mar 2014 08:49:47 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/84/</guid>
      <description>&lt;p&gt;&lt;em&gt;[updated 09:23 GMT to add bit about reload web app button]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;We just released a new version of PythonAnywhere, featuring the usual host of&#xA;impossible-for-you-to-verify-but-we&amp;rsquo;ll-still-claim-them stability improvements&#xA;and bugfixes, but there&amp;rsquo;s also some highly visible features, which we hope&#xA;you&amp;rsquo;ll like.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interactive shells on Python.org</title>
      <link>https://blog.pythonanywhere.com/83/</link>
      <pubDate>Fri, 21 Feb 2014 15:53:41 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/83/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re really proud to announce that we&amp;rsquo;re providing a &amp;ldquo;Launch interactive shell&amp;rdquo; feature for the newly-redesigned &lt;a href=&#34;https://www.python.org&#34;&gt;Python.org&lt;/a&gt; website.  We hope that the ease of just clicking on something on the site to try it out will help bring even more people over to The World&amp;rsquo;s Best Programming Language!&lt;/p&gt;&#xA;&lt;p&gt;Light technical details after the pretty picture&amp;hellip;&lt;/p&gt;&#xA;&lt;img src=&#34;./images/python-org-fp-after.png&#34; alt=&#34;Drawing&#34; style=&#34;width: 640px;&#34;/&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere now accepts credit cards.</title>
      <link>https://blog.pythonanywhere.com/82/</link>
      <pubDate>Thu, 13 Feb 2014 07:25:18 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/82/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re pleased to announce that we now support credit card payments!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/credit_card_upgrade.png&#34; alt=&#34;Screenshot of Credit card upgrade screen&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Note screenshot subliminally encouraging people to upgrade to the most expensive possible plan&amp;hellip;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;effective-immediately&#34;&gt;Effective immediately&amp;hellip;&lt;/h3&gt;&#xA;&lt;p&gt;You can use it effective immediately, and you can switch existing accounts away from PayPal too, if you like.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.pythonanywhere.com/pricing/&#34;&gt;Check out the new pricing + accounts page&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;lightning-fast-turnaround&#34;&gt;Lightning-fast turnaround&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/trac_ticket.png&#34; alt=&#34;Screenshot of old trac ticket&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Agile development in action&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In all seriousness, thanks to everyone that kept pestering us for this, and thanks for bearing with us. In a future post we&amp;rsquo;ll spend a bit of time moaning about Paypal&amp;rsquo;s flaky sandbox environment and how much better Stripe&amp;rsquo;s is&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;kitchen-sink&#34;&gt;Kitchen sink&amp;hellip;&lt;/h3&gt;&#xA;&lt;p&gt;In other news, we release several minor bugfixes, as well as a whole heap of extra packages:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;pyamf, beautifulsoup for python 3.3, marisa-trie, dataset, geoip, texlive-latex-extra, flask-httpauth, pygal, python-ldap, south for Python 3, xvfb-run, the latest scipy for Python 3, mysql-connector for Python 3, patsy, statsmodels, snappy and a full Haskell environment, just in case&amp;hellip;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Let us know how you get on with all that, folks!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scraping and number crunching for a sentiment analysis website</title>
      <link>https://blog.pythonanywhere.com/81/</link>
      <pubDate>Fri, 07 Feb 2014 13:45:28 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/81/</guid>
      <description>&lt;p&gt;Harrison Kinsley uses PythonAnywhere to generate the data he hosts at his sentiment analysis website, &lt;a href=&#34;http://sentdex.com/&#34;&gt;sentdex.com&lt;/a&gt;.  We asked him a bit about how the site works, and how he uses PythonAnywhere.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/sentdex.png&#34; alt=&#34;Screenshot of the Sentdex front page&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Editor&amp;rsquo;s note, aka the shameless marketing bit: the Sentdex code runs on our $99/month &lt;a href=&#34;https://www.pythonanywhere.com/pricing/&#34;&gt;Startup Plan&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere and CloudFlare</title>
      <link>https://blog.pythonanywhere.com/80/</link>
      <pubDate>Fri, 10 Jan 2014 15:17:07 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/80/</guid>
      <description>&lt;p&gt;&lt;strong&gt;This blog post has been &amp;ldquo;promoted&amp;rdquo; to a &lt;a href=&#34;https://help.pythonanywhere.com/pages/Cloudflare&#34;&gt;help page&lt;/a&gt;, and is not being&#xA;actively updated; see the help page for the most recent information.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.cloudflare.com&#34;&gt;CloudFlare&lt;/a&gt; is a security and acceleration service&#xA;that sits between your application and the big, bad internet. Here&amp;rsquo;s how to get&#xA;all that goodness for your PythonAnywhere web app.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HSK东西 Scripts: a site for learning Chinese characters - or, &#34;Handling Chinese characters with Python Unicode strings is less hassle than I thought it would be.&#34;</title>
      <link>https://blog.pythonanywhere.com/79/</link>
      <pubDate>Fri, 10 Jan 2014 11:03:19 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/79/</guid>
      <description>&lt;p&gt;Alan Davies is learning Chinese and couldn&amp;rsquo;t find a site that would work out what level of difficulty a text or a vocabulary list would be.  So he built &lt;a href=&#34;http://hskhsk.pythonanywhere.com/&#34;&gt;a site to do that&lt;/a&gt; on &lt;a href=&#34;http://www.pythonanywhere.com&#34;&gt;PythonAnywhere&lt;/a&gt;, our Python-focused PaaS and browser-based programming environment.  Bravely enough, he did it in Python 2, which is not renowned for its Unicode support.  While he says that &amp;ldquo;there are a few little things you have to be aware of&amp;rdquo; Unicode-wise, it turned out to be entirely doable and is now used by people learning Chinese all over the world.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/hsk.png&#34; alt=&#34;Screenshot of the HSK Scripts front page&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 3 web apps!</title>
      <link>https://blog.pythonanywhere.com/78/</link>
      <pubDate>Wed, 04 Dec 2013 13:21:21 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/78/</guid>
      <description>&lt;p&gt;As of today, PythonAnywhere supports Python 3 web apps for all frameworks that work with Python 3.  We&amp;rsquo;d love to hear any feedback people have.&lt;/p&gt;&#xA;&lt;p&gt;To create a Python 3 web app, just click the &amp;ldquo;Add a new web app&amp;rdquo; button.  If you have an existing web app that you&amp;rsquo;d like to switch over from Python 2.7 to Python 3, drop us a line with the &amp;ldquo;Send feedback&amp;rdquo; option.&lt;/p&gt;</description>
    </item>
    <item>
      <title>17 Xs About PythonAnywhere That Will Make You Y What You Thought About Z</title>
      <link>https://blog.pythonanywhere.com/76/</link>
      <pubDate>Tue, 26 Nov 2013 14:15:55 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/76/</guid>
      <description>&lt;p&gt;In an attempt to &lt;a href=&#34;https://xkcd.com/1283/&#34;&gt;get more clicks&lt;/a&gt;, this post (which,&#xA;emphatically, is &lt;em&gt;not&lt;/em&gt; a newsletter) has been rewritten in an annoying,&#xA;nu-internet upworthy/buzzfeed stylee. Welcome aboard!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scaling a popular internet radio station: an interview with Mark, creator of Stereodose</title>
      <link>https://blog.pythonanywhere.com/77/</link>
      <pubDate>Mon, 25 Nov 2013 12:42:09 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/77/</guid>
      <description>&lt;h3 id=&#34;or-what-happened-when-i-hit-the-front-page-of-reddit&#34;&gt;&lt;em&gt;Or: What happened when I hit the front page of reddit&amp;hellip;&lt;/em&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Mark is the creator of &lt;a href=&#34;http://www.stereodose.com/&#34;&gt;Stereodose&lt;/a&gt;, a wildly&#xA;popular internet radio station with a unique approach to generating playlists:&#xA;you pick your drug of choice, you pick your mood, and a customised selection of&#xA;tracks start to play.&lt;/p&gt;&#xA;&lt;p&gt;Stereodose is hosted by &lt;a href=&#34;https://www.pythonanywhere.com/&#34;&gt;PythonAnywhere&lt;/a&gt;, a&#xA;Python-focused PaaS and browser-based programming environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage Report for 19 November 2013</title>
      <link>https://blog.pythonanywhere.com/75/</link>
      <pubDate>Tue, 19 Nov 2013 18:53:40 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/75/</guid>
      <description>&lt;p&gt;[UPDATE: as of 22 November, backups are working again.]&lt;/p&gt;&#xA;&lt;p&gt;Backups have always been a source of trouble for us here at PythonAnywhere. We&#xA;have tried a number of ways to back up your files and all of them have&#xA;characteristics that make them less than suitable:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;EBS snapshots - these generate a nice, consistent point-in-time snapshot of&#xA;everyone&amp;rsquo;s files, but they slow disk access down too much and for too long&#xA;(in our experiments, a snapshot could entirely take down every user website&#xA;on the disk that&amp;rsquo;s backing up for half an hour and could cause slow disk&#xA;accesses for up to 6 hours)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Rsync - is nice and easy, but it also competes with users for disk access&#xA;and, because it takes a long time to run, can&amp;rsquo;t be used to provide&#xA;continually updated backups.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With that in mind, we set about finding a new backup solution that would&#xA;provide continual backups that we could then take point-in-time snapshots of.&#xA;As an extra bonus we&amp;rsquo;d like it to also provide on-line hot fail-over (and a&#xA;pony!)&lt;/p&gt;&#xA;&lt;p&gt;We found our solution in &lt;a href=&#34;http://www.drbd.org/&#34;&gt;DRBD&lt;/a&gt;. Essentially, it keeps 2&#xA;disks on different machines synchronised across the network. Our users could use&#xA;a set of primary disks, and they&amp;rsquo;d be constantly synchronised with a set of&#xA;secondary disks.  We could then use&#xA;the secondary disks to take snapshots with no effect on the performance of&#xA;the primary disks that our users relied on and we could (if one of the the primary disks failed)&#xA;immediately switch to using its secondary disk without anyone even noticing the&#xA;switch. As an added bonus, DRBD would enable zero-downtime upgrades to&#xA;PythonAnywhere and that is a goal that we&amp;rsquo;re very keen to achieve.&lt;/p&gt;&#xA;&lt;p&gt;That was the theory. In practice, we needed a multi-step process to implement&#xA;DRBD in our infrastructure without jeopardising our users&amp;rsquo; data. The upgrade on&#xA;19 November was the second step of the process and, on the surface, it should&#xA;have been a simple step that was easy to do. Here&amp;rsquo;s how it went wrong (all&#xA;times in UTC).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Latest updates -- embedabble Python 3, logrotate and fixed HTTPS/proxy/requests issue</title>
      <link>https://blog.pythonanywhere.com/73/</link>
      <pubDate>Thu, 17 Oct 2013 15:10:24 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/73/</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;&#xA;&lt;p&gt;New, fresh PythonAnywhere today!  Here&amp;rsquo;s what you get:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Embeddable Python 3 consoles&lt;/strong&gt;!  Just use an iframe like this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;lt;iframe style=&amp;quot;width: 640; height: 480; border: none;&amp;quot; name=&amp;quot;embedded_python_anywhere&amp;quot; id=&amp;quot;id_florence_iframe&amp;quot; src=&amp;quot;https://www.pythonanywhere.com/embedded3/&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to Gerald for pushing us to get that in.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Logrotate&lt;/strong&gt; is now switched on for your web app log files by default, so no scrolling through 10-meg log files any more!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And finally, and this was a long time coming &amp;ndash;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;requests&lt;/code&gt; now works properly over HTTPS via our proxy!  (If you&amp;rsquo;re using a virtualenv you&amp;rsquo;ll need to update it yourself &amp;ndash; &lt;code&gt;pip install -U requests&lt;/code&gt; should do the job.  If you&amp;rsquo;re not using a virtualenv it should Just Work)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to all the &lt;a href=&#34;https://github.com/kennethreitz/requests/pull/478&#34;&gt;hard work&lt;/a&gt; from the guys that maintain requests and urllib3:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Speeding up the filesystem</title>
      <link>https://blog.pythonanywhere.com/71/</link>
      <pubDate>Wed, 28 Aug 2013 15:09:10 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/71/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;./images/high_speed_roller.jpg&#34; alt=&#34;Speed illustration&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today we updated PythonAnywhere with a simple, but effective improvement.  Filesystem access from your web apps and consoles should now be much faster.  Here&amp;rsquo;s what we did.&lt;/p&gt;</description>
    </item>
    <item>
      <title>XFS project IDs - why we switched from Debian to Ubuntu for our File storage</title>
      <link>https://blog.pythonanywhere.com/61/</link>
      <pubDate>Wed, 21 Aug 2013 17:58:53 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/61/</guid>
      <description>&lt;p&gt;Back in March, we discovered a problem on PythonAnywhere.  Some of the people&#xA;who were signing up reported that the site was telling them that they&amp;rsquo;d used all&#xA;of their 500Mb disk quota, even though they had almost no files.  When we logged&#xA;in to our file servers and checked manually using the system tools &amp;ndash; like &lt;code&gt;df&lt;/code&gt;&#xA;&amp;ndash; we saw the same thing.  Our system wasn&amp;rsquo;t misreporting what the operating&#xA;system said, the operating system itself was at fault.  But curiously, when we&#xA;used &lt;code&gt;du&lt;/code&gt; to see how much space their files were taking up, it gave the correct&#xA;(much smaller) numbers.  This blog post explains what we discovered, and how we&#xA;fixed it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Better, faster, stronger webapps</title>
      <link>https://blog.pythonanywhere.com/70/</link>
      <pubDate>Tue, 13 Aug 2013 17:26:19 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/70/</guid>
      <description>&lt;p&gt;Today we deployed the first in a set of large-scale infrastructure improvements, and the big win for everyone is that web apps are much faster, and much-better insulated from each other.  It should also help reliability &amp;ndash; we&amp;rsquo;re expecting that the daily problems where some apps had 502 errors at around mid-morning UTC will no longer occur.&lt;/p&gt;&#xA;&lt;p&gt;There are a bunch more infrastructural improvements in the pipeline &amp;ndash; stay tuned!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage report for today - an AWS interface mishap</title>
      <link>https://blog.pythonanywhere.com/69/</link>
      <pubDate>Tue, 13 Aug 2013 17:06:09 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/69/</guid>
      <description>&lt;p&gt;We deployed a new version of PythonAnywhere today with some cool new stuff &amp;ndash;&#xA;more on that later.  But there was a nasty outage, and it might be worth&#xA;explaining just in case anyone else is at risk of getting bitten by the same problem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Filesystem performance problems</title>
      <link>https://blog.pythonanywhere.com/68/</link>
      <pubDate>Fri, 28 Jun 2013 16:01:49 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/68/</guid>
      <description>&lt;p&gt;A number of people (including ourselves while we&amp;rsquo;re &lt;a href=&#34;https://en.wikipedia.org/wiki/Eating_your_own_dog_food&#34;&gt;dogfooding&lt;/a&gt;) are seeing very slow disk access on PythonAnywhere at the moment.&lt;/p&gt;&#xA;&lt;p&gt;The problem is twofold:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A smaller cause: we moved to Ubuntu as our underlying base operating system recently, and this appears to be more disk-intensive than our older Debian-based system.&lt;/li&gt;&#xA;&lt;li&gt;The big problem: our system currently uses NFS to share each user&amp;rsquo;s files between their web applications, consoles, and scheduled tasks.  This gives a bottleneck which hasn&amp;rsquo;t been a huge problem in the past, but is becoming quite serious as more people join PythonAnywhere.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The OS upgrade problem may be fixable in the short term &amp;ndash; we&amp;rsquo;re working to identify what&amp;rsquo;s causing the greater disk access &amp;ndash; but the bigger problem will need a bigger fix.  We&amp;rsquo;re benchmarking a number of alternative filesystems (the current leader seems to be &lt;a href=&#34;http://www.gluster.org/&#34;&gt;GlusterFS&lt;/a&gt;) to see which is most likely to handle scaling better, and will make the move as soon as we can.&lt;/p&gt;&#xA;&lt;p&gt;Please bear with us!&lt;/p&gt;</description>
    </item>
    <item>
      <title>How many Python programmers are there in the world?</title>
      <link>https://blog.pythonanywhere.com/67/</link>
      <pubDate>Mon, 24 Jun 2013 18:23:37 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/67/</guid>
      <description>&lt;p&gt;&lt;em&gt;Cross-posted from our founder&amp;rsquo;s blog, &lt;a href=&#34;http://www.gilesthomas.com/?p=586&#34;&gt;gilesthomas.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve been talking to some people recently who really wanted to know what the potential market size was for &lt;a href=&#34;https://www.pythonanywhere.com/&#34;&gt;PythonAnywhere&lt;/a&gt;, our Python Platform-as-a-Service and cloud-based IDE.&lt;/p&gt;&#xA;&lt;p&gt;There are a bunch of different ways to look at that, but the most obvious starting point is, &amp;ldquo;how many people are coding Python?&amp;rdquo;  This blog post is an attempt to get some kind of order-of-magnitude number for that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu upgrade -- some minor user-visible features</title>
      <link>https://blog.pythonanywhere.com/66/</link>
      <pubDate>Wed, 19 Jun 2013 11:22:32 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/66/</guid>
      <description>&lt;p&gt;Switching from Debian to Ubuntu was obviously quite a big infrastructure leap so we&amp;rsquo;ve tried to keep this release as feature-free as possible, but there are still a few user-visible changes that you&amp;rsquo;ll see.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Vim&lt;/strong&gt; goes from version 7.2 to 7.3, woo!&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Emacs&lt;/strong&gt; goes from version 23.2 to 23.4.  meh.  we&amp;rsquo;ll upgrade to 24 when we get a chance (as if anyone uses emacs, anyway).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Git&lt;/strong&gt; goes from version 1.7.10 to version 1.8.1  (&lt;a href=&#34;https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.0.txt&#34;&gt;release notes&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt; goes from version 2.7.3 to 2.7.4 and 3.3.0 to 3.3.1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And you get a few other Ubuntu goodies, like &lt;code&gt;ll&lt;/code&gt; as an alias for &lt;code&gt;ls -l&lt;/code&gt;, more colourful bash output, and so on&amp;hellip; Let us know if you have any particular favourites.&lt;/p&gt;&#xA;&lt;p&gt;But for us, the big win was the move from kernel 2.6.32 to 3.8.0.  W00t.&lt;/p&gt;&#xA;&lt;p&gt;PS &amp;ndash; as part of this release we&amp;rsquo;re also allowing community submissions for our mini tutorials. &lt;a href=&#34;https://www.pythonanywhere.com/forums/topic/703/&#34;&gt;More info in the forums&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere vs Heroku</title>
      <link>https://blog.pythonanywhere.com/65/</link>
      <pubDate>Fri, 24 May 2013 16:18:57 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/65/</guid>
      <description>&lt;p&gt;Heroku was originally a Platform as a service that helped Ruby developers&#xA;deploy their Rails applications. Recently they branched out into supporting&#xA;other interpreted languages like Python. So now that Heroku are stepping&#xA;directly on our toes we thought it would be good to compare us directly to&#xA;them and maybe help people decide, depending on their needs, who they should&#xA;go with.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The story of brer programmer and the tar-pit</title>
      <link>https://blog.pythonanywhere.com/64/</link>
      <pubDate>Mon, 13 May 2013 16:10:55 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/64/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re experimenting with different ways of balancing resource usage between our users.  One problem we&amp;rsquo;ve been experiencing is that individual users could quite easily suck up almost all of the CPU power on a console server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using PythonAnywhere in Chrome&#39;s App mode</title>
      <link>https://blog.pythonanywhere.com/63/</link>
      <pubDate>Fri, 19 Apr 2013 12:11:12 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/63/</guid>
      <description>&lt;p&gt;Using Vim inside a PythonAnywhere console could be a bit annoying. A number of keyboard shortcuts are caught by the browser before they ever hit our site. Notably for Vim these include Ctrl-W and Ctrl-T.&lt;/p&gt;&#xA;&lt;p&gt;But there is a better way! And it involves making Chrome open PythonAnywhere in it&amp;rsquo;s special application mode. In this mode absolutely none of the keyboard shortcuts are captured. It&amp;rsquo;s neat. Which is my reserved way of saying that it fixes EVERY problem I&amp;rsquo;ve had with PythonAnywhere and Vim.&lt;/p&gt;&#xA;&lt;p&gt;I also imagine that those intrepid Emacs users will be happy to be able to send all those torturous escape sequences as well. Bless them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Loads more packages, AsciiDoc, plus paginated forums, finally!</title>
      <link>https://blog.pythonanywhere.com/62/</link>
      <pubDate>Thu, 21 Mar 2013 13:38:05 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/62/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve got several infrastructure stability + reliability improvements in this release, but more visible are some of the new binaries and packages.&lt;/p&gt;&#xA;&lt;p&gt;Someone (&lt;a href=&#34;https://www.tdd-django-tutorial.com/tutorial/6/&#34;&gt;I wonder who?&lt;/a&gt;) demanded a whole &lt;a href=&#34;http://www.methods.co.nz/asciidoc/&#34;&gt;AsciiDoc&lt;/a&gt; toolchain to be able to write books with.  Aside from that, you&amp;rsquo;ll find:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://pycurl.sourceforge.net/&#34;&gt;pyCurl&lt;/a&gt;  (thanks jquacinella)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/pypi/pyquery&#34;&gt;pyquery&lt;/a&gt; (thanks chnrxn)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/knowah/PyPDF2/&#34;&gt;PyPDF2&lt;/a&gt; (thanks madsquint)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/pypi/pyUnRAR2&#34;&gt;pyunrar2&lt;/a&gt; (thanks Brian)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/pypi/django-openid-auth/&#34;&gt;django-openid-auth&lt;/a&gt; (thanks ferens_dima)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://epydoc.sourceforge.net/&#34;&gt;epydoc&lt;/a&gt; (thanks mdipierro + rochacbruno)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/glamp/bashplotlib&#34;&gt;bashplotlib&lt;/a&gt;  (we found that one ourselves - v cool!)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/pypi/census/&#34;&gt;census&lt;/a&gt; (thanks Brett)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://code.google.com/p/sqlalchemy-migrate/&#34;&gt;sqlalchemy-migrate&lt;/a&gt; (thanks )&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/pypi/Whoosh/&#34;&gt;Whoosh&lt;/a&gt; and &lt;a href=&#34;https://github.com/gyllstromk/Flask-WhooshAlchemy&#34;&gt;flask-whooshalchemy&lt;/a&gt; (thanks )&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You&amp;rsquo;ll also find Twitter&amp;rsquo;s &lt;a href=&#34;https://npmjs.org/package/bower&#34;&gt;Bower&lt;/a&gt; browser / front-end web-dev package management tool.&lt;/p&gt;&#xA;&lt;p&gt;Other minor fixes include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;fixing an issue with restricted internet access in SSH&lt;/li&gt;&#xA;&lt;li&gt;the &amp;ldquo;reload&amp;rdquo; button for web apps is now clearly labeled with the domain it reloads&lt;/li&gt;&#xA;&lt;li&gt;Trailing spaces no longer break static files mappings&lt;/li&gt;&#xA;&lt;li&gt;And the &lt;a href=&#34;https://www.pythonanywhere.com/forums/&#34;&gt;forums&lt;/a&gt; are finally paginated!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Let us know if everything looks OK!&lt;/p&gt;</description>
    </item>
    <item>
      <title>How do I serve static files using django &amp; PythonAnywhere?</title>
      <link>https://blog.pythonanywhere.com/60/</link>
      <pubDate>Fri, 01 Mar 2013 15:56:17 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/60/</guid>
      <description>&lt;p&gt;&lt;em&gt;[update 2014-08-27] &amp;ndash; this guide is out of date.  Please refer to the &lt;a href=&#34;https://help.pythonanywhere.com/pages/StaticFiles&#34;&gt;help page on static files&lt;/a&gt; instead.]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Static files are the bits of your web site/application that are not created on the fly by Python. They might be images you want to embed, css files for styling, or even a PDF that you want people to be able to download.&lt;/p&gt;&#xA;&lt;p&gt;If you use &lt;a href=&#34;https://www.pythonanywhere.com/details/django_hosting&#34;&gt;PythonAnywhere&amp;rsquo;s Django quickstart &lt;/a&gt; then we already provide some sensible defaults which will get things working without you having to do anything. If however you are migrating an existing site or want to set things up manually then I will walk you through the process.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release - fileserver fixes and a couple of tweaks</title>
      <link>https://blog.pythonanywhere.com/59/</link>
      <pubDate>Thu, 28 Feb 2013 05:22:53 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/59/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://farm3.staticflickr.com/2148/5767790714_e6c2f55f63.jpg&#34; alt=&#34;London sunrise by A nosa disco necesítanos, on Flickr&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Giles and I are just winding down following our early morning deploy &amp;ndash; it was a 3AM start for the two of us.  Our best case was 20 minutes of downtime, our worst case prediction was about 3.5 hours.  We came in at just under an hour and a half in the end.  Definitely glad we did it so early in the morning.&lt;/p&gt;&#xA;&lt;p&gt;The main reason for the deploy was an infrastructure upgrade, the fileserver has been upgraded from Debian to Ubuntu.  It&amp;rsquo;s been in testing for 3 weeks, and it should fix an intermittent issue with user quotas.  Will follow up with more highly nerdy technical detail about XFS and NFS, later.&lt;/p&gt;&#xA;&lt;p&gt;We still managed to slip in a couple of tiny improvements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;envsubst&lt;/code&gt; now works in chroot jails, which was otherwise causing some worrying messages for anyone trying a &lt;code&gt;git rebase&lt;/code&gt;.  But, to be honest, &lt;a href=&#34;http://tartley.com/?p=1267&#34;&gt;git rebase is terrifying&lt;/a&gt; at the best of times.&lt;/li&gt;&#xA;&lt;li&gt;a small bugfix to the &lt;a href=&#34;./56/&#34;&gt;PythonAnywhere static files UI&lt;/a&gt;, where users with multiple webapps had duplicate &amp;ldquo;Add new entry&amp;rdquo; elements&lt;/li&gt;&#xA;&lt;li&gt;And a fix to our &lt;a href=&#34;http://bottlepy.org/&#34;&gt;Bottle.py&lt;/a&gt; quick-deploy wizard, which means templates now work out of the box&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Anyone else had some fun with early starts recently?  I don&amp;rsquo;t think Giles even went to bed to be honest&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Image credit: &lt;a href=&#34;http://www.flickr.com/photos/xabiercid/5767790714/&#34;&gt;London sunrise by A nosa disco necesítanos, on Flickr&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Python trademark in Europe</title>
      <link>https://blog.pythonanywhere.com/58/</link>
      <pubDate>Mon, 18 Feb 2013 15:19:57 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/58/</guid>
      <description>&lt;p&gt;Last Thursday, &lt;a href=&#34;http://pyfound.blogspot.ca/2013/02/python-trademark-at-risk-in-europe-we.html&#34;&gt;the Python Software Foundation announced&lt;/a&gt; that a UK-based company had applied for the exclusive European-wide trademark on the word Python as applied to software, web hosting, computer services, and so on.&lt;/p&gt;&#xA;&lt;p&gt;Obviously we&amp;rsquo;re a little concerned about this, and we recommend that anyone else who&amp;rsquo;s using Python in a business in the EU should go to the PSF post linked above and see if there&amp;rsquo;s anything they can do to help.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A kickstarter book project</title>
      <link>https://blog.pythonanywhere.com/57/</link>
      <pubDate>Thu, 07 Feb 2013 17:48:31 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/57/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re proud to be sponsoring some of the rewards for Michael Herman&amp;rsquo;s Kickstarter book project: &lt;a href=&#34;http://kck.st/VQj8hq&#34;&gt;Real Python for Web Development, featuring web2py&lt;/a&gt;.  Michael has a great plan and solid experience, and web2py creator Massimo Di Pierro and Fletcher Heisler, the author of &lt;a href=&#34;http://www.kickstarter.com/projects/fletcher/practical-python-learn-programming-for-the-real-wo&#34;&gt;Real Python&lt;/a&gt;, are helping out as co-editors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Static files -- finally!</title>
      <link>https://blog.pythonanywhere.com/56/</link>
      <pubDate>Thu, 07 Feb 2013 12:15:08 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/56/</guid>
      <description>&lt;p&gt;The big news for this release is proper static files support.  Until now users either had to serve files via Python, using their web app framework, or use an undocumented and unsupported feature of hacking things into &lt;code&gt;/var/www/static&lt;/code&gt;.  Slightly embarassing.&lt;/p&gt;&#xA;&lt;p&gt;So, we&amp;rsquo;re pleased to present to you our first attempt at proper support for static files.  Check out the &lt;a href=&#34;https://www.pythonanywhere.com/web_app_setup/&#34;&gt;Web Tab&lt;/a&gt;, and you&amp;rsquo;ll find a new section allowing you to map URLs to folders in your patch &amp;ndash; these can be anywhere you like, they don&amp;rsquo;t have to be in /var/www.&lt;/p&gt;&#xA;&lt;p&gt;Let us know how you like it!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;./images/static_files.png&#34; alt=&#34;Screenshot of static files UI&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Bonus, secret update &amp;ndash; check out the editor.  If you don&amp;rsquo;t see anything new, that&amp;rsquo;s probably good news, but if you do notice anything, it&amp;rsquo;s probably a little warning message from &lt;strong&gt;PyFlakes&lt;/strong&gt;, which should automatically detect some potential problems with your Python code, like syntax errors, unused imports and so on.  Hope you find it helpful!  (we all use it).&lt;/p&gt;&#xA;&lt;p&gt;Thanks to everyone that&amp;rsquo;s been chasing us to get static files in, including njr, x, econpy, kgullion, sterling312 and little_dood.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outage report; or, the perils of using 502s to trigger web application initialisation</title>
      <link>https://blog.pythonanywhere.com/55/</link>
      <pubDate>Fri, 01 Feb 2013 11:22:19 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/55/</guid>
      <description>&lt;p&gt;Last weekend, we had two outages, both in the early hours (UK time) of the&#xA;morning; we were finding it hard to diagnose the cause, because our outage alert&#xA;system had failed and we only discovered it in each case when someone happened&#xA;to check their email.  On Monday we fixed the outage alert system.&lt;/p&gt;&#xA;&lt;p&gt;Yesterday we had another, every phone in the office started beeping loudly, and&#xA;we logged in right away &amp;ndash; so we know what made it happen.  While we&amp;rsquo;re not 100%&#xA;sure that the cause of this problem was the same as the one on the weekend, the&#xA;symptoms were similar enough that we&amp;rsquo;re pretty sure that it was.&lt;/p&gt;&#xA;&lt;p&gt;The symptom in all of these cases was that the main PythonAnywhere website was&#xA;down, giving &amp;ldquo;502 Bad Gateway&amp;rdquo; errors.  Over the weekend, all of the customer&#xA;websites we checked were OK, but when it happened yesterday, we noticed that one&#xA;specific customer website was extremely busy, and getting the same 502 error.&#xA;Further investigation showed that it had been linked from the front page of&#xA;Reddit and was getting about 100 hits/second.  So that would explain why it was&#xA;so busy &amp;ndash; and the site&amp;rsquo;s author hadn&amp;rsquo;t expected so much traffic so soon, so it&#xA;was not super-optimised, which would explain why it couldn&amp;rsquo;t handle the load.&lt;/p&gt;&#xA;&lt;p&gt;But the question was, how was it affecting the main PythonAnywhere site?  We&#xA;have a lot of stuff in place to stop web applications from affecting each other,&#xA;which is why the other user websites on the same server were up and running.&lt;/p&gt;&#xA;&lt;p&gt;Explaining what happened requires a little background, both about how nginx&#xA;works and about how we use it and uwsgi to serve large numbers of Python web&#xA;applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release :-)</title>
      <link>https://blog.pythonanywhere.com/54/</link>
      <pubDate>Mon, 28 Jan 2013 13:45:17 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/54/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just released a new version of PythonAnywhere.  This is a scheduled release of a set of new features, and is not related to the weekend&amp;rsquo;s outages (which are still under investigation, hopefully we&amp;rsquo;ll have more information soon!).&lt;/p&gt;&#xA;&lt;p&gt;The new stuff is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve upgraded our Python 3 version from 3.2 to 3.3.&lt;/li&gt;&#xA;&lt;li&gt;Bugfix: if you quick-start a web2py app in a directory that is not ~/web2py, the admin password will now be correctly set.&lt;/li&gt;&#xA;&lt;li&gt;Improved UI on iPads &amp;ndash; you can now hide the space that we reserve for the on-screen keyboard, which is useful if you&amp;rsquo;re using a Bluetooth keyboard, or are just monitoring a log file.&lt;/li&gt;&#xA;&lt;li&gt;New packages: R, RPy, gettext, geventhttpclient, npm (yes, that&amp;rsquo;s right &amp;ndash; node.js on PythonAnywhere &amp;ndash; you can&amp;rsquo;t run a node server yet though), PyStemmer, mysql.connector, asciidoc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to all of the people who suggested these fixes, including  marladarla7, pigeonflight, pwoolcoc, gebloom, djfinton, chanin, markstocks,  jpic, ezamr, and Kernie_xvid.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Outages over the weekend</title>
      <link>https://blog.pythonanywhere.com/53/</link>
      <pubDate>Mon, 28 Jan 2013 10:33:14 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/53/</guid>
      <description>&lt;p&gt;Over the last weekend we had three separate outages; it appears that something on one of our servers was rapidly increasing the memory it was using and took down the main PythonAnywhere website.  The majority of our users websites were unaffected.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re investigating the problem and will post again with an update.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release - more console stability improvements, unicode fix</title>
      <link>https://blog.pythonanywhere.com/52/</link>
      <pubDate>Wed, 09 Jan 2013 13:56:52 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/52/</guid>
      <description>&lt;p&gt;Today&amp;rsquo;s new release features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;a fix to the file browser unicode bug.  This was a regression whereby non-ascii characters in filenames caused problems.  Shame on us!  fixed now.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I&amp;rsquo;m counting chickens here, but  we &lt;em&gt;may&lt;/em&gt; have fixed one of our resource leaks, which means we should need to restart console servers less often.  That should mean that your console sessions can stay live for longer&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Improvements to load-balancing between console servers.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;and finally, a bugfix that was causing errors in &amp;ldquo;Reload Web app&amp;rdquo;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to everyone that&amp;rsquo;s been pestering/encouraging us to get these fixes and features in, and people who&amp;rsquo;ve reported bugs, including a2j, in4paschenko, btccharts, web2pyslices, lmsmodule , nim4n, SignumSol, viralto, hardsoft, xdanyelo, afinney, rudi, tanay009 + sansoftaus&lt;/p&gt;&#xA;&lt;p&gt;Keep in touch!&lt;/p&gt;</description>
    </item>
    <item>
      <title>WEBAPP ALL THE THINGS!</title>
      <link>https://blog.pythonanywhere.com/51/</link>
      <pubDate>Thu, 20 Dec 2012 15:14:59 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/51/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;./images/internet_map.jpg&#34; alt=&#34;Map of the internet&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Well, it&amp;rsquo;s been weeks and weeks and weeks, but we&amp;rsquo;ve finally (finally) managed&#xA;to get a version of &lt;strong&gt;MULTIPLE WEBAPPS&lt;/strong&gt; out.&lt;/p&gt;&#xA;&lt;p&gt;This is a soft launch, so all you avid blog and forum readers are finding out&#xA;about it first.  We&amp;rsquo;d love your feedback!  Is it working OK?  Can you break it?&#xA;What should we improve?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Calling all LaTeX experts...</title>
      <link>https://blog.pythonanywhere.com/50/</link>
      <pubDate>Fri, 07 Dec 2012 12:22:57 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/50/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;./images/latex_lion.png&#34; alt=&#34;LaTeX Lion&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve just released a new version of&#xA;&lt;a href=&#34;https://www.pythonanywhere.com/&#34;&gt;PythonAnywhere&lt;/a&gt; which features a full suite of&#xA;LaTex executables, available for you to run, in a browser, in our Bash consoles.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve been experimenting with this for a couple of weeks, and we&amp;rsquo;ve had people&#xA;in floods of gratitude, saying &amp;ldquo;YES!  Never again will I have to install LaTeX!&#xA;Thank you thank you thank you!&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;So, perhaps it&amp;rsquo;s of use to other people out there, even outside the world of&#xA;Python?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Faster file creation and saving </title>
      <link>https://blog.pythonanywhere.com/49/</link>
      <pubDate>Wed, 28 Nov 2012 12:23:41 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/49/</guid>
      <description>&lt;p&gt;Hi all,&lt;/p&gt;&#xA;&lt;p&gt;We deployed a new version this morning. The visible changes are&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a speed up of file creation and file saving. This means that all of the most pressing issues around the file browser performance have now been fixed&lt;/li&gt;&#xA;&lt;li&gt;The Python mimetypes module now works correctly&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Progress on multiple web apps is looking good. We are rewriting the last couple of &amp;lsquo;Quickstarts&amp;rsquo; right now.&lt;/p&gt;&#xA;&lt;p&gt;Cheers&lt;/p&gt;</description>
    </item>
    <item>
      <title>Even-even-fasterer file browsing and editing, woo</title>
      <link>https://blog.pythonanywhere.com/48/</link>
      <pubDate>Wed, 21 Nov 2012 12:16:10 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/48/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just released a new version with some more improvements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;browsing files a tad faster&lt;/li&gt;&#xA;&lt;li&gt;opening files for viewing + editing &lt;em&gt;much&lt;/em&gt; faster&lt;/li&gt;&#xA;&lt;li&gt;saving files still slow&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve also added a few packages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://orange.biolab.si/&#34;&gt;Orange&lt;/a&gt; (thanks menemosyne1212)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://packages.python.org/flask-mail/&#34;&gt;flask-mail&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://hg-git.github.com/&#34;&gt;Hg-Git&lt;/a&gt; (thanks kitsu_eb)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://sites.google.com/site/pydatalog/&#34;&gt;PyDataLog&lt;/a&gt; (thanks Pierre)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;&#34;&gt;s3cmd&lt;/a&gt; (thanks basketcase)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;More improvements on their way - speeding up saving files is next, and we&amp;rsquo;re back to work on finishing multiple webapps, so hopefully that won&amp;rsquo;t be long either.&lt;/p&gt;&#xA;&lt;p&gt;Keep your feedback and suggestions coming!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Faster file viewing</title>
      <link>https://blog.pythonanywhere.com/47/</link>
      <pubDate>Mon, 19 Nov 2012 14:08:48 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/47/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just pushed an updated version of PythonAnywhere!  The biggest change this&#xA;time around is that browsing through directories in the &amp;ldquo;Files&amp;rdquo; tab is &lt;em&gt;much&lt;/em&gt;&#xA;quicker.&lt;/p&gt;&#xA;&lt;p&gt;Some background: in the older version of PythonAnywhere, every time you browsed&#xA;a directory, we launched a new process that ran inside your sandbox.  This gave us&#xA;great security pretty much for free &amp;ndash; as the file view was running in your&#xA;sandbox, it was certain that you couldn&amp;rsquo;t see anyone else&amp;rsquo;s files.  The problem&#xA;was that as more and more people started using PythonAnywhere (yay!) more and&#xA;more processes were being launched, and it got slower and slower (boo!).  So&#xA;we&amp;rsquo;ve had to bite the bullet and code our own secure sandboxed file browser.&#xA;The first cut of this, which just uses the new system for browsing directories,&#xA;is what we&amp;rsquo;ve just released.  We&amp;rsquo;re also working on using the same technique for&#xA;viewing, saving and editing files &amp;ndash; that&amp;rsquo;s coming soon.&lt;/p&gt;&#xA;&lt;p&gt;There have also been a couple of minor tweaks: &lt;code&gt;head&lt;/code&gt; and &lt;code&gt;ping&lt;/code&gt; are now&#xA;available from Bash consoles, and user web applications can now accept requests&#xA;of 32kB, up from 4kB (which was too small for, in particular, web apps that&#xA;wanted to use OpenID).&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release - a first crack at scaling issues</title>
      <link>https://blog.pythonanywhere.com/46/</link>
      <pubDate>Fri, 09 Nov 2012 13:39:04 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/46/</guid>
      <description>&lt;p&gt;Hi all,&lt;/p&gt;&#xA;&lt;p&gt;As many of you know, we&amp;rsquo;ve been having some&#xA;&lt;a href=&#34;./45/&#34;&gt;scaling issues&lt;/a&gt; in the last week or so.  This new release is our first&#xA;crack at addressing them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Performance issues: What the problem is and what we are doing about it</title>
      <link>https://blog.pythonanywhere.com/45/</link>
      <pubDate>Tue, 06 Nov 2012 12:00:56 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/45/</guid>
      <description>&lt;p&gt;Over the last couple of months our users have been noticing increasing&#xA;performance issues. I think the most noticeable one is browsing directories and&#xA;viewing files. Though the other problem is a slow down of console performance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New minor release</title>
      <link>https://blog.pythonanywhere.com/44/</link>
      <pubDate>Fri, 26 Oct 2012 11:45:31 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/44/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just upgraded PythonAnywhere with a bunch of stability fixes.  One nice&#xA;new thing: if you create a new web2py app, you&amp;rsquo;ll get version 2.0.9 &amp;ndash; and even&#xA;better, the build-in &amp;ldquo;upgrade&amp;rdquo; button in the web2py admin view now works &amp;ndash; just&#xA;click it, click OK, then once it&amp;rsquo;s done, use the &amp;ldquo;Reload web app&amp;rdquo; button on the&#xA;Web tab of your PythonAnywhere dashboard.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unlimited private git repos for Python Developers</title>
      <link>https://blog.pythonanywhere.com/43/</link>
      <pubDate>Fri, 19 Oct 2012 16:08:13 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/43/</guid>
      <description>&lt;p&gt;At PythonAnywhere we love github as much as the next person. It&amp;rsquo;s great! We use&#xA;it for our main private repository and have a few public ones up there as well.&lt;/p&gt;&#xA;&lt;p&gt;But sometimes you just want a private place to backup your little project to.&#xA;And if you are like me you have about 30 little projects that are the software&#xA;equivalent of napkin scribbling. Or maybe you think github is a little bit too cool. Maybe it&amp;rsquo;s trying too hard?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.pythonanywhere.com/static/anywhere/images/git-fresh.jpg&#34; alt=&#34;Git fresh!&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;incidentally Git Fresh are PythonAnywhere&amp;rsquo;s favourite Miami based R&amp;amp;B-Hip-Hop like product&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;So sure you could just make those repos public but urgh. Not everything is public.&#xA;Sometimes they are private to just you or sometimes you want to work on&#xA;something with just a couple of other collaborators.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release!</title>
      <link>https://blog.pythonanywhere.com/42/</link>
      <pubDate>Wed, 17 Oct 2012 12:24:53 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/42/</guid>
      <description>&lt;p&gt;This is mostly a performance and stability release, but we do have 2 of our most requested forum features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Permalinks to particular forum posts are now shown next to the post&lt;/li&gt;&#xA;&lt;li&gt;The forums are now searchable&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Enjoy and send us any comments and feedback.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Developing PythonAnywhere on PythonAnywhere - Dogfooding part deux.</title>
      <link>https://blog.pythonanywhere.com/41/</link>
      <pubDate>Fri, 12 Oct 2012 11:55:43 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/41/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve been &amp;ldquo;dogfooding&amp;rdquo; PythonAnywhere&#xA;for about 6 months now - it&#xA;always seemed right that, if we were building an online development environment,&#xA;we should probably actually use it to build itself.&#xA;Pleasingly recursive, to say nothing of helping to focus our dev process.&lt;/p&gt;&#xA;&lt;p&gt;Until now though, we were using a special, dedicated cluster that replicates the live&#xA;environment, but that allowed us to do certain things like use NFS to edit code on&#xA;our dev VMs.  But last week we made the switch to actually using the live, production&#xA;servers.&lt;/p&gt;&#xA;&lt;p&gt;So we&amp;rsquo;re now using exactly the same environment as our users - and it&amp;rsquo;s been quite an&#xA;eye-opener.  It&amp;rsquo;s made us bump certain things right up our priority queue.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release - several stability and security fixes</title>
      <link>https://blog.pythonanywhere.com/40/</link>
      <pubDate>Thu, 11 Oct 2012 12:38:44 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/40/</guid>
      <description>&lt;p&gt;Not a lot of very visible changes, but we&amp;rsquo;ve been beavering away at some security and stability tweaks.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Thanks to a2j for pointing out a potential security hole which potentially allowed people to view some scheduled task logs that weren&amp;rsquo;t their own. We&amp;rsquo;re very pleased to have that fixed.&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve implemented better isolation and load balancing, to make sure that individual users or groups of users can&amp;rsquo;t hog resources.  We&amp;rsquo;ve also tipped the scales so that paying users get more CPU than free users, if there&amp;rsquo;s ever any contention between the two on a given server&amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve moved some of our own &amp;ldquo;housekeeping&amp;rdquo; cron jobs onto their own server, so they don&amp;rsquo;t steal cycles from our beloved users&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve added several useful packages - &lt;a href=&#34;http://splinter.cobrateam.info/&#34;&gt;splinter&lt;/a&gt; (thanks douglasmccormickjr), &lt;a href=&#34;https://gitorious.org/git-python&#34;&gt;gitpython&lt;/a&gt;  (thanks nicozanf), and &lt;a href=&#34;http://packages.python.org/openpyxl/&#34;&gt;openpyxl&lt;/a&gt; (thanks anonymous tipster) and &lt;a href=&#34;https://github.com/ahupp/python-magic#python-magic&#34;&gt;python-magic&lt;/a&gt; (no idea who suggested that!)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve also installed &lt;code&gt;sshfs&lt;/code&gt; - more on that later, when we talk about Phase 2 of our &amp;ldquo;developing PythonAnywhere on PythonAnywhere&amp;rdquo; dogfooding adventure.  Watch this space!&lt;/p&gt;</description>
    </item>
    <item>
      <title>New deploy!  Python2.7 is now the default, plus some perf. improvements</title>
      <link>https://blog.pythonanywhere.com/38/</link>
      <pubDate>Thu, 20 Sep 2012 13:17:26 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/38/</guid>
      <description>&lt;p&gt;Hi All!&lt;/p&gt;&#xA;&lt;p&gt;A long-requested, and much overdue feature today - Python2.7 is now the default, meaning it&amp;rsquo;s the default python at the command line, it&amp;rsquo;s the default python when you use &lt;code&gt;pip&lt;/code&gt; or &lt;code&gt;easy_install&lt;/code&gt;, but most importantly, it&amp;rsquo;s the default Python for your web apps!&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;NB - this means any custom packages you&amp;rsquo;ve installed for your web app using the &lt;code&gt;--user&lt;/code&gt; flag need to be reinstalled.  If you didn&amp;rsquo;t get the memo, you may need to do that now!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Aside from that, we&amp;rsquo;ve had several little tweaks and performance improvements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;improvements to console responsiveness&lt;/li&gt;&#xA;&lt;li&gt;squid proxy should be more resilient&lt;/li&gt;&#xA;&lt;li&gt;reduced swappiness on the web servers to reduce thrashing (thanks Cartroo)&lt;/li&gt;&#xA;&lt;li&gt;randomised default start time on scheduled tasks (thanks a2j!)&lt;/li&gt;&#xA;&lt;li&gt;implemented the uwsgi idle timeout for workers (thanks Roberto!)&lt;/li&gt;&#xA;&lt;li&gt;Fixed the subversion proxy bug (thanks  ccoovrey)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thanks to everyone that&amp;rsquo;s reported bugs suggested improvements, or nagged us for new features. In particular: profread, mjmare, MorePyPlease, decisioncandy and egasimus.&lt;/p&gt;&#xA;&lt;p&gt;Happy Python-two-dot-seven-ing!&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release!  Hashbangs in Save &amp; Run, infrastructure tweaks, new packages</title>
      <link>https://blog.pythonanywhere.com/37/</link>
      <pubDate>Thu, 13 Sep 2012 12:44:41 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/37/</guid>
      <description>&lt;p&gt;Finally, finally, finally we&amp;rsquo;ve implemented a way for people to run scripts with different flavours of Python from the &amp;ldquo;Save &amp;amp; Run&amp;rdquo; button.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s still a first-cut, but you can now use &lt;a href=&#34;https://en.wikipedia.org/wiki/Shebang_%28Unix%29&#34;&gt;hashbangs&lt;/a&gt; to specify which python version will be used when you hit the &amp;ldquo;Save &amp;amp; Run&amp;rdquo; button in the editor.&lt;/p&gt;&#xA;&lt;p&gt;So this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ch&#34;&gt;#!/usr/bin/python3.2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Will produce an error. woo.&lt;/p&gt;&#xA;&lt;p&gt;Aside from that, we&amp;rsquo;ve added a few new python packages:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pythonforfacebook/django-facebook&#34;&gt;django-facebook&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/reclosedev/requests-cache&#34;&gt;requests-cache&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://webapp-improved.appspot.com/&#34;&gt;webapp2&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And a couple of little helper executables to your tools in Bash, including &lt;code&gt;tree&lt;/code&gt; and &lt;code&gt;lsyncd&lt;/code&gt; (more on that later).&lt;/p&gt;&#xA;&lt;p&gt;Thanks to &lt;strong&gt;aramik&lt;/strong&gt;, &lt;strong&gt;Cartroo&lt;/strong&gt;, &lt;strong&gt;cwbh10&lt;/strong&gt;, &lt;strong&gt;transium&lt;/strong&gt;, &lt;strong&gt;johkershaw&lt;/strong&gt; and &lt;strong&gt;jhafranco&lt;/strong&gt; for their suggestions which got into this release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>nginx&#43;uWSGI vs Apache - why we switched.</title>
      <link>https://blog.pythonanywhere.com/36/</link>
      <pubDate>Thu, 06 Sep 2012 11:20:06 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/36/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;./images/nginx_logo.gif&#34; alt=&#34;nginx logo&#34;&gt;&#xA;&lt;img src=&#34;./images/logo_uWSGI.png&#34; alt=&#34;uWSGI logo&#34;&gt;&#xA;&lt;img src=&#34;./images/apache_logo.png&#34; alt=&#34;Apache logo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Beloved users, and whomever else may find it of interest,&lt;/p&gt;&#xA;&lt;p&gt;We recently made the switch from Apache to nginx with uwsgi.  Well, I say recently, as far&#xA;as I can tell from the commit logs we started work on it around July 10th, so&#xA;that&amp;rsquo;s almost two months ago! We just deployed it last week, and after a bumpy&#xA;first few days it seems to be settling in well.  We thought we&amp;rsquo;d share why we&#xA;switched, and how it&amp;rsquo;s going.&lt;/p&gt;&#xA;&lt;h1 id=&#34;tldr&#34;&gt;tl;dr:&lt;/h1&gt;&#xA;&lt;p&gt;We switched because:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;we need to dynamically configure new virtualhosts for our users&lt;/li&gt;&#xA;&lt;li&gt;Apache won&amp;rsquo;t dynamically load config, it needs a &lt;code&gt;restart graceful&lt;/code&gt; which is&#xA;still too disruptive&lt;/li&gt;&#xA;&lt;li&gt;a single, generic Apache config that handles all users is getting unweildy&lt;/li&gt;&#xA;&lt;li&gt;nginx+uwsgi will make it much easier for us to do things like static files&#xA;and per-user config tweaks&lt;/li&gt;&#xA;&lt;li&gt;we&amp;rsquo;re also hoping for some performance improvements&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Our experience was:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;sure enough, nginx+uwsgi is much simpler to configure and much more&#xA;flexible. but:-&lt;/li&gt;&#xA;&lt;li&gt;Apache&amp;rsquo;s model is to only start workers when they&amp;rsquo;re needed.  uwsgi starts&#xA;them all up-front.  That took some hacking, since we actually wanted the&#xA;on-demand behaviour.&lt;/li&gt;&#xA;&lt;li&gt;no perf. improvements out-of-the-box, but we think there&amp;rsquo;s lots of potential&#xA;for tuning&lt;/li&gt;&#xA;&lt;li&gt;we did plenty of functionality testing, but not enough load testing, so our&#xA;first deploy was a little rough.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Onto the detail!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learn how to code a Facebook app in 20 minutes on PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/35/</link>
      <pubDate>Tue, 07 Aug 2012 10:31:25 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/35/</guid>
      <description>&lt;p&gt;&lt;em&gt;[Warning! this tutorial was written in August 2012, and so is probably out of date]&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This tutorial aims to teach you how to create and publish a simple Facebook app in about 20 minutes using PythonAnywhere.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New release </title>
      <link>https://blog.pythonanywhere.com/34/</link>
      <pubDate>Wed, 01 Aug 2012 15:58:16 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/34/</guid>
      <description>&lt;p&gt;We had a bit of downtime this afternoon while we deployed a new version of PythonAnywhere. Bad timing really because we&amp;rsquo;ve been &lt;a href=&#34;https://www.reddit.com/r/Python/comments/xgmi5/a_browser_based_python_developing_and_hosting/&#34;&gt;getting some love over at the Python subReddit&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve added task helpers for new users. These are walk throughs of common tasks. If you sign up now you&amp;rsquo;ll be prompted to start one. If you are an existing user and want to use one then visit your Account page to get started.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The Webapps page has had a redesign in preparation for multiple web apps and giving users more control over things like where their static files are served from.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;There is also a new &lt;a href=&#34;https://www.pythonanywhere.com/about/media_resources/&#34;&gt;PythonAnywhere media resources&lt;/a&gt; page.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Enjoy!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Trac on PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/33/</link>
      <pubDate>Wed, 18 Jul 2012 18:09:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/33/</guid>
      <description>&lt;p&gt;As part of the ongoing dogfooding campaign, we just migrated our issue tracker&#xA;from an internal server to PythonAnywhere. Am happy to say it runs faster!&lt;/p&gt;&#xA;&lt;p&gt;We use &lt;a href=&#34;http://trac.edgewall.org/&#34;&gt;Trac&lt;/a&gt;, a python-based PM tool.  Here&amp;rsquo;s a&#xA;brief outline, in case anyone else wants to host a trac site using&#xA;PythonAnywhere.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Site updates</title>
      <link>https://blog.pythonanywhere.com/32/</link>
      <pubDate>Tue, 17 Jul 2012 15:33:33 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/32/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just updated PythonAnywhere with the following new stuff:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reloading a web application is now faster.&lt;/li&gt;&#xA;&lt;li&gt;If you have a paid account, you can now use key-based authentication to ssh into your account.&lt;/li&gt;&#xA;&lt;li&gt;Bugfix: Firefox now has appropriate environment variable settings to work in headless mode with free accounts.&lt;/li&gt;&#xA;&lt;li&gt;Bugfix: allow non-ASCII characters in passwords.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Plus a bunch of other minor tweaks to reliability and speed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere in the news</title>
      <link>https://blog.pythonanywhere.com/31/</link>
      <pubDate>Thu, 12 Jul 2012 11:18:10 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/31/</guid>
      <description>&lt;p&gt;This is the first of a (hopefully regular!) series of links to PythonAnywhere articles around the net.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Release</title>
      <link>https://blog.pythonanywhere.com/30/</link>
      <pubDate>Mon, 09 Jul 2012 12:35:35 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/30/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just released a new version of PythonAnywhere.  This one adds:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Some fixes to our &amp;ldquo;Create new web2py application&amp;rdquo; wizard.&lt;/li&gt;&#xA;&lt;li&gt;UCS-4 support (instead of UCS-2) in our Python version.&lt;/li&gt;&#xA;&lt;li&gt;Some new Python batteries included: dot, cvxopt, shapely, mezzanine and grok&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere problems on Friday and Saturday</title>
      <link>https://blog.pythonanywhere.com/29/</link>
      <pubDate>Mon, 02 Jul 2012 14:00:55 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/29/</guid>
      <description>&lt;p&gt;Like &lt;a href=&#34;http://allthingsd.com/20120630/storm-knocks-out-amazons-power-taking-down-instagram-netflix-pinterest/&#34;&gt;a lot of other companies&lt;/a&gt; who use Amazon Web Services for their underlying infrastructure, we were affected by the problems they had at their US East Coast data centre on Friday and Saturday.  Almost everything was recovered by 09.30 UTC on Saturday, and we don&amp;rsquo;t believe there was any data loss &amp;ndash; though certain scheduled tasks and Dropbox share requests were delayed until late Sunday.&lt;/p&gt;&#xA;&lt;p&gt;Here are the details for anyone who&amp;rsquo;s interested&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>External IP blocking for free accounts: how should we get rid of it?</title>
      <link>https://blog.pythonanywhere.com/28/</link>
      <pubDate>Mon, 25 Jun 2012 15:26:42 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/28/</guid>
      <description>&lt;p&gt;Until now, we&amp;rsquo;ve been offering free accounts that provide pretty-much-unlimited&#xA;Internet access. But there has recently been some misuse, and we&amp;rsquo;re worried that&#xA;we could easily become swamped by people using us as a launchpad for nefarious&#xA;activities.&lt;/p&gt;&#xA;&lt;p&gt;Today we&amp;rsquo;ve added a restriction we really didn&amp;rsquo;t want to add: free accounts no&#xA;longer have unrestricted access to the Internet; instead, they have access via a&#xA;proxy with a whitelist that allows most popular sites to be accessed (including&#xA;Google and the Twitter API).  We&amp;rsquo;ll update the whitelist with new sites on&#xA;request if the sites in question are ones that we can reasonably add.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SockJS vs Socket.IO  - Benchmarked</title>
      <link>https://blog.pythonanywhere.com/27/</link>
      <pubDate>Wed, 20 Jun 2012 11:27:40 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/27/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve always thought that our browser based consoles are one of the coolest&#xA;things about PythonAnywhere. But everyone always wants them to be faster. And&#xA;since we dogfood with them every single day so do we. One of the key bits of our&#xA;stack, until quite recently, was Socket.IO. It&amp;rsquo;s a library that abstracts away&#xA;the different type of socket transport protocols that various browsers support.&#xA;It helps us support a broader range of browsers without worrying about quirks.&lt;/p&gt;&#xA;&lt;p&gt;It is a great piece of software and we&amp;rsquo;re very grateful to the authors. However&#xA;we have recently replaced it with a competing library called SockJS.&lt;/p&gt;&#xA;&lt;p&gt;Doing so has increased performance, reduced key press latency, and improved&#xA;reliability. We did a little bit of benchmarking to demonstrate the difference&#xA;we&amp;rsquo;ve noticed by implementing this new library.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Release</title>
      <link>https://blog.pythonanywhere.com/26/</link>
      <pubDate>Thu, 14 Jun 2012 14:29:12 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/26/</guid>
      <description>We&amp;rsquo;ve just updated PythonAnywhere with support for multiprocessing, oursql and pyhdf. Enjoy!</description>
    </item>
    <item>
      <title>New release!</title>
      <link>https://blog.pythonanywhere.com/25/</link>
      <pubDate>Wed, 06 Jun 2012 13:27:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/25/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just released a new version of PythonAnywhere!  Here&amp;rsquo;s what&amp;rsquo;s new:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve announced a new upcoming plan: &amp;ldquo;Pro&amp;rdquo;, which offers hosting of multiple domains from one PythonAnywhere account.  It&amp;rsquo;s not ready yet, but until it is, if you sign up for a Hosting account, you&amp;rsquo;ll get the &amp;ldquo;Pro&amp;rdquo; features for the price of hosting when it goes live.&lt;/li&gt;&#xA;&lt;li&gt;A number of people had problems with the certificate we were using for HTTPS access.  We&amp;rsquo;ve replaced the old one (from RapidSSL) with a new one from Thawte, and it looks like it clears up those issues.&lt;/li&gt;&#xA;&lt;li&gt;And, of course, a few minor tweaks and usability enhancements, including updates to our iPad keyboard to add some new useful keys: &amp;ldquo;~&amp;rdquo;, &amp;ldquo;=&amp;rdquo; and &amp;ldquo;+&amp;rdquo;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>New stuff!</title>
      <link>https://blog.pythonanywhere.com/24/</link>
      <pubDate>Tue, 29 May 2012 12:20:48 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/24/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just released a new version of PythonAnywhere.  The visible changes are two bugfixes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your web apps should now be &lt;em&gt;much&lt;/em&gt; more reliable; previously, a busy web application could start hitting the process/thread limit quite quickly, which was obviously unacceptable.  This should not happen any more.&lt;/li&gt;&#xA;&lt;li&gt;Web2Py apps generated from our quick-start wizard sometimes didn&amp;rsquo;t work properly.  That&amp;rsquo;s been sorted too.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These are good changes and we&amp;rsquo;re proud of them.  But we&amp;rsquo;re even more proud of one other change&amp;hellip; it&amp;rsquo;s something we&amp;rsquo;ve been working hard on for the last couple of weeks, and it&amp;rsquo;s going through a final round of testing before we make the official announcement&amp;hellip; more soon!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Djangofriendly</title>
      <link>https://blog.pythonanywhere.com/23/</link>
      <pubDate>Mon, 21 May 2012 14:51:27 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/23/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://djangofriendly.com/&#34;&gt;Djangofriendly&lt;/a&gt; is a really useful community resource &amp;ndash; a list of web hosting companies that actively support Django.  Naturally, PythonAnywhere fits the bill, and &lt;a href=&#34;http://ryanberg.net/&#34;&gt;Ryan Berg&lt;/a&gt; has been kind enough to &lt;a href=&#34;http://djangofriendly.com/hosts/pythonanywhere/&#34;&gt;add us&lt;/a&gt;.   Thanks, Ryan!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Press Release</title>
      <link>https://blog.pythonanywhere.com/22/</link>
      <pubDate>Fri, 18 May 2012 15:26:27 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/22/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just published &lt;a href=&#34;http://www.prweb.com/releases/2012/5/prweb9522833.htm&#34;&gt;our first press release&lt;/a&gt;.  Here&amp;rsquo;s what it says&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improved console responsiveness, flask quickstart, and hosting accounts!</title>
      <link>https://blog.pythonanywhere.com/21/</link>
      <pubDate>Thu, 17 May 2012 11:08:05 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/21/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve just released a new version of PythonAnywhere.  Here are the details&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTTPS everywhere</title>
      <link>https://blog.pythonanywhere.com/19/</link>
      <pubDate>Tue, 01 May 2012 16:25:50 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/19/</guid>
      <description>One concern with PythonAnywhere until now was that the connection between your browser and the server was not encrypted &amp;ndash; although it&amp;rsquo;s unlikely, it was possible that someone could see what you were typing. This was obviously a Bad Thing, but it was hard to fix &amp;ndash; encrypting the web pages alone would have been easy, but the console connections run over a different protocol and some of the underlying software that PythonAnywhere depends on didn&amp;rsquo;t work properly when run in encrypted mode.</description>
    </item>
    <item>
      <title>Hosting accounts for the price of Premium</title>
      <link>https://blog.pythonanywhere.com/18/</link>
      <pubDate>Fri, 27 Apr 2012 14:20:11 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/18/</guid>
      <description>We&amp;rsquo;ve spent the last few days battling PayPal&amp;rsquo;s systems and finding out that supporting Hosting accounts (which will let you host a Python web application on your own domain) as well as Premium account isn&amp;rsquo;t quite as easy as we thought it would be.&#xA;But the only delay in releasing the own-domain feature was sorting out the pricing &amp;ndash; all of the code to actually do the work was there and ready to go.</description>
    </item>
    <item>
      <title>About this blog</title>
      <link>https://blog.pythonanywhere.com/7/</link>
      <pubDate>Tue, 24 Apr 2012 12:42:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/7/</guid>
      <description>This blog contains the latest news for users of PythonAnywhere &amp;ndash; new features, new ideas, product direction, and how it&amp;rsquo;s being used.</description>
    </item>
    <item>
      <title>Running headless Selenium browser tests on PythonAnywhere with Xvfb</title>
      <link>https://blog.pythonanywhere.com/3/</link>
      <pubDate>Tue, 24 Apr 2012 12:42:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/3/</guid>
      <description>&lt;p&gt;You can now run Selenium tests from PythonAnywhere, using a virtual display.&lt;/p&gt;</description>
    </item>
    <item>
      <title>iPads! (and web2py quickstart)</title>
      <link>https://blog.pythonanywhere.com/17/</link>
      <pubDate>Thu, 05 Apr 2012 15:15:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/17/</guid>
      <description>Lots of people have told us that they want to use PythonAnywhere on their iPads. So we&amp;rsquo;ve been hard at work over the last week or so getting everything as polished as we can &amp;ndash; so as of today, PythonAnywhere serves up a special version for you if you hit it with the latest Cupertino shiny&amp;hellip; let us know what you think! Better Android and iPhone support is in the works.</description>
    </item>
    <item>
      <title>Django quickstart</title>
      <link>https://blog.pythonanywhere.com/16/</link>
      <pubDate>Mon, 02 Apr 2012 14:13:16 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/16/</guid>
      <description>We&amp;rsquo;re keen on getting people started quickly with Django, so what could be better than a Django quickstart button? As of today, with only a little more than one click, you can create a template website to hack to your heart&amp;rsquo;s content.</description>
    </item>
    <item>
      <title>PythonAnywhere premium accounts now available</title>
      <link>https://blog.pythonanywhere.com/15/</link>
      <pubDate>Tue, 13 Mar 2012 14:10:02 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/15/</guid>
      <description>&lt;p&gt;Do you love PythonAnywhere so much that you want to give us money?  Do you want to be able to set up one scheduled Python task that runs not just once a day, but a whole bunch of them, each running up to once an hour?  Is the 5-console limit too much for you?&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhereAnywhere</title>
      <link>https://blog.pythonanywhere.com/4/</link>
      <pubDate>Mon, 27 Feb 2012 16:09:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/4/</guid>
      <description>&lt;p&gt;We recently added something cool to PythonAnywhere &amp;ndash;&#xA;if you&amp;rsquo;re writing a tutorial, or anything else where you&amp;rsquo;d find a Python console useful in a web page, you can use one of ours!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Forums and numpy for Python 3</title>
      <link>https://blog.pythonanywhere.com/13/</link>
      <pubDate>Tue, 06 Dec 2011 15:57:39 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/13/</guid>
      <description>Our latest release now has forums! Want to chat with other users, or just let off steam in public rather than through our feedback box? Here you go.&#xA;Also&amp;hellip; the numpy guys have done a lot of hard work getting their amazing library to work with Python 3 &amp;ndash; so we&amp;rsquo;ve installed it for your number-crunching pleasure.</description>
    </item>
    <item>
      <title>Sharing your PythonAnywhere consoles with anyone</title>
      <link>https://blog.pythonanywhere.com/11/</link>
      <pubDate>Fri, 18 Nov 2011 13:34:03 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/11/</guid>
      <description>&lt;p&gt;Almost since the beginning, PythonAnywhere has been able to share consoles &amp;ndash; you entered the name of another user, and they got an email telling them how to log in and view your Python (or Bash, or IPython) console.&lt;/p&gt;&#xA;&lt;p&gt;Today we added the ability to share your consoles with anyone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MySQL support in PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/12/</link>
      <pubDate>Wed, 16 Nov 2011 11:49:59 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/12/</guid>
      <description>Web applications in PythonAnywhere so far have been a bit limited &amp;ndash; we didn&amp;rsquo;t have any built-in database support, and although you could keep a SQLite database in your private storage, it was far from ideal. As of today, we provide MySQL support out of the box &amp;ndash; so you can start writing Real Web Apps that do Real Things.</description>
    </item>
    <item>
      <title>PythonAnywhere in (just over) one minute</title>
      <link>https://blog.pythonanywhere.com/10/</link>
      <pubDate>Wed, 02 Nov 2011 14:42:07 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/10/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve put together a screencast explaining what PythonAnywhere is.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WSGI-based web applications!</title>
      <link>https://blog.pythonanywhere.com/9/</link>
      <pubDate>Tue, 11 Oct 2011 17:38:28 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/9/</guid>
      <description>&lt;p&gt;As of our release today, PythonAnywhere supports WSGI-based web applications!&#xA;That means that at &lt;code&gt;http://your-username.pythonanywhere.com/&lt;/code&gt; you can host&#xA;pretty much any kind of Python web application &amp;ndash; Django, web2py, Bottle, Flask,&#xA;you name it.  It&amp;rsquo;s free while we&amp;rsquo;re in beta, so sign up now!&lt;/p&gt;</description>
    </item>
    <item>
      <title>IPython Anywhere</title>
      <link>https://blog.pythonanywhere.com/14/</link>
      <pubDate>Thu, 22 Sep 2011 18:04:29 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/14/</guid>
      <description>&lt;p&gt;We&amp;rsquo;re huge fans of the IPython shell &amp;ndash; it does everything that the normal&#xA;Python shell does, but adds tons of great features like intelligent&#xA;autocompletion and object introspection.  It&amp;rsquo;s been an option when you start a&#xA;Python console for a while, but we felt we&amp;rsquo;d like to give something back to the&#xA;team.  So as of today, if you want to try IPython and don&amp;rsquo;t want to install it&#xA;&amp;ndash; or even sign up for PythonAnywhere &amp;ndash; there&amp;rsquo;s &lt;a href=&#34;https://www.pythonanywhere.com/try-ipython/&#34;&gt;an online demo&lt;/a&gt;, powered by us :-)&lt;/p&gt;&#xA;&lt;p&gt;Many thanks to the IPython team for producing such a great tool!&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere update, 18 August 2011</title>
      <link>https://blog.pythonanywhere.com/6/</link>
      <pubDate>Thu, 18 Aug 2011 11:48:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/6/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve been working hard on PythonAnywhere over the last month or so, and have added a bunch of stuff.  Our objective isn&amp;rsquo;t just to make a cool website with cool technology, that makes people go, oh, that&amp;rsquo;s cool.  We want to change our users&amp;rsquo; lives :-)  What can we do to get you really excited?&lt;/p&gt;&#xA;&lt;p&gt;Here are the features we&amp;rsquo;ve added since 15 July:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Scheduled tasks.  If you want a Python script &amp;ndash; or even a shell script &amp;ndash; to run daily or hourly, you can now set it up from PythonAnywhere.  The scripts run on our servers at Amazon&amp;rsquo;s EC2 datacenter, so you&amp;rsquo;ve got loads of bandwidth and CPU power to play with.  Screen-scape television listings and store them in your Dropbox&amp;hellip; download share price data for backtesting your trading strategies&amp;hellip; or whatever you like!&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve added Python 2.7, and upgraded our Python 3 version to 3.2.1.&lt;/li&gt;&#xA;&lt;li&gt;New Python modules: &lt;code&gt;mcrypt&lt;/code&gt;, &lt;code&gt;mhash&lt;/code&gt;, &lt;code&gt;pymc&lt;/code&gt;, &lt;code&gt;pysal&lt;/code&gt;, &lt;code&gt;traits&lt;/code&gt;, and &lt;code&gt;networkx&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Subversion support.  Because not everyone uses &lt;code&gt;git&lt;/code&gt; or &lt;code&gt;hg&lt;/code&gt;&amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;The editor now has a &amp;ldquo;Save &amp;amp; Run&amp;rdquo; button to launch a Python console running your code.  There are also various other tweaks to make the editor more usable.  We&amp;rsquo;re using it ourselves now while we develop PythonAnywhere, which should encourage us to make it as smooth as possible!&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve started putting together some documentation, &lt;a href=&#34;https://www.pythonanywhere.com/faq/&#34;&gt;in the form of a FAQ&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A bunch of useful new commands are available from bash consoles, including an updated vim with Python syntax highlighting, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;wc&lt;/code&gt;, &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;scp&lt;/code&gt;, and &lt;code&gt;rmdir&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&amp;hellip;and various minor enhancements to the general experience, including password set/reset and the option to log in using your email address instead of your PythonAnywhere user ID.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Coming soon, we hope to have improved support for IPython cluster computing.&lt;/p&gt;&#xA;&lt;p&gt;What else do you think we should be working on?&lt;/p&gt;</description>
    </item>
    <item>
      <title>PythonAnywhere</title>
      <link>https://blog.pythonanywhere.com/5/</link>
      <pubDate>Fri, 05 Aug 2011 17:22:00 +0000</pubDate>
      <guid>https://blog.pythonanywhere.com/5/</guid>
      <description>&lt;p&gt;For readers that haven&amp;rsquo;t seen it yet, &lt;a href=&#34;https://www.pythonanywhere.com/&#34;&gt;PythonAnywhere&lt;/a&gt; is&#xA;our new product, currently (like Dirigible) in a very early-access beta.  It&amp;rsquo;s a&#xA;cloud-based Python development environment, with in-browser consoles and editors.&#xA;You can read more about it on the product&amp;rsquo;s page, and sign up for the beta there &amp;ndash; when you sign up,&#xA;we&amp;rsquo;ll send you an email; reply saying that you heard about PythonAnywhere on the&#xA;devblog and we&amp;rsquo;ll put you at the front of the queue for joining the beta.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
