<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2dutchfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
	
		<title>Solution :: Blog</title>
		<link>http://www.solution-web.nl/blog/</link>
		<description>De nieuwste berichten in de blog van Solution</description>
			<language>nl-nl</language>
		<ttl>86400</ttl>
		<image>
			<url>http://www.solution-web.nl/images/logo-rss.png</url>
			<title>Solution :: Blog</title>
			<link>http://www.solution-web.nl/blog/</link>
			<width>144</width>
			<height>144</height>
		</image>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SolutionBlog" /><feedburner:info uri="solutionblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>SolutionBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/SolutionBlog" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FSolutionBlog" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
			<title><![CDATA[TwReboot - Reboot your twitter]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/0UYRmDGThcQ/44-twreboot-reboot-your-twitter.html</link>
			<description>&lt;p&gt;&lt;img style="float: left; margin: 10px;" src="http://www.solution-web.nl/uploads/2012/07/twitter96x96.png" alt="Twitter logo" width="96" height="96" /&gt;Ik kreeg laatst een mailtje van twitter. Dat verbaasde me op twee manieren:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ik had nog een persoonlijke twitter-account.&lt;/li&gt;
&lt;li&gt;Ze hebben blijkbaar besloten dat het gepast is om me er een mailtje over te sturen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En fin, ik kwam er achter dat jarenlang mijn hyves (beschamend) al mijn (nog beschamendere) WieWatWaars had geplaatst als tweets.&lt;/p&gt;
&lt;p&gt;Nu moet ik zelf nog de persoon ontmoeten die op Hyves stil was, dus het waren er niet weinig. Te veel om met de hand te verwijderen. Wat doet men dan? &lt;a href="https://www.google.nl/search?q=remove+all+tweets" rel="nofollow" target="_blank"&gt;Men googlet.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Daarmee kwam ik op twitwipe. Twitwipe deed wat het moest doen, namelijk al mijn tweets verwijderen. E&amp;eacute;n probleem echter. De service kan de hoeveelheid mensen niet aan. Dus heb ik zelf maar wat gemaakt.&lt;/p&gt;
&lt;h2&gt;TwReboot&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://twreboot.appspot.com/" target="_blank"&gt;TwReboot&lt;/a&gt; is een service waarmee je heel gemakkelijk al je tweets kunt verwijderen. Log in met twitter, bevestig dat je&amp;nbsp;&lt;em&gt;echt&lt;/em&gt; alles wilt verwijderen en zit achterover terwijl al je tweets van nieuw naar oud langzaam beginnen te verdwijnen. Een heuze "re-boot" van je twitter account dus.&lt;/p&gt;
&lt;p&gt;Dit alles "powered by Google App Engine", want gratis servercapaciteit is altijd fijn.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/0UYRmDGThcQ" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/44-twreboot-reboot-your-twitter.html</guid>
			<pubDate>Sun, 15 Jul 2012 22:44:38 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/44-twreboot-reboot-your-twitter.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[WikiGraph - Een experiment met Google App Engine]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/-5C6Wl21t_o/43-wikigraph-een-experiment-met-google-app-engine.html</link>
			<description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/" target="_blank"&gt;&lt;img style="float: left;" src="http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png" alt="Logo van Wikipedia" width="135" height="155" /&gt;&lt;/a&gt;Recent heb ik een presentatie mogen aanhoren over sociale netwerken en wat je er allemaal mee zou moeten kunnen. Voornamelijk de "vriendschapsgraaf" zou erg interessant moeten zijn. Hier doet men allerlei uitspraken over, zoals: "Iedereen is binnen 6 stappen met iedereen bevriend", oftewel het "&lt;a href="http://en.wikipedia.org/wiki/Small-world_network" target="_blank"&gt;kleine wereld fenomeen&lt;/a&gt;".&lt;/p&gt;
&lt;p&gt;Wat mij echter ook verbaasde, is dat al die eigenschappen van die netwerken &lt;em&gt;ook&lt;/em&gt; voorkomen bij de linkstructuur van Wikipedia, zij het dat links asymmetrisch zijn. (vrienden ben je altijd van elkaar, links wijzen &amp;eacute;&amp;eacute;n kant op)&lt;/p&gt;
&lt;p&gt;Ik dacht dat daar best een mooie visualisatie van gemaakt kon worden, dus ben ik begonnen met het crawlen van die links. Hier komt &lt;a href="http://appengine.google.com/" target="_blank"&gt;App Engine&lt;/a&gt; in beeld.&lt;img style="float: right;" src="http://ae-boilerplate.appspot.com/img/appengine-logo.png" alt="App Engine logo" width="125" height="125" /&gt;&lt;/p&gt;
&lt;p&gt;App Engine biedt de mogelijkheid om rekenkracht en opslagruimte van Google te gebruiken voor je eigen projecten. Je krijgt een redelijke hoeveelheid gratis CPU en andere quota per dag om mee te exerpimenteren, dus dat is redelijk geschikt voor dit project.&lt;/p&gt;
&lt;p&gt;Mijn app draait op &lt;a href="http://wikigraph2.appspot.com/"&gt;http://wikigraph2.appspot.com/&lt;/a&gt;. Waarom 2? Omdat bij de oorspronkelijke wikigraph iets mis ging met de datastore. De data mag iedereen vrij gebruiken, en is beschikbaar in &lt;a href="http://wikigraph2.appspot.com/data.js" target="_blank"&gt;JS&lt;/a&gt; of &lt;a href="http://wikigraph2.appspot.com/data.json" target="_blank"&gt;JSON&lt;/a&gt;. Merk op dat mijn quota voor App Engine beperkt zijn, en dat niet alle records compleet in de datafile staan. Deze hebben een flag &lt;strong&gt;complete: false&lt;/strong&gt;. Ik moet nog even graafalgoritmen bestuderen, maar in ieder geval kan iemand anders er nu mee aan de slag.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/-5C6Wl21t_o" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/43-wikigraph-een-experiment-met-google-app-engine.html</guid>
			<pubDate>Wed, 30 May 2012 14:05:32 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/43-wikigraph-een-experiment-met-google-app-engine.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[JS1k 2012 - Love]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/i1u6IYNSN_Q/42-js1k-2012-love.html</link>
			<description>Een programmeerwedstruhd met als thema liefde. Een typisch geval voor de categorie &amp;quot;Zo'n belachelijk idee dat je het wel waar moet zijn&amp;quot;. Enfin, Peter van Zee vond het een leuk thema, en daarmee is het uitgangspunt geboren van &lt;a href="http://js1k.com/2012-love" target="_blank"&gt;JS1k 2012 - &amp;quot;Love&amp;quot;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ik ga geen langdradig verhaal houden over wat ik met &lt;a href="http://js1k.com/2012-love/demo/1191" target="_blank"&gt;mijn demo&lt;/a&gt; gedaan heb (lees de bijgevoegde originele source code, dat moet best duidelijk zijn) want daar is niet zo veel bijzonders aan. Ik heb naar mijn idee niet gepresteerd naar het niveau van de andere &lt;a href="http://js1k.com/2012-love/demos" target="_blank"&gt;demo's&lt;/a&gt;. In plaats daarvan een lijstje met mijn favorieten, van meh to wow:&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;&lt;a href="http://js1k.com/2012-love/demo/1284" target="_blank"&gt;3. Ruby Sea&lt;/a&gt;&lt;br /&gt;
&lt;/h2&gt;De laatste inzending van de competitie, maar zeker niet een van de mindere. Een mooi voorbeeld van hoe je met relatief weinig data toch een mooi effect neer te zetten. Een semi-kloppende 3d renderer + een oceaan die er natuurlijk uitziet maakt dit een mooie demo.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;&lt;a href="http://js1k.com/2012-love/demo/1282" target="_blank"&gt;2. Mine[love]craft&lt;/a&gt;&lt;br /&gt;
&lt;/h2&gt;Ik ben enorm fan van Minecraft (zoals vele in deze business) en deze versie is prachtig. Met een vrij goede kopie van de dag/nacht cyclus, een oneindige kaart en omdat het bouwen gewoon mogelijk is, zij het dat het wat ingewikkeld is.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;&lt;a href="http://js1k.com/2012-love/demo/1243" target="_blank"&gt;1. Autumn Evening&lt;/a&gt;&lt;br /&gt;
&lt;/h2&gt;Waarom is dit mijn nummer 1? Ik vind het geweldig hoe iemand zo'n hoge kwaliteit productie in 1024 bytes past. De reflectie van het water is prachtig, de boom is goed gedaan en bovendien voelt het wegblazen van de blaadjes heel &amp;quot;echt&amp;quot;. De gedoodverfde winnaar, volgens mij.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/i1u6IYNSN_Q" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/42-js1k-2012-love.html</guid>
			<pubDate>Wed, 28 Mar 2012 16:03:23 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/42-js1k-2012-love.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Raytracing 03 - Schaakborden en meer objecten]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/thPuwZedbSI/41-raytracing-03-schaakborden-en-meer-objecten.html</link>
			<description>&lt;i&gt;Dit bericht is onderdeel van een langere serie over raytracing. Voor de hele serie, zie &lt;a href="http://www.solution-web.nl/blog/search.php?tag=Serie+ray+tracing" target="_blank"&gt;hier&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
De wereld ziet er nu &lt;a href="http://www.solution-web.nl/uploads/blog/2012/01/raytrace-version2.png" target="_blank"&gt;prachtig uit&lt;/a&gt;, maar kan alleen bestaan uit oneindige vlakken en bollen. Beiden zijn &lt;i&gt;niet&lt;/i&gt; heel handig bij het ontwerpen van nieuwe omgevingen. Daarom voeg ik in deze versie twee nieuwe elementen toe, de cylinder en de doos. Die laatste gaat in volgende versies veel nut hebben, maar dat komt later. Daarnaast hebben alle dingen in de ruimte nog een specifieke kleur. Dat hoeft natuurlijk niet, dus heb ik ook een schaakbordpatroon als kleur-optie toegevoegd.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Nieuwe objecten&lt;br /&gt;
&lt;/h2&gt;De cylinder was het makkelijkst om toe te voegen. Immers, ddie heeft net zoals de bol een directe formule waaraan ieder punt op de cylinder aan voldoet en voor de normaal, te zijnde:&lt;br /&gt;
&lt;code&gt;(p_x - c_x)^2 + (p_z - c_z)^2 = r^2&lt;br /&gt;
n = {p_x - c_x, 0 , p_z - c_z}&lt;/code&gt;&lt;br /&gt;
De bovenste formule is uit te werken tot een kwadratische vergelijking en dan op te lossen, de onderste geeft natuurlijk direct al een antwoord.&lt;br /&gt;
&lt;br /&gt;
De doos was daarentegen lastiger. Deze heeft namelijk 6 oppervlakken, die allemaal een snijpunt kunnen hebben. Om het makkelijker te maken definieer ik de doos evenwijdig aan alle assen. Hierdoor kan je eenvoudig de snijpunten met alle zijden berekenen. Daarna moet je alleen nog kijken of ieder van die snijpunten wel op de doos ligt en welke het dichtstbijzijnd is.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Schaakborden&lt;br /&gt;
&lt;/h2&gt;Schaakborden zijn vrij simpel, je moet zorgen dat je afwisselend 1 en 0 hebt over je co&amp;ouml;rdinatensysteem laten lopen. Dit kan je vrij simpel doen met&lt;br /&gt;
&lt;code&gt;(x &lt;a href="http://nl.wikipedia.org/wiki/XOR-poort" target="_blank"&gt;XOR&lt;/a&gt; z)&amp;amp;1&lt;/code&gt; maar hierbij bleek dat JavaScript zijn float/integer conversie ietwat ongewoon doet. Zie onder.&lt;br /&gt;
&lt;code&gt;Verwacht:&lt;br /&gt;
1.5&amp;nbsp;&amp;nbsp;| 0 -&amp;gt; 1&lt;br /&gt;
-1.5&amp;nbsp;| 0 -&amp;gt; -2&lt;br /&gt;
Werkelijkheid&lt;br /&gt;
1.5&amp;nbsp;&amp;nbsp;| 0 -&amp;gt; 1&lt;br /&gt;
-1.5&amp;nbsp;| 0 -&amp;gt; -1&lt;/code&gt;&lt;br /&gt;
Dit leverde wat extra uitzonderingen op die helaas iets langzamer waren, maar het resultaat is nog steeds vrij effici&amp;euml;nt.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;En verder&lt;br /&gt;
&lt;/h2&gt;Verder heb ik ook nog &lt;a href="http://blog.vjeux.com/2012/javascript/javascript-ray-tracer.html" target="_blank"&gt;progressive raytracing&lt;/a&gt; ge&amp;iuml;mplementeerd. Ik zou dit verder kunnen uitleggen maar als men de link volgt komt men bij een artikel van iemand die dat een stuk beter doet.&lt;br /&gt;
&lt;br /&gt;
Daarnaast heb ik nog een extreem klein begin gemaakt aan een &amp;quot;scene&amp;quot; editor, die uiteindelijk sc&amp;egrave;nes voor de raytracer met klik en sleep moet kunnen gaan maken. Deze is gebaseerd op &lt;a href="http://learningwebgl.com/blog/" target="_blank"&gt;WebGL&lt;/a&gt; en &lt;a href="http://threejs.org/" target="_blank"&gt;Three.js&lt;/a&gt;, omdat je daarmee heel simpel basis vormen kunt maken. Het enige nadeel is dat oneindige vormen, zoals cylinders en vlakken, niet gemaakt kunnen worden. Ik verzin hier nog wel wat op. Voor de rest, bekijk zoals altijd de &lt;a href="http://www.solution-web.nl/projects/raytracer2/changelog.txt" target="_blank"&gt;changelog&lt;/a&gt; en geniet van &lt;a href="http://www.solution-web.nl/projects/raytracer2/" target="_blank"&gt;het programma&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.solution-web.nl/projects/raytracer2/" target="_blank"&gt;&lt;img src="http://www.solution-web.nl/uploads/blog/2012/05/raytrace-version3.png" alt="Nieuwe scene in de raytracer" class="screenshot"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="display: inline;"&gt;Verder in deze serie&lt;br /&gt;
&lt;/h3&gt;&lt;a href="http://www.solution-web.nl/blog/40-raytracing-02-reflectie-en-supersampling.html" target="_blank"&gt;Raytracing 02 - Reflectie en supersampling&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.solution-web.nl/blog/34-raytracing-01-de-basisstappen.html" target="_blank"&gt;Raytracing 01 - De basisstappen&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/thPuwZedbSI" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/41-raytracing-03-schaakborden-en-meer-objecten.html</guid>
			<pubDate>Wed, 01 Feb 2012 19:08:50 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/41-raytracing-03-schaakborden-en-meer-objecten.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Raytracing 02 - Reflectie en supersampling]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/1Co1O3pfRVA/40-raytracing-02-reflectie-en-supersampling.html</link>
			<description>Bij de vorige versie van mijn &lt;a href="http://www.solution-web.nl/projects/raytracer/" target="_blank"&gt;javascript raytracer&lt;/a&gt; slaagde ik er maar niet in om daadwerkelijk &lt;a href="http://nl.wikipedia.org/wiki/Anti-aliasing" target="_blank"&gt;Anti-aliasing&lt;/a&gt; door middel van supersampling (zie referentie) te implementeren. Lang verhaal, maar de clou was dat ergens in dat proces iets ontplofte waardoor de helft van het resultaat alleen maar wit werd.&lt;br /&gt;
&lt;br /&gt;
Daarnaast moest ik natuurlijk ook nog een van de meest overtuigende effecten met raytracing implementeren, namelijk reflecties. Deze zijn simpel, doch zeker effectief en geven het eindresultaat een veel realistischer &amp;quot;gevoel&amp;quot; (weinig gebruikt woord in mijn vakgebied) dan zonder.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Reflectie&lt;br /&gt;
&lt;/h2&gt;Het fijne aan raytracing is dat reflecties relatief makkelijk gaan. Het enige dat je hoeft te doen, is de nieuwe lichtstraal berekenen en deze dan weer het algoritme in gooien. De lichtstraal heeft twee eigenschappen, een oorsprong en een richting. De oorsprong is het makkelijkst, dat is namelijk het punt waar je oorspronkelijke lichtstraal het object raakte. De richting is iets lastiger, maar vrij simpel in code;&lt;br /&gt;
&lt;code&gt;Vector normaal, richting, nieuwerichting;&lt;br /&gt;
nieuwerichting = richting - normaal * normaal.dot(richting);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Hierbij is de * operator de scalarvermenigvuldiging van een vector en vector.dot rekent het inwendig product van de twee vectoren. Juist. Nu enkel nog de raytrace functie weer aanroepen en de reflectiekleur is gevonden. Voor een extra beetje realiteit vermenigvuldig ik de reflectiekleur ook nog met de kleur van het object, zodat bijvoorbeeld rode objecten ook een rodere reflectie opleveren.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Supersampling&lt;br /&gt;
&lt;/h2&gt;Supersampling is een eenvoudige techniek, waarbij je simpelweg meervoudig de pixel (een klein beetje opgeschoven) bekijkt, en het gemiddelde van het resultaat neemt. Dit heeft als voordeel dat de kartelige randjes inderdaad weg gaan.&lt;br /&gt;
Helaas is dit ook heel veel extra rekenwerk. Het is niet effici&amp;euml;nt, en zelfs in het midden van een object (waar toch de meeste stralen zullen vallen). Hiervoor is multisampling bedacht, maar daar ben ik nog niet aan toe. Eerst dit maar.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;En verder&lt;br /&gt;
&lt;/h2&gt;Verder zijn er nog een paar fouten gerepareerd, lees vooral &lt;a href="http://www.solution-web.nl/projects/raytracer2/changelog.txt" target="_blank"&gt;het changelog&lt;/a&gt;. Ook is er een debugoptie toegevoegd, highlight object. Het object met als ID deze waarde zal paars worden weergegeven. Object IDs zijn altijd &amp;gt;= 0, dus met -1 wordt niets gemarkeerd.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.solution-web.nl/projects/raytracer2/" target="_blank"&gt;&lt;img src="http://www.solution-web.nl/uploads/blog/2012/05/raytrace-version2.png" alt="Huidige versie van de scene, 4x4 anti-aliasing en een hoge tracediepte." class="screenshot"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style="display: inline;"&gt;Verder in deze serie&lt;br /&gt;
&lt;/h3&gt;&lt;a href="http://www.solution-web.nl/blog/34-raytracing-01-de-basisstappen.html" target="_blank"&gt;Raytracing 01 - de basisstappen&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/1Co1O3pfRVA" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/40-raytracing-02-reflectie-en-supersampling.html</guid>
			<pubDate>Wed, 18 Jan 2012 10:02:16 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/40-raytracing-02-reflectie-en-supersampling.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Korte update]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/9jmtN9Y6KUs/37-korte-update.html</link>
			<description>In het berichtje over de kansverdeling van het Collatz vermoeden (de &lt;a href="http://www.solution-web.nl/blog/35-willekeurige-getallen-en-simpel-.html" target="_blank"&gt;vorige&lt;/a&gt;, wel te verstaan) sprak ik over een onderzoekje naar de daadwerkelijke kansverdeling van deze reeks.&lt;br /&gt;
Ik heb nu de demo ge&amp;uuml;pdatet zodat deze ook de verdeling van het interval geeft.&lt;br /&gt;
Onderstaande grafiek geeft de verdeling weer van het interval beginnende op 1000, strekkende tot 210000, met distributie accuratie 1. Deze laatste parameter geeft weer hoe groot de stukjes zijn waarin de distributie is opgedeeld, volgens de formule:&lt;br /&gt;
&lt;code&gt;grootte = 1/accuratie;&lt;/code&gt;&lt;br /&gt;
&lt;img src="http://www.solution-web.nl/uploads/blog/2012/05/collatz2.png" alt="Distributie van 1000 tot 210000" class="screenshot"&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/9jmtN9Y6KUs" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/37-korte-update.html</guid>
			<pubDate>Sun, 11 Dec 2011 14:49:25 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/37-korte-update.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Willekeurige getallen (en simpel)]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/DKIKeiJr-2I/35-willekeurige-getallen-en-simpel-.html</link>
			<description>Zo'n studie is best interessant. Je krijgt voor de verandering opdrachten die je &lt;i&gt;wel&lt;/i&gt; aan het denken zetten. Daar wordt een mens gelukkig van. In ieder geval levert het idee&amp;euml;n op. Zo ook deze.&lt;br /&gt;
&lt;br /&gt;
Voor een verder volstrekt willekeurige opdracht werd een zijspoortje aangeleverd, namelijk het &lt;a href="http://en.wikipedia.org/wiki/Collatz_conjecture" target="_blank"&gt;Collatz vermoeden&lt;/a&gt;. Uitleg op de Wiki pagina.&lt;br /&gt;
&lt;br /&gt;
Dit eenvoudige gegeven levert voor ieder getal een aantal stappen op dat nodig is om tot 1 te komen. Dit blijkt vrij willekeurig te zijn, en daarom dacht ik dat daar een fatsoenlijke random generator uit gemaakt kon worden. Vandaar dit experiment.&lt;br /&gt;
Omdat het aantal iteraties voor grote getallen natuurlijk meestal groter is dan dat van kleinere getallen, deel je het resultaat door het binair logaritme van het getal in kwestie. Hierdoor krijg je een getal dat altijd tussen de 1 en circa 20 ligt, Zie de grafiek.&lt;br /&gt;
&lt;img src="http://www.solution-web.nl/images/blog/collatz.png" alt="een plot van de pseudo-willekeurige getallen 2 tot 101" class="screenshot"&gt;&lt;br /&gt;
&lt;br /&gt;
Een goed onderzoek naar de willekeurigheid (en de implementatie) moet ik nog doen, maar tot nu toe ziet het er redelijk uit. Voor mensen die andere intervallen willen plotten, kijk eens op &lt;a href="http://www.solution-web.nl/projects/general/collatz.htm" target="_blank"&gt;de demo&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/DKIKeiJr-2I" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/35-willekeurige-getallen-en-simpel-.html</guid>
			<pubDate>Sat, 10 Dec 2011 21:57:13 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/35-willekeurige-getallen-en-simpel-.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Raytracing 01 - De basisstappen]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/pdtMcyPA3QI/34-raytracing-01-de-basisstappen.html</link>
			<description>Zo, er kwam tijdelijk iets te veel voorbij om een zinnig stuk te schrijven, maar dan nu toch echt. Raytracing. &lt;a href="http://www.solution-web.nl/blog/32-raytracing-the-prequel.html" target="_blank"&gt;Had ik beloofd&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Wat is &lt;a href="http://en.wikipedia.org/wiki/Ray_tracing_(graphics)" target="_blank"&gt;Ray Tracing&lt;/a&gt;?&lt;br /&gt;
&lt;/h2&gt;Ray tracing is een algoritme om een weergave van een drie dimensionale omgeving te cre&amp;euml;ren op een tweedimensionaal vlak. In monkey terms, om afbeeldingen te renderen. Ray tracing heeft als voordelen dat vrij veel visuele effecten zoals schaduwen en reflecties eenvoudig te implementeren zijn en dat het algoritme ook vrij logisch is. Het grote nadeel is dat het ongelofelijk veel zinloos rekenwerk is, duizenden keren zo veel als noodzakelijk voor wireframe-rendering.&lt;br /&gt;
&lt;br /&gt;
Het algoritme is simpel. Men heeft namelijk een camerapunt en een &amp;quot;denkbeeldig&amp;quot; scherm. Vervolgens stel je voor iedere pixel van dat scherm een &amp;quot;lichtstraal&amp;quot; op, die door die pixel gaat vanuit het camerapunt. Dan is het een kwestie van het eerste object vinden waar die straal op botst. Dit is tijdrovend en daarmee ook het grootste punt van vertraging. Tot zover de theorie, nu &lt;a href="http://www.solution-web.nl/projects/raytracer2/" target="_blank"&gt;het programma&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Licht en schaduw&lt;br /&gt;
&lt;/h2&gt;Om mee te beginnen wilde ik net als &lt;a href="http://www.flipcode.com/archives/Raytracing_Topics_Techniques-Part_1_Introduction.shtml" target="_blank"&gt;dit artikel op Flipcode&lt;/a&gt;, dat geholpen heeft bij het schrijven van mijn profielwerkstuk, beginnen met simpele diffusie en schaduw.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Schaduw&lt;/b&gt; kan je berekenen door vanaf het punt in de ruimte dat je gevonden hebt te kijken of er een vrij pad bestaat tussen dat punt en de lichtbron(nen). Dit is eigenlijk hetzelfde als een gewone intersectietest, dus niet heel bijzonder.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Diffusie&lt;/b&gt; is daarentegen een stuk moeilijker correct te simuleren. Eigenlijk zou je miljarden fotonen moeten afvuren en kijken waar ze een beetje terechtkomen. Helaas, dit is veel werk, en dus doen we een benadering. Deze gaat als volgt:&lt;br /&gt;
&lt;code&gt;for(iedere lichtbron) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if(!in_schaduw()) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lichtsterkte += lichtsterkte_bron * (oppervlaktenormaal * lichtinvalshoek) / afstand_lichtbron^2;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
Zoals te zien is deze verre van correct, maar het ziet er verder redelijk uit en daar gaat het om.. Zie onder.&lt;br /&gt;
&lt;img src="http://www.solution-web.nl/images/blog/raytrace1.png" alt="Resultaat van raytracer 1" class="screenshot"&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/pdtMcyPA3QI" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/34-raytracing-01-de-basisstappen.html</guid>
			<pubDate>Mon, 21 Nov 2011 20:30:52 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/34-raytracing-01-de-basisstappen.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Javascript image viewer]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/l3Zes9EbGfY/33-javascript-image-viewer.html</link>
			<description>Het schrijven van een artikel over &lt;a href="http://www.solution-web.nl/blog/32-raytracing-the-prequel.html" target="_blank"&gt;ray-tracing&lt;/a&gt; duurt iets langer dan ik tijd voor heb; in plaats daarvan iets waar makkelijker tijd voor vrij te maken is, namelijk iets wat ik toch al nodig had. Wat dan? Een lichtgewicht programma om simpel te schrijven afbeeldingsformaten (NetPBM, SWI) te lezen.&lt;br /&gt;
&lt;br /&gt;
Blijkbaar kan dat ook in javascript, want &lt;a href="http://www.solution-web.nl/projects/viewers/image.htm" target="_blank"&gt;het is gelukt&lt;/a&gt;. De bediening is vrij simpel, sleep een afbeeldingsbestand van je computer naar het venster, en hij wordt weergegeven. Voor ondersteunde formaten en exporteren moetn men even de muis over de menutab rechtsboven houden.&lt;br /&gt;
&lt;br /&gt;
Dit projectje was ook voor mij een ervaring om een keertje met CSS3 te spelen, in dit geval transities, gradienten en &amp;quot;position:fixed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Mocht iemand nog een goed idee hebben voor een te ondersteunen bestandsformaat, laat deze achter als reactie. (en suggereer geen TIFF, daar wordt al aan gewerkt)&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/l3Zes9EbGfY" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/33-javascript-image-viewer.html</guid>
			<pubDate>Fri, 07 Oct 2011 18:42:29 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/33-javascript-image-viewer.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Raytracing - The prequel]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/I1rbJeTqHwI/32-raytracing-the-prequel.html</link>
			<description>Voor mijn profielwerkstuk heb ik het afgelopen jaar een &lt;a href="http://en.wikipedia.org/wiki/Ray_tracing_(graphics)" target="_blank"&gt;Raytracer&lt;/a&gt; geschreven. Eigenlijk acht, trouwens. Waarom is dit relevant? Dat is het ook niet. &lt;a href="http://www.solution-web.nl/projects/raytracer/" target="_blank"&gt;Maar het resultaat is wel leuk.&lt;/a&gt; (versie 2 werkt niet, geen zin om die te fixen. Alle andere versies werken wel.)&lt;br /&gt;
&lt;br /&gt;
De reden dat ik dit op schrijf, is dat ik niet helemaal tevreden ben met het eindresultaat. Het ziet er allemaal wel redelijk uit, maar vanaf een bepaald punt moest ik enkel en alleen om mijn eerdere fouten in het ontwerp heen werken. Het resultaat is langzaam en bovendien een &amp;quot;amateuristische hack&amp;quot; te noemen.&lt;br /&gt;
&lt;br /&gt;
Dit bracht mij tot het plan om een serie over ray-tracing te gaan schrijven. Te beginnen zo snel mogelijk. In een aantal delen ga ik een ray-tracer schrijven, waar steeds weer nieuwe grafische mogelijkheden aan toe gaan worden gevoegd. Ik hoop een deel per maand te kunnen gaan schrijven, maar helaas ben ik begonnen met studeren (iets nuttigs) dus wordt er meer beslag gelegd op mijn tijd. We zien wel. Dit was deel 0, dus nu gaat het beginnen.&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/I1rbJeTqHwI" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/32-raytracing-the-prequel.html</guid>
			<pubDate>Sun, 04 Sep 2011 16:21:57 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/32-raytracing-the-prequel.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Wireframe drawing in Javascript]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/wnA4eSN2e6E/30-wireframe-drawing-in-javascript.html</link>
			<description>&lt;a href="http://www.solution-web.nl/projects/demos/wireframe-sphere.htm" target="_blank"&gt;&lt;img src="http://www.solution-web.nl/images/screenshots/wireframe-sphere.png" alt="Dit is een bol als wireframe" class="screenshot"&gt;&lt;/a&gt;&lt;br /&gt;
Even een korte, want heel bijzonder is deze ook niet. Ik ben bezig met iets van een 3D renderer voor canvas, en dit was een oefening. Een bol getekend als wireframe.&lt;br /&gt;
&lt;br /&gt;
De demo tekent een bol gebaseerd op rasterlengte (voor de rest van dit stukje L) kwadraat punten, verdeeld over de bol volgens lengte- en breedtegraden. Hierdoor ontstaan 2 x (L*(L-1) driehoeken, in de standaardinstellingen 480.&lt;br /&gt;
&lt;br /&gt;
Beweeg de muis om de bol te draaien, + en - om in en uit te zoomen. Daarnaast zijn er nog een paar opties:&lt;br /&gt;
&lt;b&gt;Rasterlength&lt;/b&gt;: Zie vorige paragraaf&lt;br /&gt;
&lt;b&gt;Depth darkning&lt;/b&gt;: Lijnen veraf worden donkerder getekend&lt;br /&gt;
&lt;b&gt;Draw points&lt;/b&gt;: Tekent de punten waarop het frame gebaseerd is.&lt;br /&gt;
&lt;b&gt;Draw wireframe&lt;/b&gt;: Geen idee wat dit doet. Wees creatief.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Ondersteuning&lt;br /&gt;
&lt;/h2&gt;Succesvol getest met:&lt;br /&gt;
&lt;b&gt;PC&lt;/b&gt;: Internet Explorer 9, Firefox 4 (beste resultaat), Chrome 12, Safari 5 (glitchy), Opera 11&lt;br /&gt;
&lt;b&gt;Mobiel(!!!)&lt;/b&gt;: Safari (iOS 4 op iTouch 3rd gen &amp;amp; iPhone 3GS), Android browser (HTC Wildfire), BlackBerry browser (Torch 9800)&lt;br /&gt;
&lt;br /&gt;
De mobiele apparaten hebben natuurlijk geen muis. Tap op het scherm om te draaien. Ik ben erg onder de indruk van de ondersteuning van de gebruikte technologie&amp;euml;n. We gaan zo steeds verder naar 1 web toe.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/wnA4eSN2e6E" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/30-wireframe-drawing-in-javascript.html</guid>
			<pubDate>Fri, 22 Jul 2011 22:44:40 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/30-wireframe-drawing-in-javascript.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Mijn inzending voor de demojs.org Js1k]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/MG3HLue-N9A/28-mijn-inzending-voor-de-demojs-org-js1k.html</link>
			<description>Ik las op de &lt;a href="http://www.twitter.com/js1k" target="_blank"&gt;twitter van Js1k&lt;/a&gt; dat &lt;a href="http://www.demojs.org/" target="_blank"&gt;DemoJS&lt;/a&gt;, een franse demoscene bijeenkomst, een js1k categorie voor inzendingen had. Na &lt;a href="http://www.solution-web.nl/blog/25-fontein-js1k-en-html5-speedtest.html" target="_blank"&gt;mijn eerste simpele poging tot een demo&lt;/a&gt; wilde ik wel eens zien hoe hoog ik kon komen in een echte competitie. Het resultaat? 4e plaats achter niemand minder dan &lt;a href="http://www.p01.org/" target="_blank"&gt;p01&lt;/a&gt;.&lt;br /&gt;
&lt;a href="http://solution-web.nl/projects/demos/ringmini.htm" target="_blank"&gt;&lt;img src="http://www.solution-web.nl/images/screenshots/the-ring.png" alt="En dit wordt dus vierde" class="screenshot"&gt;&lt;/a&gt;&lt;br /&gt;
Met zo'n hoge score moet er dus wel iets speciaals aan zijn. Tijd voor een technische ontleding dan maar. Om te beginnen, waaraan heb ik de bytes verspilt? Een snelle telling levert het volgende:&lt;br /&gt;
&lt;code&gt;Basis set-up: 86 bytes&lt;br /&gt;
Punten genereren: 185 bytes&lt;br /&gt;
Rotaties: 181 bytes&lt;br /&gt;
Tekenen: 175 bytes&lt;br /&gt;
Radial blur-effect: 119 bytes&lt;br /&gt;
Andere dingen waar ik niet direct een naam voor heb: 273 bytes&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Dit brengt mij tot het prachtige totaal van 1019 bytes. Ik schaam mij uiteraard diep dat ik niet alles heb volgekregen, maar het zij zo. Nu even iets dieper op de materie ingaan. Hoe heb ik die bytes echt besteed?&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;De ring zelf&lt;br /&gt;
&lt;/h2&gt;De ring bestaat uit 20 &amp;quot;objecten&amp;quot; waarvan ik twee dingen weet: plaats (xyz notatie) en kleur. De plaats is vrij simpel. Ik voegde een kleine ribbel in de ring toe omdat een gewone ring wat saai is. De punten liggen hierdoor 0.05 van de centrale cirkel af. Dit is trouwens geen berekend getal, gewoon proberen. 0.1 was te veel en minder zag je bijna niet. &lt;a href="http://www.peoplecanfly.com/blog/2011/01/design-by-tweaking/" target="_blank"&gt;Design by tweaking&lt;/a&gt; was hierbij vrij nuttig.&lt;br /&gt;
&lt;code&gt;for(i=0;i&amp;lt;20;i++) {&lt;br /&gt;
&amp;nbsp;x = cos(i * 2 * PI / 20);&lt;br /&gt;
&amp;nbsp;y = sin(i * 2 * PI / 20);&lt;br /&gt;
&amp;nbsp;z = (i%2 - 0.5) * 0.1; // Levert 0.05 of -0.05, om en om.&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
Voor de kleur had ik een aantal idee&amp;euml;n, iedere met zijn eigen voordelen.&lt;br /&gt;
&lt;code&gt;r = Math.random();&lt;br /&gt;
// n&amp;gt;&amp;gt;0 is een verkorte versie van Math.floor(n).&lt;br /&gt;
&lt;br /&gt;
Methode 1: kleur = &amp;quot;rgb(&amp;quot;+(r()*256&amp;lt;&amp;lt;0)+&amp;quot;,&amp;quot;+(r()*256&amp;lt;&amp;lt;0)+&amp;quot;,&amp;quot;+(r()*256&amp;lt;&amp;lt;0)+&amp;quot;)&amp;quot;; // 58 bytes;&lt;br /&gt;
&lt;br /&gt;
Methode 2: kleur = &amp;quot;#&amp;quot;+(0xffffff*r()&amp;gt;&amp;gt;0).toString(16); // 35 bytes&lt;br /&gt;
&lt;br /&gt;
Methode 3: kleur = &amp;quot;#&amp;quot;+(16e6*r()&amp;gt;&amp;gt;0).toString(16); // 31 bytes&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Hoewel methoden 2 &amp;amp; 3 korter zijn, had ik genoeg ruimte over voor methode 1, en het voordeel van die is dat hij &lt;i&gt;altijd&lt;/i&gt; valide kleuren levert, in plaats van 93% (methode 2) of 89% (methode 3). Daarnaast ga je er dan ook van uit dat browsers je fouten netjes opvangen (wat ze trouwens wel doen, kudos daarvoor).&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Het scherm&lt;br /&gt;
&lt;/h2&gt;Ik wilde dat de demo op volledig scherm zou draaien, zonder vervelde scrollbars en dat hij mee zou schalen als je het venster verkleinde. Ik had voor de veelgebruikte methode van width = innerWidth - 20 kunnen gaan, maar besloot dat niet om 2 redenen:&lt;br /&gt;
&lt;br /&gt;
1. Je gebruikt dan stiekem niet het hele scherm&lt;br /&gt;
2. Alleen Chrome houdt de scrollbars verborgen bij het verkleinen van het scherm.&lt;br /&gt;
&lt;br /&gt;
Toevallig kwam ik er achter dat als je je Canvas een &amp;quot;style&amp;quot;-attribuut met &amp;quot;position: absolute;top 0;left:0;&amp;quot; je het element wel volledige breedte en hoogte mee kan geven. Dit trucje werkt zelfs volledig cross-browser. Awesome.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Het beeld&lt;br /&gt;
&lt;/h2&gt;Hier gaat het uiteindelijk allemaal om. Ten eerste de zwarte achtergrond. Normaal gesproken zou je een schermvullende zwarte rechthoek tekenen, maar hier is een makkelijker alternatief. Aangezien ik toch al een stijl toewijs aan het canvas, kan daar net zo makkelijk &amp;quot;background:#000;&amp;quot; aan toegevoegd worden. Nu hebben we een zwarte achtergrond voor slechts 16 bytes.&lt;br /&gt;
&lt;br /&gt;
Over de projectie ga ik niet al te veel uitwijden, dit zijn dezelfde rotaties als gebruikt bij &lt;a href="http://www.solution-web.nl/blog/26-anaglyphe-3d-in-javascript-of-een-van-mijn-slechtere-idee-n-.html" target="_blank"&gt;de 3d kubus&lt;/a&gt;. Wel gebruik ik ook hier weer &amp;quot;bollen&amp;quot;, omdat deze makkelijk perspectivisch correct te laten zijn.&lt;br /&gt;
&lt;br /&gt;
Bij het uiteindelijke tekenen speel ik ook een beetje vals. Door gebruik te maken van globalCompositeOperation &amp;quot;lighter&amp;quot; hoef ik namelijk geen extra bytes te gebruiken voor &lt;a href="http://en.wikipedia.org/wiki/Z-buffering" target="_blank"&gt;Z-buffering&lt;/a&gt;. Weer een klein beetje winst.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Blur&lt;br /&gt;
&lt;/h2&gt;De ring zelf is vrij saai om naar te kijken, dus moest er ook nog een effect overheen. Om de ring &amp;quot;lichtgevend&amp;quot; te laten lijken besloot ik radial blur over het scherm heen te zetten. Dit gaat als volgt. Je maakt een tweede canvas aan, en kopieert daarop de afbeelding, lichtjes vergroot, in dit geval 1.1 keer.&lt;br /&gt;
De nieuwe laag kopieer je transparant terug over de oude. Als je dit een paar keer herhaalt met toenemende transparantie, krijg je een vrij overtuigend effect.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Andere dingen&lt;br /&gt;
&lt;/h2&gt;Toen de shim bekend werd, bleek dat ik een aantal dingen al cadeau kreeg, en dus nog zo'n 150 bytes over had. Deze zijn uiteraard nuttig besteed.&lt;br /&gt;
&lt;br /&gt;
Ik besloot om de ring op te delen in twee ringen, die steeds van straal veranderen. Dit is makkelijker dan het lijkt. Door puntnummer modulo twee te doen heb je namelijk heel makkelijk om en om 1 of 0. De straal krijg je dan als volgt:&lt;br /&gt;
&lt;code&gt;R = (i%2?2:.5)^sin(e);&lt;/code&gt;&lt;br /&gt;
waarbij R de uiteindelijke straal is, i het puntnummer, en e het framenummer maal een constante. Hierdoor maakten een punt en zijn volgende altijd een mooie tegengestelde beweging, die nog vloeiend was ook. Ideaal.&lt;br /&gt;
&lt;br /&gt;
Toen ik daarna nog wat overhad besloot ik een oude truc te gebruiken, voeg ruis toe. Door de berekeningen van de tweede rotatie iets te vervuilen met nog een tweede sinus erin danst de ring over het hele scherm heen, in plaats van alleen in het midden.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Tot slot&lt;br /&gt;
&lt;/h2&gt;Ik ben nog steeds ongelofelijk trots dat ik met mijn armzalige poging het toch nog tot de 4e plaats heb weten te schoppen. Daarnaast hoop ik dat deze how-to andere mensen inspiratie geeft om ook een mooie demo in elkaar te zetten.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/MG3HLue-N9A" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/28-mijn-inzending-voor-de-demojs-org-js1k.html</guid>
			<pubDate>Mon, 04 Jul 2011 13:52:00 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/28-mijn-inzending-voor-de-demojs-org-js1k.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Evoluerende afbeeldingen]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/t8xLB7cRD3M/27-evoluerende-afbeeldingen.html</link>
			<description>&lt;img src="http://www.solution-web.nl/projects/genetic/images/firefox-result.png" alt=""&gt; &lt;img src="http://www.solution-web.nl/projects/genetic/images/monalisa-result.png" alt=""&gt; &lt;img src="http://www.solution-web.nl/projects/genetic/images/chrome-result.png" alt=""&gt;&lt;br /&gt;
Na gezien te hebben hoeveel mensen blijkbaar interesse hebben voor mijn &lt;a href="http://www.solution-web.nl/blog/17-evolutietheorie-en-theoretische-probleemoplossing.html" target="_blank"&gt;vorige berichtje over het genetische algoritme&lt;/a&gt; was er voor mij reden genoeg om nog een projectje er aan te wagen.&lt;br /&gt;
&lt;br /&gt;
Het idee deze keer werd gegeven door &lt;a href="http://www.nihilogic.dk/labs/evolving-images/" target="_blank"&gt;Nihilogic&lt;/a&gt;, die op zijn beurt weer een programma'tje had geschreven dat met een genetisch algoritme een afbeelding natekent uit een groot aantal semi-transparante polygonen.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Hoe het werkt&lt;br /&gt;
&lt;/h2&gt;Aangezien mijn vorige berichtje niet helemaal duidelijk was over hoe het genetische algoritme werkt, of misschien gewoon voor storende herhaling, nog een keer. In de eerste plaats maak je een populatie aan van individuen (het onderscheid tussen computers en biologie is soms even zoek) en daaruit kies je de beste. Deze laat kruis je en daarmee ga je verder.&lt;br /&gt;
&lt;br /&gt;
Om het af te maken muteer je zo af en toe 1 waarde van het individu om te zorgen dat er daadwerkelijk ook verbetering kan optreden.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Het programma&lt;br /&gt;
&lt;/h2&gt;... kan &lt;a href="http://www.solution-web.nl/projects/genetic/painter.htm" target="_blank"&gt;hier&lt;/a&gt; gevonden worden. Het programma is vrij simpel, kies een afbeelding en klik op start. Klik op de resultaatafbeelding om hem te exporteren. Verder zijn er nog een paar opties:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Polygooncomplexiteit&lt;/b&gt;: aantal hoeken per polygoon.&lt;br /&gt;
&lt;b&gt;Aantal polygonen&lt;/b&gt;: totaal aantal polygonen in de tekening.&lt;br /&gt;
&lt;b&gt;Populatiegrootte&lt;/b&gt;: aantal verschillende combinaties dat geprobeerd wordt.&lt;br /&gt;
&lt;b&gt;Selectiegraad&lt;/b&gt;: gedeelte van de populatie die gebruikt wordt voor de volgende. 0,25 betekent dat 25% mee mag.&lt;br /&gt;
&lt;b&gt;Mutatiekans&lt;/b&gt;: kans dat een polygoon muteert.&lt;br /&gt;
&lt;b&gt;Mutatiesterkte&lt;/b&gt;: grotere waarde betekent grotere mutaties&lt;br /&gt;
&lt;b&gt;Uniforme kruising&lt;/b&gt;: Als deze is geselecteerd, worden willekeurig de helft van de polygonen van de ene ouder en de andere genomen. Indien niet geselecteerd wordt er een breekpunt gekozen.&lt;br /&gt;
&lt;b&gt;Dood ouders&lt;/b&gt;: indien geselecteerd worden de besten van deze generatie niet meegenomen naar de volgende.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Notities&lt;br /&gt;
&lt;/h2&gt;Het programma werkt niet in IE9. Het kan vrij lang duren voordat er herkenbare resultaten zijn, de afbeeldingen boven zijn gemaakt terwijl ik dit bericht schreef. Code gebruiken mag natuurlijk altijd, maar een vermelding is wel zo aardig. Enjoy!&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/t8xLB7cRD3M" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/27-evoluerende-afbeeldingen.html</guid>
			<pubDate>Sat, 11 Jun 2011 22:14:09 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/27-evoluerende-afbeeldingen.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Anaglyphe 3D in Javascript, of een van mijn slechtere ideeÃ«n.]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/VOCCzcGfHYk/26-anaglyphe-3d-in-javascript-of-een-van-mijn-slechtere-idee-n-.html</link>
			<description>&lt;img src="http://www.solution-web.nl/images/blog/3dglasses.png" alt="Deze heb je nodig voor het resultaat van dit artikel" class="header"&gt;&lt;br /&gt;
3D is hip. Films, televisie en games moeten allemaal in 3D. Simpel omdat het kan. Daarom wilde ik kijken of dat ook in javascript kan, en snel. Moeilijke klus? Ja. Onmogelijk? Nee. Aan de slag dus maar.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Het idee&lt;br /&gt;
&lt;/h2&gt;Om simpel te beginnen, wilde ik kijken of het mogelijk was een kubus die bestaat uit bolletjes in 3D te laten zien, met een wisselend camerapunt. In principe is mijn programma dan in pseudocode:&lt;br /&gt;
&lt;code&gt;Loop for ieder frame {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Verzin voor beide ogen een camera punt&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Bepaal de kijkrichting&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Projecteer alle punten van de kubus op het scherm volgens beide camerapunten&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
Simpel genoeg om te werken, nu de uitvoering nog.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;De camera&lt;br /&gt;
&lt;/h2&gt;Een willekeurig punt kiezen lijkt makkelijk. Helaas krijg je als je gewoon iedere keer met Math.random() willekeurige coordinaten kiest, niet een heel mooie beweging, maar spring je houterig van punt naar punt.&lt;br /&gt;
&lt;br /&gt;
Een oplossing vond ik &lt;a href="http://acko.net/blog/js1k-demo-the-making-of" target="_blank"&gt;dit artikel&lt;/a&gt;. Kies voor een paar frames een doelwit waar de camera naar toe moet verplaatsen, neem een intermediair en neem de camerapositie. Wat je hierna doet is interpoleren. Eerst het intermediair naar het doelwit en daarna de camerapositie naar het intermediair. Code is makkelijker dan taal.&lt;br /&gt;
&lt;code&gt;function interpoleer(begin, doel) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return begin + (doel - begin) * (een getal &amp;lt; 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
intermediair = interpoleer(intermediair, doelwit);&lt;br /&gt;
camerapositie = interpolair(camerapositie, intermediair);&lt;br /&gt;
&lt;br /&gt;
if(framenummer%7 == 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;kies een nieuw doelwit;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Natuurlijk zou je ook nog meer intermediairs kunnen toevoegen voor een nog voor een vloeiendere verschuiving, maar dit volstaat. Het effect van deze methode zie je hieronder. De hoekige zwarte lijn is een co&amp;ouml;rdinaat van de doelwitpositie, de groene lijn is het intermediair en de blauwe lijn (die inmiddels vloeiend is) is de camerapositie.&lt;br /&gt;
&lt;img src="http://acko.net/files/js1k-7.jpg" alt=""&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Twee ogen&lt;br /&gt;
&lt;/h2&gt;Nu heb ik 1 camerapunt, ik had er twee nodig. Om te beginnen moet ik reken ik dan yaw en pitch uit. (Geen idee hoe die in het Nederlands zouden moeten heten) Deze kan je makkelijk aflezen uit de camerapositie, aangenomen dat je naar het middelpunt van de scene kijkt. Hierna kan je met de yaw de geroteerde x-as uitrekenen.&lt;br /&gt;
&lt;code&gt;yaw&amp;nbsp; = atan2(X, -Z);&lt;br /&gt;
pitch = atan2(Y , sqrt(X * X + Z * Z));&lt;br /&gt;
&lt;br /&gt;
xAs = new Vector(cos(yaw), 0, sin(yaw));&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Met die x-as is het vervolgens heel makkelijk om links en rechts van het oorspronkelijke punt twee cameraposities te kiezen. Het mag ook wel eens simpel zijn.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Projecties&lt;br /&gt;
&lt;/h2&gt;Projecties zijn na het uitrekenen van de yaw en de pitch vrij makkelijk. Je transleert ieder punt naar de camera toe, past de twee rotaties toe, et voila. Dit moet voor beide camerapunten uiteraard.&lt;br /&gt;
&lt;code&gt;for ieder punt van de kubus&lt;br /&gt;
&amp;nbsp;&amp;nbsp;X = punt.x - cameraX;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Y = punt.y - cameraY;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Z = punt.z - cameraZ;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// Yaw rotatie&lt;br /&gt;
&amp;nbsp;&amp;nbsp;X2 = X * cos(yaw) + Z * sin(yaw);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Y2 = Y;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Z2 = Z * cos(yaw) - X * sin(yaw);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;// Pitch rotatie&lt;br /&gt;
&amp;nbsp;&amp;nbsp;X3 = X2;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Y3 = Y2 * cos(pitch) + Z2 * sin(pitch)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;Z3 = Z2 * cos(pitch) - Y2 * sin(pitch);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if(Z3 &amp;gt; 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Zorg dat deze pixel getekend wordt.&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
Helaas wordt je altijd door schade en schande wijs in dit vak. Het blijkt namelijk dat als je twee kleuren hebt, het opvalt als een achtergelegen bol over een bol in de voorgrond heen getekend wordt. Hiervoor moesten alle puntjes dus nog ge-Z-buffert worden. Maar met dit alles klopte het eindelijk.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Compatibiliteit&lt;br /&gt;
&lt;/h2&gt;&lt;a href="http://www.solution-web.nl/projects/3d/cube.htm" target="_blank"&gt;De demo&lt;/a&gt; werkt in Chrome, Opera, Firefox, IE9. Safari geeft echter vreemde resultaten, want die wist het canvas niet, wat wel zou moeten gebeuren bij het resetten van de hoogte danwel breedte. Je hebt een Rood / magenta 3D bril nodig als je de demo wil bekijken.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.solution-web.nl/projects/3d/cube.htm" target="_blank"&gt;&lt;img src="http://www.solution-web.nl/images/screenshots/3d-cube-1.png" alt="En dit is dan het eindresultaat." class="screenshot"&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/VOCCzcGfHYk" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/26-anaglyphe-3d-in-javascript-of-een-van-mijn-slechtere-idee-n-.html</guid>
			<pubDate>Sun, 22 May 2011 18:46:00 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/26-anaglyphe-3d-in-javascript-of-een-van-mijn-slechtere-idee-n-.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Fontein, JS1k en HTML5 speedtest]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/3GhYmeBKzJ4/25-fontein-js1k-en-html5-speedtest.html</link>
			<description>Er is geen duidelijke aanleiding voor dit projectje. Browsersnelheidstests zijn er veel (waarvan de meeste veel beter dan deze) en JS1k is allang afgelopen. Waarschijnlijk gewoon omdat het kan.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;JS1k&lt;br /&gt;
&lt;/h2&gt;Eerst een introductie voor &lt;a href="http://www.js1k.com/" target="_blank"&gt;JS1k&lt;/a&gt;. JS1k is een competitie voor JavaScript programmeurs en webdevelopers met een simpele opdracht. Doe iets interessants met slechts 1kB code. Nou je kan dus blijkbaar in 1kB code &lt;a href="http://www.solution-web.nl/projects/speedtest/fountain.htm" target="_blank"&gt;een kleurenfontein&lt;/a&gt; maken.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;De test&lt;br /&gt;
&lt;/h2&gt;Wat deze test uitprobeert, is hoeveel balletjes de fontein uit kan spuwen en nog steeds 50FPS (lekker vloeiend) beeld kan uitspuwen. &lt;br /&gt;
De resultaten waren verassend. De uitslag: 1. Internet Explorer 9, 2. Firefox 4, 3. Google Chrome, 4. Apple Safari, en 5 Opera. (Opera rapporteerd wel getekende bolletjes, maar ze zijn niet zichtbaar). Wat wel opviel bij Firefox en Chrome is dat ze op zich grote aantallen halen, maar zo af en toe even ertussenuit vallen. Ik vermoed dat dit door de garbagecollector komt, die blijkbaar een redelijke CPU-hit heeft.&lt;br /&gt;
&lt;br /&gt;
De test is vrij simpel zelf uit te voeren, ga naar de applicatie toe (klik op de screenshot hieronder), en het aantal balletjes verschijnt in de titelbalk. Indien balletjes plotseling verdwijnen is dit door een dal in de performance. Het is niet anders, dat was het doel van de test.&lt;br /&gt;
&lt;a href="http://www.solution-web.nl/projects/speedtest/fountain.htm" target="_blank"&gt;&lt;img src="http://www.solution-web.nl/images/screenshots/speed-fountain-1.jpg" alt="Zo ziet een kleurenfontein er dus uit" class="screenshot"&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/3GhYmeBKzJ4" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/25-fontein-js1k-en-html5-speedtest.html</guid>
			<pubDate>Mon, 16 May 2011 21:21:56 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/25-fontein-js1k-en-html5-speedtest.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Nieuw spel: Achtung die Kurve!]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/Cnp1YnHfnNY/24-nieuw-spel-achtung-die-kurve-.html</link>
			<description>Het is alweer een eeuwigheid geleden dat ik een nieuw spel geplaatst heb. Niet omdat ik niet bezig ben geweest nieuwe spellen te maken, maar omdat het steeds bij het ontwikkelen ergens mis ging. Deze keer is het wel gelukt, dus ik presenteer met gepaste trots:&lt;br /&gt;
&lt;a href="http://www.solution-web.nl/games/kurve/" target="_blank"&gt;&lt;b&gt;Achtung, die Kurve! The Canvas Edition&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://www.solution-web.nl/images/screenshots/kurve-1.jpg" alt="Screenshot van Achtung die Kurve" class="screenshot"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt; Het spel&lt;br /&gt;
&lt;/h2&gt;Achtung die Kurve is een 2-6 personen multiplayer spel, en daarmee het eerste multiplayer spel dat ik ooit gemaakt heb. Het spel is heel simpel, je bent een steeds verder groeiende slang, en je moet langer overleven dan je tegenstanders om punten te scoren. Wie als eerste het beoogde aantal heeft ((aantal spelers - 1) * 10) wint.&lt;br /&gt;
Op zich is dit al moeilijk genoeg, maar je wordt ook nog geholpen met allerlei bonussen die jou helpen, of je tegenstanders pesten. Die jou ook kunnen pesten dus.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
Daarbij wil ik ook nog melden dat heb project SGE2 is afgeblazen. De HTML5 Canvas specificatie voorzien in alles wat SGE2 levert en meer, en is bovendien sneller.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/Cnp1YnHfnNY" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/24-nieuw-spel-achtung-die-kurve-.html</guid>
			<pubDate>Fri, 13 May 2011 14:24:50 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/24-nieuw-spel-achtung-die-kurve-.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Maart 2011: Browsermania]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/HIALpQU5qug/23-maart-2011-browsermania.html</link>
			<description>Afgelopen maand hebben alle grote browsermakers (te zijn &lt;a href="http://www.google.nl/chrome" target="_blank"&gt;Google&lt;/a&gt;, &lt;a href="http://www.mozilla-europe.org/nl/" target="_blank"&gt;Mozilla&lt;/a&gt; en &lt;a href="http://www.ie9.com/" target="_blank"&gt;Microsoft&lt;/a&gt;) hun nieuwe versie in de groep gegooid, Microsoft en Mozilla wat luider dan Google.&lt;br /&gt;
Ontwikkelaars zoals ik zijn dan ongelofelijk blij, want die kunnen dan met een nieuw platform aan de slag, waar altijd weer spannend is of het allemaal wel een beetje werkt. Hierbij mijn beknopte recensie van Chrome 10, Firefox 4 en Internet Explorer 9.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Uiterlijk&lt;br /&gt;
&lt;/h2&gt;Het simpelste puntje, uiterlijk. Het eerste dat opvalt, is dat zowel Internet Explorer als Firefox de minimalistische &amp;quot;look&amp;quot; van Chrome overgenomen hebben, met een adresbalk en hooguit 3 knoppen. Dit is een goede verandering, naar mijn idee. Hoe minder ruimte voor de browser, hoe meer voor de rest.&lt;br /&gt;
Daarnaast ondersteunen de nieuwe versies van IE en FF ook &lt;a href="http://nl.wikipedia.org/wiki/ClearType" target="_blank"&gt;ClearType&lt;/a&gt;, wat de tekst op webpagina's mooier maakt. Helaas werkt dit op sommige PC's niet optimaal, zie &lt;a href="http://www.solution-web.nl/blog/21-vetgedrukte-test-in-internet-explorer-9-en-firefox-4-.html" target="_blank"&gt;mijn eerdere blogbericht&lt;/a&gt; voor een oplossing.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Compatibiliteit&lt;br /&gt;
&lt;/h2&gt;Firefox en Chrome waren hier altijd al heel sterk mee, maar IE trekt langzaam bij. Met deze versie is eindelijk de workaround voor window.event niet meer nodig. Verder lijken de meeste pagina's tegenwoordig exact hetzelfde te renderen in alle 3, mits de pagina geen fouten bevat. &lt;br /&gt;
Een minpunt dat ik heb aan te merken op IE is wel zijn overactieve &lt;a href="http://nl.wikipedia.org/wiki/Quirks_mode" target="_blank"&gt;quirks mode&lt;/a&gt; van IE, die nog steeds veel te vaak geactiveerd wordt en die bovendien geen HTML5 elementen ondersteunt. Aandachtspuntje, Redmond?&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Snelheid&lt;br /&gt;
&lt;/h2&gt;Altijd een lastig onderwerp, vooral omdat iedereen zijn eigen tests heeft. Mijn test was hier mijn demo voor golfinterferentie (blogbericht &lt;a href="http://www.solution-web.nl/blog/19-golven-en-sinussen.html" target="_blank"&gt;hier&lt;/a&gt;, demo &lt;a href="http://www.solution-web.nl/projects/waves/interference.htm" target="_blank"&gt;hier&lt;/a&gt;) en mijn test was als volgt: bij hoeveel verschillende golfbronnen is de animatie niet langer vloeiend. Hierbij geldt dus, hoe meer hoe beter.&lt;br /&gt;
De resultaten zijn als volgt. Derde plaats IE (1 bron en dan al niet vloeiend), tweede plaats FF (2 bronnen) en de eerste plaats voor Chrome, met maar liefts 4 bronnen. Hierbij dient wel vermeldt te worden dat Chrome met 4 bronnen nog vloeiender was dan IE bij 1.&lt;br /&gt;
Chrome is dus de winnaar, maar alle drie zijn een stuk sneller dan hun voorganger.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;HTML5 ondersteuning&lt;br /&gt;
&lt;/h2&gt;In deze catagorie is er vooral door &lt;a href="http://people.mozilla.com/~prouget/ie9/" target="_blank"&gt;FF&lt;/a&gt; en &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/02/09/summarizing-common-browser-tests.aspx" target="_blank"&gt;IE&lt;/a&gt; nogal met poep gegooid naar elkaar, maar dat mag de pret niet drukken. Wat wil men van HTML5? Dat lijstje wil ik samenvatten als Audio, Video, Canvas, Drag 'n Drop en File Handling. Alle andere zijn &lt;i&gt;naar mijn idee&lt;/i&gt; niet vitaal, maar dat is het ook het hele punt van dit artikel, wat is naar mijn idee interessant aan deze browser.&lt;br /&gt;
Dat gezegd zijnde, Chrome en FF ondersteunen deze elementen allemaal (FF ondersteunt gee h.246 video vanwege licenties) en IE mist alleen de File API. Close, but no cigar.&lt;br /&gt;
Daarnaast zijn er nog dingen als de nieuwe HTML5 input elementen, zoals schuifbalken en kalenders, die zowel IE als FF missen. Deze zijn dus &lt;i&gt;niet&lt;/i&gt; vitaal, aangezien ze eenvoudig zijn te simuleren met javascript.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Conclusie&lt;br /&gt;
&lt;/h2&gt;Als ik dat al zo mag noemen. Dit is wat mij opviel, en waarom ik nog niet ga overstappen. Wel ga ik, nu IE canvas ondersteunt en FF behoorlijk wat sneller is geworden, (dat mag ook wel eens gezegd worden) proberen de demo's op deze website ook werkend te houden voor deze browsers. Ze zijn wel op de goede weg.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/HIALpQU5qug" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/23-maart-2011-browsermania.html</guid>
			<pubDate>Mon, 18 Apr 2011 17:44:48 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/23-maart-2011-browsermania.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[To infinity and beyond!]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/U_NqDZEJe4Q/22-to-infinity-and-beyond-.html</link>
			<description>... and beyond and beyond and beyond and did I mention beyond?&lt;br /&gt;
&lt;br /&gt;
Ten minste, dat is het gevoel dat ik altijd krijg als ik naar afbeeldingen van fractals kijk. Ieder zijn mening. Tot zover een poging tot een gevatte introductie.&lt;br /&gt;
&lt;br /&gt;
Nieuwsgierigheid naar deze dingen dreef mij om een weer eens een Javascript HTML5 projectje te starten om deze dingen te kunnen renderen. &lt;a href="http://www.solution-web.nl/projects/complex/fractals.htm" target="_blank"&gt;Voila&lt;/a&gt;. Deze maakt een afbeelding volgens de opgegeven instellingen van een van de leden van de Multibrot reeks, standaard de Mandelbrotset. Maar goed, hoe werkt het?&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Het werkt zo&lt;br /&gt;
&lt;/h2&gt;Kort door de bocht: de Mandelbrot-set bevat alle complexe getallen C waarvoor de recursieve reeks Z(n) = Z(n-1)^2 + C met Z(0) = 0 niet naar oneindig toe gaat. Twee voorbeelden. Het getal 1 zit niet in de set, want dan wordt de reeks 0, 1, 2, 5, 26 en zo verder. Het getal i zit wel in de reeks, want dan krijg je 0, i, -1 + i, -i, -1+i etc. Dit wordt door het programma benaderd door de reeks een aantal keren te herhalen, en te kijken of de absolute waarde van Z binnen 2 blijft, want alle getallen in de set liggen in dat gebied.&lt;br /&gt;
Kleuren gebeurt door het moment te nemen waarop het getal Z buiten de cirkel met straal 2 komt. Dit is een integer, en hier kan je, door middel van een verloopje of een palet, een kleur aan verbinden. Er zijn betere manieren, maar dit ziet er al leuk uit.&lt;br /&gt;
&lt;br /&gt;
De Multibrot-sets worden gevonden door in plaats van Z(n-1) kwadraat een andere macht te nemen, waarvan de bekendste -2 is, onder de naam Tricorn, hoewel ik niet zou weten hoe die in het Nederlands heet.&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style="display: inline;"&gt;Het programma&lt;br /&gt;
&lt;/h2&gt;Het programma heeft een vrij simpele interface, klikken waar je wilt inzoomen, en iedere instelling spreekt voor zich, maar toch nog even snel het lijstje:&lt;br /&gt;
&lt;b&gt;Grootte:&lt;/b&gt; pixelformaat van het eindresultaat&lt;br /&gt;
&lt;b&gt;Kleurenschema:&lt;/b&gt; spreekt voor zich&lt;br /&gt;
&lt;b&gt;Anti-alias samples:&lt;/b&gt; aantal subpixels waarin iedere pixel wordt opgedeeld &lt;i&gt;tijdens het peilen&lt;/i&gt;. Het gemiddelde resultaat wordt genomen en daar wordt de kleur aan verbonden.&lt;br /&gt;
&lt;b&gt;Iteraties:&lt;/b&gt; aantal keer dat de reeks minimaal herhaald moet worden. Hoe hoger, hoe beter!&lt;br /&gt;
&lt;b&gt;Zoomniveau:&lt;/b&gt; aantal keer zoomen per klik&lt;br /&gt;
&lt;b&gt;Fractal:&lt;/b&gt; Selecteer welke van de multibrots je wil hebben.&lt;br /&gt;
&lt;br /&gt;
Onder alvast een voorproefje...&lt;br /&gt;
&lt;img src="http://www.solution-web.nl/images/blog/mandelbrot.png" alt="Een ingezoomd deel van de Mandelbrot-set, schaal 8000 : 1, met 9x anti-aliasing en kleurenschema palet" class="full"&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/U_NqDZEJe4Q" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/22-to-infinity-and-beyond-.html</guid>
			<pubDate>Wed, 13 Apr 2011 17:31:52 +0200</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/22-to-infinity-and-beyond-.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Vetgedrukte test in Internet Explorer 9 en FireFox 4?]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/lkpFYpEbFfQ/21-vetgedrukte-test-in-internet-explorer-9-en-firefox-4-.html</link>
			<description>Maart was een goede maand voor browsermakers, met het uitkomen van Internet Explorer 9, &lt;a href="http://mozilla.com/firefox" target="_blank"&gt;FireFox 4&lt;/a&gt; en &lt;a href="http://www.google.com/chrome?hl=nl" target="_blank"&gt;Google Chrome 10&lt;/a&gt;. (Hoewel chrome iedere 6 weken vernieuwt, maar er komt nog wel een stukje over waarom deze bijzonder is.) Wat mij echter opviel, was dat bij zowel IE9 en FF4 alle tekst plotseling vetgedrukt was, tenzij het italic (schuingedrukt) was.&lt;br /&gt;
&lt;br /&gt;
Even gegoogle later bleek dat dit veroorzaakt werd door een foutje in de instalatie van &lt;a href="http://nl.wikipedia.org/wiki/ClearType" target="_blank"&gt;ClearType&lt;/a&gt; voor het lettertype Arial. De oplossing hiervoor was makkelijk, namelijk Arial opnieuw installeren. Hiervoor een stappenplan, omdat ik nu toch al een fix-it berichtje post.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Stap 1&lt;/b&gt;&lt;br /&gt;
Zoek de windows fonts map op. Normaal gesproken in de map &lt;i&gt;C:/Windows/fonts&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Stap 2&lt;/b&gt;&lt;br /&gt;
Zoek in de Fonts map Arial (standaard) op, en sleep die ergens anders naartoe, bureaublad of iets dergelijks.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Stap 3&lt;/b&gt;&lt;br /&gt;
Sleep hem weer terug. Geef desnoods UAC toestemming, en hierna is het gerepareerd! Probleem opgelost.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/lkpFYpEbFfQ" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/21-vetgedrukte-test-in-internet-explorer-9-en-firefox-4-.html</guid>
			<pubDate>Sat, 26 Mar 2011 11:17:21 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/21-vetgedrukte-test-in-internet-explorer-9-en-firefox-4-.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Na-berichtje over het genetische algoritme]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/_BVfA09keGU/20-na-berichtje-over-het-genetische-algoritme.html</link>
			<description>Als vervolg op &lt;a href="http://www.solution-web.nl/blog/17-evolutietheorie-en-theoretische-probleemoplossing.html" target="_blank"&gt;dit berichtje&lt;/a&gt; heeft Allard Dupuis voor hetzelfde probleem ook een programmaatje geschreven, in C++, en deze versie wil ik natuurlijk niemand onthouden.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.solution-web.nl/projects/genetic/Salesman.rar" target="_blank"&gt;Download het RAR archief&lt;/a&gt;, pak het uit en probeer het, zou ik zeggen. De instellingen zijn 10.000 generaties, 5% mutaties en 100 chromosomen. &lt;b&gt;P&lt;/b&gt; plaatst 50 willekeurige punten, &lt;b&gt;enter&lt;/b&gt; start de simulatie. Afsluiten met het rode kruisje of &lt;b&gt;esc&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Ook interessant om te vermelden is dat op het rechterscherm de snelste route volgens een ander algoritme, namelijk door vanaf het beginpunt steeds het dichtstbijzijnde punt te kiezen waar je nog niet geweest bent. Het is sneller, maar (in ieder geval voor kleine aantallen, &amp;lt; 20) niet beter.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/_BVfA09keGU" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/20-na-berichtje-over-het-genetische-algoritme.html</guid>
			<pubDate>Thu, 24 Mar 2011 18:18:20 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/20-na-berichtje-over-het-genetische-algoritme.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Golven en sinussen]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/PlD6QGC11ck/19-golven-en-sinussen.html</link>
			<description>&lt;img src="http://www.solution-web.nl/images/blog/golven.png" alt="Golf interferentie is leuk" class="heading"&gt;&lt;br /&gt;
Golven en sinussen, leuke begrippen. En daar kan je ook leuke dingen mee. In een golf van inspiratie heb ik een programmaatje geschreven dat de interferentie tussen golven weergeeft. Op zich is dit een vrij simpel script, maar je kan er leuke dingen mee doen.&lt;br /&gt;
Om zelf ook plaatjes te maken als de bovenstaande, &lt;a href="http://www.solution-web.nl/projects/waves/interference.htm" target="_blank"&gt;een werkende demo staat hier&lt;/a&gt;. Aan te raden is de nieuwste versie van Google Chrome om hem te testen, FireFox stottert namelijk nogal bij het draaien en Safari doet al helemaal raar. Internet Explorer ondersteunt nog steeds Canvas niet. (versie 9 wel, maar die is nog niet officieel vrijgegeven, dus test ik daar niet voor. Eerst maar eens een echte versie, geen beta.)&lt;br /&gt;
&lt;br /&gt;
Dat was alleen niet het interessante deel. Interessanter is om dat snel werkend te krijgen in een webbrowser. Een bekend probleem hierbij is dat de sinusfunctie, of eigenlijk de benadering er van, erg langzaam werkt. Hierom heb ik ook nog een snellere sinusbenadering bedacht, die welliswaar heel grof is, maar goed genoeg. De beschrijving over hoe dat werkt, evenals het programma waarmee de functie gevonden is, &lt;a href="http://www.solution-web.nl/projects/waves/fsin.htm" target="_blank"&gt;staan ook online&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Helaas werkt niet alles even goed als gehoopt. Hoewel deze methode in gecompileerde talen als C++ veel sneller is, is de tijdswinst in Google Chrome slechts klein (1.4 x zo snel in de tests) en in Firefox en Safari zelfs een achteruitgang. (0.7 x zo snel) Echter dient wel vermeld te worden dat zowel fSin als de normale sinus sneller werken in Chrome, een factor 2 sneller ongeveer.&lt;br /&gt;
Bij deze uitslagen hoeft mijn woord niet noodzakelijk voor waar aangenomen te worden, de snelheidstest is te vinden op &lt;a href="http://www.solution-web.nl/projects/waves/fsin.htm" target="_blank"&gt;de pagina over de snellere sinus&lt;/a&gt;. En hoewel Internet Explorer de test &lt;i&gt;in theorie&lt;/i&gt; wel zou moeten kunnen halen, duurde het dusdanig lang dat ik de test heb afgebroken. Als FF het in 3.5 seconden haalt, mag IE er niet langer dan 2 minuten over doen.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/PlD6QGC11ck" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/19-golven-en-sinussen.html</guid>
			<pubDate>Mon, 14 Mar 2011 18:54:52 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/19-golven-en-sinussen.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[We gaan verhuizen]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/UUO-ZDFkYJA/18-we-gaan-verhuizen.html</link>
			<description>Solution gaat een echt domein krijgen! In de komende weken/maanden (een precies tijdschema is moeilijk) zullen alle onderdelen van deze website (&lt;a href="http://solution.awardspace.info" target="_blank"&gt;http://solution.awardspace.info&lt;/a&gt;) worden overgeheveld naar een nieuw, &amp;quot;echt&amp;quot; domein, te vinden op &lt;a href="http://www.solution-web.nl" target="_blank"&gt;http://www.solution-web.nl&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Aangezien Solution in principe een one-man-show is, zal dit waarschijnlijk minder soepel gaan dan zou moeten, maar daar leven we dan maar mee.&lt;br /&gt;
&lt;br /&gt;
Een kleine voetnoot hierbij: Solution is op zoek naar andere creatieve programmeurs, die de limieten van de webstandaarden ook opzoeken, leuke projectjes hebben en die, onder eigen naam uiteraard, willen publiceren. Ge&amp;iuml;nteresseerden kunnen zich melden op info@solution.awardspace.info.&lt;br /&gt;
&lt;i&gt;A creative Solution to a better web&lt;/i&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/UUO-ZDFkYJA" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/18-we-gaan-verhuizen.html</guid>
			<pubDate>Fri, 18 Feb 2011 19:04:17 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/18-we-gaan-verhuizen.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Evolutietheorie en theoretische probleemoplossing]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/GcnMcSQ7ha8/17-evolutietheorie-en-theoretische-probleemoplossing.html</link>
			<description>&lt;i&gt;Voor mensen die geen zin hebben door te scrollen naar het einde van dit stukje, mijn programma is &lt;a href="http://www.solution-web.nl/projects/genetic/salesman.htm" target="_blank"&gt;hier&lt;/a&gt; te vinden.&lt;/i&gt;&lt;br /&gt;
Dit klinkt helemaal niet gerelateerd, maar het is het wel. Recentelijk ben ik gestuit op een techniek die &amp;quot;genetisch algoritme&amp;quot; heet. Het gegeven fascineerde me.&lt;br /&gt;
Me helemaal inlezen in zoiets is helaas mijn stijl niet, dus heb ik maar geprobeerd er een praktisch voorbeeld van te maken. Hiervoor heb ik geprobeerd om het klassieke probleem van de handelsreiziger op te lossen.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Het probleem&lt;/b&gt;&lt;br /&gt;
Stel je bent een handelsreiziger, die naar een aantal steden in een land moet. Dit doet hij met het vliegtuig. Echter, er zijn vele verschillende volgorden die hij hierbij kan nemen. Hij wil hierbij natuurlijk een zo kort mogelijke route nemen. Hoe moet hij vliegen?&lt;br /&gt;
&lt;br /&gt;
Dit probleem kan niet direct, volgens een formule etc., worden opgelost. Een aanpak zou zijn om het dan maar te brute forcen, om dan gewoon iedere mogelijkheid te proberen en te kijken welke de kortste is, maar dat levert ook problemen op. Immers, voor een &lt;i&gt;n&lt;/i&gt; aantal punten, zijn er &lt;i&gt;(n-1)!&lt;/i&gt;, dus n-1 faculteit, oplossingen. Dit valt nog wel mee voor 6 punten (120 oplossingen), maar met 20 punten levert dat 19! = 121.645.100.408.832.000 of grofweg 2^58 mogelijkheden. Dat zijn veel te veel oplossingen om te proberen. Iets anders dus maar.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;De oplossing&lt;/b&gt;&lt;br /&gt;
Hierbij komt die titel dus kijken. Hoe heeft de natuur het probleem &amp;quot;Het organisme moet overleven&amp;quot; opgelost? Door te kijken wie het beste overleefde, en met die selecte groep verder te gaan om dat generatie na generatie te herhalen. De nieuwe groepen muteerden lichtjes en er werden genen uitgewisseld. En zo verder.&lt;br /&gt;
&lt;br /&gt;
Dat was het voor het lesje biologie. De kern hieruit is dat je begint met wat probeersels, de best gelukten eruit pakt, daar een nieuwe groep probeersels van maakt die allemaal een beetje verschillend zijn, en van de nieuwe probeersels weer kijkt wie de besten zijn. Hiermee is het mogelijk om met het voorbeeld van de 20 punten de snelste weg al met 20.000 pogingen te vinden. Een besparing van 99,99999999999984661275 (dus bijna 100) procent! Toegegeven, het algoritme zelf levert iets meer overhead dus het bespaar iets minder, maar nog steeds veel. De naam van het beestje? &lt;a href="http://nl.wikipedia.org/wiki/Genetisch_algoritme" target="_blank"&gt;Genetisch Algoritme&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hoe het werkt&lt;/b&gt;&lt;br /&gt;
Stel je de volgorde van de punten voor. Dat is een chromosoom. Hiervan begin je met een aantal willekeurig gegenereerde exemplaren. In iedere generatie neem je de beste, de beste 20% in mijn applicatie. Daarmee ga je een nieuwe generatie proberen te maken. &lt;br /&gt;
&lt;br /&gt;
Dit doe je door eerst natuurlijk twee ouders uit je huidige generatie te kiezen. Deze kruis je. In het echt kan je 1 chromosoom alleen in bijzondere omstandigheden kruisen, maar dat doet er niet toe. Het proces is exact hetzelfde als hoe het in de natuur gebeurt, je neemt een stukje van ouder 1 en je vult dat aan met ouder 2. Hier moet je, afhankelijk van de data waar je het over hebt, een of andere methode gebruiken om dat te doen. Op &lt;a href="http://www.obitko.com/tutorials/genetic-algorithms/crossover-mutation.php" target="_blank"&gt;deze website&lt;/a&gt; staan een aantal voorbeelden. Kind kan de was doen.&lt;br /&gt;
&lt;br /&gt;
Daarnaast vind er over de eeuwen heen mutaties plaats in het DNA. Deze hebben we ook nodig, om onze kansen de goede oplossing te vinden te vergroten. Hiervoor verwisselen we per generatie een paar punten van plek in de volgorde. Heel toevallig ook volgens hetzelfde algoritme waarmee je normaal gesproken kaarten zou schudden. Het resultaat is hetzelfde.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;De applicatie&lt;/b&gt;&lt;br /&gt;
Geheel geschreven met gebruikmaking van de standaarden voor HTML5 Canvas en JavaScript heb ik hiervan &lt;a href="http://solution.awardspace.info/projects/genetic/salesman.htm" target="_blank"&gt;hier een werkend voorbeeldje gemaakt&lt;/a&gt;. Deze poogt de kortste route te vinden door een set punten. Ik heb aardige resultaten gekregen tot wel 100 punten, hoewel ze niet altijd even goed zijn. De demo is succesvol getest in Google Chrome 8 en Apple Safari 5. Mozilla Firefox 3.6 werkt half, maar er zit een bug in de implementatie van Canvas die volledig functioneren tegengaat. Internet Explorer 8 werkt niet. Dit alles onder Windows Vista. Andere browsers en besturingssystemen zouden kunnen werken maar dit is niet getest.&lt;br /&gt;
&lt;br /&gt;
Dan nog een afsluitend verhaaltje. Het algoritme levert namelijk niet de beste route. Het levert een goede route, die naar alle waarschijnlijkheid niet heel veel verschilt van de daadwerkelijke. Het is echter, net als evolutie, een toevalsspel. Dezelfde puntenwolk kan namelijk best een paar oplossingen hebben die helemaal niet op elkaar lijken. Mensen lijken immers ook niet op haaien.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/GcnMcSQ7ha8" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/17-evolutietheorie-en-theoretische-probleemoplossing.html</guid>
			<pubDate>Sun, 30 Jan 2011 18:11:07 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/17-evolutietheorie-en-theoretische-probleemoplossing.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[SGE2 laat nog even op zich wachten]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/4oNLceO7zFI/16-sge2-laat-nog-even-op-zich-wachten.html</link>
			<description>Er is naar mijn weten beloofd dat SGE2 nu wel uitgegeven zou zijn. Helaas, het tegengestelde is waar. Ten eerste omdat ik vond dat een algehele recode nodig was (van div naar HTML5 Canvas) en nu werkt dat niet helemaal naar behoren.&lt;br /&gt;
&lt;br /&gt;
Stress dus all over the place. Dan is hier namelijk nog een klein probleempje. Microsoft weigert namelijk Canvas te ondersteunen zolang en nog het kleinste beetje gezeur is over de HTML5 defenitie. Terwijl dit element al min of meer vast licht. Hierdoor zal tot een update van Microsoft IE (alle versies) niet ondersteund worden.&lt;br /&gt;
&lt;br /&gt;
Totdat alles goed werkt, ga ik ook geen testversie publiceren. Hier dan maar wel een screenshot van een falende test-render:&lt;br /&gt;
&lt;img src="http://solution.awardspace.info/images/screenshots/sge2-2.png" alt="Let op de ruit links, dat hoort een ruit te zijn" class="screenshot"&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/4oNLceO7zFI" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/16-sge2-laat-nog-even-op-zich-wachten.html</guid>
			<pubDate>Mon, 01 Mar 2010 18:10:32 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/16-sge2-laat-nog-even-op-zich-wachten.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Concept POAP vrijgegeven]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/ZbAzeoG12dQ/15-concept-poap-vrijgegeven.html</link>
			<description>Vanwege kerst, en het feit dat ik het nodig had voor iets, heb ik een concept protocol geschreven voor peer2peer communicatie met AJAX.&lt;br /&gt;
Dit heet vanaf nu &lt;b&gt;POAP&lt;/b&gt; (Peer2peer Over AJAX Protocol) in plaats van zijn codenaam &lt;i&gt;charlie&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Lees hem, negeer hem, maar hij &lt;a href="http://solution.awardspace.info/docs/?q=POAP" target="_blank"&gt;staat in de documentatie&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
En voor de mensen die nog willen weten waar de codenaam op sloeg? Hierop:&lt;br /&gt;
&lt;img src="http://www.glogster.com/media/1/4/90/9/4900950.jpg" alt="Charlie Brown" class="full"&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/ZbAzeoG12dQ" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/15-concept-poap-vrijgegeven.html</guid>
			<pubDate>Sat, 19 Dec 2009 19:04:10 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/15-concept-poap-vrijgegeven.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Tweede test SGE 2]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/ClsDhPDPDwM/14-tweede-test-sge-2.html</link>
			<description>Deel twee van de Solution Graphics Engine was al te testen, maar nu is er weer iets toegevoegd en dus wil ik graag iedereen laten kijken of alles nog werkt.&lt;br /&gt;
&lt;a href="http://solution.awardspace.info/games/sge2frame.htm" target="_blank"&gt;De tweede test voor SGE 2&lt;/a&gt; vindt u door op de link te klikken. De rendering zou er ongeveer uit moeten zien als de onderstaande afbeelding, en beide vierkanten zouden om het midden heen moeten draaien.&lt;br /&gt;
Mocht het programma langzaam draaien, dan raad ik aan over te stappen &lt;a href="http://www.google.com/chrome" target="_blank"&gt;Google Chrome&lt;/a&gt;. Deze is draait dit programma 5 keer sneller dan &lt;a href="http://nl.www.mozilla.com/nl/" target="_blank"&gt;Mozilla Firefox&lt;/a&gt; en circa 20 keer sneller dan IE 8, afhankelijk van uw &lt;a href="http://nl.wikipedia.org/wiki/Operating_system" target="_blank"&gt;operating system&lt;/a&gt;. (Windows XP, Vista, 7 etc.)&lt;br /&gt;
&lt;img src="http://solution.awardspace.info/images/screenshots/sge2-1.jpg" alt="Voorbeeldrendering van SGE2 test 2" class="screenshot"&gt;&lt;br /&gt;
Er vallen ergens in de rotatie gaten in de vierkanten, ik ben me hiervan bewust maar weet niet hoe dit gerepareerd moet worden. Misschien in de volgende update.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/ClsDhPDPDwM" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/14-tweede-test-sge-2.html</guid>
			<pubDate>Sat, 21 Nov 2009 11:33:18 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/14-tweede-test-sge-2.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[php My FTP 2.0 gehackt]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/tzaz8Yvcu_0/13-php-my-ftp-2-0-gehackt.html</link>
			<description>Er is helaas weer slecht nieuws te rapporteren. Er is bewezen (en vrij makkelijk werkbaar gesteld) dat onze eigen FTP tool vrij makkelijk te hacken is. Een willekeurige voorbijganger kon zomaar inloggen.&lt;br /&gt;
&lt;br /&gt;
Dit kon allemaal vrij makkelijk door een javascript een cookie te laten zetten op de pagina, waarna het voor de server leek alsof er een valide gebruiker was ingelogd. De beveiliging was dan ook kinderlijk eenvoudig, en werkte dus ook tijdens de test, niet in de realiteit.&lt;br /&gt;
&lt;br /&gt;
Dit probleem is bekend, maar php My FTP 2.0 is sowieso in ieder opzicht verouderd, en gaat niet meer ge-update worden. Binnenkort (misschien eerste kwartaal 2010?) komt versie 3 uit. Deze is, behalve dat hij circa 70% bandbreedte scheelt, ook veel veiliger. &lt;br /&gt;
&lt;br /&gt;
We raden iedereen aan die dit programma nog steeds gebruikt, tijdelijk hiervan af te zien, en in plaats daarvan een andere gratis tool te gebruiken, zoals &lt;a href="http://fireftp.mozdev.org/" target="_blank"&gt;FireFTP&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/tzaz8Yvcu_0" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/13-php-my-ftp-2-0-gehackt.html</guid>
			<pubDate>Tue, 17 Nov 2009 23:02:43 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/13-php-my-ftp-2-0-gehackt.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[IE 8 wordt steeds trager]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/j1aF5lniFmw/12-ie-8-wordt-steeds-trager.html</link>
			<description>Internet Explorer 8 wordt met elke patch trager, blijkt uit diverse benchmarks. De browser is nu nog maar 1,5 keer zo snel als IE7, in het begin was IE8 drie keer zo snel.&lt;br /&gt;
&lt;br /&gt;
Uit &lt;a href="http://www.betanews.com/article/Security-fixes-JavaScript-update-bog-down-Internet-Explorer-8/1256917196" target="_blank"&gt;testen van Betanews&lt;/a&gt; blijkt dat IE8 sinds de release met elke patchronde langzamer wordt, terwijl andere browsers alsmaar sneller worden. De eerste testversie van IE8 bleek nog drie maal sneller dan IE7, maar die performance haalt de browser inmiddels bij lange na niet meer.&lt;br /&gt;
 &lt;br /&gt;
Sinds de &lt;a href="http://webwereld.nl/nieuws/63923/microsoft-komt-dinsdag-met-monsterpatch.html" target="_blank"&gt;monsterpatch van dinsdag 13 oktober&lt;/a&gt; daalde de performance van IE8 naar 1,54 maal zo snel als IE7 op Vista SP2. Omdat de laatste JavaScript-update alleen XP en Vista betreft, is IE8 op Windows 7 nog relatief het snelst. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Hotfix voor patch&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Overigens blijkt een van de recente patches voor IE, Security Bulletin MS09-054, voor problemen te zorgen in het weergeven van websites. Daar is nu een '&lt;a href="http://www.security.nl/artikel/31343/1/Microsoft_patcht_Internet_Explorer_patch.html" target="_blank"&gt;hotfix&lt;/a&gt;' voor uitgebracht. &lt;br /&gt;
&lt;br /&gt;
BetaNews berekent op basis van diverse factoren (snelheid JavaScript, css weergave, canvas, laadtijden van pagina's) een CRPI-score (Comprehensive Relative Performance Index). In de &lt;a href="http://www.betanews.com/article/Google-Chrome-in-a-runaway-lead-for-browser-performance-supremacy/1257011509" target="_blank"&gt;benchmark&lt;/a&gt; scoort Chrome (20 maal sneller dan IE7) het best.&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://images.betanews.com/media/4003.jpg" alt="Benchmark van browsers relatief aan IE 7" class="full"&gt;&lt;br /&gt;
Bron: &lt;a href="http://webwereld.nl/nieuws/64165/ie8-steeds-trager-door-vele-patches.html" target="_blank"&gt;Webwereld&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/j1aF5lniFmw" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/12-ie-8-wordt-steeds-trager.html</guid>
			<pubDate>Wed, 04 Nov 2009 08:46:16 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/12-ie-8-wordt-steeds-trager.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[YouTube tijdelijk offline]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/ylflyRvVaMA/11-youtube-tijdelijk-offline.html</link>
			<description>Videowebsite YouTube was op zondag enige tijd niet bereikbaar. Zodra je YouTube.nl of YouTube.com bezocht verscheen de melding in beeld: &amp;quot;YouTube is down for maintenance and will be back shortly&amp;quot;. Een aantal dagen geleden verscheen deze melding ook al eens in beeld. Tegelijkertijd waren video's ingesloten op websites ook niet beschikbaar. Google heeft in ieder geval &lt;a href="http://erictric.com/online/youtube-goes-down-for-maintenance" target="_blank"&gt;verklaard&lt;/a&gt; &amp;quot;We are aware that some users are having difficulty accessing videos on YouTube. We are working hard to fix the issue and will have the site back to normal as soon as possible.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Erictric.com suggereerde dat het met de YouTube store te maken had en tevens zag de website een link naar de shop op YouTube zelf. Echter deze shop met YouTube shirts, sokken, etc. bestaat al sinds half augustus.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/ylflyRvVaMA" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/11-youtube-tijdelijk-offline.html</guid>
			<pubDate>Mon, 02 Nov 2009 17:01:40 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/11-youtube-tijdelijk-offline.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Verslag na de stilte]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/wteQBRnAGjU/10-verslag-na-de-stilte.html</link>
			<description>En het is weereens een tijdje radiostil geweest. Dit is echter niet omdat ik niets aan het doen was, maar dat was niet omdat ik niets aan het doen was. Even een lijstje van wat er allemaal gaande was:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Project 1: De website vernieuwen&lt;/b&gt;&lt;br /&gt;
Hieraan was in januari al begonnen, en in maart was de website goed genoeg om te laten zien. Sindsdien was het alleen maar oude stukjes samenvoegen in het nieuwe ontwerp, en ze hier en daar aanpassen om in het nieuwe systeem te passen, dat halverwege niet werkbaar bleek en aangepast moest worden. Dit is tot nu toe alleen met de &lt;a href="http://solution.awardspace.info/docs/" target="_blank"&gt;documentatie&lt;/a&gt; gelukt. Bodemloze put dus.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Project 2: Verbeteringen SWI&lt;/b&gt;&lt;br /&gt;
Ik had bewezen dat ik het kon, een afbeeldingsformaat ontwerpen en (be)werkbaar maken. Nu heb ik voor mezelf een nieuw doel gesteld: &lt;i&gt;SWI wordt een &lt;a href="http://nl.wikipedia.org/wiki/Datacompressie" target="_blank"&gt;lossless gecomprimeerd&lt;/a&gt; afbeeldingsformaat, met betere compressie dan &lt;a href="http://nl.wikipedia.org/wiki/Png" target="_blank"&gt;PNG&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Project 3: SGE 2&lt;/b&gt;&lt;br /&gt;
De eerste versie van de SGE was... triest. Maar ook hier zijn doelen gesteld: SGE 2 moet zelf 2D afbeeldingen kunnen berekenen, en SGE 3 3D. Versie 2 komt nu langzaam in een alfa fase. Je kunt nu alvast &lt;a href="http://solution.awardspace.info/games/sge2frame.htm" target="_blank"&gt;testen&lt;/a&gt; of hij op jouw computer werkt. Tests zijn gelukt in FF 3.5, IE 8 &amp;amp; Chrome 2. Als het goedgaat zie je een vierkantje die om het midden heen draait. Als andere functie staat muisdetectie nog in de planning.&lt;br /&gt;
&lt;br /&gt;
Ik zit dus niet stil, maar meld alleen niet alles. Volgende keer meer bericht.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/wteQBRnAGjU" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/10-verslag-na-de-stilte.html</guid>
			<pubDate>Sat, 31 Oct 2009 20:01:05 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/10-verslag-na-de-stilte.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Elemental... breekt een record]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/iFYByNg_ir0/9-elemental-breekt-een-record.html</link>
			<description>Hoewel ik dit echt nooit aan heb zien komen, heeft Elemental toch echt &lt;b&gt;50 leden&lt;/b&gt; bereikt. Er is zelfs iemand uit het Verenigd Koninkrijk ingelogd.&lt;br /&gt;
Om dit te belonen heb ik toch het project maar weer opgestart en heb gisteren versie 1.15 de deur uit gedaan. Ook zijn de forums naar deze website verplaatst, maar daar hoeft niemand veel van te merken.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/iFYByNg_ir0" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/9-elemental-breekt-een-record.html</guid>
			<pubDate>Fri, 20 Mar 2009 17:34:23 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/9-elemental-breekt-een-record.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Erm... oeps?]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/L46Cjk8lL80/8-erm-oeps-.html</link>
			<description>Zoals een oplettende speler heeft opgemerkt, was het spelletje Tetris een beetje incompleet.&lt;br /&gt;
Van de 7 &lt;a href="http://solution.awardspace.info/games/tetris/" target="_blank"&gt;Tetris&lt;/a&gt; figuren misten er twee, om precies te zijn de J en de L. Dit is nu aangepast, excuses voor het (mogelijke) ongemak.s.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/L46Cjk8lL80" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/8-erm-oeps-.html</guid>
			<pubDate>Mon, 02 Mar 2009 16:45:06 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/8-erm-oeps-.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Eventjes afwezig]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/k2pgSGK04eQ/7-eventjes-afwezig.html</link>
			<description>Aan iedereen met vragen (zullen er weinig zijn), ik ben er eventjes niet. Op vakantie naar Frankrijk enzo.&lt;br /&gt;
Oh ja, voor ik het vergeet, er is nu een leesmij voor SGE beschikbaar. Voor die, die een spelletje proberen te schrijven. &lt;a href="http://solution.awardspace.info/docs/?q=sge" target="_blank"&gt;Zoek maar eens goed...&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/k2pgSGK04eQ" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/7-eventjes-afwezig.html</guid>
			<pubDate>Fri, 13 Feb 2009 21:30:26 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/7-eventjes-afwezig.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Nieuw spelletje]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/TlelKRf8eSI/6-nieuw-spelletje.html</link>
			<description>Tetris is een computerspel/puzzel ontworpen door Alexey Pajitnov in 1985. Het spel kreeg algemene bekendheid doordat het meegeleverd werd bij het spelletjesplatform &amp;quot;Gameboy&amp;quot; van Nintendo in 1989. De naam is afgeleid van het Griekse woord voor vier: tetra, omdat ieder blokje uit vier vierkantjes bestaat.&lt;br /&gt;
&lt;br /&gt;
Juist. Alsof iemand dat iets kan schelen. Wat er wel toe doet, is dat we dat spelletje nu ook op onze website hebben staan. Hij kan &lt;a href="http://solution.awardspace.info/games/" target="_blank"&gt;hier&lt;/a&gt; gevonden worden.&lt;br /&gt;
&lt;br /&gt;
Voor de programmeurs onder ons, ik ga binnenkort een SDK maken van de SGE, met instructie. Nu mogen jullie zelf spelletjes gaan maken!&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/TlelKRf8eSI" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/6-nieuw-spelletje.html</guid>
			<pubDate>Sat, 07 Feb 2009 16:57:48 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/6-nieuw-spelletje.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[Verhuizing feeds]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/sEpZRmn_6Zw/5-verhuizing-feeds.html</link>
			<description>Even een kort berichtje om de mensheid te laten weten dat onze rssfeed verhuisd is naar &lt;a href="http://www.feedburner.com/" target="_blank"&gt;feedburner&lt;/a&gt;. De nieuwe URL's zijn:&lt;br /&gt;
&lt;br /&gt;
Voor de blog:&lt;br /&gt;
&lt;a href="http://feeds2.feedburner.com/SolutionBlog" target="_blank"&gt;http://feeds2.feedburner.com/SolutionBlog&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Voor nieuwe forum posts:&lt;br /&gt;
&lt;a href="http://feeds2.feedburner.com/SolutionNieuweForumPosts" target="_blank"&gt;http://feeds2.feedburner.com/SolutionNieuweForumPosts&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/sEpZRmn_6Zw" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/5-verhuizing-feeds.html</guid>
			<pubDate>Tue, 20 Jan 2009 14:55:21 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/5-verhuizing-feeds.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[php My FTP 2.0 vrijgegeven]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/zkcRRbHW_0g/4-php-my-ftp-2-0-vrijgegeven.html</link>
			<description>Ik geef toe, het gebeurde eigenlijk gisteren. Maar dat mag de pret niet drukken. Het programma staan onder downloads. Daar staan ook de screenshots, die eerder geplaatst zijn. Vergeet ook niet de de &lt;a href="http://solution.awardspace.info/docs/phpmyftp/2.0/NL/Leesmij.html" target="_blank"&gt;leesmij&lt;/a&gt; te lezen, voor het geval je ergens op stuit.&lt;br /&gt;
&lt;br /&gt;
Voor de oplettende lezer is ook de tag Website aan dit bericht toegevoegd. Dat komt omdat er een nieuw stukje site bij is gekomen. Als je namelijk goed kijkt zie je dat er naast het kopje forum een kopje documentatie is bijgekomen.&lt;br /&gt;
&lt;br /&gt;
Hiermee kan gezocht worden in de vracht aan data die onze documentatie heet. Veel succes ermee!.&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/zkcRRbHW_0g" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/4-php-my-ftp-2-0-vrijgegeven.html</guid>
			<pubDate>Sat, 17 Jan 2009 12:48:23 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/4-php-my-ftp-2-0-vrijgegeven.html</feedburner:origLink></item>
		<item>
			<title><![CDATA[(bijna) nieuwe versie php My FTP]]></title>
			<link>http://feedproxy.google.com/~r/SolutionBlog/~3/tKy-ZvKpLDA/3--bijna-nieuwe-versie-php-my-ftp.html</link>
			<description>Het is weer een tijdje stil geweest, maar dat kwam niet omdat we winterslaap hielden. We waren gewoon druk bezig aan een project, namelijk de nieuwe versie van php My FTP.&lt;br /&gt;
&lt;br /&gt;
Het is nu af, alleen we er zijn nu veiligheidstests bezig. Omdat een ftp tool natuurlijk ook gebruikt kan worden om iemands hele server over te nemen, hebben we besloten om deze keer maar voor veilig te gaan en een hacker vragen naar de broncode te kijken. Zodra hij geen weg naar binnen weet, plaatsen we het programma. Tegen die tijd hopen we ook de downloads sectie weer werkend te hebben.&lt;br /&gt;
&lt;br /&gt;
Om iedereen toch even een sneak-peak van het programma te geven, hebben we wat screenshots. Zie hieronder.&lt;br /&gt;
&lt;img src="http://solution.awardspace.info/images/screenshots/pmf-1.jpg" alt=""&gt;&lt;br /&gt;
&lt;img src="http://solution.awardspace.info/images/screenshots/pmf-2.jpg" alt=""&gt;&lt;br /&gt;
&lt;img src="http://solution.awardspace.info/images/screenshots/pmf-3.jpg" alt=""&gt;&lt;img src="http://feeds.feedburner.com/~r/SolutionBlog/~4/tKy-ZvKpLDA" height="1" width="1"/&gt;</description>
			<guid isPermaLink="false">http://www.solution-web.nl/blog/3--bijna-nieuwe-versie-php-my-ftp.html</guid>
			<pubDate>Sat, 10 Jan 2009 20:36:48 +0100</pubDate>
		<feedburner:origLink>http://www.solution-web.nl/blog/3--bijna-nieuwe-versie-php-my-ftp.html</feedburner:origLink></item>
	</channel>
</rss>
