<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Oli Warner's blog</title><link>http://thepcspy.com/</link><description>Latest Ubuntu-flavoured posts from Oli Warner</description><language>en-us</language><copyright>Copyright (c) 2010, Oli Warner</copyright><lastBuildDate>Fri, 01 Mar 2013 02:43:53 +0000</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/OliUbuntu" /><feedburner:info uri="oliubuntu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Arguments Against Rolling Release Ubuntu
</title><link>http://feedproxy.google.com/~r/OliUbuntu/~3/sqye93vNbuk/</link><description>&lt;p&gt;I've just read through &lt;a href="https://lists.ubuntu.com/archives/ubuntu-devel/2013-February/036537.html"&gt;Rick Spencer's argument for rolling releases&lt;/a&gt; in the Ubuntu Devel mailing list but I'm frankly less convinced than I was before.&lt;/p&gt;

&lt;p&gt;Let's get one thing clear: The VP of Ubuntu Engineering at Canonical, Rick Spencer writes a mean proposal. Honestly. I deal with more than a fair amount of marketing copy-writing and I can tell you it's a great pitch. It's completely decided in its stance and it uses emotive and empowering power-words like &lt;strong&gt;converge&lt;/strong&gt;, &lt;strong&gt;velocity&lt;/strong&gt; and &lt;strong&gt;agility&lt;/strong&gt;. You'll find nothing but the finest propaganda here.&lt;/p&gt;
&lt;p&gt;Anyway, here's my interpretation — a paraquote, if you will — of Rick's whole argument:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;We spend too much time supporting old, haggered software that no users actually want, and not enough  on shiny new things.&lt;/h2&gt;
&lt;p&gt;We frustrate people by being up to six months behind the curve, we end up rushing new features and integrations because of the arbitrary time limit and we already rock at getting things right first time with Daily Quality... so why not move to a rolling release?&lt;/p&gt;
&lt;p&gt;It's better for users, maintainers and the rest of us if we all just use one codebase for everything (including phones and all that). That will give us the time to improve things at a faster and more stable rate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Again, that is just my interpretation. You can read the full post and make your own. I have some reservations based on what the post suggests to be true and some of the "remedies" for those problems also seem to carry risks and downsides. Here are my key problems with a rolling system:&lt;/p&gt;
&lt;h3&gt;Newer is not always better.&lt;/h3&gt;
&lt;p&gt;The biggest elephant in the room. Newer can mean fixes and features but it often means new bugs, freshly lapsing documentation and a new wave of angry users when their things just stop working.&lt;/p&gt;
&lt;p&gt;A culture of constant-updates may also rely on waiting for the next upstream version instead of getting stuck in and fixing otherwise low hanging fruit.&lt;/p&gt;
&lt;h3&gt;Users can already upgrade any parts they want.&lt;/h3&gt;
&lt;p&gt;The relevant teams make sure that the latest graphics packages and wifi drivers are available and backported and for everything else PPAs have revolutionised the upgrade system.&lt;/p&gt;
&lt;p&gt;If you want the latest version of PHP, Chrome or KDE, you just install a PPA and you accept the risk. If it doesn't work you can just &lt;code&gt;ppa-purge&lt;/code&gt; it out of the system and you're back to solid, stable ground.&lt;/p&gt;
&lt;h3&gt;Rolling means a constantly moving target.&lt;/h3&gt;
&lt;p&gt;Developers don't know what they're building for. Users barely know what they're running on. Triagers need to work five times as hard to track down which version of which software a bug is coming from. What happens to bugs after the new release comes out? How on earth do you plan a multi-month project (eg: migrating Upstart to Systemd) when you have no way to freeze and force everything else to fit around you?&lt;/p&gt;
&lt;h3&gt;And what about the "stable ABI" we've been honking on about to app developers and ISVs?&lt;/h3&gt;
&lt;p&gt;It's hard enough for open-source developers to keep up but now you've got a bunch of closed source stuff sailing on this ship. This is only possible because we promised we'd remain a solid platform and be respectful with system changes.&lt;/p&gt;
&lt;p&gt;The successful marketing of this feature (along with other things coming into alignment) mean gaming on Linux is right in the process of taking off. And you want to shoot it down with ABI instability? Awesome. Call off the year of the Linux Desktop!&lt;/p&gt;
&lt;p&gt;The argument that ISVs only care about LTS is the funniest thing I've read all day. ISVs are paid to care about what their customers whine about. Take gamers as a market example. If developers don't support Ubuntu-NG, most of their market has just evaporated. You can't think about Ubuntu as a B2B software platform. The future is going to be full of B2C and I2C sales and if you can't support the developers, they're not going to support your platform.&lt;/p&gt;
&lt;h3&gt;Converge is a lie. There is no convergence yet.&lt;/h3&gt;
&lt;p&gt;Ubuntu Touch is possibly the least unified Ubuntu in the family. Different kernel. Different display server. Different interface. Different interface toolkit. Different application API. You can't jolly on about being from the same codebase when it's completely different stuff.&lt;/p&gt;
&lt;p&gt;I'm sure this will change in the future but until desktop Unity runs on QML, offering similar API hooks to applications, I'm not even going to entertain the idea that there's convergence. It's a nice hopeful word but it has no relation to Ubuntu at the moment.&lt;/p&gt;
&lt;h3&gt;Daily Quality is good enough? &lt;em&gt;Release quality still isn't good enough!&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;I deal with Joe the average user on a daily basis. They've downloaded Ubuntu and it doesn't work. Or they've upgraded and their sound doesn't work. Or they can't get a graphical environment. Or the wifi doesn't work. This is the staple of question on Ask Ubuntu. We'll get a few hundred of these every week without fail.&lt;/p&gt;
&lt;p&gt;Joe still occasionally has a really bad time with Ubuntu because Joe wasn't there when Ubuntu was in its 6-month development phase. Joe could have downloaded the testing ISO or upgraded but they didn't so when the big upgrade finally happened on release day, they ran into a hardware-specific bug in the Kernel or X.&lt;/p&gt;
&lt;p&gt;A rolling release is going to create a few thousand Joes every upgrade and will turn Ask Ubuntu and Launchpad into cesspits of poorly updated bug reports. Thanks.&lt;/p&gt;
&lt;p&gt;We urgently need to look at improving how users handle their own hardware issues because the current models are unhelpful to developers and painful for both the users and the support team. Building new tools to automatically fix issues should be the focus.&lt;/p&gt;
&lt;h2&gt;So, back to your question, why now?&lt;/h2&gt;
&lt;p&gt;Ubuntu has proven itself. I don't agree with everything that's happened technically or in the community to date but the Ubuntu ecosystem appears to be the healthiest it has ever been. It isn't there yet and it needs to keep improving but why would you want to knock out the foundations at this point?&lt;/p&gt;
&lt;p&gt;I might be completely wrong and rolling might work but &lt;em&gt;we lose nothing if we stick with the 6-month cadence&lt;/em&gt;... &lt;strong&gt;What is the risk of switching to rolling? Embarrassment? Losing users? Collapsing the community? *Is any of that really worth it?&lt;/strong&gt;*&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OliUbuntu?a=sqye93vNbuk:LNTqMlaomM8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OliUbuntu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OliUbuntu?a=sqye93vNbuk:LNTqMlaomM8:N-ysMDt3nBs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OliUbuntu?i=sqye93vNbuk:LNTqMlaomM8:N-ysMDt3nBs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OliUbuntu/~4/sqye93vNbuk" height="1" width="1"/&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Oli Warner</dc:creator><pubDate>Fri, 01 Mar 2013 02:43:53 +0000</pubDate><guid isPermaLink="false">http://thepcspy.com/read/arguments-against-rolling-release-ubuntu/</guid><category>ubuntu</category><feedburner:origLink>http://thepcspy.com/read/arguments-against-rolling-release-ubuntu/</feedburner:origLink></item><item><title>Migrating Django's database
</title><link>http://feedproxy.google.com/~r/OliUbuntu/~3/KklMbU4BWUs/</link><description>&lt;p&gt;Django is awesome but there's one job that can be a bit trickier than you're used to: moving from one database to another.&lt;/p&gt;

&lt;p&gt;So let's pretend that you want to move from SQLite3 to PostgreSQL. It's a fairly common move for Django developers and I recently went through the process for one of my larger projects. &lt;/p&gt;
&lt;p&gt;Your project's settings should have something a little bit like this, pointing at the current database:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;DATABASES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;django&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;backends&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;NAME&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Sidebar:&lt;/strong&gt; If you don't have this, you're still running on the old style of configuration. Take some time to upgrade everything to the latest Django. This tutorial assume you're at version 1.4 and won't work with the old style of database definition.&lt;/p&gt;
&lt;p&gt;We need to add in the new database. We need to do this inline (as a new database) for reasons I'll get to:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;DATABASES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;django&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;backends&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;NAME&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqlite3&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;django&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;backends&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;postgresql_psycopg2&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;NAME&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;database_name&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;USER&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;PASSWORD&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;HOST&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;From here Django can access both databases.&lt;/p&gt;
&lt;p&gt;Normally you &lt;em&gt;should&lt;/em&gt; be able to run the following:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;dumpdata&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;syncdb&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;loaddata&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, I ran into issues with this. &lt;code&gt;contenttypes&lt;/code&gt; was schitzing-out. I had many errors but the main one was &lt;code&gt;ContentType matching query does not exist.&lt;/code&gt; and I wasn't getting anywhere.&lt;/p&gt;
&lt;p&gt;All I needed to do was handle things separately. Migrate &lt;code&gt;contenttypes&lt;/code&gt; first and then handle the rest of my data:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;dumpdata&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="n"&gt;contenttypes&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;dumpdata&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;exclude&lt;/span&gt; &lt;span class="n"&gt;contenttypes&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;syncdb&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;loaddata&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ctypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt; 
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;manage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;loaddata&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;After that, just edit your settings. Rename &lt;code&gt;new&lt;/code&gt; to &lt;code&gt;default&lt;/code&gt; and then you can either remove the old &lt;code&gt;default&lt;/code&gt; or rename it to something like &lt;code&gt;old&lt;/code&gt; so you can quickly have access to it in the future.&lt;/p&gt;
&lt;p&gt;Some people may have problems with some primary keys. You can include the argument &lt;code&gt;--natural&lt;/code&gt; to use string-based keys but in my cases, I've only run into more problems with this method. Just splitting the data up has worked for me so far.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OliUbuntu?a=KklMbU4BWUs:C6b6Rkcen_k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OliUbuntu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OliUbuntu?a=KklMbU4BWUs:C6b6Rkcen_k:N-ysMDt3nBs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OliUbuntu?i=KklMbU4BWUs:C6b6Rkcen_k:N-ysMDt3nBs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OliUbuntu/~4/KklMbU4BWUs" height="1" width="1"/&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Oli Warner</dc:creator><pubDate>Mon, 17 Sep 2012 16:06:42 +0100</pubDate><guid isPermaLink="false">http://thepcspy.com/read/migrating-djangos-database/</guid><category>django</category><feedburner:origLink>http://thepcspy.com/read/migrating-djangos-database/</feedburner:origLink></item><item><title>Why you should never log in with your Facebook account just to read news
</title><link>http://feedproxy.google.com/~r/OliUbuntu/~3/V874xnNJ_Hk/</link><description>&lt;p&gt;I've noticed a growing trend when you click an external link on Facebook from a desktop computer: you're asked to log in. While this might seem like it's only a minor inconvenience, in the long run this could be extremely dangerous.&lt;/p&gt;

&lt;p&gt;If you've used Facebook in the past year, you've almost certainly seen something like this after clicking a particularly outrageous looking "Trending Article":&lt;/p&gt;
&lt;p&gt;&lt;img alt="Argl! No!" src="http://i.thepcspy.com/blog/20120817-facebooklogin.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The old curmudgeon that I am, I swear every time I see one of these because I'm never ever going to click the Okay button. I hope you don't either.&lt;/p&gt;
&lt;h2&gt;If you do, you're what's wrong with &lt;strike&gt;kids these days&lt;/strike&gt; Facebook&lt;/h2&gt;
&lt;p&gt;The dialogue's description would have you believe you're joining some hip social experiment --and I suppose you are-- but I have some spoilers for you: &lt;em&gt;precisely two parties gain from you logging in like this and you're neither one of them&lt;/em&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The newspaper gets a ton of "basic" information about you from Facebook. Now they know roughly who you are, what you like, what your friends are like (and their public information). It's not rocket science to drop you into a very precise demographic.&lt;/p&gt;
&lt;p&gt;They can also now track you around their site with complete immunity from all the fancy new laws to help stop websites tracking you against your will. It's actually worse than that because this is highly personalised tracking. All in all, they can now advertise at you with at least 1000% increased efficiency. And they can post on your wall to advertise to your friends.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Facebook gets all this and more. They already know your pets' names, shoe size, school, best friends, holiday locations, how often you get drunk, and everything else that &lt;em&gt;happens&lt;/em&gt; to you.&lt;/p&gt;
&lt;p&gt;Now when you're logged into a Trending Article partner, &lt;em&gt;what you read&lt;/em&gt; is being broadcast to Facebook. Now Facebook has political information about its users, and the power to direct them to new political media. They might not own you but they can certainly make sure you're exposed to certain articles.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;I see my personal information being tossed back and forth but where in this privacy-destroying-reach-around do &lt;em&gt;I&lt;/em&gt; get something back?&lt;/h2&gt;
&lt;p&gt;You get to read the article, that's it.&lt;br /&gt;
You're trading the keys to your soul for something that is &lt;em&gt;freely available&lt;/em&gt;.&lt;br /&gt;
You don't have to log in to view the content directly through their website.&lt;br /&gt;
You don't have to log in if you click the link from the Facebook app on your phone.&lt;/p&gt;
&lt;p&gt;So why would you let them have all that information just because you're on a real computer? Just go to the newspapers website and search for the title. You get to read it without the colonoscopy.&lt;/p&gt;
&lt;p&gt;The same applies to a vast number of sites where you have the option to "Connect with Facebook". Unless it's something I trust, I'm not handing over my papers just to log in. If you're still not sure, consider the following questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Why would you want this site to know your public information?&lt;/li&gt;
&lt;li&gt;Would you tell a complete stranger what you're about tell this website?&lt;/li&gt;
&lt;li&gt;Why would you want Facebook to know even more than it already does?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sometimes I really miss the old, disjointed internet.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.S. If you read this and it made any impression, you can nuke the relationships your Facebook account has with publishers using &lt;a href="https://www.facebook.com/settings/?tab=applications"&gt;Facebook's Application Settings screen&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.P.S Even if you want the media to know everything about you, it's worth checking that page to make sure there aren't any dodgy applications in there.&lt;/em&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/OliUbuntu?a=V874xnNJ_Hk:6MetEnf1-NY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OliUbuntu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/OliUbuntu?a=V874xnNJ_Hk:6MetEnf1-NY:N-ysMDt3nBs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/OliUbuntu?i=V874xnNJ_Hk:6MetEnf1-NY:N-ysMDt3nBs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/OliUbuntu/~4/V874xnNJ_Hk" height="1" width="1"/&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Oli Warner</dc:creator><pubDate>Mon, 20 Aug 2012 15:49:33 +0100</pubDate><guid isPermaLink="false">http://thepcspy.com/read/never-login-with-facebook/</guid><category>facebook</category><category>privacy</category><feedburner:origLink>http://thepcspy.com/read/never-login-with-facebook/</feedburner:origLink></item></channel></rss>
