<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-31370673</atom:id><lastBuildDate>Sun, 20 May 2012 13:51:53 +0000</lastBuildDate><category>accelerator07</category><category>movies</category><category>pixelapse</category><category>quote</category><category>popdakar06</category><category>roskilde07</category><category>osx</category><category>firefox</category><category>arvika06</category><category>fantasy premier league</category><category>idonethis</category><category>git</category><category>ios</category><category>köpenhamn07</category><category>kungshamra</category><category>tv</category><category>popdakar07</category><category>emmaboda06</category><category>jquery mobile</category><category>varnish</category><category>moblog</category><category>flickrr</category><category>facebook</category><category>dauta</category><category>childbrowser</category><category>vårberg</category><category>php</category><category>photography</category><category>parklife06</category><category>random</category><category>elveling</category><category>music</category><category>foods</category><category>cordova</category><category>emmaboda07</category><category>arvika07</category><category>reddit</category><category>dyndns</category><category>fotboll</category><category>sopa</category><category>jquery</category><category>dreams</category><category>flytt</category><category>blarg</category><category>emmaboda08</category><category>pinterest</category><category>kth</category><category>hultsfred06</category><category>phonegap</category><category>symfony</category><category>paris08</category><category>reblog</category><category>sickla</category><category>pipa</category><category>google</category><title>Time to move on, life is on TV.</title><description>I can't wait to grow up.</description><link>http://blog.blarg.se/</link><managingEditor>noreply@blogger.com (solanum)</managingEditor><generator>Blogger</generator><openSearch:totalResults>370</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-1568710959567594914</guid><pubDate>Wed, 11 Apr 2012 21:07:00 +0000</pubDate><atom:updated>2012-04-11T23:07:58.185+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>16GB</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-9vcnvZnDDIk/T4Xyik-LvwI/AAAAAAAAAPc/SlY22UU8WKs/s1600/16gb.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-9vcnvZnDDIk/T4Xyik-LvwI/AAAAAAAAAPc/SlY22UU8WKs/s1600/16gb.png" /&gt;&lt;/a&gt;&lt;/div&gt;
Sweet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-1568710959567594914?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/04/16gb.html</link><author>noreply@blogger.com (solanum)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-9vcnvZnDDIk/T4Xyik-LvwI/AAAAAAAAAPc/SlY22UU8WKs/s72-c/16gb.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-2555754333882073420</guid><pubDate>Wed, 28 Mar 2012 17:11:00 +0000</pubDate><atom:updated>2012-03-28T19:11:45.693+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>php</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Reblog: The Power of Technical Debt - Anthony Ferrara</title><description>&lt;a href="http://blog.ircmaxell.com/2012/03/power-of-technical-debt.html"&gt;The Power of Technical Debt - Anthony Ferrara&lt;/a&gt;: &lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;div style="text-align: justify;"&gt;
Lately, I've found myself in a number of discussions about Technical Debt and how it applies to project development. Overall, I think it's a very powerful tool that -- when used wisely -- can be a great asset to any team. It seems to me that most of the people that I've been talking to really don't agree, and see Technical Debt as a plague that should be eliminated at first sight. So, I figured I'd share my opinions, and see what you think...&lt;/div&gt;
&lt;a href="http://blog.ircmaxell.com/2012/03/power-of-technical-debt.html#more"&gt;Read more »&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-2555754333882073420?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/03/reblog-power-of-technical-debt-anthony.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-9222314439570081002</guid><pubDate>Mon, 26 Mar 2012 17:30:00 +0000</pubDate><atom:updated>2012-03-26T19:30:00.842+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>symfony</category><category domain='http://www.blogger.com/atom/ns#'>php</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Reblog: Symfony 2.0.12 released</title><description>&lt;a href="http://feedproxy.google.com/%7Er/symfony/blog/%7E3/yLkc2lQEx4U/symfony-2-0-12-released"&gt;Symfony 2.0.12 released&lt;/a&gt;: &lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
Symfony 2.0.12 has just been released.&lt;br /&gt;
The &lt;a href="https://github.com/symfony/symfony/blob/2.0/CHANGELOG-2.0.md"&gt;CHANGELOG&lt;/a&gt;
has all the details about the changes and you can even have a look at the full
&lt;a href="https://github.com/symfony/symfony/compare/v2.0.11...v2.0.12"&gt;diff&lt;/a&gt;.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-9222314439570081002?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/03/reblog-symfony-2012-released.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-1840702113789915404</guid><pubDate>Mon, 26 Mar 2012 06:30:00 +0000</pubDate><atom:updated>2012-03-26T08:30:00.290+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>cordova</category><category domain='http://www.blogger.com/atom/ns#'>ios</category><category domain='http://www.blogger.com/atom/ns#'>childbrowser</category><category domain='http://www.blogger.com/atom/ns#'>phonegap</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Reblog: Installing the ChildBrowser Plugin for iOS with PhoneGap/Cordova 1.5</title><description>&lt;a href="http://blog.digitalbackcountry.com/2012/03/installing-the-childbrowser-plugin-for-ios-with-phonegapcordova-1-5/"&gt;Installing the ChildBrowser Plugin for iOS with PhoneGap/Cordova 1.5&lt;/a&gt;: &lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
I’ve seen a bunch of people who are new to PhoneGap/Cordova struggle with getting the ChildBrowser up and running. I fought with it today as well and most of my mistakes were based on old blog posts so I wanted to do a quick post that hopefully shows up in Google for people running into the same problems I had.&lt;br /&gt;
I’m starting with a blank project. The ChildBrowser plugin I’m using &lt;a href="https://github.com/phonegap/phonegap-plugins/tree/master/iPhone/ChildBrowser"&gt;is here&lt;/a&gt; which as of this writing has been updated to support Cordova 1.5 with some potential backwards compatibility with 1.4.1. The simplest thing is to probably just &lt;a href="https://github.com/phonegap/phonegap-plugins/downloads"&gt;download the source as a zip&lt;/a&gt;.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-1840702113789915404?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/03/installing-childbrowser-plugin-for-ios.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-2232477515720399422</guid><pubDate>Mon, 26 Mar 2012 00:03:00 +0000</pubDate><atom:updated>2012-03-26T02:11:05.386+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>php</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Reblog: RIPS static source code analyser - Gareth Heyes</title><description>&lt;a href="http://www.thespanner.co.uk/2012/03/19/rips-static-source-code-analyser/"&gt;RIPS static source code analyser - Gareth Heyes&lt;/a&gt;: &lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;a href="http://rips-scanner.sourceforge.net/"&gt;RIPS is a static source code analyser&lt;/a&gt; and is one awesome piece of coding by &lt;a href="http://twitter.com/fluxreiners"&gt;@fluxreiners&lt;/a&gt;. Use it now to scan your PHP files for vulnerabilities. It can detect XSS, SQLi, File disclosure, LFI/RFI, RCE and lots more and it’s free. I’m downloading the current version now 0.52, so should you &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-2232477515720399422?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/03/reblog-rips-static-source-code-analyser.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-3958130825154605195</guid><pubDate>Thu, 01 Mar 2012 23:56:00 +0000</pubDate><atom:updated>2012-03-02T00:56:37.871+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>php</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>PHP 5.4.0 stable släppt</title><description>&lt;blockquote class="tr_bq"&gt;
The PHP development team is proud to announce the immediate availability of PHP 5.4.0. This release is a major leap forward in the 5.x series, and includes a large number of new features and bug fixes.&lt;/blockquote&gt;
Yay!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://php.net/releases/5_4_0.php"&gt;http://php.net/releases/5_4_0.php&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.php.net/downloads.php" target="_blank"&gt;http://www.php.net/downloads.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-3958130825154605195?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/03/php-540-stable-slappt.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-4838568682646948155</guid><pubDate>Tue, 21 Feb 2012 19:00:00 +0000</pubDate><atom:updated>2012-02-21T20:00:06.427+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>dyndns</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>DynDNS dödade mina mine.nu-domäner</title><description>Märkte av en slump att de mine.nu-subdomäner jag haft hos DynDNS sedan internets begynnelse plötsligt slutat fungera, och var spårlöst borta när jag loggade in och kollade på sidan.&lt;br /&gt;
&lt;br /&gt;
Vidare efterforskning visade att deras varningsmail givetvis hade hamnat i Spam-mappen. De nya reglerna för gratis-konton är tydligen att man måste byta IP-adress minst en gång i månaden på respektive subdomän, eller följa aktiveringslänken i varningsmailet som skickas varje månad om man inte har bytt IP-adress.&lt;br /&gt;
&lt;br /&gt;
Så fick bli att köpa Pro account eller vad det hette, $20/år.&lt;br /&gt;
&lt;br /&gt;
Årets affärsmodell?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-4838568682646948155?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/02/dyndns-dodade-mina-minenu-domaner.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-1595320910360155871</guid><pubDate>Thu, 09 Feb 2012 21:23:00 +0000</pubDate><atom:updated>2012-02-09T22:23:00.545+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>pixelapse</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Pixelapse: Github for Designers</title><description>Versionshantering för PSD-filer, syncar automatiskt vid varje save. Cool startup, fast namnet kanske de ska fila lite på.&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://news.ycombinator.com/item?id=3572755"&gt;http://news.ycombinator.com/item?id=3572755&lt;/a&gt; [Hacker News]&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.pixelapse.com/hn" target="_blank"&gt;Pixelapse&lt;/a&gt; [pixelapse.com]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-1595320910360155871?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/02/pixelapse-github-for-designers.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-8941605206838431607</guid><pubDate>Wed, 08 Feb 2012 20:14:00 +0000</pubDate><atom:updated>2012-02-08T21:14:14.492+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>quote</category><category domain='http://www.blogger.com/atom/ns#'>pinterest</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Pinterest: Det nya svart</title><description>Snygg lösning, imponerande tillväxt, förvisso en jäkla massa pengar i botten, men ändå. Dock är innehållet och stämningen hyfsat kissnödig, som Alexander Bard skulle uttryckt det. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://techcrunch.com/2012/02/07/pinterest-monthly-uniques/" target="_blank"&gt;Pinterest Hits 10 Million Monthly Uniques Faster Than Any Standalone Site Ever&lt;/a&gt; [techcrunch.com]&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://mashable.com/2012/02/07/pinterest-web-design/" target="_blank"&gt;How Pinterest Is Changing Website Design Forever&lt;/a&gt; [mashable.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Precis som med många startups verkar intäktsmodellen inte riktigt vara färdigtänkt; den här typen av lösningar känns ju inte direkt rumsrena exempelvis:&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://llsocial.com/2012/02/pinterest-modifying-user-submitted-pins/" target="_blank"&gt;Pinterest is quietly generating revenue by modifying user submitted pins&lt;/a&gt; [llsocial.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] &lt;a href="http://www.metro.se/noje/bwo-dissar-hultsfred/Objfds%2108_1416-22/"&gt;http://www.metro.se/noje/bwo-dissar-hultsfred/Objfds!08_1416-22/&lt;/a&gt; - BWO dissar Hultsfred&lt;br /&gt;
&lt;br /&gt;
– Vi har inte där att göra. Där spelar Concretes och alla andra kissnödiga band. Vi vill inte bli associerade med det, säger Alexander Bard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-8941605206838431607?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/02/pinterest-det-nya-svart.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-2048801637205003627</guid><pubDate>Tue, 07 Feb 2012 21:55:00 +0000</pubDate><atom:updated>2012-02-07T22:55:05.477+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>osx</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Förklaringen till varför musen laggar i OS X</title><description>Många som kommer från Windows tycker att muspekaren släpar efter på Mac. Tyckte själv det när jag återgick till Mac efter många år på Windows och Linux. Fast som många andra har jag i stort sett vant mig, även om jag inte gärna game:ar i OS X.&lt;br /&gt;
&lt;br /&gt;
Tydligen är det ett släp på 32 ms som spökar, någonstans djupt ned i Quartz Extreme. Jakten har nu börjat på att hitta felet; och förhoppningsvis lösa det, eftersom Apple inte verkar särskilt benägna att göra något själva. &lt;br /&gt;
&lt;br /&gt;
Läs mer: &lt;a href="http://d43.me/blog/1205/the-cause-for-all-your-mac-os-x-mouse-annoyances/"&gt;http://d43.me/blog/1205/the-cause-for-all-your-mac-os-x-mouse-annoyances/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-2048801637205003627?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/02/forklaringen-till-varfor-musen-laggar-i.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-4145221753326882231</guid><pubDate>Sun, 05 Feb 2012 21:09:00 +0000</pubDate><atom:updated>2012-02-05T22:09:01.999+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>git</category><category domain='http://www.blogger.com/atom/ns#'>facebook</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Facebook: Git performance results on a large repository</title><description>Intressant tråd om hur git presterar vid mycket stora repon.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://thread.gmane.org/gmane.comp.version-control.git/189776"&gt;Läs hela här&lt;/a&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
From: Joshua Redstone&lt;br /&gt;
Subject: Git performance results on a large repository&lt;br /&gt;
Newsgroups: gmane.comp.version-control.git&lt;br /&gt;
Date: 2012-02-03 14:20:06 GMT  (2 days, 6 hours and 43 minutes ago)&lt;br /&gt;
&lt;br /&gt;
Hi Git folks,&lt;br /&gt;
&lt;br /&gt;
We (Facebook) have been investigating source control systems to meet our growing needs.  We already use git fairly widely, but have noticed it getting slower as we grow, and we want to make sure we have a good story going forward.  We're debating how to proceed and would like to solicit people's thoughts.&lt;br /&gt;
&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
Thoughts?&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Josh&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-4145221753326882231?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/02/facebook-git-performance-results-on.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-1918704780925778168</guid><pubDate>Thu, 19 Jan 2012 16:53:00 +0000</pubDate><atom:updated>2012-01-19T17:53:14.480+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>random</category><title>Intressant från Fog Creek; varför har säljare provision?</title><description>&lt;blockquote class="tr_bq"&gt;
Among our many cherished verities and assumed assumptions is the widespread belief—nearly universal practice actually—that salespeople are to be paid commissions. It’s the way things are done. Stop signs are red. Salespeople get commissions.&lt;br /&gt;
&lt;br /&gt;
But why?&amp;nbsp; &lt;/blockquote&gt;
&lt;br /&gt;
Intressant om provision från Fog Creek (skaparna av &lt;a href="http://stackoverflow.com/" target="_blank"&gt;StackExchange&lt;/a&gt;), som själva lagt av med det:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blog.fogcreek.com/why-do-we-pay-sales-commissions/"&gt;Why do we pay sales commissions?&lt;/a&gt; [Fog Creek Blog]&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
As John, one of our salespeople said, “It’s made the team better. It’s removed the ‘me, me, me’ mentality. Now I want to share information with everyone on the team, and everyone is willing to pitch in because it doesn’t hurt me to help my colleagues.”&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-1918704780925778168?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/intressant-fran-fog-creek-varfor-har.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-4747354124958738219</guid><pubDate>Wed, 18 Jan 2012 09:36:00 +0000</pubDate><atom:updated>2012-01-18T10:44:14.315+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>sopa</category><category domain='http://www.blogger.com/atom/ns#'>pipa</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Google, Wikipedia, Reddit, Craigslist, Flickr stänger i protest mot SOPA/PIPA</title><description>&lt;a href="http://i.imgur.com/bXtID.png" imageanchor="1"&gt;&lt;img border="0" height="400" src="http://i.imgur.com/bXtID.png" width="395" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Såhär ser Google ut idag i USA.&lt;br /&gt;
&lt;br /&gt;
Idag stänger flera stora sajter för att protestera mot lagförslagen PIPA och SOPA (i den amerikanska senaten respektive representanthuset): &lt;a href="http://americancensorship.org/infographic.html"&gt;http://americancensorship.org/infographic.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;"YouTube would just go dark immediately," Google public policy director Bob Boorstin said at a conference last month. "It couldn't function."&lt;/blockquote&gt;&lt;br /&gt;
Bland de som stänger:&lt;br /&gt;
Wikipedia (&lt;a href="http://en.wikipedia.org/wiki/Main_Page"&gt;http://en.wikipedia.org/wiki/Main_Page&lt;/a&gt;)&lt;br /&gt;
Reddit (&lt;a href="http://www.reddit.com/"&gt;http://www.reddit.com/&lt;/a&gt;)&lt;br /&gt;
Craigslist (&lt;a href="http://philadelphia.craigslist.org/"&gt;http://philadelphia.craigslist.org/&lt;/a&gt;)&lt;br /&gt;
Wordpress (&lt;a href="http://wordpress.com/"&gt;http://wordpress.com/&lt;/a&gt;)&lt;br /&gt;
Free Software Foundation (&lt;a href="http://www.gnu.org/"&gt;http://www.gnu.org/&lt;/a&gt;)&lt;br /&gt;
Mozilla (&lt;a href="http://www.mozilla.org/"&gt;http://www.mozilla.org/&lt;/a&gt;)&lt;br /&gt;
Flickr (&lt;a href="http://www.flickr.com/"&gt;http://www.flickr.com/&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-4747354124958738219?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/google-wikipedia-reddit-craigslist.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-7052762174039872142</guid><pubDate>Mon, 16 Jan 2012 19:45:00 +0000</pubDate><atom:updated>2012-01-16T20:45:42.849+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>symfony</category><category domain='http://www.blogger.com/atom/ns#'>jquery</category><category domain='http://www.blogger.com/atom/ns#'>facebook</category><category domain='http://www.blogger.com/atom/ns#'>reblog</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><category domain='http://www.blogger.com/atom/ns#'>jquery mobile</category><title>Reblog #1: Facebook Social Plugins, The Aura Project, Shim, 3D i WebKit, JQ.Mobi</title><description>&lt;b&gt;Facebook uppdaterar sina social plugins,&lt;/b&gt; inget superintressant där: &lt;a href="http://klinger.io/post/15672435659/the-unannounced-updates-to-facebooks-social-plugins"&gt;http://klinger.io/post/15672435659/the-unannounced-updates-to-facebooks-social-plugins&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Aura Project siktar in sig på PHP 5.4&lt;/b&gt; istället för 5.3; utmanare till Symfony2 möjligen: &lt;a href="http://paul-m-jones.com/archives/2219"&gt;http://paul-m-jones.com/archives/2219&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Boston Globe släpper testverktyget Shim på Github&lt;/b&gt;, Javascript/Wifi-hack som gör så att flera enheter delar cookies och surfar till samma URL:er på samma gång. Givet om man ska testa responsive design: &lt;a href="https://github.com/marstall/shim/"&gt;https://github.com/marstall/shim/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Making Love To WebKit, 3D i Safari med endast CSS.&lt;/b&gt; Firefox och Chrome verkar på g. Synd bara att vi måste vänta ut IE6, IE7, IE8 och IE9 innan det kan bli aktuellt att använda i större sammanhang: &lt;a href="http://acko.net/blog/making-love-to-webkit/"&gt;http://acko.net/blog/making-love-to-webkit/&lt;/a&gt; (kolla sidan i Safari för bästa effekt, hint: scrolla upp)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;JQ.Mobi; ett vettigt alternativ till jQuery Mobile?&lt;/b&gt; Snart kanske:&lt;a href="http://www.readwriteweb.com/mobile/2012/01/jqmobi-is-a-mobile-optimized-h.php"&gt; http://www.readwriteweb.com/mobile/2012/01/jqmobi-is-a-mobile-optimized-h.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-7052762174039872142?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/reblog-1-aura-project-shim-3d-i-webkit.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-7607191992154924179</guid><pubDate>Sat, 14 Jan 2012 23:37:00 +0000</pubDate><atom:updated>2012-01-15T00:37:03.814+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>dauta</category><category domain='http://www.blogger.com/atom/ns#'>google</category><title>Google: Don't be evil?</title><description>&lt;i&gt;Mocality secretly recorded Google employees offering to build a website 
for the businesses and, in one case, falsely claiming that Mocality 
would charge to list its business.&lt;/i&gt; (&lt;a href="http://www.guardian.co.uk/technology/2012/jan/13/google-kenyan-rival-mocality-database" target="_blank"&gt;The Guardian&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;Mocalitys blogginlägg: &lt;a href="http://blog.mocality.co.ke/2012/01/13/google-what-were-you-thinking/"&gt;http://blog.mocality.co.ke/2012/01/13/google-what-were-you-thinking/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Google ber om ursäkt: &lt;a href="http://www.guardian.co.uk/technology/2012/jan/13/google-kenyan-rival-mocality-database"&gt;http://www.guardian.co.uk/technology/2012/jan/13/google-kenyan-rival-mocality-database&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sammanfattning, från Guardian-artikeln:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
According to Magdalinski, suspicions were raised after Mocality started receiving calls from businesses on its directory asking how they shoud go about setting up a website – which Mocality has never offered.&lt;br /&gt;&lt;br /&gt;Mocality then set up what it described as a "sting" operation, changing some of the telephone numbers on its business directory to the contact details of its own call centre.&lt;br /&gt;&lt;br /&gt;"When we listened to the calls, we were beyond astonished," said Magdalinski.&lt;br /&gt;&lt;br /&gt;Mocality secretly recorded Google employees offering to build a website for the businesses and, in one case, falsely claiming that Mocality would charge to list its business.&lt;br /&gt;&lt;br /&gt;"Since October, Google appears to have been systematically accessing Mocality's database and attempting to sell their competing product to our business owners," Magdalinski wrote in the blogpost. "They have been telling untruths about their relationship with us, and about our business practices, in order to do so.&lt;br /&gt;&lt;br /&gt;"I did not expect to find a human-powered, systematic, months-long, fraudulent (falsely claiming to be collaborating with us, and worse) attempt to undermine our business, being perpetrated from call centres on two continents."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-7607191992154924179?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/google-dont-be-evil.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-7926482221358519318</guid><pubDate>Fri, 13 Jan 2012 18:24:00 +0000</pubDate><atom:updated>2012-01-13T19:24:59.094+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>symfony</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><title>Symfony 2: Inte bara ett framework</title><description>Blir mer och mer imponerad av &lt;a href="http://www.symfony.com/" target="_blank"&gt;Symfony 2&lt;/a&gt;, speciellt efter Fabien Potenciers (hittills) sex delar långa guide om hur man använder Symfony 2:s komponenter till att bygga sitt egna framework.&lt;br /&gt;
&lt;br /&gt;
Välj och vraka mellan byggstenarna helt enkelt; och samtidigt en inblick i tankarna bakom uppbyggnaden av Symfony 2 Standard.&lt;br /&gt;
&lt;br /&gt;
Här är del 1: &lt;a href="http://fabien.potencier.org/article/50/create-your-own-framework-on-top-of-the-symfony2-components-part-1" target="_blank"&gt;Create your own framework... on top of the Symfony2 Components&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-7926482221358519318?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/symfony-2-inte-bara-ett-framework.html</link><author>noreply@blogger.com (solanum)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-9030671397363354374</guid><pubDate>Wed, 11 Jan 2012 19:17:00 +0000</pubDate><atom:updated>2012-01-11T20:17:42.470+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>random</category><category domain='http://www.blogger.com/atom/ns#'>idonethis</category><title>iDoneThis: Få saker gjort genom att se vad andra får gjort</title><description>I mängden av nyårslöftesrelaterade startups hittade jag &lt;a href="https://idonethis.com/habits/" target="_blank"&gt;iDoneThis&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Du signar up med din e-post och beskriver det du vill få gjort, och om du vill få det gjort varje dag eller varje vecka.&lt;br /&gt;
&lt;br /&gt;
Efter ett par dagar har du blivit tilldelad en slumpmässigt utvald grupp, kring 20 personer. Du får då ett mail som beskriver vad varje deltagare i just din grupp har gjort under gårdagen, samt en uppmaning att svara på mailet och beskriva vad du har gjort idag. &lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
We probably didn’t need scientists to actually come up with a figure (80% failure rate!) to know that New Year’s resolutions don’t stick. &lt;br /&gt;
&lt;br /&gt;
Instead, build a habit! You can start with  baby steps, like drinking water instead of soda, attaining small  successes and rewards that will build up until voila, habit!&lt;br /&gt;
&lt;br /&gt;
The ever-helpful Zen Habits has great tips on building habits: &lt;span class="bold"&gt;make it enjoyable, commit to one habit at a time, and harness the power of a social network.&lt;br /&gt;
&lt;br /&gt;
Tell us your New Year’s Habit and we’ll match you up in teams of people  building similar habits.  We'll keep you on track with a nightly email  reminder.  Just reply with what you did.  The next morning, you’ll get  an email with your team's progress, and you’ll be on your way to long term-change slowly but surely.&lt;br /&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Utdrag ur dagens iDoneThis-mail för min grupp:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Wrote for 20 minutes on my pilot.&lt;/li&gt;
&lt;li&gt;Reworked horror novel opening.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;still working on the same lyric. feels a little like waiting at a bus stop for the express to come by. no timetable in sight, but i'm here until it arrives.&lt;/li&gt;
&lt;li&gt;Finished a draft! We'll see how it reads in the morning.&lt;/li&gt;
&lt;li&gt;No writing, but caught up on some overdue emails.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-9030671397363354374?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/idonethis-fa-saker-gjort-genom-att-se.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-2826082390852575974</guid><pubDate>Tue, 10 Jan 2012 19:11:00 +0000</pubDate><atom:updated>2012-01-11T13:25:26.807+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>foods</category><title>Sushi till middag</title><description>&lt;a href="http://www.flickr.com/photos/solanum/6674497651/" title="Sushi till middag"&gt;&lt;img alt="Sushi till middag" height="266" src="http://farm8.staticflickr.com/7002/6674497651_7bd4f8ff23.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Gött.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-2826082390852575974?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/sushi-till-middag.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-7023539326218137658</guid><pubDate>Mon, 09 Jan 2012 21:03:00 +0000</pubDate><atom:updated>2012-01-09T22:03:28.804+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>jquery</category><category domain='http://www.blogger.com/atom/ns#'>dauta</category><category domain='http://www.blogger.com/atom/ns#'>jquery mobile</category><title>jQuery Mobile: Diverse problem</title><description>jQM tar för mycket kraft att ladda om vid varje sidladdning; speciellt i mobila enheter. Det självklara valet blir då att bara ladda jQuery och jQM en gång; och sedan ladda påföljande sidor med hjälp av AJAX (detta är dessutom ganska djupt inbyggt i jQM:s navigeringslogik).&lt;br /&gt;
&lt;br /&gt;
Då stöter vi på ett antal problem.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;404: File not found&lt;/b&gt;&lt;br /&gt;
Om man stöter på en sida som returnerar en felkod som jQuery:s AJAX-anrop tolkar som ett "error"; exempelvis 404, så visas inte svarssidan alls. Istället får man ett felmeddelande från jQM:s navigeringssystem, och lämnas kvar på sidan man befann sig på tidigare. Detta är dessutom klurigt att ändra utan att göra ganska stora förändringar i jQM-koden, som då blir ett helvete att underhålla när det ska uppgraderas.&lt;br /&gt;
 &lt;br /&gt;Enklaste "lösningen" är att helt enkelt inte skicka "rätt" HTTP-felkoder från backend, utan att alltid skicka &lt;i&gt;200 OK&lt;/i&gt; när innehållet faktiskt ska visas. Detta är inte något större problem om det inte handlar om en sida som Google ska indexera; där felkoderna faktiskt fyller en funktion.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sidspecifik JS/CSS&lt;/b&gt;&lt;br /&gt;
I den lösning jag jobbar i nu så byggs ett block med JS och ett block med CSS för varje kombination av templates. Så vid första sidladdningen laddas alltid bara den JS och den CSS som behövs för den sidan; inte mer. När man då byter sida med hjälp av AJAX så kommer jQM inte att plocka ut CSS/JS från HEAD-delen av svaret, utan bara plocka ut själva DIV:en med sidans innehåll.&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
Detta bör gå att lösa genom att lyssna på lämpligt jQM-event; parsa HEAD-delen av svaret själv, och kopiera in nyupptäckt CSS/JS i sidans riktiga HEAD-del innan den nya sidan visas ut.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Annonser&lt;/b&gt;&lt;br /&gt;
Vår gamle vän &lt;i&gt;document.write&lt;b&gt; &lt;/b&gt;&lt;/i&gt;dyker som vanligt upp i AJAX-sammanhang. Annonskoder håller i regel stenåldersnivå; det krävs document.write i minst två led för att fungera, och dessutom kräver eventuella tredjeparts-taggar ännu ett eller två led för att få ut något.&lt;br /&gt;
&lt;br /&gt;
På desktop-sidan har vi löst detta med en modifierad variant av &lt;a href="https://github.com/xfsn/LazyWrite" target="_blank"&gt;LazyWrite&lt;/a&gt; som fungerar relativt bra i nyare webbläsare. I övriga låter vi helt enkelt document.write göra sitt; vilket ju är ett alternativ när man inte laddar om hela sidan med AJAX.&lt;br /&gt;
&lt;br /&gt;
Återstår att se om LazyWrite är lösningen även på mobilsidan. Preliminära tester visar att det åtminstone inte fungerar rakt av. Gissningsvis har det att göra med hur jQM hanterar SCRIPT-blocken i de AJAX-hämtade sidorna, och förhoppningsvis går det att göra något åt genom att lyssna på något event.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Återkommer förhoppningsvis med lösningar, och en separat post om den där CSS/JS-implementationen.&lt;b&gt; &lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-7023539326218137658?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/jquery-mobile-diverse-problem.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-9218765807007047942</guid><pubDate>Sat, 07 Jan 2012 22:06:00 +0000</pubDate><atom:updated>2012-01-07T23:06:44.000+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>reddit</category><title>A worthy adversary for President Obama</title><description>&lt;img alt="http://i.imgur.com/qr0CV.jpg" height="298" src="http://i.imgur.com/qr0CV.jpg" width="400" /&gt;&lt;br /&gt;
&lt;br /&gt;
(Hurr durr: &lt;a href="http://www.reddit.com/r/funny/comments/o6t1g/a_worthy_adversary_for_president_obama/" target="_blank"&gt;Reddit&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-9218765807007047942?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/worthy-adversary-for-president-obama.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-2582004278075878016</guid><pubDate>Fri, 06 Jan 2012 12:05:00 +0000</pubDate><atom:updated>2012-01-06T14:14:58.409+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>reddit</category><title>Do you fear getting trapped in a dull conversation?</title><description>&lt;img alt="http://i.imgur.com/ytuLk.jpg" height="296" src="http://i.imgur.com/ytuLk.jpg" width="400" /&gt;&lt;br /&gt;
&lt;br /&gt;
(Hurr durr: &lt;a href="http://www.reddit.com/r/funny/comments/o459h/do_you_fear_getting_trapped_in_a_dull_conversation/" target="_blank"&gt;Reddit&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-2582004278075878016?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/do-you-fear-getting-trapped-in-dull.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-2392372125454637746</guid><pubDate>Thu, 05 Jan 2012 08:00:00 +0000</pubDate><atom:updated>2012-01-05T09:00:12.266+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>random</category><title>Nyårslöftesrelaterad idé</title><description>Starta en sida där man registrerar sig och ger ut antingen kreditkortsnummer, eller sätter in en summa pengar, mot att man uppfyller sitt löfte (exempelvis träna 2 ggr/vecka).&lt;br /&gt;
&lt;br /&gt;
Uppfyller man det inte (behöver inte direkt kontrolleras, utan kan vara samvetsstyrt), så dras det en mindre summa från ens konto. Alternativt om man satt in pengar; uppfyller man löftet för den veckan/månaden, så får man en del av pengarna tillbaka.&lt;br /&gt;
&lt;br /&gt;
Om man inte vill blanda in pengar: Koppla till Facebook, avge ett löfte; om du inte följer löftet så postar den till alla dina vänner om hur dålig du är. Ifall du sagt att du följt löftet för den veckan, så postar den tid/datum då du påstod att du gymmade, och ber dina Facebook-vänner kommentera ifall du faktiskt gjorde det eller inte.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-2392372125454637746?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/nyarsloftesrelaterad-ide.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-7128811102263433296</guid><pubDate>Wed, 04 Jan 2012 19:34:00 +0000</pubDate><atom:updated>2012-01-04T21:24:52.949+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>fotboll</category><category domain='http://www.blogger.com/atom/ns#'>fantasy premier league</category><title>Fantasy Premier League - Gameweek 20</title><description>För tätt mellan gameweeks på sistone, glömt av transfers två gånger senaste fyra omgångarna.&lt;br /&gt;
&lt;br /&gt;
Denna vecka spelar Spurs två matcher, men jag glömde såklart att sätta Bale som kapten.&lt;br /&gt;
&lt;br /&gt;
Och givetvis spelar inte Larsson, och istället tar Sessegnon 10 poäng; som jag köpt först till nästa vecka.&lt;br /&gt;
&lt;br /&gt;
Hittills står det 29 - 48 i veckans cup-match; med Ba, Rooney, Nani och Bales andramatch kvar att spela. Min motståndare har dessutom både Van der Vaart och Bale, med Van der Vaart som lagkapten. Allt hänger alltså på att MUN-NEW blir väldigt målrik. Och att VdV bryter båda benen under uppvärmningen.&lt;br /&gt;
&lt;br /&gt;
Nästa vecka har jag nog bättre förutsättningar; Sessegnon inköpt (för andra gången), och lite fräschare bänk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-7128811102263433296?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/fantasy-premier-league-gameweek-20.html</link><author>noreply@blogger.com (solanum)</author><thr:total>1</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-3922060193109913403</guid><pubDate>Mon, 02 Jan 2012 20:42:00 +0000</pubDate><atom:updated>2012-01-13T19:24:11.288+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>dauta</category><category domain='http://www.blogger.com/atom/ns#'>varnish</category><title>Varnish är min vän (och libvmod-header)</title><description>Efter många timmars testande och googlande har jag byggt en lösning som jag är hyfsat nöjd med.&lt;br /&gt;
&lt;br /&gt;
Några saker jag lärt mig:&lt;br /&gt;
- Varnish har inte så bra stöd för ETags som jag trodde&lt;br /&gt;
- Varnish är sjukt snabbt&lt;br /&gt;
- Ingen gillar Set-Cookie-headern; och browsers gillar speciellt inte när man merge:ar flera Set-Cookie-headers till en (även om det ska vara lugnt enligt RFC:n)&lt;br /&gt;
&lt;br /&gt;
Då till problemet; jag ville ha flera parallella versioner av en resurs, som utåt sett skulle ha samma URL. För att veta vilken av dessa som ska hämtas behöver man minst ett anrop till backend.&lt;br /&gt;
&lt;br /&gt;
Utöver detta vill jag helst kunna få cookies från backend vid varje sidvisning; om det absolut inte går vill jag strippa Set-Cookie-rader helt från cachade svar. Detta skulle dock resultera i att en massa oanvända sessioner startas, men skulle nog gå att komma förbi på något sätt.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ETags galore?&lt;/b&gt;&lt;br /&gt;
Först försökte jag olika lösningar med ETags, Vary: ETag, 304-svar från backend, osv. Lyckades dock inte få det att funka, då Varnish inte skickar If-None-Match om inte klienten skickat det, och då blir det ingen gemensam cache; och alltså ganska värdelöst.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;302 Found&lt;/b&gt;&lt;br /&gt;
Så, vi skippar ETags helt; vi behöver en unik URL för varje version av resursen. Kan vi då dölja denna URL för besökaren? Vi bakar helt enkelt in ETag:en i URL:en istället.&lt;br /&gt;
&lt;br /&gt;
- Varnish frågar backend efter resursen med URL "/forum"&lt;br /&gt;
- Backend svarar med en 302-redirect till "/forum?etag=foo"&lt;br /&gt;
&lt;br /&gt;
Här kommer det vackra, i &lt;i&gt;vcl_fetch&lt;/i&gt;;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
if(beresp.status == 302) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set req.url = beresp.http.location;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (restart);&lt;br /&gt;
}&lt;/blockquote&gt;
Redirecten hanteras nu alltså internt av Varnish, klienten har ännu inte fått något tillbaka.&lt;br /&gt;
&lt;br /&gt;
- Backend svarar på "/forum?etag=foo" med en helt vanlig sida, med lämpliga cache-headers&lt;br /&gt;
- Varnish cachar sidan med ETag:en i URL:en, och skickar den till klienten&lt;br /&gt;
- Nästa gång någon hämtar samma resurs och den fortfarande är kvar i cachen med samma ETag så kommer den bara träffa backend en gång (då den får 302-svaret)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cookies då?&lt;/b&gt;&lt;br /&gt;
Vi gör ju faktiskt redan en helt vanlig request mot backend som har klientens cookies med sig. Vi sparar helt enkelt Set-Cookie-raderna vi får tillbaka, i den nya requestens header X-COOKIES i &lt;i&gt;vcl_fetch&lt;/i&gt;:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
if(beresp.status == 302) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set req.url = beresp.http.location;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; header.copy(beresp.http.Set-Cookie, req.http.X-COOKIES);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (restart);&lt;br /&gt;
}&lt;/blockquote&gt;
Sedan i &lt;i&gt;vcl_deliver&lt;/i&gt; så plockar vi ut dessa och lägger i Set-Cookie på vårt svar:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
unset resp.http.Set-Cookie;&lt;br /&gt;
header.copy(req.http.X-COOKIES, resp.http.Set-Cookie);&lt;/blockquote&gt;
Detta vore inte möjligt utan &lt;b&gt;&lt;a href="https://github.com/KristianLyng/libvmod-header" target="_blank"&gt;libvmod-header&lt;/a&gt;&lt;/b&gt;, som tillhandahåller header.copy-funktionen. Om man hade använt Varnish inbyggda funktioner för att sätta Set-Cookie så hade man nämligen bara fått med den första Set-Cookie-raden om det varit flera.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-3922060193109913403?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/varnish-ar-min-van-och-libvmod-header.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-31370673.post-3794067697247373810</guid><pubDate>Sun, 01 Jan 2012 22:44:00 +0000</pubDate><atom:updated>2012-01-02T01:02:46.435+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>dauta</category><category domain='http://www.blogger.com/atom/ns#'>varnish</category><title>Varnish, Etags, och Cache Invalidation</title><description>Försöker hitta en optimal lösning för Varnish med hjälp av Etags. I princip tror jag att jag är ute efter att flera Etags kan vara giltiga samtidigt för en viss resurs.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;b&gt;Scenariot&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
- Tre olika klienter med tom cache gör varsin request, klient #2 är inloggad, #1 och #3 är inte inloggade.&lt;br /&gt;
- Varnish cache är tom innan första requesten görs&lt;br /&gt;
- Alla klienter hämtar samma sida, låt säga "/forum", inga edge side includes eller liknande.&lt;br /&gt;
- Back-end returnerar endast Etag och eventuellt 304-svar om klienten inte är inloggad. Annars returneras ett helt vanligt svar med privata cache-headers etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Om requesterna görs i ordningen 1-2-3&lt;/b&gt;&lt;br /&gt;
#1: Får fräsch sida, sparas i Varnish cache&lt;br /&gt;
#2: Får fräsch sida, &lt;i&gt;Varnish cache rensas för objektet&lt;/i&gt;&lt;br /&gt;
#3: Får fräsch sida, sparas i Varnish cache&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Om de görs i ordningen 1-3-2&lt;/b&gt;&lt;br /&gt;
#1: Får fräsch sida, sparas i Varnish cache&lt;br /&gt;
#3: Får cachad sida&lt;br /&gt;
#2: Får fräsch sida, &lt;i&gt;Varnish cache rensas för objektet&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Möjlig lösning&lt;/b&gt;&lt;br /&gt;Konfigurera Varnish så att den inte gör något alls (specifikt; så den inte invaliderar cachen) om ingen Etag kommer från backend, utan bara skickar vidare requesten till klienten. Går säkert att konfa så, verkar ganska flexibelt.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nästa problem: Flera valida Etags&lt;/b&gt;&lt;br /&gt;
Om vi har flera varianter av en sida, för olika typer av oinloggade besökare. Exempelvis vill vi cacha sidan olika för om webbläsaren stödjer lazyload av våra annonser eller inte. Då har vi plötsligt två eller fler konkurrerande Etags för samma resurs, som kommer invalidera varandra.&lt;br /&gt;
&lt;br /&gt;
Detta borde dock Varnish kunna hantera; den skulle ju kunna skicka flera Etags med en "If-None-Match"-header till backend. Frågan är hur den ska veta vilken som ska invalideras när den får tillbaka en 200 istället för 304?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31370673-3794067697247373810?l=blog.blarg.se' alt='' /&gt;&lt;/div&gt;</description><link>http://blog.blarg.se/2012/01/varnish-etags-och-cache-invalidation.html</link><author>noreply@blogger.com (solanum)</author><thr:total>0</thr:total></item></channel></rss>
