<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 <title>Sven Dahlstrand</title>
 <link href="http://svendahlstrand.se/atom.xml" rel="self"/>
 <link href="http://svendahlstrand.se/"/>
 <updated>2010-08-11T19:09:32+02:00</updated>
 <id>http://svendahlstrand.se/</id>
 <author>
   <name>Sven Dahlstrand</name>
   <email>sven.dahlstrand@gmail.com</email>
 </author>
 
   <entry>
     <title>||=-operatorn i Ruby</title>
     <link href="http://svendahlstrand.se/operatorn-i-ruby"/>
     <updated>2010-02-23T00:00:00+01:00</updated>
     <id>http://svendahlstrand.se/operatorn-i-ruby</id>
     <content type="html">&lt;p&gt;I Ruby, liksom de flesta andra programmeringsspråk, finns det något som kallas &lt;em&gt;abbreviated assignment&lt;/em&gt; (förkortad tilldelning). Det är operatorer som &lt;code&gt;+=&lt;/code&gt; och &lt;code&gt;-=&lt;/code&gt; som låter oss lägga till respektive dra ifrån värdet på en redan existerande variabel.&lt;/p&gt;
&lt;p&gt;Om man är ny i Ruby-världen finns det risk för förvirring när man stöter på &lt;code&gt;||=&lt;/code&gt; i andras källkod. Vad gör den och vad är den bra till? Jag tänkte förklara med ett exempel.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;puts @count
#=&amp;gt; nil

@count ||= 0
puts @count #=&amp;gt; 0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Okej, vad händer här egentligen? Vi börjar med en instansvariabel &lt;code&gt;@count&lt;/code&gt; som är odefinierad (&lt;code&gt;nil&lt;/code&gt;). Sedan använder vi &lt;code&gt;||=&lt;/code&gt;-operatorn och &lt;code&gt;@count&lt;/code&gt; är nu 0. Har vi bara gjort en vanlig tilldelning?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;@count ||= 32
puts @count #=&amp;gt; 0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det verkar inte så, efter en ny tilldelning är &lt;code&gt;@count&lt;/code&gt; fortfarande 0. &lt;code&gt;||=&lt;/code&gt; är egentligen bara en förkortning och kan skrivas om:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;@count = @count || 32&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;||&lt;/code&gt;-operatorn i Ruby fungerar så här: först undersöks operanden till vänster. Om den har ett värde som inte är &lt;code&gt;nil&lt;/code&gt; eller &lt;code&gt;false&lt;/code&gt; så returneras det värdet. Annars returneras värdet på operanden till höger.&lt;/p&gt;
&lt;p&gt;Så om vi ska översätta den senaste raden kod till &amp;#8220;ren svenska&amp;#8221;: sätt variabeln &lt;code&gt;@count&lt;/code&gt; till 32 om &lt;code&gt;@count&lt;/code&gt; inte redan har något värde.&lt;/p&gt;
&lt;h2&gt;När har jag användning för detta?&lt;/h2&gt;
&lt;p&gt;Säg till exempel att du ska skriva en metod som räknar ut några värden. Dessa värden vill du lägga till en array och sedan returnera den. Du vill att användaren av din metod ska kunna skicka med en array som ska användas, men om hon inte gör det vill du skapa en ny, tom array.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;def my_function(results = nil)
  results ||= []
  # Gör avancerade uträkningar här
  return results
end&lt;/code&gt;&lt;/pre&gt;</content>
   </entry>
 
   <entry>
     <title>Tillbaka till skrivbordsapplikationer</title>
     <link href="http://svendahlstrand.se/tillbaka-till-skrivbordsapplikationer"/>
     <updated>2010-02-16T00:00:00+01:00</updated>
     <id>http://svendahlstrand.se/tillbaka-till-skrivbordsapplikationer</id>
     <content type="html">&lt;p&gt;Idag använder jag webben på ett helt annat sätt än för 10 år sedan. De flesta av de applikationer jag  använder har flyttat ut på Internet. E-post, kalender och att göra-listor är några exempel. Det finns dock några nackdelar med att köra dessa i webbläsaren. De tar upp plats med flera tabbar och man kan inte nyttja OS X Exposé-funktion för att få en översikt. Jag saknar också att ha en Dock-ikon med med statusinformation, som till exempel antalet olästa e-brev.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/dock.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Site-specific_browser&quot;&gt;Platsspecifika webbläsare&lt;/a&gt; kallas lösningen på problemet och till Macen har vi Mozillas &lt;a href=&quot;http://prism.mozilla.com&quot;&gt;Prism&lt;/a&gt; och Todd Ditchendorfs &lt;a href=&quot;http://fluidapp.com&quot;&gt;Fluid&lt;/a&gt; att välja på. Dessa program hjälper dig att skapa en skrivbordsapplikation av valfri webbsida. Fluid och Prism är ganska likvärdiga i funktionalitet men bygger på olika renderingsmotorer &amp;#8211; WebKit respektive Gecko.&lt;/p&gt;
&lt;p&gt;Efter installationen går man till väga på mer eller mindre samma sätt för att skapa sina applikationer:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Skriv in en &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Välj vart applikationen ska hamna&lt;/li&gt;
	&lt;li&gt;Välj en ikon&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nu är det bara att dra programmet till Dockan och använda det som vilken annan skrivbordsapplikation som helst. Du kan till exempel få det att starta när du loggar in genom att dra det till &lt;em&gt;Startobjekt&lt;/em&gt; under &lt;em&gt;Systeminställningar &amp;gt; Konton&lt;/em&gt; eller dra nytta av Spaces-funktionen i Snow Leopard.&lt;/p&gt;
&lt;p&gt;Om man &lt;a href=&quot;http://www.google.com/search?q=fluid+OR+prism+icons&quot;&gt;googlar&lt;/a&gt; lite är det inte svårt att hitta &lt;a href=&quot;http://www.flickr.com/groups/fluid_icons/pool/&quot;&gt;läckra ikoner&lt;/a&gt; till sitt favoritprogram.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Hur du blir snabbare i Terminal.app (Bash)</title>
     <link href="http://svendahlstrand.se/hur-du-blir-snabbare-i-terminal-app-bash"/>
     <updated>2010-02-09T00:00:00+01:00</updated>
     <id>http://svendahlstrand.se/hur-du-blir-snabbare-i-terminal-app-bash</id>
     <content type="html">&lt;p&gt;Jag spenderar mycket tid i &lt;a href=&quot;http://sv.wikipedia.org/wiki/Bash&quot;&gt;Bash&lt;/a&gt; som råkar vara den kommandotolk som är förvald i Mac&amp;nbsp;OS&amp;nbsp;X:s Terminal.app. Det blir många kommandon på en dag och tyvärr är det mycket repetitivt arbete. Att skriva ett längre kommando mer än en gång känns dumt. &lt;em&gt;Tab completion&lt;/em&gt; är en funktion som de flesta terminal-användare känner till; att Bash hjälper dig avsluta sökvägar eller kommandon när du trycker på tabb. Min favorit är &lt;em&gt;history&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Om du bara kör programmet &lt;em&gt;history&lt;/em&gt; presenteras en lång lista med dina senast körda kommandon. Ett lätt sätt att stega igenom dessa är med hjälp av pil upp och pil ner. När du hittar det kommando du vill köra är det bara att trycka &lt;em&gt;retur&lt;/em&gt;. Om du behöver ändra i kommandot är det bra att känna till &lt;em&gt;ctrl-a&lt;/em&gt; och &lt;em&gt;ctrl-e&lt;/em&gt; som hoppar till början respektive slutet av raden.&lt;/p&gt;
&lt;p&gt;Okej, inget nytt under solen än kanske? Men mindre känt är att det finns ett sökläge för historiken. Innan du börjar skriva något trycker du &lt;em&gt;ctrl-r&lt;/em&gt;. Nu är det bara att börja söka på ett tidigare kommando, det räcker med ett fragment av det, och det du körde senast som matchar ditt sökord visas. Om du inte är nöjd trycker du &lt;em&gt;ctrl-r&lt;/em&gt; igen för att visa nästa träff. När du hittat det du letade efter har du ett par valmöjligheter. Om du bara trycker &lt;em&gt;retur&lt;/em&gt; körs kommandot direkt. &lt;em&gt;ctrl-j&lt;/em&gt; eller &lt;em&gt;Escape&lt;/em&gt; hämtar istället kommandot och låter dig redigera det innan det körs. Ångrar du dig är det bara att trycka &lt;em&gt;ctrl-c&lt;/em&gt; för att komma tillbaks till prompten.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Sidecar</title>
     <link href="http://svendahlstrand.se/sidecar"/>
     <updated>2010-02-07T00:00:00+01:00</updated>
     <id>http://svendahlstrand.se/sidecar</id>
     <content type="html">&lt;p&gt;Sidecar hör till den skara klassiska cocktails som inte föddes i Amerika. Den ska enligt David A. Embury ha skapats, av en vän till honom, under andra världskriget på en bar i Paris. Embury påstår också att cocktailen har fått sitt namn efter en stamkund som blev körd till baren i just en sidovagn.&lt;/p&gt;
&lt;p&gt;Tyvärr lär vi aldrig få veta säkert hur det gick till. Hur som helst har pappan till Sidecar antingen inspirerats av eller varit helt ovetandes om en Brandy Crusta.&lt;/p&gt;
&lt;p&gt;Denna cocktail hittar vi så långt tillbaka som 1862 i Jerry Thomas &lt;a href=&quot;http://www.artofdrink.com/jerry-thomas/pg14.php&quot;&gt;The Bar-Tenders Guide&lt;/a&gt;. En Brandy Crusta skakas ihop med sockerlag, Bokers bitter, brandy, Curaçao och citronjuice. Thomas beskriver också hur serveringen ska gå till: i ett cocktailglas med sockerkant och citronskal i. Inte helt olikt den drink du får när du beställer en Sidecar idag.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/sidecar.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Recept&lt;/h2&gt;
&lt;p&gt;Att en Sidecar ska innehålla konjak, citronjuice och Cointreau kan nog de flesta hålla med om men när det kommer till proportionerna är det inte lika klart. Men faktiskt så är det så att det recept som är rätt är det som passar ditt val av konjak och din smak allra bäst. Därför presenterar jag här några varianter och rekommenderar dig att prova dig fram tills du hittar din favorit.&lt;/p&gt;
&lt;h3&gt;Gary Regan från The Joy of Mixology&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;4 1/2 cl konjak&lt;/li&gt;
	&lt;li&gt;3 cl Cointreau&lt;/li&gt;
	&lt;li&gt;1 1/2 cl citronjuice&lt;/li&gt;
	&lt;li&gt;citrontwist, för garnering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Skaka och sila upp i ett kylt cocktailglas med sockerkant. Lägg till garneringen.&lt;/p&gt;
&lt;h3&gt;Dale Degroff från The Essential Cocktail&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;4 cl konjak&lt;/li&gt;
	&lt;li&gt;2 cl citronjuice&lt;/li&gt;
	&lt;li&gt;2 cl Cointreau&lt;/li&gt;
	&lt;li&gt;socker&lt;/li&gt;
	&lt;li&gt;apelsin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Förbered ett cocktailglas genom att doppa det i först apelsinjuice och sen socker, för att få en fin kant. Blanda sedan konjak, citronjuice och Cointreau i en shaker, fyll på med is och skaka väl. Sila upp i cocktailglaset och garnera med en bit apelsinskal.&lt;/p&gt;
&lt;h3&gt;Harry McElhone från Största cocktailboken&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;3 cl konjak&lt;/li&gt;
	&lt;li&gt;3 cl Cointreau&lt;/li&gt;
	&lt;li&gt;3 cl citronjuice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Skakas med is och silas i cocktailglas. Kan serveras med en bit citronskal om så önskas.&lt;/p&gt;
&lt;h3&gt;David A. Embury från The Fine Art of Mixing Drinks&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;4 cl konjak&lt;/li&gt;
	&lt;li&gt;1 cl citronjuice&lt;/li&gt;
	&lt;li&gt;1/2 cl Cointreau&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Skaka ordentligt med mycket is och sila upp i ett kylt cocktailglas. Kan dekoreras med en citrontwist om så önskas.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Homebrew - En pakethanterare för OS X</title>
     <link href="http://svendahlstrand.se/homebrew-en-pakethanterare-for-os-x"/>
     <updated>2010-02-04T00:00:00+01:00</updated>
     <id>http://svendahlstrand.se/homebrew-en-pakethanterare-for-os-x</id>
     <content type="html">&lt;p&gt;Som webbutvecklare drar jag nytta av mycket fri mjukvara som till exempel &lt;a href=&quot;http://git-scm.com/&quot;&gt;git&lt;/a&gt;, &lt;a href=&quot;http://www.imagemagick.org/&quot;&gt;imagemagick&lt;/a&gt; och &lt;a href=&quot;http://www.winehq.org/&quot;&gt;wine&lt;/a&gt;. De flesta *nix-smaker har pakethanterare som underlättar installationen. &lt;span class=&quot;caps&quot;&gt;BSD&lt;/span&gt; har ports, Debian har dpkg och många andra Linuxdistributioner kör &lt;span class=&quot;caps&quot;&gt;RPM&lt;/span&gt; till exempel. På OS X har det länge varit antingen &lt;a href=&quot;http://www.finkproject.org/&quot;&gt;Fink&lt;/a&gt; eller &lt;a href=&quot;http://www.macports.org/&quot;&gt;MacPorts&lt;/a&gt; som gäller.&lt;/p&gt;
&lt;p&gt;Jag har inte riktigt varit förtjust i någon av dem. Jag har till exempel inte hittat alla paket jag behöver i Fink och MacPorts känns tungrott då det installerar paket som redan finns på din Mac från början. Jag har sedan ett tag tillbaka i stället använt &lt;a href=&quot;http://github.com/mxcl/homebrew&quot;&gt;Homebrew&lt;/a&gt; som min pakethanterare.&lt;/p&gt;
&lt;h2&gt;Varför ska jag köra Homebrew?&lt;/h2&gt;
&lt;p&gt;Det finns många fördelar med Homebrew:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Det är lätt att installera. Lägg bara Homebrew i &lt;code&gt;/usr/local&lt;/code&gt;, som redan finns i &lt;code&gt;PATH&lt;/code&gt;, och du är igång.&lt;/li&gt;
	&lt;li&gt;Du kan förresten lägga det vart du vill och Homebrew smutsar inte ner utanför sin katalog.&lt;/li&gt;
	&lt;li&gt;Du behöver inte använda sudo om du inte gärna vill.&lt;/li&gt;
	&lt;li&gt;Homebrew drar nytta av de paket som redan finns på din dator och därav går det snabbare att installera.&lt;/li&gt;
	&lt;li&gt;Alla paket är optimerade för Intelbaserade Macar med Snow Leopard.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hur kommer jag igång?&lt;/h2&gt;
&lt;p&gt;Det enda du behöver innan vi kör igång är &lt;a href=&quot;http://developer.apple.com/technologies/xcode.html&quot;&gt;Xcode&lt;/a&gt;. Om du har din installationsskiva för OS X kvar kan du installera Xcode därifrån. Homebrew kan, som jag nämnde tidigare, installeras vart som helst men jag föredrar &lt;code&gt;/usr/local&lt;/code&gt;. Så här lätt installerar du från terminalen:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;# Ladda hem och installera Homebrew från GitHub.
ruby -e &quot;$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)&quot;

# Så här söker du efter paket samt får mer information om det.
brew search git
brew info git

# När du hittat rätt paket är det bara att installera.
brew install git&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det är också lätt att bidra till Homebrew, jag har själv skickat in ett par patchar. Eftersom det är öppen källkod behöver man inte heller vänta på att någon annan ska uppdatera ens favoritpaket, det är bara att göra själv! Ta en titt på &lt;a href=&quot;http://wiki.github.com/mxcl/homebrew/formula-cookbook&quot;&gt;Homebrews wiki&lt;/a&gt; för mer information.&lt;/p&gt;</content>
   </entry>
 
   <entry>
     <title>Tvinga Safari att öppna alla länkar i en ny flik</title>
     <link href="http://svendahlstrand.se/tvinga-safari-att-oppna-alla-lankar-i-en-ny-tab"/>
     <updated>2010-02-01T00:00:00+01:00</updated>
     <id>http://svendahlstrand.se/tvinga-safari-att-oppna-alla-lankar-i-en-ny-tab</id>
     <content type="html">&lt;p&gt;Jag väljer ofta Safari när jag surfar, bland annat för att den känns lite kvickare än Firefox. Det finns dock några grejer som irriterar mig och allra mest sättet Safari hanterar flikar på. Hur man än ställer inställningarna i webbläsaren finns det alltid några länkar som tycker det är roligt att öppnas i ett nytt fönster istället för i en ny flik.&lt;/p&gt;
&lt;p&gt;Som tur är finns det en lätt lösning på problemet, det är bara att skriva in följande kommando i terminalen, men jag kan inte fatta varför det inte finns som en inställning istället. Det kanske är jag som letar dåligt?&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;shell&quot;&gt;defaults write com.apple.Safari TargetedClicksCreateTabs -bool true&lt;/code&gt;&lt;/pre&gt;</content>
   </entry>
 
   <entry>
     <title>Caipirissima</title>
     <link href="http://svendahlstrand.se/caipirissima"/>
     <updated>2010-01-31T00:00:00+01:00</updated>
     <id>http://svendahlstrand.se/caipirissima</id>
     <content type="html">&lt;p&gt;Jag älskar rom och drinkar som är baserade på detta sockerrörsdestillat. Jag tycker så mycket om det att jag ibland byter ut basspriten i andra drinkar mot just rom. Ikväll blev det en variant på &lt;a href=&quot;http://en.wikipedia.org/wiki/Caipirinha&quot;&gt;Caipirinha&lt;/a&gt;, Brasiliens nationalcocktail.&lt;/p&gt;
&lt;p&gt;Caipirinhan föddes på den brasilianska landsbygden för många år sedan. Den ska blandas med &lt;a href=&quot;http://en.wikipedia.org/wiki/Cachaça&quot;&gt;cachaça&lt;/a&gt; som är en spritdryck gjord på sockerrör men som alltså inte är rom. I Brasilien finns det tusentals tillverkare av denna dryck men det är få som hittar till Sverige och Systembolaget.&lt;/p&gt;
&lt;p&gt;Byter vi ut cachaçan mot ljus rom får vi en variant som är mins lika god &amp;#8211; Caipirissima. Jag rekommenderar &lt;a href=&quot;http://systembolaget.se/SokDrycker/Produkt?VaruNr=511&quot;&gt;Havana Club Añejo Blanco (nr 511)&lt;/a&gt;. Följande recept har jag hämtat från Dale Degroffs bok &lt;a href=&quot;http://www.amazon.com/Essential-Cocktail-Mixing-Perfect-Drinks/dp/0307405737&quot;&gt;The Essential Cocktail&lt;/a&gt;. Allra helst njuter man den en varm sommardag, men den är god en kall januarikväll också.&lt;/p&gt;
&lt;h2&gt;Recept&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;En lime delad i fyra klyftor&lt;/li&gt;
	&lt;li&gt;2-3 teskedar socker (eller 3 cl sockerlag)&lt;/li&gt;
	&lt;li&gt;6 cl ljus rom&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lägg limeklyftorna i ett lågt glas och strö över socker. Muddla för att pressa ut juicen och oljan. Fyll på med krossad is och rom &amp;#8211; rör om och servera.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/caipirissima.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;</content>
   </entry>
 
</feed>