{"id":487,"date":"2010-06-22T21:01:14","date_gmt":"2010-06-22T20:01:14","guid":{"rendered":"http:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/"},"modified":"2010-06-22T21:01:14","modified_gmt":"2010-06-22T20:01:14","slug":"dependencies-suck","status":"publish","type":"post","link":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/","title":{"rendered":"Dependencies suck"},"content":{"rendered":"<p>We love dependencies. For example, in the <b>CPAN universe<\/b>. They make our job so damn easier. <a href=\"http:\/\/search.cpan.org\" rel=\"nofollow\">Thousands of production quality, unit tested modules<\/a> at your fingertips.<\/p>\n<p>But dependencies also suck really badly, for example when you&#39;re using a Linux distribution that has packages that are just too old to be useful. Hey, but they are stable! More stable-as-dead or more stable-as-production-quality? You decide.<\/p>\n<p>It&#39;s been many months since I installed a local instance of <a href=\"http:\/\/trac.transifex.org\" rel=\"nofollow\">Transifex<\/a>, a <b>Django application<\/b> that allows translators to easily contribute to projects. We&#39;re using it for My Opera, but also trying to get other internal projects to use it.<\/p>\n<p>So far, it has worked nicely. I think Transifex is a really good application, its feature set is just right for what we need etc&#8230; Last week I decided to <b>upgrade our Transifex instance from v0.8.0-devel to 0.9.0-devel<\/b>. <a href=\"http:\/\/docs.transifex.org\/releases\/0.9.html\" rel=\"nofollow\">The improvements were really nice and needed<\/a>, so I just decided to go for it. I had been upgrading in the 0.8.0 series from their repository (aka HEAD, aka master, aka trunk).<\/p>\n<p>This time though, <a href=\"http:\/\/docs.transifex.org\/releases\/0.9.html#dependencies\" rel=\"nofollow\">the list of dependencies<\/a> was a bit more specific than usual. <b>Also, please note that 0.9.0 is a **BLEEDING EDGE** development version as of June 2010.<\/b><\/p>\n<p>Anyway, first dependency listed was &quot;Django = 1.1.2&quot;. I think I started going down the wrong path when I upgraded Django with:<\/p>\n<p><code><br \/>\n$ sudo easy_install &#39;Django&gt;=1.1.2&#39;<br \/>\n<\/code><\/p>\n<p>Here you can see that my mind is somewhat hardwired to the Perl culture, where <b>backward compatibility<\/b> is of paramount importance. I wrote code 10 years ago, using perl 5.005, that it&#39;s still in production, unmodified, with perl 5.10, and I&#39;m talking about commercial stuff, not silly home projects. <b>The terrible mistake here is to think that this also applies everywhere else. Forget it. It&#39;s not true<\/b>.<\/p>\n<p>In fact, <code>easy_install<\/code> picked up <code>Django 1.2.1<\/code>, which is <b>an entirely different beast<\/b> that breaks at least a couple of assumptions that Transifex was making. I don&#39;t remember exactly now, but one had to do with the automatic export of <code>email.MIMEBase<\/code> into <code>django.core.mail<\/code> and another I only remember it broke horribly.<\/p>\n<p>So, a couple of hours later, thanks to the guys on the <code>#transifex<\/code> channel, I figured out that what I really needed to write was:<\/p>\n<p><code><br \/>\n$ sudo easy_install &#39;Django==1.1.2&#39;<br \/>\n<\/code><\/p>\n<p>This forces to install the given version instead of any later one. So far so good. Then I had another problem, completely unrelated, the required me to <code>strace<\/code> the <code>.\/manage.py<\/code> Django script, to figure out that it was using a totally screwed up sqlite database coming from a year old test version of transifex I had installed through easy_install and was completely ignoring my local settings that went to a MySQL db. How nice.<\/p>\n<p>So, yes, we always complain about CPAN, dependencies, Module::Install, ExtUtils::MakeMaker and whatnot, but a look at other worlds (easy_install, ruby-gems anyone?) can remind Perl people of the fantastic toolchain and especially <b>culture<\/b> &quot;we&quot; have built, and that&#39;s still kicking everyone else&#39;s ass, on any platform.<\/p>\n<p>So, regarding the debate in the Perl community, my vote goes to keeping Sane(tm) backward compability standards, as we always did. It matters, especially for commercial software companies!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We love dependencies. For example, in the CPAN universe. They make our job so damn easier. Thousands of production quality, unit tested modules at your fingertips. But dependencies also suck really badly, for example when you&#39;re using a Linux distribution that has packages that are just too old to be useful. Hey, but they are [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[421,49,422,91,420,50,419,423,283],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dependencies suck - Random hacking<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dependencies suck - Random hacking\" \/>\n<meta property=\"og:description\" content=\"We love dependencies. For example, in the CPAN universe. They make our job so damn easier. Thousands of production quality, unit tested modules at your fingertips. But dependencies also suck really badly, for example when you&#039;re using a Linux distribution that has packages that are just too old to be useful. Hey, but they are [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/\" \/>\n<meta property=\"og:site_name\" content=\"Random hacking\" \/>\n<meta property=\"article:published_time\" content=\"2010-06-22T20:01:14+00:00\" \/>\n<meta name=\"author\" content=\"cosimo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"cosimo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/\"},\"author\":{\"name\":\"cosimo\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\"},\"headline\":\"Dependencies suck\",\"datePublished\":\"2010-06-22T20:01:14+00:00\",\"dateModified\":\"2010-06-22T20:01:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/\"},\"wordCount\":519,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\"},\"keywords\":[\"backward compatibility\",\"cpan\",\"dependencies\",\"development\",\"django\",\"perl\",\"perl culture\",\"software\",\"transifex\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/\",\"url\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/\",\"name\":\"Dependencies suck - Random hacking\",\"isPartOf\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#website\"},\"datePublished\":\"2010-06-22T20:01:14+00:00\",\"dateModified\":\"2010-06-22T20:01:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.streppone.it\/cosimo\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dependencies suck\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#website\",\"url\":\"https:\/\/www.streppone.it\/cosimo\/blog\/\",\"name\":\"Random hacking\",\"description\":\"Assume nothing. Code defensively. Keep it simple, stupid!\",\"publisher\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.streppone.it\/cosimo\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1\",\"name\":\"cosimo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g\",\"caption\":\"cosimo\"},\"logo\":{\"@id\":\"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/www.streppone.it\/cosimo\/blog\/author\/cosimo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dependencies suck - Random hacking","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/","og_locale":"en_US","og_type":"article","og_title":"Dependencies suck - Random hacking","og_description":"We love dependencies. For example, in the CPAN universe. They make our job so damn easier. Thousands of production quality, unit tested modules at your fingertips. But dependencies also suck really badly, for example when you&#39;re using a Linux distribution that has packages that are just too old to be useful. Hey, but they are [&hellip;]","og_url":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/","og_site_name":"Random hacking","article_published_time":"2010-06-22T20:01:14+00:00","author":"cosimo","twitter_card":"summary_large_image","twitter_misc":{"Written by":"cosimo","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#article","isPartOf":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/"},"author":{"name":"cosimo","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1"},"headline":"Dependencies suck","datePublished":"2010-06-22T20:01:14+00:00","dateModified":"2010-06-22T20:01:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/"},"wordCount":519,"commentCount":0,"publisher":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1"},"keywords":["backward compatibility","cpan","dependencies","development","django","perl","perl culture","software","transifex"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/","url":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/","name":"Dependencies suck - Random hacking","isPartOf":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#website"},"datePublished":"2010-06-22T20:01:14+00:00","dateModified":"2010-06-22T20:01:14+00:00","breadcrumb":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/2010\/06\/dependencies-suck\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.streppone.it\/cosimo\/blog\/"},{"@type":"ListItem","position":2,"name":"Dependencies suck"}]},{"@type":"WebSite","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#website","url":"https:\/\/www.streppone.it\/cosimo\/blog\/","name":"Random hacking","description":"Assume nothing. Code defensively. Keep it simple, stupid!","publisher":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.streppone.it\/cosimo\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/c443bedbf6ecf99550d6395620801df1","name":"cosimo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cb1d938720df45a2720724aae99e3bfc?s=96&r=g","caption":"cosimo"},"logo":{"@id":"https:\/\/www.streppone.it\/cosimo\/blog\/#\/schema\/person\/image\/"},"url":"https:\/\/www.streppone.it\/cosimo\/blog\/author\/cosimo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/posts\/487"}],"collection":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/comments?post=487"}],"version-history":[{"count":0,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/posts\/487\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/media?parent=487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/categories?post=487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.streppone.it\/cosimo\/blog\/wp-json\/wp\/v2\/tags?post=487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}