<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Improove &#187; Open Source</title>
	<atom:link href="http://www.improove.se/category/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.improove.se</link>
	<description>Per-Mattias Nordkvist</description>
	<lastBuildDate>Mon, 06 Feb 2012 12:44:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Skapa tunnelbanenät med ett jQuery-plugin</title>
		<link>http://www.improove.se/2011/12/18/skapa-tunnelbanenat-med-ett-jquery-plugin/</link>
		<comments>http://www.improove.se/2011/12/18/skapa-tunnelbanenat-med-ett-jquery-plugin/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 16:46:57 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Övrigt]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=2434</guid>
		<description><![CDATA[Det här är ett ganska gammal plugin till jQuery som jag hittade i helgen av en slump som jag börjat leka med. Efter att ha tittat lite mer på hur det fungerar måste jag säga att jag är imponerad över hur välbyggt det faktiskt är. Det är ett mycket rikt funktionsutbud som gör att det [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-medium wp-image-2435" title="Subway Map" src="http://www.improove.se/wp-content/uploads/2011/12/Screen-Shot-2011-12-18-at-5.41.25-PM-620x330.png" alt="" width="620" height="330" /></p>
<p>Det här är ett ganska gammal plugin till jQuery som jag hittade i helgen av en slump som jag börjat leka med. Efter att ha tittat lite mer på hur det fungerar måste jag säga att jag är imponerad över hur välbyggt det faktiskt är. Det är ett mycket rikt funktionsutbud som gör att det här pluginet kan användas för att illustrera flera olika linjekartor. Inte bara tunnelbanetrafik. Här finns <a href="http://blog.visualmotive.com/2009/ten-examples-of-the-subway-map-metaphor/">flera exempel</a> på hur man listar inte bara tunnelbanor utan även trender, teknikleverantörer och böcker.</p>
<p>Jag gjorde ett litet test över en begränsad karta av kollektivtrafiken i Hammarby Sjöstad. Lite stökigt att få till alla böjningar av linjer men jag tror att jag fill till det någotsånär.</p>
<p><a href="http://www.kalyani.com/2010/10/subway-map-visualization-jquery-plugin/">http://www.kalyani.com/2010/10/subway-map-visualization-jquery-plugin/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2011/12/18/skapa-tunnelbanenat-med-ett-jquery-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dela länkar från Tumblr till WordPress med TumblrItems2WP</title>
		<link>http://www.improove.se/2011/11/10/dela-lankar-fran-tumblr-till-wordpress-med-tumblritems2wp/</link>
		<comments>http://www.improove.se/2011/11/10/dela-lankar-fran-tumblr-till-wordpress-med-tumblritems2wp/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 16:13:08 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Feedly]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=2340</guid>
		<description><![CDATA[Jag har varit lite nedstämd ända sedan Google gjorde om Google Reader och framför allt tog bort funktionen &#8221;Shared items&#8221;. En funktion som är mycket saknad då flera av oss har använt pluginet SharedItems2WP för att automatiskt posta blogginlägg med rekommenderade länkar. Se här t.ex. Anledningen till att Google gjort detta är enkel. Man vill [...]]]></description>
			<content:encoded><![CDATA[<p>Jag har varit lite nedstämd ända sedan Google gjorde om <a href="http://www.google.com/reader">Google Reader</a> och framför allt tog bort funktionen &#8221;Shared items&#8221;. En funktion som är mycket saknad då flera av oss har använt pluginet <a href="http://wordpress.org/extend/plugins/shareditems2wp/">SharedItems2WP</a> för att automatiskt posta blogginlägg med rekommenderade länkar. <a href="http://www.improove.se/2011/11/06/rekommenderad-lasning-november-6-2011/">Se här t.ex</a>. Anledningen till att Google gjort detta är enkel. Man vill migrera alla sociala funktioner som idag används slutet inom tjänster så som Google Reader till att istället omfamna Google+. Tanken är alltså att man skall &#8221;plussa&#8221; länkar man gillar så att de syns i Google Plus-flödet. Jag har dock synpunkter på hur detta görs och hade hellre sett att man haft kvar funktionen &#8221;Shared items&#8221; så att man kan dela en länk med en kommentar ut till Google Plus och att dessa delningar går att nå via en RSS. Det hade varit en mycket bättre lösning.</p>
<div>Ladda ned senaste versionen</div>
<div><a href="http://www.improove.se/extra/tumblritems2wp_1.03.zip">www.improove.se/extra/tumblritems2wp_1.03.zip</a></div>
<p>För att ändå kunna fortsätta dela länkar från en RSS-läsare till WordPress har jag löst det på följande sätt:</p>
<ul>
<li>Läs rss-flöden via <a href="http://www.feedly.com">Feedly.com</a> istället</li>
<li>Dela blogginlägg med kommentarer via Tumblr</li>
<li>Komplettera delning genom att använda Tubmlr&#8217;s booklet som gör att man kan dela vilken länk som helst med en kommentar via bokmärksraden i webbläsaren</li>
<li>Använd min egen modifikation av SharedItems2WP så att den istället blir TumblrItems2WP. Ange RSS till dina inlägg som input-data i modulen. Exempel: <a href="http://pmnordkvist.tumblr.com/rss">http://pmnordkvist.tumblr.com/rss</a></li>
</ul>
<div>Delning av länk via feedly.</div>
<div><img class="alignnone size-full wp-image-2342" title="Screen Shot 2011-11-10 at 5.08.49 PM" src="http://www.improove.se/wp-content/uploads/2011/11/Screen-Shot-2011-11-10-at-5.08.49-PM.png" alt="" width="680" height="445" /></div>
<div>Delning av länk via booklet.</div>
<div><img class="alignnone size-full wp-image-2341" title="Tumblr Booklet" src="http://www.improove.se/wp-content/uploads/2011/11/Screen-Shot-2011-11-10-at-5.06.09-PM.png" alt="" width="489" height="522" /></div>
<div>Jag använder ett specifikt Tumblr-konto som används enbart för att dela länkar. För att få en mer finmaskig delning kan man välja att koppla en feed med specifika taggar istället. Det bygger dock på att man taggar alla länkar man lägger in via booklet&#8217;em där man på avancerad delning. Se skärmdump nedan.  Nästan lika smidigt, nästan lika bra men det finns en trist känsla av att här bara är &#8221;second best&#8221;.</div>
<div>Vill du dela länkar via Tubmlr och Feedly kan du med fördel ladda ner vår plugin för detta ändamål nedan. Se kommentarer i bifogad readme-fil.</div>
<div><img class="alignnone size-full wp-image-2343" title="Screen Shot 2011-11-10 at 5.06.23 PM" src="http://www.improove.se/wp-content/uploads/2011/11/Screen-Shot-2011-11-10-at-5.06.23-PM.png" alt="" width="479" height="513" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2011/11/10/dela-lankar-fran-tumblr-till-wordpress-med-tumblritems2wp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Så byggde vi en automatisk Twitter-skrivare</title>
		<link>http://www.improove.se/2011/04/10/sa-byggde-vi-en-automatisk-twitter-skrivare/</link>
		<comments>http://www.improove.se/2011/04/10/sa-byggde-vi-en-automatisk-twitter-skrivare/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 19:25:10 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Nyheter]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Övrigt]]></category>
		<category><![CDATA[epson]]></category>
		<category><![CDATA[skrivare]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitterskrivare]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1915</guid>
		<description><![CDATA[I snart ett år har jag haft en idé om att bygga en automatisk Twitterskrivare baserat på en standardiserad kvittoskrivare för kassasystem. Att så fort jag får ny info på mitt twitterkonto så skrivs det ut ett kvitto med informationen i meddelandet. Jag har som haft en hookup på detta och gillar på något sätt [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/22170343" width="651" height="366" frameborder="0"></iframe></p>
<p>I snart ett år har jag haft en idé om att bygga en automatisk Twitterskrivare baserat på en standardiserad kvittoskrivare för kassasystem. Att så fort jag får ny info på mitt twitterkonto så skrivs det ut ett kvitto med informationen i meddelandet. Jag har som haft en hookup på detta och gillar på något sätt enkelheten i det. En skrivare som bara finns till för att skriva ut tweets. Lika enkelt som Twitter självt på något sätt.</p>
<p>Vad jag gillar med just en kvittoskrivare: </p>
<ul>
<li>Skriver ut snabbt</li>
<li>Har automatskärare. Klipper av när den är klar</li>
<li>Har bra API&#8217;er för integration</li>
<li>Kan köras standalone över ethernet utan bökig USB-koppling</li>
</ul>
<p>Att börja leta rätt skrivare var inte det enklaste. Det finns en myriad av dem men jag fastnade tidigt för <a href="http://pos.epson.com/posindex">Epsons produktutbud</a>. Dels har man många bra skrivare men man har också en inbjudande attityd till andra utvecklare som behöver integrera mot enheterna. Vidare är man aktiv inom Javacommunityn mot POS-enheter <a href="http://www.javapos.com/">www.javapos.com</a>. När jag till slut landade på en <a href="http://pos.epson.com/products/TM-T88V?ProductPK=642">Epson TM-T88V</a> var detta starka attribut: </p>
<ul>
<li>Ethernet-uttag</li>
<li>USB-uttag</li>
<li>Hög skrivarhastighet-uttag</li>
<li>Beprövad modell, i version 5</li>
<li>Drivrutiner för Mac OS X</li>
<li>Påvisat fungerande med Java POS</li>
</ul>
<p>Min idé var först att bygga en Java-app som ligger och snurrar och hämtar information från Twitters API&#8217;er och sedan skriver ut dessa på skrivaren. Jag började i tron om att jag var tvungen att använda mig av Java POS. Ganska snart insåg jag att integrationen blev mycket enklare än så. Kvittoskrivaren fungerar som vilken annan skrivare som helst så det blev mycket enklare att använda sig av Javas standardiserade skrivarklasser och bara skriva ut direkt mot dem. Enda trixet var att få bort skrivardialogrutan som by default visas vid Java-utskrifter. När detta väl var klart räckte det med att jobba med de grafiska detaljerna för själva utskriften. </p>
<p>Det krångligaste bestod ironiskt nog inte i att bygga själva appen som skrev ut utan i att få skrivaren att fungera med min Mac. Förstås. USB-anslutningen fungerande inte och inte heller Ethernet-kopplingen. Efter ett par timmars laborerande med DIP-switchar insåg jag att det fanns odukumenterade funktioner i skrivaren för att göra systeminställningar via några udda knappkombinationer där jag snart insåg att fabriksinställningen för skrivaren var att USB var avslaget och att Ethernet-enheten hade ett fast IP i en range som min router inte stödde. Efter aktivering av USB-sladden var allt uppe och rullade. </p>
<p>Twitter-skrivaren står och surrar i ett närliggande rum och det är faktiskt ganska kul att gå förbi och titta till lapparna som skrivs ut i jämn takt. I skrivande stund jobbar jag med att integrera skrivaren mot Magento-butiker så att den istället för att skriva ut tweets printar ordrar som läggs i en webshop. Känns som en väldigt läcker lösning för den som driver en webshop och vill få en mer direkt feedback på vad som säljs i butiken. </p>
<p>Jag återkommer när jag har något att visa där. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2011/04/10/sa-byggde-vi-en-automatisk-twitter-skrivare/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Bra läsning om konfigurering av APC för Magento</title>
		<link>http://www.improove.se/2011/03/30/bra-lasning-om-konfigurering-av-apc-for-magento/</link>
		<comments>http://www.improove.se/2011/03/30/bra-lasning-om-konfigurering-av-apc-for-magento/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 11:41:05 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[apc]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1889</guid>
		<description><![CDATA[Cache-ning av PHP-lagret för drift av Magento-shoppar är helt kritiskt. Vi jobbade tidigare mycket med eAccelerator och XCache. Detta var innan APC&#8217;s storhetstid. APC får nu anses vara mer eller mindre bransch-standard att använda som cache-lager i PHP. Detta gör att de alla otaliga accesstider för sidanrop som uppstår i PHP minimeras. Själva php-filerna cache&#8217;as [...]]]></description>
			<content:encoded><![CDATA[<p>Cache-ning av PHP-lagret för drift av Magento-shoppar är helt kritiskt. Vi jobbade tidigare mycket med <a href="http://eaccelerator.net/">eAccelerator</a> och <a href="http://xcache.lighttpd.net/">XCache</a>. Detta var innan APC&#8217;s storhetstid. <a href="http://php.net/manual/en/book.apc.php">APC</a> får nu anses vara mer eller mindre bransch-standard att använda som cache-lager i PHP. Detta gör att de alla otaliga accesstider för sidanrop som uppstår i PHP minimeras. Själva php-filerna cache&#8217;as i minnet och belastar aldrig disken i samma utsträckning.</p>
<p>Eftersom Magento är ganska krävande som plattform gör det att APC får ganska stor betydelse på plattformen. Samtidigt kan det vara svårt att veta hur man skall konfigurera APC för access mot systemet. Därför vill jag passa på att tipsa om en bloggpost från Nexcess som har <a href="http://blog.nexcess.net/2011/03/25/optimizing-apc-cache-settings-for-magento/">en bra bloggpost i ämnet</a>. Framför allt är det cache-volymen som är viktig där standardkonfigurationen av APC är på 30MB. Nexcess rekommenderar 256MB och i de miljöer vi driftat har vi noterat att APC använder så mycket som 120MB av cache efter bara några timmar i drift.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2011/03/30/bra-lasning-om-konfigurering-av-apc-for-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>En FB-grupp för Magento-utveckling</title>
		<link>http://www.improove.se/2011/03/19/en-fb-grupp-for-magento-utveckling/</link>
		<comments>http://www.improove.se/2011/03/19/en-fb-grupp-for-magento-utveckling/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 05:58:42 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1843</guid>
		<description><![CDATA[Vi har snart jobbat med Magento i 3 år nu och ser både fördelarna och utmaningarna. Utmaningarna ligger i att förstå komplexiteten i plattformen och förstå hur man skall utveckla för den på bästa sätt. Detta måste vi lära oss tillsammans i branschen och i brist på något lämpligt forum för detta har vi skapat [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://profile.ak.fbcdn.net/hprofile-ak-snc4/174856_174149005966877_5382545_n.jpg" alt="" width="89" height="89" />Vi har snart jobbat med Magento i 3 år nu och ser både fördelarna och utmaningarna. Utmaningarna ligger i att förstå komplexiteten i plattformen och förstå hur man skall utveckla för den på bästa sätt. Detta måste vi lära oss tillsammans i branschen och i brist på något lämpligt forum för detta har vi skapat upp en Facebook-grupp för ändamålet. Det är en öppen grupp tillgänglig för alla där vi med fördel kan dryfta våra tekniska Magento-problem.</p>
<p>Vi hjälper gärna till att svara på frågor om du kört fast någon gång.</p>
<p><a href="http://www.facebook.com/home.php?sk=group_174149005966877">http://www.facebook.com/home.php?sk=group_174149005966877</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2011/03/19/en-fb-grupp-for-magento-utveckling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>En grundlig genomgång av Magentos cache-struktur</title>
		<link>http://www.improove.se/2010/12/28/en-grundlig-genomgang-av-magentos-cache-struktur/</link>
		<comments>http://www.improove.se/2010/12/28/en-grundlig-genomgang-av-magentos-cache-struktur/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 09:38:39 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[apc]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Magento Enterprise]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1682</guid>
		<description><![CDATA[Efter snart två och ett halvt år av utveckling på Magento-plattformen finns det en del av systemet som vi ofta slitit vårt hår över: cache-ramverket. Så många gånger har så många problem härrört till denna till synes harmlösa funktion. I vissa fall har det orsakat allvarliga fel, framför allt vid klustrade miljöer men även i [...]]]></description>
			<content:encoded><![CDATA[<p><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Arial} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Arial; min-height: 15.0px} span.s1 {text-decoration: underline ; color: #053bee} -->Efter snart två och ett halvt år av utveckling på Magento-plattformen finns det en del av systemet som vi ofta slitit vårt hår över: cache-ramverket. Så många gånger har så många problem härrört till denna till synes harmlösa funktion. I vissa fall har det orsakat allvarliga fel, framför allt vid klustrade miljöer men även i de enklaste av situationer kan cache-lösningen i Magento ställa till problem. Eftersom den är bristfälligt dokumenterad har det varit väldigt svårt att gå till botten med hur den faktiskt fungerar. Därför har Andreas Holmberg hos oss gjort ett gediget arbete med att grundligt förstå hur denna cache-plattform faktiskt fungerar. Så håll till godo, här har du vår dokumentation över hur cache-strukturen fungerar. Framför allt vill jag belysa kapitel 5 nedan som jag aldrig sett någon riktigt bra sammanställning över.</p>
<p>Missa inte heller <a href="http://www.improove.se/extra/local.xml-exempel.xml">vår bifogade exempelfil</a> som vi refererar till nedan.</p>
<p>Kudos till Andreas för denna insats.</p>
<p><strong>Bakgrund<br />
</strong>Magento har allt sedan första versionen fått kritik för att vara ett <a href="http://stackoverflow.com/questions/1639213/why-is-magento-so-slow">otroligt resurskrävande sytem</a>. I de första versionerna kunde en sidvisning ta upp till 2 sekunder utan att någon märkvärdig logik utfördes. I grund och botten beror detta på två saker:</p>
<ul>
<li>PHP i sig är det ganska tungt script-språk att exekvera. Mest på grund av att det är <a href="http://sv.wikipedia.org/wiki/Interpreterande_programspr%C3%A5k">interpreterande</a> och inte använder av bytekod som t.ex. Java eller C#.</li>
<li>Magento har en väldigt komplex struktur och består av flera tusen PHP-filer vilket gör det långt mer krävande att exekvera än t.ex. WordPress eller Joomla.</li>
</ul>
<p>Man kan säga mycket om detta men jag har alltid fått lära mig att det är bättre att ett system har bra struktur än hög prestanda.<strong> Man kan alltid köpa sig bättre prestanda genom cache-ning och dyrare hårdvara men man kan aldrig köpa sig bättre flexibilitet och struktur.</strong></p>
<p>Så vad göra? Jag brukar rekommendera följande åtgärder:</p>
<ol>
<li>Välj rätt hådvara och operativsystem</li>
<li>Trimma Apache/PHP/Mysql genom konfigurering</li>
<li>Snabba upp PHP genom kompilering eller cachemoduler som: <a href="http://eaccelerator.net/">eAccelerator</a>/<a href="http://www.debian-administration.org/articles/574">APC</a>(alt <a href="http://si2.php.net/manual/en/ref.apc.php">APC</a>)/<a href="http://xcache.lighttpd.net/">XCache</a></li>
<li>Använd Magentos inbyggda cache-struktur</li>
<li>Använd <a href="http://framework.zend.com/manual/en/zend.cache.backends.html">Zend Frameworks underliggande cache-struktur</a></li>
<li>Använd Memcache för sessioner</li>
</ol>
<p>Vår erfarenhet är att punkt 1, 3, 4 &amp; 5 har påtaglig betydelse för prestandan i systemet medan konfigurationerna mer är lämplig vid väldigt stora trafikmängder. Skall man välja PHP-accelerator är vårt förslag APC som vi har bäst erfarenhet av. Alla presterar ungefär likvärdig prestanda men APC har visat sig vara mest kompatibel med uppdateringar av PHP och Apache.</p>
<p><strong>1. Välj rätt hårdvara och operativsystem<br />
</strong>Att snabba upp Magento handlar väldigt mycket om att snabba upp PHP generellt och därför är följande parametrar viktiga i val av hårdvara för Magento/PHP-plattformar:</p>
<ol>
<li>Kör aldrig, aldrig Windows som operativsystem. Kör Linux eller Unix-baserade system. Linuxmiljöer vara upp till <a href="http://www.formboss.net/blog/2010/02/hosting-php-linux-vs-windows-benchmarks/">6 gånger snabbare</a> än windowsmaskiner.</li>
<li>CPU! Processorn är ofta flaskhalsen i hårdvaran eftersom varje sidvisning skall processa all kod varje gång. Ju fler kärnor desto bättre. Satsa på 8st om du har råd.</li>
<li>Accesstider på hårddiskarna. Eftersom det är så många olika filer som skall läsas in tenderar accesstiderna på hårddisken spela stor roll. Om du har råd: kör <a href="http://sv.wikipedia.org/wiki/Solid_state_drive">Solid State Disks(SSD)</a></li>
<li>Minne. Ju mer minne desto mer kan acceleratorerna cache&#8217;a. Snåla aldrig på detta. 12GB+ RAM kan vara en bra riktlinje.</li>
</ol>
<p><strong><br />
2. Konfiguration av PHP/MySQL/Apache<br />
</strong>Här rekommenderar vi Magentos <a href="http://www.magentocommerce.com/blog/comments/performance-is-key-notes-on-magentos-performance/">officiella rekommendationer</a> om konfiguration av primärt MySQL.</p>
<p><strong>3. Installera en PHP-accelerator<br />
</strong>Inga kommentarer. Installera en som passar dig. Kan bli <a href="http://en.wikipedia.org/wiki/PHP_accelerator">2-7 gånger snabbare</a>. Detta gäller alla former av PHP-system, även WordPress. Lova att du gör detta och försök reservera minst 256MB minne för acceleratorn.</p>
<p><strong>4. Magento Interna Cache<br />
</strong>För att möta kritiken om den låga prestandan i systemet har Magento byggt en egen cache-struktur som snabbar upp följande delar:</p>
<ul>
<li>Configurationsinläsning</li>
<li>Översättningsfiler</li>
<li>Layout-konfigurationen</li>
<li>Block-renderingar</li>
<li>Collection-mängder</li>
<li>Attribut-typerna(EAV)</li>
<li>Webservice-konfigurationen</li>
<li>I Magento Enterprise även Full Page Cache(Egentligen Zend Server Full Page Cache).</li>
</ul>
<p>Dessa olika cachenivåer har olika betydelse men jag skulle nog ranka de 6 första som viktigast(förutom punkt 8 som är by far den bästa). Något som ibland kan ställa till det betänkligt är den första punkten. Confiugrations-cache eftersom om ändringar i local.xml görs utanför själva systemet nollställs inte cache och därmed inte configuration och dina ändringar slår inte igenom. I vanliga fall är detta inte speciellt komplicerad utan det räcker med att radera filerna i /var/cache-mappen men vi skall senare återkomma till varför detta kan vara minst sagt komplicerat. Detta har gjort att vi på allvar har funderat på att bygga en modul som utesluter local.xml ur configurations-cachen eftersom detta skulle säkerställa att vi alltid har god kontroll över konfigurationen, något som annars har ställt till det för oss. Man vill dock inte stänga av konfigurationen helt och hållet eftersom det inte bara är local.xml som cache&#8217;as utan även alla modulers config.xml och system.xml-filer. Däremot kan det vara ett tips att stänga av just denna cache när man laborerar med inställningarna i systemet.</p>
<p><strong>5. Zend Frameworks cache-struktur<br />
</strong>Detta är den del av systemet som ställt till med mest problem för oss eftersom Magento använder sig av den utan att någonstans dokumentera hur den faktiskt fungerar. Eftersom Magento till stora delar är byggt ovanpå Zend Framework finns stor potential i att använda deras olika cachemoduler men då det sällan varit speciellt tydligt hur det faktiskt fungerar kan det dels ställa till det för dig då många default-inställningar kickar in som man sällan känner till.</p>
<p>Zend Framework har några väldigt viktiga funktioner som man bör känna till:</p>
<ol>
<li>Full Page Cache</li>
<li>Zend Two Level Cache</li>
<li>DB-cache</li>
<li>Memcache-cache</li>
</ol>
<p><strong><br />
5.1. Zend Two Level Cache</strong><br />
Den sistnämnda <a href="http://blog.nexcess.net/2010/03/22/enabling-memcached-in-magento/">läser man bland om</a> i forum på nätet eftersom den kan ha väsentlig påverkan på prestandan i systemet. Detta eftersom den kan ersätta fillagring av datacache med lagring direkt i minnet. Dels är det bra för prestanda på en lokal maskin men kan vara direkt avgörande när man bygger ett serverkluster. Jag vill understryka att detta är riktigt, riktigt bra men ofta väldigt bökigt att konfigurera och använda. Detta främst på grund av default-inställningar i Zends Two Level Cache. Zends Two Level Cache bygger på att man använder en så kallas &#8221;fast backend&#8221; och en &#8221;slow backend&#8221;. Principen är att &#8221;fast backend&#8221; andvänds i första hand och &#8221;slow backend&#8221; i andra hand. Detta gör att man kan starta om en &#8221;fast backend&#8221;-server som t.ex. memcache utan att det påverkar driften och stabiliteten i systemet. Problemet med detta är att om man konfigurerar memcache som primär cache(fast backend) UTAN att konfigurera en slow backend så blir lokal fillagring per automatik default &#8221;slow backend&#8221; och eftersom &#8221;slow backend&#8221; i regel innehåller fler nycklar än &#8221;fast backend&#8221; så blir denna inte bara en failover utan också ett cache-steg som faktiskt alltid kommer att användas om än inte alltid.</p>
<p>Detta resulterar i ganska märkliga beteenden när du konfigurerar t.ex. ett serverkluster med 2 webbfrontar och använder en central Memcache-server som &#8221;fast backend&#8221; men inte explicit konfigurerar en &#8221;slow backend&#8221;. Då kommer en del av cache-nycklarna lagras central på memcache-servern och några lokalt i filerna på respektive webbfront. Därför är det av största betydelse att inte bara konfigurera &#8221;fast backend&#8221; utan också definiera &#8221;slow backend&#8221; och då skall denna också vara någon variant av central lagring. T.ex. databaslagring eller en central filmapp på en gemensam filserver. Tänk på här att om du har memcache-som cache-steg och har Configuration-cache påslaget så lagras numera local.xml-filen i memcache-servern och läses inte automatiskt ut från disk när du gör ändringar. Det räcker inte heller att radera innehållet i /var/cache utan du bör också för säkerhetsskull invalidera memcache-servern(eller rent av starta om den) och göra samma sak med DB-cache om det används. Detta blir ofta väldigt komplext och svåröverskådligt varav rekommendationen att stänga av Configuration-cache när du jobbar med inställningarna.</p>
<p>Tro mig. Detta kan ställa till stort förtret och det är mycket märkligt att Magento inte dokumenterat detta bättre officiellt. Som Enterprise-kund kan man dock få tillgång till en ganska hygglig sammanställning som man får tillgång till som Enterprise-kund. Vill du ha ett exempel på hur man gör en bra konfiguration av slow resp. fast backend så kan du se detta <a href="http://www.improove.se/extra/local.xml-exempel.xml">i vårt exempel här</a>. Nyttig läsning och det tog ett tag innan vi fick allt riktigt rätt.</p>
<p><strong>5.2. Zend Full Page Cache</strong><br />
Denna funktion är lite av den heliga gralen när man skall uppnå prestanda i Magento-installationer. Denna funktion följer med Magento Entprise och betyder helt enkelt att all output från en sida cache&#8217;as direkt i minnet på servern och det innebär att renderingarna sällan tar längre än 50 millisekunder. Denna cache slutar dock gälla så fort man lägger en produkt i varukorgen eller loggar in t.ex. Då slås den av och renderar sidorna som vanligt. I nyare versioner av Magento Enterprise är dock denna funktionalitet ytterligare integrerade i Magento och fungerar så att den bara stänger av Full Page Cache för vissa template-block  i renderingen av sidor vilket betyder att prestandan ökar betänkligt även när man lägger produkter i varukorgen.</p>
<p>Rent teoretiskt kan du använda Zend Full Page Cache utan att köpa Magento Enterprise. Då genom att köpa en licens(från €1200) av <a href="http://www.zend.com/products/server/">Zend Server</a> som är den programvara som faktiskt innehåller denna teknik. Det är delvis denna Magento säljer när man köper Magento Enterprise. Då blir den lite klumpigare framför allt jämfört med de senare versionerna av systemet där FPC är så sömlöst integrerat i Magento. Hur som helst. En direkt avgörande funktion om du på allvar vill få upp prestandan i systemet.</p>
<p><strong>6. Memcache för sessionshantering</strong><br />
Till sist kan du boosta prestandan i systemet genom att lagra sessioner i memcache istället för på disk. Jag har varit med om sajter som haft 1.5 miljoner sessionsfiler i /var/session-mappen vilket uppstår när man har stora mängder besök, även om de inte handlar något. I mindre sajter märks inte detta i någon större utsträckning men så fort trafikmängderna ökar är det viktigt att lagra sessionvärdena mer effektivt. Det gör man enklast genom att flytta lagringen av sessioner från fil till memcache. Instruktioner för detta finns även det i vår exempelfil.</p>
<p>En varning dock: vi har vid ett par tillfällen varit med om att admin-inloggningen slutar fungera när man använder memcache för lagring av sessioner. Vi har inte något intelligent svar på varför detta inträffat ibland annat än att vi misstänker problem med konfigurationen. <a href="http://www.improove.se/extra/local.xml-exempel.xml">Vår bifogade exempelfil</a> fungerar dock.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2010/12/28/en-grundlig-genomgang-av-magentos-cache-struktur/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>75% av Linux är utvecklat av företag</title>
		<link>http://www.improove.se/2010/12/02/75-av-linux-ar-utvecklat-av-foretag/</link>
		<comments>http://www.improove.se/2010/12/02/75-av-linux-ar-utvecklat-av-foretag/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 20:23:42 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1642</guid>
		<description><![CDATA[För oss som jobbar med öppen källkod är det alltid en utmaning att förklara för skeptikerna att öppet faktiskt kan vara bättre och starkare än slutna system. Styrkan med öppen källkoden är som sagt öppenheten, inte den obefintliga licenskostnaden. Att det är gratis behöver ju inte betyda att det görs av amatörer eller lekmän. Arbetet [...]]]></description>
			<content:encoded><![CDATA[<p>För oss som jobbar med öppen källkod är det alltid en utmaning att förklara för skeptikerna att öppet faktiskt kan vara bättre och starkare än slutna system. Styrkan med öppen källkoden är som sagt öppenheten, inte den obefintliga licenskostnaden. Att det är gratis behöver ju inte betyda att det görs av amatörer eller lekmän. Arbetet kan ju lika gärna utföras av företag som vill dela utvecklingskostnaden med andra intressenter.</p>
<p>Det är inte ovanligt att de stora bolagen tillsätter egen personal i t.ex. Linux eller Apache-projekten. Jag har alltid hävdat detta utan att riktigt haft någon tillförlitlig statistik som bekräftat detta. Tills idag. <a href="http://mashable.com/2010/11/30/who-builds-linux/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+Mashable+(Mashable)">Den här artikeln på Mashable</a> visar hur många och vilka som jobbat på Linux-kärnan de senaste åren. Här framkommer att enbart 25% av linuxkoden(eller antalet utvecklare i alla fall) är skrivet av privatpersoner och entusiaster. Väldigt intressant.</p>
<p>Vilka Open Source-projekt bidrar ditt företag till?</p>
<p><img class="alignnone size-medium wp-image-1643" title="linux-employers" src="http://www.improove.se/wp-content/uploads/2010/12/linux-employers-620x390.png" alt="" width="620" height="390" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2010/12/02/75-av-linux-ar-utvecklat-av-foretag/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PhoneGap kombinerar det bästa av native-appar och webappar</title>
		<link>http://www.improove.se/2010/11/03/phonegap-kombinerar-det-basta-av-native-appar-och-webappar/</link>
		<comments>http://www.improove.se/2010/11/03/phonegap-kombinerar-det-basta-av-native-appar-och-webappar/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 09:00:14 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Trender]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1580</guid>
		<description><![CDATA[Frågan om hur och vad man skall utveckla mobila applikationer för är minst sagt svår. Å ena sidan har vi religionskriget mellan iPhone och Android samtidigt som det är väldigt många som förespråkar mobilanpassade webbplatser istället för native-appar. Det är lätt att bygga webappar samtidigt som man missar så många av de så tunga funktionerna [...]]]></description>
			<content:encoded><![CDATA[<p>Frågan om hur och vad man skall utveckla mobila applikationer för är minst sagt svår. Å ena sidan har vi religionskriget mellan iPhone och Android samtidigt som det är väldigt många som förespråkar mobilanpassade webbplatser istället för native-appar. Det är lätt att bygga webappar samtidigt som man missar så många av de så tunga funktionerna som våra smarta telefoner erbjuder. Sådana saker som mobilkamera, GPS eller accelerometer gör att webapparna känns så mycket fattigare. Samtidigt som det är både dyrt och riskabelt att bygga iPhone-appar även om uppsidorna kan vara fantastiska.</p>
<p>Precis detta dilemma vill <a href="http://www.phonegap.com/">PhoneGap</a> / <a href="http://twitter.com/phonegap">@phonegap</a> hjälpa oss att hantera. PhoneGap är ett(av många &#8211; <a href="http://rhomobile.com/products/rhodes/">Rhomobile</a> <a href="http://www.appcelerator.com/">Appcelerator</a>) utvecklingsramverk(öppen källkod) i vilket en webbutvecklare kan utveckla mobilappar som använder sig av de etablerade mobilplattformarnas hårdvara. Det är alltså en HTML-app inbakad i en native-app med ett generellt API för att anropa den underliggande hårdvaran.</p>
<p>Riktigt spännande om du frågar mig. Produkten <a href="http://mashable.com/2010/08/11/cross-platform-mobile-development-tools/">gillas på webben</a> just nu och i brist på annat måste jag säga att detta låter riktigt intressant. Jag kan se att detta är användbart om man är i behov av:</p>
<ul>
<li>Bred spridning till samtliga plattformar</li>
<li>Snabb utveckling(ej beroende av flera olika utvecklarkompetenser)</li>
<li>Spara pengar</li>
<li>Prototyputveckling</li>
</ul>
<p>Även om inga stora varumärken byggt sina appar på Phonegap(<a href="http://www.appcelerator.com/showcase/">Appcelerator har ett bättre trackrecord på denna punkt</a>) tror jag att det här kan vara en rimlig väg att gå. Framför allt om man inte bestämt huruvida man skall satsa sin utveckling på iPhone eller android men vill komma igång redan nu.</p>
<p>Men som sagt. Kul att det rör på sig. Det enda vi vet om mobilutvecklingen är att den kommer att vara fortsatt intensiv.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2010/11/03/phonegap-kombinerar-det-basta-av-native-appar-och-webappar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3st snygga gratis HTML5-videospelare</title>
		<link>http://www.improove.se/2010/07/21/3st-snygga-gratis-html5-videospelare/</link>
		<comments>http://www.improove.se/2010/07/21/3st-snygga-gratis-html5-videospelare/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 08:50:22 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1278</guid>
		<description><![CDATA[Efter all den HTML5-hajp som rått under våren tycker jag det är lite märkligt att vare sig Flowplayer(även om det finns ett inofficiellt plugin) eller JW Media Player lanserat någon HTML5-fallback för sina videospelare. Jag känner själv att jag har behov av att erbjuda iPad-kompatibelt video på något enkelt sätt utan utveckla egna HTML5-spelare. Därför [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-1279 alignnone" title="Flare Video" src="http://www.improove.se/wp-content/uploads/2010/07/Screen-shot-2010-07-18-at-2.15.22-PM-545x295.png" alt="" width="545" height="295" /></p>
<p>Efter all den HTML5-hajp som rått under våren tycker jag det är lite märkligt att vare sig Flowplayer(även om det finns ett <a href="http://flowplayer.org/forum/4/44189">inofficiellt plugin</a>) eller JW Media Player lanserat någon HTML5-fallback för sina videospelare. Jag känner själv att jag har behov av att erbjuda iPad-kompatibelt video på något enkelt sätt utan utveckla egna HTML5-spelare.</p>
<p>Därför har jag sammanställt några olika alternativ om du behöver en smidig HTML5-player.</p>
<p><strong>Flare Video</strong><br />
Måste väl sägas vara en iTunes/Quicktime. Men det är snyggt och bra. Kanske den bästa.<br />
<a href="http://flarevideo.com/">http://flarevideo.com/</a></p>
<p><strong>Video JS</strong><br />
Också denna vädigt stilren och smidig. Känns också som den snabbaste. Flare Video tenderar att lagga emellanåt.<br />
<a href="http://videojs.com/ ">http://videojs.com/ </a></p>
<p><strong>Sublime</strong><br />
Väldigt slick och snygg lösning, framstår som seriöst och välgjort. Ännu inte lanserat men det kommer de närmaste veckorna.<br />
<a href="http://jilion.com/sublime/video">http://jilion.com/sublime/video</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2010/07/21/3st-snygga-gratis-html5-videospelare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox Home känns faktiskt riktigt praktiskt</title>
		<link>http://www.improove.se/2010/07/02/firefox-home-kanns-faktiskt-riktigt-praktiskt/</link>
		<comments>http://www.improove.se/2010/07/02/firefox-home-kanns-faktiskt-riktigt-praktiskt/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 06:16:56 +0000</pubDate>
		<dc:creator>Per-Mattias Nordkvist</dc:creator>
				<category><![CDATA[Nyheter]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Trender]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.improove.se/?p=1257</guid>
		<description><![CDATA[När jag först läste att Firefox jobbade på en iPhone-app blev jag tveksam. Visst kan det vara bra med alternativ till Safari i iPhone vid sidan av en alternativ renderingsmotor är det inte mycket man kan erbjuda. Men nu när resultatet är klart måste jag medge att jag är imponerad. Man har tänkt lite längre [...]]]></description>
			<content:encoded><![CDATA[<p>När jag först läste att Firefox jobbade på en iPhone-app blev jag tveksam. Visst kan det vara bra med alternativ till Safari i iPhone vid sidan av en alternativ renderingsmotor är det inte mycket man kan erbjuda. Men nu när resultatet är klart måste jag medge att jag är imponerad. Man har tänkt lite längre och fyllt Firefox Home med precis de funktioner man behöver när man är ute på vift.</p>
<p>Idén som jag förstår det är att iPhone-appen inte bara synkar länkar utan även flikar och sessioner. Så om man har en sida uppe i sin webbläsare som man kanske behöver om ett tag ute på vift slänger man bara upp Firefox Home och navigerar utifrån det som finns aktiverat i browsern hemma. </p>
<p>1-0 till Firefox. </p>
<p><a href="http://blog.mozilla.com/blog/2010/06/30/firefox-home-submitted-to-apple-app-store/">http://blog.mozilla.com/blog/2010/06/30/firefox-home-submitted-to-apple-app-store/</a></p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/_Whrh5jMZbU&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/_Whrh5jMZbU&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.improove.se/2010/07/02/firefox-home-kanns-faktiskt-riktigt-praktiskt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

