<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on Klein Online</title><link>/blog/</link><description>Recent content in Blogs on Klein Online</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>bryan@bryanklein.com (Bryan W. Klein)</managingEditor><webMaster>bryan@bryanklein.com (Bryan W. Klein)</webMaster><lastBuildDate>Tue, 15 Jan 2019 09:32:26 -0800</lastBuildDate><atom:link href="/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo &amp; Asciidoctor, edited with VS Code, built with GitLab CI/CD and hosted on Firebase.</title><link>/blog/hugo-asciidoctor-vscode-gitlab-firebase/</link><pubDate>Tue, 15 Jan 2019 09:32:26 -0800</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/hugo-asciidoctor-vscode-gitlab-firebase/</guid><description>Why on Earth would you ever do something like this? Well, because Hugo is a fantastic static site generator that supports Asciidoc format content files with an external helper, and Asciidoc is an excellent plain text documentation format for content that requires a bit more power than Markdown alone can provide. This post goes over what I setup to make this happen.
Overview Of course you can roll your own to get the job done, but here is what I used in my solution.</description></item><item><title>Why I keep Hugo in my repository and how I update it with Python.</title><link>/blog/hugo-update-script-and-binaries-in-repository/</link><pubDate>Wed, 01 Aug 2018 10:24:41 -0700</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/hugo-update-script-and-binaries-in-repository/</guid><description>For one of my projects I have a few different site developers and content authors. I really wanted to simplify the process of adding a new member to the team and get them up to speed quickly.
Fortunately, the Static Site Generator &amp;ldquo;Hugo&amp;rdquo; uses compiled binaries and does not require anything setup on the system to run. Having said that, setting up a couple of external tools (NPM and Python) can make running and updating Hugo on any OS a breeze for anyone on the team.</description></item><item><title>Hugo, Python and Sheets, Oh My!</title><link>/blog/hugo-python-gsheets-oh-my/</link><pubDate>Thu, 26 Apr 2018 15:51:46 -0700</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/hugo-python-gsheets-oh-my/</guid><description>Backstory I posted recently about building online fundraising pages for a Color Run event hosted by my daughter&amp;rsquo;s Elementary School PTA. Originally I was using a CSV file as the data source for the student&amp;rsquo;s donation pages. I found a way to keep the data in Google Sheets and pull from it directly on site build in Netlify, so that they can easily be updated by admin staff in the PTA without going to text files or messing with the Git repository for each change.</description></item><item><title>Using Python, Webtask.io, Stripe and Hugo for Charity Fundraising Pages</title><link>/blog/python-webtask-stripe-and-hugo-for-charity-fundraising-pages/</link><pubDate>Tue, 03 Apr 2018 20:19:31 +0000</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/python-webtask-stripe-and-hugo-for-charity-fundraising-pages/</guid><description>How it begins I&amp;rsquo;ve been volunteering time to help the PTA at my youngest daughter&amp;rsquo;s Elementary School implement a new website and bring some web technologies to their operations. This post focuses on one aspect of this effort, fundraising.
The annual Color Run is coming soon and the PTA uses this event as one of the many small fundraisers for the organization. The question to me was, &amp;ldquo;Can we accept online donations for the students, where each student has their own unique donation page/url?</description></item><item><title>Replacing GitLab CI/CD, Docker Image and Gitlab Pages Hosted on Cloudflare, with Netlify</title><link>/blog/gitlab-cicd-pages-and-cloudflare-to-netlify/</link><pubDate>Wed, 28 Mar 2018 17:24:55 -0700</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/gitlab-cicd-pages-and-cloudflare-to-netlify/</guid><description>To simplify and improve the process of building this website, I had to make a few changes.
My previous build and delivery process (written about on this site) was based on GitLab CI/CD using a Custom Docker Image and creating GitLab Pages that were hosted on Cloudflare CDN. My new setup just uses GitLab for the code repository and Netlify for everything else.
Using Netlify is fairly common for static sites, but the thing that made mine unique and required some of the complexity of the previous setup, is that I wanted to use Madoko to build some documentation files and include the output of that process into the final website.</description></item><item><title>Custom Docker Image and CI Config File for Hugo and Madoko on GitLab</title><link>/blog/custom-docker-image-and-ci-config-file-for-hugo-and-madoko-on-gitlab/</link><pubDate>Mon, 29 Jan 2018 09:01:24 -0800</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/custom-docker-image-and-ci-config-file-for-hugo-and-madoko-on-gitlab/</guid><description>&lt;p>I posted last year about using &lt;a href="/blog/transition-from-wordpress/">Hugo and Madoko in a Custom Docker Image for GitLab CI/CD&lt;/a>. I received an email asking for more information about the image and my CI file setup. This post goes into a bit more detail about the GitLab CI configuration file that I used and what the various parts of it do in the build process.&lt;/p></description></item><item><title>Hugo and Madoko in a Custom Docker Image for GitLab CI/CD</title><link>/blog/hugo-and-madoko-in-a-gitlab-custom-docker-image/</link><pubDate>Wed, 21 Jun 2017 00:39:25 -0700</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/hugo-and-madoko-in-a-gitlab-custom-docker-image/</guid><description>&lt;p>I migrated to &lt;strong>&lt;a href="/blog/hugo-site-on-gitlab/">Hugo from Wordpress&lt;/a>&lt;/strong>, and in that process I have been trying to find ways to optimize the editing, building and hosting systems that I use for this website.&lt;/p></description></item><item><title>Hosting Hugo on GitLab</title><link>/blog/hugo-site-on-gitlab/</link><pubDate>Wed, 21 Dec 2016 16:19:32 -0800</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/hugo-site-on-gitlab/</guid><description>&lt;p>I recently &lt;strong>&lt;a href="/blog/transition-from-wordpress/">decided to switch from Wordpress to a Static Site&lt;/a>&lt;/strong>. This post is a review of what I finally ended up with for the most simple solution for my site. I had a few guiding principles as I worked through the process of setting this up.&lt;/p>
&lt;ul>
&lt;li>Free or Cheap static site hosting&lt;/li>
&lt;li>As few moving parts and systems as possible&lt;/li>
&lt;li>Easy to create or update content from desktop or mobile&lt;/li>
&lt;li>Supports SSL (HTTPS) for my domain&lt;/li>
&lt;/ul></description></item><item><title>Spain, FEMTC 2016</title><link>/blog/spain-femtc-2016/</link><pubDate>Mon, 14 Nov 2016 12:45:53 -0800</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/spain-femtc-2016/</guid><description>Off to Spain for the Fire and Evacuation Modeling Technical Conference. I&amp;rsquo;ve really been looking forward to this event and to be able to bring Carrie along with me. Off we go!</description></item><item><title>2016 - A Year of Changes</title><link>/blog/2016-a-year-of-changes/</link><pubDate>Tue, 08 Nov 2016 17:46:02 -0800</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/2016-a-year-of-changes/</guid><description>&lt;p>Wow, what an amazing year. Some of the best and worst things to have happen in life happened this year. In rough chronological order.&lt;/p></description></item><item><title>Transition from Wordpress</title><link>/blog/transition-from-wordpress/</link><pubDate>Tue, 08 Nov 2016 01:18:53 -0800</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/transition-from-wordpress/</guid><description>&lt;p>The subject of the email read, &amp;ldquo;TOS Violation: Spamvertising and hosting a redirect to a potentially fraudulent pharmacy site.&amp;rdquo;, how could this be? I had the latest version of Wordpress installed, plug-ins were up to date. Somehow a creepy bot or person figured out a way in and started using my domain for their own benefit.&lt;/p></description></item><item><title>Multi-column Filter Excel Function</title><link>/blog/multi-column-filter-excel-function/</link><pubDate>Mon, 13 Sep 2010 17:46:02 -0800</pubDate><author>bryan@bryanklein.com (Bryan W. Klein)</author><guid>/blog/multi-column-filter-excel-function/</guid><description>So today I needed to filter a fairly giant csv file down to only the rows that contained certain values in either one or the other column.
I wanted only the rows where “PL” was in the country column, OR the email address column had a value that ended with “.pl”.
So I made this little function in the last cell of each row :
=OR(COUNTIF(K2,&amp;quot;PL&amp;quot;),COUNTIF(L2,&amp;quot;*.pl&amp;quot;))
Then I filtered the new column that contained either TRUE or FALSE, by all the rows that were TRUE.</description></item></channel></rss>