<?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>Tig och lid! &#187; hack</title>
	<atom:link href="http://blog.lincoln.se/category/hack/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lincoln.se</link>
	<description>Den som tiger lider.</description>
	<lastBuildDate>Mon, 02 May 2011 19:24:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Upgrading a web forms web appliction to mvc 3, evolution style</title>
		<link>http://blog.lincoln.se/2011/04/17/upgrading-a-web-forms-web-appliction-to-mvc-3-evolution-style/</link>
		<comments>http://blog.lincoln.se/2011/04/17/upgrading-a-web-forms-web-appliction-to-mvc-3-evolution-style/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 19:45:14 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[hack]]></category>

		<guid isPermaLink="false">http://blog.lincoln.se/?p=390</guid>
		<description><![CDATA[Scenario: You&#8217;ve got an existing web application coded in web forms asp.net. You&#8217;ve seen the light and want to move over to asp.net mvc 3. Excellent! So, how do you do it? You have two options: Big Bang revolution. Stop all development on the old site until you have recoded everything in mvc3. Mvc 3 [...]]]></description>
			<content:encoded><![CDATA[<p>Scenario: You&#8217;ve got an existing web application coded in web forms asp.net. You&#8217;ve seen the light and want to move over to asp.net mvc 3. Excellent! So, how do you do it? You have two options:</p>
<ol>
<li>Big Bang revolution. Stop all development on the old site until you have recoded everything in mvc3.</li>
<li>Mvc 3 Evolution. Implement all new functionality in mvc 3. Convert old pages and user controls one by one to mvc3.</li>
</ol>
<p>I guess it&#8217;s obvious that I like option number 2, and that is also how we&#8217;re doing it at the client where I work.</p>
<p>It&#8217;s easy to implement the first part of the Mvc3 Evolution; just <a href="http://www.hanselman.com/blog/IntegratingASPNETMVC3IntoExistingUpgradedASPNET4WebFormsApplications.aspx">follow the wisdom of Scott Hanselman</a> and you&#8217;re set. Then you can write all new functionality in new controllers and views.</p>
<p>So, the hard part left. How can you call actions and views from your old web forms pages and user controls, ascx and aspx? Is it really possible?</p>
<p>Yes, it is possible. But it is a bit tricky and some-what hackish, but if you just ignore the few ugly lines, you can slowly reach mvc3 nirvana without having to go through a big bang release.</p>
<p>What I wanted to accomplish was to be able to call actions and views from my existing web forms pages and user controls, so that I could convert old user controls into views and actions one by one and be able to call them from the old, non-converted pages. The trick is to mimick the mvc3 and asp.net framework, so that we can write code in our pages and user controls like this:</p>
<pre class="brush: csharp">

&lt;% WebFormMvcUtil.RenderPartial(&quot;Home&quot;, &quot;Index&quot;, null); %&gt;
&lt;% WebFormMvcUtil.RenderPartial(&quot;Index&quot;, null); %&gt;
&lt;% WebFormMvcUtil.RenderAction(&quot;Home&quot;, &quot;Index&quot;, null); %&gt;
&lt;% WebFormMvcUtil.RenderAction(&quot;Hone&quot;, &quot;Index&quot;, new { id  = 25}); %&gt;
</pre>
<p>which in razor views of course would look like this</p>
<pre class="brush: csharp">

@Html.Partial(&quot;Home&quot;, &quot;Index&quot;)
@Html.Partial(&quot;Index&quot;)
@Html.Action(&quot;Home&quot;, &quot;Index&quot;)
@Html.Action(&quot;Hone&quot;, &quot;Index&quot;, new { id  = 25})
</pre>
<p>The code posted below does all of this for us, setting up the needed route data and contexts.</p>
<p>And these few lines of code is about what you need to be able to step-by-step take your web forms application to a modern mvc3 application. Enjoy!</p>
<p>&nbsp;</p>
<pre class="brush: csharp">
using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace My.Namespace
{
// Code based upon http://stackoverflow.com/questions/702746/how-to-include-a-partial-view-inside-a-webform
// and extended by Jonas Lincoln, 2011

public class FakeController : Controller
{
}

public static class WebFormMvcUtil
{
private const string NameSpace = &quot;My.Namespace&quot;;

public static void RenderPartial(string partialName, object model)
{
RenderPartial(&quot;Fake&quot;, partialName, model);
}

/// &lt;summary&gt;
/// Renders the partial view found in ~/Views/{controllerName}/{partialName}.cshtml
/// or ~/Views/Shared/{partialName}.cshtnk
/// &lt;/summary&gt;
/// &lt;param name=&quot;controllerName&quot;&gt;&lt;/param&gt;
/// &lt;param name=&quot;partialName&quot;&gt;&lt;/param&gt;
/// &lt;param name=&quot;model&quot;&gt;Data passed on to the view as Model&lt;/param&gt;
public static void RenderPartial(string controllerName, string partialName, object model)
{
// get the controller
var controller = GetController(controllerName);

//get a wrapper for the legacy WebForm context
var httpContext = new HttpContextWrapper(HttpContext.Current);

//create a mock route that points to the empty controller
var rt = new RouteData();
rt.Values.Add(&quot;controller&quot;, controllerName);

//create a controller context for the route and http context
var controllerContext = new ControllerContext(
new RequestContext(httpContext, rt), controller);

//find the partial view using the viewengine
var view = ViewEngines.Engines.FindPartialView(controllerContext, partialName).View;

//create a view context and assign the model
var viewContext = new ViewContext(controllerContext, view,
new ViewDataDictionary { Model = model },
new TempDataDictionary(), HttpContext.Current.Response.Output);

//render the partial view
view.Render(viewContext, HttpContext.Current.Response.Output);
}

public static void RenderAction(string controllerName, string actionName, object routeObject)
{
// get the controller
var controller = GetController(controllerName);

var httpContext = new HttpContextWrapper(HttpContext.Current);

// set up the route data
var routeData = new RouteData();

routeData.Values.Add(&quot;controller&quot;, controllerName);
routeData.Values.Add(&quot;action&quot;, actionName);

// add optional route information
foreach (var info in routeObject.GetType().GetProperties())
{
routeData.Values.Add(info.Name, info.GetValue(routeObject, null));
}

var cai = new ControllerActionInvoker();

var requestContext = new RequestContext(httpContext, routeData);

var controllerContext = new ControllerContext(requestContext, controller);

// Slightly hackish, but is needed to get everything to work
// This seems to be the way that MVC does it as well.
controllerContext.Controller.ControllerContext = controllerContext;

cai.InvokeAction(controllerContext, actionName);
}

private static Controller GetController(string controllerName)
{
var type = Type.GetType(string.Format(&quot;{0}.{1}Controller&quot;, NameSpace, controllerName));
if (type == null)
return null;

var controller = Activator.CreateInstance(type, false) as Controller;
return controller;
}
}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lincoln.se/2011/04/17/upgrading-a-web-forms-web-appliction-to-mvc-3-evolution-style/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bubbel-bobbel</title>
		<link>http://blog.lincoln.se/2011/04/12/bubbel-bobbel/</link>
		<comments>http://blog.lincoln.se/2011/04/12/bubbel-bobbel/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 18:46:34 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[fest]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hemma]]></category>

		<guid isPermaLink="false">http://blog.lincoln.se/?p=382</guid>
		<description><![CDATA[I lördags vankades det fest i det andra Solnaitiska residenset. Vi fick celebert besök från Malmö på fredagkvällen och lördag dag ägnades åt att preppa för kvällen. På väg ner till Solna Centrum råkade vi smitade in på en nyöppnad lågprisbutik och väl där föll vi pladask för ett par extremt kitschiga glas/vaser. Fantastiska. Vi [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lincoln.se/wp-content/uploads/bild-1-e1302633222696.jpg"><img class="alignright size-thumbnail wp-image-383" style="padding: 5px; float: right;" title="Kitschigt glas" src="http://blog.lincoln.se/wp-content/uploads/bild-1-e1302633222696-112x150.jpg" alt="" width="112" height="150" /></a> I lördags vankades det fest i det andra Solnaitiska residenset. Vi fick celebert besök från Malmö på fredagkvällen och lördag dag ägnades åt att preppa för kvällen. På väg ner till Solna Centrum råkade vi smitade in på en nyöppnad lågprisbutik och väl där föll vi pladask för ett par extremt kitschiga glas/vaser. Fantastiska.</p>
<p>Vi blev så fulla av energi av glasen att det inte gick att stoppa idéflödet. Första idén var förstås (förstås!) att skaffa fejkiskuber med belysning i, men det visade sig att Teknikmagasinet inte hade några. Däremot hade de fina ljuspinnar som man knäcker till och så lyser de i två timmar. Finemang!</p>
<p>Nästa fina idé var förstås att skaffa kolsyreis för att få den rätta bubblande känslan &#8211; sagt och gjort, vi ringde isjouren och kollade läget. Inga problem, de fanns i Bromma och vi kunde hämta fem kg torris direkt. Splendid.</p>
<p><a href="http://blog.lincoln.se/wp-content/uploads/bild-2.jpg"><img class="alignright size-thumbnail wp-image-384" style="padding: 5px; float: right;" title="Toxic" src="http://blog.lincoln.se/wp-content/uploads/bild-2-e1302633680161-112x150.jpg" alt="" width="112" height="150" /></a>Sen var det ju bara frågan om innehåll i glaset, men där ville vi inte överspänna oss så vi nöjde oss med vanlig grogg spetsad med karamellfärg. Underskatta inte karamellfärg.</p>
<p>Hursomhelst, när festen väl började hade Johan och jag släpat dit en skål med bokhyllebelysning i, en bålskål ovanpå för kolsyreis och färgat vatten och sedan ovanpå det en tillbringare med grogg. Great success.</p>
<p>Vi avslutar med en <a href="http://www.youtube.com/watch?v=tegg-2V4jR8">film på youtube</a> med bara kolsyreis och vatten. Och bubbel. Och bobbel.</p>
<p>Jag känner att det enda problemet är att försöka toppa detta till hopflyttningsfesten&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lincoln.se/2011/04/12/bubbel-bobbel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Belysningsprojektet</title>
		<link>http://blog.lincoln.se/2009/10/27/belysningsprojektet/</link>
		<comments>http://blog.lincoln.se/2009/10/27/belysningsprojektet/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 21:08:21 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[hemma]]></category>

		<guid isPermaLink="false">http://blog.lincoln.se/?p=308</guid>
		<description><![CDATA[Den skarpögde läsaren av mina facebook- eller twitterstatusar har  säkert sett att jag pysslat en del med belysning på det sistone, så jag tänkte dela med mig av det nuvarande resultatet, som alltså har blivit ett belysningspanorama. Kommentarer på implementationen: Alltihop manövreras med fjärrkontroll, annars skulle jag aldrig orka att tända och släcka alla lampor&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Den skarpögde läsaren av mina facebook- eller twitterstatusar har  säkert sett att jag pysslat en del med belysning på det sistone, så jag tänkte dela med mig av det nuvarande resultatet, som alltså har blivit ett <a href="http://blog.lincoln.se/wp-content/uploads/pano.jpg"> belysningspanorama</a>.</p>
<p>Kommentarer på implementationen:</p>
<p>Alltihop manövreras med fjärrkontroll, annars skulle jag aldrig orka att tända och släcka alla lampor&#8230;</p>
<p>Clas Ohlsons blombelysningar är riktigt bra (uplightsen i mina krukväxter).</p>
<p>Clas Ohlsons led-slang (ej tända på bilden) ser ut som lysrör i ljusvärme räknat. Eller frånvaro av ljusvärme. De ligger alltså på de båda översta bokhyllorna bakom böckerna och är tänkta att sprida ljus genom att använda stuckaturen som diffusor. Jag tror planen funkar, måste bara hitta rätt värme på ljuset. Förmodligen skulle nån slags ljulgransslinga funka, eller vad som helst med vanliga glödlampor.</p>
<p>Det blir jäkligt mycket elsladd, förgreningsdosor och fjärrmottagare.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lincoln.se/2009/10/27/belysningsprojektet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ladda hem Sommar i P1</title>
		<link>http://blog.lincoln.se/2007/07/22/ladda-hem-sommar-i-p1/</link>
		<comments>http://blog.lincoln.se/2007/07/22/ladda-hem-sommar-i-p1/#comments</comments>
		<pubDate>Sun, 22 Jul 2007 19:27:54 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[musik]]></category>

		<guid isPermaLink="false">http://blog.lincoln.se/2007/07/22/ladda-hem-sommar-i-p1/</guid>
		<description><![CDATA[Sommar i P1 är en riktig sommarklassiker, men det är ju sällan man har tid (eller minne) att lyssna på dem när programmen faktiskt går. SR har då lagt upp ett arkiv med de fullständiga programmen, men man kan bara komma åt dem inom 30 dagar från att de sänts och man kan bara streama [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sr.se/p1/sommar" title="SR" target="_blank">Sommar i P1</a> är en riktig sommarklassiker, men det är ju sällan man har tid (eller minne) att lyssna på dem när programmen faktiskt går. SR har då lagt upp ett arkiv med de fullständiga programmen, men man kan bara komma åt dem inom 30 dagar från att de sänts och man kan bara streama ljudet, dvs inte ladda hem det.</p>
<p>Om man inte gör som jag, och skriver en liten kodsnutt som löser biffen. Jag passade på att använda ett för mig nytt programspråk, Python, använde några moduler som underlättar parsning och hemladdning av hemsidor, svor en smula, svor lite till och sen fungerade det faktiskt. Så nu har jag alla hittills sända Sommarprogram 2007 på min hårddisk. De ska jag lyssna på i höst, när jag behöver det.</p>
<p>Som vanligt krävs det en bra deadline för att få klart ett projekt. I det här fallet så var det 30-dagars-gränsen som snart slår till. Tack för motivationen, SR.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lincoln.se/2007/07/22/ladda-hem-sommar-i-p1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fondval</title>
		<link>http://blog.lincoln.se/2007/06/16/fondval/</link>
		<comments>http://blog.lincoln.se/2007/06/16/fondval/#comments</comments>
		<pubDate>Sat, 16 Jun 2007 18:03:17 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[prylar]]></category>

		<guid isPermaLink="false">http://blog.lincoln.se/2007/06/16/fondval/</guid>
		<description><![CDATA[I morse funderade jag på om jag inte skulle skriva ihop nåt litet program som väljer fonder, utifrån historiska data, åt mig. Steg 1: Hitta historiska data över fondkurser.  Check. Jag laddade hem filerna längst ner på sidan, packade upp. Steg 2: Formatera datat till nåt vettigare format. Steg 2a: Eftersom jag är sql-nörd föll [...]]]></description>
			<content:encoded><![CDATA[<p>I morse funderade jag på om jag inte skulle skriva ihop nåt litet program som väljer fonder, utifrån historiska data, åt mig.</p>
<p>Steg 1: Hitta <a href="https://secure.ppm.nu/tpp/valuechange/3:207;:1:1;200161,201558;:" title="PPM" target="_blank">historiska data över fondkurser</a>.  Check. Jag laddade hem filerna längst ner på sidan, packade upp.</p>
<p>Steg 2: Formatera datat till nåt vettigare format.</p>
<p>Steg 2a: Eftersom jag är sql-nörd föll valet på <a href="http://www.microsoft.com/sql" title="Microsoft" target="_blank">SQL Server 2005 Express Edition</a> (gratis är gott, nollan). Installerade utan problem. Hade redan Management Studio Expres installerat, och efter lite knåp lyckades jag ansluta till min 2005-server. Tips: servern heter .\sqlexpress. Inte så logiskt. Jag skapade en ny databas, &#8221;fonder&#8221;.</p>
<p>Steg 2b: Jag försökte lista ur var de gömt DTS-paketet i 2005an. Man behövde tydligen ladda hem ett <a href="http://msdn.microsoft.com/vstudio/express/sql/download/" title="Microsoft" target="_blank">toolkit</a> och sen manuellt leta reda på dtswizard.exe. Smidigt, Microsoft.  Nåja, efter en stund hade jag installerat &#8221;Business Intelligence&#8221;-paketet, som det så fint heter. Över till själva importen.</p>
<p>Steg 2c: Pekade ut en av mina fondfiler från ppm i DTS-wizarden. Gjorde lämpliga inställningar för tabb-format och så vidare och körde igång scriptet. Allt fallerade. Nåt slags problem med textfälten som blev trunkerade. Så jag gav mig ut på internettet igen för att finna på råd. Och jodå, andra människor hade haft liknande problem. Man kunde inte bara i sql-transformen ange hur många tecken man ville ha, man var även tvungen att göra det under advanced options för textfilen. Genialt. Till slut lyckades jag börja importera, och då började det gå undan. Tills jag kom till den nästa sista filen i ppm-högen. Där hade ppm bestämt sig för ett helt annat format, så jag fick lista ut hur de två sista filerna egentligen var formaterade. Jag ska maila och klaga hos ppm.</p>
<p>Steg 3: Städa upp data. Jag skrev lite sql-frågor för att få bort dubletter ur databasen och normaliserade densamma.  Plockade bort lite ointressant information för att minska storleken på databasen. Till slut hade jag så allt rådata färdigt, lite drygt en miljon rader med kursdata från slutet av 2000. Halleluja!</p>
<p>Steg 4: Några sql-frågor och trix senare hade jag fått ihop en funktion som jag kan mata med parametrar för att prova olika fondbytarstrategier.</p>
<p>Steg 5:  Skrev ett vbs-script för sköta om de virtuella fondbytena och provde olika parametrar till mina sql-frågor. Beslutade mig för att låta varje fondbyte kosta 1%.</p>
<p>En konfiguration av parametrar ger mig 25% avkastning per år de senaste fem åren. Premiesparfonden, defaultfonden, har gett ca 6% de senaste fem åren. Mina egna ppm-fonder har gett mig 20% årlig avkastning. Inte så pjåkigt, eller? Nu är ju bara frågan om jag ska byta strategi till den den av programmet utpekade optimala eller inte?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lincoln.se/2007/06/16/fondval/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jobbsökarsajter</title>
		<link>http://blog.lincoln.se/2007/06/05/jobbsokarsajter/</link>
		<comments>http://blog.lincoln.se/2007/06/05/jobbsokarsajter/#comments</comments>
		<pubDate>Tue, 05 Jun 2007 08:42:16 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[jobb]]></category>

		<guid isPermaLink="false">http://blog.lincoln.se/2007/06/05/jobbsokarsajter/</guid>
		<description><![CDATA[När man ger sig in i jobbsökeridjungeln och tar sig till diverse jobbportaler (vedervärdigt ord) inser man snabbt att det behövs nån slags gemensam standard. Varje sajt har sina egna kryssrutor, formulär och annat bjäfs för att fylla i exakt hur bra man är på armeniska eller om man är en jävel på att lösa [...]]]></description>
			<content:encoded><![CDATA[<p>När man ger sig in i jobbsökeridjungeln och tar sig till diverse jobbportaler (vedervärdigt ord) inser man snabbt att det behövs nån slags gemensam standard. Varje sajt har sina egna kryssrutor, formulär och annat bjäfs för att fylla i exakt hur bra man är på armeniska eller om man är en jävel på att lösa sudoku. Dags för ett nytt hack: &#8221;Jobbsökarsajtifyllaragenten&#8221;! Givetvis måste man först fylla i sina data till agenten&#8230;</p>
<p><a href="http://www.monster.se" title="Monster" target="_blank">Monster.se</a> har numera lyckats fixa en word-cv-importör som förstår tabeller. Ett klart steg framåt. <a href="http://www.stepstone.se" title="Stepstone" target="_blank">Stepstone.se</a> tycker att man ska fylla i datum på amerikanskt format.  Proffsigt.  <a href="http://www.dfind.se" title="Dfind" target="_blank">Dfind.se</a> har ett sista steg med olika frågor om erfarenhet. Jag tror de flesta frågor och svar var felstavade. Pluspoäng för det ambitiösa försöket att automattolka word-cv:t till sitt egna formulärformat, men det funkade inte speciellt bra, så juryn drar av poängen igen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lincoln.se/2007/06/05/jobbsokarsajter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SJ-optimering</title>
		<link>http://blog.lincoln.se/2007/05/30/sj-optimering/</link>
		<comments>http://blog.lincoln.se/2007/05/30/sj-optimering/#comments</comments>
		<pubDate>Wed, 30 May 2007 13:27:01 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[resor]]></category>

		<guid isPermaLink="false">http://blog.lincoln.se/2007/05/30/sj-optimering/</guid>
		<description><![CDATA[SJ har nu lanserat sitt bonusprogram för trogna kunder; SJ Prio. Jättefint. Man säger bland annat att SJ går så bra nu att man vill ge tillbaka lite till kunderna. Jag har lite andra radikala förslag: sänk priserna. Kom i tid. Jag har länge funderat på att skriva ett litet hack som optimerar tågbiljetter hos [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sj.se" title="SJ" target="_blank">SJ</a> har nu lanserat sitt bonusprogram för trogna kunder; SJ Prio. Jättefint. Man säger bland annat att SJ går så bra nu att man vill ge tillbaka lite till kunderna. Jag har lite andra radikala förslag: sänk priserna. Kom i tid.</p>
<p>Jag har länge funderat på att skriva ett litet hack som optimerar tågbiljetter hos SJ. När man söker hos SJ på populära sträckor (och man är givetvis jäkligt sent ute) så brukar det vara fullt på hela sträckan, men det finns biljetter på alla delsträckor så att det går att pussla ihop sin resa ändå. Hacket ska givetvis också optimera på pris. Det finns ju mer än ett trick hos SJ att utnyttja; till exempel kostar en resa Nrkpg- Gbg mindre om man beställer den som Lkph -Gbg i stället, som ändå tar rutten via Norrköping.</p>
<p>När jag är mer frustrerad än vanligt över SJ brukar nya idéer och features dyka upp till det planerade hacket, men jag orkar aldrig genomföra det. SJs sajt är så jäkla seg att väntetiden i utvecklingen skulle döda hackglädjen. Konspirationsteori: Det är förmodligen meningen också.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lincoln.se/2007/05/30/sj-optimering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

