<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Anders Hassis &#187; Programmering</title>
	<atom:link href="http://hassis.com/category/programmering/feed/" rel="self" type="application/rss+xml" />
	<link>http://hassis.com</link>
	<description>Did mmorpgs overwrite your common sense?</description>
	<lastBuildDate>Sat, 21 Jan 2012 01:19:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Att köra WordPress Multi-Site på VPS med multi domain mapping</title>
		<link>/2011/06/27/att-kora-wordpress-multi-site-pa-vps-med-multi-domain-mapping/</link>
		<comments>/2011/06/27/att-kora-wordpress-multi-site-pa-vps-med-multi-domain-mapping/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 18:19:25 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=627</guid>
		<description><![CDATA[Bakgrund Ett problem som jag haft väldigt länge är att jag kört många olika WordPress-installationer för relativt små projekt. Det är inte alls särskilt roligt att underhålla alla dessa installationer, dvs att hålla kärnan och tillägg uppdaterade. I ett tidigare projekt så skapade Tedde Lundgren ett tillägg som tillät oss att koppla flera olika domäner [...]]]></description>
			<content:encoded><![CDATA[<h3>Bakgrund</h3>
<p>Ett problem som jag haft väldigt länge är att jag kört många olika WordPress-installationer för relativt små projekt. Det är inte alls särskilt roligt att underhålla alla dessa installationer, dvs att hålla kärnan och tillägg uppdaterade. I ett tidigare projekt så skapade <a href="http://twitter.com/tedeh">Tedde Lundgren</a> ett tillägg som tillät oss att koppla flera olika domäner (inte begränsat till subdomäner) till en installation.</p>
<p>Jag är medveten om att det finns liknande tillägg som exempelvis <a href="http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/">WordPress MU Domain Mapping</a>. Det som skiljde Teddes version från denna var att vi fick tillgång till gruppering av domäner, så vi kan köra separata utvecklingsdomäner. Tillägget är för övrigt en riktig lättviktare och innehåller endast det som behövs, dvs inte bloatat. Tedde har planer på att släppa tillägget öppet senare i sommar.</p>
<p><div id="attachment_669" class="wp-caption alignnone" style="width: 310px"><a href="/static/uploads/hassis.com/2011/06/domainmapper1.jpg" rel="lightbox[627]" title="Domain Mapper"><img class="size-medium wp-image-669" title="Domain Mapper" src="/static/uploads/hassis.com/2011/06/domainmapper1-300x170.jpg" alt="" width="300" height="170" /></a><p class="wp-caption-text">Screenshot Domain Mapper</p></div><br />
&nbsp;<br />
Så förra veckan gjorde jag slag i sak och beställde en VPS hos <a href="http://ipeer.se">Ipeer</a>. Vi har använt Ipeer på många projekt hos <a href="http://populate.se">Populate</a> så jag visste sedan tidigare att det fungerar bra.</p>
<h3>Mjukvara och tjänster som används</h3>
<ul>
<li><a href="http://nginx.net/">Nginx</a> &#8211; Webbserver</li>
<li><a href="http://www.apache.org/">Apache</a>- Webbserver</li>
<li><a href="http://php.net">PHP</a> + <a href="http://php.net/manual/en/book.apc.php">APC</a> &#8211; APC används för cachning</li>
<li><a href="http://memcached.org/">Memcached</a> &#8211; Memcached används för cachning</li>
<li><a href="http://wordpress.org">WordPress</a> + <a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a> &#8211; Publiceringsverktyg samt W3 Total Cache för att cacha</li>
<li><a href="http://www.ruby-lang.org/en/">Ruby</a> + <a href="https://github.com/capistrano/capistrano">Capistrano</a> &#8211; Capistrano är en samling Rubyscript som används för att enkelt deploya till drift/utvecklingsserver</li>
<li><a href="http://git-scm.com/">Git</a> + <a href="http://github.com">GitHub</a> &#8211; Git är versionshantering av källkod, GitHub är en tjänst för att samarbeta med andra utvecklare</li>
</ul>
<h3>Webbserver</h3>
<p>Wikipedia skriver följande angående Nginx:</p>
<blockquote><p>Nginx quickly delivers static content with efficient use of system resources. It can deploy dynamic <a title="HTTP" href="http://en.wikipedia.org/wiki/HTTP">HTTP</a> content on a network using <a title="FastCGI" href="http://en.wikipedia.org/wiki/FastCGI">FastCGI</a> handlers for <a title="Scripting language" href="http://en.wikipedia.org/wiki/Scripting_language">scripts</a>, and can serve as a very capable software <a title="Load balancing (computing)" href="http://en.wikipedia.org/wiki/Load_balancing_%28computing%29">load balancer</a>.<sup id="cite_ref-1"><a href="http://en.wikipedia.org/wiki/Nginx#cite_note-1">[2]</a></sup></p></blockquote>
<p>Med detta som grund så valde jag att använda Nginx som webbserver (@port 80) för att servera allt statiskt material (JavaScript, CSS och bilder), för att sedan proxy:a alla andra anrop vidare till Apache (@port 81).</p>
<h3>Cachning och WordPress</h3>
<p>Genom att använda Memcached, APC i kombination med W3 Total Cache så har jag fått ner laddningstiden i WordPress oerhört mycket. Ett problem som jag tyvärr upplever för tillfället är att administrationen i WordPress 3.1.3 är väldigt trög, det verkar vara ett känt problem som många inte upplevde i 3.0.x-branchen. Vi får se ifall det fixas i 3.2 som borde lanseras inom en snar framtid.</p>
<h3>GitHub och Capistrano</h3>
<p>Versionshantera, snälla! <a href="http://blog.ashodnakashian.com/2011/06/git-for-personal-projects/">Även ifall du är den enda i projektet&#8230;</a> På GitHub har jag samlat all kod jag använder i mina projekt. Jag har ett betalkonto som tillåter mig att ha 10 privata repositories och en medarbetare på dessa. All utveckling sker lokalt (på exempelvis http://hassis.dev) och när jag är nöjd så laddar jag upp på GitHub och den jag arbetar med laddar ner det lokalt och tittar över det. När vi sedan är överens om att det går att släppa publikt så kör vi ut allt genom Capistrano. </p>
<p>Capistrano förutsätter att man har tillgång till SSH och använder sig av publika nycklar för att autentisera sig mot servern.</p>
<h3>Slutsats</h3>
<p>Detta är tänkt som en genomgång vad jag använder för verktyg när jag utvecklar. Vill ni se lite exempel på källkod så får ni gärna säga till.</p>
]]></content:encoded>
			<wfw:commentRss>/2011/06/27/att-kora-wordpress-multi-site-pa-vps-med-multi-domain-mapping/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WP Multi-Site: Aktivering av tillägg</title>
		<link>/2011/05/16/wp-multi-site-aktivering-av-tillagg/</link>
		<comments>/2011/05/16/wp-multi-site-aktivering-av-tillagg/#comments</comments>
		<pubDate>Mon, 16 May 2011 13:49:55 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=543</guid>
		<description><![CDATA[Inledning Stötte för någon vecka på ett nytt problem för min del. Det handlade om att jag skulle skapa ett plugin som används i multi-site. Jag har jobbat relativt lite med Multi-Sites och problemet var att tabellerna inte skapades för alla &#8221;siterna&#8221; som fanns i nätverket. Källkod register_activation_hook&#40;__FILE__, 'hass_vote_activate'&#41;; &#160; function hass_vote_activate&#40;&#41; &#123; global $wpdb; [...]]]></description>
			<content:encoded><![CDATA[<h3>Inledning</h3>
<p>Stötte för någon vecka på ett nytt problem för min del. Det handlade om att jag skulle skapa ett plugin som används i multi-site. Jag har jobbat relativt lite med Multi-Sites och problemet var att tabellerna inte skapades för alla &#8221;siterna&#8221; som fanns i nätverket.</p>
<h3>Källkod</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">register_activation_hook<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'hass_vote_activate'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> hass_vote_activate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'is_multisite'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> is_multisite<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'networkwide'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'networkwide'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$old_blog</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">blogid</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #000088;">$blogids</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_col</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT blog_id FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;blogs</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$blogids</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				switch_to_blog<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				_hass_vote_activate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			switch_to_blog<span style="color: #009900;">&#40;</span><span style="color: #000088;">$old_blog</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>	
	<span style="color: #009900;">&#125;</span> 
	_hass_vote_activate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> _hass_vote_activate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$table_name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prefix</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'yourtable'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_var</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SHOW TABLES LIKE '<span style="color: #006699; font-weight: bold;">$table_name</span>'&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$table_name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;CREATE TABLE &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$table_name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; (
			id mediumint(9) NOT NULL AUTO_INCREMENT,
     			dateadded bigint(11) DEFAULT '0' NOT NULL,
     			subject VARCHAR(255) NOT NULL,
	  		UNIQUE KEY id (id)
	  	);&quot;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span>ABSPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'wp-admin/includes/upgrade.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  		dbDelta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ovanstående kod vandrar igenom alla dina siter som är uppsatta i nätverket och kör aktiveringsfunktionen för dessa.</p>
<p>Koden ovan raderar inte tabellerna vid inaktivering, det skapar heller inte tabellerna för nya siter som aktiveras i nätverket. Du får i sådana fall använda följande actions:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'wpmu_new_blog'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'your_function_activation_on_new_blog'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 		<span style="color: #666666; font-style: italic;">// For new site</span>
register_deactivation_hook<span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'your_deactivation_function'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// For deactivation</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>/2011/05/16/wp-multi-site-aktivering-av-tillagg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Citerus Hackers Night 2011: Crazy Snake</title>
		<link>/2011/05/05/citerus-hackers-night-2011-crazy-snake/</link>
		<comments>/2011/05/05/citerus-hackers-night-2011-crazy-snake/#comments</comments>
		<pubDate>Thu, 05 May 2011 14:09:26 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=516</guid>
		<description><![CDATA[Citerus anordnade i tisdags (3/5) ett event i Stockholm där uppdraget var att programmera en ormhjärna. Din ormhjärna skulle sedan tävla mot andra ormar som andra lag programmerat. Jag, Oskar Wirén och Jim Sagevid var ett lag, vi hade inte tittat så mycket på API:t innan så vi hade ganska dålig koll på det. Tävlingen [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.citerus.se/hackers_night_snake_edition">Citerus anordnade i tisdags (3/5) ett event</a> i Stockholm där uppdraget var att programmera en ormhjärna. Din ormhjärna skulle sedan tävla mot andra ormar som andra lag programmerat.</p>
<p>Jag, <a href="http://se.linkedin.com/pub/oskar-wir%C3%A9n/33/212/986">Oskar Wirén</a> och <a href="http://jimsagevid.se">Jim Sagevid</a> var ett lag, vi hade inte tittat så mycket på API:t innan så vi hade ganska dålig koll på det. Tävlingen gick ganska dåligt för oss, vi slarvade alldeles för mycket och vi blev väldigt stressade. Istället så fick vi ihop en fungerande version på vägen hem på tåget på ca. 4-5 minuter&#8230;</p>
<p>Det lutar åt att några av de andra lagen hade lite förberett kod, då det var ganska stressigt med tid att få klar en första prototyp (~1h), eller så var de helt enkelt grymt snabba! Hade vi haft lite framförhållning så hade det nog varit en ganska smart idé, men det är alltid lätt att vara efterklok. Det var i alla fall en väldigt trevlig kväll och ett riktigt kul arrangemang!</p>
<h3>Demonstration</h3>
<p><iframe width="480" height="390" src="http://www.youtube.com/embed/_1FCyXG5Nt8" frameborder="0" allowfullscreen></iframe></p>
<p>Här kör vi mot ett annat lag som också kommer ifrån Uppsala, vi heter &#8221;Team Borm&#8221; (den kör v2) och de är &#8221;Sneaky Brian&#8221;. Vi märker tydligt att det är en del problem när båda två är väldigt nära samma frukt.</p>
<h3>Källkod</h3>
<p><a href="https://github.com/parse/borm-snake-citerus">Finns samlat på Github</a>. </p>
<p>Den första versionen <a href="https://github.com/parse/borm-snake-citerus/blob/master/java-brain/src/main/java/org/badass/snake/brain/MadBormBrain.java">finns här</a> (v1, som vi inte hann slutföra på tävlingen) och den som vi fortsatte lite på <a href="https://github.com/parse/borm-snake-citerus/blob/master/java-brain/src/main/java/org/badass/snake/brain/BormBrain.java">finns här</a> (v2).</p>
<p>Själva <a href="https://github.com/parse/borm-snake-citerus/blob/master/java-brain/src/main/java/org/badass/snake/brain/PathPlanner.java">path-hanteraren finns här</a>.</p>
<h3>Mer läsning</h3>
<p><a href="http://www.citerus.se/post/325559-lag-paxport-vann-crazy-snake">Lag Paxport vann Crazy Snake</a><br />
<a href="http://www.citerus.se/post/325558-ladda-clojure-kod-med-java-util-serviceloader">Ladda Clojure-kod med java.util.ServiceLoader</a></p>
]]></content:encoded>
			<wfw:commentRss>/2011/05/05/citerus-hackers-night-2011-crazy-snake/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>(Ytterligare en) Karusell i jQuery</title>
		<link>/2011/04/20/ytterligare-en-karusell-i-jquery/</link>
		<comments>/2011/04/20/ytterligare-en-karusell-i-jquery/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 20:35:57 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=508</guid>
		<description><![CDATA[Jag tänkte dela med mig av en karusell i jQuery, eller kanske en &#8221;infinite slider&#8221; som det så fint heter. Jag utgick ifrån en väldigt enkel slider som jag hittade, de allra flesta &#8221;färdiga&#8221; jag hittade var alldeles för stora, klumpiga och bloatade. Krav: Pilar för att navigera höger och vänster En manuell navigering för [...]]]></description>
			<content:encoded><![CDATA[<p>Jag tänkte dela med mig av en karusell i jQuery, eller kanske en &#8221;<em>infinite slider</em>&#8221; som det så fint heter. Jag utgick ifrån en väldigt <a href="http://jqueryfordesigners.com/jquery-infinite-carousel/">enkel slider som jag hittade</a>, de allra flesta &#8221;färdiga&#8221; jag hittade var alldeles för stora, klumpiga och bloatade.</p>
<h3>Krav:</h3>
<ul>
<li>Pilar för att navigera höger och vänster</li>
<li>En manuell navigering för att hoppa till valfri &#8221;slide&#8221;</li>
</ul>
<h3>Demo</h3>
<p><a href="http://dl.dropbox.com/u/500851/breakdown/index.html">Finns i min Dropbox</a>.</p>
<h3>Markup</h3>
<p>Läs först igenom <a href="http://jqueryfordesigners.com/jquery-infinite-carousel/">jQuery Infinite Carousel</a> och se till att du är med på grundkonceptet, alltså hur den visar respektive slide. Det jag lagt till är att du placerar pilarna i lista som detta:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;ul&gt;
	&lt;li&gt;&lt;a class=&quot;back&quot; href=&quot;#&quot; title=&quot;Previous&quot;&gt;&amp;lt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a class=&quot;forward&quot; href=&quot;#&quot; title=&quot;Next&quot;&gt;&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre></div></div>

<p>Samt den manuella navigeringen lägger du bara in en placeholder för:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;splash-manual-nav-container&quot;&gt;&lt;/div&gt;</pre></div></div>

<h3>Källkod</h3>
<p>Allting finns samlat i <a href="https://gist.github.com/932749">en Gist på Github</a>.</p>
<p><strong>HTML</strong><br />
<script src="https://gist.github.com/932749.js?file=gistfile1.html"></script><br />
<strong>CSS</strong><br />
<script src="https://gist.github.com/932749.js?file=style.css"></script><br />
<strong>JavaScript</strong><br />
<script src="https://gist.github.com/932749.js?file=jquery-infiniteslider.js"></script></p>
<h3>Kommentarer?</h3>
<p>Jag försökte hålla det så enkelt som möjligt, samt att jag ville ha en &#8221;ren&#8221; version som jag själv kan gå tillbaka till och återanvända i andra projekt. Har ni förslag på förbättringar så tar jag gärna emot dem!</p>
]]></content:encoded>
			<wfw:commentRss>/2011/04/20/ytterligare-en-karusell-i-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Runestone 2011: WALL-E</title>
		<link>/2011/03/22/runestone-2011-wall-e/</link>
		<comments>/2011/03/22/runestone-2011-wall-e/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 17:54:37 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[RMI]]></category>
		<category><![CDATA[Uppsala Universitet]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=455</guid>
		<description><![CDATA[Uppdaterad 2011-03-31 med källkod och lite mer information Vi har under de senaste 7 veckorna arbetat med ett projekt i en kurs som heter &#8221;Distribuerade system med projekt&#8221;. Vår projektbeskrivning var i korta drag detta: &#8221;You are to design and implement a complete software system that provides Internet access to semi-autonomous soft-realtime robot.&#8221; Då hälsar [...]]]></description>
			<content:encoded><![CDATA[<p><em>Uppdaterad 2011-03-31 med källkod och lite mer information</em></p>
<p>Vi har under de senaste 7 veckorna arbetat med ett projekt i en kurs som heter &#8221;Distribuerade system med projekt&#8221;. Vår projektbeskrivning var i korta drag detta:</p>
<blockquote><p>&#8221;You are to design and implement a complete software system that provides Internet access to semi-autonomous soft-realtime robot.&#8221;</p></blockquote>
<p>Då hälsar vi WALL-E välkommen!</p>
<p><a href="http://hassis.com/static/uploads/hassis.com/2011/03/Wallereal.jpg" rel="lightbox[455]" title="Runestone 2011: WALL-E"><img class="alignnone size-medium wp-image-492" src="http://hassis.com/static/uploads/hassis.com/2011/03/Wallereal-300x146.jpg" alt="" width="421" height="204" /></a><br />
<em>WALL-E med orginalet</em></p>
<h3>Introduktion</h3>
<p>WALL-E är konstruerad i Lego, den är ifrån <a href="http://mindstorms.lego.com/">Lego Mindstorms NXJ</a> och omflashad med <a href="http://lejos.sourceforge.net/">LeJOS</a> för att vi ska kunna köra Java på den.</p>
<p>Vårt projekt krävde att vi skulle kunna styra roboten från vilken klient som helst, därför valde vi att köra Java RMI mellan våra olika system.</p>
<p><a href="http://hassis.com/static/uploads/hassis.com/2011/03/System-diagram.jpg" rel="lightbox[455]" title="Runestone 2011: WALL-E"><img class="alignnone size-full wp-image-456" src="http://hassis.com/static/uploads/hassis.com/2011/03/System-diagram.jpg" alt="" width="463" height="329" /></a><br />
<em>System diagram</em></p>
<h3>Klienten</h3>
<p><a href="http://hassis.com/static/uploads/hassis.com/2011/03/walle-client.jpg" rel="lightbox[455]" title="Runestone 2011: WALL-E"><img class="alignnone size-medium wp-image-460" src="http://hassis.com/static/uploads/hassis.com/2011/03/walle-client-300x207.jpg" alt="" width="300" height="207" /></a><br />
<em>Windowsklienten</em></p>
<p>Klienten är skriven som en Java-applet och kan därför köras ifrån alla möjliga operativsystem, de vi har testat är Linux, Mac OS X samt Windows 7. Den ansluter till ett externt ip som &#8221;robotservern&#8221; körs på.</p>
<p>&nbsp;</p>
<p><a href="http://hassis.com/static/uploads/hassis.com/2011/03/manual-mode.jpg" rel="lightbox[455]" title="Runestone 2011: WALL-E"><img class="alignnone size-medium wp-image-462" src="http://hassis.com/static/uploads/hassis.com/2011/03/manual-mode-300x129.jpg" alt="" width="300" height="129" /></a><br />
<em>Dataflöde &#8211; Manuellt läge</em></p>
<p>Ovan ser ni även hur flödet ser ut när vi skickar enskilda kommandon ifrån det manuella läget i klienten.</p>
<h3>Autopiloten</h3>
<p>I projektet ingick även att vi ska samarbeta med en annan robot i Sverige och söka av ett rum. Vi satte därför upp ytterligare en service som sköter kartan, den körs via RMI och använder sig av en MySQL-databas som robotarna sedan kommunicerar med via interfaces. Kartan genereras sedan med hjälp av GD och PHP och skickas sedan till klienten.</p>
<p>Denna del är den som tagit överlägset längst tid, vår autopilot gör väldigt komplicerade beslut på egen hand. Bra jobbat <a href="http://sportfantast.se/">Julius</a>, Erik och Henrik!</p>
<p>&nbsp;</p>
<p><a href="http://hassis.com/static/uploads/hassis.com/2011/03/automode.jpg" rel="lightbox[455]" title="Runestone 2011: WALL-E"><img class="alignnone size-medium wp-image-461" src="http://hassis.com/static/uploads/hassis.com/2011/03/automode-300x280.jpg" alt="" width="300" height="280" /></a><br />
<em>Dataflöde &#8211; Autopilot</em></p>
<p>När roboten körs i autopilot-läget så gör den inga beslut själv, alla beslut sker genom robotservern och den i sin tur kontrollerar hela tiden med kartservern vilka ytor som är lediga/upptagna.</p>
<h3>Kartläggningsalgoritm</h3>
<ul>
<li>Allting baseras på en &#8221;tile map&#8221; för att förenkla algoritmen. </li>
<li>Den använder en egenkomponerad Dijkstra-algoritm med viktbaserad beslutshantering för all kartläggning. </li>
<li>Den använder även ett poängsystem för att bestämma vilken del av kartan den ska besöka härnäst. </li>
<li>Varje gång den kollar något så kollar den detta tre gånger, med små vinkelskiftningar, för att förbättra avläsningen.</li>
</ul>
<p><a href="http://hassis.com/static/uploads/hassis.com/2011/03/mapping_algorithm.png" rel="lightbox[455]" title="Runestone 2011: WALL-E"><img src="http://hassis.com/static/uploads/hassis.com/2011/03/mapping_algorithm-300x186.png" alt="" width="300" height="186" class="alignnone size-medium wp-image-502" /></a></p>
<h3>Demonstration</h3>
<p>Detta är en 40 sekunder lång demonstration, där WALL-E har kört igenom en hinderbana och håller på att slutföra kartan. Håll koll på den övre högra delen på kartan på laptopen där den monterar ut väggarna allt eftersom den flyttar på sig (jag ber om ursäkt att ljudet hackar i videon).</p>
<p><iframe title="YouTube video player" width="560" height="349" src="http://www.youtube.com/embed/add8DNRPVbw" frameborder="0" allowfullscreen></iframe></p>
<h3>Källkod</h3>
<p>Finns i <a href="https://github.com/parse/runestone2011">Runestone2011 på Github</a>. </p>
<p>Tyvärr verkar den ha tappat all commit-historik när jag flyttade över det, det var lite trist. För en fullständig historik av commitsen så har jag en lokal kopia lagrad med all information.</p>
<p>Så här i efterhand så är vi väl inte särskilt nöjda med kodresultatet, vi hade nog gjort om det mesta <a href="http://xkcd.com/844/">på ett &#8221;bättre&#8221; sätt</a>.</p>
]]></content:encoded>
			<wfw:commentRss>/2011/03/22/runestone-2011-wall-e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtuell utvecklingsmiljö med VirtualBox</title>
		<link>/2010/11/27/virtuell-utvecklingsmiljo-med-virtualbox-och-ubuntu/</link>
		<comments>/2010/11/27/virtuell-utvecklingsmiljo-med-virtualbox-och-ubuntu/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 16:53:55 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=416</guid>
		<description><![CDATA[Ett av problemen jag haft under längre tid har varit att jag trivs alldeles för bra att utveckla med min MacBook. Detta för att det är så mycket enklare att manövrera i operativsystemet mha terminalen, samt att det är så smidigt att använda Git, Ruby, Sass etc. you name it. Jag försökte för någon månad [...]]]></description>
			<content:encoded><![CDATA[<p>Ett av problemen jag haft under längre tid har varit att jag trivs alldeles för bra att utveckla med min MacBook. Detta för att det är så mycket enklare att manövrera i operativsystemet mha terminalen, samt att det är så smidigt att använda Git, Ruby, Sass etc. you name it.</p>
<p>Jag försökte för någon månad sedan att åstadkomma en liknande miljö med VirtualBox och Ubuntu, det gick åt pipan. Igår kväll så började jag nysta i det igen och fick faktiskt fart på det hela!</p>
<h2>Mitt mål</h2>
<ul>
<li>Sätta upp VirtualBox</li>
<li>Installera Ubuntu</li>
<li>Använda Ubuntu som utvecklingsserver och dela kataloger mha Samba</li>
<li>Kunna SSH:a till denna genom att denna får ett internt ip samt att den ska ha internetåtkomst</li>
<li>Sätta upp Git tillsammans med mitt Github-konto</li>
<li>Installera RVM och Rails, Padrino etc.</li>
</ul>
<h3>Sätta upp VirtualBox och installera Ubuntu</h3>
<p>Ladda ner <a href="http://www.virtualbox.org/">VirtualBox</a> och installera <a href="http://www.ubuntu.com/">Ubuntu</a> (jag valde desktop edition). Jag har en trådad uppkoppling så jag sätter min trådade anslutning som delad och noterar vilket IP denna får (192.168.56.1).  Det bör även finnas en &#8221;VirtualBox Host-Only Network&#8221;-adapter i dina nätverksanslutningar, det är denna som ska ha fått ett IP som ex. 192.168.56.1.</p>
<p>Gå in i inställningarna för VirtualBox och Ubuntu och sätt upp två anslutningar, en för NAT och en för &#8221;Endast värd-kort&#8221; (host-only-adapter). Ändra i din fil /etc/network/interfaces till detta:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">auto lo
iface lo inet loopback
&nbsp;
auto eth0
iface eth0 inet dhcp
&nbsp;
auto eth1
iface eth1 inet dhcp</pre></div></div>

<p>Kör ifconfig -a och kontrollera så att du har två olika IP:n på din eth0 (min är 10.0.2.15) och eth1 (min är 192.168.56.101).</p>
<p>Har du fått till detta så kan du förhoppningsvis SSH:a till maskinen (förutsatt att du installerat en ssh-daemon)!</p>
<h3>Sätta upp delning av kataloger</h3>
<p>(Källa: <a href="http://ubuntuforums.org/showthread.php?t=280473">Ubuntu Forums &#8211; HOWTO: Mounting SMB Shares</a>)<br />
Härligt, du har en fungerande Ubuntu som du nu kan starta upp och gömma i bakgrunden och sköta genom ex Putty. Eftersom jag fortfarande kommer sköta själva programmeringen i Windows-miljön så kommer jag vilja ha en katalog som är delad mellan Ubuntu och Windows. Jag skapade en katalog på Windows-datorn som jag kallade för VirtualUbuntu som jag satte som delad, sedan skapade jag en katalog på Ubuntu som jag planerar att montera denna nätverkskatalog i.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">-t</span> cifs <span style="color: #000000; font-weight: bold;">//</span>192.168.56.1<span style="color: #000000; font-weight: bold;">/</span>VirtualUbuntu <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>mittusername<span style="color: #000000; font-weight: bold;">/</span>VirtualWin <span style="color: #660033;">-o</span> <span style="color: #007800;">iocharset</span>=utf8,<span style="color: #007800;">username</span>=mittanvandarnamn,<span style="color: #007800;">password</span>=mittlosenord,<span style="color: #007800;">file_mode</span>=0777,<span style="color: #007800;">dir_mode</span>=0777</pre></div></div>

<p>Detta monterar katalogen, nu vill jag att den ska monteras varje gång jag startar upp min virtuella Ubuntu. Så gå in i /etc/fstab och ange något liknande i slutet:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">//</span>192.168.56.1<span style="color: #000000; font-weight: bold;">/</span>VirtualUbuntu <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>mittusername<span style="color: #000000; font-weight: bold;">/</span>VirtualWin   smbfs  auto,<span style="color: #007800;">credentials</span>=<span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #000000; font-weight: bold;">/</span>.credentials,<span style="color: #007800;">uid</span>=<span style="color: #000000;">1000</span>,<span style="color: #007800;">umask</span>=000,user   <span style="color: #000000;">0</span> <span style="color: #000000;">0</span></pre></div></div>

<p>Jag har även skapat en fil i /root/.credentials för att hålla mina uppgifter med följande innehåll:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">username</span>=your_smb_username
<span style="color: #007800;">password</span>=your_smb_password</pre></div></div>

<p>Sätt sedan rättigheterna på den filen med:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">600</span> <span style="color: #000000; font-weight: bold;">/</span>root<span style="color: #000000; font-weight: bold;">/</span>.credentials</pre></div></div>

<p>När du sedan startar om Ubuntu kan du enkelt montera med:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #660033;">-a</span></pre></div></div>

<h3>Sätt upp Git + Github</h3>
<p>Installera Git med</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> git-core</pre></div></div>

<p>Följ sedan guiden på <a href="http://help.github.com/linux-git-installation/">Githubs hemsida om Linux-installationen</a>.</p>
<h3>Installera Ruby med RVM</h3>
<p>För att kunna ha möjligheten att köra flera olika Ruby-versioner (väldigt behändigt!) och framförallt hålla dessa separerade så använder jag RVM &#8211; <a href="http://rvm.beginrescueend.com/">http://rvm.beginrescueend.com</a>. Detta kan du installera genom att följa instruktionerna på <a href="http://rvm.beginrescueend.com/rvm/install/">http://rvm.beginrescueend.com/rvm/install/</a>.</p>
<p>Några vettiga kommandon med exempel är:</p>
<ul>
<li><em>rvm install ruby-1.9.2-p0</em> (installera 1.9.2 via RVM)</li>
<li><em>rvm list</em> (listar Ruby-variationer, indikerar även vilken som är aktiv)</li>
<li><em>rvm use ruby-1.9.2-p0</em> (välj den specifika Ruby)</li>
<li><em>rvm package install zlib</em> (mer om detta i nästa stycke)</li>
</ul>
<h3>Installera Rails</h3>
<p>Jag valde att köra Ruby 1.9.2 via RVM och då stötte jag på patrull i form av gnäll på att jag inte hade zlib och openssl, en snabb sökning gav följande resultat:</p>
<ul>
<li><a href="http://rvm.beginrescueend.com/packages/zlib/">http://rvm.beginrescueend.com/packages/zlib/</a></li>
<li><a href="http://rvm.beginrescueend.com/packages/zlib/">http://rvm.beginrescueend.com/packages/openssl/</a></li>
</ul>
<p>Följer du dessa instruktioner så borde det gå bra att få in Rails.</p>
<h3>Summan av kardemumman</h3>
<p>Detta är skrivet som en liten &#8221;kom ihåg&#8221;-post till mig själv inför nästa gång jag ska genomföra detta, förhoppningsvis har någon annan nytta av det också! Lycka till!</p>
]]></content:encoded>
			<wfw:commentRss>/2010/11/27/virtuell-utvecklingsmiljo-med-virtualbox-och-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speed me up, Scotty!</title>
		<link>/2010/11/05/speed-me-up-scotty/</link>
		<comments>/2010/11/05/speed-me-up-scotty/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 18:00:50 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=390</guid>
		<description><![CDATA[Något som jag varit besatt av den senaste tiden är att få upp hastigheten på webbplatser. Sedan Google påpekade att de kommer börja ranka sidor efter hastighet så känns det som att det är vettigt att lägga ner lite tid på att undersöka detta. Ett bra ställe att börja på är Yahoos riktlinjer och &#8221;good [...]]]></description>
			<content:encoded><![CDATA[<p>Något som jag varit besatt av den senaste tiden är att få upp hastigheten på webbplatser. Sedan <a href="http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html">Google påpekade att de kommer börja ranka sidor efter hastighet</a> så känns det som att det är vettigt att lägga ner lite tid på att undersöka detta.</p>
<p>Ett bra ställe att börja på är <a href="http://developer.yahoo.com/performance/rules.html">Yahoos riktlinjer och &#8221;good practices&#8221;</a> på deras <a href="http://developer.yahoo.com">developer network</a>.</p>
<p>Jag tänkte gå igenom några av de saker som jag tycker är viktigast när det gäller att optimera laddningstider.</p>
<h3>Javascript i footern</h3>
<p>En tumregel jag har är att javascript ska läggas i sidfoten och stilmallar ska ligga i sidhuvudet. Anledningen till att jag vill ladda Javascript i sidfoten är för att undvika att blockera visningen av innehåll, ni kan läsa mer om detta på &#8221;<a href="http://developer.yahoo.com/performance/rules.html#js_bottom">Yahoo: Put Scripts at the Bottom</a>&#8221;.</p>
<h3>Undvik inline-Javascript och inline-CSS</h3>
<p>Låt mig cacha! Detta kan inte betonas nog hårt. Genom att lägga Javascript och CSS externt så får webbläsaren möjlighet att cacha filerna.</p>
<h3>Utnyttja Content Delivery Networks (CDN)</h3>
<p>Jag har de senaste dagarna testat <a href="https://support.loopia.se/wiki/Autobahn">Autobahn</a> hos <a href="http://www.loopia.se">Loopia</a> i <a href="http://blogg.loopia.se/2009/05/12/snabba-upp-wordpress-med-autobahn/">kombination med WordPress</a>. Det har fungerat väldigt smidigt och jag verkligen glad att jag provade det! </p>
<p>Vill man vara riktigt duktig kan man skapa en s.k. &#8221;cookie-free domain&#8221; på en separat domän. Det går ut på att du har en helt separat domän för ditt statiska material och då undviker du att skicka redan satta cookies till den domänen (utöver den vanliga domänen). Läs mer om detta på &#8221;<a href="http://developer.yahoo.com/performance/rules.html#cookie_free">Yahoo: Use Cookie-free Domains for Components</a>&#8221;.</p>
<p>Något jag funderat kring men ännu inte provat särskilt mycket är att använda <a href="http://docs.jquery.com/Downloading_jQuery#CDN_Hosted_jQuery">externa CDN även för ex. jQuery</a>.</p>
<p>Fördelarna är att ifall besökaren besökt en annan webbplats som använder samma CDN som du använder för jQuery-versionen så har den redan laddat ner den och cachat den, så den behöver inte laddas ner på nytt. Nackdelen är att du har lite svårare att kontrollera någon slags &#8221;fallback&#8221; ifall din CDN ligger nere.</p>
<h3>Dra ner på antalet anrop(!)</h3>
<p>Med anrop menas antalet bilder, Javascript och CSS -filer som laddas in vid en sidladdning.  Jag använder mig av Firebug för att hålla koll på mängden anrop. Jag försöker undvika att ladda för mycket, även om det är svårt att sätta en speciell gräns på vad som är &#8221;för mycket&#8221;. </p>
<p>Detta brukar kunna bli ett stort problem när man kör många WordPress-tillägg, då väldigt många använder sig av en hel del Javascript och CSS. Är jag riktigt ambitiös så redigerar jag tillägget och rycker ut de filerna som de använder för att slå ihop dem till en enda, detta för att få ner antalet anrop.</p>
<p>En metod för att hålla nere anropen av bilder är att utnyttja CSS-sprites, läs mer i &#8221;<a href="http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/">The Mystery Of CSS Sprites</a>&#8221;.</p>
<h3>Slutsats</h3>
<p>Ta dig tid att läsa på om ämnet och försök göra dina servrar och besökare glada genom att erbjuda korta laddningstider. Bra verktyg att använda är <a href="http://getfirebug.com/">Firebug</a> och <a href="http://developer.yahoo.com/yslow/">YSlow</a>. </p>
<p>Jag har <a href="http://hassis.com/resurser/">uppdaterat mina resurser</a> en del under de senaste veckorna, ta gärna en titt på dem.</p>
<p>Har ni några tips får ni gärna lämna en kommentar till mig!</p>
]]></content:encoded>
			<wfw:commentRss>/2010/11/05/speed-me-up-scotty/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordCamp Stockholm 2010</title>
		<link>/2010/10/16/wordcamp-stockholm-2010/</link>
		<comments>/2010/10/16/wordcamp-stockholm-2010/#comments</comments>
		<pubDate>Sat, 16 Oct 2010 08:17:01 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Personligt]]></category>
		<category><![CDATA[Programmering]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=368</guid>
		<description><![CDATA[Den 23-24 oktober går Sveriges första WordCamp av stapeln. Platsen är Tekniska muséet i Stockholm, och dit kommer vi för att lära av varandra samt ha trevligt &#8211; allt i skön WordPress-anda. Jag deltog i en tävling av Binero och lyckades knipa en biljett till WordCamp Stockholm den kommande helgen (23-24 oktober). Ser ni mig [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://se.wordcamp.org/"><img src="http://hassis.com/static/hassis.com/uploads/2010/10/wordcampsthlm2010-180x300.png" alt="" width="180" height="300" class="alignright size-full wp-image-369" /></a><br />
<blockquote>Den 23-24 oktober går Sveriges första WordCamp av stapeln. Platsen är Tekniska muséet i Stockholm, och dit kommer vi för att lära av varandra samt ha trevligt &#8211; allt i skön WordPress-anda. </p></blockquote>
<p>Jag deltog i <a href="http://blogg.binero.se/2010/10/grattis-har-ar-vinnarna-i-wordcamp-tavlingen-eller-varfor-grodor-flyger/">en tävling av Binero</a> och lyckades knipa en biljett till <a href="http://se.wordcamp.org">WordCamp Stockholm</a> den kommande helgen (23-24 oktober).</p>
<p>Ser ni mig där så tveka inte att säga hej!</p>
<h3>Uppdatering 2010-10-21</h3>
<p>P.g.a. lite oplanerade studier så har jag idag tvingats avboka min biljett på WordCamp. Vi ses nästa år istället!</p>
]]></content:encoded>
			<wfw:commentRss>/2010/10/16/wordcamp-stockholm-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQTouch och WordPress</title>
		<link>/2010/08/23/jqtouch-och-wordpress/</link>
		<comments>/2010/08/23/jqtouch-och-wordpress/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 11:42:07 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=356</guid>
		<description><![CDATA[Eftersom mobila webbplatser är &#8221;the shizzle&#8221; numera så vill inte jag vara sämre än att haka på tåget. Då jag bygger mycket webbplatser i WordPress så vill jag ha ett &#8221;enkelt&#8221; sätt att ha ett separat tema för den mobila sidan och låta den rulla med hjälp av jQTouch. Tillägget Så, vad är det jag [...]]]></description>
			<content:encoded><![CDATA[<p>Eftersom mobila webbplatser är &#8221;the shizzle&#8221; numera så vill inte jag vara sämre än att haka på tåget. Då jag bygger mycket webbplatser i WordPress så vill jag ha ett &#8221;enkelt&#8221; sätt att ha ett separat tema för den mobila sidan och låta den rulla med hjälp av <a href="http://jqtouch.com/">jQTouch</a>. </p>
<h3>Tillägget</h3>
<p>Så, vad är det jag vill göra, jag vill identifiera besökarens webbläsare och om det är en mobil så ska den &#8221;on-the-fly&#8221; byta till mitt mobila tema. Jag vill sedan ha ett sätt att kunna hoppa mellan den mobila och vanliga webbplatsen.</p>
<p>All kod finns <a href="http://gist.github.com/545298">i en Gist på GitHub</a> (mycket anpassad för mina behov) för hur jag löst detta. Jag skapade ett plugin som tog hand om det hela. Om mitt vanliga tema heter &#8216;xc1-test&#8217;, så kommer jag att kolla ifall temat &#8216;xc1-test-mobile&#8217; existerar.</p>
<p>WordPress ger oss möjligheten att ladda in ett separat tema med hjälp av filtret &#8216;stylesheet&#8217;, så vi gör en kontroll ifall temat finns (och efterfrågas) och i sådana fall hoppar vi över till det.</p>
<h3>Temat</h3>
<p>Temat xc1-test-mobile innehåller inte så mycket annat än exempelkod från jQTouchs lösning, så det är inte mycket nytt under solen där. </p>
<p>Det som inte är så vackert just nu är hur sidor och inlägg hämtas ifrån WordPress, jQTouch hämtar enbart statiska filer, därför har jag fått lov att lägga till .html i slutet på mina sidor. Poster däremot får man lov att ändra manuellt permalänk-inställningen i administrationen så den har .html på slutet. Detta kommer jag nog ändra och skriva om AJAX-hämtningen manuellt, men detta var mest för att få allting att fungera i ett inledande skede.</p>
<p>Temats filer single.php och page.php ska inte innehålla <em>get_header()</em> och <em>get_footer()</em>. </p>
<p>Jag kan sedan hoppa mellan de två olika versionerna genom querystringen <em>?xc1-layout=mobile</em> och <em>?xc1-layout=default</em>.</p>
<h4>Menyer</h4>
<p>Något som är riktigt fint i WordPress 3 är att jag kan skapa en separat meny (i menyhanteraren) för den mobila versionen och använda den i detta mobila tema, då kan jag skapa separata mobilversioner av de sidor som jag vill ha tillgängliga ifrån mobilen.</p>
<h3>Slutord</h3>
<p>Jag har tittat mycket på hur <a href="http://mobile.tutsplus.com/tutorials/html5/jqtouch-mobile-wordpress-1/">andra</a> har löst <a href="http://wordpress.org/extend/plugins/wptouch/">detta</a>, jag kommer skriva mer om detta när jag känner mig nöjd med lösningen, ge gärna kommentarer på hur ni löst detta. </p>
]]></content:encoded>
			<wfw:commentRss>/2010/08/23/jqtouch-och-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Riding the Rails: Amazon S3 &amp; Flowplayer</title>
		<link>/2010/08/01/riding-the-rails-amazon-s3-flowplayer/</link>
		<comments>/2010/08/01/riding-the-rails-amazon-s3-flowplayer/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 07:00:52 +0000</pubDate>
		<dc:creator>Anders</dc:creator>
				<category><![CDATA[Programmering]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://hassis.com/?p=329</guid>
		<description><![CDATA[Vi har börjat använda Amazon S3 för att lagra filmer som vi sedan ska spela upp (med hjälp av Flowplayer) i en inloggningsskyddad applikation. För att sätta upp kopplingen mot S3 så använder vi oss av Paperclip och AWS::S3. Att få igång uppladdningen mot S3 tillsammans med Paperclip var absolut inga problem, det fungerade i [...]]]></description>
			<content:encoded><![CDATA[<p>Vi har börjat använda <a href="http://aws.amazon.com/s3/">Amazon S3</a> för att lagra filmer som vi sedan ska spela upp (med hjälp av <a href="http://flowplayer.org/">Flowplayer</a>) i en inloggningsskyddad applikation. </p>
<p>För att sätta upp kopplingen mot S3 så använder vi oss av <a href="http://github.com/thoughtbot/paperclip">Paperclip</a> och <a href="http://amazon.rubyforge.org/">AWS::S3</a>. Att få igång uppladdningen mot S3 tillsammans med Paperclip var absolut inga problem, det fungerade i princip så fort vi hade lagt in något liknande detta i vår modell:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">has_attached_file <span style="color:#ff3333; font-weight:bold;">:media_file</span>,
    <span style="color:#ff3333; font-weight:bold;">:storage</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:s3</span>,
    <span style="color:#ff3333; font-weight:bold;">:s3_credentials</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> Rails.<span style="color:#9900CC;">root</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'config'</span>, <span style="color:#996600;">'s3.yml'</span><span style="color:#006600; font-weight:bold;">&#41;</span>,
    <span style="color:#ff3333; font-weight:bold;">:path</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;:attachment/:id/:style/:basename.:extension&quot;</span>,
    <span style="color:#ff3333; font-weight:bold;">:bucket</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'our_bucket'</span>,
    <span style="color:#ff3333; font-weight:bold;">:s3_permissions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'authenticated-read'</span>,
    <span style="color:#ff3333; font-weight:bold;">:url</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;:s3_protected_url&quot;</span>
&nbsp;
  <span style="color:#008000; font-style:italic;"># Video Validations</span>
  validates_attachment_presence <span style="color:#ff3333; font-weight:bold;">:media_file</span>
  validates_attachment_content_type <span style="color:#ff3333; font-weight:bold;">:media_file</span>, <span style="color:#ff3333; font-weight:bold;">:content_type</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'application/x-shockwave-flash'</span>, <span style="color:#996600;">'application/x-shockwave-flash'</span>, <span style="color:#996600;">'application/flv'</span>, <span style="color:#996600;">'video/x-flv'</span>, <span style="color:#996600;">'video/H264'</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>(Det är <em>authenticated-read</em> som sätter rättigheterna på anslutningen och gör att vi kan använda oss av Paperclips <a href="http://yardoc.org/docs/JasonKing-paperclip/Paperclip/Storage/S3">expiring_url</a>-metod.)</p>
<p>Problemet uppstod när vi skulle använda Flowplayer för att streama direkt ifrån S3, vi vill bara ha verifierade användare som ser våra filmer. Det blev strul med tecknen i de meckiga länkarna som S3 genererar och Flowplayer kunde inte läsa de rakt av.</p>
<p>Vi använde oss då av en &#8221;<a href="http://flowplayer.org/demos/installation/alternate/index.html">Alternate embedding method</a>&#8221; aka. flashembed.js. Så här beskrivs <a href="http://flowplayer.org/tools/demos/toolbox/flashembed/flowplayer.html"> &#8221;Flashembed and Flowplayer&#8221;</a>: </p>
<blockquote><p>Flowplayer is a regular Flash component just like any other Flash component. It can be placed on your page with this tool or by using HTML-based object tags or you can use our &#8221;competitor&#8221;, SWFObject.</p></blockquote>
<p>Sedan när vi skickade den &#8221;säkra&#8221; länken från <strong>controllern</strong> till viewn så fick vi manuellt ersätta lite tecken:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#0066ff; font-weight:bold;">@media</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:flash_url</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#0066ff; font-weight:bold;">@media</span>.<span style="color:#9900CC;">media_file</span>.<span style="color:#9900CC;">expiring_url</span>.<span style="color:#CC0066; font-weight:bold;">gsub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;&amp;&quot;</span>, <span style="color:#996600;">&quot;%26&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#CC0066; font-weight:bold;">gsub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;?&quot;</span>, <span style="color:#996600;">&quot;%3F&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#CC0066; font-weight:bold;">gsub</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;=&quot;</span>, <span style="color:#996600;">&quot;%3D&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>För att embedda den i viewn så får du även se till att säga åt Rails att det är en säker länk (med hjälp av html_safe):</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;a id=&quot;player&quot; style=&quot;width:400px;height:280px;&quot;&gt;&lt;/a&gt;
&lt;script language=&quot;JavaScript&quot;&gt;
flashembed(&quot;player&quot;, &quot;http://releases.flowplayer.org/swf/flowplayer-3.2.2.swf&quot;, {
    config: {
        clip: { url: '&lt;%= @media.flash_url.html_safe %&gt;', autoPlay: false },
        plugins: { controlbar:null },
        autoPlay: false
    }
});
&lt;/script&gt;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>/2010/08/01/riding-the-rails-amazon-s3-flowplayer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using memcached
Object Caching 1056/1101 objects using memcached

Served from: hassis.com @ 2012-02-04 03:22:12 -->
