<?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/"
				  >
<channel>
<title>MortalPowers Linux, Open Source, and Gaming</title>
<link>http://mortalpowers.com/</link>
<description><![CDATA[Articles and News Regarding Linux, Technology, projects, and gaming on MortalPowers.com.]]></description>
<item>
<title>Stop SOPA and PIPA</title>
<link>http://mortalpowers.com/news/stop-sopa-and-pipa</link>
<pubDate>Wed, 18 Jan 2012 00:00:00 -0600</pubDate>
<description><![CDATA[<p>I recently wrote a letter to my representatives in congress.  I feel we need to immediately kill bills such as SOPA and PIPA.  Here is that letter:</p>
<p>Please end your support for this bill. It would harm technological innovation and grant powers to government officials that they are not qualified to use.  This bill harms our society.</p>
<p>There are strong lobbyists on behalf of copyright-reliant organizations such as the MPAA, that have framed the argument to make you believe that they are losing billions of revenue.  Simple supply and demand explains that NOT ALL of the pirates using a piece of software represent lost revenue. When the price of a product goes down to nothing, the number of individuals willing to partake goes up greatly. To believe that 100 acts of piracy equate to 100 cases of lost revenue is lunacy.</p>

<p>This is further compacted by the fact that often, piracy ENHANCES the use and desirability of a product.  Users uploading popular songs to YouTube for free distribution, has now been adopted by the record labels as a key way of increasing sales for example, although this was originally percieived as copyright violation.  Supporters of this bill show that they don't have the technical understanding to participate in the future economy.</p>

<p>If you use this bill to allow companies to resist exploring new markets and opportunities, the American economy is going to be left behind.</p>
]]></description>
</item>
<item>
<title>HexSLayer on Github</title>
<link>http://mortalpowers.com/news/hexslayer-on-github</link>
<pubDate>Wed, 04 Jan 2012 00:00:00 -0600</pubDate>
<description><![CDATA[<p>All of the <a href="https://github.com/PeEllAvaj/HexSLayer">source code for HexSLayer</a> is on Github.  I'm going to try running this game as an open source project, and do all issue tracking using the Github issues list.  If you like the game, or hate the game, or want to learn more about how it was made, <a href="https://github.com/PeEllAvaj">follow me on github</a>, or <a href="http://mortalpowers.com/contact-us.php">leave me a message</a>.</p>]]></description>
</item>
<item>
<title>When Additional Features are Donors-Only</title>
<link>http://mortalpowers.com/news/when-additional-features-are-donors-only</link>
<pubDate>Tue, 03 Jan 2012 00:00:00 -0600</pubDate>
<description><![CDATA[<p>One of the recent trends I have been seeing is the idea of additional functionality for donors-only.   This raises several questions for me, most important of which is <strong>Is this really a donation</strong>?  There are a couple of different aspects and implementations that have me divided on this topic.</p>
<h2>Ad-funded / Donations</h2>
<p>Some of the applications out there, such as Titanium Backup, Rom Manager, and many many more offer a free version of an application with advertising embedded, and a non-free version that removes the advertising.  The important thing to note with most of these applications is that they grant <strong>identical</strong> functionality to both paid and non-paid users. In this case, I see any payments here as an optional donation, because being a non-paying user doesn't lose anything, you only gain advertising, which is trivial to ignore.  The correlation I draw is to things like Google or XDA, where they exist for free with full functionality, but I'm presented with Advertisements to support the further development of the free service.
</p>
<h2>Donations for Functionality</h2>
<p>These types of applications have only started cropping up in the past year. In several cases, it looks like these are an evolution of the previously mentioned model. What went wrong, however, was that the owner was unhappy with the donation conversion ratio.  In these cases, the company started adding features only for the donation version of the software.  Two examples of this include Subsonic, and Mellenaire (a Minecraft Mod). With Subsonic, users cannot stream video unless they have made a donation. In Mellenaire, donators receive the ability to automatically download the right binary in the installer.</p>
<p>With Subsonic, I feel that these restrictions go beyond mere optional donation, and turns the software into a paid product. I have no issue paying for a service or product, but calling it and marketing it as "donation-only" is dishonest, and probably an attempt to avoid regulation, taxation, etc.  With the Mellenaire example, it's definitely on the border. From one perspective, the core application (the Minecraft Mod) functions the same with or without donation. On the other hand, users who don't pay the creator <strong>lose</strong> functionality that would be useful and save time.</p>
<h2>What to do about it?</h2>
<p>If you see an application or service being provided that <strong>removes</strong> functionality for non-paying users, reach out to the creator and start a dialogue, and share your concerns that the payment is no longer a donation, but a purchase.  Ask questions about the money transfer, assuming it's a purchase. This would include asking about the return policy, any warranties or guaranties, and upgrade policy.  Do not let "donation" marketed payments stop you from having the same expectations you would have for a purchase.</p>]]></description>
</item>
<item>
<title>Android Market Publisher Shows Fuzzy Statistics for HexSLayer</title>
<link>http://mortalpowers.com/news/android-market-publisher-shows-fuzzy-statistics-for-hexslayer</link>
<pubDate>Mon, 02 Jan 2012 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Just like Google's popular Analytics program, it appears that the statistics for publishers in the Android Market are fuzzed as well.  After about 8 hours of having my app in the marketplace, and having 5 independently confirmed users install and run the application, including myself, the statistics shown in the store are as follows:</p>
<img src="http://mortalpowers.com/images/articles/androidmarket-hexslayer-dayone.png" alt="3 total installs (users) 4 net installs (devices)"/>
<p>It reports 3 total installs, and 4 net installs. This doesn't make any sense. These statistics mean that 3 people have ever installed my application, but 4 installs remain in production?</p>
<p>Looking depeer into the devices and versions of the users as reported by the control panel also shows some strange data.  First of all, none of my devices shown up in the devices list. This is odd, because I was one of the first to download it.  Second of all, despite having 4 equal chunks in the pie charts, the numeric breakdowns don't show 50% of my traffic.</p>
<p>These types of errors are common for Google, which processes trillions of petabytes per day. The only thing developers can do is hope that the data is correct and complete, with no additional information or assurances from Google.  Google did a great job of Real Time search for Google Analytics. This offering provides up-to-the-second updates regarding visitors to the site.  This leads me to trust their data. Google could do several things to improve the reliability of their data.</p>
<ul>
<li>Show real time data for statistics</li>
<li>State assumptions, such as time updated</li>
<li>State when you are excluding data, such as installs by the owner</li>
</ul>]]></description>
</item>
<item>
<title>HexSLayer for Android Public Release</title>
<link>http://mortalpowers.com/news/hexslayer-for-android-public-release</link>
<pubDate>Sun, 01 Jan 2012 00:00:00 -0600</pubDate>
<description><![CDATA[<img src="http://mortalpowers.com/images/articles/gameicon.png" style="margin: 0 10px 10px 0;float:left;"<p>For the new year, I wanted to actually put one of the projects I have been working on out to the public.  The game is called <strong>HexSLayer</strong>.</p>
<p>You should <a href="https://market.android.com/details?id=com.mortalpowers.android.hexslayer">Download HexSLayer</a> now!</a>
<h2>History</h2>
<p>I released a linux .deb on <a href="http://hexslayer.com/">hexslayer.com</a> about a year ago, but I haven't really tried promoting it or talking to anyone about it, due to the small market share of desktop linux.  Hopefully now with this Android release, I'll actually get a few users, some feedback, and hopefully make a great game.</p>
<p>I built HexSLayer for Android by originally writing the game in Python using Pygame. About a month ago I noticed that they had released a tool called <a href="">Pygame subset for Android</a> that allows you to add a few minor calls in your game, and then you can package and deploy Android apps.  There were a few headaches, such as an issue with the package that made me learn how to build android applications with Ant, but the game is playable on all of the devices I have tested it with.</p>
<h2>Current Release</h2>
<p>There are a few remaining issues, that seem to be limitations of using Pygame subset for Android. Among these are the inability to determine the screen size in-game. Additionally, it seems like the splash screen doesn't work on 100% of the devices I have tested it with.  Overall, I'm not sure how happy I am cross-compiling from Python into Android using Pygame and the NDK, but it's pretty cool to be able to do almost no work and deploy on a great big new platform.</p>
<p>I didn't have to do much work to get it running, but I spent a lot of time focusing on usability on the new platform.  I resized and moved everything on the screen so that it is relative to the screen size. I increased the size of the icons while you are dragging them, as a finger blocks the view of a small icon. The game works well on phones, but it works really great on tablets.</p>]]></description>
</item>
<item>
<title>Git Error &quot;couldn't find remote ref master&quot;</title>
<link>http://mortalpowers.com/news/git-error-couldnt-find-remote-ref-master</link>
<pubDate>Wed, 02 Nov 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>When working with Git, you may run into the issue/error message <span class="code">couldn't find remote ref master</span> when attempting to perform a pull.  This message can be a little frustrating, because when you look at the remote repository, everything most likely can be seen just fine.</p>
<p>The answer to this problem is that this error means your system couldn't find the git repo details within a remote git repository.  This is distinct from the error message when the repository cannot be found at all, <span class="code">does not appear to be a git repository</span>.This is most often caused by inconsistent permissions within the .git folder.  Check that you have permission to all of the files in your .git folder in the remote repo, using whatever combination of <span class="code">chmod</span> and <span class="code">chown</span> to ensure you have full permissions from the repository attempting to pull into, on the repository you are attempting to pull from.</p>]]></description>
</item>
<item>
<title>Increase the Security of Your Google Account with Two Factor Authentication</title>
<link>http://mortalpowers.com/news/increase-the-security-of-your-google-account-with-two-factor-authentication</link>
<pubDate>Tue, 01 Nov 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>With hundreds of millions of Google accounts in existence, and reliance upon Google accounts for your personal life, your business life, your cell phone, your calendar, your documents, etc, you should absolutely consider the security of your Google Account. The easiest way to do this is a strong password. Unfortunately, strong passwords can still be broken by dedicated or interested individuals or groups. One thing you can do to greatly increase the security of your Google account is to add <strong>Two-factor authentication</strong>. With 2-factor authentication, it is extremely difficult for anonymous remote entities to break into your account.</p>
<h2>What is Two factor authentication?</h2>
Two Factor authentication is the security principle that in order to grant access, the system must validate something you know (like your password), and additionally, something you have. This prevents individuals or groups from accessing your content, even if they are able to brute force or somehow determine your password.</p>
<p>Historically, Two factor authentication relied on a small piece of hardware they would ship to you. This was great from a security perspective, but was not convenient and was not mobile.  Google (as well as other such as Blizzard) have begun to allow 2 factor authentication using Smartphones.  This enables you to combine something you know (your password), with something you almost always have with you (your smartphone) to achieve better account security.</p>
<style>
img.instructionstep { display:block;}
</style>
<h2>Setting up Two Factor Authentication on your Google Account</h2>
<p>There are about 8 easy steps you can follow to quickly get 2 Factor Authentication working with any smart phone.</p>
<ol><li>Log into Gmail and Click on the drop down next to your email address in the upper right hand corner.<img class="instructionstep" src="http://mortalpowers.com/images/articles/article-2factor01.png" alt="2 Factor Instruction Information"/></li>
<li>Click on "Account Settings".<img class="instructionstep" src="http://mortalpowers.com/images/articles/article-2factor02.png" alt="2 Factor Instruction Information"/></li>
<li>Under the Security section, select "Using 2-step verification".<img class="instructionstep" src="http://mortalpowers.com/images/articles/article-2factor03.png" alt="2 Factor Instruction Information"/></li>
<li>Click on "Start setup" from the right side of the screen.<img class="instructionstep" src="http://mortalpowers.com/images/articles/article-2factor04.png" alt="2 Factor Instruction Information"/></li>
<li>Create a backup method by entering a phone number to text or call.<img class="instructionstep" src="http://mortalpowers.com/images/articles/article-2factor05.png" alt="2 Factor Instruction Information"/></li>
<li>Click on "Turn on 2 Step Verification". <img class="instructionstep" src="http://mortalpowers.com/images/articles/article-2factor07.png" alt="2 Factor Instruction Information"/></li>
<li>Decide what smartphone you wish to use to generate codes, and select it from the list at the top.  Follow the instructions for your phone.</li>
<li>Create application-specific passwords for your mobile devices and special applications, like Google Music.</li>
</ol>
<h2>What to expect</h2>
<p>Overall, you should have confidence in the security of your account, but at the same time you should expect the nuisance of needing to run an application on your phone every 30 days, and every time you want to access your account from a new computer.  Additionally, some rare applications (such as Google Music for Linux), are not written well, and won't save passwords.  This means that any time you want to run that application, you need to log in and generate a new Application-specific password for it.</p>
<p>Google will also create some backup codes for you, I have them stored securely on one of my servers that I can access via SSH. This is in case you lose your phone at any point, you don't lose complete access to your account.</p>
<p>Make sure you delete unused Application Specific passwords, and enjoy the additional peace of mind and security that 2 Factor Authentication provides!</p>]]></description>
</item>
<item>
<title>ClockworkMod Recovery on Samsung Galaxy S II - T-Mobile SGS-T989</title>
<link>http://mortalpowers.com/news/clockworkmod-recovery-on-samsung-galaxy-s-ii-t-mobile-sgs-t989</link>
<pubDate>Sun, 30 Oct 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>Last week I purchased a new Samsung Galaxy S II. After a week of usage of the stock ROM and root-less capabilities, I was finally ready to root my device.  The process for the Galaxy S II is pretty straightforward still.  Unfortunately this install requires a Windows machine. At the same time, it has been the most error-free install I've seen to date.  The process involves flashing the new recovery using Odin, then using ClockworkMod to install SU.</p>
<p>Most of the instructions from <a href="http://forum.xda-developers.com/showthread.php?t=1311194">http://forum.xda-developers.com/showthread.php?t=1311194</a> work great. All of the files that you will need are there. The only additional step that I had to take was after rebooting my phone with the USB cord plugged in, the Phone asked me if I was willing to install custom software. I had to press volume up to agree to install custom software. After that, Odin proceeded perfectly.  I was then able to boot into ClockworkMod, take a Nandroid backup (After I installed an required SD card), and install the SU zip file.</p>]]></description>
</item>
<item>
<title>How to Run Android 4.0 Ice Cream Sandwich in an Emulator</title>
<link>http://mortalpowers.com/news/how-to-run-android-40-ice-cream-sandwich-in-an-emulator</link>
<pubDate>Tue, 18 Oct 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>The primary audience for this article is those who already have a working Android development environment, and are looking to get the latest and greatest from Google running in the emulator. Unfortunately, for me, the default emulator settings that ship with Ice Cream Sandwich (ICS) do not enable me to actually run an emulated instance of the application.</p>
<h2>Fix the Ice Cream Sandwich Settings</h2>
<p>To make everything work, I updated eclipse to the latest AVD and SDK versions using both the Eclipse updater, and the new SDK manager. Then I downloaded API Version 14 of the SDK, platform, etc. I opened the new AVD manager and created a new AVD targeting ICS.</p>
<p>The default properties of <em>Max VM application heap size</em> of <strong>24</strong> and <em>Device ram size</em> of <strong>512</strong> resulted in build errors for me.  I increased these properties and the machine booted like a charm (albeit extremely slowly).</p>
<p>I increased the <em>Max VM application heap size</em> to <strong>64</strong> and the <em>Device ram size</em> to <strong>1500</strong>.  You may be able to get away with less, I haven't tried it. Make sure you have plenty of unused RAM before you attempt to increase the RAM available to the AVD.</p>
<p>That was it for me to get it working. Have fun and build some great applications!</p>]]></description>
</item>
<item>
<title>Human Element: Where Did CM7.1 Nightlies Go?</title>
<link>http://mortalpowers.com/news/human-element-where-did-cm71-nightlies-go</link>
<pubDate>Sat, 10 Sep 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>Technology is a wonderful thing. Between search engines, RSS feeds, internet aggregators like <a href="http://reddit.com">reddit.com</a>, and a wide variety of knowledge sharing systems like <a href="http://vark.com">vark.com</a>, we have a lot of information being dumped into our brains on both a regular basis, and instantaneously on-demand.   There are limitations to this however. The first is a lack of human knowledge and connectivity.  When we look at technology or society as a whole, there is too much information being created, cross-referenced, etc for any system to effectively manage and process this.  Humans aren't great at it either, but given a specific context, they are much more able to process a question or inquiry and attempt a response.</p>
<p>A specific question has come up for me in the past several days. Where did the CyanogenMod 7.1 Vibrant Nightlies go?  Historically there was a single nightly build released every day. Logging into the build system or using ROM Manager would show you the builds available. As of 9/1, these builds stopped becoming available. I wanted to know why, and find out when they would resume. I spent half an hour searching for information on it in Google, in the comments in ROM Manager, as well as in the official CyanogenMod Forums. I was not able to find this information. If I had a human connection to those people that were working on the project, they could have spent 15 seconds giving me a brief description of what happened. Unfortunately, as of yet, we have not found a way to automate this type of information capture, nor have we created an inquiry engine capable of generating a response.</p>
<img src="http://mortalpowers.com/images/articles/article-ungoogleable.png" style="float:right;margin:10px;" alt="It's hard to describe a dubstep song well enough to identify its title"/>
<h2>The Ungoogleable</h2>
<p>There has been a distinct shift in the past 10 years from individuals needing to retain large amount of information, towards a focus on individuals having the talent to locate, process, and catalog even larger amounts of information. Most of the time when you want to know something, it's instantly at your fingertips.  There are still things that we want to know that we can't search for. If you remember sparse details about a film or book, you can eventually find the media, but it can take several hours. Shazaam is great for searching for music as it is playing, but once the playing has stopped, if you don't have lyrics, it can be nearly impossible to work backwards from a sound to information about a song.  I call these types of inquiries "the ungoogleable" because despite Google's massive capabilities, it has not yet found a way to take a smattering of uncollected thoughts and turn them into relevant useful information.</p>
<p>This image comes from Yahoo answers where someone asks (perhaps facetiously) for help identifying a Dubstep song. Dubstep songs are characterized by their creative use of deep base and electronic sounds, rather than lyrics or melodies.  Asking for someone to identify a song by a series of "wubs" interpreted by a human is meaningless to a computer. It's hard or completely impossible to describe a dubstep song well enough to identify its title.</p>
]]></description>
</item>
<item>
<title>5 Things I Learned Today</title>
<link>http://mortalpowers.com/news/5-things-i-learned-today</link>
<pubDate>Fri, 09 Sep 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>In honor of <a href="http://awoiaf.westeros.org/index.php/Arya_Stark">Arya Stark</a>'s effort to learn three new things every day, here is a list of 5 things I learned today.</p>
<p><strong>XBMC</strong> - The Historic default scraper for the Music Video content type was disabled. You now need to install the Yahoo Scraper for XBMC to support Music Videos. This was done because of a drop of support in the old API from MTV.</p>
<p><strong>ls: No such file or directory.</strong> - This error when running LS indicates filesystem corruption. This means that the filesystem must have fsck run on it when not mounted. Unfortunately for me, Android does not come with a version of fsck, so to repair this issue on my Android's internal partition, I would have to wipe the device.  The symptom that lead me to find this problem was that the filesystem is reporting that I am using 170MB / 171MB of space on the <span class="code">/data/data</span> partition, despite only having 130MB of files on the partition.</p>
<p><strong>yaffs2 vs ext4</strong> - In stock Android builds, Gingerbread marked a shift from yaffs2 to ext4. The reasons behind this move aren't entirely clear, except that ext4 has more features and is a newer technology. CyanogenMod 7 does not ship with ext4 for most of the partitions because of poor support for flash devices being represented as block devices in Linux.</p>
<p><strong>Change SCM Repository in Redmine</strong> - Once you have set the SCM repository in Redmine, such as a Git repository connected to Redmine, the field becomes disabled, making it very difficult to change the configuration or connect a project to a different repository. The secret I learned here is that to change the connection, one must delete the Repository in Redmine. This does not destroy the repository itself, only the connection and the caching performed by Redmine.</p>
<p><strong>HighCharts (<a href="http://www.highcharts.com/">http://www.highcharts.com/</a>) doesn't work for small charts</strong> - When using the HighCharts javascript library for creating interactive charts, if you attempt to make a chart very small, such as 200px x 200px, the chart will render fine, but the tooltips will be clipped at the edge of the container, rather than displaying the entire tooltip in the available space outside of the container element.</p>]]></description>
</item>
<item>
<title>Minecraft 1.8 Pre Release Leak Mirror and Thoughts</title>
<link>http://mortalpowers.com/news/minecraft-18-pre-release-leak-mirror-and-thoughts</link>
<pubDate>Fri, 09 Sep 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>Minecraft 1.8 has been intentionally leaked by Mojang, and hosted on their site. The link seems to have failed a couple of the times I attempted to download it, so I am hosting a mirror here. <a href="http://mortalpowers.com/stuph/minecraft-1.8pre.jar">Download Minecraft 1.8 Pre Release Leak</a> from me as a mirror.  The official link is: <a href="http://assets.minecraft.net/1_8-pre/minecraft.jar">http://assets.minecraft.net/1_8-pre/minecraft.jar</a></p>
<ol><li>SHA1 of file: 6789c69ede3aedf83b800c76bea56855d38a0afc</li>
<li>MD5 of file: 7ce3238b148bb67a3b84cf59b7516f55</li>
</ol>
<h2>What's new in Mincraft 1.8?</h2>
<ul>
<li><strong>BIG NEWS: F6 and F7 speed up and slow down the world time (respectively)</strong></li>
<li>New redesigned startup screen featuring scenic vistas.</li>
<li>Field of Vision Controls that allow you to increase the horizontal field of vision up to 180 degrees.</li>
<li>New Map creation options</li>
<li>Experience points for killing mobs</li>
<!--<li></li>-->
</ul>
<h2>What causes crashes in Mincraft 1.8 pre-release?</h2>
<p>Below I describe the symptoms of crashes that I experienced. These may not necessarily be the causes.</p>
<ul>
<li>Making charcoal in a furnace.</li>
</ul>
<h2>Exact Error Dumps</h2>
<div class="code">java.lang.NullPointerException
        at zz.b_(SourceFile:111)
        at ru.l(SourceFile:1193)
        at net.minecraft.client.Minecraft.k(SourceFile:1401)
        at net.minecraft.client.Minecraft.run(SourceFile:693)
        at java.lang.Thread.run(Thread.java:679)
Stopping!</div>]]></description>
</item>
<item>
<title>Top 5 Nightlies Safe to Run Daily</title>
<link>http://mortalpowers.com/news/top-5-nightlies-safe-to-run-daily</link>
<pubDate>Thu, 08 Sep 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>Some of us live on the edge. We sacrifice stability to be on the bleeding edge of technology, experiencing new features immediately as they are added. Here are my top 5 pieces of software that are <em>generally</em> safe to update on a daily basis.</p>
<h2>Chromium</h2>
<style>
.nightlies td { text-align:center;padding: 5px 10px}
.nightlies tr:nth-child(even) { background-color:#EAEAFF;}
.nightlies td:first-child { font-weight:bold;}
</style>
<table class="nightlies"><thead><tr>
<th>Application</th><th>Frequency of Breaking</th><th>Difficulty of Downgrading</th><th>Notes</th></tr>
<tr><td>Chromium Browser</td></td><td>Once Per Quarter</td><td>Medium </td><td>Upgrading requires only a standard package update, ie <span class="code">sudo apt-get update && sudo apt-get upgrade</span>. Downgrading involves searching the internet for an earlier version, or if you are lucky, finding a copy in your apt cache.</td></tr>
<tr><td>CyanogenMod 7.1</td><td>Weekly</td><td>High</td><td>It seems that nightlies for CyanogenMod don't undergo quality assurance, as occasionally very basic things like phone, internet, or battery usage will become completely broken.</td></tr>
<tr><td>Wine*</td><td>Never</td><td>High</td><td>Although not technically a nightly, the unstable releases of Wine are often worth a lack of stability for additional compatibility. Commonly each release of the Wine project seems to take 3 steps forward, and 1 step back, breaking some functionality with each release.</td></tr>
<tr><td>Ubuntu<td>Each Release</td><td>Extremely High</td><td>Ubuntu Unstable releases tend to be one of the best ways to preview and try out upcoming functionality. I recommend this only for the strong-willed, as attempting to run development versions of major revision changes has around a 30% chance of completely breaking your system, forcing a reinstall.</td></tr>
<tr><td>FFmpeg</td><td>Never</td><td>Medium</td><td>FFmpeg is relatively easy to compile and install once you have the source code checked out from their repository. This project is frequently updating with additional codecs as well as improvements to processing speed and compression quality. Downgrading requires checking out an earlier version from source and recompiling.</td></tr>

</table>]]></description>
</item>
<item>
<title>60 Days With A Galaxy Tab</title>
<link>http://mortalpowers.com/news/60-days-with-a-galaxy-tab</link>
<pubDate>Wed, 07 Sep 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>For the past 60 days I have been experimenting with using a Galaxy Tab as my tablet computer. I bring it with me to work, I take it home with me at night.  I carry it in a padfolio to meetings.  This review is specific to the Galaxy Tab, but any Android tablet running Honeycomb should enable the same workflow and applications.</p>
<h2>Galaxy Tab Applications</h2>
<p>I have installed numerous applications in a continuing quest to find the best-of-breed applications that are fun, engaging, productive, etc.  After two months, the following are the applications that I find myself using all of the time.</p>
<ol>
<li><strong>Thumbs</strong> - Thumbs is the best tablet keyboard I have found. It allows you to hold the device by the corners and use your thumbs to type.  On phones I prefer Swiftkey, but for some reason the tablet-optimized version doesn't live up to the same level of accuracy.</li>
<li><strong>Gmail</strong> - Most of the time I use the tablet, I am reading emails, labeling and archiving email, replying, and occasionally composing emails.</li>
<li><strong>Calendar</strong> - The calendar app on the Galaxy Tab is quite good. It's easy to view multiple calendars, as well as to create calendar tasks.</li>
<li><strong>Camera</strong> - It feels a little silly at first to take pictures with the device, but once you get past the stigma, it definitely meets the needs of a basic phone camera. At only 3MP on the rear camera, the picture quality isn't great. </li>
<li><strong>Gallery</strong> - The real value of the device is in being able to review the photos you take, and the photos from your Google Photos album.</li>
<li><strong>Google+</strong> - Google Plus is not very well tablet optimized, but it grants access to the standard Google+ experience. More importantly, this application allows you to automatically synchronize your photos with your device.</li>
<li><strong>Evernote</strong> - Evernote is a great application for syncing text, recording, and audio. It's tablet version is extremely well optimized. The presentation of the past notes is excellent, and all of the functionality of Evernote is exposed.</li>
<li><strong>YouTube</strong> - The YouTube application on the tablet is arguably better than the web interface. The application uses RenderScript and a Carousel view to present video thumbnails.  The YouTube application makes it easy to flip through videos, and watch or fullscreen videos.</li>
<li><strong>Games</strong> - I won't list all of the games I have played, but several fun games work extremely well on the tablet.
<ul>
<li>Nano Panda</li><li>Plants vs. Zombies</li><li>Dungeon Defenders</li><li>Angry Birds</li><li>Tank Hero</li><li>Gun Bros</li><li>Blast Monkey</li></ul>
</li>
</ol>
<h2>Galaxy Tab Workflow</h2>
<p>There are several important places where the tablet has fully entered my workflow.  When I attend a meeting, I launch Evernote, begin taking notes, and press the record button at the bottom. This allows me to have a full audio recording of meetings, in addition to my manually typed notes.</p>
<p>The second place that the tab makes a lot of sense if for photo sharing. I take a lot of photos that are automatically synced to the cloud via Google Photos (formally Picasa).  Sharing these photos with friends is very natural via the gallery application compared to huddling around a desktop.</p>
<p>Often when I have spare time, or am away from my desk, I'm able to sit on the tablet and read and respond to emails. It feels very natural to do so in spare moments.</p>
<p>The Galaxy Tab works better than the three other tablets I have tried (Iconia, Xoom, and Transformer) because of its size, solid construction. Despite it's lack of dedicated HDMI port or dedicated charging port, it's a very good tablet.  It hasn't found a permanent place in my life yet, and there is a lot of overlap with what I want to do with Laptops and Desktops. Despite this, I have definitely found use for it.</p>]]></description>
</item>
<item>
<title>Chromium Experiments with Fresh New Tab Layout</title>
<link>http://mortalpowers.com/news/chromium-experiments-with-fresh-new-tab-layout</link>
<pubDate>Thu, 18 Aug 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>A drastic change to the New Tab layout has landed in the chromium nightlies.  The fresh New Tab layout has moved away from the vertically stacked Most Visited, Apps, and Bookmarks. The layout now uses a new bottom bar to allow easy navigation to these elements. It also allows you to click on right and left arrows to move between them, similar to a smartphone or tablet layout.</p>
<a href="http://mortalpowers.com/images/articles/fresh-new-tab-window.png" target="_blank"><img src="http://mortalpowers.com/images/articles/fresh-new-tab-thumb.png" style="max-width:100%;"/></a>]]></description>
</item>
<item>
<title>Optimize PNG images with OptiPNG</title>
<link>http://mortalpowers.com/news/optimize-png-images-with-optipng</link>
<pubDate>Wed, 17 Aug 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>PNG is a great free lossless, compressed image format. One thing that may surprise you is that PNGs can actually be further compressed, making the filesize smaller than a normal image application will typically achieve.  The good news is there there is a tool called <span class="code">optipng</span> that makes it easy to non-destructively improve the layout of PNG files.</p>
<p>On Ubuntu, install <a href="http://optipng.sourceforge.net/">OptiPNG</a> with <span class="code">sudo apt-get install optipng</span>.  Once it is installed, you can run it its default mode by typing <span class="code">optipng file.png</span>. If you feel like giving the application lots of time to achieve aggressive compression, you can use the <span class="code">-o</span> flag to indicate additional compression. Compared between the default and -o7, I have found only minimal additional compression that has almost never been worth the additional CPU time.</p>
<p>Below are the results of one such compression attempt:</p>
<div class="code">optipng -o7 fresh-new-tab-window.png 
OptiPNG 0.6.4: Advanced PNG optimizer.
Copyright (C) 2001-2010 Cosmin Truta.

** Processing: fresh-new-tab-window.png
1358x640 pixels, 4x8 bits/pixel, RGB+alpha
Input IDAT size = 436116 bytes
Input file size = 436853 bytes

Trying:
  zc = 9  zm = 8  zs = 1  f = 5         IDAT size = 436116
                               
Output IDAT size = 436116 bytes (no change)
Output file size = 436217 bytes (636 bytes = 0.15% decrease)</div>]]></description>
</item>
<item>
<title>Master the Art of SSH Tunneling and Forwarding</title>
<link>http://mortalpowers.com/news/master-the-art-of-ssh-tunneling-and-forwarding</link>
<pubDate>Tue, 16 Aug 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>SSH tunneling is the practice of using shell account on various computers and servers to acquire and redirect networking between multiple machines.  Becoming more adept at SSH tunneling will make your digital world more portable, and enable you to access targetted machines or content, regardless of what network you or the target are on.</p>
<p>SSH Tunneling is great because it allows fully encrypted communication between two servers, even when the services at either endpoint may not use encryption.</p>
<h2>Common Use Cases for SSH Tunneling</h2>
<ul>
<li>Access services only listening on localhost</li>
<li>Access router configuration remotely</li>
<li>Proxy into protected networks</li>
</ul>
<h2>Basic SSH Tunneling Concepts</h2>
<p>The first and most important concept to understand around SSH tunneling is that in every communication there is a client and a server.  Understanding which machine is which is necessary to understand any of the information below.  In general terms the <em>client</em> is the machine that will be initiating the connection. The client machine will not require any incoming permissions.  A server in a single ssh connection is the machine running sshd and must be accessible via SSH.
<h3>Local Forwarding</h3>
<p>Local forwarding is the act of taking a remote port and mapping it to a local port on the client machine. This is the most common type of connection and enables proxy-like functionality.  Local Forwarding is accomplished using the parameter -L (Hyphen, then Capital L).  Every local forwarding command is going to be of the format <span class="code">-Lclientport:destination:destinationport</span>. In the formatting of the command, client port is the port on the machine that will begin listening on localhost.  Destination and destinationport are the IP/hostname and Port <strong>from the perspective of the server</strong>. After successfully opening an SSH connection with local forwarding, any attempt to open <em>clientport</em> on localhost will result in the remote server opening a connection to <em>destionation</em>:<em>destinationport</em>.</p>
<p><strong>Note:</strong> It is important to note that if you wish to open a lower port number (for example 80, 631, 25, etc) on the client, you must have root permissions.  Typically this is not a problem, because there is no real need to have the client open on a lower port number.</p>
<p><strong>Note:</strong> It is also important to note that this connection will be listening on <em>localhost:clientport</em>. This means that you will not be able to access the SSH forwarding from a second degree client, without additional SSH tunneling.  An example of this would be where I have 3 machines. Machines A1 and A2 are on network A, and machine B1 is on network B. In this example, if I use local forwarding to connect from A2 to B1, A1 will not be able to access any tunneling performed by A2.</p>
<h2>Remote Forwarding</h2>
<p>Remote forwarding is the more difficult to understand, as it opening a port on the server, and forwarding those requests to the local machine. This is generally less useful, but can still accomplish some interesting things. The format for remote forwarding is as follows <span class="code">-Rserverport:localdestination:localdestinationport</p>. In this case, you must have permissions to open serverport on the server, or tunneling will not succeed.  Any requests made to localhost on the serverport in the server environment will be forwarded to localdestination:localdestinationport from the perspective of the client.</p>
<p>There are relatively few real world applications of this, but one that I have run into more than once is attempting to run an SSH server on a machine that has no incoming traffic privileges. In this case I use the protected machine as an SSH client to connect to some less secure machine. In the SSH connection, I forward a remote port (2200 is easy to remember) to the local SSH server  (localhost:22) with the following command: <span class="code">-R2200:localhost:22</span>. In this confusing example, it swaps the client server roles allows you to SSH into a protected machine, by establishing an initial connection having the protected machine as a SSH client.</p> 
<h2>SSH Tunneling Examples</h2>
<p>For these examples, assume that there are two private networks (A:<strong>192.168.0.*</strong> and B:<strong>10.0.0.*</strong>), and one internet site (C:<strong>180.0.0.1</strong>). Also assume that there is only one publicly accessible IP from each private network (192.168.0.10 and 10.0.0.10).  Finally, both of the private networks have a router/modem configured at *.*.0.1.</p>
<h3>Access private network A's router</h3>
<p><span class="code">ssh 192.168.0.10 -L8080:192.168.0.1</span>  Once this connection is established, you can pull up the browser and visit <span class="code">http://localhost:8080</span> and you will be redirected to the private network's modem configuration. This is a great way to remotely manage port forwarding and NAT without opening your router to the internet.</p>
<h3>Access CUPS on a computer not yet configured for sharing</h3>
<p><span class="code">ssh 192.168.0.2 -L6310:localhost:631</span> - Part of the default CUPS printer configuration is that it only listens on localhost, and is not accessible from other machines. This SSH connection will enable you to open your browser to <span class="code">http://localhost:6310/</span> and access the private CUPS configuration.</p>
<h3>Forwarding X sessions</h3>
<p><span class="code">ssh -XYC 192.168.0.10</span> - Although not technically using tunnelling, the XYC parameters will establish the $DISPLAY variable on the server, and allow you to run X applications on the server. These X applications will then be shown on the client environment. This typically runs very slowly, but uses the server's CPU and Memory and Disk and Network, rather than the client's. I often use this for remotely running partition management, such as <span class="code">gparted</span>.</p>

]]></description>
</item>
<item>
<title>Logitech Revue will Break your Google TV</title>
<link>http://mortalpowers.com/news/logitech-revue-will-break-your-google-tv</link>
<pubDate>Mon, 08 Aug 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>Recently a preview release of Google TV for the Logitech Revue was released.  This preview has some exciting components. This release is based on Android 3.1 and includes the Android Market. This preview leak isn't a hacked version, and doesn't require root or any customization to work. Simply download and unzip the package, place it on the root of a flash drive and restart the Google TV, it will automatically update your device.</p>
<p>Overall, the only improvement provided by the update is that it will allow you to preview the upcoming release. There are many downsides and I recommend you <strong>Don't download and install it</strong> as there is currently no stable release, and no way to downgrade your device.</p>
<p>You will be able to browse the internet, and see the new new settings. Beyond that, <strong>NOTHING works</strong>.</p>]]></description>
</item>
<item>
<title>Minecraft Map Sharing</title>
<link>http://mortalpowers.com/news/minecraft-map-sharing</link>
<pubDate>Mon, 01 Aug 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>One of the key pieces that Minecraft is currently missing is Map Sharing. I hope to build this tool over the next few weeks.  The goal is for users to be able to upload a .zip file containing a map (or just an interesting seed), and allow others to upload, vote/rate, and comment on maps provided by other users.</p>
<h2>Minecraft Map Sharing Feature Goals</h2>
<ul>
<li>Simple Registration, email, username, password</li>
<li>Map Browsing - Browse maps by date, tag, rating, downloads.</li>
<li>Map Upload - Upload a seed or map, attach screenshots of your map or seed.</li>
<li>Comment on Map</li>
<li>Rate Map</li>
<li>Social Integration - Plus+ or share maps</li>
<li>Connect Maps to Minecraft Overviewer versions?</li>
</ul>]]></description>
</item>
<item>
<title>Multiple APK Management in Android Developer Console</title>
<link>http://mortalpowers.com/news/multiple-apk-management-in-android-developer-console</link>
<pubDate>Sun, 31 Jul 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<img src="https://market.android.com/publish/gwt/images/logo-market.png" style="margin: 0 10px 10px 0;float:left;"/>
<p>In May at GoogleIO, Google announced that it would begin supporting multiple .APK files, and finally this feature has come to fruition.  To get started using this new feature, visit the <a href="">Android Developer Console</a> and click on your application.  At the top of the application information you will notice that the upload .apk feature is now gone.  It has been moved to a new tab at the top of the window, "APK files".</p>
<h2>Using the Multiple APK Tool</h2>
<p>Each of the .apk files that you upload to the Android Developer Console are examined. The system looks at the MinSDK version and the Target SDK version. The new features allow publishers to maintain multiple .apk files that target different screen versions, different version numbers, and OpenGL support.  This is simultaneously a boon, and a potential disaster.  It should decrease the difficulty of maintaining code that targets and supports different feature sets, but at the same time it supports the further fragmentation and differentiation of different Android devices.  In an ideal world, the platform would be standardized in such a way that multiple versions wouldn't be necessary.  In the practical world, Google continues to update and improve the API and platform. They break backward compatibility, and come up with new and better ways of performing software development and achieve better user interactions. This means that multiple .apk files will end up supporting the practical fragmentation of the platform.</p>
<p>One of the best ways to leverage these new abilities will be to fork applications at major points in platform revisioning. For example, it will soon make sense to have 3 different APKs, depending on how much historic support is desired. The first group would be platform versions 1.5 - 2.1. The second group would be 2.2-3.2. The final group would be the new Ice Cream Sandwich 4.0 platform version.</p>]]></description>
</item>
<item>
<title>Installing the Android SDK and Add the Android Tools To Your Path</title>
<link>http://mortalpowers.com/news/installing-the-android-sdk-and-add-the-android-tools-to-your-path</link>
<pubDate>Sat, 30 Jul 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>With every Android Software Development Kit installation, there are several key steps. The following steps will describe my recommendations regarding installation of Android SDK under Linux, and they assume that you will be integrating Android into Eclipse.  The last, and most unique step is to add the Android tools to your PATH. This will enable you to run <span class="code">adb</span> and other android tools more easily from the command line. It also makes it easier to use those tools with privilege escalation, such as <span class="code">sudo</span>.</p>
<h2>Recommended Android SDK Steps</h2>
<ol>
<li>Download the SDK from <a href="http://developer.android.com/sdk/index.html">developer.android.com</a>.  Unarchive the tar.gz into /opt/ as <span class="code">/opt/android-sdk/</span>.</li>
<li>Install the Eclipse Tool (ADT) - Under Help in Eclipse, click on Install New Software. Add the following as a new site, and give it whatever name you wish: <span class="code">https://dl-ssl.google.com/android/eclipse/</span>.</li>
<li>Configure Eclipse with SDK - Under Window->Preferences->Android, enter the SDK location, or <span class="code">/opt/android-sdk/</span> and hit OK.</li>
<li><span style="font-weight:bold;">Add Android Tools to your PATH</span> - Under Ubuntu, one of the best ways to add something to your PATH is to edit your <span class="code">~/.bash_profile</span> file.  The line in my profile looks as follows:</li>
</ol>
 <div class="code">PATH="/opt/android-sdk/platform-tools:${PATH}"
export PATH</div>
<p>This file is applied any time a terminal is loaded. This will take the users existing PATH established by other system settings, and add the Android platform tools to it, and then export the variable to apply the change.</p>
<h2>After the Android SDK is in your PATH</h2>
<p>Because of the Linux permission system, adb often needs to be killed and restarted using root permissions so that your computer can access the USB device. I often pop open a terminal and kill and start the ADB service.</p>
<div class="code">sudo adb kill-server
sudo adb start-server
</div>]]></description>
</item>
<item>
<title>Software Review: Subsonic Media Server</title>
<link>http://mortalpowers.com/news/software-review-subsonic-media-server</link>
<pubDate>Fri, 29 Jul 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<img src="http://www.subsonic.org/pages/inc/img/subsonic.png" style="float:left;width:200px;margin:0 10px 10px 0"/>
<p>A lot of conversations are happening right now around the cloud and media streaming. Apple is launching iCloud, and Google runs YouTube, and Google recently added video purchases to the Android Marketplace. The upside for these types of services is that they are hosted by a 3rd party, and that the content library is going to be extensively provided by someone with automatic access to the latest content.</p>
<p>If you are unwilling to rely on 3rd parties that will charge you for, or monitor, your streaming, Subsonic is a great solution. Subsonic is an open source project that is wrapped in a paid packag by the creator.  You can download the java-based server and install it on your Linux, Windows, or Mac based system by visiting <a href="http://www.subsonic.org/pages/download.jsp">The Download Subsonic Page</a>.</p>
<h2>Features of Subsonic</h2>
<ul>
<li>Native Android and iOS clients (Android relies on Flash in the browser)</li>
<li>Subsonic automatically converts your content to an</li>
<li>Content Search - The system will index and allow search for each of the folders you have selected to share.</li>
<li>Full User System - You can share your media files with others with by giving them a username and password.  The application has specific controls for things such as max bitrate, ability to download vs. stream, and monitoring for each users' interactions.</li>
<li>Support for SSL - You can ensure that all streaming is performed over SSL, and that unintended users cannot see what files and data you are streaming.</li>
<li>Podcast Managements - Subsonic can be connected to feeds so that it automatically downloads and makes available audio or video podcasts.</li>
</ul>
<h2>Unique Benefits of Subsonic</h2>
<p>Subsonic's reliance on live use of ffmpeg allows it to work with your existing media collection, regardless of what format it is currently in.  This is unique compared to other applications. </p>
<h2>Problems and Concerns of Subsonic</h2>
<p>The biggest problem with Subsonic is the fact that you need to run a server. Additionally, this server needs to be relatively beefy to adequately support the media search and indexing, as well as the live transcoding that enables you to stream to any device.  Second to that is that you will only have access to media that you have acquired, whether legally or illegally.  This problem is shared with services like Google Music Beta, but still lacks functionality compared to web services such as <a href="http://grooveshark.com">Grooveshark</a>.</p>]]></description>
</item>
<item>
<title>Advancing Technology Makes Rooting Android Much Easier</title>
<link>http://mortalpowers.com/news/advancing-technology-makes-rooting-android-much-easier</link>
<pubDate>Sat, 18 Jun 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>There are many difficulties that come with attempting to root a phone. As time has progressed and the Android platform as a whole has matured, several new techniques have arisen that allow easier rooting of phones.  Here are three of the great ways different phones can be rooted using some of the latest tools.</p>
<h2>GingerBreak</h2>
<p><a href="http://forum.xda-developers.com/showthread.php?t=1044765">GingerBreak found on XDA</a>, is a very simple tool for gaining root access. It works very well with the Motorola Droid X2.  GingerBreak is a single apk file that when downloaded and run, it uses an exploit present on many devices to remount the internal system memory, write root capabilities, and install a superuser apk file. This root attempt is extremely interesting because it requires no manual reboots, and works with a single apk file downloadable from the internet.</p>
<h2>SuperOneClick</h2>
<p><a href="http://forum.xda-developers.com/showthread.php?t=803682">SuperOneClick</a> is a Windows focused tool that roots most phone types. Simply put the Android device into debugging mode, connect the device via USB to the computer, and run SuperOneClick. The tool will automatically attempt to install and run the appropriate exploit, as well as install the needed root capabilities and packages.</p>
<p>I have successfully used SuperOneClick with the Galaxy S - Vibrant, as well as with the Galaxy Tab (7 inch version), and the Motorola Xoom tablet.</p>
<h2>Cmenard's OverStock kernel</h2>
<p>The OverStock kernel is a good tool that works for several phones, including the Galaxy S - Vibrant. This is actually the method recommended by the CyanogenMod team for the Vibrant. The kernel allows the user to continue using the existing ROM, but replaces the Kernel and system features with a version that includes root capabilities for the user.  One of the benefits of this method, is that it does not seem to violate the Android security model, as it can only be used with the appropriate desktop software, and by starting the phone into download mode.  The software is open source, and is maintained on Github, making the Heimdall project very centralized and well managed.</p>
<h2>Summary and Concerns</h2>
<p>Despite the ease of use of all of these solutions, the first two rely on security exploits in the Android operating system. This is a huge concern for me because although it makes rooting and flashing very easy, it violates the qualities that should be in place for good security. If GingerBreak works to root the device in the way we want it to, this means that any malicious app could use the same exploit to hurt the user's system. A malicious app could be uploaded to the market containing the same exploit, and install a monitoring system, or hurt the rest of the system.  I have not yet been exposed to, or heard about any malicious uses of these exploits, but the fact that it's possible makes it very probable that it will happen in the future.</p>
<p>In the future, we need to find a way to root and flash more phones that doesn't violate the security model, but still allows the user to take full control of their Android phone, and their operating system.</p>]]></description>
</item>
<item>
<title>ClockworkMod Recovery on Samsung Galaxy S - Vibrant - An Extremely Dangerous Journey</title>
<link>http://mortalpowers.com/news/clockworkmod-recovery-on-samsung-galaxy-s-vibrant-an-extremely-dangerous-journey</link>
<pubDate>Fri, 13 May 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<p>One of the things the Froyo update did to the Samsung Galaxy S, Vibrant model, was not only to remove any rooting that was done (which can be overcome with <a href="http://mortalpowers.com/news/superoneclick-can-root-your-vibrant-with-froyo">superoneclick</a>), but also to install a new recovery image that only allows signed updates. This means that even if you successfully root your device, by default you will be unable to install a custom recovery image, which would be necessary to backup your system, or to install a custom rom. </p>
<p>Fortunately, the intelligent people over at <a href="http://forum.xda-developers.com/showthread.php?t=833423">XDA</a> have found a solution. The solution involves replacing the existing recovery binary with a modified version of the Android 3e recovery image that allows unsigned binaries. This is not a trivial task, so make sure you have a backup and are familiar with ADB, as I am not responsible for bricks.</p>
<ol><li>Download the new <a href="http://mortalpowers.com/stuph/recovery">Recovery Binary</a>.  This is the binary we will be replacing on your system.</li>
<li>Make sure you have a good adb connection to your phone. For me, this means running <span class="code">sudo su</span> to become root, then running <span class="code">adb kill-server</span> and <span class="code">adb start-server</span>. I also typically run <span class="code">adb devices</span> to get a list of the phones connected, and to ensure my phone is there.</li>
<li>Load <span class="code">recovery</a> onto your device using normal USB file transfer.</li>
<li>This step would be easier on windows because the people over on XDA have packaged a windows .bat file that runs these commands in a nice little tool, but as I run linux, I had to open the file and translate the commands. Fortunately they weren't as tricky as I feared. Run the following:</li></ol>
<div class="code">adb shell
su</div>
<p>At this point I had to approve SU access using the phone's interface.</p>
<div class="code">mount -o rw,remount /dev/block/stl9 /system
mv /system/bin/recovery /system/bin/recovery.bak</div>
<p>You can also delete this file, but I always like to play it safe. The next step would be a simple move, but for some reason I get an error <span class="code">failed on 'recovery' - Cross-device link</span> when I try to move the file directly. Instead, I do a copy/movefrom the sd card.</p>
<div class="code">busybox cp /sdcard/recovery recovery2
mv recovery2 recover
chmod 0755 recovery
</div>
<p>Now you can quit adb shell by typing quit or pressing CTRL+d</p>
<div class="code">
adb reboot recovery
</div>
<p>Upon reboot, the updated recovery was loaded and seemed to work fine, so I booted into the system, and used RomManager's ClockworkMod Recovery image flasher.  Once it had downloaded and written the appropriate update.zip to the filesystem, I rebooted into the updated 3e recovery, clicked on <span class="code">reinstall packages</span> twice, and I was looking at ClockworkMod's Recovery image. From there I could make backups / flash roms / etc.  Rebooting in the future also always returned me to the correct ClockworkMod recovery image.</p>



]]></description>
</item>
<item>
<title>Simple Android Tips from Google IO</title>
<link>http://mortalpowers.com/news/simple-android-tips-from-google-io</link>
<pubDate>Tue, 10 May 2011 00:00:00 -0500</pubDate>
<description><![CDATA[<img src="http://mortalpowers.com/images/articles/edittext-menu.png" alt="EditText Menu" style="float:right;margin:10px;" />
<p>This morning I watched Google IO and learned several important details about android development that are not readily transparent as one begins developping Android applications. Fortunately, these items are extremely easy to address, and with a few minor changes, the usability and quality of your applications will drastically improve.  I loved the presentations given during Google IO, and I could watch days of these sorts of tips, as Android development is a vast and expansive topic.</p>
<h2>Tip 1: Specify TextType</h2>
<p>This tip has to do with any EditText objects that you include in your application. When building android applications with text fields, you should inform the platform what the intent of the edit text is.  You can do this in one of two ways.  First is by editing the layout used by your application. Here is an example layout that includes an EditText that has been specified as a URL.  This will ensure that the keyboard, whenever possible, shows the most appropriate keys for URL entry.</p>
<p>Use the code as follows:</p>
<div class="code" style="font-size: 0.5em;">
&lt;EditText android:id="@+id/EditText02"
	android:layout_width="fill_parent" android:layout_marginTop="10dp"
	android:layout_marginBottom="10dp" android:layout_below="@+id/TextView02"
	android:layout_centerHorizontal="true" android:layout_height="wrap_content"
	android:lines="1" android:inputType="textUri" android:hint="Url starting with http://">&lt;/EditText>
</div>
<p>The second menu is to set the setting via the UI.</p>
<h2>Tip 2: Specify Audio Stream Control</h2>
<p>This one is a quick fix. By default in Android the audio hard buttons control whatever audio is most foreground. This means that if you have audio playing, it will control that audio, otherwise it will default to the ringer. This one is easy to fix by calling the following code in your OnCreate: </p>
<div class="code">
setVolumeControlStream(AudioManager.STREAM_MUSIC);
</div>
<h2>Tip 3: Specify Target SDK Version</h2>
<p>The final tip is something that I most likely missed as part of Android Development 101.  By default, your application will not specify a minimum or target SDK.  Not specifying a target SDK version means that the Android platform will assume your application uses the lowest SDK version, or uses the minimum SDK version that you specified.  This is becoming more important starting with Honeycomb, because Honeycomb uses the Target SDK version for choosing some of the visual elements to show. The example that lead to my discovery of this was the menu icon. If you target the wrong SDK version, the menu icon will be shown, regardless of if you have a menu or not.</p>
<p>Fix it by specifying the correct versions. For me at the time of writing, they are as follows:</p>
<div class="code">&lt;uses-sdk android:minSdkVersion="4" android:targetSdkVersion="12"/></div>]]></description>
</item>
</channel>
</rss>
