<?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>Benedikt Köppel</title>
	<atom:link href="http://benediktkoeppel.ch/feed/" rel="self" type="application/rss+xml" />
	<link>http://benediktkoeppel.ch</link>
	<description></description>
	<lastBuildDate>Mon, 03 Jun 2013 19:31:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Twitter Summarizer</title>
		<link>http://benediktkoeppel.ch/blog/2013/01/twitter-summarizer/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=twitter-summarizer</link>
		<comments>http://benediktkoeppel.ch/blog/2013/01/twitter-summarizer/#comments</comments>
		<pubDate>Sun, 27 Jan 2013 20:00:50 +0000</pubDate>
		<dc:creator>beni</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://benediktkoeppel.ch/?p=1022</guid>
		<description><![CDATA[The Problem I mainly use Twitter as a news reader. I follow some big news sites (like @NZZfeed), technology sites (@TechCrunch, @wired), entrepreneurs (@elonmusk) plus a few friends. The problem is that a few of my followees generate so many tweets that I struggle to keep up. And I regularly miss tweets from my friends, because [...]]]></description>
			<content:encoded><![CDATA[<a name="the-problem"></a><h3>The Problem</h3>
<p>I mainly use Twitter as a news reader. I follow some big news sites (like <a href="https://twitter.com/NZZfeed" target="_blank">@NZZfeed</a>), technology sites (<a href="https://twitter.com/TechCrunch" target="_blank">@TechCrunch</a>, <a href="https://twitter.com/wired" target="_blank">@wired</a>), entrepreneurs (<a href="https://twitter.com/elonmusk" target="_blank">@elonmusk</a>) plus a few friends. The problem is that a few of my followees generate so many tweets that I struggle to keep up. And I regularly miss tweets from my friends, because those tweets are swamped with the large volume of tweets from the big news sites. So I would like to have a Twitter client that shows only interesting tweets.</p>
<p>A tweet can be <em>retweeted</em> &#8211; if someone reads an interesting tweet, they might forward this tweet to all their own followers. They retweet the original tweet on their own timeline. Assume you have just read a very interesting, inspiring, shocking, or newsworthy tweet. You decide that all your followers should see that tweet as well &#8211; you <em>retweet</em> the tweet to your own timeline. Of course, other people have different interests than I do, and they might consider something interesting which I just find boring. But the whole crowd is probably not so wrong. If enough other people find a tweet interesting, I&#8217;m probably also interested in it.</p>
<a name="the-idea"></a><h3>The Idea</h3>
<p>The way I want to distinguish between uninteresting and interesting is by the tweet&#8217;s retweet count. Twitter allows to query the retweet count for each tweet. For every tweet in my stream, I want to see how many times it was retweeted. Based on the retweet count and the time elapsed since the tweet was originally posted, I want to determine if the tweet is worth reading.</p>
<p>A <em>threshold</em> function should give the criteria, whether the tweet is interesting or not. The first criteria of the function is time:</p>
<ul>
<li><strong>Time:</strong> The first input to the function is the time elapsed since the tweet was posted. Right when the tweet is posted, it has no retweets. For a few hours, the tweet might be in the spot light and get retweeted. The number of retweets follows probably a monotonically increasing curve. The steeper the curve, the more people have retweeted the news, the tweet is probably worth reading.</li>
</ul>
<p>Based on the time we can define a threshold curve. If the retweet count of the tweet lies above my threshold curve, then the tweet is interesting and I want to see it. If the tweet is below the curve, it didn&#8217;t get enough retweets, so it is probably not interesting enough to waste my time on it. This solves the problem that news sites post a lot of articles which I am not particularly interested in. However, the second problem is still not solved: I don&#8217;t notice my friend&#8217;s tweets. The threshold function actually makes this worse, because my friend&#8217;s tweets don&#8217;t get retweeted normally.</p>
<ul>
<li><strong>&#8220;Steepness&#8221; Parameter:</strong> The second parameter of the threshold function controls the slope of the threshold function. For my friends, the threshold function should be very flat (or constant zero), while the news site should be evaluated using a steeper curve.</li>
</ul>
<p>At the moment, the curve I use is quite simple. I assume the tweet gets retweeted linearly during the first four hours, and once it is 4 hours old it will not be retweeted anymore. The threshold function looks like this:</p>
<pre>threshold( time_elapsed, steepness_parameter )
    if time_elapsed &lt; 4 hours: steepness_parameter * time_elapsed
    else: steepness_parameter * 4 hours</pre>
<p>&nbsp;</p>
<p>Two examples:</p>
<ol>
<li>TechCrunch has posted 2 hours ago:
<ul>
<li><em>&#8220;Iterations: Silicon Valley Slowly Awakens To Android (On Samsung) http://tcrn.ch/Wqbmfq  by @semil&#8221;</em>.</li>
<li>My steepness parameter for @TechCrunch is 10 retweets per hour.</li>
<li>The threshold will be:<br />
steepness_parameter * time_elapsed<br />
= 10 retweets per hour * 2 hours<br />
= 20 retweets.</li>
<li>The tweet has 28 retweets now, so it will be displayed.</li>
</ul>
</li>
<li>NZZfeed has posted 8 hours ago:
<ul>
<li><em>&#8220;Gewaltwelle in Ägypten: Am Sonntag kam es in mehreren Städten Ägyptens erneut zu gewalttätigen Auseinandersetzun&#8230; http://t.co/NiyKLT8D&#8221;</em>.</li>
<li>My steepness parameter for @NZZfeed is 3 retweets per hour.</li>
<li>The threshold will be:<br />
steepness_parameter * 4 hours<br />
= 3 retweets per hour * 4 hours<br />
= 12 retweets.</li>
<li>The tweet does not have enough retweets to make it through the filter.</li>
</ul>
</li>
</ol>
<a name="the-solution"></a><h3>The Solution</h3>
<p>I have implemented this function in my own Twitter client, the &#8220;Twitter Summarizer&#8221;. You can access the Twitter Summarizer at <a href="http://twtr.rxtx.ch" target="_blank">twtr.rxtx.ch</a>. The client is based on the Fork-A-Twitter-Client, which is implemented purely in JavaScript. I have forked and extended their client and implemented my threshold function. The client runs in your browser, so there is no need to sign up or register at my website. You only need to approve the connection to Twitter, then the client directly connects to Twitter and fetches your tweets.</p>
<p>Using the &#8220;Mute Settings&#8221; link you can configure the threshold curves yourself. You can define a default steepness parameter which applies to anyone, and you can control the parameter per-user.</p>
<p>You can use the Twitter Summarizer at <a href="http://twtr.rxtx.ch" target="_blank">http://twtr.rxtx.ch</a>, it&#8217;s free.</p>
<a name="some-limitations"></a><h3>Some Limitations</h3>
<p>As explained above, the threshold function is pretty basic at the moment. A tweet will get more retweets after the first 4 hours, so my curve might be wrong at times. I am trying right now to find a better curve.</p>
<p>Because my Twitter client uses Twitter @Anywhere for the authentication, you can be sure that all data remains in your browser. There is none of your Twitter data (username, password, tweets, etc.) stored on my server. The disadvantage is that you can&#8217;t stay logged in for very long. Next time you access the page, you will have to hit the Connect with twitter button again. Also, your preferences are stored in your browser&#8217;s local storage. If you switch to a different browser or device, you will have to configure the client again.</p>
<p>Because of Twitter&#8217;s API limitations, we can only query the most recent 800 tweets of your stream. Because some of those tweets are filtered out, your stream might look quite short.</p>
<p>&nbsp;</p>
<p><a title="Contact" href="http://benediktkoeppel.ch/contact/">Let me know</a> if you&#8217;ve got any problems with the Twitter Summarizer or ideas how to make it better!</p>
]]></content:encoded>
			<wfw:commentRss>http://benediktkoeppel.ch/blog/2013/01/twitter-summarizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>frisk &#8211; Inverted Google Alerts</title>
		<link>http://benediktkoeppel.ch/blog/2012/07/frisk-inverted-google-alerts/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=frisk-inverted-google-alerts</link>
		<comments>http://benediktkoeppel.ch/blog/2012/07/frisk-inverted-google-alerts/#comments</comments>
		<pubDate>Fri, 27 Jul 2012 19:28:37 +0000</pubDate>
		<dc:creator>beni</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://benediktkoeppel.ch/?p=1017</guid>
		<description><![CDATA[About frisk, a tool to monitor where your website is in Google search results. In January, I messed up the setup of one of my web sites.  I misconfigured the privacy settings in WordPress and locked out all search engines. Of course, my website started to drop out of Google&#8217;s top results pretty soon. The [...]]]></description>
			<content:encoded><![CDATA[<p><em>About <a href="http://frisk.6nin.es" target="_blank">frisk</a>, a tool to monitor where your website is in Google search results.</em></p>
<p>In January, I messed up the setup of one of my web sites.  I misconfigured the privacy settings in WordPress and locked out all search engines. Of course, my website started to drop out of Google&#8217;s top results pretty soon. The results were nearly fatal, with an upcoming event depending all on the website and it&#8217;s position in the Google search results. Luckily, I was alerted by one of my colleagues a few days after my mistake and we could get our site back into the Google results within a few more days &#8211; just in time for the event.</p>
<p>However, I wanted to build a tool that would alert me next time much sooner, if one of my websites would start to drop out of the Google results. Basically like Google Alerts, <a href="http://frisk.6nin.es">frisk</a> monitors the Google results for a given search term. But instead of notifying you whenever there is a new hit for your search query, frisk alerts you as soon as your website is moving downwards the Google results.</p>
<p>In frisk, you will have the possibility to define multiple search agents. You specify the search query, which website you expect in the results and at which rank you expect that site to appear. For each agent, frisk will query Google once a day and let you know if your website is not in the results anymore.  And frisk is for free! You will have to provide your Google Search API key and frisk uses that key to make one search per agent per day. Obtaining such a key is free (for up to 100 searches per day) and pretty easy. Simply follow these steps:</p>
<ol>
<li>Open the <a href="https://code.google.com/apis/console" target="_blank">Google API Console</a> and log in with your Google login</li>
<li>Click «Create project…»</li>
<li>Scroll down to «Custom Search API» and set its status to «On». You will have to agree to Google&#8217;s terms of services twice.</li>
<li>Now click on «API Access» in the left menu. Your API key is displayed in the «Simple API Access» section and will look similar to CFzxByNcqtFbZnOW9na1qntzZxn_IoP_QuAZU13.</li>
</ol>
<p>Try <a href="http://frisk.6nin.es">frisk</a> now for free at <a href="http://frisk.6nin.es">frisk.6nin.es</a>!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://benediktkoeppel.ch/blog/2012/07/frisk-inverted-google-alerts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Samsung Galaxy Nexus with JellyBean</title>
		<link>http://benediktkoeppel.ch/blog/2012/07/samsung-galaxy-nexus-with-jellybean/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=samsung-galaxy-nexus-with-jellybean</link>
		<comments>http://benediktkoeppel.ch/blog/2012/07/samsung-galaxy-nexus-with-jellybean/#comments</comments>
		<pubDate>Wed, 11 Jul 2012 06:12:36 +0000</pubDate>
		<dc:creator>beni</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://benediktkoeppel.ch/?p=1006</guid>
		<description><![CDATA[On Monday, Google has officially released the source code for Android JellyBean 4.1.1 in AOSP, the Android Open Source website. From there, everyone can download the sources and build his own version of Android. I&#8217;ll explain in the following paragraphs how I built Android JellyBean for my Samsung Galaxy Nexus phone. Getting started My Samsung [...]]]></description>
			<content:encoded><![CDATA[<p>On Monday, Google has officially <a href="https://groups.google.com/forum/#!msg/android-building/XBYeD-bhk1o/ry-0jTGimEQJ" target="_blank">released</a> the source code for Android JellyBean 4.1.1 in AOSP, the Android Open Source website. From there, everyone can download the sources and build his own version of Android. I&#8217;ll explain in the following paragraphs how I built Android JellyBean for my Samsung Galaxy Nexus phone.</p>
<a name="getting-started"></a><h1>Getting started</h1>
<p>My Samsung Galaxy Nexus is a GSM/HSPA+ version, officially called Meguro, not rooted and was shipped with <em>yakjuwx</em> OS installed.. You can find out which hardware version and software version you have by installing <a href="https://play.google.com/store/apps/details?id=com.electricsheep.asi" target="_blank">Android System Info</a>. In the System tab, you will find the hardware version. If it is not Meguro, then <em>don&#8217;t follow this guide!</em> If your phone is shipped with the <em>yakju</em> OS installed (not <em>yakjuxw</em>) then you can skip part of the instructions.</p>
<p>A word of caution: following this guide might brick your phone, or you might lose data.</p>
<a name="java-se-6"></a><h2>Java SE 6</h2>
<p>For the Android SDK and to compile Android itself, you need Java SE Development Kit 6. Download it from the <a href="http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u32-oth-JPR" target="_blank">Oracle website</a> (I took jdk-6u32-linux-x64.bin). Install it with the following commands. In the last two commands, you will have to enter the selection number of /usr/lib/jvm/jdk1.6.0_32/bin/java and /usr/lib/jvm/jdk1.6.0_32/bin/javac:</p>
<pre><strong>cd ~/Downloads</strong>
<strong>chmod +x jdk-6u32-linux-x64.bin</strong>
<strong>./jdk-6u32-linux-x64.bin</strong>
<strong>sudo mv ./jdk1.6.0_32 /usr/lib/jvm</strong>
<strong>sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_32/bin/java 1</strong>
<strong>sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_32/bin/javac 1</strong>
<strong>sudo update-alternatives --config java</strong>
<strong>sudo update-alternatives --config javac</strong></pre>
<p>Now verify the java and javac version by running:</p>
<pre><strong>java -version (07.11.2012 07:45:11)</strong>
java version "1.6.0_32"
Java(TM) SE Runtime Environment (build 1.6.0_32-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.7-b02, mixed mode)
<strong>javac -version (07.11.2012 07:45:14)</strong>
javac 1.6.0_32</pre>
<a name="android-sdk"></a><h2>Android SDK</h2>
<p>In order to backup and restore your phone, and also to compile your own version of JellyBean you will need the Android SDK. For Ubuntu 12.04, Christoph from Linux und Ich prepared a very good install script: <a href="http://linuxundich.de/de/software/android-sdk-bequem-unter-debian-ubuntu-oder-linux-mint-per-skript-installieren/">http://linuxundich.de/de/software/android-sdk-bequem-unter-debian-ubuntu-oder-linux-mint-per-skript-installieren/</a> (German). You don&#8217;t need to understand the text, following these instructions is sufficient:</p>
<pre><strong>wget http://linuxundich.de/static/android_sdk_installer.sh chmod +x android_sdk_installer.sh sudo ./android_sdk_installer.sh</strong></pre>
<p>This will install all the needed tools in /usr/local/android-sdk/, setup the environment and bring you to the official Android SDK updater in the end. Make sure that you install the following tools:</p>
<ul>
<li>Android SDK Tools</li>
<li>Android SDK Platform-Tools</li>
<li>everything from Android 4.1 (API 16)</li>
</ul>
<p>Once all tools are installed, launch the Dalvik Debug Monitor Server by typing /usr/local/android-sdk/tools/ddms in a terminal.</p>
<p>This should give you a running Android environment on Ubuntu. Open the settings on your phone, and open the developer settings to enable USB debugging. Then plug your phone into your PC. To verify that the Android toolkit is setup properly and can find your phone, run adb devices and verify that you see your device:</p>
<pre><strong>/usr/local/android-sdk/platform-tools/adb devices</strong>
List of devices attached
018FFE620F013018	device</pre>
<a name="backup"></a><h2>Backup</h2>
<p>First of all, take a backup of your phone. You can do this with adb without rooting your phone. The adb backup tool has many options, you can get a list of supported parameters by running /usr/local/android-sdk/platform-tools/adb help. You want to save all shared data and all installed APKs:</p>
<pre><strong>/usr/local/android-sdk/platform-tools/adb backup -f ~/ics-4.0.4-backup-$(date +%s).bkp -apk -shared -all</strong></pre>
<p>Now unlock your phone and confirm that you want to run the backup. If you have turned the device encryption on, then you&#8217;ll now have to enter your encryption password. This will create a new file called ics-4.0.4-backup-*.bkp in your home directory. My Nexus had about 9 GB free space (of total 13.3GB). It took me two hours to dump the backup, and the backup file had a total size of 5.9GB. (While you wait for the backup to complete, you can already start compiling&#8230;)</p>
<p>In the Dalvik Debug Monitor Server (/usr/local/android-sdk/tools/ddms) you can inspect the log file for the backup. In the lower pane of the DDMS, filter for &#8220;backup&#8221; and set the log level to verbose. Once adb backup has finished, make sure that you don&#8217;t see any backup-related errors. In my first attempt to take the backup, adb aborted after about 45 minutes with a stack trace in the log file. The 2nd attempt worked fine.</p>
<a name="switch-to-yakju"></a><h2>Switch to yakju</h2>
<p>Google officially releases the <em>yakju</em> version of Android for the Samsung Google Nexus phones. However, Samsung has shipped my phone with <em>yakjuwx</em> installed. This basically means that my phone does not receive or accept OTA upgrades from Google directly, but only from Samsung. If your phone is already running <em>yakju</em>, you can fast forward to to Compiling Android JellyBean.</p>
<p>I followed the instructions on <a href="http://www.gaggl.com/2012/05/galaxy-nexus-firmware-upgrade-on-ubuntu-manual/" target="_blank">gaggl.com</a> to switch from <em>yakjuwx</em> to <em>yakju</em>. Download the latest <em>yakju</em> image from <a href="https://developers.google.com/android/nexus/images" target="_blank">Google&#8217;s Factory Images page</a> and unpack the tgz archive:</p>
<pre><strong>cd ~/Downloads</strong>
<strong>tar xfz yakju-imm76i-factory-8001e72f.tgz </strong></pre>
<p>Set your phone into the fastboot mode. You can shut down your Nexus, hold the two volume buttons pressed and then push the power button. Or alternatively, reboot the phone using adb:</p>
<pre><strong>/usr/local/android-sdk/platform-tools/adb reboot bootloader</strong></pre>
<p>Your phone should now show an opened up Android mascot. Then run the flash-all.sh installer:</p>
<pre><strong>cd yakju-imm76i</strong>
<strong>./flash-all.sh </strong></pre>
<p>This installs <em>jakyu</em> on your phone. After the installation, it will boot up and show you the usual Google setup wizard.</p>
<p>&nbsp;</p>
<a name="compiling-android-jellybean"></a><h1>Compiling Android JellyBean</h1>
<p>Android has a very good documentation on how to do that, so I&#8217;m not going to explain everything in full detail here. Follow these guides:</p>
<ul>
<li><a href="http://source.android.com/source/initializing.html">Initializing a Build Environment</a></li>
<li><a href="http://source.android.com/source/downloading.html">Downloading the Source Tree</a></li>
<li><a href="http://source.android.com/source/building.html">Building the System</a></li>
</ul>
<a name="initializing-a-build-environment"></a><h2>Initializing a Build Environment</h2>
<pre><strong>sudo apt-get install git-core gnupg flex bison gperf build-essential\ </strong>
<strong>zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ </strong>
<strong>libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ </strong>
<strong>libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \ </strong>
<strong>python-markdown libxml2-utils xsltproc zlib1g-dev:i386</strong></pre>
<pre><strong>ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so</strong></pre>
<p>Configuring USB Access is not required. Linux und ich&#8217;s  installer already created the required Android rules. Also, ccache is not required but saves you time if you want to compile Android for multiple platforms (or the emulator too).</p>
<a name="downloading-the-source-tree"></a><h2>Downloading the Source Tree</h2>
<pre><strong>mkdir ~/bin</strong>
<strong>PATH=~/bin:$PATHo</strong>
<strong>curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo &gt; ~/bin/repo</strong>
<strong>chmod a+x ~/bin/repo</strong>
<strong>mkdir ~/ANDROID</strong>
<strong>cd ~/ANDROID</strong>
<strong>repo init -u https://android.googlesource.com/platform/manifest</strong>
<strong>repo sync</strong></pre>
<p>The repo sync command will take a long time to download all the required sources into your ~/ANDROID directory. For me it took about 45 minutes.</p>
<p>Now don&#8217;t forget to download the proprietary drivers. From the <a href="https://developers.google.com/android/nexus/drivers#magurojro03c">Google driver page</a>, download the drivers for <em>Maguro</em>, <em>JRO03C (Android 4.1.1)</em>. Move those files into your ~/ANDROID directory and unpack them there:</p>
<pre><strong>mv ~/Downloads/broadcom-maguro-jro03c-38ebfe02.tgz \ ~/Downloads/imgtec-maguro-jro03c-c1162ee1.tgz \ ~/Downloads/invensense-maguro-jro03c-9323759c.tgz \ ~/Downloads/samsung-maguro-jro03c-c6bdd0ed.tgz \ ~/ANDROID/</strong>
<strong>cd ~/ANDROID/</strong></pre>
<pre><strong>tar xfz broadcom-maguro-jro03c-38ebfe02.tgz</strong>
<strong>tar xfz imgtec-maguro-jro03c-c1162ee1.tgz</strong>
<strong>tar xfz invensense-maguro-jro03c-9323759c.tgz</strong>
<strong>tar xfz samsung-maguro-jro03c-c6bdd0ed.tgz</strong></pre>
<pre><strong>sh ./extract-broadcom-maguro.sh</strong>
<strong>sh ./extract-imgtec-maguro.sh</strong>
<strong>sh ./extract-invensense-maguro.sh</strong>
<strong>sh ./extract-samsung-maguro.sh</strong></pre>
<p>Now you have all the proprietary drivers in ~/ANDROID/vendor. When we compile the source code, make will find the drivers there.</p>
<a name="building-the-system"></a><h2>Building the System</h2>
<p>Let&#8217;s build JellyBean!</p>
<pre><strong>cd ~/ANDROID/</strong>
<strong>source build/envsetup.sh </strong></pre>
<p>You have to select the target. We are building for the Galaxy Nexus, so the build name is <em>full_maguro</em>. The build type defines how much debugging options you will have, I chose <em>userdebug</em>.</p>
<pre><strong>lunch full_maguro-userdebug</strong></pre>
<p>Then build the code. On a quad core use -j 16 or -j 32, on a dual core -j 4 or -j 8 for the fastest results.</p>
<pre><strong>make -j 32</strong></pre>
<p>On my Core i5 M520 @ 2.40GHz it took 3.5 hours to compile the complete system. Make sure that make did not end with any errors. If you don&#8217;t see any errors in the last 20 to 30 lines you should be fine.</p>
<p>To flash your custom built Android to your phone, set the Nexus again into fastbood mode (reboot with the two volume buttons hold down, or run adb reboot fastboot). Make sure it is connected correctly to your PC:</p>
<pre><strong>/usr/local/android-sdk/platform-tools/fastboot devices</strong>
018FFE620F013018 device</pre>
<p>Then start flashing</p>
<pre><strong>/usr/local/android-sdk/platform-tools/fastboot flashall -w</strong></pre>
<p>This will again take some time and then reboot your phone. You&#8217;ll notice immediately (on the unlock screen) that JellyBean is installed now.</p>
<a name="restore-the-backup"></a><h1>Restore the backup</h1>
<p>I haven&#8217;t tried that yet (my restore is still running). I read that you can restore the ICS backup on top of your freshly installed JellyBean to get all the settings, apps and data back.</p>
<p>First you have to enable the USB Debugging (in the developer settings) again on your JellyBean phone. Then restore the backup you took at the beginning with adb:</p>
<pre><strong>/usr/local/android-sdk/platform-tools/adb restore ~/ics-4.0.4-backup-1341953373.bkp</strong></pre>
<p>You can follow the log file again in DDMS to see whether everything goes smooth.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://benediktkoeppel.ch/blog/2012/07/samsung-galaxy-nexus-with-jellybean/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
