<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://betamos.se/bloggen">
  <channel>
    <title>Betamos | Tankar om webben</title>
    <link>http://betamos.se/bloggen</link>
    <description />
    <language>sv</language>
          <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/betamos" /><feedburner:info uri="betamos" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
    <title>Spela Snake med HTML5</title>
    <link>http://feedproxy.google.com/~r/betamos/~3/aV39v4nTQQk/spela-snake-med-html5</link>
    <description>&lt;div class="flattr-box"&gt;&lt;script type="text/javascript"&gt;
  var flattr_uid = 'betamos';
  var flattr_tle = 'Spela Snake med HTML5';
  var flattr_dsc = '&amp;lt;p&amp;gt;Under min julledighet har jag ägnat mig åt att &amp;lt;strong&amp;gt;utveckla ett spel&amp;lt;/strong&amp;gt; som jag kallar för &amp;lt;strong&amp;gt;Snake JS&amp;lt;/strong&amp;gt;. Spelidén bygger på det gamla spelet Snake, som man kunde spela på Nokia-mobiler från 90-talet. Snake JS, till skillnad från många andra spel, spelar man&amp;amp;nbsp;&amp;lt;strong&amp;gt;direkt i webbläsaren&amp;lt;/strong&amp;gt;!&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Visserligen har man kunnat spela spel på webben rätt länge, men det har varit med hjälp av Adobe&amp;amp;nbsp;&amp;lt;strong&amp;gt;Flash Player&amp;lt;/strong&amp;gt;, som visserligen är kraftfullt för multimedia, men det är inte en öppen webbstandard och det kostar pengar att använda utvecklingsverktyget. Snake JS är delvis konstruerat med en av de tekniker som i framtiden kommer att ersätta Flash, nämligen &amp;lt;a href=&amp;quot;http://diveintohtml5.org/&amp;quot;&amp;gt;HTML5&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Styr ormen med piltangenterna&amp;lt;/strong&amp;gt;. Det är bara att köra igång!&amp;lt;/p&amp;gt;&amp;lt;div id=&amp;quot;snake-js-parent&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;h2&amp;gt;Teknik&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Spelet är helt &amp;lt;strong&amp;gt;byggt i JavaScript&amp;lt;/strong&amp;gt;, med användning av den objekt-orienterade funktionaliteten som finns i språket. Spelet använder endast ett globalt variabelnamn — [javascript]SnakeJS()[/javascript]&amp;amp;nbsp;— och all kod finns i en fil.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Ritning av spelplanen görs med hjälp av &amp;lt;a href=&amp;quot;http://diveintohtml5.org/canvas.html&amp;quot;&amp;gt;Canvas-elementet&amp;lt;/a&amp;gt;, som är en del av HTML5. Ormen ritas mycket enkelt med raka linjer av hög tjocklek.&amp;amp;nbsp;Ormens runda svängar fås av [javascript]context.lineJoin = &amp;quot;round&amp;quot;[/javascript] och&amp;amp;nbsp;[javascript]context.lineCap = &amp;quot;round&amp;quot;[/javascript].&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;För den som är mer intresserad ligger &amp;lt;a href=&amp;quot;http://github.com/betamos/Snake-JS&amp;quot;&amp;gt;koden på GitHub&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;h2&amp;gt;Highscores&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;&amp;lt;?php $query = &amp;quot;SELECT sid, data + 0 as scoreFROM {webform_submitted_data}WHERE nid = 118 AND cid = 2ORDER BY score DESC LIMIT 10&amp;quot;;$res = db_query($query);$highscores = array();while ($row = db_fetch_object($res)) {		$query = &amp;quot;SELECT data	FROM {webform_submitted_data}	WHERE nid = 118 AND cid = 1 AND sid = %d&amp;quot;;		$name = db_result(db_query($query, $row-&amp;gt;sid));		$highscores[] = $name . &amp;#039;, &amp;#039; . $row-&amp;gt;score . &amp;#039;p&amp;#039;;}print theme_item_list($highscores, NULL, &amp;#039;ol&amp;#039;);?&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p style=&amp;quot;margin-bottom: 0;&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Publicera dina egna poäng&amp;lt;/strong&amp;gt; på highscore-listan:&amp;lt;/p&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;// &amp;lt;![CDATA[function SnakeJS(parentElement,config){var utilities=new Utilities();var defaultConfig={autoInit:true,gridWidth:30,gridHeight:20,frameInterval:150,pointSize:16,backgroundColor:&amp;quot;white&amp;quot;,snakeColor:&amp;quot;#4b4312&amp;quot;,snakeEyeColor:&amp;quot;white&amp;quot;,candyColor:&amp;quot;#b11c1c&amp;quot;,shrinkingCandyColor:&amp;quot;#199C2C&amp;quot;,scoreBoardColor:&amp;quot;#c0c96b&amp;quot;,scoreTextColor:&amp;quot;#4b4312&amp;quot;,collisionTolerance:1};var config=config?utilities.mergeObjects(defaultConfig,config):defaultConfig;var constants={DIRECTION_UP:1,DIRECTION_RIGHT:2,DIRECTION_DOWN:-1,DIRECTION_LEFT:-2,DEFAULT_DIRECTION:2,STATE_READY:1,STATE_PAUSED:2,STATE_PLAYING:3,STATE_GAME_OVER:4,INITIAL_SNAKE_GROWTH_LEFT:6,SCOREBOARD_HEIGHT:20,CANDY_REGULAR:1,CANDY_MASSIVE:2,CANDY_SHRINKING:3};var engine=new Engine(parentElement);this.init=function(){engine.initGame()};this.pause=function(){engine.pauseGame()};this.resume=function(){engine.resume()};this.getHighScore=function(){return engine.getHighScore()};function Engine(parentElement){var snake,candy,view,inputInterface,grid,currentState,frameIntervalId,score,highScore,collisionFramesLeft;this.initGame=function(){view=new View(parentElement,config.backgroundColor);inputInterface=new InputInterface(this.pauseGame,this.resumeGame,startMoving);snake=new Snake();grid=new Grid(config.gridWidth,config.gridHeight);score=0;highScore=score;snake.points.push(randomPoint(grid));snake.growthLeft=constants.INITIAL_SNAKE_GROWTH_LEFT;candy=randomCandy();view.initPlayField();drawCurrentScene();inputInterface.startListening();currentState=constants.STATE_READY};this.pauseGame=function(){if(currentState===constants.STATE_PLAYING){clearInterval(frameIntervalId);currentState=constants.STATE_PAUSED}};this.resumeGame=function(){if(currentState===constants.STATE_PAUSED){frameIntervalId=setInterval(nextFrame,config.frameInterval);currentState=constants.STATE_PLAYING}};this.getHighScore=function(){return highScore};var gameOver=function(){currentState=constants.STATE_GAME_OVER;clearInterval(frameIntervalId);var removeTail=function(){if(snake.points.length&amp;gt;1){snake.points.pop();drawCurrentScene();setTimeout(removeTail,config.frameInterval/4)}else setTimeout(resurrect,config.frameInterval*10)};var resurrect=function(){score=0;snake.growthLeft=constants.INITIAL_SNAKE_GROWTH_LEFT;snake.alive=true;drawCurrentScene();currentState=constants.STATE_READY};setTimeout(removeTail,config.frameInterval*10)};var startMoving=function(){if(currentState===constants.STATE_READY){frameIntervalId=setInterval(nextFrame,config.frameInterval);currentState=constants.STATE_PLAYING}};var nextFrame=function(){if(!moveSnake(inputInterface.lastDirection())){if(collisionFramesLeft&amp;gt;0){collisionFramesLeft--;return}else{snake.alive=false;drawCurrentScene();gameOver();return}}else collisionFramesLeft=config.collisionTolerance;if(!candy.age())candy=randomCandy();if(candy.point.collidesWith(snake.points[0])){eatCandy();candy=randomCandy()}drawCurrentScene()};var drawCurrentScene=function(){view.clear();view.drawSnake(snake,config.snakeColor);view.drawCandy(candy);view.drawScore(score,highScore)};var moveSnake=function(desiredDirection){var head=snake.points[0];var newDirection=actualDirection(desiredDirection||constants.DEFAULT_DIRECTION);var newHead=movePoint(head,newDirection);if(!insideGrid(newHead,grid))shiftPointIntoGrid(newHead,grid);if(snake.collidesWith(newHead,true)){return false}snake.direction=newDirection;snake.points.unshift(newHead);if(snake.growthLeft&amp;gt;=1)snake.growthLeft--;else snake.points.pop();return true};var eatCandy=function(){score+=candy.score;highScore=Math.max(score,highScore);snake.growthLeft+=candy.calories};var randomCandy=function(){do{var newCandyPoint=randomPoint(grid)}while(snake.collidesWith(newCandyPoint));var probabilitySeed=Math.random();if(probabilitySeed&amp;lt;0.75)var newType=constants.CANDY_REGULAR;else if(probabilitySeed&amp;lt;0.95)var newType=constants.CANDY_MASSIVE;else var newType=constants.CANDY_SHRINKING;return new Candy(newCandyPoint,newType)};var actualDirection=function(desiredDirection){if(snake.points.length===1)return desiredDirection;else if(utilities.oppositeDirections(snake.direction,desiredDirection)){return snake.direction}else{return desiredDirection}};var movePoint=function(oldPoint,direction){var newPoint;with(constants){switch(direction){case DIRECTION_LEFT:newPoint=new Point(oldPoint.left-1,oldPoint.top);break;case DIRECTION_UP:newPoint=new Point(oldPoint.left,oldPoint.top-1);break;case DIRECTION_RIGHT:newPoint=new Point(oldPoint.left+1,oldPoint.top);break;case DIRECTION_DOWN:newPoint=new Point(oldPoint.left,oldPoint.top+1);break}}return newPoint};var shiftPointIntoGrid=function(point,grid){point.left=shiftIntoRange(point.left,grid.width);point.top=shiftIntoRange(point.top,grid.height);return point};var shiftIntoRange=function(number,range){var shiftedNumber,steps;if(utilities.sign(number)==1){steps=Math.floor(number/range);shiftedNumber=number-(range*steps)}else if(utilities.sign(number)==-1){steps=Math.floor(Math.abs(number)/range)+1;shiftedNumber=number+(range*steps)}else{shiftedNumber=number}return shiftedNumber};var insideGrid=function(point,grid){if(point.left&amp;lt;0||point.top&amp;lt;0||point.left&amp;gt;=grid.width||point.top&amp;gt;=grid.height){return false}else{return true}};var randomPoint=function(grid){var left=utilities.randomInteger(0,grid.width-1);var top=utilities.randomInteger(0,grid.height-1);var point=new Point(left,top);return point}}function Grid(width,height){this.width=width;this.height=height}function Snake(){this.direction=constants.DEFAULT_DIRECTION;this.points=[];this.growthLeft=0;this.alive=true;this.collidesWith=function(point,simulateMovement){if(simulateMovement&amp;amp;&amp;amp;this.growthLeft===0)range=this.points.length-1;else range=this.points.length;for(var i=0;i&amp;lt;range;i++){if(point.collidesWith(this.points[i]))return true}return false}}function Point(left,top){this.left=left;this.top=top;this.collidesWith=function(otherPoint){if(otherPoint.left==this.left&amp;amp;&amp;amp;otherPoint.top==this.top)return true;else return false}}function Candy(point,type){this.point=point,this.type=type,this.score,this.calories,this.radius,this.color,this.decrement,this.minRadius;switch(type){case constants.CANDY_REGULAR:this.score=5;this.calories=3;this.radius=0.3;this.color=config.candyColor;break;case constants.CANDY_MASSIVE:this.score=15;this.calories=5;this.radius=0.45;this.color=config.candyColor;break;case constants.CANDY_SHRINKING:this.score=50;this.calories=0;this.radius=0.45;this.color=config.shrinkingCandyColor;this.decrement=0.008;this.minRadius=0.05;break}this.age=function(){if(this.type===constants.CANDY_SHRINKING){this.radius-=this.decrement;if(this.radius&amp;lt;this.minRadius)return false;else return true}else return true}};function Utilities(){this.sign=function(number){if(number&amp;gt;0)return 1;else if(number&amp;lt;0)return-1;else if(number===0)return 0;else return undefined};this.oppositeDirections=function(direction1,direction2){if(Math.abs(direction1)==Math.abs(direction2)&amp;amp;&amp;amp;this.sign(direction1*direction2)==-1){return true}else{return false}};this.mergeObjects=function mergeObjects(slave,master){var merged={};for(key in slave){if(typeof master[key]===&amp;quot;undefined&amp;quot;)merged[key]=slave[key];else merged[key]=master[key]}return merged};this.randomInteger=function(min,max){var randomNumber=min+Math.floor(Math.random()*(max+1));return randomNumber}}function View(parentElement,backgroundColor){var playField,ctx,snakeThickness;this.initPlayField=function(){snakeThickness=length(0.9);playField=document.createElement(&amp;quot;canvas&amp;quot;);playField.setAttribute(&amp;quot;id&amp;quot;,&amp;quot;snake-js&amp;quot;);playField.setAttribute(&amp;quot;width&amp;quot;,config.gridWidth*config.pointSize);playField.setAttribute(&amp;quot;height&amp;quot;,config.gridHeight*config.pointSize+constants.SCOREBOARD_HEIGHT);parentElement.appendChild(playField);ctx=playField.getContext(&amp;quot;2d&amp;quot;);ctx.translate(0,constants.SCOREBOARD_HEIGHT)};this.drawSnake=function(snake,color){if(snake.points.length===1){var position=getPointPivotPosition(snake.points[0]);ctx.fillStyle=color;ctx.beginPath();ctx.arc(position.left,position.top,snakeThickness/2,0,2*Math.PI,false);ctx.fill()}else{ctx.strokeStyle=color;ctx.lineWidth=snakeThickness;ctx.lineJoin=&amp;quot;round&amp;quot;;ctx.lineCap=&amp;quot;round&amp;quot;;ctx.beginPath();for(var i=0;i&amp;lt;snake.points.length;i++){var currentPoint=snake.points[i];if(i===0){var currentPointPosition=getPointPivotPosition(currentPoint);ctx.moveTo(currentPointPosition.left,currentPointPosition.top)}else{var prevPoint=snake.points[i-1];if(Math.abs(prevPoint.left-currentPoint.left)&amp;lt;=1&amp;amp;&amp;amp;Math.abs(prevPoint.top-currentPoint.top)&amp;lt;=1){var currentPointPosition=getPointPivotPosition(currentPoint);ctx.lineTo(currentPointPosition.left,currentPointPosition.top)}else{connectWallPoints(prevPoint,currentPoint)}}}ctx.stroke()}drawEye(snake,snake.direction)};this.drawCandy=function(candy){ctx.fillStyle=candy.color;var position=getPointPivotPosition(candy.point);ctx.beginPath();ctx.arc(position.left,position.top,length(candy.radius),0,Math.PI*2,false);ctx.fill()};this.clear=function(color){ctx.fillStyle=color||backgroundColor;ctx.fillRect(0,0,config.gridWidth*config.pointSize,config.gridHeight*config.pointSize)};this.drawScore=function(score,highScore){ctx.translate(0,-1*constants.SCOREBOARD_HEIGHT);var bottomMargin=5;var horizontalMargin=4;ctx.fillStyle=config.scoreBoardColor;ctx.fillRect(0,0,config.gridWidth*config.pointSize,constants.SCOREBOARD_HEIGHT);ctx.fillStyle=config.scoreTextColor;ctx.font=&amp;quot;bold 16px &amp;#039;Courier new&amp;#039;, monospace&amp;quot;;ctx.textAlign=&amp;quot;right&amp;quot;;ctx.fillText(score,config.gridWidth*config.pointSize-horizontalMargin,constants.SCOREBOARD_HEIGHT-bottomMargin);ctx.textAlign=&amp;quot;left&amp;quot;;ctx.fillText(highScore,horizontalMargin,constants.SCOREBOARD_HEIGHT-bottomMargin);ctx.translate(0,constants.SCOREBOARD_HEIGHT)};var drawEye=function(snake){var head=snake.points[0];var headPosition=getPointPivotPosition(head);var offsetLeft=length(0.125);var offsetTop=length(0.15);switch(snake.direction){case constants.DIRECTION_LEFT:headPosition.left-=offsetLeft;headPosition.top-=offsetTop;break;case constants.DIRECTION_RIGHT:headPosition.left+=offsetLeft;headPosition.top-=offsetTop;break;case constants.DIRECTION_UP:headPosition.left-=offsetTop;headPosition.top-=offsetLeft;break;case constants.DIRECTION_DOWN:headPosition.left+=offsetTop;headPosition.top+=offsetLeft;break}if(snake.alive){ctx.beginPath();ctx.fillStyle=config.snakeEyeColor;ctx.arc(headPosition.left,headPosition.top,length(0.125),0,Math.PI*2,false);ctx.fill()}else{ctx.beginPath();ctx.strokeStyle=config.snakeEyeColor;ctx.lineWidth=2;ctx.moveTo(headPosition.left-length(0.1),headPosition.top-length(0.1));ctx.lineTo(headPosition.left+length(0.1),headPosition.top+length(0.1));ctx.moveTo(headPosition.left+length(0.1),headPosition.top-length(0.1));ctx.lineTo(headPosition.left-length(0.1),headPosition.top+length(0.1));ctx.stroke()}};var length=function(value){return value*config.pointSize};var getPointPivotPosition=function(point){var position={left:point.left*length(1)+length(.5),top:point.top*length(1)+length(.5)};return position};var connectWallPoints=function(p1,p2){var p2Position=getPointPivotPosition(p2);var leftOffset=utilities.sign(p2.left-p1.left);var topOffset=utilities.sign(p2.top-p1.top);var fakeEndPoint=new Point(p1.left-leftOffset,p1.top-topOffset);var fakeEndPointPosition=getPointPivotPosition(fakeEndPoint);ctx.lineTo(fakeEndPointPosition.left,fakeEndPointPosition.top);var fakeStartPoint=new Point(p2.left+leftOffset,p2.top+topOffset);var fakeStartPointPosition=getPointPivotPosition(fakeStartPoint);ctx.moveTo(fakeStartPointPosition.left,fakeStartPointPosition.top);ctx.lineTo(p2Position.left,p2Position.top)}}function InputInterface(pauseFn,resumeFn,autoPlayFn){var arrowKeys=[37,38,39,40],listening=false,lastDirection=null;this.lastDirection=function(){return lastDirection};this.startListening=function(){if(!listening){window.addEventListener(&amp;quot;keydown&amp;quot;,handleKeyDown,true);window.addEventListener(&amp;quot;keypress&amp;quot;,disableKeyPress,true);window.addEventListener(&amp;quot;blur&amp;quot;,pauseFn,true);window.addEventListener(&amp;quot;focus&amp;quot;,resumeFn,true);listening=true}};this.stopListening=function(){if(listening){window.removeEventListener(&amp;quot;keydown&amp;quot;,handleKeyDown,true);window.removeEventListener(&amp;quot;keypress&amp;quot;,disableKeyPress,true);window.removeEventListener(&amp;quot;blur&amp;quot;,pauseFn,true);window.removeEventListener(&amp;quot;focus&amp;quot;,resumeFn,true);listening=false}};var handleKeyDown=function(event){if(arrowKeys.indexOf(event.keyCode)&amp;gt;=0){handleArrowKeyPress(event)}};var disableKeyPress=function(event){if(arrowKeys.indexOf(event.keyCode)&amp;gt;=0){event.preventDefault()}};var handleArrowKeyPress=function(event){with(constants){switch(event.keyCode){case 37:lastDirection=DIRECTION_LEFT;break;case 38:lastDirection=DIRECTION_UP;break;case 39:lastDirection=DIRECTION_RIGHT;break;case 40:lastDirection=DIRECTION_DOWN;break}}event.preventDefault();autoPlayFn()}}if(config.autoInit){this.init()}};$(document).ready(function(){if(navigator.appName == &amp;quot;Microsoft Internet Explorer&amp;quot;) {  var warning = &amp;quot;Tyvärr fungerar inte Snake JS med Internet Explorer. Använd istället Chrome, Firefox eller Safari.&amp;quot;;  $(&amp;#039;#snake-js-parent&amp;#039;).addClass(&amp;#039;messages error&amp;#039;).text(warning);}else {  var settings = {    pointSize : 20,  gridWidth : 27  };  var game = new SnakeJS(document.getElementById(&amp;quot;snake-js-parent&amp;quot;), settings);  $(&amp;#039;#webform-client-form-118&amp;#039;).submit(function(){          $(&amp;#039;#edit-submitted-score&amp;#039;).val(game.getHighScore());     return true;  });}});// ]]&amp;gt;&amp;lt;/script&amp;gt;';
  var flattr_tag = 'canvas,HTML5,JavaScript,spel';
  var flattr_cat = 'software';
  var flattr_url = 'http://betamos.se/bloggen/spela-snake-med-html5';
  var flattr_lng = 'en_GB'&lt;/script&gt;
&lt;script src="http://api.flattr.com/button/load.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;/div&gt;&lt;p&gt;Under min julledighet har jag ägnat mig åt att &lt;strong&gt;utveckla ett spel&lt;/strong&gt; som jag kallar för &lt;strong&gt;Snake JS&lt;/strong&gt;. Spelidén bygger på det gamla spelet Snake, som man kunde spela på Nokia-mobiler från 90-talet. Snake JS, till skillnad från många andra spel, spelar man&amp;nbsp;&lt;strong&gt;direkt i webbläsaren&lt;/strong&gt;!&lt;/p&gt;&lt;p&gt;Visserligen har man kunnat spela spel på webben rätt länge, men det har varit med hjälp av Adobe&amp;nbsp;&lt;strong&gt;Flash Player&lt;/strong&gt;, som visserligen är kraftfullt för multimedia, men det är inte en öppen webbstandard och det kostar pengar att använda utvecklingsverktyget. Snake JS är delvis konstruerat med en av de tekniker som i framtiden kommer att ersätta Flash, nämligen &lt;a href="http://diveintohtml5.org/"&gt;HTML5&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Styr ormen med piltangenterna&lt;/strong&gt;. Det är bara att köra igång!&lt;/p&gt;

&lt;div id="snake-js-parent"&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;Teknik&lt;/h2&gt;&lt;p&gt;Spelet är helt &lt;strong&gt;byggt i JavaScript&lt;/strong&gt;, med användning av den objekt-orienterade funktionaliteten som finns i språket. Spelet använder endast ett globalt variabelnamn — &lt;span class="geshifilter"&gt;&lt;code class="javascript geshifilter-javascript"&gt;SnakeJS&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&amp;nbsp;— och all kod finns i en fil.&lt;/p&gt;&lt;p&gt;Ritning av spelplanen görs med hjälp av &lt;a href="http://diveintohtml5.org/canvas.html"&gt;Canvas-elementet&lt;/a&gt;, som är en del av HTML5. Ormen ritas mycket enkelt med raka linjer av hög tjocklek.&amp;nbsp;Ormens runda svängar fås av &lt;span class="geshifilter"&gt;&lt;code class="javascript geshifilter-javascript"&gt;context.&lt;span style="color: #660066;"&gt;lineJoin&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;round&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt; och&amp;nbsp;&lt;span class="geshifilter"&gt;&lt;code class="javascript geshifilter-javascript"&gt;context.&lt;span style="color: #660066;"&gt;lineCap&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;round&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;För den som är mer intresserad ligger &lt;a href="http://github.com/betamos/Snake-JS"&gt;koden på GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Highscores&lt;/h2&gt;

&lt;p&gt;

&lt;div class="item-list"&gt;&lt;ol&gt;&lt;li class="first"&gt;Thelbane, 11400p&lt;/li&gt;
&lt;li&gt;Thelbane, 1140p&lt;/li&gt;
&lt;li&gt;Sara, 1135p&lt;/li&gt;
&lt;li&gt;Therese, 1130p&lt;/li&gt;
&lt;li&gt;Therese, 1100p&lt;/li&gt;
&lt;li&gt;Betamos, 1055p&lt;/li&gt;
&lt;li&gt;Sara, 990p&lt;/li&gt;
&lt;li&gt;Therese, 980p&lt;/li&gt;
&lt;li&gt;Therese, 920p&lt;/li&gt;
&lt;li class="last"&gt;Therese, 845p&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p style="margin-bottom: 0;"&gt;

&lt;strong&gt;Publicera dina egna poäng&lt;/strong&gt; på highscore-listan:

&lt;/p&gt;

&lt;script type="text/javascript"&gt;// &lt;![CDATA[

function SnakeJS(parentElement,config){var utilities=new Utilities();var defaultConfig={autoInit:true,gridWidth:30,gridHeight:20,frameInterval:150,pointSize:16,backgroundColor:"white",snakeColor:"#4b4312",snakeEyeColor:"white",candyColor:"#b11c1c",shrinkingCandyColor:"#199C2C",scoreBoardColor:"#c0c96b",scoreTextColor:"#4b4312",collisionTolerance:1};var config=config?utilities.mergeObjects(defaultConfig,config):defaultConfig;var constants={DIRECTION_UP:1,DIRECTION_RIGHT:2,DIRECTION_DOWN:-1,DIRECTION_LEFT:-2,DEFAULT_DIRECTION:2,STATE_READY:1,STATE_PAUSED:2,STATE_PLAYING:3,STATE_GAME_OVER:4,INITIAL_SNAKE_GROWTH_LEFT:6,SCOREBOARD_HEIGHT:20,CANDY_REGULAR:1,CANDY_MASSIVE:2,CANDY_SHRINKING:3};var engine=new Engine(parentElement);this.init=function(){engine.initGame()};this.pause=function(){engine.pauseGame()};this.resume=function(){engine.resume()};this.getHighScore=function(){return engine.getHighScore()};function Engine(parentElement){var snake,candy,view,inputInterface,grid,currentState,frameIntervalId,score,highScore,collisionFramesLeft;this.initGame=function(){view=new View(parentElement,config.backgroundColor);inputInterface=new InputInterface(this.pauseGame,this.resumeGame,startMoving);snake=new Snake();grid=new Grid(config.gridWidth,config.gridHeight);score=0;highScore=score;snake.points.push(randomPoint(grid));snake.growthLeft=constants.INITIAL_SNAKE_GROWTH_LEFT;candy=randomCandy();view.initPlayField();drawCurrentScene();inputInterface.startListening();currentState=constants.STATE_READY};this.pauseGame=function(){if(currentState===constants.STATE_PLAYING){clearInterval(frameIntervalId);currentState=constants.STATE_PAUSED}};this.resumeGame=function(){if(currentState===constants.STATE_PAUSED){frameIntervalId=setInterval(nextFrame,config.frameInterval);currentState=constants.STATE_PLAYING}};this.getHighScore=function(){return highScore};var gameOver=function(){currentState=constants.STATE_GAME_OVER;clearInterval(frameIntervalId);var removeTail=function(){if(snake.points.length&gt;1){snake.points.pop();drawCurrentScene();setTimeout(removeTail,config.frameInterval/4)}else setTimeout(resurrect,config.frameInterval*10)};var resurrect=function(){score=0;snake.growthLeft=constants.INITIAL_SNAKE_GROWTH_LEFT;snake.alive=true;drawCurrentScene();currentState=constants.STATE_READY};setTimeout(removeTail,config.frameInterval*10)};var startMoving=function(){if(currentState===constants.STATE_READY){frameIntervalId=setInterval(nextFrame,config.frameInterval);currentState=constants.STATE_PLAYING}};var nextFrame=function(){if(!moveSnake(inputInterface.lastDirection())){if(collisionFramesLeft&gt;0){collisionFramesLeft--;return}else{snake.alive=false;drawCurrentScene();gameOver();return}}else collisionFramesLeft=config.collisionTolerance;if(!candy.age())candy=randomCandy();if(candy.point.collidesWith(snake.points[0])){eatCandy();candy=randomCandy()}drawCurrentScene()};var drawCurrentScene=function(){view.clear();view.drawSnake(snake,config.snakeColor);view.drawCandy(candy);view.drawScore(score,highScore)};var moveSnake=function(desiredDirection){var head=snake.points[0];var newDirection=actualDirection(desiredDirection||constants.DEFAULT_DIRECTION);var newHead=movePoint(head,newDirection);if(!insideGrid(newHead,grid))shiftPointIntoGrid(newHead,grid);if(snake.collidesWith(newHead,true)){return false}snake.direction=newDirection;snake.points.unshift(newHead);if(snake.growthLeft&gt;=1)snake.growthLeft--;else snake.points.pop();return true};var eatCandy=function(){score+=candy.score;highScore=Math.max(score,highScore);snake.growthLeft+=candy.calories};var randomCandy=function(){do{var newCandyPoint=randomPoint(grid)}while(snake.collidesWith(newCandyPoint));var probabilitySeed=Math.random();if(probabilitySeed&lt;0.75)var newType=constants.CANDY_REGULAR;else if(probabilitySeed&lt;0.95)var newType=constants.CANDY_MASSIVE;else var newType=constants.CANDY_SHRINKING;return new Candy(newCandyPoint,newType)};var actualDirection=function(desiredDirection){if(snake.points.length===1)return desiredDirection;else if(utilities.oppositeDirections(snake.direction,desiredDirection)){return snake.direction}else{return desiredDirection}};var movePoint=function(oldPoint,direction){var newPoint;with(constants){switch(direction){case DIRECTION_LEFT:newPoint=new Point(oldPoint.left-1,oldPoint.top);break;case DIRECTION_UP:newPoint=new Point(oldPoint.left,oldPoint.top-1);break;case DIRECTION_RIGHT:newPoint=new Point(oldPoint.left+1,oldPoint.top);break;case DIRECTION_DOWN:newPoint=new Point(oldPoint.left,oldPoint.top+1);break}}return newPoint};var shiftPointIntoGrid=function(point,grid){point.left=shiftIntoRange(point.left,grid.width);point.top=shiftIntoRange(point.top,grid.height);return point};var shiftIntoRange=function(number,range){var shiftedNumber,steps;if(utilities.sign(number)==1){steps=Math.floor(number/range);shiftedNumber=number-(range*steps)}else if(utilities.sign(number)==-1){steps=Math.floor(Math.abs(number)/range)+1;shiftedNumber=number+(range*steps)}else{shiftedNumber=number}return shiftedNumber};var insideGrid=function(point,grid){if(point.left&lt;0||point.top&lt;0||point.left&gt;=grid.width||point.top&gt;=grid.height){return false}else{return true}};var randomPoint=function(grid){var left=utilities.randomInteger(0,grid.width-1);var top=utilities.randomInteger(0,grid.height-1);var point=new Point(left,top);return point}}function Grid(width,height){this.width=width;this.height=height}function Snake(){this.direction=constants.DEFAULT_DIRECTION;this.points=[];this.growthLeft=0;this.alive=true;this.collidesWith=function(point,simulateMovement){if(simulateMovement&amp;&amp;this.growthLeft===0)range=this.points.length-1;else range=this.points.length;for(var i=0;i&lt;range;i++){if(point.collidesWith(this.points[i]))return true}return false}}function Point(left,top){this.left=left;this.top=top;this.collidesWith=function(otherPoint){if(otherPoint.left==this.left&amp;&amp;otherPoint.top==this.top)return true;else return false}}function Candy(point,type){this.point=point,this.type=type,this.score,this.calories,this.radius,this.color,this.decrement,this.minRadius;switch(type){case constants.CANDY_REGULAR:this.score=5;this.calories=3;this.radius=0.3;this.color=config.candyColor;break;case constants.CANDY_MASSIVE:this.score=15;this.calories=5;this.radius=0.45;this.color=config.candyColor;break;case constants.CANDY_SHRINKING:this.score=50;this.calories=0;this.radius=0.45;this.color=config.shrinkingCandyColor;this.decrement=0.008;this.minRadius=0.05;break}this.age=function(){if(this.type===constants.CANDY_SHRINKING){this.radius-=this.decrement;if(this.radius&lt;this.minRadius)return false;else return true}else return true}};function Utilities(){this.sign=function(number){if(number&gt;0)return 1;else if(number&lt;0)return-1;else if(number===0)return 0;else return undefined};this.oppositeDirections=function(direction1,direction2){if(Math.abs(direction1)==Math.abs(direction2)&amp;&amp;this.sign(direction1*direction2)==-1){return true}else{return false}};this.mergeObjects=function mergeObjects(slave,master){var merged={};for(key in slave){if(typeof master[key]==="undefined")merged[key]=slave[key];else merged[key]=master[key]}return merged};this.randomInteger=function(min,max){var randomNumber=min+Math.floor(Math.random()*(max+1));return randomNumber}}function View(parentElement,backgroundColor){var playField,ctx,snakeThickness;this.initPlayField=function(){snakeThickness=length(0.9);playField=document.createElement("canvas");playField.setAttribute("id","snake-js");playField.setAttribute("width",config.gridWidth*config.pointSize);playField.setAttribute("height",config.gridHeight*config.pointSize+constants.SCOREBOARD_HEIGHT);parentElement.appendChild(playField);ctx=playField.getContext("2d");ctx.translate(0,constants.SCOREBOARD_HEIGHT)};this.drawSnake=function(snake,color){if(snake.points.length===1){var position=getPointPivotPosition(snake.points[0]);ctx.fillStyle=color;ctx.beginPath();ctx.arc(position.left,position.top,snakeThickness/2,0,2*Math.PI,false);ctx.fill()}else{ctx.strokeStyle=color;ctx.lineWidth=snakeThickness;ctx.lineJoin="round";ctx.lineCap="round";ctx.beginPath();for(var i=0;i&lt;snake.points.length;i++){var currentPoint=snake.points[i];if(i===0){var currentPointPosition=getPointPivotPosition(currentPoint);ctx.moveTo(currentPointPosition.left,currentPointPosition.top)}else{var prevPoint=snake.points[i-1];if(Math.abs(prevPoint.left-currentPoint.left)&lt;=1&amp;&amp;Math.abs(prevPoint.top-currentPoint.top)&lt;=1){var currentPointPosition=getPointPivotPosition(currentPoint);ctx.lineTo(currentPointPosition.left,currentPointPosition.top)}else{connectWallPoints(prevPoint,currentPoint)}}}ctx.stroke()}drawEye(snake,snake.direction)};this.drawCandy=function(candy){ctx.fillStyle=candy.color;var position=getPointPivotPosition(candy.point);ctx.beginPath();ctx.arc(position.left,position.top,length(candy.radius),0,Math.PI*2,false);ctx.fill()};this.clear=function(color){ctx.fillStyle=color||backgroundColor;ctx.fillRect(0,0,config.gridWidth*config.pointSize,config.gridHeight*config.pointSize)};this.drawScore=function(score,highScore){ctx.translate(0,-1*constants.SCOREBOARD_HEIGHT);var bottomMargin=5;var horizontalMargin=4;ctx.fillStyle=config.scoreBoardColor;ctx.fillRect(0,0,config.gridWidth*config.pointSize,constants.SCOREBOARD_HEIGHT);ctx.fillStyle=config.scoreTextColor;ctx.font="bold 16px 'Courier new', monospace";ctx.textAlign="right";ctx.fillText(score,config.gridWidth*config.pointSize-horizontalMargin,constants.SCOREBOARD_HEIGHT-bottomMargin);ctx.textAlign="left";ctx.fillText(highScore,horizontalMargin,constants.SCOREBOARD_HEIGHT-bottomMargin);ctx.translate(0,constants.SCOREBOARD_HEIGHT)};var drawEye=function(snake){var head=snake.points[0];var headPosition=getPointPivotPosition(head);var offsetLeft=length(0.125);var offsetTop=length(0.15);switch(snake.direction){case constants.DIRECTION_LEFT:headPosition.left-=offsetLeft;headPosition.top-=offsetTop;break;case constants.DIRECTION_RIGHT:headPosition.left+=offsetLeft;headPosition.top-=offsetTop;break;case constants.DIRECTION_UP:headPosition.left-=offsetTop;headPosition.top-=offsetLeft;break;case constants.DIRECTION_DOWN:headPosition.left+=offsetTop;headPosition.top+=offsetLeft;break}if(snake.alive){ctx.beginPath();ctx.fillStyle=config.snakeEyeColor;ctx.arc(headPosition.left,headPosition.top,length(0.125),0,Math.PI*2,false);ctx.fill()}else{ctx.beginPath();ctx.strokeStyle=config.snakeEyeColor;ctx.lineWidth=2;ctx.moveTo(headPosition.left-length(0.1),headPosition.top-length(0.1));ctx.lineTo(headPosition.left+length(0.1),headPosition.top+length(0.1));ctx.moveTo(headPosition.left+length(0.1),headPosition.top-length(0.1));ctx.lineTo(headPosition.left-length(0.1),headPosition.top+length(0.1));ctx.stroke()}};var length=function(value){return value*config.pointSize};var getPointPivotPosition=function(point){var position={left:point.left*length(1)+length(.5),top:point.top*length(1)+length(.5)};return position};var connectWallPoints=function(p1,p2){var p2Position=getPointPivotPosition(p2);var leftOffset=utilities.sign(p2.left-p1.left);var topOffset=utilities.sign(p2.top-p1.top);var fakeEndPoint=new Point(p1.left-leftOffset,p1.top-topOffset);var fakeEndPointPosition=getPointPivotPosition(fakeEndPoint);ctx.lineTo(fakeEndPointPosition.left,fakeEndPointPosition.top);var fakeStartPoint=new Point(p2.left+leftOffset,p2.top+topOffset);var fakeStartPointPosition=getPointPivotPosition(fakeStartPoint);ctx.moveTo(fakeStartPointPosition.left,fakeStartPointPosition.top);ctx.lineTo(p2Position.left,p2Position.top)}}function InputInterface(pauseFn,resumeFn,autoPlayFn){var arrowKeys=[37,38,39,40],listening=false,lastDirection=null;this.lastDirection=function(){return lastDirection};this.startListening=function(){if(!listening){window.addEventListener("keydown",handleKeyDown,true);window.addEventListener("keypress",disableKeyPress,true);window.addEventListener("blur",pauseFn,true);window.addEventListener("focus",resumeFn,true);listening=true}};this.stopListening=function(){if(listening){window.removeEventListener("keydown",handleKeyDown,true);window.removeEventListener("keypress",disableKeyPress,true);window.removeEventListener("blur",pauseFn,true);window.removeEventListener("focus",resumeFn,true);listening=false}};var handleKeyDown=function(event){if(arrowKeys.indexOf(event.keyCode)&gt;=0){handleArrowKeyPress(event)}};var disableKeyPress=function(event){if(arrowKeys.indexOf(event.keyCode)&gt;=0){event.preventDefault()}};var handleArrowKeyPress=function(event){with(constants){switch(event.keyCode){case 37:lastDirection=DIRECTION_LEFT;break;case 38:lastDirection=DIRECTION_UP;break;case 39:lastDirection=DIRECTION_RIGHT;break;case 40:lastDirection=DIRECTION_DOWN;break}}event.preventDefault();autoPlayFn()}}if(config.autoInit){this.init()}};

$(document).ready(function(){

if(navigator.appName == "Microsoft Internet Explorer") {
  var warning = "Tyvärr fungerar inte Snake JS med Internet Explorer. Använd istället Chrome, Firefox eller Safari.";
  $('#snake-js-parent').addClass('messages error').text(warning);
}
else {
  var settings = {
    pointSize : 20,
  gridWidth : 27
  };

  var game = new SnakeJS(document.getElementById("snake-js-parent"), settings);

  $('#webform-client-form-118').submit(function(){
     
     $('#edit-submitted-score').val(game.getHighScore());
     return true;
  });

}
});

// ]]&gt;&lt;/script&gt;&lt;form action="/bloggen/spela-snake-med-html5"  accept-charset="UTF-8" method="post" id="webform-client-form-118" class="webform-client-form" enctype="multipart/form-data"&gt;
&lt;div&gt;&lt;div class="webform-component webform-component-textfield" id="webform-component-name"&gt;&lt;div class="form-item clear-block" id="edit-submitted-name-wrapper"&gt;
 &lt;label for="edit-submitted-name"&gt;Namn&lt;/label&gt;
 &lt;input type="text" maxlength="16" name="submitted[name]" id="edit-submitted-name" size="25" value="" class="form-text required" /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;input type="hidden" name="submitted[score]" id="edit-submitted-score" value="0"  /&gt;
&lt;input type="hidden" name="details[sid]" id="edit-details-sid" value=""  /&gt;
&lt;input type="hidden" name="details[page_num]" id="edit-details-page-num" value="1"  /&gt;
&lt;input type="hidden" name="details[page_count]" id="edit-details-page-count" value="1"  /&gt;
&lt;input type="hidden" name="details[finished]" id="edit-details-finished" value="0"  /&gt;
&lt;input type="hidden" name="form_build_id" id="form-b3d79125de4746513b0be0e64ce80e3f" value="form-b3d79125de4746513b0be0e64ce80e3f"  /&gt;
&lt;input type="hidden" name="form_id" id="edit-webform-client-form-118" value="webform_client_form_118"  /&gt;
&lt;div id="edit-actions" class="form-actions form-wrapper"&gt;&lt;input type="submit" name="op" id="edit-submit" value="Skicka"  class="form-submit" /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/form&gt;&lt;img src="http://feeds.feedburner.com/~r/betamos/~4/aV39v4nTQQk" height="1" width="1"/&gt;</description>
     <comments>http://betamos.se/bloggen/spela-snake-med-html5#comments</comments>
 <category domain="http://betamos.se/category/taggar/canvas">canvas</category>
 <category domain="http://betamos.se/category/taggar/html5">HTML5</category>
 <category domain="http://betamos.se/category/taggar/javascript">JavaScript</category>
 <category domain="http://betamos.se/category/taggar/spel">spel</category>
 <pubDate>Thu, 06 Jan 2011 21:21:23 +0000</pubDate>
 <dc:creator>betamos</dc:creator>
 <guid isPermaLink="false">118 at http://betamos.se</guid>
  <feedburner:origLink>http://betamos.se/bloggen/spela-snake-med-html5</feedburner:origLink></item>
  <item>
    <title>Betamos "går live", som det heter</title>
    <link>http://feedproxy.google.com/~r/betamos/~3/DnUYPwKaIBs/betamos-gar-live-som-det-heter</link>
    <description>&lt;div class="flattr-box"&gt;&lt;script type="text/javascript"&gt;
  var flattr_uid = 'betamos';
  var flattr_tle = 'Betamos &amp;quot;går live&amp;quot;, som det heter';
  var flattr_dsc = '&amp;lt;p&amp;gt;Drygt ett år efter att jag började fiffla med designen på min personliga blogg är den klar. Det kan låta illa, uselt eller till och med &amp;lt;a href=&amp;quot;http://www.smartie8.se/post/2010/02/02/Nej-vi-lagger-inte-ned-Internet-Explorer.aspx&amp;quot;&amp;gt;Internet Explorer&amp;lt;/a&amp;gt; (känsliga tittare varnas), men för mig är det ett &amp;lt;strong&amp;gt;stort framsteg&amp;lt;/strong&amp;gt;. Jag har nämligen åstadkommit ett &amp;lt;strong&amp;gt;färdigt resultat&amp;lt;/strong&amp;gt; för en gångs skull, som jag dessutom är nöjd med.';
  var flattr_tag = 'lansering,webbdesign';
  var flattr_cat = 'software';
  var flattr_url = 'http://betamos.se/bloggen/betamos-gar-live-som-det-heter';
  var flattr_lng = 'en_GB'&lt;/script&gt;
&lt;script src="http://api.flattr.com/button/load.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;/div&gt;&lt;p&gt;Drygt ett år efter att jag började fiffla med designen på min personliga blogg är den klar. Det kan låta illa, uselt eller till och med &lt;a href="http://www.smartie8.se/post/2010/02/02/Nej-vi-lagger-inte-ned-Internet-Explorer.aspx"&gt;Internet Explorer&lt;/a&gt; (känsliga tittare varnas), men för mig är det ett &lt;strong&gt;stort framsteg&lt;/strong&gt;. Jag har nämligen åstadkommit ett &lt;strong&gt;färdigt resultat&lt;/strong&gt; för en gångs skull, som jag dessutom är nöjd med. Normalt sett rinner sådana här projekt ut i sanden någonstans mellan när jag inser att jag vill "bygga&lt;img class="left" src="/sites/default/files/pictures/betamos-design-1.png" alt="Första skissen av betamos.se" width="300" height="350" /&gt; pyramider med en spade" och att jag egentligen har tröttnat och vill lära mig något helt annat, exempelvis hur man skriver en &lt;strong&gt;USB-drivrutin&lt;/strong&gt;. (Ja, det har hänt. Senast jag låg hemma och var sjuk, för att vara exakt.)&lt;/p&gt;
&lt;h2&gt;Från grunge till minimal&lt;/h2&gt;
&lt;p&gt;Det är mycket spill nu när man är klar, i form av Photoshop-filer, strategiska texter och till och med &lt;strong&gt;en&lt;/strong&gt;&lt;strong&gt; röd tomte som h&lt;/strong&gt;&lt;strong&gt;öll i min &lt;/strong&gt;&lt;strong&gt;R&lt;/strong&gt;&lt;strong&gt;SS-ikon&lt;/strong&gt;, haha. Jag ser själv hur jag har utvecklats det senaste året och nu när jag kan jämföra A med B förstår jag lite &lt;strong&gt;hur mina ideal har &lt;/strong&gt;&lt;img class="right" src="/sites/default/files/pictures/betamos-design-2_0.png" alt="Skiss nummer två av betamos.se" width="300" height="377" /&gt;&lt;strong&gt;förändrats&lt;/strong&gt;. I början var jag helt ny och hade helt galna idéer. Jag gjorde en grunge-aktig design. Jag var övertygad om att den skulle &lt;strong&gt;frälsa världen med sin skönhet&lt;/strong&gt;. Det gjorde den inte. Den fick inte ens chansen.&lt;/p&gt;
&lt;p&gt;Jag började jobba på Kodamera, mitt första riktiga jobb. Heltid med webben förändrade mig. Jag är mycket mer &lt;strong&gt;sparsmakad med krimskrams&lt;/strong&gt; nuförtiden. Jag tycker det är så mycket skit överallt. Informationen på nätet är fortfarande tyvärr ofta otillräcklig, irrelevant, otillgänglig, obefintlig eller överflödig. Framförallt är det medelstora och &lt;strong&gt;stora webbplatser som förvånar mig&lt;/strong&gt;. För många &lt;img class="left" src="/sites/default/files/pictures/betamos-design-3.png" alt="Nummer tre i serien av betamos.se" width="300" height="294" /&gt;kockar liksom. Alla har sin lilla sida som ingen hittar till eller bryr sig om. Jag vill vara &lt;strong&gt;en&lt;/strong&gt;&lt;strong&gt; mo&lt;/strong&gt;&lt;strong&gt;tp&lt;/strong&gt;&lt;strong&gt;o&lt;/strong&gt;&lt;strong&gt;l&lt;/strong&gt; till det. Både i arbetslivet och privat.&lt;/p&gt;
&lt;p&gt;Så jag började skissa mer baklänges — ta bort linjer från gränssnittet, skippa borders och framförallt, inte stänga in webbplatsen i en låda, utan låta den löpa ut på kanterna åt höger och vänster. &lt;strong&gt;Landskapskänsla.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Det må låta glorifierande det här, och det är det också. Egentligen är det nog delvis att jag inte är tillräckligt säker för att kunna göra krumilurer och sånt. Det blir ofta fult, så jag skalar av istället. Jag har i alla fall smak nog att ogilla mina egna alster ibland.&lt;/p&gt;
&lt;h2&gt;Se upp för betamos.se&lt;/h2&gt;
&lt;p&gt;I framtiden kommer det ske en hel del saker här så bokmärk och &lt;a href="http://feeds.feedburner.com/betamos"&gt;prenumerera&lt;/a&gt; för fulla muggar. Planen lyder:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skapa en "om mig"-sida, för alla fans&lt;/li&gt;
&lt;li&gt;Implementera en riktigt schysst jQuery-feature i kommentarsfältet på blogginläggen. Jag avslöjar inget mer, men se till att ha en &lt;a href="http://sv.gravatar.com/"&gt;Gravatar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Blogga regelbundet om webben, det kommer bli mycket tekniskt men också en del annat&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;På återseende mina vänner, ovänner, fiender och Internet Explorer!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/betamos/~4/DnUYPwKaIBs" height="1" width="1"/&gt;</description>
     <comments>http://betamos.se/bloggen/betamos-gar-live-som-det-heter#comments</comments>
 <category domain="http://betamos.se/category/taggar/lansering">lansering</category>
 <category domain="http://betamos.se/category/taggar/webbdesign">webbdesign</category>
 <pubDate>Tue, 02 Feb 2010 22:50:45 +0000</pubDate>
 <dc:creator>betamos</dc:creator>
 <guid isPermaLink="false">9 at http://betamos.se</guid>
  <feedburner:origLink>http://betamos.se/bloggen/betamos-gar-live-som-det-heter</feedburner:origLink></item>
  </channel>
</rss>

