<?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>IOCORE &#187; Alexander Nyquist</title>
	<atom:link href="http://iocore.se/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://iocore.se</link>
	<description>C#, PHP, Shell scripts m.m</description>
	<lastBuildDate>Fri, 14 Oct 2011 23:42:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ASP.NET MVC &#8211; komprimera html med actionfilter</title>
		<link>http://iocore.se/utveckling/aspnet-mvc-komprimera-html-med-actionfilter/</link>
		<comments>http://iocore.se/utveckling/aspnet-mvc-komprimera-html-med-actionfilter/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 15:56:38 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[asp.net-mvc]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=429</guid>
		<description><![CDATA[Genom att komprimera sin html kan man spara åtskillig datamängd. Jag tänkte här dela med mig av ett Actionfilter till ASP.NET MVC för att komprimera all output (genom att strippa bort onödig whitespace). Med nedanstående filter sparade jag 46kb per sidvisning, vilket blir relativt mycket om man har en välbesökt sida.
Först kommer definitionen av attributet [...]]]></description>
			<content:encoded><![CDATA[<p>Genom att komprimera sin html kan man spara åtskillig datamängd. Jag tänkte här dela med mig av ett Actionfilter till ASP.NET MVC för att komprimera all output (genom att strippa bort onödig whitespace). Med nedanstående filter sparade jag 46kb per sidvisning, vilket blir relativt mycket om man har en välbesökt sida.</p>
<p>Först kommer definitionen av attributet som används för att kunna anropa filtret.</p>
<div class="dean_ch" style="white-space: wrap;">
public class OptimizeHtmlOutputAttribute : ActionFilterAttribute<br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">void</span> OnResultExecuting<span class="br0">&#40;</span>ResultExecutingContext filterContext<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HttpResponseBase response = filterContext.<span class="me1">HttpContext</span>.<span class="me1">Response</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.<span class="me1">Filter</span> = new OptimizeHtmlFilter<span class="br0">&#40;</span>response.<span class="me1">Filter</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp;</div>
<p>Filtret består utav lite mer kod, dock är funktionen som utför allt arbete den överlagrade metoden &#8220;Write&#8221;.</p>
<div class="dean_ch" style="white-space: wrap;">
public class OptimizeHtmlFilter : Stream<br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; private readonly StringBuilder _responseHtml;<br />
&nbsp; &nbsp; &nbsp; &nbsp; private readonly Stream _responseStream;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public OptimizeHtmlFilter<span class="br0">&#40;</span>Stream inputStream<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _responseStream = inputStream;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _responseHtml = new StringBuilder<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co2">#region Filter overrides</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public StringBuilder ResponseHtml<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <span class="br0">&#123;</span> <span class="kw1">return</span> _responseHtml; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override bool CanRead<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw2">true</span>; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override bool CanSeek<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw2">true</span>; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override bool CanWrite<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="kw2">true</span>; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">long</span> Length<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="nu0">0</span>; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">long</span> Position <span class="br0">&#123;</span> get; set; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">void</span> Close<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _responseStream.<span class="me1">Close</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">void</span> Flush<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _responseStream.<span class="me1">Flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">long</span> Seek<span class="br0">&#40;</span><span class="kw4">long</span> offset, SeekOrigin origin<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> _responseStream.<span class="me1">Seek</span><span class="br0">&#40;</span>offset, origin<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">void</span> SetLength<span class="br0">&#40;</span><span class="kw4">long</span> length<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _responseStream.<span class="me1">SetLength</span><span class="br0">&#40;</span>length<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">int</span> Read<span class="br0">&#40;</span>byte<span class="br0">&#91;</span><span class="br0">&#93;</span> buffer, <span class="kw4">int</span> offset, <span class="kw4">int</span> count<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> _responseStream.<span class="me1">Read</span><span class="br0">&#40;</span>buffer, offset, count<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co2">#endregion</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; public override <span class="kw4">void</span> Write<span class="br0">&#40;</span>byte<span class="br0">&#91;</span><span class="br0">&#93;</span> buffer, <span class="kw4">int</span> offset, <span class="kw4">int</span> count<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">string</span> stringBuffer = Encoding.<span class="kw1">Default</span>.<span class="me1">GetString</span><span class="br0">&#40;</span>buffer<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var sb = new StringBuilder<span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var lines = stringBuffer.<span class="me1">Split</span><span class="br0">&#40;</span>Environment.<span class="me1">NewLine</span>.<span class="me1">ToCharArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, StringSplitOptions.<span class="me1">RemoveEmptyEntries</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach <span class="br0">&#40;</span>var line in lines<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sb.<span class="me1">Append</span><span class="br0">&#40;</span>line.<span class="me1">Trim</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer = Encoding.<span class="kw1">Default</span>.<span class="me1">GetBytes</span><span class="br0">&#40;</span>sb.<span class="me1">ToString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _responseStream.<span class="me1">Write</span><span class="br0">&#40;</span>buffer, <span class="nu0">0</span>, buffer.<span class="me1">Length</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp;</div>
<p>Filtret används sedan genom att dekorera Actions (eller för den delen controllers) med [OptimizeHtmlOutput], exempelvis:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="br0">&#91;</span>OptimizeHtmlOutput<span class="br0">&#93;</span><br />
public ActionResult Html<span class="br0">&#40;</span><span class="kw4">int</span> id<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;var report = _repository.<span class="me1">GetReport</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> View<span class="br0">&#40;</span><span class="st0">&quot;Csv&quot;</span>, new CsvReport<span class="br0">&#40;</span>report<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
<p>Dock bör man komma ihåg att inte optimera där det inte behövs. Man bör alltid profilera koden för att se vart flaskhalsarna sitter.</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/utveckling/aspnet-mvc-komprimera-html-med-actionfilter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 RC släppt</title>
		<link>http://iocore.se/allmant/visual-studio-2010-rc-slappt/</link>
		<comments>http://iocore.se/allmant/visual-studio-2010-rc-slappt/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 10:02:11 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=427</guid>
		<description><![CDATA[Äntligen är RC-versionen av Visual Studio 2010 släppt för oss &#8220;vanliga&#8221; utvecklare. Jag har nyss avinstallerat Beta 2:an och kan inte göra annat än att verkligen hålla tummarna för att RC-versionen är både snabbare och stabilare än betan.
Betaversionen läckte verkligen minne. Så fort man öppnade ett projekt med ett stort antal projekt (50+) eller försökte [...]]]></description>
			<content:encoded><![CDATA[<p>Äntligen är RC-versionen av Visual Studio 2010 släppt för oss &#8220;vanliga&#8221; utvecklare. Jag har nyss avinstallerat Beta 2:an och kan inte göra annat än att verkligen hålla tummarna för att RC-versionen är både snabbare och stabilare än betan.</p>
<p>Betaversionen läckte verkligen minne. Så fort man öppnade ett projekt med ett stort antal projekt (50+) eller försökte köra något större WPF-projekt med diverse kontroller och funktioner tog det ofta inte länge innan applikationen kraschade.</p>
<p>En annan (för mig) väldigt viktig punkt var att MVC 2 RC 2 fungerar att köra under Visual Studio 2010 RC. Detta har tidigare inte gått men skall nu vara möjligt.</p>
<p>Mer information:</p>
<p><a href="http://blogs.msdn.com/jasonz/archive/2010/02/10/visual-studio-2010-net-framework-4-rc-ready-for-general-download.aspx">Jason Zander om släppet av Visual Studio 2010 RC.</a></p>
<p><a href="http://haacked.com/archive/2010/02/10/installing-asp-net-mvc-2-rc-2-on-visual-studio.aspx">Phil Haack bloggpost om ASP.NET MVC 2 RC 2 på Visual Studio 2010 RC.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/visual-studio-2010-rc-slappt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hämta ut &#8220;slöa&#8221; queries ur mssql</title>
		<link>http://iocore.se/allmant/hamta-ut-sloa-queries-ur-mssql/</link>
		<comments>http://iocore.se/allmant/hamta-ut-sloa-queries-ur-mssql/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 08:14:37 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=424</guid>
		<description><![CDATA[Min morgon började roligt med en väldigt slö applikation. Jag misstänkte att flaskhalsen låg i databaslagret, och mycket riktigt hade jag rätt. Hur kom jag då fram till detta? Datbasservern jag använder är en MsSql 2008.
Efter lite sökande hittade jag en mycket användbar query för att plocka ur de dyraste frågorna som ställts mot databasen [...]]]></description>
			<content:encoded><![CDATA[<p>Min morgon började roligt med en väldigt slö applikation. Jag misstänkte att flaskhalsen låg i databaslagret, och mycket riktigt hade jag rätt. Hur kom jag då fram till detta? Datbasservern jag använder är en MsSql 2008.</p>
<p>Efter lite sökande hittade jag en mycket användbar query för att plocka ur de dyraste frågorna som ställts mot databasen sedan den startades:</p>
<div class="wp_syntax">
<div class="code">
<pre class="sql" style="font-family: monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> TOP <span style="color: #cc66cc;">20</span> SUBSTRING<span style="color: #66cc66;">(</span>qt<span style="color: #66cc66;">.</span>text<span style="color: #66cc66;">,</span> <span style="color: #66cc66;">(</span>qs<span style="color: #66cc66;">.</span>statement_start_offset<span style="color: #66cc66;">/</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span>
        <span style="color: #66cc66;">(</span><span style="color: #66cc66;">(</span>CASE qs<span style="color: #66cc66;">.</span>statement_end_offset
          WHEN <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span> THEN DATALENGTH<span style="color: #66cc66;">(</span>qt<span style="color: #66cc66;">.</span>text<span style="color: #66cc66;">)</span>
         ELSE qs<span style="color: #66cc66;">.</span>statement_end_offset
         END <span style="color: #66cc66;">-</span> qs<span style="color: #66cc66;">.</span>statement_start_offset<span style="color: #66cc66;">)</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">,</span>
qs<span style="color: #66cc66;">.</span>execution_count<span style="color: #66cc66;">,</span>
qs<span style="color: #66cc66;">.</span>total_logical_reads<span style="color: #66cc66;">,</span> qs<span style="color: #66cc66;">.</span>last_logical_reads<span style="color: #66cc66;">,</span>
qs<span style="color: #66cc66;">.</span>min_logical_reads<span style="color: #66cc66;">,</span> qs<span style="color: #66cc66;">.</span>max_logical_reads<span style="color: #66cc66;">,</span>
qs<span style="color: #66cc66;">.</span>total_elapsed_time<span style="color: #66cc66;">,</span> qs<span style="color: #66cc66;">.</span>last_elapsed_time<span style="color: #66cc66;">,</span>
qs<span style="color: #66cc66;">.</span>min_elapsed_time<span style="color: #66cc66;">,</span> qs<span style="color: #66cc66;">.</span>max_elapsed_time<span style="color: #66cc66;">,</span>
qs<span style="color: #66cc66;">.</span>last_execution_time<span style="color: #66cc66;">,</span>
qp<span style="color: #66cc66;">.</span>query_plan
<span style="color: #993333; font-weight: bold;">FROM</span> sys<span style="color: #66cc66;">.</span>dm_exec_query_stats qs
<span style="color: #993333; font-weight: bold;">CROSS</span> APPLY sys<span style="color: #66cc66;">.</span>dm_exec_sql_text<span style="color: #66cc66;">(</span>qs<span style="color: #66cc66;">.</span>sql_handle<span style="color: #66cc66;">)</span> qt
<span style="color: #993333; font-weight: bold;">CROSS</span> APPLY sys<span style="color: #66cc66;">.</span>dm_exec_query_plan<span style="color: #66cc66;">(</span>qs<span style="color: #66cc66;">.</span>plan_handle<span style="color: #66cc66;">)</span> qp
<span style="color: #993333; font-weight: bold;">WHERE</span> qt<span style="color: #66cc66;">.</span>encrypted<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">0</span>
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> qs<span style="color: #66cc66;">.</span>total_logical_reads <span style="color: #993333; font-weight: bold;">DESC</span></pre>
</div>
</div>
<p>Detta är ett väldigt smidigt sätt för att hitta flaskhalser i sin databas, en viktig detalj när man <a href="http://www.mediaanalys.se">arbetar med sökmotoroptimering</a>.</p>
<p>För er som använder MySql kan jag rekommendera motsvarigheten <a href="http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_log-slow-queries">log_slow_queries</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/hamta-ut-sloa-queries-ur-mssql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dependency Injection med PHP</title>
		<link>http://iocore.se/allmant/dependency-injection-med-php/</link>
		<comments>http://iocore.se/allmant/dependency-injection-med-php/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 15:53:11 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=413</guid>
		<description><![CDATA[Vid utveckling vill man alltid skapa så löst kopplade system som möjligt. Detta speciellt om man skriver enhetstester eller tillämpar testdriven utveckling. För att underlätta för sig själv skall man försöka följa de &#8220;SOLID&#8221;a principerna så gott det går.
D:et i SOLID står för Dependency Inversion, och betyder, enkelt sagt, att en klass inte skall vara [...]]]></description>
			<content:encoded><![CDATA[<p>Vid utveckling vill man alltid skapa så löst kopplade system som möjligt. Detta speciellt om man skriver enhetstester eller tillämpar testdriven utveckling. För att underlätta för sig själv skall man försöka följa de &#8220;SOLID&#8221;a principerna så gott det går.</p>
<p>D:et i SOLID står för Dependency Inversion, och betyder, enkelt sagt, att en klass inte skall vara hårt kopplad till en annan klass. För att lösa detta brukar man tillämpa en teknik som ofta kallas dependency injection, vilket innebär att klasser som skall instansieras får sina beroenden från den som instansierar klassen.</p>
<p>Ett exempel på en klass som inte följer Dependency Inversion är följande:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw2">&lt;?php</span><br />
<span class="kw2">class</span> HtmlParser<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> GetTitle<span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$downloader</span> = <span class="kw2">new</span> HtmlDownloader<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span> = <span class="re0">$downloader</span>-&gt;<span class="me1">download</span><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$title</span> = <a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st0">&#8216;~&lt;title&gt;(.*?)&lt;/title&gt;~&#8217;</span>, <span class="re0">$content</span>, <span class="re0">$match</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$match</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw2">?&gt;</span><br />
&nbsp;</div>
<p>Denna klassen har ett beroende av HtmlDownloader, vilket innebär att man inte kan återanvända klassen HtmlParser från ett annat ställe. Vad händer om vi istället för att ladda ner filen via HTTP vill hämta innehållet från en lokal fil? Då måste vi antingen skapa en ny klass för detta, eller en ny metod för att göra detta.</p>
<p>En annan, och bättre, lösning på detta är att låta klassen HtmlParser ta en klass som implementerar ett gemensamt interface, som inparameter i konstruktorn, till exempel:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw2">&lt;?php</span><br />
<span class="kw2">interface</span> IHtmlProvider<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">function</span> getHtml<span class="br0">&#40;</span><span class="re0">$path</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw2">class</span> LocalFileHtmlProvider implements IHtmlProvider<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">function</span> getHtml<span class="br0">&#40;</span><span class="re0">$path</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Läs och returnera från filsystemet</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw2">class</span> RemoteHtmlProvider implements IHtmlProvider<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">function</span> getHtml<span class="br0">&#40;</span><span class="re0">$path</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Ladda ner via HTTP</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw2">?&gt;</span><br />
&nbsp;</div>
<p>Detta gör att vi kan modifiera vår parser till att se ut enligt följande: </p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw2">&lt;?php</span><br />
<span class="kw2">class</span> HtmlParser<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$provider</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span>IHtmlProvider <span class="re0">$provider</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">provider</span> = <span class="re0">$provider</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> GetTitle<span class="br0">&#40;</span><span class="re0">$path</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span> = <span class="re0">$this</span>-&gt;<span class="me1">provider</span>-&gt;<span class="me1">getHtml</span><span class="br0">&#40;</span><span class="re0">$path</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$title</span> = <a href="http://www.php.net/preg_match"><span class="kw3">preg_match</span></a><span class="br0">&#40;</span><span class="st0">&#8216;~&lt;title&gt;(.*?)&lt;/title&gt;~&#8217;</span>, <span class="re0">$content</span>, <span class="re0">$match</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$match</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw2">?&gt;</span><br />
&nbsp;</div>
<p>Nu kan vi enkelt byta källa för vår html, och återanvända koden precis var vi vill, så länge får källa implementerar IHtmlProvider. Vill vi bygga en FtpHtmlProvider är detta inga som helst problem.</p>
<p>I ett kommande inlägg kommer jag visa en teknik som kallas för Inversion of Control, och är nära besläktat med Dependency Injection.</p>
<p>Externa länkar med mer informtion:</p>
<p><a href="http://en.wikipedia.org/wiki/Dependency_injection">Wikipedia om Dependency Injection</a></p>
<p><a href="http://en.wikipedia.org/wiki/Dependency_inversion_principle">Wikipedia om Dependency Inversion Principle</a></p>
<p><a href="http://en.wikipedia.org/wiki/Solid_(Object_Oriented_Design)">Wikipedia om SOLID Principles</a></p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/dependency-injection-med-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Användares statusuppdateringar på twitter</title>
		<link>http://iocore.se/allmant/anvandares-statusuppdateringar-pa-flickr/</link>
		<comments>http://iocore.se/allmant/anvandares-statusuppdateringar-pa-flickr/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:11:01 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=403</guid>
		<description><![CDATA[Tänkte dumpa en kodsnutt som hämtar en användares statusuppdateringar på twitter. No more no less.

$data = file_get_contents&#40;&#8216;http://twitter.com/statuses/user_timeline/26553013.json&#8217;&#41;;
$json = json_decode&#40;$data&#41;;
foreach&#40;$json as $message&#41;
&#123;
&#160; &#160; if&#40;$message-&#62;in_reply_to_screen_name === null&#41;
&#160; &#160; &#160; &#160; echo $message-&#62;text;
&#125;
&#160;
Byt ut idt(26553013) mot den användaren du vill hämta datan för.
]]></description>
			<content:encoded><![CDATA[<p>Tänkte dumpa en kodsnutt som hämtar en användares statusuppdateringar på twitter. No more no less.</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="re0">$data</span> = <a href="http://www.php.net/file_get_contents"><span class="kw3">file_get_contents</span></a><span class="br0">&#40;</span><span class="st0">&#8216;http://twitter.com/statuses/user_timeline/26553013.json&#8217;</span><span class="br0">&#41;</span>;<br />
<span class="re0">$json</span> = json_decode<span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span>;</p>
<p><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$json</span> <span class="kw1">as</span> <span class="re0">$message</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$message</span>-&gt;<span class="me1">in_reply_to_screen_name</span> === <span class="kw2">null</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$message</span>-&gt;<span class="me1">text</span>;<br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
<p>Byt ut idt(26553013) mot den användaren du vill hämta datan för.</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/anvandares-statusuppdateringar-pa-flickr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listen up!</title>
		<link>http://iocore.se/allmant/listen-up/</link>
		<comments>http://iocore.se/allmant/listen-up/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 10:48:43 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=399</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://iocore.se/wp-content/uploads/2009/03/greatest_programming_tip_ever_pic.jpg"><img class="alignnone size-medium wp-image-400" title="greatest_programming_tip_ever_pic" src="http://iocore.se/wp-content/uploads/2009/03/greatest_programming_tip_ever_pic-300x231.jpg" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/listen-up/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FireUnit &#8211; Smidigare enhetstestning i JavaScript</title>
		<link>http://iocore.se/allmant/fireunit-smidigare-enhetstestning-i-javascript/</link>
		<comments>http://iocore.se/allmant/fireunit-smidigare-enhetstestning-i-javascript/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 09:18:41 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=394</guid>
		<description><![CDATA[För oss som gillar enhetstestning har det nu kommit en riktigt smidigt plugin till Firebug &#8211; FireUnit. Pluginet möjliggör smidigare enhetstestning för JavaScript, vilket tidigare har varit ganska trivialt.
FireUnit är som sagt helt integrerat i FireBug, och placerar vid installation en ny flik vid namn &#8216;Test&#8217; i fliksystemet.
Någonting som jag inte gillar är vissa namnkonventioner, [...]]]></description>
			<content:encoded><![CDATA[<p>För oss som gillar enhetstestning har det nu kommit en riktigt smidigt plugin till Firebug &#8211; <a href="http://fireunit.org/">FireUnit</a>. Pluginet möjliggör smidigare enhetstestning för JavaScript, vilket tidigare har varit ganska trivialt.</p>
<p>FireUnit är som sagt helt integrerat i FireBug, och placerar vid installation en ny flik vid namn &#8216;Test&#8217; i fliksystemet.</p>
<p>Någonting som jag inte gillar är vissa namnkonventioner, till exempel har man bytt ut ordet &#8216;assert&#8217; mot &#8216;ok&#8217;, vilket kan ses som väldigt trivialt, men enligt mig bör följa de andra unit-testningramverken(?).</p>
<p>För mer information om FireUnit hänvisar jag till skaparen John Resig&#8217;s <a href="http://ejohn.org/blog/fireunit/">blogg</a>.</p>
<p><img class="alignnone" title="FireUnit" src="http://fireunit.org/fireunit-ui-thumb.png" alt="" width="520" height="212" /></p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/fireunit-smidigare-enhetstestning-i-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Serialisera array till XML</title>
		<link>http://iocore.se/php/serialiseara-array-till-xml/</link>
		<comments>http://iocore.se/php/serialiseara-array-till-xml/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 08:24:45 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=389</guid>
		<description><![CDATA[För tillfället sitter jag och skriver en REST-service för en viss tjänst, och var i behov av en klass eller funktion för att serialisera en php-array till XML. Efter lite googlande hade jag dock inte hittat någon simpel klass för att göra detta, förrutom en PEAR-klass. Dock valde jag att inte använda denna då det [...]]]></description>
			<content:encoded><![CDATA[<p>För tillfället sitter jag och skriver en REST-service för en viss tjänst, och var i behov av en klass eller funktion för att serialisera en php-array till XML. Efter lite googlande hade jag dock inte hittat någon simpel klass för att göra detta, förrutom en PEAR-klass. Dock valde jag att inte använda denna då det inte finns stöd för PEAR där tjänsten kommer att hostas. Jag bestämde mig då för att knåpa ihop en egen klass, och detta är resultatet:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw2">Class</span> XmlSerializer <span class="kw2">Extends</span> XmlWriter<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; protected <span class="re0">$rootnode</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$rootnode</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Use memory output</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">openMemory</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">setIndent</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* Use four spaces as indent */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">setIndentString</span><span class="br0">&#40;</span><a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span>0&#215;20<span class="br0">&#41;</span> .<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span>0&#215;20<span class="br0">&#41;</span> .<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span>0&#215;20<span class="br0">&#41;</span> .<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/chr"><span class="kw3">chr</span></a><span class="br0">&#40;</span>0&#215;20<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">rootnode</span> = <span class="re0">$rootnode</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">startElement</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">rootnode</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> startElement<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">startElement</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">rootnode</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> <a href="http://www.php.net/serialize"><span class="kw3">serialize</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$data</span> <span class="kw1">as</span> <span class="re0">$key</span> =&gt; <span class="re0">$value</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$value</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">startElement</span><span class="br0">&#40;</span><span class="re0">$key</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">serialize</span><span class="br0">&#40;</span><span class="re0">$value</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">endElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">continue</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">writeElement</span><span class="br0">&#40;</span><span class="re0">$key</span>, <span class="re0">$value</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="co1">// Override function so that we dont need to call endElement by ourselves</span><br />
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> output<span class="br0">&#40;</span><span class="re0">$flush</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; parent::<span class="me2">endElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> parent::<span class="me2">outputMemory</span><span class="br0">&#40;</span><span class="re0">$flush</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
<p>Som ni ser är den välidgt, väldigt simpel, enbart med funktioner för att serialisera en array till php &#8211; inte vice versa. Kanske något att bygga in stöd för dock.</p>
<p>Här är ett simpelt exempel:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="re0">$data</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; <span class="st0">&#8217;status&#8217;</span> =&gt; <span class="st0">&#8216;Success&#8217;</span>,<br />
&nbsp; &nbsp; <span class="st0">&#8216;data&#8217;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;username&#8217;</span> =&gt; <span class="st0">&#8216;Alexander Nyquist&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;password&#8217;</span> =&gt; <span class="st0">&#8216;password&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;apikey&#8217;</span> =&gt; <a href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#41;</span><br />
<span class="br0">&#41;</span>;</p>
<p><span class="re0">$serializer</span> = <span class="kw2">new</span> XmlSerializer<span class="br0">&#40;</span><span class="st0">&#8216;response&#8217;</span><span class="br0">&#41;</span>;<br />
<span class="re0">$serializer</span>-&gt;<span class="me1">serialize</span><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span>;<br />
<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$serializer</span>-&gt;<span class="me1">output</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span>;<br />
&nbsp;</div>
<p>Ovan resulterar i följande XML:</p>
<div class="dean_ch" style="white-space: wrap;">
&lt;response&gt;<br />
&nbsp; &nbsp; &lt;status&gt;Error&lt;/status&gt;<br />
&nbsp; &nbsp; &lt;data&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;username&gt;Alexander Nyquist&lt;/username&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;password&gt;password&lt;/password&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;apikey&gt;5f4dcc3b5aa765d61d8327deb882cf99&lt;/apikey&gt;<br />
&nbsp; &nbsp; &lt;/data&gt;<br />
&lt;/response&gt;<br />
&nbsp;</div>
<p>Tack o hej!</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/php/serialiseara-array-till-xml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Simpelt shell-script för att dumpa ut http headers</title>
		<link>http://iocore.se/allmant/simpelt-shell-script-for-att-dumpa-ut-http-headers/</link>
		<comments>http://iocore.se/allmant/simpelt-shell-script-for-att-dumpa-ut-http-headers/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 13:05:41 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=385</guid>
		<description><![CDATA[I jobbet är jag ständigt beroende av att kontrollera http headers för diverse sidor. Som vanligt använder jag live-http-headers, dock började dyka upp konstig respons som inte stämde överens alls med andra verktyg man använder för att kontrollera headersen.
Efter lite snabbt telnettande konstaterade jag att live-http-headers ibland skickar felaktig data, och skrev ihop ett simpelt [...]]]></description>
			<content:encoded><![CDATA[<p>I jobbet är jag ständigt beroende av att kontrollera http headers för diverse sidor. Som vanligt använder jag live-http-headers, dock började dyka upp konstig respons som inte stämde överens alls med andra verktyg man använder för att kontrollera headersen.</p>
<p>Efter lite snabbt telnettande konstaterade jag att live-http-headers ibland skickar felaktig data, och skrev ihop ett simpelt shell script som använder lynx för att dumpa ut response-headersen för en angiven sida.</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="co2">#/!bin/bash</span><br />
lynx -head -dump $<span class="nu0">1</span><br />
&nbsp;</div>
<p>Visst, man skulle alltid kunna lägga till ett bash-alias.</p>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/simpelt-shell-script-for-att-dumpa-ut-http-headers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simpelt wordpress plugin för att dölja dashboarden</title>
		<link>http://iocore.se/allmant/simpelt-wordpress-plugin-for-att-dolja-dashboarden/</link>
		<comments>http://iocore.se/allmant/simpelt-wordpress-plugin-for-att-dolja-dashboarden/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 15:03:33 +0000</pubDate>
		<dc:creator>Alexander Nyquist</dc:creator>
				<category><![CDATA[Allmänt]]></category>

		<guid isPermaLink="false">http://iocore.se/?p=381</guid>
		<description><![CDATA[Var idag på jobbet i behov av att dölja dashboarden för användare, detta utan att in och pilla i kärnan. Resultatet efter 3 minuters intensivt kodande kan ni själva beskåda nedan:

&#60;?php
/*
Plugin Name: Dashboard Hider
Description: This plugins hides the motherfucking dashboard, yeah.
Author: Alexander Nyquist
Version: 1.0
*/
function hide_dashboard&#40;&#41;
&#123;
&#160; &#160; global $parent_file;
&#160; &#160; 
&#160; &#160; if&#40;$parent_file === &#8216;index.php&#8217;&#41;
&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Var idag på jobbet i behov av att dölja dashboarden för användare, detta utan att in och pilla i kärnan. Resultatet efter 3 minuters intensivt kodande kan ni själva beskåda nedan:</p>
<div class="dean_ch" style="white-space: wrap;">
<span class="kw2">&lt;?php</span><br />
<span class="coMULTI">/*<br />
Plugin Name: Dashboard Hider<br />
Description: This plugins hides the motherfucking dashboard, yeah.<br />
Author: Alexander Nyquist<br />
Version: 1.0<br />
*/</span></p>
<p><span class="kw2">function</span> hide_dashboard<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$parent_file</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$parent_file</span> === <span class="st0">&#8216;index.php&#8217;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">?&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; document.location.href = <span class="st0">&#8216;edit-pages.php&#8217;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">&lt;/script&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;meta http-equiv=<span class="st0">&quot;refresh&quot;</span> content=<span class="st0">&quot;0;url=edit-pages.php&quot;</span>&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">&lt;?php</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p>add_action<span class="br0">&#40;</span><span class="st0">&#8216;admin_head&#8217;</span>, <span class="st0">&#8216;hide_dashboard&#8217;</span><span class="br0">&#41;</span>;<br />
<span class="kw2">?&gt;</span><br />
&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://iocore.se/allmant/simpelt-wordpress-plugin-for-att-dolja-dashboarden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

