<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>👨🏻‍💻 Tobybase</title><link>https://tobybase.com/</link><description>Recent content on 👨🏻‍💻 Tobybase</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 05 Sep 2025 09:08:53 -0500</lastBuildDate><atom:link href="https://tobybase.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Running EMCLI in a Windows VDI Environment</title><link>https://tobybase.com/posts/emcli-on-windows-vdi/</link><pubDate>Fri, 05 Sep 2025 09:08:53 -0500</pubDate><guid>https://tobybase.com/posts/emcli-on-windows-vdi/</guid><description>&lt;h1 id="running-emcli-in-a-windows-vdi-environment">
 Running EMCLI in a Windows VDI Environment
 &lt;a class="heading-link" href="#running-emcli-in-a-windows-vdi-environment">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h1>
&lt;p>As part of a recent project, I needed to use Oracle Enterprise Manager’s &lt;code>emcli&lt;/code> (Enterprise Manager Command Line Interface) tool from within a Windows-based virtual desktop infrastructure (VDI). While Oracle provides documentation for &lt;code>emcli&lt;/code>, running it in a Windows shell—especially in a corporate VDI environment with OneDrive integration—introduces some quirks.&lt;/p>
&lt;p>This post walks through the exact setup I used, including installing a compatible JRE, dealing with long Windows paths, and securely authenticating with OEM.&lt;/p></description></item><item><title>Adding a Search Bar to the Blog With Pagefind.app</title><link>https://tobybase.com/posts/blog-search-with-pagefind/</link><pubDate>Wed, 23 Jul 2025 17:36:07 -0500</pubDate><guid>https://tobybase.com/posts/blog-search-with-pagefind/</guid><description>&lt;h1 id="adding-a-search-bar-to-tobybase-with-pagefind">
 Adding a Search Bar to Tobybase with Pagefind
 &lt;a class="heading-link" href="#adding-a-search-bar-to-tobybase-with-pagefind">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h1>
&lt;p>After letting Tobybase sit idle for a while, I&amp;rsquo;m kicking things back into gear—and what better way to start than by implementing one of the most requested features: &lt;strong>search&lt;/strong>.&lt;/p>
&lt;p>I decided to use &lt;a href="https://pagefind.app/" class="external-link" target="_blank" rel="noopener">Pagefind&lt;/a>, a modern, privacy-friendly search solution built for static sites. It&amp;rsquo;s easy to set up and works well with Hugo, the static site generator that powers this blog. However, integrating it into a GitHub Pages deployment workflow took a little trial and error. Here&amp;rsquo;s how I got it working.&lt;/p></description></item><item><title>'Invalid Format' Error Connecting to Server with SSH and Private Key</title><link>https://tobybase.com/posts/invalid-format-connecting-to-server-with-ssh/</link><pubDate>Sat, 06 Jun 2020 12:01:34 -0500</pubDate><guid>https://tobybase.com/posts/invalid-format-connecting-to-server-with-ssh/</guid><description>&lt;p>If you get an &amp;lsquo;invalid format&amp;rsquo; error when trying to SSH in to a remote server using a private key file that you know is valid, it may be because the key was generated with PuTTY.&lt;/p>
&lt;p>&lt;img src="https://res.cloudinary.com/tobyblog/image/upload/v1591463072/img/puttygen05.jpg" alt="">&lt;/p>
&lt;p>If the key begins with &lt;code>PuTTY-User-Key-File&lt;/code> and you are using SSH/openSSH (ie. command line SSH) to connect to your server, you will need to first convert the key file using the &lt;code>puttygen&lt;/code> tool that comes with PuTTY.&lt;/p></description></item><item><title>Enable OCI Thick Client Connections in SQL Developer on Windows</title><link>https://tobybase.com/posts/enable-oci-connections-in-sql-developer/</link><pubDate>Fri, 05 Jun 2020 17:37:14 -0500</pubDate><guid>https://tobybase.com/posts/enable-oci-connections-in-sql-developer/</guid><description>&lt;p>&lt;a href="https://www.thatjeffsmith.com/archive/2014/01/oracle-sql-developer-4-and-the-oracle-client/" class="external-link" target="_blank" rel="noopener">Jeff Smith has an excellent article&lt;/a> on how to enable OCI Thick Client connections in SQL Developer, and all the reasons you might want to. For me, it all comes down to the ability to cancel a running query or process in a timely manner. The &amp;ldquo;hang&amp;rdquo; normally associated with canceling JDBC-based thin client connections is pretty unacceptable. With thick client you get the same level of responsiveness as you would in a console SQL*Plus session.&lt;/p></description></item><item><title>TIL: How to Replace Newline in Atom</title><link>https://tobybase.com/posts/til-replacing-newlins-in-atom/</link><pubDate>Fri, 05 Jun 2020 17:23:31 -0500</pubDate><guid>https://tobybase.com/posts/til-replacing-newlins-in-atom/</guid><description>&lt;p>Newline characters are matched as &lt;code>\r\n&lt;/code> in Atom. To remove all newlines from a file or selection of text, do a regex search for &lt;code>\r\n&lt;/code> and replace with nothing.&lt;/p></description></item><item><title>How to Share Files Between a Photon OS VM and the VM Host</title><link>https://tobybase.com/posts/share-files-between-photon-vm-and-host/</link><pubDate>Fri, 29 May 2020 13:41:02 -0500</pubDate><guid>https://tobybase.com/posts/share-files-between-photon-vm-and-host/</guid><description>&lt;p>(The following is adapted from the &lt;a href="https://vmware.github.io/photon/assets/files/html/1.0-2.0/Frequently-Asked-Questions.html#q-how-do-i-transfer-or-share-files-between-photon-and-my-host-machine" class="external-link" target="_blank" rel="noopener">official Photon OS FAQ.&lt;/a>)&lt;/p>
&lt;h2 id="how-do-i-transfer-or-share-files-between-photon-and-my-host-machine">
 How do I transfer or share files between #Photon and my host machine?
 &lt;a class="heading-link" href="#how-do-i-transfer-or-share-files-between-photon-and-my-host-machine">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>Use &lt;code>vmhgfs-fuse&lt;/code> to transfer files between Photon and your host machine:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Enable Shared folders in the Workstation or Fusion UI (edit the VM settings and choose Options-&amp;gt;Enabled shared folders).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Make sure open-vm-tools is installed (it is installed by default in the Minimal installation and OVA import).&lt;/p></description></item><item><title>Translating Teradata's MDIFF Function to Oracle SQL</title><link>https://tobybase.com/posts/translating-mdiff-to-oracle/</link><pubDate>Wed, 27 May 2020 10:22:08 -0500</pubDate><guid>https://tobybase.com/posts/translating-mdiff-to-oracle/</guid><description>&lt;p>Teradata &lt;a href="https://docs.teradata.com/reader/kmuOwjp1zEYg98JsB8fu_A/Q5tWBsRwZN7VBXQkzAoddQ" class="external-link" target="_blank" rel="noopener">defines its MDIFF function&lt;/a> as follows:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>MDIFF&lt;/strong>&lt;/p>
&lt;p>Returns the moving difference between the specified value expression for the current row and the preceding width rows for each row in the partition.&lt;/p>&lt;/blockquote>
&lt;p>Here &amp;ldquo;the preceding width rows&amp;rdquo; means something like the preceding &lt;em>n&lt;/em> rows, where n is sometimes interpreted as the sum of &lt;em>all&lt;/em> of the preceding rows, but generally as the value of the last row.&lt;/p>
&lt;p>Teradata&amp;rsquo;s docs also has this to say about MDIFF:&lt;/p></description></item><item><title>An Example of Dynamic SQL Using a CLOB</title><link>https://tobybase.com/posts/dynamic-sql-with-clob/</link><pubDate>Fri, 22 May 2020 13:28:39 -0500</pubDate><guid>https://tobybase.com/posts/dynamic-sql-with-clob/</guid><description>&lt;p>You might not know this, but you can use the &lt;code>EXECUTE IMMEDIATE&lt;/code> command with a CLOB, the same as with a VARCHAR2 variable.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">declare&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">l_sql&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">clob&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">l_str1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">varchar2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">32767&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">l_str2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">varchar2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">32767&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">begin&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">dbms_lob&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">createtemporary&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">l_sql&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">false&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">l_str1&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;some large SQL chunk&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">l_str2&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;and the rest of large SQL chunk&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">l_sql&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">l_str1&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">dbms_lob&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">writeappend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">l_sql&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">length&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">l_str2&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">l_str2&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">execute&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">immediate&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">l_sql&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">dbms_lob&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">freetemporary&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">l_sql&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="k">end&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to Configure Static Networking in a Linux VM</title><link>https://tobybase.com/posts/configure-static-networking/</link><pubDate>Wed, 20 May 2020 16:36:06 -0500</pubDate><guid>https://tobybase.com/posts/configure-static-networking/</guid><description>&lt;p>I originally had this requirement after creating a new persistent linux virtual machine in &lt;a href="https://www.oracle.com/virtualization/technologies/vm/" class="external-link" target="_blank" rel="noopener">OVM&lt;/a> that needed static addressing. This is just standard linux setup, though, and can be adapted to both virtual and physical machines.&lt;/p>
&lt;h2 id="turn-on-networking">
 Turn on Networking
 &lt;a class="heading-link" href="#turn-on-networking">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"># sudo vi /etc/sysconfig/network
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Make sure networking is enabled and configure the hostname.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">NETWORKING=yes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">HOSTNAME=myhost.mycompany.local
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="configure-the-network-interface">
 Configure the Network Interface
 &lt;a class="heading-link" href="#configure-the-network-interface">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl"># sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here is a sample config for static IPs.&lt;/p></description></item><item><title>How to Restore Files From a Previous Version in Git/Github</title><link>https://tobybase.com/posts/how-to-recover-a-prior-version-on-github/</link><pubDate>Tue, 19 May 2020 17:09:28 -0500</pubDate><guid>https://tobybase.com/posts/how-to-recover-a-prior-version-on-github/</guid><description>&lt;h3 id="get-the-hash-of-the-good-version-you-want-to-recover">
 Get the hash of the &amp;ldquo;good&amp;rdquo; version you want to recover
 &lt;a class="heading-link" href="#get-the-hash-of-the-good-version-you-want-to-recover">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;p>You first need to identify where things went wrong. Then get the commit identifier (also called the hash) for the version immediately prior to that. (Also make sure you&amp;rsquo;re pulling from the appropriate branch; for simplicity&amp;rsquo;s sake, this example assumes all changes are being committed to the master branch.)&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># git log&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">commit&lt;/span> &lt;span class="mi">07&lt;/span>&lt;span class="n">c5f535743e3f70fcdf09c0d032580820ca38c9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Author&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Toby&lt;/span> &lt;span class="n">Base&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">xxxxx&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">gmail&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Tue&lt;/span> &lt;span class="n">May&lt;/span> &lt;span class="mi">19&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">33&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">17&lt;/span> &lt;span class="mi">2020&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">0500&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Created&lt;/span> &lt;span class="n">content&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">my&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">newest&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">article&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">md&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">Oh&lt;/span> &lt;span class="n">no&lt;/span>&lt;span class="o">!&lt;/span> &lt;span class="n">Accidentally&lt;/span> &lt;span class="n">deleted&lt;/span> &lt;span class="n">some&lt;/span> &lt;span class="n">files&lt;/span> &lt;span class="n">after&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">last&lt;/span> &lt;span class="n">commit&lt;/span>&lt;span class="o">!&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">commit&lt;/span> &lt;span class="mi">85&lt;/span>&lt;span class="n">add47b28670abaf99b17e010edeafb2fbb3189&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Author&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Toby&lt;/span> &lt;span class="n">Base&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">xxxxx&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">gmail&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Fri&lt;/span> &lt;span class="n">Feb&lt;/span> &lt;span class="mi">7&lt;/span> &lt;span class="mi">21&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">04&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">39&lt;/span> &lt;span class="mi">2020&lt;/span> &lt;span class="o">+&lt;/span>&lt;span class="mi">0000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Updated&lt;/span> &lt;span class="n">content&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">oracle&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">cloud&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">day&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">dallas&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">md&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">commit&lt;/span> &lt;span class="n">c3a520e136dc90e7982bc50d56a33aa3c3885f85&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Author&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Toby&lt;/span> &lt;span class="n">Base&lt;/span> &lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">xxxxx&lt;/span>&lt;span class="err">@&lt;/span>&lt;span class="n">gmail&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">com&lt;/span>&lt;span class="o">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">Date&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">Fri&lt;/span> &lt;span class="n">Feb&lt;/span> &lt;span class="mi">7&lt;/span> &lt;span class="mi">21&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">02&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">29&lt;/span> &lt;span class="mi">2020&lt;/span> &lt;span class="o">+&lt;/span>&lt;span class="mi">0000&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Created&lt;/span> &lt;span class="k">static&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">uploads&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">BC9419D3&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">B290&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="n">CF3&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">845&lt;/span>&lt;span class="n">C&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="n">C008A19419C&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">jpeg&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In my case, I know I deleted files in the commit on May 19. So I want to restore those files from the version right before that, the one with hash &lt;code>85add47b28670abaf99b17e010edeafb2fbb3189&lt;/code>.&lt;/p></description></item><item><title>Oracle Cloud Day Dallas</title><link>https://tobybase.com/posts/oracle-cloud-day-dallas/</link><pubDate>Fri, 07 Feb 2020 21:00:00 +0000</pubDate><guid>https://tobybase.com/posts/oracle-cloud-day-dallas/</guid><description>&lt;p>Tobybase representing at Oracle Cloud Day in Dallas. Just another day in my so-called autonomous life…&lt;/p>
&lt;p>&lt;img src="https://tobybase.com/uploads/BC9419D3-B290-4CF3-845C-5C008A19419C.jpeg" alt="">&lt;/p></description></item><item><title>Error in Cisco AnyConnect Client: "Cannot Confirm it is Connected"</title><link>https://tobybase.com/posts/problems-connecting-with-anyconnect-vpn/</link><pubDate>Mon, 27 Jan 2020 15:20:10 -0600</pubDate><guid>https://tobybase.com/posts/problems-connecting-with-anyconnect-vpn/</guid><description>&lt;p>&lt;em>[NOTE: problem identified on my personal laptop with macOS 10.15.2, Cisco AnyConnect Secure Mobility Client 4.6.03049]&lt;/em>&lt;/p>
&lt;h3 id="what-to-do-when-you-encounter-this-error">
 What to Do When You Encounter This Error
 &lt;a class="heading-link" href="#what-to-do-when-you-encounter-this-error">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;p>&lt;img src="https://res.cloudinary.com/tobyblog/image/upload/v1580160888/img/not_trustworthy.jpg" alt="">&lt;/p>
&lt;blockquote>
&lt;p>AnyConnect cannot confirm it is connected to your secure gateway. The local network may not be trustworthy. Please try another network.&lt;/p>&lt;/blockquote>
&lt;p>This is a potentially misleading explanation, as the problem in my case was due to a corrupted VPN certificate.&lt;/p></description></item><item><title>Connect to Autonomous Database in the Cloud with Oracle Instant Client</title><link>https://tobybase.com/posts/connecting-to-autonomous-with-instant-client/</link><pubDate>Fri, 17 Jan 2020 17:08:16 -0600</pubDate><guid>https://tobybase.com/posts/connecting-to-autonomous-with-instant-client/</guid><description>&lt;p>The easiest and fastest way to query and create data in your new cloud database is with SQL Developer Web, provided free with every new instance of Autonomous Database and Autonomous Data Warehouse in the Cloud. Second fastest would be with a local installation of &lt;a href="https://tobybase.com/posts/connecting-to-autonomous-with-sql-dev/" >SQL Developer or SQLcl&lt;/a>. But if you want an authentic SQL*Plus environment, then you&amp;rsquo;ll need Oracle Instant Client.&lt;/p>
&lt;p>You have two options for running SQL*Plus under Instant Client: &lt;a href="#download-and-install-instant-client" >download and install&lt;/a> a platform-native version, or else run Instant Client in a &lt;a href="#run-instant-client-in-a-docker-container" >Docker container&lt;/a>. Your database Service Console has instructions and download links for whichever approach you choose.&lt;/p></description></item><item><title>Connect to Autonomous Database in the Cloud with SQL Developer and SQLcl</title><link>https://tobybase.com/posts/connecting-to-autonomous-with-sql-dev/</link><pubDate>Fri, 17 Jan 2020 16:59:40 -0600</pubDate><guid>https://tobybase.com/posts/connecting-to-autonomous-with-sql-dev/</guid><description>&lt;h3 id="connect-with-sql-developer-web">
 Connect with SQL Developer Web
 &lt;a class="heading-link" href="#connect-with-sql-developer-web">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;p>&lt;img src="https://res.cloudinary.com/tobyblog/image/upload/v1579364810/img/Screenshot_from_2020-01-09_17.11.52.jpg" alt="">&lt;/p>
&lt;p>If you don&amp;rsquo;t have SQL Developer installed, or you just want a quick and easy way to work with your new autonomous database, you can get started right away with SQL Developer Web, available from the Service Console. SQL Developer Web is a scaled down version of the desktop tool that allows you to query and enter data, run scripts, compile database objects, and monitor and administrate your database.&lt;/p></description></item><item><title>Get Up and Running Fast On Oracle Autonomous Database in the Cloud</title><link>https://tobybase.com/posts/up-and-running-on-oracle-autonomous-database/</link><pubDate>Thu, 09 Jan 2020 16:58:15 -0600</pubDate><guid>https://tobybase.com/posts/up-and-running-on-oracle-autonomous-database/</guid><description>&lt;h3 id="provision-your-new-autonomous-database-in-minutes">
 Provision Your New Autonomous Database in Minutes
 &lt;a class="heading-link" href="#provision-your-new-autonomous-database-in-minutes">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;p>&lt;img src="https://res.cloudinary.com/tobyblog/image/upload/v1578611791/img/Screenshot_from_2020-01-09_17.15.20.jpg" alt="">&lt;/p>
&lt;p>With Autonomous Database and Autonomous Data Warehouse, Oracle is promising to leverage the power of AI and machine learning to automate upgrade, maintenance, and tuning operations in the database - vastly reducing the drudgery of DBA work and freeing up human minds to add more value to their companies. As a developer, you don&amp;rsquo;t have to wait to start experimenting with these exciting new features. They are available now for free on Oracle Cloud for small-scale testing and learning.&lt;/p></description></item><item><title>3 Tips for Running SAS Queries on Oracle</title><link>https://tobybase.com/posts/sas-exadata-performance-tips/</link><pubDate>Mon, 23 Sep 2019 13:54:50 -0500</pubDate><guid>https://tobybase.com/posts/sas-exadata-performance-tips/</guid><description>&lt;p>I don&amp;rsquo;t know a whole lot about SAS, but on my current gig I am frequently called upon to tune queries that run in that environment. Here are three things I have learned to keep in mind as a SAS developer when running against Oracle database.&lt;/p>
&lt;h3 id="use-preserve_comments">
 Use PRESERVE_COMMENTS
 &lt;a class="heading-link" href="#use-preserve_comments">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h3>
&lt;p>This is most critical. In Oracle, SQL hints are specified in a specially formatted inline comment. Running a query or DML statement without those hints could be detrimental to performance.&lt;/p></description></item><item><title>Fix High CPU Usage / Memory Leak in SQL Developer 18+ for Windows</title><link>https://tobybase.com/posts/sqldev-memory-leak/</link><pubDate>Wed, 01 May 2019 16:47:39 -0500</pubDate><guid>https://tobybase.com/posts/sqldev-memory-leak/</guid><description>&lt;p>If you run SQL Developer on Windows and experience high CPU usage and/or memory leak issues that freeze your PC, then you might want to try disabling some features that are likely causing the problem.&lt;/p>
&lt;p>I have personally observed this behavior on every version of SQL Developer since 18.2. Only my PC laptop is affected; my Macbook installation runs fine. I use the prepackaged Java 8 JDK. I have several colleagues who run the same configuration on Windows with no issues at all, so go figure.&lt;/p></description></item><item><title>They Don't Need ML</title><link>https://tobybase.com/links/2018-05-01-sql-over-ml/</link><pubDate>Tue, 01 May 2018 09:05:54 -0500</pubDate><guid>https://tobybase.com/links/2018-05-01-sql-over-ml/</guid><description>&lt;blockquote>
&lt;p>I will write a query like select from order table where last shop date is 3 or greater months. When we get this information, we will send a nice &amp;ldquo;we miss you, come back and here&amp;rsquo;s X Naira voucher&amp;rdquo; email. The conversation rate for this one was always greater than 50%.&lt;/p>&lt;/blockquote>
&lt;p>So-called artificial intelligence and machine learning tools are in fashion these days, and the impetus is to apply them to all problem sets. It would be a mistake to think that they &lt;em>should&lt;/em>, or even &lt;em>could&lt;/em>, substitute for rational thought and human insight. Most problems are simple, and do not require complex systems to solve. (I&amp;rsquo;ve been surprised upon learning how commonsensical are the actual rules that inform predictive analyses, recommendation engines, and relationship graphs.) Good business analysis yields teachable results, not &amp;ldquo;magic&amp;rdquo; numbers or inscrutable algorithms. Human intelligence should not be set aside when pursuing the benefits of machine intelligence.&lt;/p></description></item><item><title>Finland is killing its world-famous basic income experiment</title><link>https://tobybase.com/links/2018-04-19-finland-dumps-basic-income/</link><pubDate>Thu, 19 Apr 2018 15:18:45 -0500</pubDate><guid>https://tobybase.com/links/2018-04-19-finland-dumps-basic-income/</guid><description>&lt;blockquote>
&lt;p>In recent years, a growing number of tech entrepreneurs have endorsed universal basic income (UBI), a system system in which every individual receives a standard amount of money, simply for being alive.&lt;/p>&lt;/blockquote>
&lt;p>And…&lt;/p>
&lt;blockquote>
&lt;p>These tech moguls recognize that UBI, as well as combatting poverty, could also help solve the problem of increased robotization in the workforce, a problem they are very much part of creating.&lt;/p>&lt;/blockquote>
&lt;p>This will be interesting. Official results of the experiment are to be published in 2019.&lt;/p></description></item><item><title>Oracle Sees Autonomous Database Changing DBA Roles for the Good</title><link>https://tobybase.com/links/2018-04-10-oracle-sees-automation/</link><pubDate>Tue, 10 Apr 2018 12:47:23 -0500</pubDate><guid>https://tobybase.com/links/2018-04-10-oracle-sees-automation/</guid><description>&lt;blockquote>
&lt;p>If the tactical tasks are reduced &amp;ndash; or even eliminated &amp;ndash; DBAs will have more time to spend on higher level tasks, like data security, data lifecycle management, data architecture and data modeling, Colgan said.&lt;/p>&lt;/blockquote>
&lt;p>I can&amp;rsquo;t be too worried about automation replacing the need for database professionals. The first time I recall hearing such claims was in 1999 with the advent of Oracle 9i. If what Colgan says is true, and there is every reason to believe it is, then the day to day work of DBAs and consultants like myself is only bound to become more interesting and productive. All of those things she mentions — particularly security — deserve far more attention than they receive in most organizations, as underfunded and overwhelmed as they are with routine operational tasks.&lt;/p></description></item><item><title>Access Denied Attaching Block Volume to Windows VM in OCI</title><link>https://tobybase.com/posts/2018-04-10-oci-add-block-volume-on-windows/</link><pubDate>Tue, 10 Apr 2018 00:00:00 +0000</pubDate><guid>https://tobybase.com/posts/2018-04-10-oci-add-block-volume-on-windows/</guid><description>&lt;img src="https://tobybase.com/images/2018-04-10-oci-add-block-volume-on-windows/access-denied.jpg" width="800px">
&lt;p>If you are getting the above error when trying to add a block volume to a Windows VM in Oracle Cloud Infrastructure, the solution is quite simple.&lt;/p></description></item><item><title>2017 Was Bad for Facebook. 2018 Will Be Worse.</title><link>https://tobybase.com/links/2017-12-15-2018-bad-year-for-facebook/</link><pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate><guid>https://tobybase.com/links/2017-12-15-2018-bad-year-for-facebook/</guid><description>&lt;blockquote>
&lt;p>While Facebook remains the biggest platform, Google and Twitter are facing similar pressure from governments in the U.S. and in Europe. Germany enacted a law requiring the social networks to remove hate speech promptly or face fines. In the U.S., the activities of a Russian troll farm during the 2016 election campaign prompted scrutiny of Facebook&amp;rsquo;s ad selling practices and a (rather ham-handed) legislative attempt to force some transparency.&lt;/p>&lt;/blockquote>
&lt;p>The government has an incentive for fostering the growth and continued success of big social media platforms like Facebook and Twitter, because they operate essentially as large data warehouses on social thought, connections and behavior — supplying information that might be difficult or illegal to collect otherwise. Because of the monopoly these companies have on online self expression, and the potentially large and instantaneous impact of that form of expression, they serve as easy chokepoints for controlling the dissemination of ideas.&lt;/p></description></item><item><title>Infolob on YouTube</title><link>https://tobybase.com/links/2017-12-14-infolob-youtube/</link><pubDate>Thu, 14 Dec 2017 00:00:00 +0000</pubDate><guid>https://tobybase.com/links/2017-12-14-infolob-youtube/</guid><description>&lt;p>If you find this content helpful, do the &amp;ldquo;like and subscribe&amp;rdquo; thing to stay informed.&lt;/p></description></item><item><title>Move Your VM to Oracle Cloud - Part 4</title><link>https://tobybase.com/posts/infolob-lift-and-shift-howto-4/</link><pubDate>Fri, 10 Mar 2017 14:56:00 +0000</pubDate><guid>https://tobybase.com/posts/infolob-lift-and-shift-howto-4/</guid><description>&lt;p>In the last of a four-part video series, our Director of Cloud Services Brian Hill creates a new compute instance in Oracle Cloud Compute Services based on his custom Windows virtual machine image.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/c1_2foZ7MQc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>Move Your VM to Oracle Cloud - Part 3</title><link>https://tobybase.com/posts/infolob-lift-and-shift-howto-3/</link><pubDate>Fri, 10 Mar 2017 14:53:00 +0000</pubDate><guid>https://tobybase.com/posts/infolob-lift-and-shift-howto-3/</guid><description>&lt;p>In part three of a four-part video series, our Director of Cloud Services Brian Hill creates a bootable storage volume in Oracle Cloud Compute Services with his new Windows image.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/mwsMputHP-M?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>Move Your VM to Oracle Cloud - Part 2</title><link>https://tobybase.com/posts/infolob-lift-and-shift-howto-2/</link><pubDate>Fri, 10 Mar 2017 14:47:00 +0000</pubDate><guid>https://tobybase.com/posts/infolob-lift-and-shift-howto-2/</guid><description>&lt;p>In part two of a four-part video series, our Director of Cloud Services Brian Hill creates an image in Oracle Cloud Compute Services based on a Windows virtual machine.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/bA7zyOh-JiY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>Move Your VM to Oracle Cloud - Part 1</title><link>https://tobybase.com/posts/infolob-lift-and-shift-howto-1/</link><pubDate>Fri, 10 Mar 2017 14:41:00 +0000</pubDate><guid>https://tobybase.com/posts/infolob-lift-and-shift-howto-1/</guid><description>&lt;p>In part one of a four-part video series, our Director of Cloud Services Brian Hill demonstrates how to prepare your virtual machine for upload to the cloud.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/lwFCj0Z4JSU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>Announcing the Infolob YouTube Channel</title><link>https://tobybase.com/posts/infolob-youtube-channel/</link><pubDate>Fri, 10 Mar 2017 00:00:00 +0000</pubDate><guid>https://tobybase.com/posts/infolob-youtube-channel/</guid><description>&lt;p>I am honored to work with some wonderful and truly &lt;em>smart&lt;/em> folks over at &lt;a href="http://www.infolob.com/" class="external-link" target="_blank" rel="noopener">Infolob&lt;/a> in Irving, Texas. The company recently started a &lt;a href="https://www.youtube.com/channel/UCLfDjdjW6RRvKYrz_aS0Jmw" class="external-link" target="_blank" rel="noopener">YouTube channel&lt;/a> and we are looking to add lots of great videos soon for your enjoyment and education.&lt;/p>
&lt;p>Check us out!&lt;/p>
&lt;p>In this short Oracle Platinum Partner Spotlight video, our Chief Technologist Tim Fox explains what we do as a company and the kinds of services we provide.&lt;/p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/g6Zenoy8GGs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video">&lt;/iframe>
 &lt;/div></description></item><item><title>License Statement</title><link>https://tobybase.com/license/</link><pubDate>Thu, 23 Feb 2017 11:32:23 -0600</pubDate><guid>https://tobybase.com/license/</guid><description>&lt;p>All original content copyright (c) 2025 Toby Marks&lt;/p>
&lt;p>Database graphic by &lt;a href="http://www.flaticon.com/authors/freepik" class="external-link" target="_blank" rel="noopener">Freepik&lt;/a> from &lt;a href="http://www.flaticon.com/" class="external-link" target="_blank" rel="noopener">Flaticon&lt;/a> is licensed under &lt;a href="http://creativecommons.org/licenses/by/3.0/" class="external-link" target="_blank" rel="noopener">CC BY 3.0&lt;/a>. Made with &lt;a href="http://logomakr.com" class="external-link" target="_blank" rel="noopener">Logo Maker&lt;/a>.&lt;/p></description></item><item><title>Announcing… tobybase.com</title><link>https://tobybase.com/posts/announcing-tobybase/</link><pubDate>Tue, 17 Jan 2017 22:58:59 -0600</pubDate><guid>https://tobybase.com/posts/announcing-tobybase/</guid><description>&lt;p>Welcome one and all to my new professional blog, &lt;a href="http://tobybase.com/" title="Redirects to the website you are now on" class="external-link" target="_blank" rel="noopener">tobybase.com&lt;/a>. My name is Toby Marks and I work as a &lt;a href="http://oracle.com" title="Oracle&amp;#39;s website" class="external-link" target="_blank" rel="noopener">Oracle&lt;/a> Consultant at &lt;a href="http://infolob.com/" title="My company&amp;#39;s website" class="external-link" target="_blank" rel="noopener">Infolob Solutions&lt;/a> in &lt;a href="https://en.wikipedia.org/wiki/Las_Colinas" title="Some info about sunny Las Colinas" class="external-link" target="_blank" rel="noopener">Irving, Texas&lt;/a>. My &lt;a href="http://tjmoracle.tumblr.com/" title="My old blog" class="external-link" target="_blank" rel="noopener">old blog&lt;/a> is still up on &lt;a href="http://tumblr.com/" title="Go to Tumblr" class="external-link" target="_blank" rel="noopener">Tumblr&lt;/a>, and there are a &lt;a href="https://tmblr.co/Z9fAmvZapPzC" title="Create PDF Reports in Oracle Apex" class="external-link" target="_blank" rel="noopener">few&lt;/a> &lt;a href="https://tmblr.co/Z9fAmvXEB6iL" title="Query an XML File Like an External Table" class="external-link" target="_blank" rel="noopener">items&lt;/a> &lt;a href="https://tmblr.co/Z9fAmvOFEN-N" title="OS X Software for Oracle Developers" class="external-link" target="_blank" rel="noopener">there&lt;/a> that folks still find useful. Most of the content is a bit dated, though, as I&amp;rsquo;ve been out of the blogging game for a while.&lt;/p></description></item><item><title>What to do when the Juniper Network Connect app on OS X does not connect</title><link>https://tobybase.com/posts/ewwww/</link><pubDate>Thu, 04 Feb 2016 22:50:09 +0000</pubDate><guid>https://tobybase.com/posts/ewwww/</guid><description>&lt;p>If you use Juniper&amp;rsquo;s Network Connect app to connect to your office VPN over HTTPS, you might occasionally experience strange errors like &amp;ldquo;A software error caused the Network Connect tunneling service to terminate.&amp;rdquo; Shortly after that, the application may either crash or prompt you for login credentials again.&lt;/p>
&lt;p>The solution involves removing all of the Network Connect files and allowing your browser to download and install the app all over again, as it did the first time you tried to connect to your office VPN.&lt;/p></description></item><item><title>How to Use ps to List Top Memory, CPU Eating Processes</title><link>https://tobybase.com/posts/2013-07-24-linux-unix-use-ps-to-list-top-memory-cpu-eating-processes/</link><pubDate>Wed, 24 Jul 2013 21:42:00 +0000</pubDate><guid>https://tobybase.com/posts/2013-07-24-linux-unix-use-ps-to-list-top-memory-cpu-eating-processes/</guid><description>&lt;p>The &lt;code>ps&lt;/code> command is a versatile and configurable way to look at the processes running on your system, though I&amp;rsquo;ve generally gotten by with a lazy &lt;code>ps -ef&lt;/code> to find out whatever I needed to know. Recently, though, a client&amp;rsquo;s server began running out of memory, and as a number of processes were running on the server, the culprit was not immediately clear. I wanted to provide them with a quick, simple diagnostic tool they could use the next time they received an alert.&lt;/p></description></item><item><title>Use Preview to View Formatted man Pages</title><link>https://tobybase.com/links/2013-07-24-view-man-pages/</link><pubDate>Wed, 24 Jul 2013 00:00:00 +0000</pubDate><guid>https://tobybase.com/links/2013-07-24-view-man-pages/</guid><description>&lt;p>This is an elegant solution for viewing, searching, and archiving man pages that eliminates the necessity for third party apps.&lt;/p>
&lt;p>&lt;em>Update:&lt;/em> still works in macOS Sierra.&lt;/p></description></item><item><title>How to Fix SQL Developer on a Retina Display Mac(book)</title><link>https://tobybase.com/posts/2013-07-19-fix-sql-developer-on-a-retina-display-macbook/</link><pubDate>Fri, 19 Jul 2013 22:32:00 +0000</pubDate><guid>https://tobybase.com/posts/2013-07-19-fix-sql-developer-on-a-retina-display-macbook/</guid><description>&lt;p>I just purchased a new Macbook Pro 13-inch with Retina Display and was horrified to see how fuzzy SQL Developer looked on the high-res screen. Thanks to Thunderforge on the &lt;a href="http://stackoverflow.com/questions/15181079/apple-retina-display-support-in-java-jdk-1-7-for-awt-swing" class="external-link" target="_blank" rel="noopener">Stack Overflow forums&lt;/a> for this tip:&lt;/p>
&lt;blockquote>
&lt;p>Java 7u40 Early Access now supports HiDPI (Retina) displays, as
shown by this &lt;a href="http://download.java.net/jdk7u40/changes/jdk7u40-b28.html?q=download/jdk7u40/changes/jdk7u40-b28.html" class="external-link" target="_blank" rel="noopener">changelog&lt;/a>. So retina support is now available on Java 6, Java 7u40 or higher, and Java 8.&lt;/p>&lt;/blockquote>
&lt;p>I am currently running the &lt;a href="http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/sqldev-download-v4-1925679.html" class="external-link" target="_blank" rel="noopener">Early Adopter release of SQL Developer 4.0&lt;/a> which requires JDK 1.7. I&amp;rsquo;m not sure what the state of Java 8 is on the Mac, so I opted to upgrade my JDK from 1.7.0_25 to 1.7.0_40. After that I had nice, sharp lines back in SQL Developer and all my other Java apps.&lt;/p></description></item><item><title>How To Reset Page Numbering Between Document Sections in BI Publisher's Template Builder for Word</title><link>https://tobybase.com/posts/2013-06-14-resetting-page-numbering-between-document-sections-in-bi-publishers-template-builder-for-word/</link><pubDate>Fri, 14 Jun 2013 21:47:00 +0000</pubDate><guid>https://tobybase.com/posts/2013-06-14-resetting-page-numbering-between-document-sections-in-bi-publishers-template-builder-for-word/</guid><description>&lt;p>Under normal circumstances, it is fairly easy in Microsoft Word to &lt;a href="http://www.youtube.com/watch?v=E1WtKR6FDM4" class="external-link" target="_blank" rel="noopener">reset page numbering&lt;/a> when starting a new section of your document. However, such a simple thing can be non-trivial when dealing with the BI Publisher Template Builder plugin for Microsoft Office (&lt;a href="http://www.oracle.com/technetwork/middleware/bi-publisher/downloads/index.html" class="external-link" target="_blank" rel="noopener">available from Oracle&lt;/a> — see BI Publisher Desktop).&lt;/p>
&lt;p>In short, doing this the normal way did not work for me, and in researching the issue I ran across a &lt;a href="http://stackoverflow.com/questions/9603481/rtf-number-of-pages-page-x-of-y" class="external-link" target="_blank" rel="noopener">number&lt;/a> &lt;a href="https://forums.oracle.com/thread/2493003" class="external-link" target="_blank" rel="noopener">of&lt;/a> &lt;a href="https://forums.oracle.com/thread/496869" class="external-link" target="_blank" rel="noopener">folks&lt;/a> who were having the same problem. Page numbering was simply not being reset between sections, or worse, did not take into account a fluid document size based upon available data.&lt;/p></description></item><item><title>Button Hotkeys in SQL Developer on OS X</title><link>https://tobybase.com/posts/2013-01-09-button-hotkeys-in-sql-developer-on-os-x/</link><pubDate>Wed, 09 Jan 2013 19:09:45 +0000</pubDate><guid>https://tobybase.com/posts/2013-01-09-button-hotkeys-in-sql-developer-on-os-x/</guid><description>&lt;p>In Windows, most applications provide menu and button accelerator keys that allow you to control the application without having to use a mouse. Java Swing apps like SQL Developer allow you to do the same, ostensibly in a cross-platform compatible manner.&lt;/p>
&lt;p>One place I use this frequently is the Enter Binds dialog window that pops up when running a query using bind variables.&lt;/p>
&lt;p>&lt;img src="https://tobybase.com/images/2013-01-09-button-hotkeys-in-sql-developer-on-os-x/f953827dc3e74e57df43fd0e48ff22b40ce119efaa74ce3712fd989522b02a6f.png" alt="">&lt;/p>
&lt;p>In Java 6 on OS X, the hotkey for pressing the Help and Apply buttons was OPTION-H and OPTION-A, respectively.&lt;/p></description></item><item><title>Generate PDF Reports for Free in Oracle Apex Using PL-JRXML2PDF and iReport Designer</title><link>https://tobybase.com/posts/2012-12-18-video-post/</link><pubDate>Tue, 18 Dec 2012 00:00:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-12-18-video-post/</guid><description>&lt;div
 style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
 &lt;iframe
 src="https://player.vimeo.com/video/55818132?dnt=0"
 style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allow="fullscreen">
 &lt;/iframe>
 &lt;/div>

&lt;p>Using Jaspersoft&amp;rsquo;s free iReport Designer tool and the open source PL-JRXML2PDF project, you can generate PDF reports from Oracle Apex for free, without having to install the JasperReports and JasperReports Server components. Watch my video tutorial to find out how.&lt;/p></description></item><item><title>How To Use SQL to Query an XML Document Using Oracle External Tables</title><link>https://tobybase.com/posts/2012-11-14-query-an-xml-file-like-an-external-table/</link><pubDate>Wed, 14 Nov 2012 00:00:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-11-14-query-an-xml-file-like-an-external-table/</guid><description>&lt;p>Oracle&amp;rsquo;s &lt;a href="http://docs.oracle.com/cd/B28359_01/server.111/b28319/et_concepts.htm" class="external-link" target="_blank" rel="noopener">external table feature&lt;/a> allows you to treat structured files on the database server as tables for query and DML purposes. To use an example from the linked documentation, a tab-delimited file like this:&lt;/p>
&lt;pre>&lt;code>56 november, 15, 1980 baker mary alice 09/01/2004
87 december, 20, 1970 roper lisa marie 01/01/1999
&lt;/code>&lt;/pre>
&lt;p>&amp;hellip;could be queried like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-SQL" data-lang="SQL">&lt;span class="line">&lt;span class="cl">&lt;span class="k">SELECT&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">employee_number&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">employee_first_name&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">substr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">employee_middle_name&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">),&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">employee_last_name&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">employee_hire_date&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">to_date&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">employee_dob&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;month, dd, yyyy&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">FROM&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">employees&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After defining the external table like this:&lt;/p></description></item><item><title>How To Restrict Access to BI Publisher Reports</title><link>https://tobybase.com/posts/2012-11-12-restricting-access-to-bi-publisher-reports/</link><pubDate>Mon, 12 Nov 2012 18:12:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-11-12-restricting-access-to-bi-publisher-reports/</guid><description>&lt;p>In &lt;a href="https://tobybase.com/posts/2012-11-12-configure-oracle-bi-publisher-to-authenticate-with-active-directory/" >my last post&lt;/a> I described how to configure BI Publisher to authenticate against an LDAP server, typically a corporate Active Directory server. Aside from authentication, you can also use LDAP group membership to determine who has access to a given report. Here&amp;rsquo;s how you do it.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Create a group in your LDAP/AD directory and assign your target users to that group.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Revisit your LDAP authentication settings. These are located on the Admin Tab, on the Security Configuration page. In particular, look at the value for Group Search Filter.&lt;/p></description></item><item><title>How To Configure Oracle BI Publisher to Authenticate With Active Directory</title><link>https://tobybase.com/posts/2012-11-12-configure-oracle-bi-publisher-to-authenticate-with-active-directory/</link><pubDate>Mon, 12 Nov 2012 17:32:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-11-12-configure-oracle-bi-publisher-to-authenticate-with-active-directory/</guid><description>&lt;ul>
&lt;li>Log in to BI Publisher as an administrator.&lt;/li>
&lt;li>Click on the Admin tab.&lt;/li>
&lt;li>Click on Security Configuration.&lt;/li>
&lt;li>For Security Model, choose LDAP and enter the following parameters:
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Setting&lt;/th>
 &lt;th>Example Value&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>URL&lt;/td>
 &lt;td>ldap://ad.mycompany.com:389 &lt;cite style="color:red; font-size:smaller">Your company&amp;rsquo;s LDAP server and port.&lt;/cite>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Administrator Username&lt;/td>
 &lt;td>CN=ADMIN,OU=Users,OU=Shared Services,DC=mycompany,DC=com &lt;cite style="color:red; font-size:smaller">The fully qualified DN of the account you use to sign in to LDAP.&lt;/cite>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Administrator Password&lt;/td>
 &lt;td>myxlplyx &lt;cite style="color:red; font-size:smaller">The password for the above account.&lt;/cite>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Distinguished Name for Users&lt;/td>
 &lt;td>DC=mycompany,DC=com &lt;cite style="color:red; font-size:smaller">The &amp;ldquo;root&amp;rdquo; level at which to search for users.&lt;/cite>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Distinguished Name for Groups&lt;/td>
 &lt;td>OU=Global Groups,DC=mycompany,DC=com &lt;cite style="color:red; font-size:smaller">The &amp;ldquo;root&amp;rdquo; level at which to search from groups.&lt;/cite>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Group Search Filter&lt;/td>
 &lt;td>(&amp;amp;(objectClass=group)(&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Group Attribute Name&lt;/td>
 &lt;td>cn&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Group Member Attribute Name&lt;/td>
 &lt;td>member&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Member Of Group Attribute Name&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Group Description Attribute Name&lt;/td>
 &lt;td>description&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>JNDI Context Factory Class&lt;/td>
 &lt;td>com.sun.jndi.ldap.LdapCtxFactory&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Group Retrieval Page Size&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>attribute used for RDN&lt;/td>
 &lt;td>sAMAccountName &lt;cite style="color:red; font-size:smaller">Allows users to log in to BI Publisher using their corporate AD account name.&lt;/cite>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Automatically clear LDAP cache&lt;/td>
 &lt;td>Checked&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ldap Cache Interval&lt;/td>
 &lt;td>1&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Ldap Cache Interval Unit&lt;/td>
 &lt;td>Hour&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Default User Group Name&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Attribute Names for Data Query Bind Variables&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;br>&lt;/td>
 &lt;td>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;/li>
&lt;li>Bounce BI Publisher.&lt;/li>
&lt;li>Try logging in with your corporate AD credentials. Remember, you need to be assigned to one of the following special groups in Active Directory if you want developer or admin privileges in BI Publisher:&lt;/li>
&lt;/ul>
&lt;p>XMLP_ADMIN&lt;br>
XMLP_DEVELOPER&lt;br>
XMLP_SCHEDULER&lt;br>
XMLP_ANALYZER_EXCEL&lt;br>
XMLP_ANALYZER_ONLINE&lt;br>
XMLP_TEMPLATE_DESIGNER&lt;/p></description></item><item><title>Use Firebug's console.debug Command to Analyze Javascript, DOM Objects</title><link>https://tobybase.com/posts/2012-10-26-use-firebugs-consoledebug-command-to-analyze-javascript-dom-objects/</link><pubDate>Fri, 26 Oct 2012 21:09:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-10-26-use-firebugs-consoledebug-command-to-analyze-javascript-dom-objects/</guid><description>&lt;p>Occasionally when debugging my Javascript code I need to be able to analyze the properties of an unknown object; for instance, an unexpected DOM object passed to an event handler. How do you analyze the properties of an object when you don&amp;rsquo;t know what the object is? I was looking for a way to list all the properties of a generic Javascript or DOM object when I stumbled across this blog post by Andrew Peters. In it, he very clearly outlines two ways of doing this, but the one I found most useful was Firebug&amp;rsquo;s &lt;code>console.debug&lt;/code> command. You&amp;rsquo;ll need to use Firefox with the Firebug extension for this, but the results are impressive.&lt;/p></description></item><item><title>How to Avoid the "Job scheduling failed because the user has no permission to access this report" Error in BI Publisher</title><link>https://tobybase.com/posts/2012-08-27-bi-publisher-job-scheduling-failed-because-the-user-has-no-permission-to-access-this-report/</link><pubDate>Mon, 27 Aug 2012 20:48:08 +0000</pubDate><guid>https://tobybase.com/posts/2012-08-27-bi-publisher-job-scheduling-failed-because-the-user-has-no-permission-to-access-this-report/</guid><description>&lt;p>&lt;img src="https://tobybase.com/images/2012-08-27-bi-publisher-job-scheduling-failed-because-the-user-has-no-permission-to-access-this-report/864dbb90dbf623eb4f36b26a3ecf315cfec7121cf33e16730b6060c6572dfb35.jpg" alt="">&lt;/p>
&lt;p>You can get this error if you are trying to schedule a report and your BI Publisher installation uses LDAP authentication.&lt;/p>
&lt;p>To avoid it, make sure that the &amp;ldquo;Administrator&amp;rdquo; account you use to connect to your LDAP server is in the XMLP_ADMIN group. The LDAP settings are located on the Admin tab, under Security Settings / Security Configuration.&lt;/p>
&lt;p>&lt;img src="https://tobybase.com/images/2012-08-27-bi-publisher-job-scheduling-failed-because-the-user-has-no-permission-to-access-this-report/c44997adb44d6687468d544341fcd25b818ebdd46087d1849c38e855ee874488.jpg" alt="">&lt;/p></description></item><item><title>Safari 5.1.7 on my MacBookPro OSX 10.7.4 freezes unexpectedly</title><link>https://tobybase.com/links/2012-07-25-safari-517-freezes-on-macbook-pro/</link><pubDate>Wed, 25 Jul 2012 00:00:00 +0000</pubDate><guid>https://tobybase.com/links/2012-07-25-safari-517-freezes-on-macbook-pro/</guid><description>&lt;p>Lately I&amp;rsquo;ve been experiencing strange problems when clicking on links in Safari 5.1.7. Usually the progress indicator would either flash momentarily and do nothing, or else it would never appear at all. Pages would sometimes load, but after an unusual delay and with no indication that the browser was actually doing anything. I switched to Chrome as my default browser for a few days, but that was about all I could stand. A little research on the forums showed this fix, which appears to have worked for me.&lt;/p></description></item><item><title>How To Fix High CPU Usage by SQL Developer on OS X</title><link>https://tobybase.com/posts/2012-07-20-easy-fix-for-high-cpu-usage-in-sql-developer-on-os-x/</link><pubDate>Fri, 20 Jul 2012 16:32:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-07-20-easy-fix-for-high-cpu-usage-in-sql-developer-on-os-x/</guid><description>&lt;p>I&amp;rsquo;ve been fighting for a couple of years now with an annoying performance bug in SQL Developer for OS X. After using the application for a while CPU usage would spike to around 100%, even when idle. This is a known issue associated with the &amp;ldquo;Look and Feel&amp;rdquo; preference.&lt;/p>
&lt;p>&lt;img src="https://tobybase.com/images/2012-07-20-easy-fix-for-high-cpu-usage-in-sql-developer-on-os-x/b5b8f447d6dc433b4253c4814df5746e70e6e1e85235b391c9fef8b19e9f84d8.jpg" alt="">&lt;/p>
&lt;p>Basically, don&amp;rsquo;t use the &amp;ldquo;Mac OS X&amp;rdquo; setting. Instead, use the &amp;ldquo;Oracle&amp;rdquo; setting. The theme doesn&amp;rsquo;t matter.&lt;/p>
&lt;p>&lt;img src="https://tobybase.com/images/2012-07-20-easy-fix-for-high-cpu-usage-in-sql-developer-on-os-x/aa9173adfc0090dc8b5b7fb471547c26a5243ca8f21c670580cd41df9cbd263f.jpg" alt="">&lt;/p>
&lt;p>That fixes the CPU issue, but somewhat annoyingly moves the menu out of the menu bar at the top of the screen and into the application window, a la Windows, making the interface inconsistent with pretty much every other app I use on my Mac. &lt;a href="https://forums.oracle.com/forums/thread.jspa?threadID=1980688&amp;amp;start=15&amp;amp;tstart=30" class="external-link" target="_blank" rel="noopener">Until recently&lt;/a>, that is. The big news is that &lt;em>as of SQL Developer 3.1, the menu is restored to the top of the screen&lt;/em> when using the Oracle Look and Feel. So for those who had been holding out (like myself) with the more native LaF, you can make the switch now and avoid the most annoying part of the performance/usability compromise.&lt;/p></description></item><item><title>How To Run Oracle Forms 11g Applications on OS X Lion</title><link>https://tobybase.com/posts/2012-07-12-run-oracle-forms-11g-applications-on-os-x-lion/</link><pubDate>Thu, 12 Jul 2012 22:28:24 +0000</pubDate><guid>https://tobybase.com/posts/2012-07-12-run-oracle-forms-11g-applications-on-os-x-lion/</guid><description>&lt;p>Need to run your company&amp;rsquo;s Oracle Forms application from your Mac, and can&amp;rsquo;t? Annoyed with having to crank up a virtual machine for just that one task? Even with the latest published Java version for OS X (1.6.0_33, as of today), you may find that some of the newer Forms applications just won&amp;rsquo;t run. Well, fret no longer. A solution may already be here, at least for Safari and Firefox.&lt;/p></description></item><item><title>How To Use a Perl CGI Script to Show Real Web Server Host Name</title><link>https://tobybase.com/posts/2012-07-02-use-a-perl-cgi-script-to-show-real-web-server-host-name/</link><pubDate>Mon, 02 Jul 2012 22:40:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-07-02-use-a-perl-cgi-script-to-show-real-web-server-host-name/</guid><description>&lt;p>Here is a short and simple Perl CGI script that you can use to expose the hostname of your web server, as opposed to just the server/domain portion of the URL string:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-perl" data-lang="perl">&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">#!/usr/bin/perl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">print&lt;/span> &lt;span class="s">&amp;#34;Content-type: text/html\n\n&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">print&lt;/span> &lt;span class="sb">`hostname`&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Name the file something like &lt;code>hostname.cgi&lt;/code> and place it in your web server&amp;rsquo;s &lt;code>/cgi-bin/&lt;/code> directory, or if your web server is configured appropriately, just name it &lt;code>hostname.pl&lt;/code> and drop it wherever you like.&lt;/p></description></item><item><title>OS X Software for Oracle Developers</title><link>https://tobybase.com/posts/2012-06-27-os-x-software-for-oracle-developers/</link><pubDate>Wed, 27 Jun 2012 21:39:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-06-27-os-x-software-for-oracle-developers/</guid><description>&lt;p>One of the great things about working for &lt;a href="http://www.enkitec.com/" class="external-link" target="_blank" rel="noopener">Enkitec&lt;/a> is that it&amp;rsquo;s a very Mac-friendly shop. When I arrived there in 2007 there were a handful of us running Macs and the attitude at the top seemed to be respectful, but skeptical. They allowed me to use my own laptop, which at the time was a 15-inch Intel Core2 Duo Macbook Pro, with the understanding that I could request a standard-issue Dell laptop at any time should the need arise. It never did. Since that time a large number of my coworkers have made the switch, abandoning their bulky, slow Dell Latitude laptops for 13-inch Macbook Pros, as have both owners of the company.&lt;/p></description></item><item><title>Use DML Error Logging</title><link>https://tobybase.com/posts/2012-06-07-dml-error-logging/</link><pubDate>Thu, 07 Jun 2012 17:04:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-06-07-dml-error-logging/</guid><description>&lt;p>Introduced with Oracle 10gR2, DML Error Logging allows you to make standard SQL &lt;code>INSERT&lt;/code>, &lt;code>UPDATE&lt;/code>, and &lt;code>MERGE&lt;/code> statements behave more like the SQL*Loader utility, logging errors to a table rather than failing and rolling back the first time an error condition is encountered.&lt;/p>
&lt;p>The syntax is the same for all DML statements. Just add the following clause to the end of your DML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-sql" data-lang="sql">&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">LOG&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">ERRORS&lt;/span>&lt;span class="w"> 
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The database will automatically create an error log table for you. Per the documentation (&lt;a href="http://docs.oracle.com/cd/B28359%5F01/server.111/b28286/statements%5F9014.htm" class="external-link" target="_blank" rel="noopener">11g&lt;/a>, &lt;a href="http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables004.htm#InsertDMLErrorLogging" class="external-link" target="_blank" rel="noopener">11gR2&lt;/a>):&lt;/p></description></item><item><title>Let the Database Do the Work</title><link>https://tobybase.com/links/2012-06-01-oracle-row-vs-set-processing/</link><pubDate>Fri, 01 Jun 2012 00:00:00 +0000</pubDate><guid>https://tobybase.com/links/2012-06-01-oracle-row-vs-set-processing/</guid><description>&lt;p>If you&amp;rsquo;re writing database-driven reports for the web, Craig Shallahamer shows why you should let the (Oracle) database handle as much of your selection and transformation logic as possible.&lt;/p></description></item><item><title>Use SQLFiddle to Test New Features, Run Demos</title><link>https://tobybase.com/links/2012-05-25-sqlfiddle-is-a-sql-sandbox/</link><pubDate>Fri, 25 May 2012 00:00:00 +0000</pubDate><guid>https://tobybase.com/links/2012-05-25-sqlfiddle-is-a-sql-sandbox/</guid><description>&lt;ul>
&lt;li>Build your own mini-schema and run queries against it&lt;/li>
&lt;li>Publish your experiments for your friends to tweak&lt;/li>
&lt;li>Try out examples from your favorite SQL book without having to create your a database&lt;/li>
&lt;li>Works for Oracle, PostgreSQL, MySQL, and SQL Server flavors&lt;/li>
&lt;/ul>
&lt;p>All in all, a pretty cool. Very useful for bloggers or teams.&lt;/p></description></item><item><title>ODBC Connection Fails for MS Access App on Citrix</title><link>https://tobybase.com/posts/2012-05-11-odbc-connection-fails-for-ms-access-app-on-citrix/</link><pubDate>Fri, 11 May 2012 20:54:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-05-11-odbc-connection-fails-for-ms-access-app-on-citrix/</guid><description>&lt;p>I ran into an interesting problem recently when attempting to publish an MS Access application with &lt;a href="http://www.citrix.com/English/ps2/products/product.asp?contentID=186&amp;amp;ntref=footer" class="external-link" target="_blank" rel="noopener">Citrix XenApp&lt;/a>. The application pulled data from an Oracle database, so an ODBC connection was created on the Citrix server. What we found was that when a non-privileged user tried to run the application, the connection failed. When the Citrix server admin ran it, however, it worked. Furthermore, as long as the admin was logged in, anybody else could run the application successfully; when he logged out, the users&amp;rsquo; connections broke again.&lt;/p></description></item><item><title>Discovering Command-line Java Profiling Tools</title><link>https://tobybase.com/posts/2012-05-02-discovering-command-line-java-profiling-tools/</link><pubDate>Wed, 02 May 2012 21:41:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-05-02-discovering-command-line-java-profiling-tools/</guid><description>&lt;p>At my current client I am responsible for administering a third-party Java appplication that unfortunately generates a lot of performance complaints. It&amp;rsquo;s a multi-tiered system with the middle-tier running on Oracle Appication Server 10.1.3. I am already familiar with GUI profiling tools like &lt;code>jconsole&lt;/code> and &lt;code>jvisualvm&lt;/code>, both of which are included with Oracle&amp;rsquo;s JDK, and I have played around with the profiling capabilities in NetBeans. All of these profiling tools are fairly similar to one another in look and functionality.&lt;/p></description></item><item><title>Table Functions: 9i Feature Worth Revisiting (Part 2)</title><link>https://tobybase.com/posts/2012-04-27-table-functions-9i-feature-worth-revisiting-part-2/</link><pubDate>Fri, 27 Apr 2012 22:35:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-04-27-table-functions-9i-feature-worth-revisiting-part-2/</guid><description>&lt;p>In &lt;a href="https://tobybase.com/posts/2012-04-27-table-functions-9i-feature-worth-revisiting-part-1/-1" >part one of this series&lt;/a> I showed a simple example of how table functions can be used to treat PL/SQL collection types as tables in a SQL query. We used a nested table collection type to which we manually added a few entries. In this example, I intend to show a more practical use of table functions using all three PL/SQL collection types: associative arrays, nested tables, and VARRAYs.&lt;/p></description></item><item><title>Table Functions: 9i Feature Worth Revisiting (Part 1)</title><link>https://tobybase.com/posts/2012-04-27-table-functions-9i-feature-worth-revisiting-part-1/</link><pubDate>Fri, 27 Apr 2012 22:27:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-04-27-table-functions-9i-feature-worth-revisiting-part-1/</guid><description>&lt;p>Yes, they&amp;rsquo;ve been around for a while, but if you haven&amp;rsquo;t made use of table functions lately you might want to reacquaint yourself with this old gem. Table functions allow you to query the contents of PL/SQL collection types using SQL&amp;rsquo;s TABLE operator. Here is a simple example.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-plpgsql" data-lang="plpgsql">&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">CREATE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">OR&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">REPLACE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PACKAGE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">example&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">AS&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">TYPE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">nested_table_typ&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">IS&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">TABLE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">OF&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">VARCHAR2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">100&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">FUNCTION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">get_nested_table_data&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">RETURN&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">nested_table_typ&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PIPELINED&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">END&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">example&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">CREATE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">OR&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">REPLACE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PACKAGE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">BODY&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">example&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">AS&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">FUNCTION&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">get_nested_table_data&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">RETURN&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">nested_table_typ&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">PIPELINED&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">IS&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">BEGIN&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">PIPE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ROW&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;one&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">PIPE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ROW&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;two&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="n">PIPE&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">ROW&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;three&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">RETURN&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">END&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">get_nested_table_data&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="k">END&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="n">example&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The package function example.get_nested_table_data returns a PL/SQL collection — in this case, a nested table. The PIPELINED directive instructs the function to return data to the calling query as rows are populated by the PIPE ROW command. That way, you don&amp;rsquo;t need to wait for the function to finish before you get results from your query.&lt;/p></description></item><item><title>How To Make Bash Scripts crontab-Compatible</title><link>https://tobybase.com/posts/2012-04-05-make-bash-scripts-crontab-compatible/</link><pubDate>Thu, 05 Apr 2012 21:19:05 +0000</pubDate><guid>https://tobybase.com/posts/2012-04-05-make-bash-scripts-crontab-compatible/</guid><description>&lt;p>When writing shell scripts in bash, consider whether your script can be automated in a batch scheduler like cron. If you reference any external resources in your script relative to the directory in which it resides, those references may break when running your script through cron.&lt;/p>
&lt;p>By default, crontab runs scripts in the user&amp;rsquo;s home directory, as specified in &lt;code>/etc/passwd&lt;/code>. For user &amp;ldquo;Tim&amp;rdquo; with home directory &lt;code>/home/tim&lt;/code>, a sample crontab might look something like the following:&lt;/p></description></item><item><title>Invalidating Toplink Session Cache To Avoid Stale Data</title><link>https://tobybase.com/posts/2012-03-09-invalidating-toplink-session-cache-to-avoid-stale-data/</link><pubDate>Fri, 09 Mar 2012 18:42:00 +0000</pubDate><guid>https://tobybase.com/posts/2012-03-09-invalidating-toplink-session-cache-to-avoid-stale-data/</guid><description>&lt;p>Toplink is a Java framework that maps objects to database tables. It is the reference implementation for the Java Persistence Architecture, or JPA. Developers use Toplink to manage data persistence (storage), queries, and transactions in an Oracle database. By default, Toplink makes use of a special cache called a Session Cache, maintained on the server, which is meant to speed up performance. Queried data is stored in the Session Cache and used in subsequent queries to reduce or eliminate calls to the database.&lt;/p></description></item><item><title>About Me</title><link>https://tobybase.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://tobybase.com/about/</guid><description>&lt;p>&lt;img src="https://res.cloudinary.com/tobyblog/image/upload/c_limit,h_512,w_512/v1556138266/img/meandkass.jpg" alt="The wife and I in Honolulu">&lt;/p>
&lt;p>Hi, I&amp;rsquo;m Toby, and &lt;a href="http://tobybase.com/" class="external-link" target="_blank" rel="noopener">Tobybase&lt;/a> is my professional blog. I update from time to time when I run across problems or solutions that I think might be of interest to people. I try not to keep too much of the good stuff to myself. I&amp;rsquo;m an Oracle developer and database performance analyst by trade, and for the last few years I&amp;rsquo;ve been working primarily on the &lt;a href="https://www.oracle.com/engineered-systems/exadata/" class="external-link" target="_blank" rel="noopener">Exadata&lt;/a> platform, a specialty database machine developed by &lt;a href="http://oracle.com/" class="external-link" target="_blank" rel="noopener">Oracle&lt;/a> that changes the ordinary rules of the game for performance tuning. I enjoy exploring &lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/19/index.html" class="external-link" target="_blank" rel="noopener">new technologies&lt;/a> and &lt;a href="https://github.com/oracle/docker-images" class="external-link" target="_blank" rel="noopener">learning new things&lt;/a>. I work at &lt;a href="http://infolob.com/" class="external-link" target="_blank" rel="noopener">Infolob&lt;/a>, an Oracle consultancy and Platinum Partner in Irving, Texas, with some of the &lt;a href="https://www.infolob.com/leader-profile/tim-fox/" class="external-link" target="_blank" rel="noopener">best folks&lt;/a> in the business. I love my job and my work. Who knows, maybe I can help you someday.&lt;/p></description></item></channel></rss>