<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Root Cause by Randy Johnson</title>
    <link>https://randyjohnson.me/blog/</link>
    <atom:link href="https://randyjohnson.me/blog/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Field notes from fixing production: Linux, NGINX and OpenResty, the JVM, Lucee, PHP, Node and MySQL.</description>
    <language>en-us</language>
    <lastBuildDate>Wed, 14 Oct 2026 12:00:00 GMT</lastBuildDate>
    <item>
      <title>NGINX truncating large responses? Check your proxy_temp ownership</title>
      <link>https://randyjohnson.me/blog/nginx-truncated-responses-proxy-temp</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/nginx-truncated-responses-proxy-temp</guid>
      <pubDate>Wed, 14 Oct 2026 12:00:00 GMT</pubDate>
      <description>The page loads, the status is 200, and the HTML just stops. The cause was one line in NGINX&#39;s error log.</description>
      <content:encoded><![CDATA[<p>A page on one of our environments started cutting off partway down. The status code was 200, there was no error page, and the HTML simply stopped in the middle of a section.</p>
<p>The browser&#39;s network panel made the size of the problem obvious. The truncated response came back at about <strong>471 KB</strong>. The same page on production was about <strong>1.13 MB</strong>.</p>
<h2>The tell: it only happens to big responses</h2>
<p>If small responses are fine and large ones get cut off, think about buffering before you think about application code.</p>
<p>With <code>proxy_buffering on</code> (the default), NGINX reads the upstream response into memory buffers (<code>proxy_buffers</code>, <code>proxy_buffer_size</code>). When a response is bigger than those buffers can hold, NGINX spools the overflow to a temporary file under <code>proxy_temp_path</code> and streams it to the client from there.</p>
<p>If NGINX can&#39;t open that temporary file, it can&#39;t hold the rest of the response. The client has already received the headers and part of the body, so you get a truncated page with a 200 status instead of an error.</p>
<h2>The one line that explained it</h2>
<p>The answer was in NGINX&#39;s error log:</p>
<pre><code>[crit] ... open() &quot;/usr/local/openresty/nginx/proxy_temp/...&quot; failed (13: Permission denied) while reading upstream
</code></pre>
<p>NGINX tried to create a temp file and the kernel refused.</p>
<h2>Why the permissions were wrong</h2>
<p>On that box, the NGINX <code>user</code> directive had been changed at some point. The workers there ran as <code>lucee</code>, while production ran them as <code>nobody</code>. The hashed subdirectories inside <code>proxy_temp</code> were created back when the workers still ran as <code>nobody</code>, and they were still <code>0700 nobody:nobody</code>.</p>
<p>That&#39;s an easy one to miss. At startup NGINX makes sure the top-level temp directories belong to the worker user, but it doesn&#39;t walk the hashed subdirectories (<code>levels=1:2</code>) already inside them. So the top-level directory looks correct, and the subdirectories one level down are locked to the old user.</p>
<pre><code class="language-bash"># What user are the workers running as?
ps -o user=,cmd= -C nginx | grep worker

# Who owns the temp tree, all the way down?
find /usr/local/openresty/nginx/proxy_temp -maxdepth 2 -printf &#39;%u:%g %m %p\n&#39; | head
</code></pre>
<h2>The fix</h2>
<p>Give the temp trees to the worker user and reload:</p>
<pre><code class="language-bash">WORKER_USER=lucee
for d in proxy_temp client_body_temp fastcgi_temp uwsgi_temp scgi_temp; do
  [ -d &quot;/usr/local/openresty/nginx/$d&quot; ] &amp;&amp; chown -R &quot;$WORKER_USER:&quot; &quot;/usr/local/openresty/nginx/$d&quot;
done
openresty -t &amp;&amp; systemctl reload openresty
</code></pre>
<p><code>proxy_temp</code> was the one that bit here. The others fail the same way, though. <code>client_body_temp</code> breaks large uploads, and <code>fastcgi_temp</code> breaks large PHP responses, so fix them all at once.</p>
<p>Adjust the paths for a stock NGINX package (usually <code>/var/cache/nginx/...</code>). If SELinux is enforcing and NGINX runs confined, also check the directories&#39; labels with <code>ls -Z</code>.</p>
<h2>Keeping it from coming back</h2>
<ul>
<li><strong>Treat the <code>user</code> directive and the temp-directory ownership as one change.</strong> If your config management sets <code>user</code>, have the same role set ownership on the temp paths.</li>
<li><strong>Diff environments, not just files.</strong> Staging and production had the same templates but a different worker user, and that drift is the whole bug. Worth a check across the fleet:<pre><code class="language-bash">ansible web -m shell -a &quot;ps -o user= -C nginx | sort | uniq -c&quot;
</code></pre>
</li>
<li><strong>Alert on <code>[crit]</code> in the NGINX error log.</strong> This one wrote a clear message on every truncated request, and nobody was watching for it.</li>
</ul>
<h2>The short version</h2>
<p>If NGINX returns 200 but large pages are cut off, search the error log for <code>Permission denied</code> on a <code>*_temp</code> path. Then compare the worker user to the owner of the hashed subdirectories, not just the top-level directory.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Help! Where is my Sublime Context Menu option</title>
      <link>https://randyjohnson.me/blog/help-where-is-my-sublime-context-menu-option</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/help-where-is-my-sublime-context-menu-option</guid>
      <pubDate>Fri, 21 Nov 2025 12:00:00 GMT</pubDate>
      <description>How do I get the Open with Sublime Context Menu option back? </description>
      <content:encoded><![CDATA[<p>After I upgraded to Windows 11, my Sublime Text right-click context menu disappeared. Putting this here for my future reference, and hope it helps the next person. Cheers!</p>
<pre><code class="language-bash">@echo off
REM Add Sublime Text to Windows 11 Right-Click Context Menu
REM Run this batch file as Administrator

echo Adding Sublime Text to context menu...
echo.

REM Check if Sublime Text exists at the specified path
if not exist &quot;C:\Program Files\Sublime Text\sublime_text.exe&quot; (
    echo ERROR: Sublime Text not found at &quot;C:\Program Files\Sublime Text\sublime_text.exe&quot;
    echo Please verify the installation path.
    echo.
    pause
    exit /b 1
)

REM Add context menu for folders
reg add &quot;HKEY_CLASSES_ROOT\Directory\shell\OpenWithSublime&quot; /ve /t REG_SZ /d &quot;Open with Sublime Text&quot; /f
reg add &quot;HKEY_CLASSES_ROOT\Directory\shell\OpenWithSublime&quot; /v &quot;Icon&quot; /t REG_SZ /d &quot;C:\\Program Files\\Sublime Text\\sublime_text.exe,0&quot; /f
reg add &quot;HKEY_CLASSES_ROOT\Directory\shell\OpenWithSublime\command&quot; /ve /t REG_SZ /d &quot;\&quot;C:\\Program Files\\Sublime Text\\sublime_text.exe\&quot; \&quot;%%1\&quot;&quot; /f

REM Add context menu for folder background (right-click inside folder)
reg add &quot;HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithSublime&quot; /ve /t REG_SZ /d &quot;Open with Sublime Text&quot; /f
reg add &quot;HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithSublime&quot; /v &quot;Icon&quot; /t REG_SZ /d &quot;C:\\Program Files\\Sublime Text\\sublime_text.exe,0&quot; /f
reg add &quot;HKEY_CLASSES_ROOT\Directory\Background\shell\OpenWithSublime\command&quot; /ve /t REG_SZ /d &quot;\&quot;C:\\Program Files\\Sublime Text\\sublime_text.exe\&quot; \&quot;%%V\&quot;&quot; /f

echo.
echo Sublime Text has been added to the context menu!
echo You can now right-click on folders to open them in Sublime Text.
echo.
pause
</code></pre>
]]></content:encoded>
    </item>
    <item>
      <title>How to search and replace text in VIM</title>
      <link>https://randyjohnson.me/blog/how-to-search-and-replace-text-in-vim</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-search-and-replace-text-in-vim</guid>
      <pubDate>Wed, 11 Dec 2024 12:00:00 GMT</pubDate>
      <description>This post is short and sweet for now. I plan on adding more commands as I get more familiar with VIM.
Today I wanted to search and replace text in a JSON file using VIM.
Turns out it is rather easy.
:%s/&quot;login&quot;/&quot;username&quot;/g

In my situation I needed ...</description>
      <content:encoded><![CDATA[<p>This post is short and sweet for now. I plan on adding more commands as I get more familiar with VIM.</p>
<p>Today I wanted to search and replace text in a JSON file using VIM.</p>
<p>Turns out it is rather easy.</p>
<pre><code class="language-bash">:%s/&quot;login&quot;/&quot;username&quot;/g
</code></pre>
<p>In my situation I needed to include the quotes too and it handled it just fine. Go VIM.</p>
]]></content:encoded>
    </item>
    <item>
      <title>GIT fatal: refusing to merge unrelated histories</title>
      <link>https://randyjohnson.me/blog/git-fatal-refusing-to-merge-unrelated-histories</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/git-fatal-refusing-to-merge-unrelated-histories</guid>
      <pubDate>Mon, 25 Nov 2024 12:00:00 GMT</pubDate>
      <description>This is a short and sweet post. I often will start a project by initializing my project with git locally:
git init .

I then went to GitHub and created the project there. I chose a license file since this was a public repository.
That created the ini...</description>
      <content:encoded><![CDATA[<p>This is a short and sweet post. I often will start a project by initializing my project with git locally:</p>
<pre><code class="language-bash">git init .
</code></pre>
<p>I then went to GitHub and created the project there. I chose a license file since this was a public repository.</p>
<p>That created the initial commit, adding the license file.</p>
<p>So, when I added the remote to my local repository, I had 2 separate main branches.</p>
<p>Turns out I lucked out this time because I was at the very beginning of my project.</p>
<p>The following command saved the day:</p>
<pre><code class="language-bash">pull origin main --allow-unrelated-histories
</code></pre>
<p>I am not sure of the drawbacks of doing this, but at this stage of the project, I am not too worried about it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to install VirtualBox Guest Additions on Ubuntu Server Commandline</title>
      <link>https://randyjohnson.me/blog/how-to-install-virtualbox-guest-additions-on-ubuntu-server-commandline</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-install-virtualbox-guest-additions-on-ubuntu-server-commandline</guid>
      <pubDate>Tue, 02 Apr 2024 12:00:00 GMT</pubDate>
      <description>This morning, I struggled to get Guest Additions installed on my Ubuntu Server VBox, which I am going to use to prepare a codebase for migration to Linux.
It has been a while since Digital Ocean droplets are inexpensive to fire up and use.
Here are t...</description>
      <content:encoded><![CDATA[<p>This morning, I struggled to get Guest Additions installed on my Ubuntu Server VBox, which I am going to use to prepare a codebase for migration to Linux.</p>
<p>It has been a while since Digital Ocean droplets are inexpensive to fire up and use.</p>
<p>Here are the commands I used today to get everything going.</p>
<pre><code class="language-bash"># Make sure your system is up to date
sudo apt update
sudo apt upgrade

# Install packages to get the party started
sudo apt install build-essential dkms linux-headers-$(uname -r)

# At this point I rebooted.  Not sure if it was necessary.
sudo reboot

# Here is where I inserted the Guest Edition ISO from
# Devices -&gt; Insert Guest Additions CD Image...

# I did not have a mount point set so nothing was working.
sudo mkdir /media/cdrom

# Mount the CD
sudo mount /dev/cdrom /media/cdrom

# Run the install
cd /media/cdrom
sudo ./VBoxLinuxAdditions.run

# Reboot for everything to take hold.
sudo reboot
</code></pre>
<p>Guest Editions ISO Screenshot</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1712054415803/11bb90c0-2ddc-4d9f-bf10-e666c231e73b.png" alt=""></p>
]]></content:encoded>
    </item>
    <item>
      <title>How to get the last 10 queries by table name in MySQL</title>
      <link>https://randyjohnson.me/blog/how-to-get-the-last-10-queries-by-table-name-in-mysql</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-get-the-last-10-queries-by-table-name-in-mysql</guid>
      <pubDate>Fri, 14 Apr 2023 12:00:00 GMT</pubDate>
      <description>Last 10 queries
I had a situation where I wanted to check if some SQL changes I made were working properly.
It involved a transaction with a bunch of queries. Yes I could verify the data but I wanted to visually see the queries that my scripts were g...</description>
      <content:encoded><![CDATA[<p>Last 10 queries</p>
<p>I had a situation where I wanted to check if some SQL changes I made were working properly.</p>
<p>It involved a transaction with a bunch of queries. Yes I could verify the data but I wanted to visually see the queries that my scripts were generating.</p>
<p>Turning on the general query log was not an option for me because of the amount of queries that get run every second.</p>
<p>During my DB research I found MySQL’s performance schema.</p>
<p>This query here will show you the last 10 statements that were ran for a particular table in a particular database.</p>
<p>I did see that if you do not prefix your tables with the db name in your query you’ll have to remove the line that looks for the db table.</p>
<p><code>SELECT event_id, event_name, sql_text, timer_wait FROM performance_schema.events_statements_history_long WHERE sql_text LIKE &#39;%TABLE_NAME%&#39; AND sql_text LIKE &#39;%DATABASE_NAME%&#39; ORDER BY timer_start DESC LIMIT 10;</code></p>
<p>MySQL’s performance schema tables look awesome. I feel like there is a lot of untapped awesomness there that I need to research to help me as a programmer as well as helping me when I wear by DBA hat.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to find out the size of your database tables</title>
      <link>https://randyjohnson.me/blog/how-to-find-out-the-size-of-your-database-tables</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-find-out-the-size-of-your-database-tables</guid>
      <pubDate>Thu, 13 Apr 2023 12:00:00 GMT</pubDate>
      <description>Today I needed to find out which one of my database tables was taking up all my space.
Here is how to to see the size in MB
Here is how to see the size in GB</description>
      <content:encoded><![CDATA[<p>Today I needed to find out which one of my database tables was taking up all my space.</p>
<p>Here is how to to see the size in MB</p>
<p>Here is how to see the size in GB</p>
]]></content:encoded>
    </item>
    <item>
      <title>Querying rows that are 5 minutes old or more</title>
      <link>https://randyjohnson.me/blog/querying-rows-that-are-5-minutes-old-or-more</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/querying-rows-that-are-5-minutes-old-or-more</guid>
      <pubDate>Thu, 13 Apr 2023 12:00:00 GMT</pubDate>
      <description>Querying rows that are older than 5 minutes 
I recently had a couple separate tasks running on the same database and I wanted to make sure that the second task did not interefere with the other task.
To help with this I made sure that the second task...</description>
      <content:encoded><![CDATA[<p>Querying rows that are older than 5 minutes</p>
<p>I recently had a couple separate tasks running on the same database and I wanted to make sure that the second task did not interefere with the other task.</p>
<p>To help with this I made sure that the second task waited for 5 minutes before grabbing the data.</p>
<p>Here is how you do that in MySQL</p>
<pre><code>SELECT * FROM your_table_name WHERE datecreated &lt;= NOW() - INTERVAL 5 MINUTE;
</code></pre>
]]></content:encoded>
    </item>
    <item>
      <title>Boy I wish there was a way to create a table from a select query</title>
      <link>https://randyjohnson.me/blog/boy-i-wish-there-was-a-way-to-create-a-table-from-a-select-query</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/boy-i-wish-there-was-a-way-to-create-a-table-from-a-select-query</guid>
      <pubDate>Sat, 23 May 2020 12:00:00 GMT</pubDate>
      <description>I was doing some SQL work today when I had a thought:

Boy I wish there was a way to create a table from a select query

I started in Navicat to see if it was possible.  After find nothing I decided to google it all the while thinking in my head how ...</description>
      <content:encoded><![CDATA[<p>I was doing some SQL work today when I had a thought:</p>
<blockquote>
<p>Boy I wish there was a way to create a table from a select query</p>
</blockquote>
<p>I started in Navicat to see if it was possible.  After find nothing I decided to google it all the while thinking in my head how I was going to create a script to do this if I couldn&#39;t find anything.</p>
<p>I found something. I was happy yet sad.  Happy because I didn&#39;t have to take the time to create something.  Sad because I didn&#39;t have to create the tool.  It sounded like a fun project.</p>
<p>What did I find you ask? </p>
<p>The &quot;Create Table as&quot; statement.</p>
<p>CREATE TABLE [ IF NOT EXISTS ] new_table [ AS ]
  SELECT expressions
  FROM existing_tables
  [WHERE conditions];</p>
<p>The best part about it is the statement knows to go to the existing tables to get the column type, size etc.   Such a tremendous time saver.  I cannot believe in all my years of programming I never stumbled upon this type of statement.</p>
<p>Source: <a href="https://www.techonthenet.com/mysql/tables/create_table_as.php">Tech on the Net</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Adding Custom JDBC Options to your cfconfig datasource</title>
      <link>https://randyjohnson.me/blog/adding-custom-jdbc-options-to-your-cfconfig-datasource</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/adding-custom-jdbc-options-to-your-cfconfig-datasource</guid>
      <pubDate>Sun, 17 May 2020 12:00:00 GMT</pubDate>
      <description>I was getting a weird timezone error when connecting to a MySQL 8 database.
The server time zone value &#39;EDT&#39; is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configurat...</description>
      <content:encoded><![CDATA[<p>I was getting a weird timezone error when connecting to a MySQL 8 database.</p>
<p>The server time zone value &#39;EDT&#39; is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.</p>
<p>I was able to get around this by adding a custom jdbc option to my datasource:</p>
<p>cfconfig datasource save name=test dbdriver=mysql host=localhost port=3306 database=testdb username=randy password=test custom=&quot;serverTimezone=America/New_York&quot;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Git GUI for Windows</title>
      <link>https://randyjohnson.me/blog/git-gui-for-windows</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/git-gui-for-windows</guid>
      <pubDate>Wed, 13 Nov 2013 12:00:00 GMT</pubDate>
      <description>This past weekend I needed to upload code to github.  I chose to use the GitHub for Windows which made it painless.  
Today I decided to research and see what other GUI clients I could find for GIT.  
I stumbled upon SourceTree  by Atlassian Software...</description>
      <content:encoded><![CDATA[<p>This past weekend I needed to upload code to github.  I chose to use the GitHub for Windows which made it painless.</p>
<p>Today I decided to research and see what other GUI clients I could find for GIT.</p>
<p>I stumbled upon <a href="http://sourcetreeapp.com/">SourceTree</a>  by Atlassian Software.</p>
<p>It was really easy to setup a local repository as well as connecting to GitHub.</p>
<p>My favorite feature so far besides the ease of use is the dashboard that shows you the files that need committed and the diff details right beside it.</p>
<p>Here is a screenshot:</p>
<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoyuMQVauKVs64ZSrccuugIIzAjJxiFGJukZKuhLRI-CFhFbc-cziDtRlWiPq0kKl-p48cg6ELoat8oBCw89vHOKe9b_4yZA9qz14byxil8uMOGZYndMm9bPn-1mEdF5m3E2HQy-4i1tI/s1600/screengit.PNG"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1711119346445/1055c1dd-abe1-4d8a-8243-abb7dd2c7080.png" alt=""></a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Handy JS Functions</title>
      <link>https://randyjohnson.me/blog/handy-js-functions</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/handy-js-functions</guid>
      <pubDate>Mon, 01 Jul 2013 12:00:00 GMT</pubDate>
      <description>Converting a string to an integer  
http://www.w3schools.com/jsref/jsref_parseint.asp  
Javascript For Loop  
http://www.w3schools.com/js/js_loop_for.asp</description>
      <content:encoded><![CDATA[<p>Converting a string to an integer</p>
<p><a href="http://www.w3schools.com/jsref/jsref_parseint.asp">http://www.w3schools.com/jsref/jsref_parseint.asp</a></p>
<p>Javascript For Loop</p>
<p><a href="http://www.w3schools.com/js/js_loop_for.asp">http://www.w3schools.com/js/js_loop_for.asp</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>UPS - User Id and Shipper Number combination is not qualified to receive negotiated rates.</title>
      <link>https://randyjohnson.me/blog/ups-user-id-and-shipper-number-combination-is-not-qualified-to-receive-negotiated-rates</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/ups-user-id-and-shipper-number-combination-is-not-qualified-to-receive-negotiated-rates</guid>
      <pubDate>Mon, 10 Sep 2012 12:00:00 GMT</pubDate>
      <description>Today I started to receive the following message from the UPS API:  
User Id and Shipper Number combination is not qualified to receive negotiated rates.  
and to make matters worse, the result of this issue caused the checkout process to error preve...</description>
      <content:encoded><![CDATA[<p>Today I started to receive the following message from the UPS API:</p>
<p><strong>User Id and Shipper Number combination is not qualified to receive negotiated rates.</strong></p>
<p>and to make matters worse, the result of this issue caused the checkout process to error preventing our customers from finishing their orders.</p>
<p>So after doing a little research on my end I ended up calling the UPS technical support phone number for the United States:</p>
<p>Over the phone we went over the following steps:</p>
<p>UPS.COM
You must add and authenticate your account using Account Summary to view Negotiated Rates in UPS Internet Shipping, Time and Cost Calculator on ups.com, and the UPS Developer Kit - Shipping and Rating APIs.</p>
<p>To add and authenticate an account:</p>
<p>1. Login to ups.com using your My UPS ID and password.
2. Select the My UPS tab at the top of the page.
3. Select Account Summary from the navigation menu or the tab rollover.
4. From there select Add an Existing UPS Account.
5. Follow the steps to authenticate the account. To authenticate your account you will need the following information from your most recent UPS invoice: invoice date, amount due, invoice number, and control number.</p>
<p>Normally this should work but for us it did not because we already did those steps. My case was escalated and I am waiting for a call back.</p>
<p>I disabled UPS on the website so our customers could still place an order.  Now I can breath a little easier.</p>
<p>I will update this post with the resolution as it becomes available.</p>
<p>*UPDATE at 1:57pm*
UPS called me back and told me there is a global outage for negotiated rates.  They estimate a minimum of 2 hours to restore access.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Jetty Locking Files on Windows</title>
      <link>https://randyjohnson.me/blog/jetty-locking-files-on-windows</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/jetty-locking-files-on-windows</guid>
      <pubDate>Thu, 23 Aug 2012 12:00:00 GMT</pubDate>
      <description>I went to edit a css file today on a server an OpenBD Jetty install and the file was locked.  After doing some research I found this http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows  
I chose to just stop and restart Jetty because I was...</description>
      <content:encoded><![CDATA[<p>I went to edit a css file today on a server an OpenBD Jetty install and the file was locked.  After doing some research I found this <a href="http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows">http://docs.codehaus.org/display/JETTY/Files+locked+on+Windows</a></p>
<p>I chose to just stop and restart Jetty because I was on a dev box.  The instructions seem to be straight forward.</p>
<p>My question is though.  If I disable the memory mapped files will there a performance degradation?</p>
]]></content:encoded>
    </item>
    <item>
      <title>PostgreSQL 9.1 installation guide</title>
      <link>https://randyjohnson.me/blog/postgresql-91-installation-guide</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/postgresql-91-installation-guide</guid>
      <pubDate>Mon, 06 Aug 2012 12:00:00 GMT</pubDate>
      <description>I found this wiki article today about on how to install PostgreSQL 9.1 on CentOS.  It was very easy to do.</description>
      <content:encoded><![CDATA[<p>I found this <a href="http://wiki.postgresql.org/wiki/YUM_Installation">wiki</a> article today about on how to install PostgreSQL 9.1 on CentOS.  It was very easy to do.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to determine which version of PostgreSQL you are running</title>
      <link>https://randyjohnson.me/blog/how-to-determine-which-version-of-postgresql-you-are-running</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-determine-which-version-of-postgresql-you-are-running</guid>
      <pubDate>Tue, 31 Jul 2012 12:00:00 GMT</pubDate>
      <description>Run this SQL command to see which version of PostgreSQL you are running:  
select version();
Reference: PostgreSQL Wiki</description>
      <content:encoded><![CDATA[<p>Run this SQL command to see which version of PostgreSQL you are running:</p>
<p>select version();</p>
<p>Reference: <a href="http://wiki.postgresql.org/wiki/FAQ">PostgreSQL Wiki</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>How did I manage to forget my railo admin password?</title>
      <link>https://randyjohnson.me/blog/how-did-i-manage-to-forget-my-railo-admin-password</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-did-i-manage-to-forget-my-railo-admin-password</guid>
      <pubDate>Thu, 07 Jun 2012 12:00:00 GMT</pubDate>
      <description>I have no idea how it happened but I forgot and apparently failed to document my railo admin password.  Luckily a quick Google search pointed me in the right direction.  
Here is the link:  
Railo Admin Password Reset</description>
      <content:encoded><![CDATA[<p>I have no idea how it happened but I forgot and apparently failed to document my railo admin password.  Luckily a quick Google search pointed me in the right direction.</p>
<p>Here is the link:</p>
<p><a href="http://blog.getrailo.com/post.cfm/resetting-password-for-the-railo-admin">Railo Admin Password Reset</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>How to see what packages are installed using YUM</title>
      <link>https://randyjohnson.me/blog/how-to-see-what-packages-are-installed-using-yum</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-see-what-packages-are-installed-using-yum</guid>
      <pubDate>Mon, 07 May 2012 12:00:00 GMT</pubDate>
      <description>I am getting ready to do a database migration.  While putting my project plan and documentation together I needed a way to find out what postgres packages were installed on the server.  
This command does the trick.  
yum list installed | grep &quot;postg...</description>
      <content:encoded><![CDATA[<p>I am getting ready to do a database migration.  While putting my project plan and documentation together I needed a way to find out what postgres packages were installed on the server.</p>
<p>This command does the trick.</p>
<p>yum list installed | grep &quot;postgres&quot;</p>
]]></content:encoded>
    </item>
    <item>
      <title>SPF Record for Google Apps and Sendgrid</title>
      <link>https://randyjohnson.me/blog/spf-record-for-google-apps-and-sendgrid</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/spf-record-for-google-apps-and-sendgrid</guid>
      <pubDate>Mon, 09 Apr 2012 12:00:00 GMT</pubDate>
      <description>Today I needed to update the SPF record for two domains that the email is hosted on Google Apps for Domains.  
The websites are hosted on the Rackspace Cloud and use Sendgrid.  
Here is the SPF record to use:  
v=spf1 include:_spf.google.com include:...</description>
      <content:encoded><![CDATA[<p>Today I needed to update the SPF record for two domains that the email is hosted on Google Apps for Domains.</p>
<p>The websites are hosted on the Rackspace Cloud and use Sendgrid.</p>
<p>Here is the SPF record to use:</p>
<p><strong>v=spf1 include:_spf.google.com</strong> <strong>include:sendgrid.net</strong> <strong>~all</strong></p>
]]></content:encoded>
    </item>
    <item>
      <title>Test your apache config file</title>
      <link>https://randyjohnson.me/blog/test-your-apache-config-file</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/test-your-apache-config-file</guid>
      <pubDate>Thu, 29 Mar 2012 12:00:00 GMT</pubDate>
      <description>Test your apache config file  
This is a quick note to remind you about the command to test your apache config file before actually restarting apache:  
You can check your configuration files for syntax errors without starting the server by using apa...</description>
      <content:encoded><![CDATA[<p>Test your apache config file</p>
<p>This is a quick note to remind you about the command to test your apache config file before actually restarting apache:</p>
<p>You can check your configuration files for syntax errors without starting the server by using <code>apachectl configtest</code> or the <code>-t</code> command line option.</p>
<p>Source: <a href="http://httpd.apache.org/docs/2.2/configuring.html">Apache Docs</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Basic iptables rules: open a port to one IP address</title>
      <link>https://randyjohnson.me/blog/iptables-open-a-port-to-one-ip</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/iptables-open-a-port-to-one-ip</guid>
      <pubDate>Fri, 23 Mar 2012 12:00:00 GMT</pubDate>
      <description>**Here is some basic iptable rules.  Thanks goes to the cloud support team at Rackspace.    
This rule appends the rule.  This particular rule  opens inbound port 5432 to the ipaddress 111.222.33.44**  
iptables -A RH-Firewall-1-INPUT -p tcp -s 111.2...</description>
      <content:encoded><![CDATA[<p>**Here is some basic iptable rules.  Thanks goes to the cloud support team at Rackspace.  </p>
<p>This rule appends the rule.  This particular rule  opens inbound port 5432 to the ipaddress 111.222.33.44**</p>
<p><strong>iptables -A RH-Firewall-1-INPUT -p tcp -s 111.222.33.44 --dport 5432 -j ACCEPT</strong></p>
<p><strong>This rule inserts the rule at the start of the chain.</strong>  </p>
<p><strong>iptables -I RH-Firewall-INPUT -s 111.222.33.44 -p tcp -m tcp --dport 5432 -j ACCEPT</strong></p>
<p>**
After adding rules you need to issue this command to save the rules.**</p>
<p>service iptables save</p>
<p><strong>After saving you need to issue the restart command</strong></p>
<p>service iptables restart</p>
<p>If you want to see the available chains in your firewall use this command:</p>
<p>iptables -L</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to do a cfdump in cfscript</title>
      <link>https://randyjohnson.me/blog/how-to-do-a-cfdump-in-cfscript</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-do-a-cfdump-in-cfscript</guid>
      <pubDate>Thu, 22 Mar 2012 12:00:00 GMT</pubDate>
      <description>Today I needed to do a cfdump in cfscript.  
Turns out this is easy in Coldfusion 9:  
WriteDump (var, output, format, abort, label, metainfo, top, show, hide, keys, expand, showUDFs);
My Example:  
WriteDump (var=results,output=true,format=&quot;html&quot;,ab...</description>
      <content:encoded><![CDATA[<p>Today I needed to do a cfdump in cfscript.</p>
<p>Turns out this is easy in Coldfusion 9:</p>
<p>WriteDump (var, output, format, abort, label, metainfo, top, show, hide, keys, expand, showUDFs);</p>
<p>My Example:</p>
<p>WriteDump (var=results,output=true,format=&quot;html&quot;,abort=true);</p>
<p><a href="http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WS5A998FA0-0173-4be8-9548-680E8F40A5F2.html">Adobe Help</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>Using Vacuumdb  in PostgreSQL</title>
      <link>https://randyjohnson.me/blog/using-vacuumdb-in-postgresql</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/using-vacuumdb-in-postgresql</guid>
      <pubDate>Thu, 22 Mar 2012 12:00:00 GMT</pubDate>
      <description>I read in the PostgreSQL docs that vacuumdb or vacuum should be used on the databases every day. I have been running it manually the last couple of days and it has made a difference on query response times. I highly recommend using it.  
To vacuum on...</description>
      <content:encoded><![CDATA[<p>I read in the PostgreSQL docs that vacuumdb or vacuum should be used on the databases every day. I have been running it manually the last couple of days and it has made a difference on query response times. I highly recommend using it.</p>
<p>To vacuum one database from the command line.</p>
<p><strong>vacuumdb -d MyDB -v  -z -U postgres</strong></p>
<p>To vacuum one database from the command line.</p>
<p><strong>vacuumdb -a -v  -z -U postgres</strong></p>
<p>-d = database name
-v = verbose output
-z = analyze
-U = username
-a = vacuum all databases</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to create a database in PostgreSQL</title>
      <link>https://randyjohnson.me/blog/how-to-create-a-database-in-postgresql</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-create-a-database-in-postgresql</guid>
      <pubDate>Tue, 20 Mar 2012 12:00:00 GMT</pubDate>
      <description>Today I needed to create a database with SQL_ASCII encoding.  
Here is the command I used:  
CREATE DATABASE MyDB ENCODING &#39;SQL_ASCII&#39; TEMPLATE template0;
I had to use template0 because template1 was set to UTF8.  
I still need to dig in on the templ...</description>
      <content:encoded><![CDATA[<p>Today I needed to create a database with SQL_ASCII encoding.</p>
<p>Here is the command I used:</p>
<p>CREATE DATABASE MyDB ENCODING &#39;SQL_ASCII&#39; TEMPLATE template0;</p>
<p>I had to use template0 because template1 was set to UTF8.</p>
<p>I still need to dig in on the templates and what they are all about.</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to exit a psql command prompt</title>
      <link>https://randyjohnson.me/blog/how-to-exit-a-psql-command-prompt</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-exit-a-psql-command-prompt</guid>
      <pubDate>Mon, 19 Mar 2012 12:00:00 GMT</pubDate>
      <description>I had trouble figuring out how to exit the psql command prompt today in PostgreSQL. After reviewing the docs I found it rather easy. \q (back slash q)</description>
      <content:encoded><![CDATA[<p>I had trouble figuring out how to exit the psql command prompt today in PostgreSQL. After reviewing the docs I found it rather easy. \q (back slash q)</p>
]]></content:encoded>
    </item>
    <item>
      <title>How to Find and Uninstall a Package Using RPM</title>
      <link>https://randyjohnson.me/blog/how-to-find-and-uninstall-a-package-using-rpm</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-find-and-uninstall-a-package-using-rpm</guid>
      <pubDate>Mon, 19 Mar 2012 12:00:00 GMT</pubDate>
      <description>Today I needed to be able to find a package and uninstall the package.  HowToForge saved the day with a great forum post  
To find packages:  
rpm -qa | grep -i webmin
To unistall the package:  
rpm -e 
If you need to uninstall more than one package ...</description>
      <content:encoded><![CDATA[<p>Today I needed to be able to find a package and uninstall the package.  <a href="http://www.howtoforge.com/forums/showthread.php?t=8">HowToForge</a> saved the day with a great forum post</p>
<p>To find packages:</p>
<p>rpm -qa | grep -i webmin</p>
<p>To unistall the package:</p>
<p>rpm -e <package name></p>
<p>If you need to uninstall more than one package at a time</p>
<p>rpm -e <package name> <package name> <package name></p>
]]></content:encoded>
    </item>
    <item>
      <title>How to resume a ctrl-z stopped job</title>
      <link>https://randyjohnson.me/blog/how-to-resume-a-ctrl-z-stopped-job</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/how-to-resume-a-ctrl-z-stopped-job</guid>
      <pubDate>Mon, 19 Mar 2012 12:00:00 GMT</pubDate>
      <description>Today before I knew how to exit a psql command prompt in PostgreSQL I used ctrl-z to exit. I wanted to get back into psql so I went to Google to find out how. This time SuperUser.com came to my rescue.  
It is as simple as this:  
fg  
Read the post ...</description>
      <content:encoded><![CDATA[<p>Today before I knew how to exit a psql command prompt in PostgreSQL I used ctrl-z to exit. I wanted to get back into psql so I went to Google to find out how. This time <a href="http://superuser.com/questions/268230/how-can-i-resume-a-stopped-job-in-linux">SuperUser.com</a> came to my rescue.</p>
<p>It is as simple as this:</p>
<p>fg</p>
<p>Read the post for other options, but the above is what I needed.  Worked like a charm</p>
]]></content:encoded>
    </item>
    <item>
      <title>Installing PostgreSQL Server</title>
      <link>https://randyjohnson.me/blog/installing-postgresql-server</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/installing-postgresql-server</guid>
      <pubDate>Mon, 19 Mar 2012 12:00:00 GMT</pubDate>
      <description>I found this article today when looking for an install guide of PostgreSQL Server on CentOS 5.  I had to switch the install commands to 91 but it went smoothly.  
An Almost Idiots Guide To Install PostgreSQL 9.0 With YUM</description>
      <content:encoded><![CDATA[<p>I found this article today when looking for an install guide of PostgreSQL Server on CentOS 5.  I had to switch the install commands to 91 but it went smoothly.</p>
<p><a href="http://www.postgresonline.com/journal/archives/203-postgresql90-yum.html">An Almost Idiots Guide To Install PostgreSQL 9.0 With YUM</a></p>
]]></content:encoded>
    </item>
    <item>
      <title>PostgreSQL on the command line</title>
      <link>https://randyjohnson.me/blog/postgresql-on-the-command-line</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/postgresql-on-the-command-line</guid>
      <pubDate>Sat, 17 Mar 2012 12:00:00 GMT</pubDate>
      <description>I am just getting back into PostgreSQL.  Here are the things I had to learn today:  
1.  Command line usage:  

su - postgres
psql
select version();

2.  Dumping data for import on another server  

pg_dump -o mydb -U postgres -W &gt; mydb.sql

-o has t...</description>
      <content:encoded><![CDATA[<p>I am just getting back into PostgreSQL.  Here are the things I had to learn today:</p>
<p>1.  Command line usage:</p>
<ul>
<li>su - postgres</li>
<li>psql</li>
<li>select version();</li>
</ul>
<p>2.  Dumping data for import on another server</p>
<ul>
<li><p><strong>pg_dump -o mydb -U postgres -W &gt; mydb.sql</strong></p>
</li>
<li><p>-o has to do with oids (Not sure if I need this yet)</p>
</li>
<li><p>-U is for user</p>
</li>
<li><p>-W is for password.  It prompts when you run the command</p>
</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>IIS 7  Coldfusion  500 error</title>
      <link>https://randyjohnson.me/blog/iis-7-coldfusion-500-error</link>
      <guid isPermaLink="true">https://randyjohnson.me/blog/iis-7-coldfusion-500-error</guid>
      <pubDate>Fri, 16 Mar 2012 12:00:00 GMT</pubDate>
      <description>This is a reminder to people that might be getting a 500 error when creating a site in IIS7 with coldfusion support.  I used the Coldfusion web config tool but was still getting a 500 error.  I then remembered it was a 64bit machine but it was Coldfu...</description>
      <content:encoded><![CDATA[<p>This is a reminder to people that might be getting a 500 error when creating a site in IIS7 with coldfusion support.  I used the Coldfusion web config tool but was still getting a 500 error.  I then remembered it was a 64bit machine but it was Coldfusion was 32bit.  I had to go into the advance settings for the application pool and set Enable 32-bit Applications to true.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
