<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Moparx</title><link href="http://moparx.com/" rel="alternate"></link><link href="http://moparx.com/atom.xml" rel="self"></link><id>http://moparx.com/</id><updated>2013-05-18T11:14:00-04:00</updated><entry><title>Fish 2.0: The Friendly Interactive Shell</title><link href="http://moparx.com/2013/05/fish-20-the-friendly-interactive-shell" rel="alternate"></link><updated>2013-05-18T11:14:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2013-05-18:2013/05/fish-20-the-friendly-interactive-shell</id><summary type="html">&lt;p&gt;The developers of &lt;a href="http://fishshell.com/"&gt;fish&lt;/a&gt;, the friendly interactive shell, released version 2.0 today and the discussions on both Reddit and Hacker News piqued my interest enough that I decided to install it.&lt;/p&gt;
&lt;p&gt;I've only been playing around with the shell for a little while now and I am quite impressed with it. Fish is very quick and comes with myriad of features such as auto-suggestions, tab completions, syntax highlighting, and an easy-to-use scripting syntax built-in and working right out of the box.&lt;/p&gt;
&lt;p&gt;It also bundles a tiny web server which allows you to configure various settings such as changing colors and switching between predefined prompts on-the-fly right from your web browser when you run &lt;code&gt;fish_config&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I have used zsh since late 2007 and I have to say that fish is an excellent shell which honestly gives zsh a run for its money in a lot of areas. In order to match most of fish's built-in features within zsh you have to install a plugin framework such as oh-my-zsh or other software.&lt;/p&gt;
&lt;p&gt;Regardless, both shells are absolutely great in their own right wand both have various capabilities that the other does not have.&lt;/p&gt;
&lt;p&gt;An important thing to note is that fish is not compliant with POSIX. This is an absolute deal breaker for some people, but others consider the non-compliance an advantage which leaves behind legacy 'baggage' that would compromise usability. &lt;/p&gt;
&lt;p&gt;I like fish enough that I plan on using it as my main shell for the next week so that I can give it a proper test run.&lt;/p&gt;
&lt;p&gt;If you would like some more information on fish, check out the following links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://fishshell.com/"&gt;Project Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fishshell.com/tutorial.html"&gt;Fish Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fishshell.com/docs/2.0/"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let me know what you think as well.&lt;/p&gt;</summary><category term="Software"></category></entry><entry><title>Impressions: My week with XMonad</title><link href="http://moparx.com/2013/04/impressions-my-week-with-xmonad" rel="alternate"></link><updated>2013-04-04T01:30:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2013-04-04:2013/04/impressions-my-week-with-xmonad</id><summary type="html">&lt;p&gt;I have been a fan of minimalistic window managers for a long time. It began when I first switched to Blackbox in 2002 and continued on as I migrated to newer Blackbox variants such as Fluxbox and then on to Openbox. Although, when I switched to Openbox in 2005 it had been rewritten and no longer shared any code with its predecessor.&lt;/p&gt;
&lt;p&gt;Openbox has remained my preferred stacking window manager and it probably always will be.&lt;/p&gt;
&lt;p&gt;However, about a week ago I became interested in trying out a tiling window manager for once and see how I liked it.&lt;/p&gt;
&lt;p&gt;I have a dual monitor setup with a plethora of windows constantly on the screen at any given time so the decision to try out a tiling window manager really was a no brainer. I did some basic research into a few of the popular tiling window managers that are available and installed a few as well so that I could get an initial feel for each of them.&lt;/p&gt;
&lt;p&gt;I seemed to gravitate more towards &lt;a href="http://xmonad.org"&gt;XMonad&lt;/a&gt; , a dynamic tiling window manager written in Haskel and licensed under the BSD 3-Clause "Revised" License, so after some deliberation I decided that it would be the one that I would be using.&lt;/p&gt;
&lt;p&gt;XMonad is also generally pretty predominant within the Desktop Screenshot threads on the Arch Linux forums so that helped sway my decision a bit as well along with the project's documentation which showed that it was a highly extendable and customizable.&lt;/p&gt;
&lt;p&gt;The amount of customization available did come with a price though. Even though I got the hang of things pretty quick it still took me a few days of reading through the documentation, inspecting various sample configuration files, and trying out parts that interested me before I was confident enough to create a configuration file of my own that I would truly be happy with.&lt;/p&gt;
&lt;p&gt;To be honest, each day that I spent tinkering with Xmonad was rather fun in a way. I truly enjoyed seeking what made it tick and learning what it was capable of doing. The Magnifier combined with the Grid layout quickly became my defacto setup for the monitor which held all my terminal windows and I also liked being able to create a prompt which enabled me to initiate searchs through &lt;a href="https://duckduckgo.com"&gt;DuckDuckGo&lt;/a&gt; and other search engines of my choosing right from my desktop.&lt;/p&gt;
&lt;p&gt;The past week with XMonad has been a great experience and I plan on using continuing to use it on my main computer. I have found that XMonad is an excellent tiling window manager which holds true to its claim that it proudly displays at the top of its website:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"In a normal WM, you spend half your time aligning and searching for windows. xmonad makes work easier, by automating this."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I would recommend that you at least give it a shot if you are on the fence or simply have a passing interest in it. XMonad can also be configured to integrate into the GNOME, KDE, or XFCE desktop environments should you be interested in doing that instead of running it standalone as it normally would.&lt;/p&gt;</summary></entry><entry><title>Adding new features to the jskomment commenting system</title><link href="http://moparx.com/2013/03/adding-new-features-to-the-jskomment-commenting-system" rel="alternate"></link><updated>2013-03-13T22:19:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2013-03-13:2013/03/adding-new-features-to-the-jskomment-commenting-system</id><summary type="html">&lt;p&gt;I had some free time today and I decided to make a few changes to jskomment so that I could implement a few features that I felt were missing.&lt;/p&gt;
&lt;p&gt;Here are the changes that I made:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Change Log:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;jskomment has been given an overall nicer design.&lt;/li&gt;
&lt;li&gt;The data is now sanitized when saved.&lt;/li&gt;
&lt;li&gt;If the name field is left blank it will be changed to 'Anonymous' rather than display a blank string.&lt;/li&gt;
&lt;li&gt;The time and date a comment was posted has now been added. It is customizable by defining &lt;code&gt;JSKOMMENT_DATE&lt;/code&gt; in the &lt;code&gt;jskomment.local.php&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Added the ability for a commenter to add their website.&lt;/li&gt;
&lt;li&gt;Added the ability for a commenter to leave their email address.&lt;/li&gt;
&lt;li&gt;Added very basic parsing for the Markdown syntax (Bold, Italics, and URLs).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can make the changes yourself or &lt;a href="http://moparx.com/files/jskomment-moparx.tar.gz"&gt;download&lt;/a&gt; a copy of the modified files that I have made available for you.&lt;/p&gt;
&lt;h2&gt;Making the changes&lt;/h2&gt;
&lt;h3&gt;CSS Changes&lt;/h3&gt;
&lt;p&gt;I restyled the way the comments, text-boxes, and submit button looked so that they were relatively pleasing to look at as jskomment's default style does not exactly win it any beauty contests. :) &lt;/p&gt;
&lt;p&gt;In the interest of time, you can acquire my updated CSS file &lt;a href="http://moparx.com/jskomment.css"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Modifying jskomment-core.js&lt;/h3&gt;
&lt;p&gt;Open &lt;code&gt;jskomment-core.js&lt;/code&gt; and find the following at line 141:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;oops, precondition failed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;ePoster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;span class=&amp;quot;jskomment_user&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;eContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;span class=&amp;quot;jskomment_commentval&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\n/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;br/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;eComment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_comment&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ePoster&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eContent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.jskomment_previous&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eComment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Replace it with: &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;oops, precondition failed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;ePoster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;span class=&amp;quot;jskomment_user&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;: &amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;eDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;span class=&amp;quot;jskomment_date&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;eContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;br /&amp;gt;&amp;lt;span class=&amp;quot;jskomment_commentval&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;commentEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\n/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;br/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;eComment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_comment&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ePoster&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eDate&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eContent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.jskomment_previous&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eComment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Find the following around line 214:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;jskomment_username&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;form class=&amp;quot;jskomment_form jskomment_add_comment&amp;quot;&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;input id=&amp;quot;title&amp;quot; type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_input1&amp;quot;&amp;gt;New comment from &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; size=&amp;quot;10&amp;quot;  value=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;quot;/&amp;gt;: &amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_commentval&amp;quot;&amp;gt;&amp;lt;textarea class=&amp;quot;jskomment_input2&amp;quot; rows=&amp;quot;6&amp;quot; cols=&amp;quot;32&amp;quot; name=&amp;quot;comment&amp;quot; value=&amp;quot;your comment&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_submit&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;jskomment_button&amp;quot; name=&amp;quot;submit&amp;quot; type=&amp;quot;submit&amp;quot; value=&amp;quot;submit&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;/form&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Replace it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;jskomment_username&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;form class=&amp;quot;jskomment_form jskomment_add_comment&amp;quot;&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;input id=&amp;quot;title&amp;quot; type=&amp;quot;hidden&amp;quot; name=&amp;quot;title&amp;quot; value=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;quot;/&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_input1&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;textbox&amp;quot; type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; placeholder=&amp;quot;Name&amp;quot; size=&amp;quot;30&amp;quot; maxlength=&amp;quot;60 value=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_input1&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;textbox&amp;quot; type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot; placeholder=&amp;quot;Email (It will not be shared)&amp;quot; size=&amp;quot;30&amp;quot; maxlength=&amp;quot;60 value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_input1&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;textbox&amp;quot; type=&amp;quot;text&amp;quot; name=&amp;quot;website&amp;quot; placeholder=&amp;quot;Website&amp;quot; size=&amp;quot;30&amp;quot; maxlength=&amp;quot;60 value=&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_commentval&amp;quot;&amp;gt;&amp;lt;textarea class=&amp;quot;jskomment_input2&amp;quot; cols=&amp;quot;60&amp;quot; rows=&amp;quot;5&amp;quot; name=&amp;quot;comment&amp;quot; value=&amp;quot;&amp;quot; placeholder=&amp;quot;Please be respectful to others in your comments.&amp;quot; /&amp;gt;&amp;lt;/div&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;div class=&amp;quot;jskomment_submit&amp;quot;&amp;gt;&amp;lt;input class=&amp;quot;jskomment_button&amp;quot; name=&amp;quot;submit&amp;quot; type=&amp;quot;submit&amp;quot; value=&amp;quot;submit&amp;quot;/&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;br /&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;You may use basic Markdown syntax in your post. **Bold**, __Italic__, and [Text](URL)&amp;#39;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;/form&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Modifying jskomment.php&lt;/h3&gt;
&lt;p&gt;Open &lt;code&gt;jskomment.php&lt;/code&gt; file and find the &lt;code&gt;get_comments()&lt;/code&gt; function near line 76 and replace it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;function &lt;/span&gt;get_comments&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; array&lt;span class="o"&gt;()&lt;/span&gt;;
  &lt;span class="nv"&gt;$fname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;DATADIR.sha1&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;;
  //echo &lt;span class="nv"&gt;$fname&lt;/span&gt;;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;file_exists&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fname&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    foreach&lt;span class="o"&gt;(&lt;/span&gt;file&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fname&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; as &lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nv"&gt;$comment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; markdown&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
      &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; json_decode&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$comment&lt;/span&gt;, &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt; // end &lt;span class="k"&gt;if&lt;/span&gt;
&lt;span class="k"&gt;  return&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;;
&lt;span class="o"&gt;}&lt;/span&gt;

/** Implements some very basic Markdown */
&lt;span class="k"&gt;function &lt;/span&gt;markdown&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$mdinput&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;$mdinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; preg_replace&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/\*\*(.*?)\*\*/&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span class="nv"&gt;$mdinput&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="nv"&gt;$mdinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; preg_replace&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/\*(.*?)\*/&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;&amp;lt;strong&amp;gt;$1&amp;lt;/strong&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span class="nv"&gt;$mdinput&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="nv"&gt;$mdinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; preg_replace&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/\_\_(.*?)\_\_/&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;&amp;lt;em&amp;gt;$1&amp;lt;/em&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span class="nv"&gt;$mdinput&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="nv"&gt;$mdinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; preg_replace&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;/\_(.*?)\_/&amp;quot;&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot;&amp;lt;em&amp;gt;$1&amp;lt;/em&amp;gt;&amp;quot;&lt;/span&gt;, &lt;span class="nv"&gt;$mdinput&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="nv"&gt;$mdinput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; preg_replace&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/\[(.*?)\]\s?\((.*?)\)/i&amp;#39;&lt;/span&gt;, &lt;span class="s1"&gt;&amp;#39;&amp;lt;a href=\&amp;quot;$2\&amp;quot; rel=\&amp;quot;nofollow\&amp;quot;&amp;gt;$1&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;, &lt;span class="nv"&gt;$mdinput&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$mdinput&lt;/span&gt;;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Next, you will need to find the &lt;code&gt;add_comment()&lt;/code&gt; function near line 130 and replace it with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;function &lt;/span&gt;add_comment&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;$comment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; check_recaptcha&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="nv"&gt;$fname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;DATADIR.sha1&lt;span class="o"&gt;(&lt;/span&gt;@&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;;

  // Check to see &lt;span class="k"&gt;if &lt;/span&gt;the user has defined how they want the comment date to look.
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;!defined&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;JSKOMMENT_DATE&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    @&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;M d, Y - g:i a&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    @&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; date&lt;span class="o"&gt;(&lt;/span&gt;JSKOMMENT_DATE&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="o"&gt;}&lt;/span&gt;

  // Strip any tabs or spaces from the name and website fields.
  &lt;span class="nv"&gt;$namecheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; trim&lt;span class="o"&gt;(&lt;/span&gt;@&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot; \t&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="nv"&gt;$websitecheck&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; trim&lt;span class="o"&gt;(&lt;/span&gt;@&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;website&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;, &lt;span class="s2"&gt;&amp;quot; \t&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;

  // Replace a  blank user name with Anonymous. If a name is given sanitize it.
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;empty&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$namecheck&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    @&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Anonymous&amp;#39;&lt;/span&gt;;
  &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    @&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; htmlspecialchars&lt;span class="o"&gt;(&lt;/span&gt;strip_tags&lt;span class="o"&gt;(&lt;/span&gt;@&lt;span class="nv"&gt;$comment&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;, ENT_NOQUOTES, &lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;;
  &lt;span class="o"&gt;}&lt;/span&gt;

  // Attach the commenter&lt;span class="s1"&gt;&amp;#39;s website to their name if included.&lt;/span&gt;
&lt;span class="s1"&gt;  if (!empty($websitecheck)) {&lt;/span&gt;
&lt;span class="s1"&gt;    @$comment[&amp;#39;&lt;/span&gt;website&lt;span class="s1"&gt;&amp;#39;] = htmlspecialchars(strip_tags(@$comment[&amp;#39;&lt;/span&gt;website&lt;span class="s1"&gt;&amp;#39;]), ENT_NOQUOTES, &amp;#39;&lt;/span&gt;utf-8&lt;span class="s1"&gt;&amp;#39;);&lt;/span&gt;
&lt;span class="s1"&gt;    // Markdown. It will be converted to a proper link when displayed.&lt;/span&gt;
&lt;span class="s1"&gt;    @$comment[&amp;#39;&lt;/span&gt;name&lt;span class="s1"&gt;&amp;#39;] = &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;. @$comment[&amp;#39;&lt;/span&gt;name&lt;span class="s1"&gt;&amp;#39;] . &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;](&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39; . @$comment[&amp;#39;&lt;/span&gt;website&lt;span class="s1"&gt;&amp;#39;]. &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;;&lt;/span&gt;
&lt;span class="s1"&gt;  }&lt;/span&gt;

&lt;span class="s1"&gt;  // Sanitize the remaining fields.&lt;/span&gt;
&lt;span class="s1"&gt;  @$comment[&amp;#39;&lt;/span&gt;email&lt;span class="s1"&gt;&amp;#39;] = htmlspecialchars(strip_tags(@$comment[&amp;#39;&lt;/span&gt;email&lt;span class="s1"&gt;&amp;#39;]), ENT_NOQUOTES, &amp;#39;&lt;/span&gt;utf-8&lt;span class="s1"&gt;&amp;#39;);&lt;/span&gt;
&lt;span class="s1"&gt;  @$comment[&amp;#39;&lt;/span&gt;comment&lt;span class="s1"&gt;&amp;#39;] = htmlspecialchars(strip_tags(@$comment[&amp;#39;&lt;/span&gt;comment&lt;span class="s1"&gt;&amp;#39;]), ENT_NOQUOTES, &amp;#39;&lt;/span&gt;utf-8&lt;span class="s1"&gt;&amp;#39;);&lt;/span&gt;

&lt;span class="s1"&gt;  $file  = fopen($fname, &amp;quot;a&amp;quot;);&lt;/span&gt;
&lt;span class="s1"&gt;  fputs($file,json_encode($comment).&amp;quot;\n&amp;quot;);&lt;/span&gt;
&lt;span class="s1"&gt;  fclose($file);&lt;/span&gt;
&lt;span class="s1"&gt;  return &amp;#39;&lt;/span&gt;&lt;span class="o"&gt;{}&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;; // &lt;span class="k"&gt;for &lt;/span&gt;json-p
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Adjust the time and day format for comments (Optional)&lt;/h3&gt;
&lt;p&gt;By default comments will have the following format: &lt;code&gt;Mar 13, 2013 - 7:31 pm&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;However, the time and day format is easily changed by defining &lt;code&gt;JSKOMMENT_DATE&lt;/code&gt; in the &lt;code&gt;jskomment.local.php&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Please see the &lt;a href="http://php.net/manual/function.date.php"&gt;PHP manual&lt;/a&gt; for available formatting options.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Supplying the following format would would make it look like 2013-03-13 19:22:31&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="cp"&gt;&amp;lt;?&lt;/span&gt;
    &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;JSKOMMENT_DATE&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Y-m-d H:i:s&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</summary></entry><entry><title>Implementing the jskomment open source commenting system within Pelican</title><link href="http://moparx.com/2013/03/implementing-the-jskomment-open-source-commenting-system-within-pelican" rel="alternate"></link><updated>2013-03-11T21:03:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2013-03-11:2013/03/implementing-the-jskomment-open-source-commenting-system-within-pelican</id><summary type="html">&lt;p&gt;In my earlier post I referred to &lt;a href="https://code.google.com/p/jskomment/"&gt;jskomment&lt;/a&gt;, the open source comment system that I use, and I thought that I would create a quick tutorial on setting it up and integrating it with &lt;a href="http://blog.getpelican.com/"&gt;Pelican&lt;/a&gt;.  &lt;/p&gt;
&lt;p&gt;However, This tutorial is easily adaptable for use with any website.&lt;/p&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://code.google.com/p/jskomment/"&gt;jskomment&lt;/a&gt; is an open source AJAX-powered commenting system. It is developed by Martin Monperrus and licensed under the MIT License.&lt;/p&gt;
&lt;p&gt;It is relatively light weight and comes with two server-side implementations. One is a Java version for use with the Google AppEngine and the other is PHP-powered. This tutorial deals solely with the PHP version.&lt;/p&gt;
&lt;p&gt;Additonally, jskomment is completely themable via CSS and offers the unique ability to support multiple discussion threads per page should someone wish to do so.&lt;/p&gt;
&lt;h2&gt;Getting started&lt;/h2&gt;
&lt;p&gt;In order to acquire jskomment you will need to clone a local copy of its repository with Mercurial by issuing the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;hg&lt;/span&gt; &lt;span class="n"&gt;clone&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//code.google.com/p/jskomment/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now that you have a copy of jskomment on your system we are going to need the PHP files from &lt;code&gt;jskomment/src/php/&lt;/code&gt; and the most of the files from &lt;code&gt;jskomment/war/&lt;/code&gt; as we do not need the &lt;code&gt;WEB-INF&lt;/code&gt; folder or the HTML files.&lt;/p&gt;
&lt;p&gt;I would also recommend that you take a moment to update the supplied json2.js file with a much more recent version available from &lt;a href="https://github.com/douglascrockford/JSON-js"&gt;https://github.com/douglascrockford/JSON-js&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Important File Change&lt;/h3&gt;
&lt;p&gt;jskomment does have one flaw which you need to fix before you go live with it. I discovered that it does not seem to properly sanitize the output so it will display any HTML that it is given. I created a very simple fix which will remove the ability to display HTML in comments.&lt;/p&gt;
&lt;p&gt;Open &lt;code&gt;jskomment.php&lt;/code&gt; and find the following line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="x"&gt;foreach(file($fname) as $comment) {&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Add the following piece of code directly under it and then save the file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="x"&gt;$comment = htmlspecialchars(strip_tags($comment), ENT_NOQUOTES, &amp;#39;utf-8&amp;#39;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I have emailed the developer about this issue and he will hopefully see it and apply a proper fix with his next release.&lt;/p&gt;
&lt;h2&gt;Website setup&lt;/h2&gt;
&lt;p&gt;Create the folder &lt;code&gt;jskomment&lt;/code&gt; in your website's root directory. You can do this through your FTP client or through SSH via issuing the following command in the proper web directory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="n"&gt;jskomment&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;You then need to upload all of jskomment's files to the directory.&lt;/p&gt;
&lt;p&gt;Next you will want to create the folder &lt;code&gt;jskomment-data&lt;/code&gt; within the &lt;code&gt;jskomment&lt;/code&gt; folder. This folder is where jskomment will store all of your comments. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="n"&gt;jskomment&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;jskomment&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In order for jskomment to work properly via PHP it needs a few entries added to your &lt;code&gt;.htaccess&lt;/code&gt; file which allow it to essentially pretend to be a JavaScript file. This is done by simply appending the following lines into your existing file or creating a new file if required:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;RewriteEngine on
&lt;span class="c"&gt;# serving the composite js file&lt;/span&gt;
RewriteRule ^jskomment/jskomment.js&lt;span class="nv"&gt;$ &lt;/span&gt;jskomment/jskomment.php?file&lt;span class="o"&gt;=&lt;/span&gt;jskomment.js &lt;span class="o"&gt;[&lt;/span&gt;QSA,L&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# test service&lt;/span&gt;
RewriteRule ^jskomment/t&lt;span class="nv"&gt;$ &lt;/span&gt;jskomment/jskomment.php?action&lt;span class="o"&gt;=&lt;/span&gt;t &lt;span class="o"&gt;[&lt;/span&gt;QSA,L&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# getting a list of comments&lt;/span&gt;
RewriteRule ^jskomment/s&lt;span class="nv"&gt;$ &lt;/span&gt;jskomment/jskomment.php?action&lt;span class="o"&gt;=&lt;/span&gt;s &lt;span class="o"&gt;[&lt;/span&gt;QSA,L&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# getting a list of list of comments&lt;/span&gt;
RewriteRule ^jskomment/sx&lt;span class="nv"&gt;$ &lt;/span&gt;jskomment/jskomment.php?action&lt;span class="o"&gt;=&lt;/span&gt;sx &lt;span class="o"&gt;[&lt;/span&gt;QSA,L&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# posting a new comment&lt;/span&gt;
RewriteRule ^jskomment/p&lt;span class="nv"&gt;$ &lt;/span&gt;jskomment/jskomment.php?action&lt;span class="o"&gt;=&lt;/span&gt;p &lt;span class="o"&gt;[&lt;/span&gt;QSA,L&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Once you have completed this the last step for you to do is to add jskomment to your HTML code where you want it to show up on the page.&lt;/p&gt;
&lt;p&gt;Edit your Pelican theme's article.html file and add the following directly above &lt;code&gt;{% if DISQUS_SITENAME %}&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;comments&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Comments?&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;jskomment&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{ SITEURL }}/{{ article.url }}&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{{ SITEURL }}/jskomment.js&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;JSKOMMENT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;{{ SITEURL }}/jskomment&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Save it and recreate your static HTML files via &lt;code&gt;make html&lt;/code&gt; as usual.&lt;br /&gt;
Once you have reuploaded your files you should have a working installation of jskomment.&lt;/p&gt;
&lt;p&gt;All that is left is for you to change how it looks so it suits the design of your website better.&lt;br /&gt;
You can do this by editing the CSS in jskomment.css to your liking.&lt;/p&gt;
&lt;h2&gt;Anti-Spam Support (Optional)&lt;/h2&gt;
&lt;p&gt;jskomment has built-in support for &lt;a href="https://www.google.com/recaptcha/"&gt;reCAPTCHA&lt;/a&gt; to help combat comment spam.
If you do not have an account you will need to get one as it requires a supplied public and private key to work.&lt;/p&gt;
&lt;p&gt;Open &lt;code&gt;jskomment-core.js&lt;/code&gt;. You will need to edit the lines that contain &lt;code&gt;JSKOMMENT.url =&lt;/code&gt; and &lt;code&gt;JSKOMMENT.recaptchaPublicKey =&lt;/code&gt; and adapt them to your website.&lt;/p&gt;
&lt;p&gt;It should look like the following when you are done.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="x"&gt;JSKOMMENT.url = &amp;#39;http://yourwebsite.com/jskomment&amp;#39;;&lt;/span&gt;
&lt;span class="x"&gt;JSKOMMENT.recaptchaPublicKey = &amp;quot;Your_reCAPTCHA_Public_Key&amp;quot;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Finally, you will need to create a file called &lt;code&gt;jskomment.local.php&lt;/code&gt; and insert the following code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="cp"&gt;&amp;lt;?&lt;/span&gt;
    &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;RECAPTCHA_PRIVATE_KEY&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Your_reCAPTCHA_PRIVATE_Key&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="x"&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Save and upload the two files and you will be done.&lt;/p&gt;</summary></entry><entry><title>Open source orientated websites and proprietary comment systems</title><link href="http://moparx.com/2013/03/open-source-orientated-websites-and-proprietary-comment-systems" rel="alternate"></link><updated>2013-03-10T21:14:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2013-03-10:2013/03/open-source-orientated-websites-and-proprietary-comment-systems</id><summary type="html">&lt;p&gt;I like to frequent a variety of websites and blogs which discuss and advocate open source software.&lt;/p&gt;
&lt;p&gt;Recently I had some time to kill and I did a few searches on DuckDuckGo in order find a few more decent ones to read.&lt;/p&gt;
&lt;p&gt;This prompted me to write this post in regards to emphasize the sole issue of using such services while simultaneously advocating open source software in the same breath. I have no comment regarding sites that do not fit this particular issue.&lt;/p&gt;
&lt;p&gt;As I have looked around I could not help but notice that a growing number of these websites are powering their comments section with Disqus, a closed source proprietary comment hosting service, instead of either using their website's built-in comment system or an equivalent open source system.&lt;/p&gt;
&lt;p&gt;Not only does using an external service like Disqus take various points of control away from the site owner, it also undermines the very principles that these sites are trying to convey when they promote open source software.&lt;/p&gt;
&lt;p&gt;If an external service goes down you can't do anything at all to bring it back online quickly and efficiently. All a site owner can do is wait and hope for the best.&lt;/p&gt;
&lt;p&gt;Also, if their database was ever compromised or corrupted in such away that your data could not be completely retrieved you would be unable fix it. While Disqus does allow you to export your comments for 'backup purposes only', it does not allow you to re-import that very data back into their ecosystem.&lt;/p&gt;
&lt;p&gt;The proprietary nature and lack of control is not the only issue in regards to using this service. If you read their privacy policy you will many issues from a privacy standpoint as well. They track user activity and usage patterns across a variety of websites through various means in addition to selling that personally identifiable information to third parties.&lt;/p&gt;
&lt;p&gt;I will concede that there are times when at least initially, a service like Disqus is the only easy method of attaining a comment system depending on the website or blogging platform they choose to deploy.&lt;/p&gt;
&lt;p&gt;Pelican, the open source static blog generator which I use for this site, is a great example of this. Because due to its very nature of providing solely static html files they have added Disqus as an optional feature for those who want a comments system with it.&lt;/p&gt;
&lt;p&gt;Other times it can simply come down to the fact that they are on a shared host and which restricts what they can run as some of the much nicer open source commenting systems like &lt;a href="https://github.com/phusion/juvia"&gt;Juvia&lt;/a&gt; and &lt;a href="http://talka.tv/"&gt;talkatv&lt;/a&gt; need additional software such as ruby or python and a back-end program running to work.&lt;/p&gt;
&lt;p&gt;I was looking for a simple light-weight PHP-based commenting system that I could add to Pelican and I quickly found &lt;a href="https://code.google.com/p/jskomment/"&gt;jskomment&lt;/a&gt;. It is AJAX-powered and although it obviously is not the fanciest system around it does exactly what I wanted.&lt;/p&gt;
&lt;p&gt;In conclusion, there is always an alternative to using a closed source environment and if you are going to promote open source software in any form you should take the time to make sure that you don't send mixed messages.&lt;/p&gt;
&lt;p&gt;If anyone knows of other excellent open source commenting systems please let me know and I'll add them to this article.&lt;/p&gt;</summary></entry><entry><title>Migrating to Pelican from Drupal</title><link href="http://moparx.com/2013/03/migrating-to-pelican-from-drupal" rel="alternate"></link><updated>2013-03-08T03:19:00-05:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2013-03-08:2013/03/migrating-to-pelican-from-drupal</id><summary type="html">&lt;h2&gt;What is Pelican?&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://blog.getpelican.com/"&gt;Pelican&lt;/a&gt; is a Python-powered static website generator which comes with a rather decent feature set. It allows you to write your blog entries in &lt;a href="http://docutils.sourceforge.net/rst.html"&gt;reStructuredText&lt;/a&gt;, &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;, or &lt;a href="http://www.methods.co.nz/asciidoc/index.html"&gt;AsciiDoc&lt;/a&gt; using any editor that you desire.&lt;/p&gt;
&lt;p&gt;It also supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Atom/RSS feeds.&lt;/li&gt;
&lt;li&gt;Code syntax highlighting.&lt;/li&gt;
&lt;li&gt;Integration with various services such as Disqus and Twitter.&lt;/li&gt;
&lt;li&gt;Optional PDF generation of your posts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is also possible to extend its capabilities through the usage of plugins.&lt;/p&gt;
&lt;p&gt;Installing Pelican and getting an initial website setup is as simple as following the &lt;a href="http://docs.getpelican.com/en/3.1.1/getting_started.html"&gt;Getting Started&lt;/a&gt; guide and answering the questions that come up when running &lt;code&gt;pelican-quickstart&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Why did I switch?&lt;/h2&gt;
&lt;p&gt;I want to preface this by saying that I still really like Drupal. I have been running it on various websites for almost a decade now so I will not be completely abandoning by any means. I'll eventually find another project which is much more suited to what it can do than my relatively humble blog.&lt;/p&gt;
&lt;p&gt;Why would I switch from a powerful and highly customizable content management system which I have used for years to a something that simply generates a static website? It is really interesting how things happen. &lt;/p&gt;
&lt;p&gt;To be perfectly honest, switching to a different blogging system wasn't something that I had planned on doing at all initially as I was pretty content with how things were. I discovered Pelican by sheer chance a few days ago and it intrigued me.&lt;/p&gt;
&lt;p&gt;The more I read the documentation and various posts about it online the more I liked it and wanted to try it out. In fact, I had originally decided to do this conversion from Drupal as a fun little side project to satisfy an itch. This itch of course branched into a myriad of reasons for why I wanted to give Pelican a real shot and let it run my actual website.&lt;/p&gt;
&lt;p&gt;One reason is that it allows me to quickly create a post, format it properly, and automatically add it to a category on the website by simply moving or saving the file into a directory with the category's name.&lt;/p&gt;
&lt;p&gt;Essentially, I found Pelican to be an elegant solution in my opinion as well as very simple to maintain and update.&lt;/p&gt;
&lt;h2&gt;Starting the Conversion&lt;/h2&gt;
&lt;p&gt;Pelican comes with an importer which allows you to import posts from Atom and RSS feeds.
This was my ticket to export all my posts within Drupal quickly and efficiently. &lt;/p&gt;
&lt;p&gt;I slightly modified the &lt;a href="https://drupal.org/project/atom"&gt;Atom feed module&lt;/a&gt; for Drupal, which normally has a cap of 100 posts, so that it would output all published nodes in the database.&lt;/p&gt;
&lt;p&gt;The importer allows you to convert the feed into a few formats. I personally chose to go with Markdown because that is the format I plan on using for all my future posts and I like to have consistency.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;pelican&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;feed&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;markdown&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;http://moparx.com/atom.xml&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The conversion went relatively well, but there were a few things that I needed to fix which consisted of leftover HTML and a bunch of newlines in each file.&lt;/p&gt;
&lt;p&gt;This is where sed comes into play and makes the problem extremely easy to fix.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# Removes all HTML   &lt;/span&gt;
sed -i &lt;span class="s1"&gt;&amp;#39;s/&amp;lt;[^&amp;gt;]\+&amp;gt;//g&amp;#39;&lt;/span&gt; *.md

&lt;span class="c"&gt;# Removes all double newlines  &lt;/span&gt;
sed -i &lt;span class="s1"&gt;&amp;#39;/./,/^$/!d&amp;#39;&lt;/span&gt; *.md
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I also decided that I wanted to switch my large image thumbnails to a smaller counterpart that was available so that they looked better on Pelican's default theme.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;sed -i &lt;span class="s1"&gt;&amp;#39;s/styles\/large/styles\/medium/g&amp;#39;&lt;/span&gt; *.md
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Finally, I began going through each post to add tags where relevant and to ensure that the slug would match the original post's URL.
As I was going through the posts containing screenshots and my photos I discovered that images linked via a thumbnail were not converted properly.&lt;/p&gt;
&lt;p&gt;After converting image links to the following format I was ready to go.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;Thumbnail&lt;/span&gt; &lt;span class="n"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;)](&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;large&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2&gt;Configuring Pelican&lt;/h2&gt;
&lt;p&gt;Pelican reads the configuration file each time it is run to regenerate the website.&lt;/p&gt;
&lt;p&gt;My configuration file was created with Clean URLs in mind because I think it simply looks better and even more importantly the URLs would match the original posts locations.&lt;/p&gt;
&lt;p&gt;I had really wanted to use the sitemap plugin as well, but I quickly discovered it simply does not work if the post's slug does not have a file extension appended to it.&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="c"&gt;# -*- coding: utf-8 -*- #&lt;/span&gt;

&lt;span class="n"&gt;AUTHOR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;u&amp;#39;Moparx&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SITENAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;u&amp;#39;Moparx&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SITESUBTITLE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;u&amp;#39;$ cat &amp;gt;&amp;gt; /dev/blog&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;SITEURL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://moparx.com&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;TIMEZONE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;America/New_York&amp;#39;&lt;/span&gt;

&lt;span class="n"&gt;DEFAULT_LANG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;u&amp;#39;en&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;DEFAULT_PAGINATION&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;

&lt;span class="n"&gt;MENUITEMS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Home&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://moparx.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;DEFAULT_CATEGORY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Articles&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;FILES_TO_COPY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;extra/.htaccess&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;.htaccess&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;extra/robots.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;robots.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),)&lt;/span&gt;
&lt;span class="n"&gt;STATIC_PATHS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;css&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;images&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;MD_EXTENSIONS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;codehilite&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;extra&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;MARKUP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;rst&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;md&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;THEME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;themes/moparx&amp;#39;&lt;/span&gt;

&lt;span class="c"&gt;#PLUGINS = [&amp;#39;pelican.plugins.sitemap&amp;#39;,]&lt;/span&gt;


&lt;span class="c"&gt;# ----------------------------------------------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# EXTERNAL LINKS&lt;/span&gt;
&lt;span class="c"&gt;# ----------------------------------------------------------------------&lt;/span&gt;

&lt;span class="c"&gt;# Recommended Sites&lt;/span&gt;
&lt;span class="n"&gt;LINKS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;DuckDuckGo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;https://duckduckgo.com/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;EFF.org&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;https://www.eff.org/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Project Honeypot&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;https://www.projecthoneypot.org/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),)&lt;/span&gt;

&lt;span class="c"&gt;# Social widget&lt;/span&gt;
&lt;span class="n"&gt;SOCIAL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;identi.ca&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;https://identi.ca/moparx&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;libre.fm&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://libre.fm/user-profile.php?user=moparx&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;reddit&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://reddit.com/user/Moparx/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;minecraft&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://mintyfreshcreepers.net&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),)&lt;/span&gt;


&lt;span class="c"&gt;# ----------------------------------------------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# URL PATHS&lt;/span&gt;
&lt;span class="c"&gt;# ----------------------------------------------------------------------&lt;/span&gt;

&lt;span class="c"&gt;# Configure Pelican to output Clean URLs&lt;/span&gt;
&lt;span class="n"&gt;ARTICLE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;{slug}&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;AUTHOR_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;author/{slug}&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;CATEGORY_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;category/{slug}&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;PAGE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="s"&gt;&amp;#39;{slug}&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;TAG_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;tags/{slug}&amp;#39;&lt;/span&gt;

&lt;span class="c"&gt;# Adjust save location to match previous files.&lt;/span&gt;
&lt;span class="n"&gt;PAGE_SAVE_AS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;{slug}.html&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;TAG_SAVE_AS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;tags/{slug}.html&amp;#39;&lt;/span&gt;

&lt;span class="c"&gt;# Atom and RSS feeds&lt;/span&gt;
&lt;span class="n"&gt;CATEGORY_FEED_ATOM&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;FEED_ALL_ATOM&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;atom.xml&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;FEED_ALL_RSS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;rss.xml&amp;#39;&lt;/span&gt;
&lt;span class="n"&gt;FEED_MAX_ITEMS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;


&lt;span class="c"&gt;# ----------------------------------------------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# PLUGINS&lt;/span&gt;
&lt;span class="c"&gt;# ----------------------------------------------------------------------&lt;/span&gt;

&lt;span class="n"&gt;SITEMAP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s"&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;xml&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s"&gt;&amp;#39;priorities&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;articles&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;indexes&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;pages&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;changefreqs&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;articles&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;monthly&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;indexes&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;daily&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;pages&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;monthly&amp;#39;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Additionally, I am using a slightly modified version of the default theme as I removed the ability for it to automatically add all available categories to the main menu.&lt;/p&gt;
&lt;p&gt;I'll probably be making my own theme soon anyway as there are possible licensing issues with Pelican's default theme from what I have been hearing.&lt;/p&gt;
&lt;h2&gt;Finalizing the setup&lt;/h2&gt;
&lt;p&gt;Since I modified all the slugs in the configuration file so that Pelican outputs Clean URLs, it was very important that I configured the server properly so that it knew what to do with them as well.&lt;/p&gt;
&lt;p&gt;This is the .htaccess file I have created to ensure things run smoothly.&lt;/p&gt;
&lt;p&gt;The important stuff is all after the aptly titled "Clean URLs" as it allows the Clean URLs to work as intended. If a visitor requests a post with .html extension attached it will strip the extension and redirect the visitor to the 'proper' URL. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# Don&amp;#39;t show directory listings.&lt;/span&gt;
Options -Indexes

&lt;span class="c"&gt;# Follow symbolic links.&lt;/span&gt;
Options +FollowSymLinks

&lt;span class="c"&gt;# Disable the server signature.&lt;/span&gt;
ServerSignature Off

&lt;span class="c"&gt;# Custom 404 error page.&lt;/span&gt;
ErrorDocument 404 /404.html

&lt;span class="c"&gt;# Clean URLs&lt;/span&gt;
RewriteEngine on
RewriteBase /

&lt;span class="c"&gt;# Remove any trailing slashes from URL    &lt;/span&gt;
RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;REQUEST_FILENAME&lt;span class="o"&gt;}&lt;/span&gt; !-f
RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;REQUEST_URI&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;.*&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
RewriteRule ^&lt;span class="o"&gt;(&lt;/span&gt;.+&lt;span class="o"&gt;)&lt;/span&gt;/&lt;span class="nv"&gt;$ &lt;/span&gt;http://moparx.com/&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;R&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;301,L&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# Redirect index.html to /    &lt;/span&gt;
RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;THE_REQUEST&lt;span class="o"&gt;}&lt;/span&gt; ^&lt;span class="o"&gt;[&lt;/span&gt;^/&lt;span class="o"&gt;]&lt;/span&gt;*/index&lt;span class="se"&gt;\.&lt;/span&gt;html &lt;span class="o"&gt;[&lt;/span&gt;NC&lt;span class="o"&gt;]&lt;/span&gt;
RewriteRule . / &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;R&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;301,L&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# Redirect pages with .html to the Clean URL &lt;/span&gt;
RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;REQUEST_FILENAME&lt;span class="o"&gt;}&lt;/span&gt; !-d
RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;THE_REQUEST&lt;span class="o"&gt;}&lt;/span&gt; ^GET&lt;span class="se"&gt;\ &lt;/span&gt;/&lt;span class="o"&gt;[&lt;/span&gt;^?&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;+&lt;span class="se"&gt;\.&lt;/span&gt;html
RewriteRule &lt;span class="o"&gt;(&lt;/span&gt;.*&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;html&lt;span class="nv"&gt;$ &lt;/span&gt;/&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;L,R&lt;span class="o"&gt;=&lt;/span&gt;301&lt;span class="o"&gt;]&lt;/span&gt;

RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;REQUEST_FILENAME&lt;span class="o"&gt;}&lt;/span&gt; !-d
RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;REQUEST_FILENAME&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;html -f
RewriteRule ^&lt;span class="o"&gt;(&lt;/span&gt;.*&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;$ $1&lt;/span&gt;.html

&lt;span class="c"&gt;# Redirect page queries to their new location    &lt;/span&gt;
RewriteCond %&lt;span class="o"&gt;{&lt;/span&gt;QUERY_STRING&lt;span class="o"&gt;}&lt;/span&gt; ^page&lt;span class="o"&gt;=([&lt;/span&gt;0-9&lt;span class="o"&gt;]&lt;/span&gt;+&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
RewriteRule ^&lt;span class="o"&gt;(&lt;/span&gt;.*&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;index%1.html
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I also created a robots.txt which tells web crawling bots that they are not allowed to access the author listing and the themes directory. This one is completely optional if you are pondering if you should use it or not.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;User-agent: *
Disallow: /author/
Disallow: /theme/
&lt;/pre&gt;&lt;/div&gt;</summary></entry><entry><title>Making the Switch: Moving on from Irssi and GNU Screen to WeeChat and tmux</title><link href="http://moparx.com/2012/12/making-switch-moving-irssi-and-gnu-screen-weechat-and-tmux" rel="alternate"></link><updated>2012-12-14T22:11:00-05:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-12-14:2012/12/making-switch-moving-irssi-and-gnu-screen-weechat-and-tmux</id><summary type="html">&lt;p&gt;I have used Irssi and GNU Screen together for what seems to have been
well over a decade now. Both applications do the job required of them
quite well and as such they have always been one of the first things I
installed an a fresh system.&lt;/p&gt;
&lt;p&gt;Unfortunately, neither of the projects has had an official release in
the past few years. This obviously isn't that big a deal of course since
the Git versions of both are readily available to anyone who chooses to
use them. I personally have used the Git version of GNU Screen for some
time now.&lt;/p&gt;
&lt;p&gt;A week ago I decided that I wanted to expand my horizons a bit and
branch out to other software to see how they compared against both
applications. Since WeeChat and tmux have been rapidly growing in
popularity they were the obvious choice for this impromptu test.&lt;/p&gt;
&lt;p&gt;My goal was to run them both for an entire week after configuring them
to my liking and see how things went. I will admit that I honestly fully
expected to switch back to Irssi and GNU Screen after things were all
said and done.&lt;/p&gt;
&lt;p&gt;As the title of this post has already alluded to, that didn't exactly
happen as I quickly discovered that I really liked both WeeChat and
tmux.&lt;/p&gt;
&lt;p&gt;While both applications do exactly the same thing as their respective
counterparts, they each had a lot little things that won me over. For
instance, tux's status line is much easier to configure and I like the
split pane implementation better than the one the Git version of GNU
Screen provides. The mouse support for it is a nice bonus as well.&lt;/p&gt;
&lt;p&gt;WeeChat has various features like SASL, Colorized Nick Names, and a Nick
list built-in that could only be incorporated into Irssi through the
usage of a third-party script.&lt;/p&gt;
&lt;p&gt;Although the respective scripts for Irssi work quite well on their own
and are admittedly mostly cosmetic in nature, I was nevertheless pleased
to see them built into WeeChat's core.&lt;/p&gt;
&lt;p&gt;Having SASL built into the client was somewhat important in my decision
to stay with WeeChat. I use it for every server that I connect to and
I've long felt that Irssi should have it built into its core as well.&lt;/p&gt;
&lt;p&gt;I also liked WeeChat's smart filtering, gestures implementation, and the
aspell plugin it comes with.&lt;/p&gt;
&lt;p&gt;In conclusion, all the applications are absolutely fantastic in their
own right and all of them have their own pros and cons to using them.&lt;/p&gt;
&lt;p&gt;It all boils down to personal preference in the end. In my case, both
WeeChat and tmux offered me things that their counterpart either lacked
or did not implement as well.&lt;/p&gt;
&lt;p&gt;That's not to say that they not lacking in areas as well. One example
would be that WeeChat does not have proper theme support. I must admit
that I wouldn't use it much, but it would be nice to have just the same.&lt;/p&gt;
&lt;p&gt;Even if you have no interest in ever switching from your preferred
terminal multiplexer or IRC client of choice, I hope this article makes
you consider giving their alternatives a try at least once.&lt;/p&gt;</summary><category term="Software"></category></entry><entry><title>My Firefox Setup</title><link href="http://moparx.com/2012/10/my-firefox-setup" rel="alternate"></link><updated>2012-10-18T17:19:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-10-18:2012/10/my-firefox-setup</id><summary type="html">&lt;p&gt;This post is more for my future reference than anything, but hopefully
it is useful to others as well. :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Browser Information:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Firefox with OpenSUSE's patches which allows it to integrate better into
KDE.  &lt;/p&gt;
&lt;p&gt;If you use Archlinux, it can be obtained through the AUR. The package
name is &lt;a href="https://aur.archlinux.org/packages.php?ID=32598" title="firefox-kde-opensuse"&gt;firefox-kde-opensuse&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Theme:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://oxygenkde.altervista.org/" title="Oxygen KDE"&gt;Oxygen KDE&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Imitates KDE's Oxygen style.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Extensions:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/adblock-plus/"&gt;Adblock Plus&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;It blocks advertisements just like the name implies.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/adblock-plus-pop-up-addon/"&gt;Adblock Plus Pop-up Addon&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Makes it easy to block pop-ups with Adblock Plus.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/autopager/"&gt;AutoPager&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Autoload the next page of a website in the background.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/betterprivacy/"&gt;BetterPrivacy&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Removes Flash "Super-Cookies".&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/cookie-monster/"&gt;Cookie Monster&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Comprehensive Cookie Management&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/cryptocat/"&gt;Cryptocat&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Lets you instantly set up encrypted conversations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/duckduckcomplete/"&gt;DuckDuckComplete!&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Shows answers, search results, or search suggestions from
DuckDuckGo! in the URL bar.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/duckduckgo-for-firefox/"&gt;DuckDuckGo for Firefox&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;DuckDuckGo enhancements for Firefox. (Adds DDG's Zero-Click
information to Google, Bing, etc)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/elemhidehelper/"&gt;Element Hiding Helper for Adblock Plus&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Helps you create element hiding rules for Adblock Plus to fight the
text ads.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/firegloves/"&gt;FireGloves&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Attempts to impede fingerprinting-based tracking.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://flashblock.mozdev.org/"&gt;Flashblock&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Replaces Flash objects with a button you can click to view them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/ghostery/"&gt;Ghostery&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Identifies and allows you to block the 3rd parties (web bugs) that
are hidden on the current page you're visiting. Web bugs include ad
networks, behavioral data collectors and web analytics providers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/https-finder/"&gt;HTTPS Finder&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Automatically detect and alert when SSL is available on a web page.
Automated rule creation for HTTPS Everywhere&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.eff.org/https-everywhere"&gt;HTTPS-Everywhere&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Automatically use HTTPS security on many sites.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/kde-wallet-password-integratio/"&gt;KDE Wallet password integration&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Enable passwords and form logins to be stored in KDE Wallet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/noscript/"&gt;NoScript&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Blocks JavaScript, Java, and other plugins on all sites except for
domains of your choice.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Oxygen KDE Options (Comes with the theme)  &lt;/p&gt;
&lt;p&gt;Allows you to tweak the appearance of the "Oxygen KDE" firefox theme&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/pdfjs/"&gt;PDF Viewer&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;PDF.js adds PDF reading capabilities to the browser using HTML5.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/priv3/"&gt;Priv3&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Helps protects you from being tracked by social networks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/reddit-enhancement-suite/"&gt;Reddit Enhancement Suite&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Enhances your experience on Reddit.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/addon/redirect-cleaner/"&gt;Redirect Cleaner&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Redirect Cleaner cleans Redirects from Links&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/refcontrol/"&gt;RefControl&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Control what gets sent as the HTTP Referer on a per-site basis.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/requestpolicy/"&gt;RequestPolicy&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Control which cross-site requests are allowed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/scriptish/"&gt;Scriptish&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;A user script manager for Firefox (A fork of Greasemonkey).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/suspend-background-tabs/"&gt;Suspend background tabs&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Suspends actions in background tabs until they become active again..&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/3497"&gt;United States English Spell-checker&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Spell-checker&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/webpg-firefox/"&gt;WebPG for Firefox&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Provides GnuPG/GPG/PGP related functions to Firefox.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Userscripts:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/118033"&gt;Ads Skipper&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Skips advertisements on download sites.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/135161"&gt;Anti-Anti-AdBlock&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Disables anti-adblocker script.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/30982"&gt;Jamendo Direct Ogg Download&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Rewrites Jamendo's album download links to point to the
direct-download Ogg Vorbis versions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/121261"&gt;Straight Google&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Remove Google's URL track redirection from Google Products.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/140770"&gt;Twitter Link Cleaner&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Converts t.co wrapped links to actual urls and does minimal
formatting on other wrappers (youtu.be, etc).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/121917"&gt;Twitter Promoted Killer&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Hide promoted tweets, promoted accounts and promoted trends on
Twitter.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/151139"&gt;Youtube Forced HTML5 Player&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Plays Youtube videos in container (Works with embedded videos as
well).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://userscripts.org/scripts/show/97145"&gt;userscripts.org Bullshit Filter&lt;/a&gt;  &lt;/p&gt;
&lt;p&gt;Hides scripts for popular browser games and social networks as well
as scripts that use "foreign" characters in description.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Firefox Configuration Tweaks:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;about:home modified to use DuckDuckGo (&lt;a href="http://help.duckduckgo.com/customer/portal/articles/216441-firefox"&gt;Instructions&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;browser.cache.disk.parent_directory = /dev/shm/firefox&lt;/li&gt;
&lt;li&gt;browser.cache.memory.enable = false&lt;/li&gt;
&lt;li&gt;browser.cache.offline.enable = false&lt;/li&gt;
&lt;li&gt;browser.search.defaultenginename = DuckDuckGo&lt;/li&gt;
&lt;li&gt;keyword.URL = &lt;/li&gt;
&lt;li&gt;mousewheel.withnokey.numlines = 7&lt;/li&gt;
&lt;li&gt;mousewheel.withnokey.sysnumlines = false&lt;/li&gt;
&lt;/ul&gt;</summary><category term="Firefox"></category></entry><entry><title>A blast from the past. My former online community and beyond.</title><link href="http://moparx.com/2012/09/blast-past-my-former-online-community-and-beyond" rel="alternate"></link><updated>2012-09-07T15:35:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-09-07:2012/09/blast-past-my-former-online-community-and-beyond</id><summary type="html">&lt;p&gt;A member of a defunct community that I ran for eight years recently
showed up on my site and it got me thinking about the past and how much
fun we all had back then. It dawned on me that people from my old
community might be interested in knowing what I have been doing these
past few years, so this post is mostly geared towards them.&lt;/p&gt;
&lt;p&gt;Since the closure of that community, I have been operating &lt;a href="http://mintyfreshcreepers.net/" title="Minty Fresh Creepers"&gt;Minty Fresh
Creepers&lt;/a&gt;, a Survival PvE (Player vs. Environment) Minecraft Server,
which has been active for nearly two years now.&lt;/p&gt;
&lt;p&gt;It has a friendly and tight-knit community behind it and overall it is a
great place to be.&lt;/p&gt;
&lt;p&gt;If you play Minecraft and are looking for a server to play on I highly
recommend Minty Fresh Creepers (although I'm obviously biased since I
run it).  &lt;/p&gt;
&lt;p&gt;However, even if you don't have Minecraft you are welcome to hang out on
our community forums if you desired.&lt;/p&gt;</summary><category term="Gaming"></category></entry><entry><title>Simplifeed: A new open source social network</title><link href="http://moparx.com/2012/09/simplifeed-new-open-source-social-network" rel="alternate"></link><updated>2012-09-01T21:26:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-09-01:2012/09/simplifeed-new-open-source-social-network</id><summary type="html">&lt;p&gt;While browsing Reddit today I discovered Simplifeed, a sleek new open
source social network created by &lt;a href="http://dominicmcphee.com/"&gt;Dominic McPhee&lt;/a&gt;, and after playing
around with it far a little bit I have to say that it is great so far.&lt;/p&gt;
&lt;p&gt;Simplifeed is an elegant and simplistic service which is currently in
alpha and distributed under the GPLv3 license.&lt;/p&gt;
&lt;p&gt;You can &lt;a href="https://github.com/dfmcphee/simplifeed" title="download the source code"&gt;download the source code&lt;/a&gt; from GitHub, or &lt;a href="http://simplifeed.me" title="create an account"&gt;create an
account&lt;/a&gt; on the site and check it out for yourself.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://moparx.com/images/upload/Simplifeed.png"&gt;&lt;img alt="Simplifeed" src="http://moparx.com/images/upload/Simplifeed-thumb.png" /&gt;&lt;/a&gt;&lt;/p&gt;</summary></entry><entry><title>KDE-orientated usergroup on deviantART</title><link href="http://moparx.com/2012/05/kde-orientated-usergroup-deviantart" rel="alternate"></link><updated>2012-05-22T22:04:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-05-22:2012/05/kde-orientated-usergroup-deviantart</id><summary type="html">&lt;p&gt;I recently started using deviantART again after a rather long hiatus and
it seems that the Linux community on it has grown considerably.&lt;/p&gt;
&lt;p&gt;These days it has user-groups for a variety of desktop environments,
window managers, and miscellaneous Linux-orientated projects.  &lt;/p&gt;
&lt;p&gt;However, I discovered that deviantART surprisingly lacked a KDE-centric
user-group so I decided to create one.&lt;/p&gt;
&lt;p&gt;The user-group is a relatively standard group which focuses on curating
KDE desktop screen shots, icons, themes, and wallpapers.  &lt;/p&gt;
&lt;p&gt;If you would like to check it out you can visit it at &lt;a href="http://kde-users.deviantart.com/"&gt;http://kde-users.deviantart.com/&lt;/a&gt;&lt;/p&gt;</summary><category term="KDE"></category></entry><entry><title>mutt-kz: A new mutt fork</title><link href="http://moparx.com/2012/05/mutt-kz-new-mutt-fork" rel="alternate"></link><updated>2012-05-15T04:27:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-05-15:2012/05/mutt-kz-new-mutt-fork</id><summary type="html">&lt;p&gt;I stumbled upon a relatively new fork of mutt recently called mutt-kz.&lt;/p&gt;
&lt;p&gt;It is a project which was created with the purpose of modernizing mutt
by heavily integrating notmuch, a fast mail indexer, into the client.
This integration provides mutt-kz with the ability to have full-text
searching, tagging, virtual folders, and more.&lt;/p&gt;
&lt;p&gt;After compiling it and configuring the virtual folders and tags to my
liking, I have to say that I am quite pleased with mutt-kz. It's now my
defacto replacement for mutt on my machines.&lt;/p&gt;
&lt;p&gt;If you are interested, you can &lt;a href="https://github.com/karelzak/mutt-kz/"&gt;download&lt;/a&gt; the source code or learn
more about it by heading over to the &lt;a href="https://github.com/karelzak/mutt-kz/wiki"&gt;Wiki&lt;/a&gt; and &lt;a href="http://admin.fedoraproject.org/mailman/listinfo/mutt-kz"&gt;Mailing list&lt;/a&gt;.&lt;/p&gt;</summary><category term="Software"></category></entry><entry><title>May 2012 Screenshot #2</title><link href="http://moparx.com/2012/05/may-2012-screenshot-2" rel="alternate"></link><updated>2012-05-13T20:55:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-05-13:2012/05/may-2012-screenshot-2</id><summary type="html">&lt;p&gt;&lt;a href="http://moparx.com/files/images/screenshots/2012-05-13_moparx_0.png"&gt;&lt;img alt="Openbox Desktop Screenshot - May 2012" src="http://moparx.com/files/styles/medium/public/images/screenshots/2012-05-13_moparx_0.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another screenshot for the month. This one of course featuring my
Openbox install.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Information:&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;Wallpaper: &lt;a href="http://lassekongo83.deviantart.com/art/eCO-Wallpapers-153472704"&gt;eCO&lt;/a&gt;&lt;br /&gt;
VIM color scheme: &lt;a href="http://www.vim.org/scripts/script.php?script_id=2140"&gt;xoria256&lt;/a&gt;&lt;br /&gt;
Terminal colors: &lt;a href="http://moparx.com/files/configs/Xresources"&gt;My config file&lt;/a&gt;.&lt;br /&gt;
Compositing / Effects: &lt;a href="http://cairo-compmgr.tuxfamily.org/"&gt;Cairo Composite Manager&lt;/a&gt;&lt;br /&gt;
Browser: &lt;a href="http://uzbl.org/"&gt;uzbl&lt;/a&gt;&lt;/p&gt;</summary><category term="KDE"></category></entry><entry><title>May 2012 Screenshot</title><link href="http://moparx.com/2012/05/may-2012-screenshot" rel="alternate"></link><updated>2012-05-13T17:46:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-05-13:2012/05/may-2012-screenshot</id><summary type="html">&lt;p&gt;&lt;a href="http://moparx.com/files/images/screenshots/2012-05-13_moparx.png"&gt;&lt;img alt="KDE Desktop Screenshot - May 2012" src="http://moparx.com/files/styles/medium/public/images/screenshots/2012-05-13_moparx.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Information:&lt;/strong&gt;  &lt;/p&gt;
&lt;p&gt;Plasma Theme: A combination of &lt;a href="http://kde-look.org/content/show.php/Amakage?content=150285"&gt;Amakage&lt;/a&gt; and &lt;a href="http://kde-look.org/content/show.php/nowardev+2+Transparent+Dark+wall+paper?content=149014"&gt;nowardev 2&lt;/a&gt;&lt;br /&gt;
Icons: &lt;a href="http://kde-look.org/content/show.php/elementary+USU?content=148128"&gt;elementary USU&lt;/a&gt;&lt;br /&gt;
Plasma Widget: &lt;a href="http://kde-look.org/content/show.php/Current+Song?content=129891"&gt;Current Song&lt;/a&gt;&lt;br /&gt;
Wallpaper: &lt;a href="http://lassekongo83.deviantart.com/art/curtns-203686694"&gt;curtns&lt;/a&gt;&lt;br /&gt;
Conky: &lt;a href="http://moparx.com/files/configs/conkyrc"&gt;My config file&lt;/a&gt;.&lt;/p&gt;</summary><category term="KDE"></category></entry><entry><title>What podcasts does everyone recommend listening too?</title><link href="http://moparx.com/2012/05/what-podcasts-does-everyone-recommend-listening-too" rel="alternate"></link><updated>2012-05-13T14:00:00-04:00</updated><author><name>Moparx</name></author><id>tag:moparx.com,2012-05-13:2012/05/what-podcasts-does-everyone-recommend-listening-too</id><summary type="html">&lt;p&gt;Podcasts are an excellent way to pass the time and it has been awhile
since I updated my list to include 'new' shows.  &lt;/p&gt;
&lt;p&gt;What are some podcasts that you recommend listening too?&lt;/p&gt;
&lt;p&gt;The podcasts I currently listen too:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2600: Off the Hook (&lt;a href="http://www.2600.com/oth-broadband.xml"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;2600: Off the Wall (&lt;a href="http://www.2600.com/otw-broadband.xml"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Buzz Out Loud (&lt;a href="http://buzzoutloudpodcast.cnet.com/"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Common Sense with Dan Carlin (&lt;a href="http://feeds.feedburner.com/dancarlin/commonsense?format=xml"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Dan Carlin's Hardcore History (&lt;a href="http://feeds.feedburner.com/dancarlin/history?format=xml"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;No Agenda (&lt;a href="http://mevio.com/feeds/noagenda.xml"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The 404 (&lt;a href="http://the404podcast.cnet.com/"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Skeptics' Guide to the Universe (&lt;a href="http://www.theskepticsguide.org/feed/rss.aspx?feed=sgu"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The Skeptics' Guide 5X5 (&lt;a href="http://www.theskepticsguide.org/feed/rss.aspx?feed=5x5"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;this WEEK in TECH (&lt;a href="http://leoville.tv/podcasts/twit.xml"&gt;RSS&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;</summary><category term="Podcast"></category></entry></feed>