<?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/google-cloud.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/google-cloud.xml</id>
  <author>
    <name>Erik L. Arneson</name>
  </author>
      <entry>
        
        <title>Process Automation for an Oregon Charitable Foundation</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2026/05/process-automation-oregon-charitable-foundation" rel="alternate" type="text/html" title="Process Automation for an Oregon Charitable Foundation" />
        <updated>2026-05-22T00:00:00+00:00</updated>
        <id>https://arnesonium.com/2026/05/sref</id>
          <category term="cloud" />
        
          <category term="cloud-computing" />
        
          <category term="golang" />
        
          <category term="svelte" />
        
          <category term="typescript" />
        
          <category term="automation" />
        
          <category term="case-study" />
        
          <category term="google-cloud" />
        
          <category term="programming" />
        
          <category term="testing" />
        
          <category term="web-development" />
        
          <category term="software-development" />
        <content type="html" xml:base="https://arnesonium.com/2026/05/process-automation-oregon-charitable-foundation">&lt;p&gt;The &lt;a href=&quot;https://orsrscholarships.com/&quot;&gt;Oregon Scottish Rite Education Foundation&lt;/a&gt; awards scholarships annually to students across Oregon
who are entering into college or trade schools. Over the past few years, their foundation has grown,
requiring them to distribute more scholarships than ever. However, since the foundation board is
small and composed entirely of volunteers, they were looking for some way to automate their application process to
reduce the number of manual steps required.&lt;/p&gt;

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

&lt;h2 id=&quot;initial-approach&quot;&gt;Initial Approach&lt;/h2&gt;

&lt;p&gt;Members of the board approached me with a wish list of features and requirements. They wanted a
system to integrate seamlessly with their website, while incoming applications should be
automatically checked, sorted, and categorized by county. They already had a spreadsheet system for
tracking applicants as well as a cloud storage system for storing supporting documents; they wanted
the automation system to integrate with these existing components.&lt;/p&gt;

&lt;p&gt;Since the board was already utilizing Google Business products for cloud documents and storage, I
decided that the best approach would be to lean into Google Cloud services. Following their list of
requirements, I implemented a &lt;a href=&quot;https://cloud.google.com/run&quot;&gt;Google Cloud Run&lt;/a&gt; service in &lt;a href=&quot;https://go.dev/&quot;&gt;Go&lt;/a&gt; that processed incoming applications
from their website, then updated the spreadsheet while preparing their cloud storage system for each
application’s supporting documents. The spreadsheet now contained all the application data,
including a link to an automatically generated PDF version of the application and a link to the
cloud storage location.&lt;/p&gt;

&lt;p&gt;This initial approach cut out an enormous amount of manual work. Previously, applications were
submitted via the website and emailed to a board member, who then manually sorted them by county and
generated PDFs for storage and later distribution.&lt;/p&gt;

&lt;h2 id=&quot;implementation-challenges&quot;&gt;Implementation Challenges&lt;/h2&gt;

&lt;p&gt;The application submission window for the Oregon Scottish Rite Education Foundation runs from
December through March of each year, which gave us a limited amount of time to observe incoming live
data and how the automation was performing.&lt;/p&gt;

&lt;p&gt;My initial approach worked fairly well, and handled 94% of incoming applications properly. However,
the last 6% ran into various problems that prevented correct processing. One error arose from a
misspelling in a county name, which was caught early and corrected. Another series of errors arose
from processing errors with the Google Sheets API, which has both rate limiting and more mysterious,
inexplicable errors. I added additional error correction and error checking, but there was still
some additional manual work to enter data from a handful of applications.&lt;/p&gt;

&lt;p&gt;By the end of the application period, we had managed to reduce the amount of manual data entry and
processing by a large percentage, maybe as much as 60%. After discussing the current process
automation with the board, we began to see opportunities for further automation and improvement.&lt;/p&gt;

&lt;h2 id=&quot;additional-development&quot;&gt;Additional Development&lt;/h2&gt;

&lt;p&gt;After the first year’s application submission window, I began working with one of the board members
to plan out how the process could be improved even more. My list of improvements were primarily on
the backend, and involved robuster error detection and reporting, as well as a backup data store
that would allow the automation to recover from the Google Sheets API errors more elegantly.&lt;/p&gt;

&lt;p&gt;The board proposed an additional feature set that would further reduce manual data processing, by
allowing applicants to upload supporting documents such as letters of recommendation and high school
transcripts. These uploaded documents would then be processed and stored in the proper cloud storage
location, thus reducing the amount of manual file management required by volunteers.&lt;/p&gt;

&lt;p&gt;Implementing these two new features went very smoothly. It required the development of a new
frontend, using &lt;a href=&quot;https://www.typescriptlang.org/&quot;&gt;Typescript&lt;/a&gt; and &lt;a href=&quot;https://svelte.dev/&quot;&gt;Svelte&lt;/a&gt;. This frontend allowed applicants to upload their supporting
documents via a unique link given to each of them by automated email. It used both &lt;a href=&quot;https://cloud.google.com/storage&quot;&gt;Google Cloud
Storage&lt;/a&gt; and the Google Drive API to store these files.&lt;/p&gt;

&lt;p&gt;The improvements on the backend used &lt;a href=&quot;https://cloud.google.com/products/datastore&quot;&gt;Google Cloud Datastore&lt;/a&gt; and a more robust error recovery system.
It now backed up all incoming scholarship applications until they could reliably and more slowly be
added to the spreadsheet with the Google Sheets API, thus nearly eliminating all rate limiting
errors. In addition, progress reports and error output could now be viewed using a new frontend
administrative interface.&lt;/p&gt;

&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;

&lt;p&gt;This round of improvements produced significant results. Over the entire span of the second year of
application submissions, error rates dropped from 6% to &lt;em&gt;just one unrecoverable error.&lt;/em&gt; While I had
been hoping for improvement, even I was surprised by how much of an improvement we achieved!&lt;/p&gt;

&lt;p&gt;The board reported that the amount of manual processing was reduced by another 80-90%, with only a
few applicants resorting to email for sending in their supporting documents. While we have discussed
further improvements to the process automation for the next application submission window, the board
is satisfied with the improvements provided by the level of automation implemented so far.&lt;/p&gt;

&lt;h2 id=&quot;lessons&quot;&gt;Lessons&lt;/h2&gt;

&lt;p&gt;This project benefited a lot by reviewing requirements and expectations frequently with the client.
They were great at providing me with very clear goals from the beginning, and as we progressed and
it became clear where the most volunteer time was being spent, we were able to identify more tasks
for automation.&lt;/p&gt;

&lt;p&gt;On the development side of things, three things were clear. First, cloud services really make the
development and deployment of process automation tools like this a breeze. Costs can be kept low
while still providing robust infrastructure for hosting.&lt;/p&gt;

&lt;p&gt;Second, I learned once more the importance of unit tests. I wrote unit tests for most elements of
the automation software, which allowed me to catch breaking changes and test features very quickly.
&lt;a href=&quot;https://www.ibm.com/think/topics/test-driven-development&quot;&gt;Test-driven development&lt;/a&gt; can be a great way to run a project, and though I did not follow all of its
parameters strictly, that particular philosophy did guide my decision.&lt;/p&gt;

&lt;p&gt;Third, once more I was reminded of how the best-planned software runs into difficulties when it
collides with the real world. I failed to anticipate the Google Sheets API issues and did not
implement enough comprehensive error correction early on. That is not an error I shall repeat again!&lt;/p&gt;

&lt;p&gt;Finally, I learned that even with a project that seems as straightforward as this one, it is
important to control expectations early. This turned into a multiyear project because we saw room
for improvement. I think it is important for a business or organization looking for process
automation to understand that it can be an ongoing series of improvements; not everything will be
accomplished or perfected after one pass.&lt;/p&gt;

&lt;p&gt;Overall, I found this to be a rewarding project. I enjoyed working on software that was aiding a
good cause: helping high school graduates fund their education. It was also very nice to work for a
charitable foundation instead of a for-profit business; it made all of my programming feel a lot
better. I hope to work for more charitable foundations in the future.&lt;/p&gt;</content>
      </entry>
    
      <entry>
        
        <title>Create a Document From Twitter with TweetBook</title>
        <author>
          <name>Erik L. Arneson</name>
        </author>        
        <link href="https://arnesonium.com/2015/04/create-a-document-from-twitter-with-tweetbook/" rel="alternate" type="text/html" title="Create a Document From Twitter with TweetBook" />
        <updated>2015-04-01T17:48:56+00:00</updated>
        <id>https://arnesonium.com/2015/04/create-a-document-from-twitter-with-tweetbook</id>
          <category term="golang" />
        
          <category term="google-cloud" />
        
          <category term="programming" />
        
          <category term="publishing" />
        
          <category term="tweetbook" />
        
          <category term="twitter" />
        
          <category term="web-development" />
        <content type="html" xml:base="https://arnesonium.com/2015/04/create-a-document-from-twitter-with-tweetbook/">&lt;p&gt;I just released &lt;a href=&quot;http://tweetbook.arnesonium.com/&quot; title=&quot;TweetBook&quot; target=&quot;_blank&quot;&gt;TweetBook&lt;/a&gt;, a web application to transform a Twitter stream into a simple document that can easily be turned into a photo album.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;A client came to me complaining that there was no available solution to export a Twitter feed as a document filled with images. There are various other Twitter-to-document converters out there, but they all focus on the text. The client asked me to build a tool to fill this void.&lt;/p&gt;

&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;Since I’ve been working with Google App Engine a lot lately, I used Go to write a tool that retrieves Tweets from a search or timeline. It provides a number of formatting options, and then creates a simple document suitable for exporting into an HTML or PDF file.&lt;/p&gt;

&lt;h2&gt;Try It Out!&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;As of 2022, this application is seven years old and probably doesn’t work anymore.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The client told me to do whatever I wanted with the code, so I’m making it available for use! &lt;strong&gt;&lt;a href=&quot;http://tweetbook.arnesonium.com/&quot; title=&quot;TweetBook&quot; target=&quot;_blank&quot;&gt;Click here to try TweetBook!&lt;/a&gt;&lt;/strong&gt; If you find it useful, please consider funding further development by contributing a small amount with this button:&lt;/p&gt;

&lt;form action=&quot;https://www.paypal.com/cgi-bin/webscr&quot; method=&quot;post&quot; target=&quot;_top&quot;&gt;
 &lt;button type=&quot;submit&quot; class=&quot;btn&quot;&gt;Contribute $1.99 &amp;raquo;&lt;/button&gt;&lt;input type=&quot;hidden&quot; name=&quot;cmd&quot; value=&quot;_s-xclick&quot; /&gt;&lt;input type=&quot;hidden&quot; name=&quot;hosted_button_id&quot; value=&quot;3PNSJJHRF9XWA&quot; /&gt;
 &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://www.paypalobjects.com/en_US/i/scr/pixel.gif&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;
&lt;/form&gt;

&lt;h2&gt;Do You Have a Suggestion? A Bug Report?&lt;/h2&gt;
&lt;p&gt;If you have additional ideas for TweetBook, please visit my &lt;a href=&quot;http://arnesonium.com/contact/&quot; title=&quot;Contact&quot;&gt;Contact page&lt;/a&gt;. I’m eager to hear your feedback and get suggestions and bug reports!&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>
    
</feed>
