<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" >

  <title>Erik L. Arneson — Writer and Software Developer</title>
  <subtitle>Erik L. Arneson is a freelance writer and software developer with WordPress experience. He is located in Portland, Oregon.</subtitle>
  <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator>
  <link href="https://arnesonium.com/feeds/php.xml" rel="self" type="application/atom+xml" />
  <link href="https://arnesonium.com/" rel="alternate" type="text/html" />
  <updated>2026-06-18T15:03:10+00:00</updated>
  <id>https://arnesonium.com/feeds/php.xml</id>
  <author>
    <name>Erik L. Arneson</name>
  </author>
      <entry>
        
        <title>How I Learned to Stop Worrying and Love Elementor</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2026/06/wordpress-love-elementor" rel="alternate" type="text/html" title="How I Learned to Stop Worrying and Love Elementor" />
        <updated>2026-06-18T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2026/06/wordpress-love-elementor</id>
          <category term="php" />
        
          <category term="software-development" />
        
          <category term="web-development" />
        
          <category term="wordpress" />
        <content type="html" xml:base="https://arnesonium.com/2026/06/wordpress-love-elementor">&lt;p&gt;I have worked on a quite a few &lt;a href=&quot;/wordpress/&quot;&gt;WordPress projects&lt;/a&gt; lately that use &lt;a href=&quot;https://elementor.com/&quot;&gt;Elementor&lt;/a&gt;, which is a website
builder with a drag-and-drop interface and some other user-friendly bits. In the past, I have
typically avoided these kinds of tools for WordPress, because they caused more problems than they
solved, but recently, my mind has been changed.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;A few months ago, I helped start a new business, &lt;a href=&quot;https://middlechambermedia.com/&quot;&gt;Middle Chamber Media&lt;/a&gt;, which focuses on building websites
for Masonic lodges. My business partner brought me on because of my experience as a &lt;a href=&quot;/software-development/&quot;&gt;web developer&lt;/a&gt;
with &lt;a href=&quot;/wordpress/&quot;&gt;experience with WordPress&lt;/a&gt;. I have built a ton of custom themes in the past, frequently using
either a child theme approach or starting from a bare-bones theme and building from scratch. This
has worked quite well, and though it can produce a robust and speedy website, it can result in
maintenance challenges in the long-run.&lt;/p&gt;

&lt;p&gt;However, with Middle Chamber Media, we were suddenly faced with the process of managing and
deploying a large number of WordPress sites, and there are just a couple of us working on it.
Currently, our process involves my partner doing most of the theme development and website setup,
and then I go in and fine-tune the website for responsiveness (i.e. for phones and tablets). This
process has been working pretty well for us.&lt;/p&gt;

&lt;h2 id=&quot;more-elementor-experience&quot;&gt;More Elementor Experience&lt;/h2&gt;

&lt;p&gt;Earlier this year, I also helped another client with an Elementor-based WordPress website. This
client wanted some SEO help, but wanted to continue managing the website on their own. Since the
client is not a WordPress expert, Elementor presented an easy user interface for theme edits. We
worked together, using Elementor to clean things up for SEO purposes. And it worked!&lt;/p&gt;

&lt;p&gt;This processes have led me to a surprising conclusion: &lt;strong&gt;Elementor is great for certain things!&lt;/strong&gt; It has
been a very big time saver and an enabler of collaboration across different WordPress skill levels.
I had to adjust to the new workflow and learn the Elementor editor and paradigm, but it has been
worth it. It is such a huge leap forward compared to previous drag-and-drop theme builders for
WordPress. They all used to really suck!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Using Amazon S3 as a Nette Service</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2016/10/using-amazon-s3-as-a-nette-service/" rel="alternate" type="text/html" title="Using Amazon S3 as a Nette Service" />
        <updated>2016-10-26T22:17:16+00:00</updated>
        <id>https://arnesonium.com/2016/10/using-amazon-s3-as-a-nette-service</id>
          <category term="aws" />
        
          <category term="nette" />
        
          <category term="php" />
        
          <category term="programming" />
        
          <category term="s3" />
        
          <category term="web-development" />
        <content type="html" xml:base="https://arnesonium.com/2016/10/using-amazon-s3-as-a-nette-service/">&lt;p&gt;&lt;a href=&quot;https://nette.org/&quot;&gt;Nette&lt;/a&gt; is a popular web application framework for PHP. It is mostly pretty well documented and easy to use. Recently, I needed to upload media from a Nette application to &lt;a href=&quot;https://aws.amazon.com/s3/&quot;&gt;Amazon S3&lt;/a&gt;. This is how I created an S3 service for my Nette application. You will need to be familiar with Nette and have an existing Nette application to follow along.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h1 id=&quot;installing-the-amazon-web-services-sdk&quot;&gt;Installing the Amazon Web Services SDK&lt;/h1&gt;

&lt;p&gt;Before anything will work, you will need to install the AWS SDK using Composer. Run the following command from your Nette project directory.&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;php composer.phar require aws/aws-sdk-php
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;the-s3uploader-service&quot;&gt;The S3Uploader Service&lt;/h1&gt;

&lt;p&gt;Next, create the file &lt;strong&gt;app/model/S3Uploader.php&lt;/strong&gt; and edit it to look like the following. You can also download my version &lt;a href=&quot;https://gist.github.com/pymander/a027523a7b9152660fac8e7bb4801c91&quot;&gt;from this link&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;App\Model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Nette&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Aws\S3\S3Client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;S3Uploader&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;cd&quot;&gt;/** @var \Aws\S3\S3Client */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$s3client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;cd&quot;&gt;/** @var string */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$bucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$bucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$accessKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$secretKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nb&quot;&gt;putenv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;AWS_ACCESS_KEY_ID=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$accessKey&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;nb&quot;&gt;putenv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;AWS_SECRET_ACCESS_KEY=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$secretKey&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;\Aws\S3\S3Client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;
            &lt;span class=&quot;s1&quot;&gt;&apos;version&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;latest&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;s1&quot;&gt;&apos;region&apos;&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;us-west-2&apos;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;

        &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$bucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;cd&quot;&gt;/**
     * Upload a file to an S3 bucket
     *
     * @param string $key The key used for the uploaded object
     * @param string $file The filename to be uploaded
     * @param string $contentType The file&apos;s content type. This defaults to &quot;application/octet-stream&quot;
     *
     * @return string A URL to access the file publically.
     */&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;uploadPublic&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$contentType&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;application/octet-stream&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;putObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;([&lt;/span&gt;
            &lt;span class=&quot;s1&quot;&gt;&apos;Bucket&apos;&lt;/span&gt;     &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;s1&quot;&gt;&apos;Key&apos;&lt;/span&gt;        &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;s1&quot;&gt;&apos;SourceFile&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;s1&quot;&gt;&apos;ContentType&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$contentType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;s1&quot;&gt;&apos;ACL&apos;&lt;/span&gt;        &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;public-read&apos;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;

        &lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getObjectUrl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getClient&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getBucket&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;configuring-the-configurator&quot;&gt;Configuring the Configurator&lt;/h1&gt;

&lt;p&gt;Finally, the tricky part. You need to configure the &lt;a href=&quot;https://doc.nette.org/en/2.4/configuring&quot;&gt;Nette Configurator&lt;/a&gt; so it knows about your new service. Follow these directions.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Open &lt;strong&gt;app/config/config.neon&lt;/strong&gt; with your favorite text editor. At the end of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;services:&lt;/code&gt; section, add the following line.&lt;/p&gt;

    &lt;div class=&quot;language-conf highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;: &lt;span class=&quot;n&quot;&gt;App&lt;/span&gt;\&lt;span class=&quot;n&quot;&gt;Model&lt;/span&gt;\&lt;span class=&quot;n&quot;&gt;S3Uploader&lt;/span&gt;(%&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt;%, %&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;access_key&lt;/span&gt;%, %&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;secret_key&lt;/span&gt;%)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Open &lt;strong&gt;app/config/config.local.neon&lt;/strong&gt;. Find the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;parameters:&lt;/code&gt; section and add this block to it. Replace “ACCESS_KEY” with your AWS access key, and “SECRET_KEY” with your AWS secret key. Set “BUCKET_NAME” to the bucket you’ll be using for your uploads.&lt;/p&gt;

    &lt;div class=&quot;language-conf highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;s3client&lt;/span&gt;:
   &lt;span class=&quot;n&quot;&gt;access_key&lt;/span&gt;: &lt;span class=&quot;n&quot;&gt;ACCESS_KEY&lt;/span&gt;
   &lt;span class=&quot;n&quot;&gt;secret_key&lt;/span&gt;: &lt;span class=&quot;n&quot;&gt;SECRET_KEY&lt;/span&gt;
   &lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt;: &lt;span class=&quot;n&quot;&gt;BUCKET_NAME&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;using-s3uploader&quot;&gt;Using S3Uploader&lt;/h1&gt;

&lt;p&gt;Open up the presenter file that will be using the S3Uploader service. You just need to add a few new lines.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Near the top of the file where you’re loading libraries, add this line.&lt;/p&gt;

    &lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;use&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;App\Model\S3Uploader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;You will need to change your constructor definition to include S3Uploader. Assuming you haven’t changed your constructor function too much, it will probably look like the following.&lt;/p&gt;

    &lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__construct&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;Nette&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;\Database\Context&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$database&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;S3Uploader&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$s3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Finally, you can call the S3Uploader with a simple method call.&lt;/p&gt;

    &lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$objectUrl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$s3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;uploadPublic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$objectKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$filePath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$contentType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Good luck with S3Uploader. Please let me know in the comments how it is working for you. Note that this is an example and the finished product will probably be more sophisticated. However, this should get you started with using Amazon S3 in your Nette applications.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Alternate Ways to Call wp-cron</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2016/03/alternate-ways-to-call-wp-cron/" rel="alternate" type="text/html" title="Alternate Ways to Call wp-cron" />
        <updated>2016-03-05T17:09:28+00:00</updated>
        <id>https://arnesonium.com/2016/03/alternate-ways-to-call-wp-cron</id>
          <category term="best-practices" />
        
          <category term="php" />
        
          <category term="programming" />
        
          <category term="web-development" />
        
          <category term="web-performance" />
        
          <category term="wordpress" />
        <content type="html" xml:base="https://arnesonium.com/2016/03/alternate-ways-to-call-wp-cron/">&lt;p&gt;WordPress includes a job scheduling system called wp-cron. The default method for scheduled jobs is for wp-cron to be checked on each page load, which has the potential to slow down your website while background jobs are run. Check out these other options that help maintain the user experience on your WordPress site while still running important tasks in the background.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2 id=&quot;using-alternate_wp_cron&quot;&gt;Using ALTERNATE_WP_CRON&lt;/h2&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ALTERNATE_WP_CRON&lt;/code&gt; method uses a quick, nearly invisible redirect to direct an incoming user to a new request while the old one continues running, executing background jobs. This is an easy, effective method and it works really well if you don’t have access to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crontab&lt;/code&gt; on your hosting site. Even though this method adds some elements to the page URL, it’s only triggered when background jobs need to be run. To enable it, follow these instructions:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Open your site’s &lt;strong&gt;wp-config.php&lt;/strong&gt; in your text editor.&lt;/li&gt;
  &lt;li&gt;After the lines containing your database credentials, add the following lines:
    &lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cd&quot;&gt;/** Use alternate WP_CRON method with redirects. */&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;ALTERNATE_WP_CRON&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href=&quot;http://wordpress-hackers.1065353.n5.nabble.com/ALTERNATE-WP-CRON-Is-it-worth-it-td39843.html&quot; target=&quot;_blank&quot;&gt;Read more about the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ALTERNATE_WP_CRON&lt;/code&gt; method here.&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;using-crontab&quot;&gt;Using Crontab&lt;/h2&gt;

&lt;p&gt;If you have access to a shell on your web host and can run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cron&lt;/code&gt; jobs, this method might be the best. It ensures that background jobs will get run, even when your website isn’t getting any visitors. It also runs background jobs without requiring a redirect or any additional delays that will be noticed by users. Here’s how you do it.&lt;/p&gt;

&lt;h3 id=&quot;add-a-crontab-entry&quot;&gt;Add a Crontab Entry&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crontab -e&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Add the following lines to the end of your crontab file:
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Call wp-cron regularly&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;/15 &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; curl http://www.example.com/wp-cron.php &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make sure you replace “www.example.com” with your website’s hostname. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*/15&lt;/code&gt; specifies that &lt;strong&gt;wp-cron.php&lt;/strong&gt; will be called every 15 minutes. If you would like to change this, replace the 15 with a different number.&lt;/p&gt;

&lt;h3 id=&quot;disable-built-in-wp-cron&quot;&gt;Disable Built-in wp-cron&lt;/h3&gt;

&lt;p&gt;The next step is to disable the built-in call to wp-cron in WordPress.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Open your site’s &lt;strong&gt;wp-config.php&lt;/strong&gt; in your text editor.&lt;/li&gt;
  &lt;li&gt;After the lines containing your database credentials, add the following lines:
    &lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cd&quot;&gt;/** Disable built-in cron in favor of system crontab */&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;DISABLE_WP_CRON&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For more details on this method, &lt;a href=&quot;https://easyengine.io/tutorials/wordpress/wp-cron-crontab/&quot; target=&quot;_blank&quot;&gt;check out this page on EasyEngine&lt;/a&gt;.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>OpenPGP for WordPress Now Supports Contact Form 7</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2016/01/openpgp-for-wordpress-now-supports-contact-form-7/" rel="alternate" type="text/html" title="OpenPGP for WordPress Now Supports Contact Form 7" />
        <updated>2016-01-20T16:54:43+00:00</updated>
        <id>https://arnesonium.com/2016/01/openpgp-for-wordpress-now-supports-contact-form-7</id>
          <category term="announcement" />
        
          <category term="cryptography" />
        
          <category term="encryption" />
        
          <category term="javascript" />
        
          <category term="openpgp" />
        
          <category term="php" />
        
          <category term="plugin" />
        
          <category term="programming" />
        
          <category term="web-development" />
        
          <category term="wordpress" />
        <content type="html" xml:base="https://arnesonium.com/2016/01/openpgp-for-wordpress-now-supports-contact-form-7/">&lt;p&gt;&lt;a href=&quot;https://arnesonium.com/wordpress-openpgp/&quot;&gt;OpenPGP Form Encryption for WordPress&lt;/a&gt; now supports &lt;a href=&quot;http://contactform7.com/&quot; target=&quot;_blank&quot;&gt;Contact Form 7&lt;/a&gt;. You can download version 1.4.0 at the &lt;a href=&quot;https://wordpress.org/plugins/openpgp-form-encryption/&quot; target=&quot;_blank&quot;&gt;WordPress plugin site&lt;/a&gt; and start using a safer contact form on your website today!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Pono Rez WordPress Plugin</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2016/01/pono-rez-wordpress-plugin/" rel="alternate" type="text/html" title="Pono Rez WordPress Plugin" />
        <updated>2016-01-18T17:52:32+00:00</updated>
        <id>https://arnesonium.com/2016/01/pono-rez-wordpress-plugin</id>
          <category term="javascript" />
        
          <category term="php" />
        
          <category term="programming" />
        
          <category term="web-development" />
        
          <category term="wordpress" />
        <content type="html" xml:base="https://arnesonium.com/2016/01/pono-rez-wordpress-plugin/">&lt;p&gt;Together with &lt;a href=&quot;http://www.commercecollective.com/&quot; target=&quot;_blank&quot;&gt;Commerce Collective&lt;/a&gt;, ((I started working with them last year, &lt;a href=&quot;https://arnesonium.com/2015/05/now-working-with-commercecollective/&quot;&gt;remember&lt;/a&gt;?)) we have built a WordPress plugin to allow &lt;a href=&quot;http://www.a3h.org/&quot; target=&quot;_blank&quot;&gt;Activities &amp;amp; Attractions Association of Hawaii&lt;/a&gt; (A3H) to quickly and easily integrate activity bookings and sales into their WordPress websites.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;We still have more features to add to the plugin, but it’s a solid start that will save A3H members a lot of time. It is written in PHP ((Like all WordPress plugins, of course.)) and JavaScript, and uses the Pono Rez SOAP interface to integrate activity data into a WordPress page.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://wordpress.org/plugins/a3h-pono-rez-activities-and-booking/&quot; target=&quot;_blank&quot;&gt;Check out the plugin page here!&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Security Link Rodeo: Silk Road, the Patriot Act, Alan Turing, and Your Passwords</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2015/06/security-link-rodeo-silk-road-patriot-act/" rel="alternate" type="text/html" title="Security Link Rodeo: Silk Road, the Patriot Act, Alan Turing, and Your Passwords" />
        <updated>2015-06-05T17:33:25+00:00</updated>
        <id>https://arnesonium.com/2015/06/security-link-rodeo-silk-road-patriot-act</id>
          <category term="cryptography" />
        
          <category term="history" />
        
          <category term="link-rodeo" />
        
          <category term="patriot-act" />
        
          <category term="php" />
        
          <category term="security" />
        
          <category term="silk-road" />
        <content type="html" xml:base="https://arnesonium.com/2015/06/security-link-rodeo-silk-road-patriot-act/">&lt;p&gt;The man behind the &lt;strong&gt;Silk Road&lt;/strong&gt;, Ross Ulbricht, &lt;a href=&quot;http://nypost.com/2015/05/29/silk-road-mastermind-gets-life-in-prison/&quot; target=&quot;_blank&quot;&gt;received a life sentence&lt;/a&gt; after being convicted of money laundering and drug trafficking. It’s estimated that he made around $18 million on the website, which ran as &lt;a href=&quot;http://www.pcmag.com/article2/0,2817,2425184,00.asp&quot; target=&quot;_blank&quot;&gt;a hidden service in the Tor network&lt;/a&gt;. Some of the operators for the Silk Road argue that it was &lt;a href=&quot;http://www.csmonitor.com/USA/2015/0529/Silk-Road-mastermind-drug-kingpin-or-libertarian-ideologue-gone-astray&quot; target=&quot;_blank&quot;&gt;a haven for libertarian philosophy&lt;/a&gt;, but does that really excuse the amount of damage they enabled? The Economist notes that since the Silk Road fell, &lt;a href=&quot;http://www.economist.com/blogs/graphicdetail/2015/05/daily-chart-13?fsrc=scn/tw/te/bl/ed/silkroadsuccessors&quot; target=&quot;_blank&quot;&gt;illegal drug sales on the Internet have doubled&lt;/a&gt;.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Security Intelligence discusses the &lt;a href=&quot;http://securityintelligence.com/news/effectiveness-of-security-questions-called-out-in-new-study&quot; target=&quot;_blank&quot;&gt;effectiveness of &lt;strong&gt;password security questions&lt;/strong&gt;&lt;/a&gt;, pointing out that they are particularly weak points in a system. Two-factor authentication or some kind of physical key are definitely better. And when it comes to passwords, there’s a better way that &lt;a href=&quot;http://blog.webernetz.net/2013/07/30/password-strengthentropy-characters-vs-words/&quot; target=&quot;_blank&quot;&gt;produces easy-to-remember &lt;strong&gt;pass phrases&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Bitstamp, an online &lt;strong&gt;Bitcoin&lt;/strong&gt; marketplace and wallet, &lt;a href=&quot;https://www.bitstamp.net/article/bitstamp-new-usd-eur-gbp-denominated-debit-card/&quot; target=&quot;_blank&quot;&gt;now offers debit cards&lt;/a&gt;. I’ve used Bitstamp many times in the past and it’s always worked well for me.&lt;/p&gt;

&lt;p&gt;Section 215 of the &lt;strong&gt;Patriot Act&lt;/strong&gt; &lt;a href=&quot;http://www.washingtonpost.com/blogs/compost/wp/2015/06/01/section-215-of-the-patriot-act-is-temporarily-down-so-who-you-gonna-call/&quot; target=&quot;_blank&quot;&gt;finally expired&lt;/a&gt;! Not willing to really &lt;a href=&quot;https://www.eff.org/deeplinks/2015/05/dont-worry-government-still-has-plenty-surveillance-power-if-section-215-sunsets&quot; target=&quot;_blank&quot;&gt;stop bulk surveillance&lt;/a&gt;, Congress then &lt;a href=&quot;http://sputniknews.com/us/20150602/1022870319.html&quot; target=&quot;_blank&quot;&gt;pushed through the &lt;strong&gt;USA Freedom Act&lt;/strong&gt;&lt;/a&gt;, which has nothing to do with freedom. Find out how long your mobile phone carrier will retain your call data &lt;a href=&quot;http://www.usnews.com/news/articles/2015/05/22/how-long-cellphone-companies-store-your-call-records&quot; target=&quot;_blank&quot;&gt;in this handy chart&lt;/a&gt;. Demand Progress rightfully &lt;a href=&quot;https://demandprogress.org/demand-progress-decries-passage-of-usa-freedom-act/&quot; target=&quot;_blank&quot;&gt;foamed at the mouth&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;https://twitter.com/demandprogress/status/605849691675189248&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phil Zimmerman&lt;/strong&gt; is still &lt;a href=&quot;http://www.theguardian.com/technology/2015/may/25/philip-zimmermann-king-encryption-reveals-fears-privacy&quot; target=&quot;_blank&quot;&gt;not happy with the state of privacy in the United States&lt;/a&gt;. He’s right to be concerned.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://tm.durusau.net/?p=62491&quot; target=&quot;_blank&quot;&gt;Two more papers are available&lt;/a&gt; from &lt;strong&gt;Alan Turing&lt;/strong&gt;, the father of modern computing and an important cryptologist.&lt;/p&gt;

&lt;p&gt;Finally, the UK Government has &lt;a href=&quot;https://insights.ubuntu.com/2015/03/17/uk-government-issues-ubuntu-14-04-lts-security-guidance/&quot; target=&quot;_blank&quot;&gt;documented security guidance&lt;/a&gt; for &lt;strong&gt;Ubuntu&lt;/strong&gt;. Read the document. It has a lot of really good suggestions for securing your Linux machines.&lt;/p&gt;

&lt;p&gt;https://twitter.com/OUHOSCollection/status/603588936020131843&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Pansophie Online Color Test</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2015/02/pansophie-online-color-test/" rel="alternate" type="text/html" title="Pansophie Online Color Test" />
        <updated>2015-02-23T16:46:52+00:00</updated>
        <id>https://arnesonium.com/2015/02/pansophie-online-color-test</id>
          <category term="javascript" />
        
          <category term="jquery" />
        
          <category term="php" />
        
          <category term="programming" />
        
          <category term="web-design" />
        
          <category term="web-development" />
        
          <category term="zend-framework" />
        <content type="html" xml:base="https://arnesonium.com/2015/02/pansophie-online-color-test/">&lt;p&gt;&lt;a href=&quot;http://eyesandedge.com/pansophie/&quot; target=&quot;_blank&quot;&gt;Pansophie Personality and Color&lt;/a&gt; is focused on mapping personalities to colors. Alexandra Hall wanted an online testing platform with flexible questions, testing mechanisms, and report generation. I built a full-featured web application to meet Pansophie PC’s requirements. This was one of my early Zend Framework projects, but it ended up with some neat features.
&lt;!--more--&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;A private administrative interface&lt;/li&gt;
	&lt;li&gt;Seamless jQuery-backed test interface with few pageloads&lt;/li&gt;
	&lt;li&gt;Custom PDF reports, generated on the fly&lt;/li&gt;
	&lt;li&gt;A customer database with contact information&lt;/li&gt;
	&lt;li&gt;API endpoints for test generation&lt;/li&gt;
	&lt;li&gt;Integration with 3rd party e-commerce system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pansopie PC isn’t currently doing business.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Prime Number Service on Google App Engine</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2015/02/prime-number-google-app-engine/" rel="alternate" type="text/html" title="Prime Number Service on Google App Engine" />
        <updated>2015-02-20T22:37:41+00:00</updated>
        <id>https://arnesonium.com/2015/02/prime-number-google-app-engine</id>
          <category term="cloud" />
        
          <category term="github" />
        
          <category term="golang" />
        
          <category term="google-cloud" />
        
          <category term="php" />
        
          <category term="plugin" />
        
          <category term="prime-numbers" />
        
          <category term="programming" />
        
          <category term="web-development" />
        
          <category term="wordpress" />
        <content type="html" xml:base="https://arnesonium.com/2015/02/prime-number-google-app-engine/">&lt;p&gt;As I &lt;a href=&quot;http://arnesonium.com/2015/02/random-link-rodeo/&quot; title=&quot;Random Link Rodeo&quot;&gt;mentioned earlier this week&lt;/a&gt;, I’ve decided to learn the &lt;a href=&quot;http://golang.org/&quot; target=&quot;_blank&quot;&gt;Go programming language&lt;/a&gt;. I’ve also been very interested in Google App Engine, which lets you deploy applications to the cloud from a development sandbox. It’s like magic for web and mobile applications!
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;Since I’m so fond of prime numbers, I thought I’d build a web service for calculating them. It does some other fun stuff, too, like figuring out if a number is happy. It also caches primes in the Google Cloud Datastore with some minimal statistics. If you’d like to see the source code for the prime number service, it’s &lt;a href=&quot;https://github.com/pymander/prime-json-service&quot; target=&quot;_blank&quot;&gt;available on GitHub&lt;/a&gt;.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;The next thing I did was write the simplest of all WordPress plugins to query the service and return the latest prime number in the sequence. This all happens in a post using the [[nextprime]] shortcode. ((Including this information has the side-effect of revealing how much traffic this page gets.))&lt;/p&gt;

&lt;h1&gt;[nextprime]&lt;/h1&gt;

&lt;p&gt;You can also &lt;a href=&quot;http://sigma-crow-364.appspot.com/&quot; title=&quot;Prime Number Web App&quot; target=&quot;_blank&quot;&gt;visit the app itself&lt;/a&gt; and read about querying the service to get prime numbers for your own web page!&lt;/p&gt;

&lt;p&gt;Learning Go and writing for the Google App Engine has been really fun. I’m ready for a new challenge! If you have a web application in mind, &lt;a href=&quot;http://arnesonium.com/contact/&quot; title=&quot;Contact&quot;&gt;contact me and let’s figure out how to build it&lt;/a&gt;!&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Integrating Cedexis Radar with WordPress Sites</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2015/01/integrating-cedexis-radar-with-wordpress-sites/" rel="alternate" type="text/html" title="Integrating Cedexis Radar with WordPress Sites" />
        <updated>2015-01-26T20:00:52+00:00</updated>
        <id>https://arnesonium.com/2015/01/integrating-cedexis-radar-with-wordpress-sites</id>
          <category term="cedexis" />
        
          <category term="performance" />
        
          <category term="php" />
        
          <category term="plugin" />
        
          <category term="programming" />
        
          <category term="web-development" />
        
          <category term="web-performance" />
        
          <category term="wordpress" />
        <content type="html" xml:base="https://arnesonium.com/2015/01/integrating-cedexis-radar-with-wordpress-sites/">&lt;p&gt;&lt;a href=&quot;http://www.cedexis.com/radar/&quot; target=&quot;_blank&quot;&gt;Cedexis Radar&lt;/a&gt; is a real user monitoring (RUM) system that collects millions of metrics every day. It’s used to measure the health of networks in order for &lt;a href=&quot;http://www.cedexis.com/openmix/&quot; target=&quot;_blank&quot;&gt;Cedexis Openmix&lt;/a&gt; to make intelligent routing decisions for web service users.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://cedexis.com&quot;&gt;&lt;img src=&quot;/wp-content/uploads/2015/01/logo-cedexis.png#right&quot; alt=&quot;Cedexis Logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I put together &lt;a href=&quot;/cedexis-radar-tracking-for-wordpress/&quot; title=&quot;Cedexis Radar Tracking for WordPress&quot;&gt;a simple plugin&lt;/a&gt; to add Cedexis Radar tracking codes to a WordPress website. I’m not yet sure how much of an overlap there is between WordPress users and Cedexis Openmix users, but if you’re using both, &lt;a href=&quot;/cedexis-radar-tracking-for-wordpress/&quot; title=&quot;Cedexis Radar Tracking for WordPress&quot;&gt;check out my new plugin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sometime between 2015 and 2022, Cedexis was purchased by Citrix and no longer exists.&lt;/em&gt;&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Philalethes E-Bulletin Online Reader</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2015/01/philalethes-e-bulletin-online-reader/" rel="alternate" type="text/html" title="Philalethes E-Bulletin Online Reader" />
        <updated>2015-01-12T22:33:11+00:00</updated>
        <id>https://arnesonium.com/2015/01/philalethes-e-bulletin-online-reader</id>
          <category term="epub" />
        
          <category term="freemasonry" />
        
          <category term="javascript" />
        
          <category term="php" />
        
          <category term="programming" />
        
          <category term="publishing" />
        
          <category term="web-development" />
        <content type="html" xml:base="https://arnesonium.com/2015/01/philalethes-e-bulletin-online-reader/">&lt;p&gt;I began working on the &lt;a href=&quot;http://freemasonry.org/ebulletin/&quot; title=&quot;Philalethes E-Bulletin&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;Philalethes E-Bulletin&lt;/em&gt;&lt;/a&gt; in the Fall of 2013, and published the first issue in January of 2014. The &lt;em&gt;E-Bulletin&lt;/em&gt; is published quarterly in EPUB and MOBI formats.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/wp-content/uploads/2014/12/Screenshot-from-2014-12-18-214441.png#left&quot; alt=&quot;Philalethes Society Seal&quot; width=&quot;203&quot; height=&quot;171&quot; class=&quot;alignright size-full wp-image-189&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It’s been a great learning experience. Not only have I learned a lot about editing, but I’ve really had to dive into how electronic publishing works. The intricacies of electronic book formats have become well-known to me.&lt;/p&gt;

&lt;p&gt;The Philalethes Society isn’t entirely comfortable with modern technology, however. Most complaints about the &lt;em&gt;E-Bulletin&lt;/em&gt; came from those who didn’t have e-book readers and weren’t comfortable installing software on their PC to handle a new file format. Because of this, I built an online e-book reader specifically for the &lt;em&gt;E-Bulletin&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The online e-book reader is based around the excellent &lt;a href=&quot;https://github.com/futurepress/epub.js/&quot; target=&quot;_blank&quot;&gt;EPUB.js library&lt;/a&gt;, with additional backend code written in PHP.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://freemasonry.org/ebulletin/reader/&quot; title=&quot;Philalethes E-Bulletin Online Reader&quot; target=&quot;_blank&quot;&gt;Click here to visit the &lt;em&gt;Philalethes E-Bulletin&lt;/em&gt; Online Reader.&lt;/a&gt;&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>PunchlinePDX Event Manager</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2014/12/punchlinepdx-event-manager/" rel="alternate" type="text/html" title="PunchlinePDX Event Manager" />
        <updated>2014-12-08T17:23:17+00:00</updated>
        <id>https://arnesonium.com/2014/12/punchlinepdx-event-manager</id>
          <category term="database" />
        
          <category term="javascript" />
        
          <category term="php" />
        
          <category term="programming" />
        
          <category term="web-development" />
        <content type="html" xml:base="https://arnesonium.com/2014/12/punchlinepdx-event-manager/">&lt;p&gt;&lt;a href=&quot;http://www.punchlinepdx.com/&quot;&gt;PunchlinePDX&lt;/a&gt; is a slow-motion video booth for events and parties based out of Portland, Oregon. Earlier this year, I helped them develop event management software that would allow them to upload and curate video.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;This was their first experience hiring a software developer, so I had the opportunity to walk them through the entire process. We started by outlining requirements and coming up with a solid plan with application screens, functions, and things to meet their business needs. We then brainstormed additional features and came up with something pretty amazing.&lt;/p&gt;

&lt;p&gt;These are a few of the interesting things we came up with:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Cloud-backed storage for all videos&lt;/li&gt;
    &lt;li&gt;Text messaging interface&lt;/li&gt;
    &lt;li&gt;Smart social media sharing&lt;/li&gt;
    &lt;li&gt;Contact management&lt;/li&gt;
    &lt;li&gt;Event and sharing privacy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best part was the testing process. While I ran them through their new software, they made slow-motion video of me and used the software to upload and manage it. Check it out!&lt;/p&gt;

&lt;video controls=&quot;&quot; autoplay=&quot;&quot; loop=&quot;&quot; style=&quot;width:98%&quot; poster=&quot;https://punchline-staging.s3.amazonaws.com/event-5-video-14.jpg&quot;&gt;
   &lt;source src=&quot;https://punchline-staging.s3.amazonaws.com/event-5-video-14.mp4&quot; type=&quot;video/mp4&quot; /&gt;
   Your browser does not support the video tag.
&lt;/video&gt;

&lt;p&gt;&lt;strong&gt;You should seriously consider booking these guys for your holiday party.&lt;/strong&gt;&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>OpenPGP.js and WordPress</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2014/12/openpgp-js-and-wordpress/" rel="alternate" type="text/html" title="OpenPGP.js and WordPress" />
        <updated>2014-12-03T16:14:51+00:00</updated>
        <id>https://arnesonium.com/2014/12/openpgp-js-and-wordpress</id>
          <category term="javascript" />
        
          <category term="php" />
        
          <category term="plugin" />
        
          <category term="wordpress" />
        <content type="html" xml:base="https://arnesonium.com/2014/12/openpgp-js-and-wordpress/">&lt;p&gt;Near the end of November, I began fiddling with &lt;a href=&quot;http://openpgpjs.org/&quot; target=&quot;_blank&quot;&gt;OpenPGP.js&lt;/a&gt; and building a WordPress plugin. My goal is to create a method by which visitors can encrypt messages to me on my &lt;a href=&quot;http://arnesonium.com/contact/&quot; title=&quot;Contact&quot;&gt;Contact page&lt;/a&gt; using my public key.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;I finished up a pretty simple little plugin. You can &lt;a href=&quot;http://arnesonium.com/wordpress-openpgp/&quot; title=&quot;OpenPGP Form Encryption for WordPress&quot;&gt;view the details here&lt;/a&gt; or head straight to the &lt;a href=&quot;https://github.com/pymander/wordpress-openpgp&quot;&gt;GitHub project page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, when I finished earlier this week and decided to submit it to the WordPress Plugin Directory, I found that somebody had beat me to it by almost a month. I’ve taken a look at the code and it looks pretty good. You can check out my plugin, which was published as &lt;a href=&quot;https://wordpress.org/plugins/openpgp-form-encryption/&quot; target=&quot;_blank&quot;&gt;OpenPGP Form Encryption for Wordpress&lt;/a&gt;, and you can check out the other guy’s plugin, &lt;a href=&quot;https://wordpress.org/plugins/pgp-contact/&quot; target=&quot;_blank&quot;&gt;PGP Contact plugin&lt;/a&gt;.&lt;/p&gt;</content>
      </entry>
    
</feed>
