<?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>www.vegard.net &#187; Internet</title>
	<atom:link href="http://www.vegard.net/archives/tag/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vegard.net</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 04 Feb 2012 20:26:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>RIPE Atlas.</title>
		<link>http://www.vegard.net/archives/4904/</link>
		<comments>http://www.vegard.net/archives/4904/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 19:56:21 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=4904</guid>
		<description><![CDATA[On Thursday I got a notification slip in my snail-mail box about a packet that was waiting for me at the post office. It was registered mail, sent from Amsterdam, The Netherlands. Registered mail is interesting, since the sender actual cares if you receive the package or not. Amsterdam is also interesting, considering all the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vegard.net/wp-content/uploads/2012/02/5761786527_40f354a2af_o.jpg"><img src="http://www.vegard.net/wp-content/uploads/2012/02/5761786527_40f354a2af_o-650x432.jpg" alt="" title="Amsterdam Canal at Nightfall by Visualist Images (http://www.flickr.com/photos/visualistimages/5761786527/)" width="650" height="432" class="aligncenter size-medium wp-image-4907" /></a>On Thursday I got a notification slip in my snail-mail box about a packet that was waiting for me at the post office. It was registered mail, sent from Amsterdam, The Netherlands. Registered mail is interesting, since the sender actual cares if you receive the package or not. Amsterdam is also interesting, considering all the different things that you can receive from that particular city. The thing was that I couldn&#8217;t remember having bought anything recently that would be dispatched from Amsterdam.</p>
<p>Could I have been doing some drunken internet shopping? It has only happened once before, and it&#8217;s a long time ago. I watched an excellent movie, <a href="http://www.imdb.com/title/tt0118956/" rel="external">Deep Rising</a>, after coming home from a long night out and decided I just <em>had</em> to buy it on DVD. It was impossible to come by in Norway, but luckily I managed to dig it up in an obscure American online store. A few weeks later the DVD arrived in the mail. With P&#038;P, import tax and an unfortunate exchange rate, the price of the thing easily exceeded three times the normal price of a DVD. And after seeing the movie again I learned a hard lesson in life: Drunken internet shopping is a really bad idea. The movie was crap.</p>
<p>If I had been riding the plastic VISA dragon again, this registered packet from Amsterdam could potentially contain anything. Maybe it was a tiny prostitute or some dope?<sup>1)</sup> Should I worry about plain clothes cops hiding in the snowdrift outside the post office?</p>
<p><span id="more-4904"></span></p>
<p>As it turned out, I had nothing to worry about. Of course. What I received was my <a href="http://atlas.ripe.net/" rel="external">RIPE Atlas</a> probe. RIPE NCC is an independent, not-for-profit membership organisation that supports the infrastructure of the Internet through technical coordination and it&#8217;s located in &#8211; you guessed it &#8211; Amsterdam.</p>
<p>With the Atlas, RIPE is building the next generation active Internet measurement system. It is currently in the prototype stage and will eventually scale up to thousands of measurement nodes distributed around the globe. A probe is a tiny hardware device that runs measurements in the RIPE Atlas system and reports these measurements to the data collection components. I&#8217;ve now connected one of the nodes to my network to feeds the Atlas with relevant measurement data. Or all my passwords and credit card numbers.</p>
<p>I&#8217;m not doing this only to do RIPE a favor. I&#8217;m suspecting the my ISP has overbooked their bandwidth capacity considerably in my area: Last week I was at home sick for a day and around noon I started a download that sped through at maximum speed. As one should expect, since I do, you know, <em>pay</em> for that speed. In the evening, however, downloads tend to just crawl along. The most likely culprit is someone with way too much warez to share. I suspect the downstairs neighbors; I&#8217;m pretty sure I can hear the PSU fans of a server when I walk past their front door.</p>
<p>With the Atlas probe I&#8217;m hoping to extract some measurements that show ping values skyrocket and bandwidth measurements plummet in the evening. It&#8217;s nice to have some sort of data when sending that angry (but polite) old-cranky-man e-mail to the ISP. And if I don&#8217;t get the data I want from the probe, I&#8217;m still contributing to the RIPE Atlas. If you also want to connect a probe to your network, you can use <a href="https://atlas.ripe.net/pre-register/" rel="external">this form</a>.</p>
<p><span class="footnote">1) Just to clarify; I&#8217;ve never order neither (tiny) prostitutes nor dope (on the internet).</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/4904/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Sad State of Personal Wi-Fi Security.</title>
		<link>http://www.vegard.net/archives/4784/</link>
		<comments>http://www.vegard.net/archives/4784/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 19:23:07 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=4784</guid>
		<description><![CDATA[If you have an internet connection at home, there&#8217;s a good chance you also have a wireless router set up to give you a wireless internet connection. Many people are happy with the default settings when they turn on their wireless routers for the first time. In some cases, if the router is provided by [...]]]></description>
			<content:encoded><![CDATA[<p>If you have an internet connection at home, there&#8217;s a good chance you also have a wireless router set up to give you a wireless internet connection. Many people are happy with the default settings when they turn on their wireless routers for the first time. In some cases, if the router is provided by an ISP that gives a crap, you have a router with good encryption and a decent password. If you&#8217;re not that lucky, the default settings mean you&#8217;re sharing your internet connection and everything you do while online with anyone with a little knowledge of how Wi-Fi works.</p>
<p>Encryption is the key to safe wireless internet usage and while all wireless routers available today support a range of different encryption standards, many are configured with no encryption or very poor encryption by default. As an example, let&#8217;s have a look at the wireless access points that are visible from my apartment.</p>
<p><img src="http://www.vegard.net/wp-content/uploads/2012/01/inSSIDer-2.png" alt="" title="inSSIDer 2" width="301" height="375" class="alignleft size-full wp-image-4789" />No less than 16 wireless access points are in range of my computer. I found them by using a tool called <a href="http://www.metageek.net/products/inssider/" rel="external">inSSIder</a>, which anyone can download and use to scan for available wireless access points. It basically does the same as your operating system when it searches for wireless networks to connect, but the information collected from the networks found is displayed in a very convenient way. The main point of interest here is the Privacy column, which tells us what kind of encryption each network uses. There is one network with no encryption at all, 6 with WEP encryption, 3 with WPA encryption and 6 with WPA2-AES encryption (displayed as &#8220;RSNA-CCMP&#8221; in the table). As you can see, the WPA encryption comes in two flavors; WPA-AES (WPA-CCMP) and WPA-TKIP.</p>
<p>Initially, the network without encryption seems like an interesting one: It will give you free internet access by simply connecting to it. Personally, I get a little nervous when I see an open wireless network like this. It might be tempting to use it, but in some cases <a href="http://www.youtube.com/watch?v=jWI8w9kLAks" rel="external">it&#8217;s a trap!</a>. Someone might have set up this honeypot to lure you to connect to it just to record everything you do while connected. And by everything I mean <em>everything</em>: usernames, passwords and credit cards numbers &#8211; every single piece of data that is transmitted between your computer and the internet. Remember that free wireless internet you use at the coffee shop and the pizza place? It might be that you are connecting to a honeypot, not the free wireless network. And even if you are connecting to the coffee shop&#8217;s network, anyone can eavesdrop on the connection as long as the connection is unencrypted. This is the reason why I never connect to an unencrypted network and neither should you.</p>
<p><span id="more-4784"></span></p>
<p>6 of the networks above are encrypted with WEP. In terms of communication security, WEP encryption is almost as unsafe as a network with no encryption at all. A <a href="http://www.google.com/search?q=crack+wep" rel="external">quick search on Google</a> shows you just how easy it is to crack the WEP passphrase and eavesdrop on the traffic on a WEP encrypted network: This means that if your network is encrypted with WEP and there&#8217;s someone within range of your network who wants to know what you are doing on the internet, he or she is probably listening in right now. Is your ex hiding in the bushes with his laptop? Even if that&#8217;s not the case, you should immediately change the encryption on your wireless network to something else than WEP.</p>
<p>WPA might seem tempting. But no. WPA can also be cracked fairly easy, even if it&#8217;s considerably more complicated than cracking WEP encrypted networks. Even though some Japanese scientists did it in <a href="http://jwis2009.nsysu.edu.tw/location/paper/A%20Practical%20Message%20Falsification%20Attack%20on%20WPA.pdf" rel="external">one minute</a> (PDF), most people wanting to crack an encrypted network will target WEP encrypted networks because it&#8217;s so damn easy. To stay as safe as you can today, switch to WPA2-AES (might be WPA2-CCMP on some routers) and create one hell of a passphrase. It <em>is</em> possible to crack WPA2-AES, but it requires a lot of computer power and password guessing. By using a non-dictionary password you can be fairly safe that no one will be able to eavesdrop when you surf on your wireless internet connection. </p>
<p>Personally, I&#8217;m using WPA2-AES with a 64 character long password. It makes me feel safe, but annoys the hell out of everyone who visits and want to connect to the internet.</p>
<p>Worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/4784/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Rich Snippets.</title>
		<link>http://www.vegard.net/archives/4550/</link>
		<comments>http://www.vegard.net/archives/4550/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 13:57:23 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Site News]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=4550</guid>
		<description><![CDATA[For a while now, Google have been enriching their search results with metadata from the sites they display links to. Search for reviews, for instance, and you will get a review summary, complete with stars and everything in the search result. No real need to read the actual review, but of course you still should. [...]]]></description>
			<content:encoded><![CDATA[<p>For a while now, Google have been enriching their search results with metadata from the sites they display links to. Search for reviews, for instance, and you will get a review summary, complete with stars and everything in the search result. No real need to read the actual review, but of course you still should. Searches that result in blog entry hits have started to display author information with picture in the search result, which is great for people who want to build a personal brand. Like this:</p>
<p><img src="http://www.vegard.net/wp-content/uploads/2011/11/webmasters_1408986_websearch_en.png" alt="" title="Google Rich Snippets author example" width="517" height="128" class="aligncenter size-full wp-image-4553" /></p>
<p>Since I wouldn&#8217;t mind making money by sitting at home surfing the interwebs all day while writing the occasional rant, I decided to add the necessary information Google needs to display both review and author information every time a search result contains a link to my site. Unfortunately, Google doesn&#8217;t just start to index the new information automatically, you have to fill out a form and submit your site for <em>manual</em> addition to the sites they display metadata for. But as soon as everything is configured, I can just sit back, relax and watch the money come flowing in.</p>
<p>Great stuff. In other site-related news, I&#8217;ve fixed the last.fm information in the footer so that it looks good not only in IE and Opera, but also in Chrome and Firefox. People have told me these are popular browsers. The number of views per entry has also been reintroduced, after I discovered the functionality could be combined with <a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP Super Cache</a>. I&#8217;m not sure how well it works, though, because the numbers I see in Google Analytics and the views recorded by <a href="http://wordpress.org/extend/plugins/wp-postviews/">WP-PostViews</a> are not the same. And on top of all this, a nice set of stars are displayed on every review I write.</p>
<p>I spend way too much time tinker with this site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/4550/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spotiface.</title>
		<link>http://www.vegard.net/archives/4240/</link>
		<comments>http://www.vegard.net/archives/4240/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 17:56:09 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=4240</guid>
		<description><![CDATA[Ah, Spotify. I was skeptical at first; I&#8217;d stopped buying physical CDs years ago, but to stop buying music altogether and subscribe? Madness! But eventually you won me over and with the release of your great Android client1) with offline mode I said good bye to iTunes for good and entered a world of millions [...]]]></description>
			<content:encoded><![CDATA[<p>Ah, <a href="http://www.spotify.com" rel="external">Spotify</a>. I was skeptical at first; I&#8217;d stopped buying physical CDs years ago, but to stop buying music altogether and subscribe? Madness! But eventually you won me over and with the release of your great Android client<sup>1)</sup> with offline mode I said good bye to iTunes for good and entered a world of millions and millions of great tracks from artists all over the globe.</p>
<p>So why did you have to invite that other guy to the party? And not only did you invite him, you insisted I had to be his friend just so I could continue to spend time with you.</p>
<p>I&#8217;m of course talking about he unholy relationship between Spotify and <a href="http://www.facebook.com/" rel="external">Facebook</a>. As of last week, Spotify began to require every new subscriber to have a Facebook account. Since I&#8217;m a long time Spotify subscriber, it didn&#8217;t actually affect me as current subscribers did not have to comply to the new requirement. But the concept that you need to have an account on a social network to be able to pay for a music service is just absurd. It&#8217;s like a grocery store demanding that you show them your pilot&#8217;s license before they&#8217;d sell you a loaf of bread.</p>
<p><span id="more-4240"></span></p>
<p>All right, so not the best comparison, but you get the idea. Because of Spotify&#8217;s tight and unnatural integration with Facebook, I decided to move to another music service that should, theoretically, give me more or less the same service for the same monthly fee: A subscription service with millions of tracks available using a PC client and an Android client with offline mode. Same shit, different wrapping, basically. The service is the Norwegian <a href="http://www.getwimp.com/" rel="external">WiMP</a> (<a href="http://en.wikipedia.org/wiki/WIMP_(music_streaming_service)" rel="external">Wikipedia article</a>).</p>
<p>Before I start this rant, I should tell that I once had very tight connections with Aspiro Group, co-creators of the service. A few years back (does time fly!), Aspiro Group bought a company I co-founded and I ended up sharing office space with the people building the WiMP service.</p>
<p>Anyway.</p>
<p>Even though Spotify and WiMP are theoretically the same type of service, they are also very different. Their choice of technology, streaming quality, editorial approach and the track availability make them stand light years apart.</p>
<p>WiMP scores high when it comes to how they present the music. There is a lot of effort going into making playlists, campaigns and presenting new releases. They also have some great music that is not available on Spotify, for instance Pink Floyd. The problem for WiMP, however, is that Spotify crush them in every other aspect:</p>
<h4>Cross-platform</h4>
<p>WiMP has decided to use Adobe Air to create a client that works on every platform supported by Adobe Air: Windows, OS X and Linux. This might have sounded like a great idea once, but the main problem with cross-platform frameworks is that you sacrifice performance for the convenience of not having to port your code to various platforms. Compared to Spotify, the WiMP client feels sluggish and non-responsive.</p>
<h4>Sound quality</h4>
<p>WiMP streams in 64 kbit/s HE-AAC  and 256 kbit/s AAC, while Spotify has chosen Vorbis as their codec, streaming in 160 kbit/s and 320 kbit/s. I don&#8217;t know much about codecs and I&#8217;m not audiophile, but the Spotify streams sound better to me (even before I learned the actual codecs and bit rates used).</p>
<h4>Track availability</h4>
<p>Spotify has 5 million more tracks in their archive than WiMP. When I imported my Spotify playlists in WiMP some of the greatest tracks got lost in translation. It&#8217;s great that they have Pink Floyd, but in my opinion, diversity is more important than having the big names.</p>
<h4>Streaming technology</h4>
<p>WiMP uses a classic client-server approach, while Spotify is using peer-to-peer technology. Peer-to-peer has both pros and cons. On the con side, other people are hogging your precious bandwidth. On the pro side, the buffering time is close to nothing and changing tracks and fast forwarding is practically happening as fast as it would if you were playing local music files. Using WiMP it&#8217;s sometimes very obvious that you are using a client that has to wait for a server somewhere to spin up a disk.</p>
<h4>Android client</h4>
<p>The WiMP client is more feature rich than the Spotify client. It has a better search system and you get the feeling that the music is a lot more available than on Spotify. Also, both clients have offline modes, which is a must for me. The shuffle feature on the WiMP client  actually works, which is not the case for Spotify<sup>1)</sup>. So, all in all, the WiMP client should feel better than the Spotify client, yes? No. There are two things that seriously grinds my gears with the WiMP client. First of all, it doesn&#8217;t support play/pause and skipping tracks with the headset button. What the hell is that all about? In addition to this, you can&#8217;t be logged in on the mobile and the desktop clients at the same time. I used this a lot on Spotify: Listen to a great album on the desktop client, add it to a playlist and then log on to the mobile client to make it available offline. With Spotify, you&#8217;d only run into trouble if you actually started playing music using both clients, but with WiMP you&#8217;re not even allowed to log in with the mobile client before the desktop client logs you out.</p>
<h4>Final thoughts</h4>
<p>But in spite of all this, will I go back to Spotify? Unless the lack of support for the headset button<sup>2)</sup> in WiMP drives me mad, I won&#8217;t. The only way to tell companies, in this case Spotify, that they have made bad a decision is to talk the only language they understand:</p>
<p>Money.</p>
<p>In my humble opinion, however, WiMP will have to have a good look at their choice of coding tools, streaming technology and quality if they have any ambitions of competing with Spotify. And a re-branding should also probably be considered &#8211; WiMP? Really? Yeah, I know it&#8217;s an acronym, but who wants to use a service calling itself a wimp? Excessive lack of confidence isn&#8217;t really that attractive. </p>
<p><span class="footnote">1) Even though you never managed to implement a proper shuffle function: Shuffle playlist, playlist stops after three songs. Man, I can&#8217;t even begin to describe how annoying that was.<br />
2) In case anyone working on the WiMP Android client is reading this, here&#8217;s the key event code used for the headset button: <a href="http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HEADSETHOOK">KEYCODE_HEADSETHOOK</a>. Off you go to your computer, then.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/4240/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Secure WordPress.</title>
		<link>http://www.vegard.net/archives/3733/</link>
		<comments>http://www.vegard.net/archives/3733/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 16:55:17 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=3733</guid>
		<description><![CDATA[If you&#8217;ve paid a little attention to tech news lately, you know that there&#8217;s a chance that you have an account somewhere that has been compromised. Maybe at Sony, Sega or StartSSL. That companies with millions and millions of registered users are unable to keep our information safe is rather disturbing. But a major side [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve paid a little attention to tech news lately, you know that there&#8217;s a chance that you have an account somewhere that has been compromised. Maybe at <a href="http://www.google.com/search?q=sony+hacked&#038;tbm=nws" rel="external">Sony</a>, <a href="http://www.google.com/search?q=sega+hacked&#038;tbm=nws" rel="external">Sega</a> or <a href="http://www.google.com/search?q=startssl+hacked" rel="external">StartSSL</a>.</p>
<p>That companies with millions and millions of registered users are unable to keep our information safe is rather disturbing. But a major side effect of one compromised account is that there is a good chance you&#8217;ve used the same username and password for a lot of other services as well. Someone gets their hand on your login information at Sony and they automatically gets access to your other accounts: Facebook, Flickr, Dropbox and PayPal. Crap!</p>
<p>One solution is to use a unique username and password on every site. But can be very inconvenient as the number of accounts increases. Another solution is to use <a href="http://en.wikipedia.org/wiki/Two-factor_authentication" rel="external">two-factor authentication</a>.<span id="more-3733"></span></p>
<p>One way to implement two-factor authentication is to require that the user has access to a token that only the end user has access to. An example of this is a credit card with a PIN code. You need both to get money out of an ATM, with only one of them you can&#8217;t. Another way is to use a password together with a one-time code provided by a token. This is supported by WordPress, and it is a great way to secure your account.  Here&#8217;s how you do it.</p>
<ol>
<li>Install <a href="http://www.google.com/support/a/bin/answer.py?answer=1037451" rel="external">Google Authenticator</a> on your phone (Android version 1.5 or later, BlackBerry OS 4.2 &#8211; 4.7, iPhone iOS 4 or later)</li>
<li>Install and activate the <a href="http://wordpress.org/extend/plugins/google-authenticator/" rel="external">Google Authenticator</a> WordPress plugin.</li>
<li>In WordPress, go to the users configuration, enable Google Authenticator login for your user and follow the instructions.</li>
</ol>
<p>Easy as pie. Now anyone who wants to access your account need your username, your password and the one-time code. It&#8217;s <em>very</em> hard for them to get their hands on all three.</p>
<p>The flip side of things is that if you misplace your mobile phone you are screwed and will be unable to log in to your account. If you run your own WordPress installation, this can be resolved. You can dig down in the wp_usermeta table in the database, find the googleauthenticator_enabled setting and change its value to disabled. This SQL statement should enable you to log in again without using the Google Authenticator code. Replace XXX with your own user_id:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">UPDATE</span> wp_usermeta 
<span style="color: #993333; font-weight: bold;">SET</span> meta_value <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'disabled'</span> 
<span style="color: #993333; font-weight: bold;">WHERE</span> user_id <span style="color: #66cc66;">=</span> XXX <span style="color: #993333; font-weight: bold;">AND</span> meta_key <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'googleauthenticator_enabled'</span></pre></div></div>

<p>The Google Authenticator field will be visible during login, but you don&#8217;t have to enter anything.</p>
<p><strike>Another unfortunate side effect is that you can&#8217;t use the WordPress for Android application because it doesn&#8217;t support two-factor authentication.</strike> Since this entry was written, the author has added support for the WordPress for Android application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/3733/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5: Going Offline.</title>
		<link>http://www.vegard.net/archives/3557/</link>
		<comments>http://www.vegard.net/archives/3557/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 07:08:44 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=3557</guid>
		<description><![CDATA[Although the HTML5 specification still has Working Draft status over at the W3C, browser support is quite good. If you&#8217;re using the latest version of your favorite browser, chances are that it can handle some, if not all, of the new HTML5 features. The Wikipedia article Comparison of layout engines (HTML5) seems fairly updated when [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.vegard.net/wp-content/uploads/2011/06/1000px-HTML5-logo.svg_1.png"><img src="http://www.vegard.net/wp-content/uploads/2011/06/1000px-HTML5-logo.svg_-e1307215795387.png" alt="" title="HTML5 Logo" width="650" height="199" class="aligncenter size-full wp-image-3577" /></a>Although the HTML5 specification still has Working Draft status over at the W3C, browser support is quite good. If you&#8217;re using the latest version of your favorite browser, chances are that it can handle some, if not all, of the new HTML5 features. The Wikipedia article <a href="http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML5)" rel="external">Comparison of layout engines (HTML5)</a> seems fairly updated when it comes to what the different layout engines support in case you want to stay on top of what happens on the client side of HTML5.</p>
<p>Amongst the new features are offline web application support, at the time of writing implemented by all the major browsers except for Internet Explorer. For the users of browsers that do support this feature, however, it means that parts of (or your entire) web application can be made available to them even if they for some reason are offline or if your production servers have taken a dive and <a href="http://www.thewebsiteisdown.com/" rel="external">the website is down</a>. Of course this never happens in <em>your</em> production environment, but this can still be a good thing to know about offline web application support in HTML5 in case you have a friend who you suspect might find himself in this unwelcome challenge some day.<span id="more-3557"></span></p>
<p>When a user visits your web application, the browser will check the HTML pages for a reference to a cache manifest file and if the reference is found, scan the file for information on how your web application can be cached offline. Naturally, this means that the user will need to visit your web application at least once for the client to save it for use in offline mode.</p>
<p>Adding offline support in your web application is surprisingly easy. It all starts out with some HTML editing. In your index.html file &#8211; or some file that contains an &lt;html-tag&gt;, I&#8217;m guessing you&#8217;re using some kind of template system &#8211; add a manifest attribute, like this:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;html</span> <span style="color: #000066;">manifest</span>=<span style="color: #ff0000;">&quot;/cache.manifest&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
...
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>You&#8217;ve now created a reference to the cache manifest, the file that tells the client what can be stored for offline use and what cannot. Next, create the cache.manifest file in the root of your web application.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">CACHE MANIFEST
http://www.example.com/index.html
/logo.png
/scripts/very-important-javascripts.js
http://www.example.com/styles/screen.css</pre></div></div>

<p>As you can see, the cache manifest can contain both absolute and relative paths. Now, there is a small quirk you have to work through when it comes to the cache manifest. It has to be sent to the client with the text/cache-manifest content type or the client will not recognize it. If you&#8217;re working on an Apache-hosted web application, you can simply add the following to the .htaccess file, which is most likely located in the root of the web application (if the file doesn&#8217;t exist, feel free to create it):</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">AddType text/cache-manifest .manifest</pre></div></div>

<p>This will make sure that the server sends the file to the client with the correct content type. The first time the user visits your web application, the client will now download the resources listed in the cache manifest and cache them locally. If the user disconnects from the internet and refresh the web application, all of those resources will be available offline. Magic!</p>
<p>In some cases, however, you want to explicitly stop the client from trying to cache particular resources, for instance a script used to track visitors. Here&#8217;s a modified version of our first cache.manifest file:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">CACHE MANIFEST
NETWORK:
/tracking.cgi
CACHE:
http://www.example.com/index.html
/logo.png
/scripts/very-important-javascripts.js
http://www.example.com/styles/screen.css</pre></div></div>

<p>Everything in the NETWORK section of the file will never be cached and made available offline. Trying to load the tracking.cgi resource while in offline mode will result in an error. The CACHE section of the manifest file contains all the other resources from the first file and will be cached and made available offline as in the previous example.</p>
<p>There is also an option to create a fallback for files that you don&#8217;t want the client to cache. Let&#8217;s for instance say that you want to use a different logo in offline mode, perhaps to indicate to the users that they are using your web application in offline mode. The following change to the cache.manifest file will enable this:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">CACHE MANIFEST
NETWORK:
/tracking.cgi
FALLBACK:
/logo.png /logo_offline.png
CACHE:
http://www.example.com/index.html
/scripts/very-important-javascripts.js
http://www.example.com/styles/screen.css</pre></div></div>

<p>Using the above cache manifest, the client will cache the logo_offline.png resource and show that instead of the logo.png resource whenever the web application is accessed in offline mode. Each entry in the FALLBACK section consists of two URIs. The first URI is the resource, the second is the fallback. Both URIs must be relative and from the same origin as the manifest file. It&#8217;s also possible to use wildcard notation in the FALLBACK section. Let&#8217;s say that you want all of the files in the /images folder to be replaced by one particular resource and all HTML-files to be replaced by another resource when the user is offline:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">CACHE MANIFEST
NETWORK:
<span style="color: #000000; font-weight: bold;">/</span>tracking.cgi
FALLBACK:
<span style="color: #000000; font-weight: bold;">/</span>images <span style="color: #000000; font-weight: bold;">/</span>only-available-offline.png
<span style="color: #000000; font-weight: bold;">*</span>.html <span style="color: #000000; font-weight: bold;">/</span>offline.html</pre></div></div>

<p>Note that there&#8217;s a major gotcha present when working with offline web application support. If you make changes to a resource listed in the CACHE section of the manifest, it will <em>not</em> be cached again by the client. The manifest file itself has to be modified for this to happen. Because of this, it might be a good idea to create the manifest files dynamically and create them whenever any of the resources they handle are modified. A generation timestamp somewhere in the manifest will ensure that the client downloads the latest version of any resources that it&#8217;s supposed to cache from the server. The timestamp can be included like a comments:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 2011-06-04 21:00:44</span>
CACHE MANIFEST
NETWORK:
<span style="color: #000000; font-weight: bold;">/</span>tracking.cgi
FALLBACK:
<span style="color: #000000; font-weight: bold;">/</span>images <span style="color: #000000; font-weight: bold;">/</span>only-available-offline.png
<span style="color: #000000; font-weight: bold;">*</span>.html <span style="color: #000000; font-weight: bold;">/</span>offline.html</pre></div></div>

<p>As an extra bonus, it&#8217;s even possible for your end users to do changes, for instance change some numbers in a budget, even if he is offline. Most of the work to achieve this, however, is up to you, the web developer, and it involves using the local storage on the client, reading a DOM flag that determines if the client is offline or online and syncing the data with the web server when the client comes back online. But all that is outside the scope of this post.</p>
<p>As we&#8217;ve seen there are some pretty neat features in HTML5 and those features will become even neater when we start to think of great ways of utilizing them.</p>
<p>Sources:</p>
<ul>
<li><a href="http://www.slideshare.net/search8819/building-iphone-apps-with-htmlcssand-javascriptoreilly-201001pdf" rel="external">Building iPhone Apps with HTML, CSS and JavaScript</a></li>
<li><a href="http://diveintohtml5.org/offline.html" rel="external">Dive Into HTML5: Let&#8217;s take this offline</a></li>
<li><a href="http://www.html5rocks.com/tutorials/appcache/beginner/" rel="external">HTML5 Rocks &#8211; A Beginner&#8217;s Guide to Using the Application Cache</a>
</ul>
<p>This entry is also available at <a href="http://open.bekk.no/" rel="external">BEKK Open</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/3557/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hangug-eseo Haengboghage.</title>
		<link>http://www.vegard.net/archives/3039/</link>
		<comments>http://www.vegard.net/archives/3039/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 14:22:57 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Formula 1]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=3039</guid>
		<description><![CDATA[Yes, I&#8217;ve been using Google Translate again &#8211; partly to confuse you and partly to make any Korean readers I might have feel at home. &#8220;Hangug-eseo Haengboghage&#8221;, or 한국에서 행복하게1), is supposedly Korean for &#8220;Fun in Korea&#8221;. Why am I rambling on about Korea? Because of last weekend&#8217;s F1 race from Yeongam, of course. It [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, I&#8217;ve been using <a href="http://translate.google.com/" rel="external">Google Translate</a> again &#8211; partly to confuse you and partly to make any Korean readers I might have feel at home. &#8220;Hangug-eseo Haengboghage&#8221;, or 한국에서 행복하게<sup>1)</sup>, is supposedly Korean for &#8220;Fun in Korea&#8221;. </p>
<p>Why am I rambling on about Korea? Because of last weekend&#8217;s F1 race from Yeongam, of course. It all started very wet, as I told you all about in the <a href="/archives/3018/">previous Formula 1 thread</a>. So very, very wet. Even though it dried up after a while, race control decided to start the race behind the safety car. Boring. But after quite a few laps, the safety car left the circuit and the race started for real. Championship leader Mark Webber, decided to celebrate that fact by being a bit to throttle happy on the curb, resulting in a spectacular spin where he managed to take poor Nico Rosberg with him and smash both cars to tiny pieces.<span id="more-3039"></span></p>
<p>The Korean Grand Prix turned out to be a complete disaster for Red Bull when Sebastian Vettel&#8217;s engine blew up and caught fire with only ten laps left. In the end it was Fernando Alonso who took the checkered flag &#8211; his fifth win of the season. With the results from Korea and only two races left, the championship is still wide open, with several drivers having the championship title within reach.</p>
<p>Here are some selected pictures from the Korean Grand Prix, all borrowed from the <a href="http://www.formula1.com/gallery/race/2010/840/" rel="external">official Formula 1 gallery</a>. Enjoy!</p>
<p><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1716.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1716-150x150.jpg" alt="" title="Sebastian Vettel (GER) Red Bull Racing RB6. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3040" /></a><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1730.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1730-150x150.jpg" alt="" title="Sebastien Buemi (SUI) Scuderia Toro Rosso STR5. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3041" /></a><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1752.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1752-150x150.jpg" alt="" title="The Red Bull Racing RB6 of Mark Webber (AUS) Red Bull Racing after he crashed out of the race. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3042" /></a><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1782.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1782-150x150.jpg" alt="" title="Safety car leads the field. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3043" /></a><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1805.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1805-150x150.jpg" alt="" title="Sebastian Vettel (GER) Red Bull Racing RB6 retires from the lead of the race. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3045" /></a><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1812.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1812-150x150.jpg" alt="" title="Vitaly Petrov (RUS) Renault R30 crashes out of the race. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3046" /></a><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1959.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor1959-150x150.jpg" alt="" title="Grid. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3048" /></a><a href="http://www.vegard.net/wp-content/uploads/2010/10/d10kor2143.jpg"><img src="http://www.vegard.net/wp-content/uploads/2010/10/d10kor2143-150x150.jpg" alt="" title="Sebastien Buemi (SUI) Scuderia Toro Rosso STR5 and Timo Glock (GER) Virgin Racing VR-01 collide. Formula One World Championship, Rd 17, Korean Grand Prix, Race, Korea International Circuit, Yeongam, South Korea, Sunday, 24 October 2010" width="150" height="150" class="alignleft size-thumbnail wp-image-3049" /></a></p>
<p><span class="footnote"><sup>1)</sup> If all you see here are squares, you need to install some better fonts on your computer. But since you probably would have the right fonts installed if you&#8217;re able to read Korean, you&#8217;re not missing out on anything if squares are all you see.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/3039/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m With Coco.</title>
		<link>http://www.vegard.net/archives/2981/</link>
		<comments>http://www.vegard.net/archives/2981/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 16:45:22 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=2981</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><object width="648" height="390"><param name="movie" value="http://www.youtube.com/v/hSFbf0f4Ch8?fs=1&amp;hl=nb_NO&amp;rel=0&amp;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/hSFbf0f4Ch8?fs=1&amp;hl=nb_NO&amp;rel=0&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="648" height="390"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/2981/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Box of Wonders.</title>
		<link>http://www.vegard.net/archives/2893/</link>
		<comments>http://www.vegard.net/archives/2893/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 17:28:06 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=2893</guid>
		<description><![CDATA[About two weeks ago I ordered some stuff from DealExtreme. Initially, I was only getting a USB cable for my mobile phone, but since I can order for NOK 200 from overseas without having to pay import taxes and everything from DealExtreme is dead cheap, I just had to order a lot of other crap [...]]]></description>
			<content:encoded><![CDATA[<p>About two weeks ago I <a href="/archives/2853/">ordered</a> some stuff from <a href="http://www.dealexteme.com/" rel="external">DealExtreme</a>. Initially, I was only getting a USB cable for my mobile phone, but since I can order for <a href="http://www.google.com/search?hl=en&#038;rlz=&#038;q=200+nok+in+usd&#038;aq=f&#038;aqi=k1&#038;aql=&#038;oq=&#038;gs_rfai=" rel="external">NOK 200</a> from overseas without having to pay import taxes and everything from DealExtreme is dead cheap, I just had to order a lot of other crap as well.</p>
<p>Two days ago<sup>1)</sup>, the package finally arrived from Hong Kong. Among the wonderful things I&#8217;d forgot I ordered was a great laser pointer slash LED flashlight keychain thingy, a decorative muilticolored LED snow ball and &#8211; wait for it &#8211; four (4) LED shot cups!<span id="more-2893"></span></p>
<p>The multicolored LED snow balls are just excellent. One of them had disintegrated on the trip from Hong Kong to Norway, so I&#8217;m very happy I bought two. I considered taking a picture to show you how nice the working snow ball looks, but a single photo would not justify the relaxing feeling that will engulf your entire being when you turn it on. Because of that, I instead decided to bring you a continuous set of pictures, also know as a &#8220;video&#8221;:</p>
<p><iframe src="http://player.vimeo.com/video/15232321?byline=0&amp;portrait=0" width="650" height="390" frameborder="0"></iframe></p>
<p>Batteries are even included, believe it or not. Another set of gadgets that came with batteries included were the LED shot cups. If you fill the cup with a liquid, the cup will start to flash a blue light like crazy until it&#8217;s empty. This makes it very hard to just sip your shot, a well-known trick when you&#8217;re served a shot you really don&#8217;t want. Here&#8217;s a video of the cup as well.</p>
<p><iframe src="http://player.vimeo.com/video/15232360?byline=0&amp;portrait=0" width="650" height="390" frameborder="0"></iframe></p>
<p>There&#8217;s a word in Norwegian for things like the LED shot cups: &#8220;Harry&#8221;. A possible English translation could perhaps be &#8220;redneck&#8221;. The video does not really show how the LED shot cup works; my cellphone does not record enough frames per seconds to show how fast the cup is blinking. With four of these in a dark room you should be careful when the shots are served if you suffer from epilepsy &#8211; the party might end a bit earlier than planned.</p>
<p>So, if you have a little money to spare or a desperate need for flashing shot cups, decorative multicolored snow balls or other amazing stuff, look no further: <a href="http://www.dealextreme.com/" rel="external">DealExtreme</a>.</p>
<p><span class="footnote"><sup>1)</sup> You might be wondering why I&#8217;m writing this today, on the <a href="/archives/2885/">two-great-games-are-released-Friday</a>. How can I possible both be playing computer games (which I am right now) and write at the same time? The reason is that I&#8217;m talking to you from the past: This entry was written yesterday and scheduled for publishing today. Way to plan ahead!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/2893/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extreme Deals.</title>
		<link>http://www.vegard.net/archives/2853/</link>
		<comments>http://www.vegard.net/archives/2853/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 20:11:39 +0000</pubDate>
		<dc:creator>Vegard Skjefstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://www.vegard.net/?p=2853</guid>
		<description><![CDATA[With the new job also came a new cell phone, the HTC Desire, a brilliant piece of technological art. All iPhone owners should have a good, long look at that phone &#8211; not to try to get them to change religion, I realize that&#8217;s impossible &#8211; but rather to understand how good the competition is [...]]]></description>
			<content:encoded><![CDATA[<p>With the new job also came a new cell phone, the <a href="www.htc.com/www/product/desire/overview.html" rel="external">HTC Desire</a>, a brilliant piece of technological art. All iPhone owners should have a good, long look at that phone &#8211; not to try to get them to change religion, I realize that&#8217;s impossible &#8211; but rather to understand how good the competition is for us all.</p>
<p>I used to have an HTC Hero, which also was a good phone, but the screen was a little too small and the CPU a bit short on horsepower. It used a mini USB connector for charging, while the Desire uses a micro USB connector. Of course it would be preferable that it too used the mini USB, but as far as I understand, micro USB is now the new standard for charging connectors on mobile phones. Fingers crossed.</p>
<p>Anyway. I could use an extra micro USB cable to use at work. Let&#8217;s face it, the battery capacity on smart phones has something to be desired, and having a charging cable laying around is always a good idea<sup>1)</sup>.</p>
<p>Where to find a cheap micro USB cable? Why, <a href="http://www.dealextreme.com/" rel="external">Deal Extreme</a> of course!<span id="more-2853"></span></p>
<p>They have a micro USB cable for the low, low price of $2.30. With free shipping. Cool. The problem with Hong Kong based Deal Extreme is that they have just that; a lot of extreme deals. Also, if you buy stuff for less than NOK 200, you don&#8217;t have to pay import taxes when the package arrives in Norway. NOK 200 is about USD 32 at the moment, meaning that it&#8217;s possible to cram a lot of extreme deals in one small package before the import tax kicks in.</p>
<p>And before I knew it, I&#8217;d ordered more crap than you can imagine: One 6-Inch 2.4GHz Antenna for Wifi/WLAN/Wireless Router and Access Point (not really crap, because I actually need it), two Multicolored LED Decorative Snow Ball (these are actually really nice), a Compact USB PC Webcam (300K Pixel), one 2-in-1 LED + Pointer Flashlight (great when I do one of my many presentations and whenever the light goes out), four (4) LED Shot Cups (parties will never be the same again). And the micro USB cable of course.</p>
<p>Here&#8217;s to the package not being held up in customs.</p>
<p><span class="footnote"><sup>1)</sup> I haven&#8217;t tried the HTC Desire <a href="http://forum.xda-developers.com/showthread.php?t=712990">battery trick</a> yet, but I will soon.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vegard.net/archives/2853/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

