<?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>Hinnerup Net ApS</title>
	<atom:link href="http://www.hinnerup.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hinnerup.net</link>
	<description>Udvikling - fra backend til frontend</description>
	<lastBuildDate>Fri, 22 Jan 2010 18:12:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>da</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Click tracking</title>
		<link>http://www.hinnerup.net/2010/01/22/click-tracking/</link>
		<comments>http://www.hinnerup.net/2010/01/22/click-tracking/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 12:37:31 +0000</pubDate>
		<dc:creator>Lars Støttrup</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Click tracking]]></category>
		<category><![CDATA[Trafic analysis]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=828</guid>
		<description><![CDATA[Vi har installeret CrazyEgg click tracking på hinnerup.net.
CrazyEgg er et værktøj til at visualisere brugernes færden på ens site, og indeholder smarte funktioner som: Click-overlay, Heatmap og Confetti.
Man indsætter en enkelt linje kode på de sider der skal trackes:

&#60;script src=&#34;http://s3.amazonaws.com/new.cetrk.com/pages/scripts/0010/6701.js&#34;
type=&#34;text/javascript&#34;&#62;&#60;/script&#62;

Derefter opsættes de sider der skal trackes i CrazyEgg:

Efter nogle dage begynder statistikken at være på [...]]]></description>
			<content:encoded><![CDATA[<p>Vi har installeret <a href="http://www.crazyegg.com/">CrazyEgg</a> click tracking på <a href="http://hinnerup.net">hinnerup.net</a>.</p>
<p>CrazyEgg er et værktøj til at visualisere brugernes færden på ens site, og indeholder smarte funktioner som: Click-overlay, Heatmap og Confetti.</p>
<p>Man indsætter en enkelt linje kode på de sider der skal trackes:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://s3.amazonaws.com/new.cetrk.com/pages/scripts/0010/6701.js&quot;</span>
type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Derefter opsættes de sider der skal trackes i CrazyEgg:</p>
<div style="text-align:center"><a href="/wp-content/uploads/2010/01/Hinnerup_crazyegg_ops_tning.png"><img src="/wp-content/uploads/2010/01/Hinnerup_crazyegg_ops_tning.png" alt="" title="CrazyEgg opsætning" width="525" class="aligncenter size-medium wp-image-841" style="border:none;" /></a></div>
<p>Efter nogle dage begynder statistikken at være på plads.</p>
<p>Her er de forskellige overlays.</p>
<p>Standard overlay:</p>
<div style="text-align:center"><a href="/wp-content/uploads/2010/01/Hinnerup_front_page.png"><img src="/wp-content/uploads/2010/01/Hinnerup_front_page.png" alt="" title="Standard overlay, CrazyEgg" width="525" class="aligncenter size-medium wp-image-843" style="border:none;" /></a></div>
<p>Heatmap:</p>
<div style="text-align:center"><a href="/wp-content/uploads/2010/01/Hinnerup_heatmap.png"><img src="/wp-content/uploads/2010/01/Hinnerup_heatmap.png" alt="" title="Heatmap overlay, CrazyEgg" width="525" class="aligncenter size-medium wp-image-845" style="border:none;" /></a></div>
<p>Confetti:</p>
<div style="text-align:center"><a href="/wp-content/uploads/2010/01/Hinnerup_time_to_click.png"><img src="/wp-content/uploads/2010/01/Hinnerup_time_to_click.png" alt="" title="Confetti overlay, CrazyEgg" width="525" class="aligncenter size-medium wp-image-848" style="border:none;" /></a></div>
<p>Standard overlayet giver os mulighed for at se hvor mange clicks et givet link har fået. Heatmap er rimeligt selvforklarende &#8211; den viser os hvor &#8220;populært&#8221; et link eller anden detalje er. Den mest interessante er Confetti, som har følgende indstillings-muligheder:</p>
<div style="text-align:center"><a href="/wp-content/uploads/2010/01/Options.png"><img src="/wp-content/uploads/2010/01/Options.png" alt="" title="Options, CrazyEgg" width="123" height="185" class="aligncenter size-full wp-image-850" style="border:none;" /></a></div>
<p>Alle disse overlays skulle sammenlagt give ens hjemmesidedesigner mulighed for at designe en mere brugervenlig oplevelse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2010/01/22/click-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brug ikke hverken Gmail eller Hotmail</title>
		<link>http://www.hinnerup.net/2010/01/07/brug-ikke-hverken-gmail-eller-hotmail/</link>
		<comments>http://www.hinnerup.net/2010/01/07/brug-ikke-hverken-gmail-eller-hotmail/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 09:29:35 +0000</pubDate>
		<dc:creator>Tobias Hinnerup</dc:creator>
				<category><![CDATA[Gode råd]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[mailserver]]></category>
		<category><![CDATA[MX]]></category>
		<category><![CDATA[nsloopkup]]></category>
		<category><![CDATA[SMTP]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=813</guid>
		<description><![CDATA[De sidste 14 dage har de to haft mindst een defekt mailserver i deres DNS rotation, hvilket effektivt fører til at det er umuligt at udtale sig om hvorvidt en modtager på domænerne kan/vil modtage mails man sender til dem. 
Kombineret med det faktum, at det kan konstateres at have været tilfældet temmelig mange gange [...]]]></description>
			<content:encoded><![CDATA[<p>De sidste 14 dage har de to haft mindst een defekt mailserver i deres DNS rotation, hvilket effektivt fører til at det er umuligt at udtale sig om hvorvidt en modtager på domænerne kan/vil modtage mails man sender til dem. </p>
<p><a style="float: right;" href="http://www.hinnerup.net/wp-content/uploads/2010/01/New-Picture-1.jpg"><img src="http://www.hinnerup.net/wp-content/uploads/2010/01/New-Picture-1-208x300.jpg" alt="" title="nslookup type=mx hotmail.com" width="208" height="300" class="aligncenter size-medium wp-image-814" /></a>Kombineret med det faktum, at det kan konstateres at have været tilfældet temmelig mange gange over de seneste par år, samt at det (selvsagt) er 100% umuligt at komme igennem med en fejlmelding til de to giganter, kan jeg vanskeligt konkludere andet end at det er en usædvanlig dårlig idé at benytte deres services, med mindre man er indstillet på at acceptere at mails periodisk og uden meldinger eller advarsler vil gå tabt. </p>
<p>Dog vil gælde, at afsenderen af mails der ikke afleveres må forventes at modtage en tilbagemelding om, at den/de pågældende mails ikke kunne afleveres &#8211; men hvis ikke afsender derefter finder en anden måde at kontakte modtager på, og orienterer om problemet, vil man aldrig blive opmærksom på at der er noget galt.</p>
<p>Supplerende ovenstående, for at give det lidt mere tekniske indblik, er mailserver-administrationen for systemer så store som de to, naturligvis ikke en enkel og simpel sag. Jævnfør det her indsatte øjebliksbillede af et opslag med nslookup, fordeler Hotmail sine mailservere over 5 indgange, hver med cirka 10 IP numre. Hvorvidt det i praksis bliver til 50 servere er vanskeligt at udtale sig om udefra &#8211; men det er indlysende at kompleksiteten af en sådan opsætning ikke er ubetydelig.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2010/01/07/brug-ikke-hverken-gmail-eller-hotmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Y2k+10 bug</title>
		<link>http://www.hinnerup.net/2010/01/05/y2k10-bug/</link>
		<comments>http://www.hinnerup.net/2010/01/05/y2k10-bug/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 16:36:23 +0000</pubDate>
		<dc:creator>Michael Schøler</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Encoding]]></category>
		<category><![CDATA[Y2k]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=791</guid>
		<description><![CDATA[Knapt er vi kommet os over panikken omkring år 2000-problemet, også kendt som Y2k, der nærmest truede med verdens undergang i en sådan skala at det gør selv 2012 filmen til skamme, inden at vi rammes af en ny katastrofe; 2010 årsskiftet!

Som man kan læse i denne artikel, er Dankort systemet i ca. 1.600 P-automater [...]]]></description>
			<content:encoded><![CDATA[<p>Knapt er vi kommet os over panikken omkring år <a href="http://da.wikipedia.org/wiki/%C3%85r_2000-problemet">2000-problemet</a>, også kendt som <a href="http://da.wikipedia.org/wiki/Y2K">Y2k</a>, der nærmest truede med verdens undergang i en sådan skala at det gør selv <a href="http://www.imdb.com/title/tt1190080/">2012 filmen</a> til skamme, inden at vi rammes af en ny katastrofe; 2010 årsskiftet!</p>
<div style="text-align:center"><img src="http://www.hinnerup.net/wp-content/uploads/2010/01/hinnerupnet_encoding.png" alt="" title="hinnerupnet_encoding" width="376" height="262" class="aligncenter size-full wp-image-795" /></div>
<p>Som man kan læse i <a href="http://ekstrabladet.dk/kup/dinepenge/article1277105.ece">denne artikel</a>, er Dankort systemet i ca. 1.600 P-automater i København, umiddelbart lige efter kl. 23.59 d. 31/12-2009, ophørt med at fungere til stor undren for folkene bag, og stor irritation for alle øvrige. </p>
<p>Det er en påstand herfra, at P-automat betalingssystemet der anvendes utvivlsomt er udviklet efter år 2000-problemet blev konstateret og løst.</p>
<p>Dels har det jo kørt upåklageligt da årstallet viste &#8220;00&#8243;, &#8220;01&#8243;, &#8220;02&#8243;, &#8220;03&#8243;, &#8230;, og &#8220;09&#8243;, og der ville nok først igen opstå problemer når der trilles over de &#8220;99&#8243; til &#8220;00&#8243; (lige som sidst). Desværre vippede det nye årstal <a href="http://nyhederne.tv2.dk/article/27577577/">ikke rundt til et &#8220;10&#8243;</a> som man vist havde regnet med, men istedet til &#8220;0A&#8221;, der er det <a href="http://da.wikipedia.org/wiki/Hexadecimale_talsystem">hexadecimale talsystems repræsentation</a> af decimaltallet 10. Det hexadecimale talsystem er et som computere har det ret godt med &#8211; en byte omfatter 8 bits, der dækker decimaltallene 0 til 255, eller hexadecimalt <a href="http://da.wikipedia.org/wiki/Byte">00-FF</a>. Og så gik maskineriet i selvsving, &#8220;0A&#8221; og &#8220;10&#8243; kunne ikke sammenholdes mellem den <a href="http://da.wikipedia.org/wiki/Gr%C3%A6nseflade_(teknologi)">grænseflade</a> der er mellem betalingssystemet og yderligere systemer. </p>
<p>Den anden vinkel på hvorfor P-automat betalingssystem må og skal være etableret efter Y2k er at det simpelthen ville være opdaget i 1999 også; decimaltallet 99 repræsenteres som 63 hexadecimalt. Mon ikke der havde været rod i et regnskab eller to, med bogføring af indkomster fra 1963 i år 1999 uden nogen form for renteindtægt eller forudgående poster med langsigtede krediteringer?</p>
<p>Hvis vi tænker lidt over hvorfor man efter en så voldsom omgang skruen på kode der vedrører datoer, alligevel er kommet frem til at holde årstallet i en byte og repræsentere denne talværdi i systemet hexadecimalt både internt og eksternt, ja så er min personlige konklusion helt klar. Tanken må have været at alle da bare skal se i en fart at få lært det hexadecimale talsystem. Det er jo over 2,5 gange mere fremtidssikret med hensyn til hvornår en ny Y2K fejl opstår, vi har jo med talrummet fra 0 til 255 at gøre og ikke kun 0 til 99. Desuden vil det fjerne enhver form for enkodnings- og/eller formatteringsproblematik der måtte være en gang for alle, ved ganske enkelt blot at anvende et fælles og maskinelt nemt behandlingsbart talsystem.</p>
<p>Snedigt! <img src='http://www.hinnerup.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Der er flere der er ramt af andre nye årstals problemer, blandt andet kan nævnes <a href="http://www.theregister.co.uk/2010/01/05/windows_mobe_bug/">Windows Mobile</a>. Her er problemet at SMS beskeder ankommer i 2010 som om de er sendt i 2016. Det skyldes samme problemstilling bare vendt på hovedet: &#8220;10&#8243; kommer ind, og behandles hexadecimalt, hvilket giver decimalværdien 16.</p>
<p>Alle SAP systemer er tilsyneladende også ramt af 2010 problemet, det kan man <a href="http://www.version2.dk/artikel/13388-alle-sap-installationer-ramt-af-aar-2010-problem">læse mere om her</a>.</p>
<p>Så husk det nu: <b>Enkodning, formattering og valg af datatyper er vigtigt.</b></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2010/01/05/y2k10-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strukturel processering af billeder</title>
		<link>http://www.hinnerup.net/2010/01/02/structural-image-processing/</link>
		<comments>http://www.hinnerup.net/2010/01/02/structural-image-processing/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 21:17:43 +0000</pubDate>
		<dc:creator>Michael Schøler</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Computer Vision]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Dilate]]></category>
		<category><![CDATA[Erosion]]></category>
		<category><![CDATA[Image Processing]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=753</guid>
		<description><![CDATA[Når billeder skal processeres programmatisk anvendes en matematisk metode der kaldes morfologiske transformationer (morphological transformations), mønster genkendelse (pattern recognition) og/eller egenskabs ekstraktion (feature extraction).
Her i juletiden har mange været påvirket af huller i asfalten langs eksempeltvist Vejle fjordbroen. Hvis vi begiver os ud i et tankeeksperiment er det med relativt simple billedbehandlingsalgoritmer &#8220;nemt&#8221; at detektere [...]]]></description>
			<content:encoded><![CDATA[<p>Når billeder skal processeres programmatisk anvendes en matematisk metode der kaldes <a href="http://en.wikipedia.org/wiki/Mathematical_morphology">morfologiske transformationer</a> (morphological transformations), <a href="http://en.wikipedia.org/wiki/Pattern_recognition">mønster genkendelse</a> (pattern recognition) og/eller <a href="http://en.wikipedia.org/wiki/Feature_extraction">egenskabs ekstraktion</a> (feature extraction).</p>
<p>Her i juletiden har mange været påvirket af huller i asfalten langs eksempeltvist <a href="http://stiften.dk/article/20091228/AAS/712289815/1002">Vejle fjordbroen</a>. Hvis vi begiver os ud i et tankeeksperiment er det med relativt simple billedbehandlingsalgoritmer &#8220;nemt&#8221; at detektere en betydelig andel af opbyggende huller og dermed kunne man forebyggende iværksætte udbedrende vejarbejde før et problem opstår.</p>
<p>Et eksempel kunne være anvendelse af <a href="http://en.wikipedia.org/wiki/Thresholding_(image_processing)">thresholding</a>, <a href="http://en.wikipedia.org/wiki/Erosion_(morphology)">erosion</a> og <a href="http://en.wikipedia.org/wiki/Dilation_(morphology)">dilation</a> på en stribe billeder taget af asfaltoverfladen på udvalgte vejstrækninger. For resten af denne artikel antages det, at sådanne billeder er tilgængelige.</p>
<p>Herunder vises en række billeder af asfaltoverflader hvor der er opstået minimale huller og sprækker, samt hvor alvorlige slaghuller forekommer og er delvist udbedrede. Ligeledes vises en normal asfalt overflade. Under hvert billede vises en morfologisk behandlet udgave, der har været underlagt den samme algoritme for samtlige billeder. Givet disse resultatbilleder er det relativt simpelt at afgøre hvorvidt et behandlet resultatbillede udgør en kandidat til manuel inspektion eller ej.</p>
<p><a href="http://www.hinnerup.net/wp-content/uploads/2010/01/2009-12-31_1559.png"><img src="http://www.hinnerup.net/wp-content/uploads/2010/01/2009-12-31_1559.png" alt="" title="Asfalt billedbehandling" width="510" class="aligncenter size-medium wp-image-755" style="border:none;" /></a></p>
<p>Klik på billedet for at se en stor udgave.</p>
<p>&#8220;Proof-of-concept&#8221; algoritmen benyttet på resultatbillederne herover er skrevet i .NET C#, og ser overordnet således ud:</p>
<pre>
Bitmap input = new Bitmap(filename);
Bitmap output =
  Dilate(
    Dilate(
      Threshold(
        Dilate(
          Dilate(
            Dilate(
              Dilate(
                Grayscale(input)
              )
            )
          )
        ), 70
      )
    )
  );

output.Save(
  Path.GetFileNameWithoutExtension(filename) +
  ".processed" + Path.GetExtension(filename));</pre>
<p>Tankeeksperimentet skal naturligvis føres videre ud før det bliver praktisk anvendeligt. </p>
<p>Det er klart at der vil være tale om mange tusinde billeder og adskillige terrabytes data, hvorfor system arkitekturen bag processeringssystemet bør være baseret på en skalerbar multiserver/multikerne teknologi. Et eksempel på en gratis open-source arkitektur kunne være <a href="http://developer.amd.com/cpu/libraries/framewave/Pages/default.aspx">AMD&#8217;s Framewave</a> eller <a href="http://www.nvidia.com/object/cuda_home.html">nVidia&#8217;s CUDA</a>.</p>
<table>
<tr style="vertical-align:top">
<td>
<a href="http://developer.amd.com/cpu/libraries/framewave/Pages/default.aspx"><img src="/wp-content/uploads/2010/01/framewave.gif" style="width:250px;padding-right:10px;border:none;" alt="" /></a></td>
<td><a href="http://www.nvidia.com/object/cuda_home.html"><img src="/wp-content/uploads/2010/01/cuda_logo.jpg" style="width:220px;padding-right:40px;border:none;" alt="" /></a></td>
</tr>
</table>
<p>Ligeledes vil der være særlige elementer i billederne der skal tages særlig hånd om, f.eks. vejstriber og overgange mellem forskellige belægningstyper med videre.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2010/01/02/structural-image-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Glædelig Jul og Godt Nytår</title>
		<link>http://www.hinnerup.net/2009/12/24/gl%c3%a6delig-jul-og-godt-nytar/</link>
		<comments>http://www.hinnerup.net/2009/12/24/gl%c3%a6delig-jul-og-godt-nytar/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 12:55:09 +0000</pubDate>
		<dc:creator>Tobias Hinnerup</dc:creator>
				<category><![CDATA[Blandet]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=747</guid>
		<description><![CDATA[Hinnerup Net ønsker alle vore kunder og samarbejdspartnere en glædelig jul og et godt nytår.
Herfra tak for året der går på hæld, med alle de bedste ønsker for de næstkommende.

]]></description>
			<content:encoded><![CDATA[<p>Hinnerup Net ønsker alle vore kunder og samarbejdspartnere en glædelig jul og et godt nytår.</p>
<p>Herfra tak for året der går på hæld, med alle de bedste ønsker for de næstkommende.</p>
<p><a href="http://www.hinnerup.net/wp-content/uploads/2009/12/DSCN0291.JPG"><img src="http://www.hinnerup.net/wp-content/uploads/2009/12/DSCN0291-300x225.jpg" alt="Chokolade og guf hører til!" title="Ønsker om Glædelig Jul fra Hinnerup Net" width="475" class="size-medium wp-image-750" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2009/12/24/gl%c3%a6delig-jul-og-godt-nytar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video afspilning på iPhone</title>
		<link>http://www.hinnerup.net/2009/11/25/video-afspilning-pa-iphone/</link>
		<comments>http://www.hinnerup.net/2009/11/25/video-afspilning-pa-iphone/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 09:48:41 +0000</pubDate>
		<dc:creator>Asger Dam Hoedt</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=731</guid>
		<description><![CDATA[Hvis man som udvikler gerne vil afspille film i en af sine iPhone apps, har Apple stillet MPMoviePlayerController klassen i MediaPlayer frameworket til rådighed.
MPMoviePlayerControlleren gør at vi som udviklere kan abstrahere fra hvilket format filmen ligger i, om den ligger lokalt på iPhonen eller skal tilgås gennem en URL og om filmen skal streames eller [...]]]></description>
			<content:encoded><![CDATA[<p>Hvis man som udvikler gerne vil afspille film i en af sine iPhone apps, har Apple stillet <a href="http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/MPMoviePlayerController/MPMoviePlayerController.html#//apple_ref/c/tdef/MPMovieControlMode">MPMoviePlayerController klassen</a> i <a href="http://developer.apple.com/iphone/library/documentation/MediaPlayer/Reference/MediaPlayer_Framework/">MediaPlayer frameworket</a> til rådighed.</p>
<p>MPMoviePlayerControlleren gør at vi som udviklere kan abstrahere fra hvilket format filmen ligger i, om den ligger lokalt på iPhonen eller skal tilgås gennem en URL og om filmen skal streames eller hentes helt før afspilning starter.</p>
<p>Trinene for at afspille film fra vores iPhone app er derfor ganske simple.</p>
<ol>
<li>Tilføj frameworket MediaPlayer til Xcode projectet.</li>
<li>Alloker plads til MPMoviePlayerControlleren og initialiser denne med en URL eller en sti til en film. </li>
<li>Fortæl afspilleren at den skal starte afspilningen.</li>
</ol>
<p>Et kode eksempel kan ses her</p>
<p><img src="http://www.hinnerup.net/wp-content/uploads/2009/11/MoviePlayerInit.png" alt="MoviePlayerInit" title="MoviePlayerInit" width="566" height="93" class="alignnone size-full wp-image-732" /></p>
<p>Og voila! App&#8217;en kan nu åbne iPhonens medieafspiller og via denne afspille film.</p>
<p>Det var jo dejligt nemt så vi kan hurtigt gå videre til at kigge på nogle af de lidt mere avancerede ting, der stilles til rådighed med MPMoviePlayerController.</p>
<p>Det første vi vil kigge på er at tilpasse afspilleren til vores behov. Som udgangspunkt bruger afspilleren iPhonens standardinstillinger, så det er op til brugeren om filmen skal afspilles i fullscreen tilstand, om han vil have mulighed for at spole i filmen og ændre på volumen.</p>
<p>Hvis vi selv vil kunne styre dette, for eksempel bestemme at filmen skal afspilles i fullscreen og uden mulighed for at spole, kan dette også klares med et par linjers kode.</p>
<p><img src="http://www.hinnerup.net/wp-content/uploads/2009/11/MoviePlayerSettings.png" alt="MoviePlayerSettings" title="MoviePlayerSettings" width="422" height="29" class="alignnone size-full wp-image-735" /></p>
<p>Og nu til noget mere avanceret. Afspilleren har mulighed for at underrette os når den skifter tilstand, som for eksempel når den har loadet filmen, afspilning er færdig eller skærmen liver resized. Herunder ses et eksempel på brugen af disse notifications hvor vi deallokerer afspilleren når den er færdig.</p>
<p>Først skal vi fortælle iPhonens <a href="">notification center</a> at vi gerne vil observere meddelelser af typen MPMoviePlayerPlaybackDidFinishNotification og når der kommer en af disse skal funktionen moviePlaybackFinished kaldes.</p>
<p><img src="http://www.hinnerup.net/wp-content/uploads/2009/11/MoviePlayerAddObserver.png" alt="MoviePlayerAddObserver" title="MoviePlayerAddObserver" width="336" height="66" class="alignnone size-full wp-image-741" /></p>
<p>Dernæst skal vi have skrevet funktionen moviePlaybackFinished som bare skal deallokerer afspilleren.</p>
<p><img src="http://www.hinnerup.net/wp-content/uploads/2009/11/MoviePlayerFinishedSelector.png" alt="MoviePlayerFinishedSelector" title="MoviePlayerFinishedSelector" width="444" height="57" class="alignnone size-full wp-image-737" /></p>
<p>Og til sidst skal vi for en god ordens skyld huske at fjerne observeren når applikationen er færdig.</p>
<p><img src="http://www.hinnerup.net/wp-content/uploads/2009/11/MoviePlayerRemoveObserver1.png" alt="MoviePlayerRemoveObserver" title="MoviePlayerRemoveObserver" width="339" height="57" class="alignnone size-full wp-image-740" /></p>
<p>Observers kan også bruges til at initialisere overlays, GUI elementer<br />
der ligger hen over filmen, når filmen er færdig med at loade eller<br />
meget andet. Herunder ses et eksempel på en film med undertekster.</p>
<p><img src="http://www.hinnerup.net/wp-content/uploads/2009/11/YouCanDoIt.png" alt="YouCanDoIt" title="YouCanDoIt" width="500" height="266" class="alignnone size-full wp-image-744" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2009/11/25/video-afspilning-pa-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3D landskab</title>
		<link>http://www.hinnerup.net/2009/10/29/3d-terrain/</link>
		<comments>http://www.hinnerup.net/2009/10/29/3d-terrain/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 14:32:55 +0000</pubDate>
		<dc:creator>Asger Dam Hoedt</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Spil]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=688</guid>
		<description><![CDATA[Et blogindlæg omkring 3d landskaber]]></description>
			<content:encoded><![CDATA[<p><b>Vores studenterprogrammør Asger, har haft leget med 3D visualisering og programmering. Her følger en artikel om hans første udskejelser i den virtuelle verden.</b></p>
<p>En god indgang til 3D programmering er landskabet. Landskaber er som oftes statiske og programmøren behøver derfor ikke tage hensyn til bevægelige dele. På nettet kan man finde tonsvis af <a href="http://www.lighthouse3d.com/opengl/terrain/">tutorials</a> omkring landskabsgeneration ud fra højdekort, både ment som introduktion til 3D programmering, men også til de udviklere, der gerne vil optimere deres første implementation og tilføje flere visuelle effekter til det. Desuden er udgangspunktet for mange spiltyper, FPS-, RPG- eller strategispil, en verden hvor spilleren kan bevæge sig rundt, og landskabet kan være grundstammen for at skabe denne verden.</p>
<p>Derfor faldt valget naturligt på et landskab som første applikation til at prøve kræfter med 3D programmering.</p>
<p><b>En demo af Asger&#8217;s landskabsapplikation kan ses her:</b><br />
<object type="application/x-shockwave-flash" width="100%" height="400" data="http://www.youtube.com/v/fCPLmtxnrKI"><param name="movie" value="http://www.youtube.com/v/fCPLmtxnrKI" /></object></p>
<p>En 3D verden er mere end bare trekanter tegnet på en skærm. Det kan være en god idé at finde sig en 3D engine til at tage hånd om bruger input, renderingsstrukturen og som tillader programmøren at abstraherer fra hvordan billeder loades som texture og hvordan matematikken bag rotation og kollision fungerer.</p>
<p>Her faldt valget på <a href="http://www.openengine.dk/trac/">OpenEngine</a>. En open source engine komplet med matematik biblioteker, geometri abstractioner, loading af 3D Studio Max modeller og brugerinputhåndtering. Derudover kan programmøren selv ændre eller tilføje til engine, hvis man har idéer til udvidelser.</p>
<p>OpenEngine har desuden en OpenGL 2.0 extension. OpenGL er et cross platform 3D api, så dette vil tillade landskabsapllikationen at køre på både Linux, Mac os X og Wndows. Windows har desværre ikke support i øjeblikket, så det vides ikke om OpenEngine stadig kan køres fra det OS.</p>
<p>Rustet med OpenEngine skulle landkabet så implementeres. Det er pt. blevet til et landskab med følgende features.</p>
<ul>
<li> <strong>Level of detail</strong> &#8211; Landskabet understøtter dynamisk level of detail. Det vil sige at når kameraet flytter sig længere væk fra landskabet, bliver landskabet automatisk mindre detaljeret. Grunden til dette er at langt væk fra vil brugeren alligevel ikke kunne se de finere detaljegrader, så vi kan fjerne disse og vinde noget performance.</li>
<li> <strong>Culling</strong> &#8211; En anden måde at vinde performance på er naturligvis ved slet ikke at tegne noget. Det giver ikke meget mening for ting på skærmen, men for geometri der er udenfor skærmen eller gemt bag ved anden geometri, kan man vinde ekstra performance ved slet ikke at tegne disse.<br />
Landskabet understøtter dette ved en teknink kaldet frustum culling. Her beregnes der en boks rundt om dele af geometrien og denne boks testes så imod skærmens placering. Kan boksen ikke ses på skærmen, kan geometrien inde i boksen naturligvis heller ikke og vi undlader derfor at sende geometrien til grafikkortet.</li>
<li> <strong>Geomorphing</strong> &#8211; Problemet med level of detail er at der pludselig popper flere vertices ind i verdenen når verdenen bliver mere detaljeret, eller der pludselig forsvinder en del af verdenen når nogle detaljer fjernes. Denne poppen er meget synlig for brugeren og skal derfor fjernes. Der er flere løsninger til dette,<br />
<a href="http://number-none.com/product/Unified%20Rendering%20LOD,%20Part%202/index.html">blending</a>, <a href="http://www.flipcode.com/archives/Fast_Terrain_Rendering_Using_Geometrical_MipMapping.shtml">geomipmapping</a> eller <a href="http://www.gamedev.net/reference/articles/article1936.asp">geomorphing</a>. Valget faldt på geomorphing, da denne rimelig nemt kan udvides til at tillade et dynamisk terrain og kan laves med næsten intet performance tab i en shader.</li>
<li> <strong>Shadowmaps</strong> &#8211; Et problem, der ikke er håndteret ved geomorphing, er skygger. Skyggerne er som udgangspunkt beregnet pr vertex, men dette giver samme poppen i skyggerne, som vi lige har fjernet ved geometrien.<br />
Løsningen her er enten at morphe skyggerne sammen med geometrien eller bruge et shadowmap. Begge løsninger er blevet afprøvet og den sidste er klart den flotteste. Grunden er at ved brug af et shadowmap har vi altid skyggerne i den højeste detaljegrad, så selvom små bakker i landskabet ikke længer bliver tegnet i geometrien, kan spilleren stadig &#8217;se&#8217; dem, da de stadig kaster skygger på terrainet. Denne løsningen tillader også at fjerne nogle af de højeste level of details for yderligere performance, men spilleren vil stadig kunne &#8217;se&#8217; dem, da skyggerne stadig kastes.</li>
<li> <strong>Shaders</strong> &#8211; Skal man lave noget som helst interessant i 3D grafik i dag skal man bruge shaders. Shaders tillader programmøren selv at specificerer hvad grafikkortet skal gøre med vertices og hvordan det skal beregne farver og skygger.<br />
Naturligvis er der derfor også brugt en shader på landskabet. Denne står for at lave geomorphing, smide texture på landskabet baseret på højde, så der kommer strand i bunden og sne på toppen af bjergene. Desuden beregner den skygger og hvor meget af landskabet, der skal kunne ses under vand.</li>
</ul>
<p>Koden bag landskabet kan ses <a href="http://www.openengine.dk/code/extensions/HeightMap/">her</a> eller ved at hente OpenEngine, som beskrevet <a href="http://www.openengine.dk/trac/wiki/GettingStarted">her</a> og hente projektet terrain. Herfra kan projektet også kombileres og køres. Som nævnt er der ikke Windows support for OpenEngine pt, så projektet er kun blevet testet under Linux og Mac os X.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2009/10/29/3d-terrain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go&#8217; bryllupsferie!</title>
		<link>http://www.hinnerup.net/2009/10/12/happy-honeymoon-j-and-e/</link>
		<comments>http://www.hinnerup.net/2009/10/12/happy-honeymoon-j-and-e/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 13:49:26 +0000</pubDate>
		<dc:creator>Michael Schøler</dc:creator>
				<category><![CDATA[Meddelelser]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=651</guid>
		<description><![CDATA[Fra alle os i Hinnerup Net de bedste ønsker til Jakob og Else Marie om en fantastisk bryllupsferie samt al held og lykke fremover!



]]></description>
			<content:encoded><![CDATA[<p>Fra alle os i Hinnerup Net de bedste ønsker til Jakob og Else Marie om en fantastisk bryllupsferie samt al held og lykke fremover!</p>
<div style="text-align:center">
<img src="http://www.hinnerup.net/wp-content/uploads/2009/10/justmarried.jpg" alt="justmarried" title="justmarried" width="245" height="267" class="aligncenter size-full wp-image-652" />
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2009/10/12/happy-honeymoon-j-and-e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Undgå advarsler om usikkert indhold</title>
		<link>http://www.hinnerup.net/2009/10/07/undgaa-advarsler-om-usikkert-indhold/</link>
		<comments>http://www.hinnerup.net/2009/10/07/undgaa-advarsler-om-usikkert-indhold/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 10:54:53 +0000</pubDate>
		<dc:creator>Tobias Hinnerup</dc:creator>
				<category><![CDATA[Gode råd]]></category>
		<category><![CDATA[Cross Browser]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=624</guid>
		<description><![CDATA[Når man har truffet valget at dirigere sine besøgende til en SSL krypteret side, vil det oftest være i høj grad uhensigtsmæssigt, hvis browseren skulle finde på at komme med advarsler om, at siden indeholde usikre elementer.


Eksempel på IE6 advarselsdialogboks

De logiske
Som ofte er tilfældet viser der sig i praksis at være forskel på hvordan markedets [...]]]></description>
			<content:encoded><![CDATA[<p>Når man har truffet valget at dirigere sine besøgende til en SSL krypteret side, vil det oftest være i høj grad uhensigtsmæssigt, hvis browseren skulle finde på at komme med advarsler om, at siden indeholde usikre elementer.</p>
<div style="text-align: center;">
<img src="http://www.hinnerup.net/wp-content/uploads/2009/10/iesecure.jpg" alt="IE6 - Mixed content warning" title="IE6 - Mixed content warning" width="332" height="150" class="alignnonesize-full wp-image-623" /><br />
<small>Eksempel på IE6 advarselsdialogboks</small>
</div>
<p><strong>De logiske</strong><br />
Som ofte er tilfældet viser der sig i praksis at være forskel på hvordan markedets browsere håndterer sikkerhed &#8211; herunder er de selvskrevne kandidater til en checkliste for at undgå problemer er inkluderinger af eksternt indhold, som skal angives enten med en relativ eller HTTPS URI.</p>
<ul>
<li>
		<code>&lt;img src="<strong>...</strong>" alt="Ellipsis" /&gt;</code>
	</li>
<li>
		<code>&lt;script <a href="http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.2" title="Definition of script type">type="text/javascript"</a> src="<strong>...</strong>"&gt;&lt;/script&gt;</code>
	</li>
<li>
		<code>&lt;link <a href="http://www.w3.org/TR/html4/types.html#h-6.12" title="Definition of valid link relation types">rel="<strong>...</strong>"</a> href="..."&gt;&lt;/script&gt;</code>
	</li>
</ul>
<p>Værd at bide mærke i, i forhold til ovenstående er at følge op på hvad eventuelt 3. parts værktøjer som eksempelvis Google Analytics, Omniture og lignende indsætter af referencer &#8211; de fleste af disse har HTTPS-baserede ækvivalenter.</p>
<p><strong>De bemærkelsesværdige</strong><br />
Hvad der formentlig er knap så indlysende er, at i Internet Explorer også <code>&lt;object codebase="<strong>...</strong>"&gt;</code> og <code>&lt;embed pluginspage="<strong>...</strong>"&gt;</code> skal angives relativt eller eksplicit med HTTPS. På trods af at browseren ikke gennemfører en request på URI&#8217;en, bliver der lavet en kontrol af overenstemmelse med dokumentets protokol.</p>
<p>Intuitivt eller ej, gør det sig også gældende for Internet Explorer, at eventuelle inkluderede URI&#8217;er der resulterer i en HTTP fejlkode, vil blive behandlet som usikre, idet det er browserens klassificering af sine egne fejlsider.</p>
<p><strong>De lumske</strong><br />
Til gengæld er det formentlig kun blandt Microsofts egne udviklere indlysende, at brugen af iframe&#8217;s med enten tom eller ingen src-angivelse betragtes som en reference til HTTP og altså vil give en advarsel på en HTTPS side. Har man brug for den tomme iframe, kan eventuelt angives en reference til et tomt dokument, eller værdien &#8220;<code>javascript:false</code>&#8220;</p>
<p>Sidst, men bestemt ikke mindst: Hvis der benyttes javascript der kalder <code>removeChild()</code> på et element der har et baggrundsbillede kan fejlen også optræde. Omgåelsen er nem: Sæt i stedet <code>outerHTML=''</code> (og nej, der er ingen logisk og rimelig grund til at tingene skal virke sådan).</p>
<p><strong>De ligegyldige</strong><br />
Blandt de ting der kan ignoreres uden konsekvenser, er protokolangivelser i:</p>
<ul>
<li>DOCTYPES
	</li>
<li>XHTML namespaces
	</li>
<li>Links
	</li>
</ul>
<p>Forhåbentlig ovenstående kan redde uskyldige forbipasserende for timevis af fejlsøgning &#8211; kommer man alligevel dertil hvor der skal graves, er netværksovervågning et godt angrebspunkt &#8211; herfra er høstet gode erfaringer med både <a href="http://www.ethereal.com/">Ethereal</a> og <a href="http://www.fiddlertool.com/fiddler/">Fiddler</a>. </p>
<p>Bemærk, at CONNECT requests altid vil ske via HTTP, men alt andet skal ske på HTTPS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2009/10/07/undgaa-advarsler-om-usikkert-indhold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geo IP redirigering</title>
		<link>http://www.hinnerup.net/2009/09/30/geo-ip-redirigering/</link>
		<comments>http://www.hinnerup.net/2009/09/30/geo-ip-redirigering/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 18:51:47 +0000</pubDate>
		<dc:creator>Søren Ulrikkeholm</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Geo IP]]></category>
		<category><![CDATA[Google maps]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[IP redirect]]></category>

		<guid isPermaLink="false">http://www.hinnerup.net/?p=476</guid>
		<description><![CDATA[GeoLite City er et praktisk lille Open Source-værktøj fra firmaet MaxMind, som kan være til stor hjælp ved IP redirigering. Applikationen består i al sin enkelthed af en database-fil, samt en række C# klasser, som bruges til at tilgå databasen. Databasen kan bruges til at finde oplysninger om bl.a. land, landekode, region, by, postnummer, længde- [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.maxmind.com/app/geolitecity" target="new">GeoLite City</a> er et praktisk lille Open Source-værktøj fra firmaet <a href="http://www.maxmind.com">MaxMind</a>, som kan være til stor hjælp ved IP redirigering. Applikationen består i al sin enkelthed af en database-fil, samt en række C# klasser, som bruges til at tilgå databasen. Databasen kan bruges til at finde oplysninger om bl.a. land, landekode, region, by, postnummer, længde- og breddegrader og meget andet for en given IP-adresse.</p>
<p>Det <a href="http://www.maxmind.com/app/city#api">Open Source API fra MaxMind</a> som vi har anvendt består af seks C# klasser, hvoraf kun to skal instantieres for at benytte applikationen til fulde (der er API til yderligere programmeringssprog også, se forrige link). Det drejer sig om klasserne: LookupService og Location.</p>
<p>LookupService instantieres med en sti til databasen, samt (optionelt) en int, der fortæller om databasen skal læses direkte fra filen, eller gemmes i en buffer. Som standard læses der direkte fra filen, men i hastighedskritiske sammenhænge, kunne man muligvis ønske at cache databasen. Dernæst bruges LookupService objektet til at instantiere Location.</p>
<p>Location instantieres ved at kalde getLocation() på LookupService med den ønskede IP-adresse som parameter. Når det er gjort, er man klar til at udnytte de mange muligheder GeoLite City tilbyder. Dette gøres i første omgang ved at tilgå de public attributter der ligger i Location.</p>
<p>Dette eksempel udskriver land og breddegrad for IP-adressen, 208.77.188.166:<br />
<em>Bemærk at der kastes en exception hvis IP&#8217;en ikke findes, og koden bør derfor sættes i en try-catch blok.</em><br />
<code><br />
LookupService ls = new LookupService(@"C:\...\...\GeoLiteCity.dat", GEOIP_STANDARD);<br />
Location l = ls.getLocation("208.77.188.166");<br />
Console.WriteLine("Land: " + l.countryName);<br />
Console.WriteLine("Breddegrad: " + l.longitude.ToString());<br />
</code><br />
Oplysninger om land ville i praksis f.eks. kunne bruges til, at redirigere en hjemmesidebruger hen til en version af siden i det pågældende lands sprog.</p>
<p>Man kunne også forestille sig, at en hjemmeside ønskede at vise mindre ressourcekrævende udgaver af siden til langsomme forbindelser. Her ville man også kunne benytte sig af GeoLite City. I dette tilfælde kunne koden se nogenlunde sådan her ud:<br />
<em>Bemærk at man her benytter LookupService og ikke Location.</em><br />
<code><br />
int i = ls.getID("208.77.188.166");<br />
if (i == LookupService.GEOIP_UNKNOWN_SPEED)<br />
{<br />
&nbsp;&nbsp;&nbsp;Response.Redirect("http://example.net/standard.asp");<br />
}<br />
else if (i == LookupService.GEOIP_CABLEDSL_SPEED)<br />
{<br />
&nbsp;&nbsp;&nbsp;Response.Redirect("http://example.net/fast.asp");<br />
}<br />
else if(i == LookupService.GEOIP_DIALUP_SPEED)<br />
{<br />
&nbsp;&nbsp;&nbsp;Response.Redirect("http://example.net/slow.asp");<br />
}<br />
</code></p>
<p>Her er et eksempel på en lille webapplikation, der oplyser land, by og koordinater for angivne IP adresser. Eksemplet vælger som standard www.hinnerup.net serverens globale IP. Der kan indtastes såvel <a href="http://da.wikipedia.org/wiki/IPv4">IPv4</a> som <a href="http://da.wikipedia.org/wiki/IPv6">IPv6</a> adresser i IP-adressefeltet.</p>
<div id="stuff42">
<a href="http://www.hinnerup.net/2009/09/geoip/Default.aspx">For at se demo klik her.</a>
</div>
<div id="stuff43">
</div>
<p><script type="text/javascript">
try {
var div43 = document.getElementById("stuff43");
var iframe = document.createElement("iframe");
iframe.src = "http://www.hinnerup.net/2009/09/geoip/Default.aspx" ;
try { iframe.style.width = "100%"; } catch(e1) {}
try { iframe.style.height = "220px"; } catch(e2) {}
try { iframe.style.textAlign = "center"; } catch(e3) {}
try { iframe.style.overflow = "hide"; } catch(e4) {}
div43.appendChild(iframe);
document.getElementById("stuff42").style.display = "none";
} catch(ex) {}
</script></p>
<p>GeoLite City kan hentes <a href="http://www.maxmind.com/app/geolitecity" target="new">her</a> og opdateres en gang om måneden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hinnerup.net/2009/09/30/geo-ip-redirigering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
