<?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 News</title>
<link>http://mortalpowers.com/</link>
<description><![CDATA[This is test of creating a RSS 2.0 feed Universal Feed Writer]]></description>
<item>
<title>Google blackhat browser techniques</title>
<link>http://mortalpowers.com/news/google-blackhat-browser-techniques</link>
<pubDate>Thu, 04 Mar 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Recently Google announced that it was dropping IE6 support for YouTube. This momentus decision will have the impact of upgrading many many users off of Internet Explorer 6.  I fully support this migration in general, but it also comes at a price.  If you look at the notice posted on YouTube, you will see that their browser list starts with Chrome.  As Google very well knows, in lists of sites or alternatives, over 90% of people select the first item from the list when they don't know what they are looking for.</p>
<p>In the end, this means that Google is pushing for an end to IE6's domination, but in a way that benefits their own interests.  While I can't blame them, this is definitely a step towards evil.</p>]]></description>
</item>
<item>
<title>HTML5 Video Player for All Browsers</title>
<link>http://mortalpowers.com/news/html5-video-player-for-all-browsers</link>
<pubDate>Wed, 03 Mar 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>I'm a huge fan of HTML5 video, and I feel that Flash as a video player is horrible.  As a part of increasing the adoption of HTML5 and Ogg/Theora specifically, Google has released a code project that does automatic browser detection and failover so that content producers can simply use the HTML5 version of the video, and include a piece of javascript so that in browsers where HTML5 is not supported, the legacy (and broken in my opinion) flash player will be subsituted.</p>
<p>In order for this to work, insert the following code somewhere in your system:</p>
<div class="code">&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;&lt;/script&gt;<br/>
&lt;script src="http://html5media.googlecode.com/svn/trunk/src/jquery.html5media.min.js"&gt;&lt;/script&gt;</div>
<p>If everything works as advertised, you should see the video below:</p>
<video src="/stuph/html5-development.ogv" controls="controls" style="width:800px;"/>
<h2>Update</h2>
<p>It appears that this solution doesn't work in Internet Explorer 6, as it appears the flowplayer doesn't support Ogg Theora, which stops this solution from being cure-all, and this plugin doesn't help the cause of open formats as much as I would hope.]]></description>
</item>
<item>
<title>Problem with Vuze - failure on startup</title>
<link>http://mortalpowers.com/news/problem-with-vuze-failure-on-startup</link>
<pubDate>Tue, 02 Mar 2010 00:00:00 -0600</pubDate>
<description><![CDATA[I'm running the Lucid Lynx alpha, so keep that in mind.  Recently my installation of Vuze / Azureus stopped being able to launch properly.  Running the command in the console provided me the following:</p>
<div class="code">
<pre>                                                                                                                                            
[warning] /usr/bin/vuze: Unable to locate swt in /usr/share/java
file:/usr/lib/jni/ ; file:/usr/lib/java/ ; file:/usr/share/java/Azureus2.jar ; file:/usr/share/java/log4j-1.2-1.2.15.jar ; file:/usr/share/java/commons-cli-1.2.jar ; file:/super/workspace/
java.lang.reflect.InvocationTargetException                                                                                                                                                 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)                                                                                                                      
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)                                                                                                    
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)                                                                                            
        at java.lang.reflect.Method.invoke(Method.java:616)                                                                                                                                 
        at org.gudy.azureus2.ui.common.Main.directLaunch(Main.java:229)                                                                                                                     
        at org.gudy.azureus2.ui.common.Main.main(Main.java:132)                                                                                                                             
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)                                                                                                                      
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)                                                                                                    
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)                                                                                            
        at java.lang.reflect.Method.invoke(Method.java:616)                                                                                                                                 
        at com.aelitis.azureus.launcher.MainExecutor$1.run(MainExecutor.java:37)                                                                                                            
        at java.lang.Thread.run(Thread.java:636)                                                                                                                                            
Caused by: java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Shell                                                                                                                    
        at org.gudy.azureus2.ui.swt.mainwindow.Initializer.<init>(Initializer.java:111)                                                                                                     
        at org.gudy.azureus2.ui.swt.Main.<init>(Main.java:88)                                                                                                                               
        at org.gudy.azureus2.ui.swt.Main.main(Main.java:255)                                                                                                                                
        ... 12 more                                                                                                                                                                         
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Shell                                                                                                                  
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)                                                                                                                           
        at java.security.AccessController.doPrivileged(Native Method)                                                                                                                       
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)                                                                                                                       
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)                                                                                                                            
        at com.aelitis.azureus.launcher.classloading.PrimaryClassloader.loadClass(PrimaryClassloader.java:103)                                                                              
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)                                                                                                                            
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)                                                                                                                    
        ... 15 more                                                                                                                                                                         
Start fails:                                                                                                                                                                                
com.aelitis.azureus.core.AzureusCoreException: Azureus core already instantiated                                                                                                            
        at com.aelitis.azureus.core.impl.AzureusCoreImpl.create(AzureusCoreImpl.java:120)                                                                                                   
        at com.aelitis.azureus.core.AzureusCoreFactory.create(AzureusCoreFactory.java:46)                                                                                                   
        at org.gudy.azureus2.ui.common.Main.main(Main.java:160)                                                                                                                             
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)                                                                                                                      
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)                                                                                                    
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)                                                                                            
        at java.lang.reflect.Method.invoke(Method.java:616)                                                                                                                                 
        at com.aelitis.azureus.launcher.MainExecutor$1.run(MainExecutor.java:37)                                                                                                            
        at java.lang.Thread.run(Thread.java:636)                                                                                                                                            
</pre></div>
<h2>Fixing this issue with vuze and swt</h2>
<p>It turns out that the temporary solution was to make a link to the correct placement of the swt.jar file.  For me this meant running the following:</p>
<div class="code">sudo ln -s /usr/share/java/swt-gtk-3.5.1.jar /usr/share/java/swt.jar</div>
<p>With this change, Azureus is able to find the swt jar, and is able to launch successfully. This will hopefully get overwritten when the package maintainers fix the issue and solve the problem in a more long-term manner.</p>
]]></description>
</item>
<item>
<title>Speed up Git Clone with Shallow Clones</title>
<link>http://mortalpowers.com/news/speed-up-git-clone-with-shallow-clones</link>
<pubDate>Mon, 01 Mar 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Git is an excellent version control system.  It is built on the principles of DVC, or distributed version control which means by default, your local copy contains all of the revision history for the entire repository.  This is great because changes can be made, committed, undone, and even merged offline.</p>
<p>This property of git also has a potential downside when you are simply trying to access the latest version of a repository.  In order to overcome this, git support a <span class="code">--depth</span> parameter.  This parameter will have the effect of preventing you from cloning it or fetching from it, and other repositories will be unable to push to you, and you won't be able to push to other repositories.  These downsides ignored for a moment, having to work with only the recent history can be extremely desirable.</p>
<p>One concrete example of this would be the case where a user wants to compile wine.  The official Wine Wiki has a <span class="code">git clone</span> built right into the instructions.  If you follow these instructions you will have the entire history, and it will take up around 200MB of disk space (this number will go up as time continues).  By adding the depth parameter as follows, you can save more than half of this time by only checking out the most recent version of the repository.</p>
<div class="code">git clone git://source.winehq.org/git/wine.git ~/wine-git --depth 1</div>
]]></description>
</item>
<item>
<title>Basic Ubuntu Network Hardening</title>
<link>http://mortalpowers.com/news/basic-ubuntu-network-hardening</link>
<pubDate>Sat, 27 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Hardening a linux system is something easy to do, and can have a lot of additional security benefits for the paranoid, and for those who might be targets.  There are a lot of guides to hardening different parts of the system.  I'm going to review the steps I took recently in order to harden one of my desktop computers.</p>
<h2>Understand what is open</h2>
<p>Before you can harden anything, you need to understand how exposed your currently are.  There are a few ways of doing this, and I recommend you try at least a couple.  The first way is to use <span class="code">nmap</span> to scan your IP address.  You will need to do this from another computer, preferably in your local network.  This scan will provide information about all of the ports your computer responded on.  The second way I recommend you understand what your system is exposed to is to run the command <span class="code">netsat -atuv</span>.  This command will return a list of listening and active connections your computer has.</p>
<h2>Review the open ports list</h2>
<p>This step will require some knowledge of your system and of networking.  Each port typically serves a standardized purpose.  This means that you will need port 22 open, for example, if you want to allow incoming ssh connections.  You will need port 25 open if you want to run a mail server. You will need port 80 or 443 open if you want to run a web server.  Unless you want no remote access on your machine (a valid assumption for some people), you will need to be careful what you disable.</p>
<p>In my default install ports list, I have ssh, smtp, mdns, bootpc, and port 37319 open.  You can tell a port is open from netstat, as it will look as follows:</p>
<div class="code">Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State<br/>
tcp        0      0 *:ssh                   *:*                     LISTEN<br/>
tcp        0      0 localhost:ipp           *:*                     LISTEN<br/>
tcp        0      0 localhost:smtp          *:*                     LISTEN</div>
<p>In this output, the "*:ssh" means that SSH is listening on all network addresses, and that any computer that can connect to mine can open a connection with SSH.  THe "localhost:ipp" means that my CUPS printer setup is NOT listening on any address, and that only programs local to my machine can open connections.  Localhost servers are generally safe and won't expose your machine to malicious remote users, unless they break your user authentication, or already have a local user.</p>
<h2>Secure smtp or Postfix (port 25)</h2>
<p>Postfix by default listens to your network and trusts mail reporting that it is coming from your local network.  This typically isn't needed, and you can secure postfix to only listen to the local machine for additional security.  Open the file <span class="code">/etc/postfix/main.cf</span> find a line containing "inet_interfaces = all", and change it to "inet_interfaces = localhost".  You then restart postfix with <span class="code">sudo postfix stop</span> and <span class="code">sudo postfix start</span>.  You should check <span class="code">netstat -atuv</span> again to ensure this worked.<p>
<h2>Secure mdns (port 5353)</h2>
<p>After researching mdns briefly, it seems this is something I wish to keep.  This allows computers on the local network to find other computers using friendly names.  This means that your computer will auto resolve when using "hostname", rather than always having to rely on your router, or needing to use the IP directly.  This is useful to me, and worth the security risk to leave open.</p>
<h2>Secure bootpc (port 68)</h2>
<p>Bootpc is a part of the standard DHCP system.  How DHCP works is that you send out a multicast UDP packet to the network requesting information from any available server.  This means that you must also have a process listening for responses.  This is a standard part of linux networking.  You could remove your DHCP capabilities, but the boopc listener shouldn't be a security risk.</p>

<h2>Remember to use a firewall</h2>
<p>One of the important things to remember is that you should always use a separate firewall between yourself and the internet, and only use port forwarding for the things you absolutely need to be able to forward.  I recommend only forwarding SSH, as you can use SSH to tunnel any other sorts of traffic.  I also recommend running SSH on a nonstandard port, as this will reduce the amount of "doorknocking" your computer receives. These security steps are primarily designed to protect you if someone else has gained access to your network, or if there is another compromised machine somewhere behind your firewall.</p>]]></description>
</item>
<item>
<title>New Project: Gitosis Web</title>
<link>http://mortalpowers.com/news/new-project-gitosis-web</link>
<pubDate>Sun, 21 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Gitosis is a git repository management tool.  It has features that make multi-repository, multi-user environments much simpler.  The way you access the configuration is through git.  You make configuration changes in your working copy, and then push them to the repo.  These changes are then processed by git hooks to create/manage the repositories and keys.</p>
<p>One of the downsides of gitosis is that all administrators have equal permissions to add/remove keys, and there is no mechanism for users to manage their own keys.  In response to this I have begun building Gitosis Web, a PHP frontend to gitosis that adds some extra capabilities and ease of use.</p>
<p>Many people are comfortable with Gitosis, and that's great.  This tool doesn't replace Gitosis or say there are any issues with Gitosis, but simply that some workflows could benefit from an additional frontend.</p>
<p><a href="http://github.com/PeEllAvaj/gitosis-web">Check out Gitosis Web on github</a></p>
<h2>Gitosis Web Readme</h2>
<p><strong>Gitosis Web</strong></p>
<p>Gitosis Web is designed to is designed to be a layer on top of gitosis. Leveraging PHP and extra properties stored in 
the gitosis configuration to allow and administrator to control the entire file, and to allow individual users to manage 
their keys.</p>

<h3>Install Instructions</h3>
<p>To install, you will need working installations of git, gitosis, php, and mysql.  This system has been tested under 
linux, but might work on windows too (Assuming you have git in your PATH).  Once you have this, make sure your apache 
user (probably www-data) has a checked out copy of gitosis-admin, and that it has a key setup with the gitosis server 
you want to administrate.  You should add a "name = x" row for your adiministrator to the [gitosis] section, and an "x = 
pass" section to specify the cleartext password.</p>
<p>Once you have it setup, you load the web interface, specify the path of the gitosis-admin working copy, and provide a 
username and password.  From there you can make changes to the gitosis configuration, or add keys to already specified 
users.  Each user should get a group looking like [group user-stephen].</p>

<h2>Future Plans</h2>
<p>At some point in the future, I hope to add the ability to manage users without tweaking the gitosis.conf file, or allow 
users to manage their own keys.  Allowing project owners might be a cool idea, but might make the interface too 
complex.</p>]]></description>
</item>
<item>
<title>Easy website deployment and tracking with Git</title>
<link>http://mortalpowers.com/news/easy-website-deployment-and-tracking-with-git</link>
<pubDate>Fri, 19 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>As modern web development methodologies continue to improve and optimize our workflows, one of the workflows that has risen to the top is a development deployment model using git.</p>
<h2>Making it Secure</h2>
<p>Before you do any of these steps, make sure you add the following to your <span class="code">.htaccess</span>, and that URL Rewriting is working in your apache setup.</p>
<div class="code">#Secure GIT Deployment Methods<br/>
RewriteRule /?.git/ - [R=404,L]<br/>
RewriteRule /?.gitignore - [R=404,L]</div>
<p>Without doing this, anyone will have read-access to all of your code, and your entire source history.</p>
<h2>Use git</h2>
<p>This guide assumes a lot of knowledge about source control, management, and is not a guide to git.  This guide assumes you can figure those parts out, but that you want to know more about one specific workflow that works very well in my opinion.</p>
<p>The main idea behind this workflow is that you will have a central repository, a development version of the software, and a published version of the software.</p>
<h2>Convert something else to git</h2>
<p>If you want to keep any history, the first step is going to be to convert the source control history to git.  If you are using cvs, you will need to convert to SVN, and then to git.  If you use SVN, simply use git to do a <span class="code">git svn clone</span> of the repository somewhere on your local system.  From there I recommend you move the .git folder to the remote production server, and make a copy in the development folder.  If you go into each of these folders and type <span class="code">git status</span>, you will see any differences that have not yet been committed to the repository, but you will be ready to make and receive changes.</p>
<h2>Now that you are setup, time to develop</h2>
<p>From there, things are relatively simple.  Simply make any changes you want in your development environment.  When you are finished with your changes, and they have been tested to your satisfaction, commit the changes, and push them to the repository.  You can then enter your production server, and pull the changes from the repository.  You can also simply pull directly from the development server, but organizations I have worked with tend to like a 3rd copy of the source, somewhere separated from the hosting environment.</p>
<p>If you want to, you can make emergency or urgent changes directly on the production, following any existing workflow you have for ensuring something is not broken.  When these changes are complete to your satisfaction, simply commit and push them, and do a pull from the development environment.]]></description>
</item>
<item>
<title>Error: plasma desktop has no installation candidate</title>
<link>http://mortalpowers.com/news/error-plasma-desktop-has-no-installation-candidate</link>
<pubDate>Wed, 17 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>An error I received after trying to update one of my Kubuntu Karmic Koala installations to the latest KDE 4.4 was <em> plasma desktop has no installation candidate</em>.</p>
<p>The solution was to recheck all of the repositories listed in /etc/apt/sources.list and the files in /etc/apt/soruces.list.  I previously had a kubuntu beta repository.  I exchanged this for the correct stable repository, updated, ran an upgrade.  Additionally, I needed to run <span class="code">sudo apt-get install kubuntu-desktop</span> for the appropriate packages containing "plasma-desktop" were installed.</p>
<p>You can actually start plasma-desktop from Kwin by pressing Alt+F2 and typing "plasma-desktop", or it can be automatically be restarted by switching to one of the virtual consoles and typing <span class="code">restart kdm</span>, but beware this will kill any gui applications you have running.</p>]]></description>
</item>
<item>
<title>File Menu Missing in Dolphin</title>
<link>http://mortalpowers.com/news/file-menu-missing-in-dolphin</link>
<pubDate>Thu, 11 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>One of the most annoying things I have encountered with Dolphin is the fact that there is a keyboard shortcut to remove the menu bar, as well as a button to remove the menubar, but there is no way to get it back in the same way.  You can remove the menu bar by hitting the keyboard shortcut "Ctrl+M", or by right clicking on the menu bar and clicking "Hide Menubar".</p>
<h2>How to get it back</h2>
<p>For me, finding out how to get it back was a frustrating experience.  My first problem was that I didn't know KDE called it the "Menubar", when I looked in the keyboard shortcuts, or when I googled online, I couldn't find anything relating to the <em>dolphin file menu</em>.  The second usability problem I see is that right clicking on the title bar, or any of the toolbars (which take the place of the menubar at the top of the screen after it is removed don't give you the option to bring it back.</p>
<p>It was finally after I had practically given up looking for the menubar that I right clicked in the MAIN pane of the screen.  This context menu then provided me with both the appropriate keyboard shortcut, as well as a button to bring the menu bar back.</p>]]></description>
</item>
<item>
<title>Google Releases new Communication Tool: Google Buzz</title>
<link>http://mortalpowers.com/news/google-releases-new-communication-tool-google-buzz</link>
<pubDate>Wed, 10 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Recently released as a part of Gmail, Google Buzz combines some of the features from twitter, facebook, gmail, and google wave into a new form of communication.  When I launched gmail early this afternoon, I was greeted with an introduction to Buzz.  From there it told me that I was already following 22 people, only one of which had posted anything.  My first actions were to make a post, and to connect Google Buzz with "my activities on other sites", which I did with <a href="http://mortalpowers.com">mortalpowers.com</a>, and <a href="http://hexslayer.com">hexslayer.com</a>.  It somehow began importing articles from the RSS feeds of both sites.  It says it only looks for my activities on connected sites, but I doubt it has that level of intelligence. It's hard to test though, as I am typically the sole poster on both sites.</p>
<p>The confusing thing is that everything Google Buzz does is already possible on a plethora of other sites.  It will be interesting how it differentiates itself, or if it simply complicates and confuses the wide landscape of social tools already in use by the masses.</p>]]></description>
</item>
<item>
<title>AutoPano Pro and Giga Font Problems</title>
<link>http://mortalpowers.com/news/autopano-pro-and-giga-font-problems</link>
<pubDate>Sat, 06 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>I recently installed copies of AutoPano Pro and AutoPano Giga, which are some great panorama stitching programs that I would highly recommend, as they work on Linux, Mac, and Windows.   After installing these programs, there was a horrible font problem that made all of the text in the application illegible.</p>
<p>The solution I believe was to install qt4-config, run qtconfig, change the font size up to 9, and then back down to the default of 8.  When you launch the program again, all of the fonts and text should be fixed and legible.  Have fun using this awesome program!</p>]]></description>
</item>
<item>
<title>Upcoming talk on Linux Browsers</title>
<link>http://mortalpowers.com/news/upcoming-talk-on-linux-browsers</link>
<pubDate>Fri, 05 Feb 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>In March I'm going to be giving a talk on Browsers in Linux, with a lot of specific examples and demos from Ubuntu.  Hopefully this talk will cover some of the basic things for beginners who need to know things like "What are the options", and "how to install new browsers in ubuntu", as well as advanced options detailing some of the more unique and advanced features of the available browsers, as well how to get started with development for browsers.</p>
<p>This talk will be at the Penguins Unbound Linux users group in Falcon Heights, Minnesota on the last Saturday of the month.  I will post additional details and documents closer tot he date.</p>]]></description>
</item>
<item>
<title>Video File Thumbnail Previews in Dolphin</title>
<link>http://mortalpowers.com/news/video-file-thumbnail-previews-in-dolphin</link>
<pubDate>Sun, 31 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>In a default Kubuntu install, Dolphin is a great file manager.  It typically works with many different file types seamlessly.  One of the things it doesn't seem to handle out of the box is previews/thumbnails for video files.</p>
<h2>How to install video thumbnails</h2>
<p>The first step is to install the mplayer thumbnails package.  My research indicates that this has been in the standard repos since Jaunty.</p>
<div class="code">sudo apt-get install mplayerthumbs</div>
<p>This will change dolphin so that that when you click on a video, it will be previewed in the preview panel.  To make thumbnails show up in the icon view, you need to do a little more configuration.  Go into Settings->Configure Dolphin.  Click on the "General" section from the list of sections on the left, select the "Previews" tab, and check the box next to "Video Files (MPlayerThumbs)".</p>
<p>That's it, enjoy your video thumbnails in dolphin on KDE</p>]]></description>
</item>
<item>
<title>New Analytics Feature: Adsense Integration</title>
<link>http://mortalpowers.com/news/new-analytics-feature-adsense-integration</link>
<pubDate>Sat, 30 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Google Analytics continues to prove itself as one of the top and most important tools for website analytics today.  Recently Google added a new feature for those that use both Google Adsense, and Google Analytics.  This feature is the ability to cross-reference data between these two applications.  What this means is that not only can you see what visitors are coming to your site, and what they are viewing, but you can cross-reference this data with how much money they are providing you.</p>
<p>As an example, if we look at mortalpowers.com we will see that Google Chrome accounts for around 30% of the traffic.  What is odd is that over the past 3 weeks, 100% of adsense revenue has come from Chrome.  This strange pattern is again repeated for Linux.  Linux makes up around 40-50% of traffic, but ends up providing nearly 100% of adsense revenue.</p>
<p>Keep in mind that for this site, sample sizes are very small. From this type of data and with a larger sample size, it is clear that these new features are going to help those seeking to monetize their web presence and content greatly.</p>]]></description>
</item>
<item>
<title>KDE 4.4 Rocks Part 1 and other thoughts on Lucid Lynx alpha 2</title>
<link>http://mortalpowers.com/news/kde-44-rocks-part-1-and-other-thoughts-on-lucid-lynx-alpha-2</link>
<pubDate>Fri, 29 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>A few weeks ago I installed the Ubuntu Lucid Lynx second alpha.  Typically Ubuntu alphas and betas have quite a few bugs, and I have been burned in the past by upgrading Ubuntu versions prematurely.  This time I decided to try it out a little early by installing it in a separate partition where I had cleaned up some space and taken it back from my ntfs partition.</p>
<h2>Lucid Lynx - Ubuntu Alpha 2</h2>
<p>So far, Lucid Lynx has been extremely stable.  For the entire release cycles of Jaunty and Karmic, as well as alpha 1 of Lucid Lynx, the Live CD wouldn't work on my system.  It wouldn't boot at all, regardless of using the alternative installer, or the live CD with a plethora of boot flags attempted.  Lucid Lynx went so far as to work in my system without the Kernel flag <span class="code">acpi=off</span> which I have needed for my entire life with Ubuntu.</p>
<p>The installer was nice, easy to use, and although my Nvidia drivers weren't installed properly by the Jockey (KDE) GUI, they were very easy to install with <span class="code">sudo apt-get install nvidia-current</span></p>
<p>In addition to this, Kubuntu installed ALSA without PulseAudio by default, which in the past hasn't worked with my microphone, but this install seemed to fix everything I have been fighting with for the past few years.  Once again we will see how long it lasts, and I had almost gotten used to the per-application controls of pavucontrol.   Who knows, maybe I will install PulseAudio a year from now and everything will just work with ALSA + PulseAudio in perfect harmony.  I'm not holding my breath.</p>
<h2>KDE 4.4</h2>
<p>A couple of the features I was waiting for with KDE have finally landed.  The first which I wanted, but I had no idea why I wanted it is a feature that is most easily described as "Windows 7 Snap".  This means that I can drag windows to the left or right edges of my screens, and they will "snap" into place at 100% height and 50% width.  You can also drag windows to the top of the screen and they will maximize.  This hurts my workflow a little bit in that it isn't instant to drag and drop maximized windows between monitors, but I believe I will get used to it.  This also works for multiple monitors, which is surprising because as of a week ago (before I ran some package updates) wasn't working for the middle bar between the monitors.</p>
<p>Another improvement that I wasn't expecting is that they remade (or finished) the <em>Add Widget</em> menu.  Now when you add a widget, whether to the desktop or a panel, a very nice bar pops out that is easily navigable, and uses drag-and-drop for placement.</p>
<p>The final thing I didn't expect was that moving files and deleting files is much smoother.  In Karmic and before, when I deleted a set of files in Dolphin (or sent them to the trash), they would remain on the screen for a few moments while KDE worked in the background.  Now these types of processes are instant, as they should be.  The notifications for file transfers and activities have also been much improved.  Now the useful data is presented first, with the option to expand the notification to show the rest of the information.  Biggest of all about the notifications, they actually seem accurate now.</p>
<p>Hopefully I will be able to write more about any new features of KDE I discover as I continue this dangerous journey through the Ubuntu 10.04 alphas.</p>]]></description>
</item>
<item>
<title>Abandon Internet Explorer</title>
<link>http://mortalpowers.com/news/abandon-internet-explorer</link>
<pubDate>Thu, 28 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Internet Explorer usage continues to decline, losing somewhere between a tenth of a percent and half a percent each month to better browsers such as Firefox and Chrome.  My prediction is that this is going to slow and eventually come to a stop.  The problem is that there is a solid percent of internet users that have no idea what a brower is, and don't want to know, and will probably never learn.  This block of users will never be persuaded by functionality or speed or new features.</p>
<p>In response to this inevitability, I propose people that write about or involve themselves in the Linux, or even in the general power user populous, stop supporting all versions of Internet Explorer immediately.  I will admit that my website still has around 20-30% usage of Internet Explorer, but I am coming more and more to the opinion that those who continue to use it, probably wouldn't understand anything I'm writing about.  This leads me to believe that this traffic ends up being people that are confused, as well as web spyders disguising themselves as a normal user, artificially inflating the numbers for IE.</p>
<h2>Benefits of abandoning IE</h2>
<p>By abandoning IE, it makes web development and testing easier.  Development can focus on the standard DOM, and on leveraging some of the more advanced functionality of the web, such as new request types, as well as little things like rounded corners, or every-other CSS selectors.</p>
<p>Abandoning IE as a web developer or publisher is going to send a message to Microsoft and indirectly to uninformed users about their computing choices.  When a percentage of the websites a person visits in a day stop working, they are going to ask why.  If the answer is that their browser is broken (which it truly is), they will be much more likely to make a switch.  The message it sends to Microsoft is that shipping a broken browser that is out of touch with the modern internet is going to hurt their users. This would also tell them that if they want to ship a working browser (which is what Apple and the open source community had to do in the past), they are going to have to adopt the features and usability of the other browsers, which in this case would be primarily based on standards and extensibility.</p>
<h2>Problems with abandoning IE</h2>
<p>By abandoning IE, you may make your website unusable for users that don't know, or can't upgrade (some corporate offices still require everyone to run IE6). This could also decrease your traffic.  There is also a chance that Microsoft will just ignore any sites that do this, which is a definite probability based on their past behavior.</p>
<h2>Summary and Philosophy</h2>
<p>In theory by abandoning IE you will be able to focus on innovating for your best users, rather than hacking and making workarounds for your worst.</p>]]></description>
</item>
<item>
<title>Install Firefox 3.6 in Ubuntu</title>
<link>http://mortalpowers.com/news/install-firefox-36-in-ubuntu</link>
<pubDate>Wed, 27 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Installing the latest Firefox 3.6 release in Ubuntu is easy.  You have to get the packages from Mozilla rather than Ubuntu, as Ubuntu is much more cautious with their release cycle, and with the rate they import packages into their system.  This is a step you will only have to do once, and then you will have access to all of Mozilla's releases designed for ubuntu.  Simply type the following commands to install Firefox 3.6:</p>
<div class="code">sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 247510BE<br/>
sudo add-apt-repository ppa:ubuntu-mozilla-daily<br/>
sudo apt-get update<br/>
sudo apt-get remove firefox<br/>
sudo apt-get install firefox-3.6
</div>
<p>The step to remove existing firefox installations may or may not be necessary for you.  On the machine I tried it on, I had to remove "firefox" before the new required packages for firefox-3.6 would install properly.  Don't worry, as installing/uninstalling software should never affect your user preferences.</p>
<h2>What's awesome in Firefox 3.6?</h2>
<p>One of the best things about Firefox 3.6 is their new concept of "personas".  Rather than a full theme, personas are more similar to a desktop background.  This means the persona is going to affect the color and images used in the browser, but not much else.  The best thing about personas is that they can be previewed live in the browser simply by hovering over each of the themes, and apparently there are already 30,000 themes, most of which are pretty cool looking.  <a href="http://getpersonas.com/">Check out getpersonas.com to browse the entire catalog.</a></p>
<p>The second most interesting thing is that Mozilla has continued improving the speed of the browser overall, and apparently it's 20% faster than Firefox 3.5, which is great for a browser that most people love, but has been receiving a lot of flak for being slower than Chrome.</p>]]></description>
</item>
<item>
<title>Designing HTML for Mobile (Android and iPhone)</title>
<link>http://mortalpowers.com/news/designing-html-for-mobile-android-and-iphone</link>
<pubDate>Tue, 26 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>The W3C recommended way of targeting mobile devices is for stylesheets to use the <span class="code">media</span> attribute.  Unfortunately, this attribute isn't used by either the Android browsers or the iPhone browser.  Instead these browser report that their media is of type "screen", this is the standard used by desktop browsers as well.</p>
<p>There is a trick that is possible still using media detection that selectively applies the styles based on the screen width.  The following code is an example of two stylesheets.  The first should be applied on desktop computers, and the second should be applied on Android and iPhone.</p>
<div class="code">&lt;link href="/inc/mp.css" rel="stylesheet" type="text/css" media="screen and (min-device-width: 481px)"/&gt;<br/>
&lt;link href="/inc/mobile.css" rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px)"/&gt;</div>

<p>Find additional information and tips at <a href="http://www.rkblog.rk.edu.pl/w/p/optimizing-websites-iphone-and-android/">http://www.rkblog.rk.edu.pl/w/p/optimizing-websites-iphone-and-android/</a></p>]]></description>
</item>
<item>
<title>Fixing DenyHosts after being blocked</title>
<link>http://mortalpowers.com/news/fixing-denyhosts-after-being-blocked</link>
<pubDate>Mon, 25 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>One of the built-in pieces of security in many linux machines is a piece of software called <span class="code">denyhosts</span>.  This piece of software works with the SSH daemon to catalog the types of requests and failures come in.  If it detects an IP trying to connect to the computer that has exceeded certain thresholds, it adds it tot he /etc/hosts.deny file, which immediately bans an IP from connecting with ssh.</p>
<p>In the default settings in Ubuntu, valid users are only allowed 10 failed valid-username attempts over a period of 5 days, or 5 failed invalid-usernames over the same period..  This may seem like plenty, but occasionally when travelling you will repeatedly use the wrong password or the wrong username, you can get your entire IP blocked.  At this point you have to use another machine (or another IP) to connect to the server to fix the problem.</p>
<h2>How to unban yourself in DenyHosts</h2>
<p>The easiest way to temporarily unban yourself is to delete the entry containing your IP in /etc/hosts.deny.  This will work for a few seconds, before DenyHosts regenerates the file.  It should be enough to connect and fix the issue from your main host.  You will also want to do this in combination with the next step.</p>
<h2>How to fix the problem permanently</h2>
<p>In my opinion, the problem with DenyHosts in a default Ubuntu install is that successful connections don't reset any of the failure counts.  This means that if you attempt to connect each day, and fail twice, and succeed on the third attempt, by the 3rd day of this, you could be banned from your own server.</p>
<p>The fix involves editing your <span class="code">/etc/denyhosts.conf</span>.  Open this file as root in your preferred editor, and locate the configuration option <span class="code">RESET_ON_SUCCESS</span> and make the line read as follows:</p>
<div class="code">RESET_ON_SUCCESS = yes</div>
<p>After making this change, and restarting denyhosts with <span class="code">/etc/init.d/denyhosts restart</span>, you will want to unban your IP, and connect again successfully so that your fail counts are reset.  Hopefully from there, you won't be banned by your own innocent login failures.</p>]]></description>
</item>
<item>
<title>Chromium: The best browser on Linux</title>
<link>http://mortalpowers.com/news/chromium-the-best-browser-on-linux</link>
<pubDate>Sun, 24 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>The browser wars are ongoing, but there is a clear leader on Linux at this time.  This winner is Chromium.  Chromium is the open source base that Chrome is built from, but it doesn't have any of the proprietary parts or unknown data reporting built into Chrome.</p>
<p>Chromium includes a super-fast webkit rendering engine, their own v8 javascript engine, and process-separated tabs.  Chromium also includes support for HTML5 tags, including the video tag, supporting both Ogg Theora/Vorbis, as well as the controversial .h264 / mp4.</p>
<h2>How to install Chromium on Ubuntu</h2>
<p>The easiest way to install it is to add the PPA to your repositories.  You can follow the instructions on <a href="https://launchpad.net/~chromium-daily/+archive/ppa">the PPA directly</a>, or follow the instructions below, assuming you are running Karmic or later. </p>
<div class="code">sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4E5E17B5<br/>sudo add-apt-repository ppa:chromium-daily<br/>
sudo apt-get update
sudo apt-get install chromium-browser chromium-codecs-ffmpeg-nonfree</div>
<h2>How to Get Started</h2>
<p>Either run <span class="code">chromium-browser</span> directly, or choose it from your menu.  Chromium supports extensions, as well as bookmark sync that uses your existing google account.  Find these things in the preferences menu, which can be opened by clicking on the wrench icon in the upper right hand corner.</p>
<h2>Youtube HTML5 Videos</h2>
<p>Until youtube offers full support for HTML5 rather than Flash for videos, you can install the following extensions which swaps out the page components for you: <a href="https://chrome.google.com/extensions/detail/kchoimdlcbapmcdnheaahjcdpdjdpfco">YouTube HTML5-ifier </a> which is in development by Mark Renouf and myself.</p>]]></description>
</item>
<item>
<title>General Improvements to mortalpowers.com</title>
<link>http://mortalpowers.com/news/general-improvements-to-mortalpowerscom</link>
<pubDate>Sat, 23 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>This week has been an interesting one in regard to the codebase of mortalpowers.com.  I have increasingly become interested in the site as a way of helping others with issues, with finding new and interesting information, and exposing my ideas and projects to the world.  As a part of this I have increasingly been working on the design, function, and SEO of this site.  There have been several components overhauled in an attempt to make things easier to use, and to allow them to be more easily indexable by search engines.</p>
<h2>Page titles and Page Descriptions</h2>
<p>Using the Google Webmaster tools, I have systematically been following all reports of duplicate page titles and duplicate page descriptions.  I started with Page Titles, ensuring that each of the article and content pages included a title related to the article.  I also went through some of the more generic navigation pages and added a title that would indicate where the user is.  In theory this will not only help SEO, but also make the site easier to navigate and understand for users, especially those with different accessibility needs.  Originally going through page titles, I though that perhaps the page descriptions were unimportant, but recently I finished the page titles and began writing content for the descriptions, as I realized these are used by search engines to sometimes show a summary of the page, when specific page content didn't match the user's search.</p>
<p>One of the difficulties I have run into with page descriptions is that I'm not sure what tense/person to write these in.  I have tried to keep all of the page descriptions simple and declarative, and I'm sure there is a standard out there I'm supposed to follow, but that will have to come another day.</p>
<h2>Page URLs</h2>
<p>I had a lot of legacy URLs, for example the imaging system were all under the name "posse", which was the name of the group I originally  had photos of.  I have been refactoring and redesigning the site so that all of the urls make sense.  This means that "posse" is now "photography", which definitely more accurately describes what that section of the site does.  Another area I have improved is with the article system.  It appears that a few characters have slipped in over the past year that weren't removed from the URL string version of the article, meaning that things like single quotes were included, when they have the potential to mess up spyders or browsers that don't process them well.</p>
<h2>404 Errors</h2>
<p>The final piece I have been working on is to add a few 404 errors to pages where the user is searching or browsing.  The best example of this is the new tagging system.  Before with  the tagging system, if you entered a tag that didn't yet exist in the site, you would receive a blank page that didn't tell you anything about what happened.  This type of user interface leaves the user wondering "what happened? Did I do something wrong?".  In response to this, if you try to view a tag that doesn't exist yet, you will get a 404 error, as well as a friendly error message explaining what happened.</p>
]]></description>
</item>
<item>
<title>New Photography Coming</title>
<link>http://mortalpowers.com/news/new-photography-coming</link>
<pubDate>Fri, 22 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>I'm currently traveling in Arizona.  While I am here I am going to try to take a lot of pictures of the mountains and deserts and architecture.  I understand that this isn't very geek-oriented, but I feel that since we spend so much time indoors, photography plays the role of sharing some of what is out there with us.  I'm doing this because it is pretty difficult to undertake any major projects when working on my family's old Macintosh (Which is a very frustrating experience to say the least.  End key?  Does nothing!).</p>
<p>I understand that photos can never really capture the beauty or magnificence of really traveling and seeing places for yourself, but hopefully some of the photos I take are at least pretty to look at.</p>]]></description>
</item>
<item>
<title>Convert Apache Certificate for Courier</title>
<link>http://mortalpowers.com/news/convert-apache-certificate-for-courier</link>
<pubDate>Thu, 21 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>In the perfect small server linux setup, you are going to have a single server serving web pages, file storage, email, and possibly other services.  One of the most important things to do to a server like this is to enable others to security access it in an authenticated manner.  The only way to accomplish this is to use an SSL certificate.  SSL certificates are relatively simple for most things, and you can usually just point each of your configuration files to the certificate provided by your provider.  Unfortunately for mail servers, Courier expects an alternative form for the SSL certificate than that provided by many registrars (including Godaddy), meaning that you have to convert it.</p>
<h2>How to convert a certificate for Courier</h2>
<p>It is relatively simple to make the conversion once you know how.  Take the cert downloaded from godaddy (this file is typically a .crt file) and conver the cert to PEM using the following command</p>
<div class="code">sudo openssl x509 -in mortalpowers.crt -out key.pem -outform PEM</div>
<p>From there you need to take the PEM file and prepend the unlocked .key file into a new file ending in .pem.  The .key file would have been created by you when you originally made the Certificate Signing Request.  This key file contains your private key that allows you to decode the data provided by others using your public key, and forms the basis of the SSL system.</p>
<p>With this new .pem file in a safe place, point your imapd-ssl Courier configuration file to it, and you should be done,</p>

<p>Inspiration and tips for this article found at <a href="http://www.tnpi.net/wiki/Use_a_signed_SSL_certificate">http://www.tnpi.net/wiki/Use_a_signed_SSL_certificate</a>.</p>]]></description>
</item>
<item>
<title>Restart Ubuntu faster with kexec</title>
<link>http://mortalpowers.com/news/restart-ubuntu-faster-with-kexec</link>
<pubDate>Wed, 20 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>One of the longest and most time consuming parts of the bootup process for any computer is the fact that the default reboot process completely turns off the computer, and returns the CPU to the very first startup task, the BIOS.  BIOS initialization and POST does a lot of steps involving test and hardware detection and initialization.  When rebooting the computer, this doesn't really add any value, as these devices have already been detected and had their first initialization done.<p>
<p>This is where kexec comes in.  <span class="code">kexec</span> is a tool that allows Ubuntu (or any Linux distribution) to pass control between kernels directly.  This means that when rebooting, control never get's passed back to the BIOS for reboot, and no additional device testing or detection (beyond that required by linux) needs to be done.  For me, all of the initialization steps in the BIOS and GRUB before Linux takes over takes around 30-40 seconds.  This is a little bit longer than the average case, but I'm sure this is a problem for a lot of people.</p>
<h2>How to install kexec</h2>
<p>You can install kexec in Ubuntu using the following command:</p>
<div class="code">sudo apt-get install kexec</div>
<p>The installation will ask you if you want to replace the reboot process.  In order to have the benefits of skipping unnecessary steps in reboot, you need to choose the option that uses kexec for your reboot.</p>
<h2>What could go wrong?</h2>
<p>The only problem with this is when you are attempting to actually return to the BIOS, or if you want to go back to GRUB to choose another operating system in the case where you dual boot.  This isn't that big of a deal though.  Although I haven't found a way to pass control directly to GRUB or back to the BIOS, it is possible just to choose shutdown, and then turn the computer back on after the shutdown has completed.  It doesn't take any extra time, it just takes more effort as you need to press the power button on the computer.</p>]]></description>
</item>
<item>
<title>VirtualBox Error - Callee RC:  NS_ERROR_FACTORY_NOT_REGISTERED (0x80040154) </title>
<link>http://mortalpowers.com/news/virtualbox-error-callee-rc-ns_error_factory_not_registered-0x80040154-</link>
<pubDate>Tue, 19 Jan 2010 00:00:00 -0600</pubDate>
<description><![CDATA[<p>Running VirtualBox this evening failed completely with this error, as well as <strong>Failed to create the VirtualBox COM object</strong>.The issue appears to be again with VirtualBox's integration with the Linux AMD64 Kernel.</p>
<h2>Solution</h2>
<p>The solution (however unfortunate) appears to be simply to restart the machine.</p>]]></description>
</item>
</channel>
</rss>