<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: webapps</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/webapps.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2016-08-16T09:02:00+00:00</updated><author><name>Simon Willison</name></author><entry><title>What's the cheapest or free stack solution to deploy and experiment with a realtime application in 2016?</title><link href="https://simonwillison.net/2016/Aug/16/whats-the-cheapest-or/#atom-tag" rel="alternate"/><published>2016-08-16T09:02:00+00:00</published><updated>2016-08-16T09:02:00+00:00</updated><id>https://simonwillison.net/2016/Aug/16/whats-the-cheapest-or/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Whats-the-cheapest-or-free-stack-solution-to-deploy-and-experiment-with-a-realtime-application-in-2016/answer/Simon-Willison"&gt;What&amp;#39;s the cheapest or free stack solution to deploy and experiment with a realtime application in 2016?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Heroku have a good free tier, and comprehensive support for deploying both Python and Node.js. If you are mainly interested in realtime I would suggest starting out with Node.js on Heroku. Depending on the complexity of your project you might even be able to use raw Node.js without adding something like Express.&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;a href="https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction"&gt;Getting Started on Heroku with Node.js&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/hosting"&gt;hosting&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/websockets"&gt;websockets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/heroku"&gt;heroku&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="hosting"/><category term="programming"/><category term="webapps"/><category term="web-development"/><category term="websockets"/><category term="quora"/><category term="heroku"/></entry><entry><title>How does one decide which Javascript framework (e.g. Node, Backbone, Angular) to use on any given project?</title><link href="https://simonwillison.net/2014/Mar/11/how-does-one-decide/#atom-tag" rel="alternate"/><published>2014-03-11T17:08:00+00:00</published><updated>2014-03-11T17:08:00+00:00</updated><id>https://simonwillison.net/2014/Mar/11/how-does-one-decide/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-does-one-decide-which-Javascript-framework-e-g-Node-Backbone-Angular-to-use-on-any-given-project/answer/Simon-Willison"&gt;How does one decide which Javascript framework (e.g. Node, Backbone, Angular) to use on any given project?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you are just learning JavaScript, I suggest trying to work without any frameworks or libraries at all. Starting with something like Angular will make it much harder for you to learn the core language and browser APIs.&lt;/p&gt;

&lt;p&gt;Once you've worked with raw JavaScript for a while, it's worth starting to learn jQuery - it's the basis of most of the popular JavaScript frameworks out there and understanding how it works will help reinforce a bunch of core JavaScript concepts.&lt;/p&gt;

&lt;p&gt;If your priority is learning though, it's a good idea to start without jQuery. There are a surprising number of JavaScript developers out there who only really know how to program JavaScript using jQuery.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/angular"&gt;angular&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="javascript"/><category term="nodejs"/><category term="programming"/><category term="webapps"/><category term="web-development"/><category term="quora"/><category term="angular"/></entry><entry><title>What is the best payment provider for a web app with monthly subscription fees at its early stage?</title><link href="https://simonwillison.net/2014/Feb/20/what-is-the-best/#atom-tag" rel="alternate"/><published>2014-02-20T17:35:00+00:00</published><updated>2014-02-20T17:35:00+00:00</updated><id>https://simonwillison.net/2014/Feb/20/what-is-the-best/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-best-payment-provider-for-a-web-app-with-monthly-subscription-fees-at-its-early-stage/answer/Simon-Willison"&gt;What is the best payment provider for a web app with monthly subscription fees at its early stage?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We found Stripe extremely easy to get started with for charging subscription payments.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stripe"&gt;stripe&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="startups"/><category term="webapps"/><category term="quora"/><category term="stripe"/></entry><entry><title>Why did Twitter move away from being a single-page application?</title><link href="https://simonwillison.net/2014/Jan/3/why-did-twitter-move/#atom-tag" rel="alternate"/><published>2014-01-03T12:35:00+00:00</published><updated>2014-01-03T12:35:00+00:00</updated><id>https://simonwillison.net/2014/Jan/3/why-did-twitter-move/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-did-Twitter-move-away-from-being-a-single-page-application/answer/Simon-Willison"&gt;Why did Twitter move away from being a single-page application?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Twitter is still a single page application, it's just built properly now (one result of which is that you can't easily tell).&lt;/p&gt;

&lt;p&gt;When Twitter first went single page, the only way to do so while still maintaining functioning hyperlinks and a working back button was to use a vile hack involving fragment URLs - things like &lt;span&gt;&lt;a href="https://twitter.com/#!simonw/status/419261896957505536"&gt;https://twitter.com/#!simonw/sta...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;This works, but comes with a whole bag of downsides:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Anyone who clicks a link to Twitter has to download several megabytes of JavaScript before the site can figure out what information it should be displaying. In the case of a tweet permalink that's several megabytes downloaded just to display a 140 character tweet!&lt;/li&gt;&lt;li&gt;Pages don't work at all without JavaScript.&lt;/li&gt;&lt;li&gt;A single JavaScript bug in an obscure mobile phone browser only available on Chinese handsets can prevent the site from loading any content at all.&lt;/li&gt;&lt;li&gt;Screen readers may fail to understand what's going on.&lt;/li&gt;&lt;li&gt;Only some search engines can index the pages, again &lt;span&gt;&lt;a href="https://support.google.com/webmasters/answer/174992?hl=en"&gt;using a nasty hack&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;These aren't "real" hypertext URLs. If you perform a GET operation against them you don't get the content the URL refers to, you just get the Twitter homepage. This is bad for the health of the Web.&lt;/li&gt;&lt;li&gt;One relevant example: Quora's feature where a URL pasted in is automatically converted to the title of that page can't work if the URL doesn't point at real HTML, rather than a homepage and a big chunk of JavaScript.&lt;/li&gt;&lt;li&gt;These links start to spread. Other sites have to use them in links to Twitter, which means that even if Twitter gets rid of them they'll need to keep some JavaScript on their homepage that knows how to handle them &lt;i&gt;forever&lt;/i&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;These hashbang URLs are nasty, nasty hacks.

&lt;p&gt;Thankfully the hashbang hack isn't necessary any more, thanks to a neat part of HTML5 called the &lt;span&gt;&lt;a href="http://diveintohtml5.info/history.html"&gt;History API&lt;/a&gt;&lt;/span&gt;. This allows JavaScript to update the visible URL in the browser's URL bar without actually navigating to a completely new page - essentially, it allows a single page application to pretend that it's a real website.&lt;/p&gt;

&lt;p&gt;How does this fix the problems above? It means that Twitter can start serving real webpages again. Try running this command:&lt;/p&gt;

&lt;code&gt;curl "https://twitter.com/simonw/status/419261896957505536"&lt;/code&gt;

&lt;p&gt;It returns HTML! In fact, it returns the exact HTML needed to display a page that shows the content of that tweet. Then, at the very bottom of that HTML it includes a single script tag (loaded after the page has been displayed in the browser) which loads a huge bunch of JavaScript and converts that beautiful, light HTML page in to a giant single page web app.&lt;/p&gt;

&lt;p&gt;Now, when you click on a link on the page, Twitter can fetch the new page contents using JavaScript and display it to you without doing a complete reload of the whole UI - but they can use the HTML5 history API to update the URL in the page so that, as far as you can tell, you've navigated somewhere else. It's a signle page web application hiding in plain sight.&lt;/p&gt;

&lt;p&gt;But what about browsers that don't support HTML5 history, like older versions of IE? Here's the smart part: they don't get the fancy new JavaScript, they just get links which, when clicked, navigate them to a brand new page. This means that even browsers that don't support JavaScript at all can access and navigate Twitter, but browsers with JavaScript get a much enhanced experience.&lt;/p&gt;

&lt;p&gt;Dan Webb, an engineer at Twitter, wrote some very insightful pieces about this issue. In &lt;span&gt;&lt;a href="http://danwebb.net/2011/5/28/it-is-about-the-hashbangs"&gt;It's About The Hashbangs&lt;/a&gt;&lt;/span&gt; (May 2011) he explained why he believed Twitter's hashbang implementation was the wrong way to go. A year later in May 2012 he published &lt;span&gt;&lt;a href="https://blog.twitter.com/2012/improving-performance-twittercom"&gt;Improving performance on twitter.com&lt;/a&gt;&lt;/span&gt; on the official Twitter blog explaining the new history technique they were using and how it had dramatically improved the performance of the site.&lt;/p&gt;

&lt;p&gt;In fairness to Twitter, I should point out that when they launched their hashbang single page app back in 2010 the HTML5 history API wasn't widely available - IE didn't support it at all, and I seem to remember Safari 2.0 had a bug which made their implementation unusable. Thankfully this is no longer the case today.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="twitter"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>Are Django versions released too often?</title><link href="https://simonwillison.net/2013/Dec/17/are-django-versions-released/#atom-tag" rel="alternate"/><published>2013-12-17T09:52:00+00:00</published><updated>2013-12-17T09:52:00+00:00</updated><id>https://simonwillison.net/2013/Dec/17/are-django-versions-released/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Are-Django-versions-released-too-often/answer/Simon-Willison"&gt;Are Django versions released too often?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Django release process is well documented (see &lt;span&gt;&lt;a href="https://docs.djangoproject.com/en/dev/internals/release-process/"&gt;Django’s release process&lt;/a&gt;&lt;/span&gt;) and has been specifically designed to address the concerns of developers who don't want to have to spend too much time keeping up to date with the latest version.&lt;/p&gt;

&lt;p&gt;Minor releases happen roughly every nine months, and introduce new features usually without breaking backwards compatibility. If a feature is deprecated, it will raise a warning in the version that deprecates it, a louder warning in the next version (9 months later) and will be removed in the version after that (1.5 years after the feature removal was first announced).&lt;/p&gt;

&lt;p&gt;If even that is too fast for you, you can stick with a "Long-term support" release, which get security fixes applied for 3+ years. Django 1.4 is the most recent of these, and will be supported until at least March 2015.&lt;/p&gt;

&lt;p&gt;Read &lt;span&gt;&lt;a href="https://docs.djangoproject.com/en/dev/internals/release-process/"&gt;https://docs.djangoproject.com/e...&lt;/a&gt;&lt;/span&gt; for more information. Personally (and I've had no input at all in to the release process design) I think it's all extremely well thought out.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>What is currently the best technology stack for web scraping?</title><link href="https://simonwillison.net/2013/Dec/10/what-is-currently-the/#atom-tag" rel="alternate"/><published>2013-12-10T17:32:00+00:00</published><updated>2013-12-10T17:32:00+00:00</updated><id>https://simonwillison.net/2013/Dec/10/what-is-currently-the/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-currently-the-best-technology-stack-for-web-scraping/answer/Simon-Willison"&gt;What is currently the best technology stack for web scraping?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;span&gt;&lt;a href="http://phantomjs.org/"&gt;PhantomJS&lt;/a&gt;&lt;/span&gt; combined with &lt;span&gt;&lt;a href="http://casperjs.org/"&gt;CasperJS&lt;/a&gt;&lt;/span&gt; is pretty fantastic - it runs a full, headless copy of a Webkit browser so it can operate against a real DOM, execute JavaScript properly, even grab full rendered screenshots of areas of the page but is still easy to automate.
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="nodejs"/><category term="webapps"/><category term="quora"/></entry><entry><title>What are the best set of marketing/payment tools for use in startup with a subscription webapp?</title><link href="https://simonwillison.net/2013/Dec/5/what-are-the-best/#atom-tag" rel="alternate"/><published>2013-12-05T09:28:00+00:00</published><updated>2013-12-05T09:28:00+00:00</updated><id>https://simonwillison.net/2013/Dec/5/what-are-the-best/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-the-best-set-of-marketing-payment-tools-for-use-in-startup-with-a-subscription-webapp/answer/Simon-Willison"&gt;What are the best set of marketing/payment tools for use in startup with a subscription webapp?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Stripe has excellent support for subscription payments, including helping manage recurring payments and pro-rataing for upgrades to plans half way through a billing cycle etc. I believe BrainTree offers similar tools.&lt;/p&gt;

&lt;p&gt;For email stuff, I strongly recommend looking in to &lt;span&gt;&lt;a href="http://www.mailgun.com/"&gt;Mailgun&lt;/a&gt;&lt;/span&gt; - they offer fantastic tools for advanced email sending. They don't have the same user-level engagement tools as something like Mixpanel or Intercom though.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stripe"&gt;stripe&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="startups"/><category term="webapps"/><category term="quora"/><category term="stripe"/></entry><entry><title>What would be a good web application framework to use for running a small online retail business?</title><link href="https://simonwillison.net/2013/Nov/23/what-would-be-a/#atom-tag" rel="alternate"/><published>2013-11-23T11:50:00+00:00</published><updated>2013-11-23T11:50:00+00:00</updated><id>https://simonwillison.net/2013/Nov/23/what-would-be-a/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-would-be-a-good-web-application-framework-to-use-for-running-a-small-online-retail-business/answer/Simon-Willison"&gt;What would be a good web application framework to use for running a small online retail business?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'd look at hosted SaaS solutions rather than running your own. I haven't tried it myself but I've heard excellent things about &lt;span&gt;&lt;a href="http://www.shopify.com"&gt;www.shopify.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ecommerce"&gt;ecommerce&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="startups"/><category term="webapps"/><category term="web-development"/><category term="quora"/><category term="ecommerce"/></entry><entry><title>PostgreSQL: How can I store images in a database? What existing products makes it easy for a user to upload photos into a general database?</title><link href="https://simonwillison.net/2013/Nov/19/postgresql-how-can-i/#atom-tag" rel="alternate"/><published>2013-11-19T15:06:00+00:00</published><updated>2013-11-19T15:06:00+00:00</updated><id>https://simonwillison.net/2013/Nov/19/postgresql-how-can-i/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/PostgreSQL-How-can-I-store-images-in-a-database-What-existing-products-makes-it-easy-for-a-user-to-upload-photos-into-a-general-database/answer/Simon-Willison"&gt;PostgreSQL: How can I store images in a database? What existing products makes it easy for a user to upload photos into a general database?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a general rule, it's a bad idea to store images in a database. This is due to the large amount of space they take up, which can affect database read performance and will greatly increases the size of your backups, making them both take longer and cost more to store.&lt;/p&gt;

&lt;p&gt;Instead, it's best to store the images elsewhere and then store a reference to them in your database. These days the easiest way of doing this is generally to use Amazon S3, which can cheaply and reliably store an unlimited number of images. Save them to S3, then store the S3 URL (or the bucket + key combination) in a string in your database row.&lt;/p&gt;

&lt;p&gt;If you're determined to store them in a database you can do so using a BLOB field, or by base64 encoding them and storing them in a large text field (which will even further inflate the size of your tables).&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/databases"&gt;databases&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/photos"&gt;photos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/postgresql"&gt;postgresql&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="databases"/><category term="photos"/><category term="postgresql"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>Is there any way to generate thumbnails of web links like Facebook generates when we paste a link in status or comment?</title><link href="https://simonwillison.net/2013/Nov/12/is-there-any-way/#atom-tag" rel="alternate"/><published>2013-11-12T12:11:00+00:00</published><updated>2013-11-12T12:11:00+00:00</updated><id>https://simonwillison.net/2013/Nov/12/is-there-any-way/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Is-there-any-way-to-generate-thumbnails-of-web-links-like-Facebook-generates-when-we-paste-a-link-in-status-or-comment/answer/Simon-Willison"&gt;Is there any way to generate thumbnails of web links like Facebook generates when we paste a link in status or comment?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are a bunch of services that can do this. I've successfully used &lt;span&gt;&lt;a href="http://url2png.com/"&gt;http://url2png.com/&lt;/a&gt;&lt;/span&gt; for this in the past.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/facebook"&gt;facebook&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="facebook"/><category term="webapps"/><category term="quora"/></entry><entry><title>Is there a website or app that helps you track what you have completed each day?</title><link href="https://simonwillison.net/2013/Nov/8/is-there-a-website/#atom-tag" rel="alternate"/><published>2013-11-08T09:49:00+00:00</published><updated>2013-11-08T09:49:00+00:00</updated><id>https://simonwillison.net/2013/Nov/8/is-there-a-website/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Is-there-a-website-or-app-that-helps-you-track-what-you-have-completed-each-day/answer/Simon-Willison"&gt;Is there a website or app that helps you track what you have completed each day?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I've tried a few solutions for this. Surprisingly the one that has stuck for me is Evernote - I keep a different document for each week (I tried a document per day but that was annoying to update, and meant I didn't look at my older notes as often) and each day I add a new header at the top of the document for that day. Being able to link through to other notes from my day summaries is useful too.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/productivity"&gt;productivity&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/motivation"&gt;motivation&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="productivity"/><category term="webapps"/><category term="quora"/><category term="motivation"/></entry><entry><title>Would you test your web app against simulated infrastructure failure?</title><link href="https://simonwillison.net/2013/Oct/26/would-you-test-your/#atom-tag" rel="alternate"/><published>2013-10-26T17:43:00+00:00</published><updated>2013-10-26T17:43:00+00:00</updated><id>https://simonwillison.net/2013/Oct/26/would-you-test-your/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Would-you-test-your-web-app-against-simulated-infrastructure-failure/answer/Simon-Willison"&gt;Would you test your web app against simulated infrastructure failure?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I think this is a pretty interesting idea - simulating these kind of conditions isn't easy so I imagine many teams don't bother. If it was good (really easy to get started with, great control and reporting tools, maybe helped set up the actual tests to replay) and I trusted the service I would definitely consider paying for it.&lt;/p&gt;

&lt;p&gt;On the flip side, this isn't addressing a pain point that I actually have and feel - not simulating these kinds of failures doesn't keep me up at night, and my alternative would be not doing this at all. So take my "sounds interesting" with a big pinch of salt!&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sysadmin"&gt;sysadmin&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="programming"/><category term="sysadmin"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>What are some techniques, workflows, thought-processes etc. you would do as an experienced web-developer (front-end/back-end) that a new web developer might benefit from?</title><link href="https://simonwillison.net/2013/Sep/16/what-are-some-techniques/#atom-tag" rel="alternate"/><published>2013-09-16T10:18:00+00:00</published><updated>2013-09-16T10:18:00+00:00</updated><id>https://simonwillison.net/2013/Sep/16/what-are-some-techniques/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-some-techniques-workflows-thought-processes-etc-you-would-do-as-an-experienced-web-developer-front-end-back-end-that-a-new-web-developer-might-benefit-from/answer/Simon-Willison"&gt;What are some techniques, workflows, thought-processes etc. you would do as an experienced web-developer (front-end/back-end) that a new web developer might benefit from?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Learn the &lt;span&gt;&lt;a href="https://developers.google.com/chrome-developer-tools/"&gt;Chrome Developer Tools&lt;/a&gt;&lt;/span&gt; inside out, and live in them - especially the interactive JavaScript console, which can be a huge boon to your productivity.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="programming"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>What are key considerations when building behind the firewall web apps?</title><link href="https://simonwillison.net/2013/Sep/15/what-are-key-considerations/#atom-tag" rel="alternate"/><published>2013-09-15T15:24:00+00:00</published><updated>2013-09-15T15:24:00+00:00</updated><id>https://simonwillison.net/2013/Sep/15/what-are-key-considerations/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-key-considerations-when-building-behind-the-firewall-web-apps/answer/Simon-Willison"&gt;What are key considerations when building behind the firewall web apps?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;CSRF and XSS are still important: don't  leave any security vulnerabilities which might allow an evil website out on the internet to run JavaScript that steals data from your behind-the-firewall web application.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/csrf"&gt;csrf&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/enterprise"&gt;enterprise&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/saas"&gt;saas&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="csrf"/><category term="enterprise"/><category term="software-engineering"/><category term="webapps"/><category term="quora"/><category term="saas"/></entry><entry><title>Should a beginner to web development start out with Node.Js?</title><link href="https://simonwillison.net/2013/Sep/9/should-a-beginner-to/#atom-tag" rel="alternate"/><published>2013-09-09T18:00:00+00:00</published><updated>2013-09-09T18:00:00+00:00</updated><id>https://simonwillison.net/2013/Sep/9/should-a-beginner-to/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Should-a-beginner-to-web-development-start-out-with-Node-Js/answer/Simon-Willison"&gt;Should a beginner to web development start out with Node.Js?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Maybe. One of the things I like about Node.js is that the raw abstraction it provides over HTTP is much closer to how the actual protocol works than the abstractions  provided many of the more widely used frameworks such as PHP, Django or Rails. That might actually make it an effective learning tool - I'd be interested in hearing from some web developers who learnt Node.js as their first server-side technology.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="javascript"/><category term="nodejs"/><category term="programming"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>How can you run image processing in cloud code (Parse) ? If parse is not the best</title><link href="https://simonwillison.net/2013/Sep/7/how-can-you-run/#atom-tag" rel="alternate"/><published>2013-09-07T14:36:00+00:00</published><updated>2013-09-07T14:36:00+00:00</updated><id>https://simonwillison.net/2013/Sep/7/how-can-you-run/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-can-you-run-image-processing-in-cloud-code-Parse-If-parse-is-not-the-best/answer/Simon-Willison"&gt;How can you run image processing in cloud code (Parse) ? If parse is not the best&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are dozens of web-based image resizing APIs that could help with this. Check out &lt;span&gt;&lt;a href="http://www.imgix.com/"&gt;http://www.imgix.com/&lt;/a&gt;&lt;/span&gt; for example.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="javascript"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>Why aren't there any popular web frameworks in C/C++ even though they are more performance intensive languages?</title><link href="https://simonwillison.net/2013/Aug/5/why-arent-there-any/#atom-tag" rel="alternate"/><published>2013-08-05T14:17:00+00:00</published><updated>2013-08-05T14:17:00+00:00</updated><id>https://simonwillison.net/2013/Aug/5/why-arent-there-any/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-arent-there-any-popular-web-frameworks-in-C-C++-even-though-they-are-more-performance-intensive-languages?no_redirect=1"&gt;Why aren&amp;#39;t there any popular web frameworks in C/C++ even though they are more performance intensive languages?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Because it's very hard writing secure code in them due to the way they handle memory management, and web applications have an enormous number of potential paths for malicious input. It's much easier to write secure web application code in a higher level language (which isn't to say it's easy at all even then).&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>How do I choose between asynchronous web frameworks? My tech group is fairly language agnostic and we're trying to standardize on some technologies.</title><link href="https://simonwillison.net/2013/Jul/31/how-do-i-choose/#atom-tag" rel="alternate"/><published>2013-07-31T10:15:00+00:00</published><updated>2013-07-31T10:15:00+00:00</updated><id>https://simonwillison.net/2013/Jul/31/how-do-i-choose/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-do-I-choose-between-asynchronous-web-frameworks-My-tech-group-is-fairly-language-agnostic-and-were-trying-to-standardize-on-some-technologies/answer/Simon-Willison"&gt;How do I choose between asynchronous web frameworks? My tech group is fairly language agnostic and we&amp;#39;re trying to standardize on some technologies.&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Since they are all pretty close to each other and it sounds like your tech group's skills would support any of them, I would suggest having your tram build a simple prototype in all three so you can compare them for your own particular team and situation.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/frameworks"&gt;frameworks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/play"&gt;play&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scala"&gt;scala&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tornado"&gt;tornado&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="frameworks"/><category term="javascript"/><category term="nodejs"/><category term="play"/><category term="python"/><category term="scala"/><category term="tornado"/><category term="webapps"/><category term="quora"/></entry><entry><title>I have an idea for a website, with an idea for eventually having cashflow out of it? However, my skills are insufficient to build it and I have no money at all to hire someone - what's my best starting point?</title><link href="https://simonwillison.net/2013/Jul/28/i-have-an-idea/#atom-tag" rel="alternate"/><published>2013-07-28T11:42:00+00:00</published><updated>2013-07-28T11:42:00+00:00</updated><id>https://simonwillison.net/2013/Jul/28/i-have-an-idea/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/I-have-an-idea-for-a-website-with-an-idea-for-eventually-having-cashflow-out-of-it-However-my-skills-are-insufficient-to-build-it-and-I-have-no-money-at-all-to-hire-someone-whats-my-best-starting-point/answer/Simon-Willison"&gt;I have an idea for a website, with an idea for eventually having cashflow out of it? However, my skills are insufficient to build it and I have no money at all to hire someone - what&amp;#39;s my best starting point?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You either need to learn some skills, or you need to earn some money. Sadly, having a good idea is not enough - you need to be able to execute it as well.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/entrepreneurship"&gt;entrepreneurship&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="entrepreneurship"/><category term="startups"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>What technologies were used in developing web applications in the '90s?</title><link href="https://simonwillison.net/2013/Jul/21/what-technologies-were-used/#atom-tag" rel="alternate"/><published>2013-07-21T16:17:00+00:00</published><updated>2013-07-21T16:17:00+00:00</updated><id>https://simonwillison.net/2013/Jul/21/what-technologies-were-used/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-technologies-were-used-in-developing-web-applications-in-the-90s/answer/Simon-Willison"&gt;What technologies were used in developing web applications in the &amp;#39;90s?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Perl. Lots of Perl. There was a site called Matt's Script Archive which was full of terribly written Perl scripts for things like hit counters and form emailers and guest books. It was very popular.&lt;/p&gt;

&lt;p&gt;Good lord... It still exists! &lt;span&gt;&lt;a href="http://www.scriptarchive.com/"&gt;http://www.scriptarchive.com/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/internet"&gt;internet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="internet"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>What is the best web app for organize/group yours others web apps?</title><link href="https://simonwillison.net/2013/Jul/21/what-is-the-best/#atom-tag" rel="alternate"/><published>2013-07-21T11:34:00+00:00</published><updated>2013-07-21T11:34:00+00:00</updated><id>https://simonwillison.net/2013/Jul/21/what-is-the-best/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-best-web-app-for-organize-group-yours-others-web-apps/answer/Simon-Willison"&gt;What is the best web app for organize/group yours others web apps?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have you tried using your browser's bookmarks?&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="webapps"/><category term="quora"/></entry><entry><title>How is Web engineering related to Software engineering?</title><link href="https://simonwillison.net/2013/Jul/15/how-is-web-engineering/#atom-tag" rel="alternate"/><published>2013-07-15T09:13:00+00:00</published><updated>2013-07-15T09:13:00+00:00</updated><id>https://simonwillison.net/2013/Jul/15/how-is-web-engineering/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-is-Web-engineering-related-to-Software-engineering/answer/Simon-Willison"&gt;How is Web engineering related to Software engineering?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'd describe it as a subset of software engineering that deals with issues relating to the web - web application development, web protocols, browsers and so on.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/computer-science"&gt;computer-science&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="computer-science"/><category term="software-engineering"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>What are useful tools for building out web app Infrastructure?</title><link href="https://simonwillison.net/2013/Jun/27/what-are-useful-tools/#atom-tag" rel="alternate"/><published>2013-06-27T18:52:00+00:00</published><updated>2013-06-27T18:52:00+00:00</updated><id>https://simonwillison.net/2013/Jun/27/what-are-useful-tools/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-useful-tools-for-building-out-web-app-Infrastructure/answer/Simon-Willison"&gt;What are useful tools for building out web app Infrastructure?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;First, make sure you know your way around a command automation tool, such as Fabric (Python) or Capistrano (Ruby).&lt;/p&gt;

&lt;p&gt;Then pick one of Puppet or Chef and learn it - neither are particularly well documented in my opinion, so pick the one that people you know use.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>What is the best way to deploy Django?</title><link href="https://simonwillison.net/2013/Jun/16/what-is-the-best/#atom-tag" rel="alternate"/><published>2013-06-16T10:03:00+00:00</published><updated>2013-06-16T10:03:00+00:00</updated><id>https://simonwillison.net/2013/Jun/16/what-is-the-best/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-is-the-best-way-to-deploy-Django/answer/Simon-Willison"&gt;What is the best way to deploy Django?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These days a popular and reliable method is to run gunicorn behind nginx. This tutorial includes notes on using upstart for process management which is handy if you are on Ubuntu: &lt;span&gt;&lt;a href="http://lincolnloop.com/django-best-practices/deployment/servers.html"&gt;http://lincolnloop.com/django-be...&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="python"/><category term="webapps"/><category term="quora"/></entry><entry><title>What are some apps, problems you would suggest to solve a new python developer?</title><link href="https://simonwillison.net/2012/Nov/7/what-are-some-apps/#atom-tag" rel="alternate"/><published>2012-11-07T17:17:00+00:00</published><updated>2012-11-07T17:17:00+00:00</updated><id>https://simonwillison.net/2012/Nov/7/what-are-some-apps/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/What-are-some-apps-problems-you-would-suggest-to-solve-a-new-python-developer/answer/Simon-Willison"&gt;What are some apps, problems you would suggest to solve a new python developer?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The best way to learn python in my opinion is using the interactive prompt. Install ipython (a massive improvement on the standard python shell) and use it to interactively solve some simple tasks - things like downloading a CSV file from the web using the urllib library, parsing it with the csv module, then poking around in the data using python list comprehensions and saving some of the results out to a JSON file. &lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="django"/><category term="python"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>Is there a way to uniquely identify the device of the user that are connecting to a web app or a website?</title><link href="https://simonwillison.net/2012/Nov/6/is-there-a-way/#atom-tag" rel="alternate"/><published>2012-11-06T18:11:00+00:00</published><updated>2012-11-06T18:11:00+00:00</updated><id>https://simonwillison.net/2012/Nov/6/is-there-a-way/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Is-there-a-way-to-uniquely-identify-the-device-of-the-user-that-are-connecting-to-a-web-app-or-a-website/answer/Simon-Willison"&gt;Is there a way to uniquely identify the device of the user that are connecting to a web app or a website?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If the device is a mobile phone running an app it's very easy to create a permanent identifier for the application/device - it can be generated once the first time the user runs the app, stored locally and then passed to Facebook with every future request. Think of it like a browser cookie, but unlike browsers the app developer can ensure the cookie is never deleted once it has been created.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="webapps"/><category term="quora"/></entry><entry><title>How should one go about designing a simple web based collaborative text editor?</title><link href="https://simonwillison.net/2012/Oct/20/how-should-one-go/#atom-tag" rel="alternate"/><published>2012-10-20T09:22:00+00:00</published><updated>2012-10-20T09:22:00+00:00</updated><id>https://simonwillison.net/2012/Oct/20/how-should-one-go/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-should-one-go-about-designing-a-simple-web-based-collaborative-text-editor/answer/Simon-Willison"&gt;How should one go about designing a simple web based collaborative text editor?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Take a look at the open source ShareJS library, which implements a bunch of the fundamental (and extremely tricky) algorithms you need to get collaborative editing in the browser to work well: &lt;span&gt;&lt;a href="https://github.com/josephg/ShareJS/"&gt;https://github.com/josephg/ShareJS/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="programming"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>How can I keep my website content exclusive?</title><link href="https://simonwillison.net/2012/Oct/16/how-can-i-keep/#atom-tag" rel="alternate"/><published>2012-10-16T16:59:00+00:00</published><updated>2012-10-16T16:59:00+00:00</updated><id>https://simonwillison.net/2012/Oct/16/how-can-i-keep/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/How-can-I-keep-my-website-content-exclusive/answer/Simon-Willison"&gt;How can I keep my website content exclusive?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No, there isn't - people can always copy things if they really want to, it's part of the cost of doing business. If you were to publish a book people could always photocopy it.&lt;/p&gt;

&lt;p&gt;If you're selling static content, I would suggest doing it as an ebook. People expect to spend money on ebooks, and there are ways of e.g. baking the user's email address in to a generated PDF file so that people feel more obliged not to share the ebook around (since it makes it obvious who the initial copy came from).&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/business"&gt;business&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/startups"&gt;startups&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="business"/><category term="startups"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry><entry><title>Why are web applications more popular than desktop applications with investors?</title><link href="https://simonwillison.net/2012/Oct/13/why-are-web-applications/#atom-tag" rel="alternate"/><published>2012-10-13T17:19:00+00:00</published><updated>2012-10-13T17:19:00+00:00</updated><id>https://simonwillison.net/2012/Oct/13/why-are-web-applications/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Why-are-web-applications-more-popular-than-desktop-applications-with-investors/answer/Simon-Willison"&gt;Why are web applications more popular than desktop applications with investors?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;How often do you install a new desktop application? How often do you try out a new web application?&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/funding"&gt;funding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/investing"&gt;investing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pitching"&gt;pitching&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="funding"/><category term="investing"/><category term="webapps"/><category term="quora"/><category term="pitching"/></entry><entry><title>Did Mark Zuckerberg have any knowledge on building scalable social networks prior to starting work on Facebook?</title><link href="https://simonwillison.net/2012/Sep/18/did-mark-zuckerberg-have/#atom-tag" rel="alternate"/><published>2012-09-18T15:27:00+00:00</published><updated>2012-09-18T15:27:00+00:00</updated><id>https://simonwillison.net/2012/Sep/18/did-mark-zuckerberg-have/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;em&gt;My answer to &lt;a href="https://www.quora.com/Did-Mark-Zuckerberg-have-any-knowledge-on-building-scalable-social-networks-prior-to-starting-work-on-Facebook/answer/Simon-Willison"&gt;Did Mark Zuckerberg have any knowledge on building scalable social networks prior to starting work on Facebook?&lt;/a&gt; on Quora&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm going to bet he didn't have this knowledge, simply because back when he launched Facebook in 2004 almost NO ONE had this knowledge - there simply weren't enough "web scale" products around for the patterns needed to run them to be widely discussed.&lt;/p&gt;

&lt;p&gt;Today we're spoiled by the enormous amount of shared experience we have as a community in building large scalable systems, but back then it really was a case of each large scale site figuring everything out for themselves.&lt;/p&gt;

&lt;p&gt;I bet he picked it up pretty fast though... nothing forces you to learn to scale faster than the experience of having your site stop working because too many people want to use it at the same time!&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/facebook"&gt;facebook&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/social-networks"&gt;social-networks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/software-engineering"&gt;software-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webapps"&gt;webapps&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-development"&gt;web-development&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/quora"&gt;quora&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="facebook"/><category term="programming"/><category term="scaling"/><category term="social-networks"/><category term="software-engineering"/><category term="webapps"/><category term="web-development"/><category term="quora"/></entry></feed>