Jekyll2022-04-18T00:00:53+00:00https://adrianmoreno.com/feed.xmlAdrian MorenoEnterprise Solution ArchitectAdrian J. MorenoGet Homebrew Working with macOS 11 Big Sur2020-11-15T05:00:00+00:002020-11-15T05:00:00+00:00https://adrianmoreno.com/2020/11/15/get-homebrew-working-with-macos-11-big-sur<p>My 2016 MacBook Pro has been sitting around ignored of late. My primary work laptop has been an Acer Predator for the last year. With the production release of Big Sur, I decided to upgrade the OS the day of release. This weekend, I tried to upgrade HomeBrew and everything it had installed, but quickly ran into a big issue with the Command Line Tools (CLT) being out of date.<!--more--></p>
<p>For those that are unfamiliar, <a href="https://brew.sh/" class="outbound">Homebrew</a> is “The Missing Package Manager for macOS”. Installing software that it supports is easy and it’s considered a must-have if you’re developing on macOS.</p>
<p><code class="language-plaintext highlighter-rouge">brew install <package></code></p>
<p>Upgrading Homebrew and its packages can be done just as easily:</p>
<p><code class="language-plaintext highlighter-rouge">brew upgrade</code></p>
<p>but running this on Big Sur, with the latest version of Xcode (12.2) installed via the App Store will throw this error:</p>
<p><code class="language-plaintext highlighter-rouge">Your CLT does not support macOS 11.0</code></p>
<h2 id="xcode-beta">Xcode Beta</h2>
<p>Log into <a href="https://developer.apple.com" class="outbound">Apple’s Developer Site</a> and download the beta of Xcode, version 12.3 as of this writing. It’s an 11.5 GB ZIP file, which will take time to download. It also took at least 30 minutes to unzip on my machine and I have an SSD. Don’t just drop it into your <code class="language-plaintext highlighter-rouge">Applicaitons</code> folder, you’ll need to completely remove your existing install of Xcode from the app store. Take a look at <a href="https://medium.com/@onexlab.io/uninstall-xcode-from-macos-eca1b69dc836" class="outbound">this article</a> for details. I don’t use Xcode other than for the CLT, so be careful and make backups before you start deleting things.</p>
<p>Once you’ve removed the version from the app store, drag the unzipped Xcode Beta into your <code class="language-plaintext highlighter-rouge">Applications</code> folder and run it. You’ll have to accept the license agreement to proceed. Once it’s up and running, run your Homebrew upgrade again.</p>
<h2 id="updated-command-line-tools">Updated Command Line Tools</h2>
<p>I immediately got the same message as before. Installing this beta was reported on multiple sites to have addressed the problem, but for me it didn’t. I forgot that there was command to specially check for issues with Homebrew:</p>
<p><code class="language-plaintext highlighter-rouge">brew doctor</code></p>
<p>Among others were these messages:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Warning: Your Command Line Tools are too outdated.
Update them from Software Update <span class="k">in </span>System Preferences or run:
softwareupdate <span class="nt">--all</span> <span class="nt">--install</span> <span class="nt">--force</span>
Warning: A newer Command Line Tools release is available.
Update them from Software Update <span class="k">in </span>System Preferences or run:
softwareupdate <span class="nt">--all</span> <span class="nt">--install</span> <span class="nt">--force</span>
</code></pre></div></div>
<p>Running the <code class="language-plaintext highlighter-rouge">softwareupdate</code> command found nothing to install. So I followed the next pair of instructions:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>If that doesn<span class="s1">'t show you an update run:
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
</span></code></pre></div></div>
<p>Since these commands start with <a href="https://xkcd.com/149/" class="outbound">sudo</a>, you’ll need to enter your user password so they’ll run. Another download began and the upgraded Command Line Tools were finally installed. If this doesn’t work for some reason, go to <a href="https://developer.apple.com/download/more/" class="outbound">More Downloads for Apple Developers</a> where you can download the DMG for “Command Line Tools for Xcode 12.3 beta” (430 MB). I’m not sure if you can run that without the main Xcode beta installed, but it’s worth a try in order to avoid the other large download. If anyone is able to run that without the main beta, please let me know.</p>
<h2 id="third-times-the-charm">Third Time’s the Charm</h2>
<p>And finally,</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="o">></span> brew upgrade
Updating Homebrew...
Warning: You are using macOS 11.0.
...
<span class="o">==></span> Upgrading 5 outdated packages:
mongodb/brew/mongodb-community 4.2.7 -> 4.4.1
</code></pre></div></div>
<p>And there was much rejoicing! And I was finally able to start writing a new blog post.</p>
<p>Or so I thought.</p>
<p>Because updated software always runs perfectly the first time.</p>
<p>Shyeah, right. (<em>Jekyll, I’m looking at you.</em>)</p>
<h2 id="homebrew-and-apple-silicon">Homebrew and Apple Silicon</h2>
<p>If you’re experiencing any other issues with Homebrew, check their Github account before freaking out. Not everything is currently supported on Big Sur, but they’re working on it. The other massive project in progress is supporting <a href="https://www.apple.com/newsroom/2020/06/apple-announces-mac-transition-to-apple-silicon/" class="outbound">Apple Silicon</a>. Take a look at <a href="https://github.com/Homebrew/brew/issues/7857" class="outbound">macOS 11.0 Big Sur compatibility on Apple Silicon</a> for more information.</p>
<p>And if you can spare something, <a href="https://github.com/homebrew/brew#donations" class="outbound">make a donation</a>. They deserve it.</p>Adrian J. MorenoMy 2016 MacBook Pro has been sitting around ignored of late. My primary work laptop has been an Acer Predator for the last year. With the production release of Big Sur, I decided to upgrade the OS the day of release. This weekend, I tried to upgrade HomeBrew and everything it had installed, but quickly ran into a big issue with the Command Line Tools (CLT) being out of date.Things I Learned While Moving to Gitlab Pages2019-06-30T05:00:00+00:002019-06-30T05:00:00+00:00https://adrianmoreno.com/2019/06/30/things-i-learned-while-moving-to-gitlab-pages<p>After spending a couple of weeks rebuilding this site with Github Pages, I discovered that Gitlab had a similar offering. Since I’ve been using Gitlab exclusively at work, I figured I should give that a shot instead. Moving the files wasn’t difficult, but I did discover that some things worked differently. I also learned that Gitlab Pages had more to offer.<!--more--></p>
<h2 id="github-gets-straight-to-it">Github Gets Straight to It</h2>
<p><a href="https://pages.github.com" class="outbound">Github Pages</a> is very simple to use.</p>
<ul>
<li>Personal or Project site.</li>
<li>Push your own static content (HTML, JS, CSS, etc.)</li>
<li>It only supports <a href="https://jekyllrb.com/" class="outbound">Jekyll</a> for static site generation.</li>
<li>Only <a href="https://pages.github.com/versions/" class="outbound">whitelisted plugins for Jekyll</a> are supported.</li>
<li>You get <a href="https://help.github.com/en/articles/about-supported-custom-domains#custom-subdomains" class="outbound">one apex domain and one subdomain</a>.
<ul>
<li>Apex: <code class="language-plaintext highlighter-rouge">example.com</code></li>
<li>Subdomain: <code class="language-plaintext highlighter-rouge">www.example.com</code> or <code class="language-plaintext highlighter-rouge">blog.example.com</code>, but not both.</li>
</ul>
</li>
<li>Private repositories for public sites are <a href="https://help.github.com/en/articles/githubs-products" class="outbound">not available with GitHub Free</a>.</li>
</ul>
<h2 id="gitlab-is-more-robust">Gitlab is More Robust</h2>
<p><a href="https://about.gitlab.com/product/pages/" class="outbound">Gitlab Pages</a> is simple, until it’s not simple.</p>
<ul>
<li>Personal or Project site.</li>
<li>Push your own static content (HTML, JS, CSS, etc.)</li>
<li>Any static site generator (e.g. Jekyll, Hugo, Middleman, Harp, Hexo, and Brunch)
<ul>
<li>You can specify whichever plugins you need.</li>
</ul>
</li>
<li>Uses <a href="https://docs.gitlab.com/ee/ci/README.html" class="outbound">Gitlab CI/CD</a> to build and publish the site.</li>
<li>Allows multiple custom domains</li>
<li>Private repositories for public sites are free.</li>
</ul>
<h2 id="differences-with-jekyll">Differences with Jekyll</h2>
<p>There are some small, but significant differences with how Jekyll is configured between the two offerings.</p>
<h3 id="core-configuration">Core Configuration</h3>
<p>The biggest difference between the two offerings is related to configuring Jekyll plugins.</p>
<p>Github Pages configures plugins in the main <code class="language-plaintext highlighter-rouge">_config.yml</code> file.</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># The release of Jekyll Now that you're using</span>
<span class="na">version</span><span class="pi">:</span> <span class="s">v1.2.0</span>
<span class="na">plugins</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">jekyll-sitemap</span> <span class="c1"># Create a sitemap using the official Jekyll sitemap gem</span>
<span class="pi">-</span> <span class="s">jekyll-feed</span> <span class="c1"># Create an Atom feed using the official Jekyll feed gem</span>
<span class="pi">-</span> <span class="s">jekyll-redirect-from</span>
<span class="pi">-</span> <span class="s">jekyll-paginate</span>
</code></pre></div></div>
<p>Gitlab Pages uses the main <code class="language-plaintext highlighter-rouge">_config.yml</code> file, along with a <code class="language-plaintext highlighter-rouge">Gemfile</code> to load plugins. Also notice that the <code class="language-plaintext highlighter-rouge">Gemfile</code> sets the value of Jekyll, as opposed to the <code class="language-plaintext highlighter-rouge">version</code> setting in <code class="language-plaintext highlighter-rouge">_config.yml</code>.</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># _config.yml, uses gems instead of plugins</span>
<span class="na">gems</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">jekyll-sitemap</span> <span class="c1"># Create a sitemap using the official Jekyll sitemap gem</span>
<span class="pi">-</span> <span class="s">jekyll-feed</span> <span class="c1"># Create an Atom feed using the official Jekyll feed gem</span>
<span class="pi">-</span> <span class="s">jekyll-redirect-from</span>
<span class="pi">-</span> <span class="s">jekyll-paginate-v2</span>
<span class="c1"># Gemfile</span>
<span class="c1"># This will help ensure the proper Jekyll version is running.</span>
<span class="s">gem "jekyll", "3.4.0"</span>
<span class="s">gem 'jekyll-sitemap'</span>
<span class="s">gem 'jekyll-feed'</span>
<span class="s">gem 'jekyll-paginate-v2'</span>
<span class="s">gem 'jekyll-redirect-from'</span>
</code></pre></div></div>
<h3 id="plugins">Plugins</h3>
<p>With the newer version of Jekyll loaded by the <code class="language-plaintext highlighter-rouge">Gemfile</code>, I also needed to use a newer version of the <a href="https://github.com/sverrirs/jekyll-paginate-v2" class="outbound">pagination plugin</a>.</p>
<h3 id="redirecting-old-urls">Redirecting Old URLs</h3>
<p>My old site ran a version of BlogCFC, which is a ColdFusion based software. The URLs generated by that application were in the standard blog post format:</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/blog/index.cfm/2010/01/01/post-title/
</code></pre></div></div>
<p>Jekyll requires the <code class="language-plaintext highlighter-rouge">jekyll-redirect-from</code> plugin to redirect URLs. Note: You can redirect from external or internal URLs. This is very handy if you want to publish an update to an old post without changing its content or breaking links.</p>
<p>For <strong>Github Pages</strong>, the front matter at the top of a post file will redirect like this:</p>
<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">redirect_from</span><span class="pi">:</span> <span class="s2">"</span><span class="s">/blog/index.cfm/2010/01/01/post-title"</span>
<span class="nn">---</span>
</code></pre></div></div>
<p>This creates a static HTML file here: <code class="language-plaintext highlighter-rouge">_site/blog/index.cfm/2010/01/01/post-title.html</code></p>
<p><strong>Gitlab Pages</strong> uses a slightly different format:</p>
<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">redirect_from</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">/blog/index.cfm/2010/01/01/post-title/</span>
<span class="nn">---</span>
</code></pre></div></div>
<p>This creates a similar static HTML file here: <code class="language-plaintext highlighter-rouge">_site/blog/index.cfm/2010/01/01/post-title/index.html</code></p>
<p>Both HTML files have the same content, basically a <code class="language-plaintext highlighter-rouge"><meta http-equiv="refresh"></code> that redirects to file generated by Jekyll.</p>
<h2 id="gitlab-cicd">Gitlab CI/CD</h2>
<p><a href="https://about.gitlab.com/product/continuous-integration/" class="outbound">GitLab Continuous Integration (CI) & Continuous Delivery (CD)</a></p>
<blockquote>
<p>GitLab CI/CD pipelines build, test, deploy, and monitor your code as part of a single, integrated workflow</p>
</blockquote>
<p>This might be a bit overkill for a simple blog, but if you’re working on a more robust static site, this can definitely come in handy.</p>
<p>Here’s the basic <code class="language-plaintext highlighter-rouge">.gitlab-ci.yml</code> file I use for this site. Gitlab will require one in order to deploy your site. IIRC, it can generate one for you as part of setting up the repository.</p>
<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">image</span><span class="pi">:</span> <span class="s">ruby:2.3</span>
<span class="na">variables</span><span class="pi">:</span>
<span class="na">JEKYLL_ENV</span><span class="pi">:</span> <span class="s">production</span>
<span class="na">before_script</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">bundle install</span>
<span class="na">test</span><span class="pi">:</span>
<span class="na">stage</span><span class="pi">:</span> <span class="s">test</span>
<span class="na">script</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">bundle exec jekyll build -d test</span>
<span class="na">artifacts</span><span class="pi">:</span>
<span class="na">paths</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">test</span>
<span class="na">except</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">master</span>
<span class="na">pages</span><span class="pi">:</span>
<span class="na">stage</span><span class="pi">:</span> <span class="s">deploy</span>
<span class="na">script</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">bundle exec jekyll build -d public</span>
<span class="na">artifacts</span><span class="pi">:</span>
<span class="na">paths</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">public</span>
<span class="na">only</span><span class="pi">:</span>
<span class="pi">-</span> <span class="s">master</span>
</code></pre></div></div>
<h2 id="a-few-more-things">A Few More Things</h2>
<p>In an upcoming post (or two), I’ll go into how I redirected my old domain and links to this site. I’ll also cover how to generate free SSH certificates more easily than is outlined in the Gitlab docs.</p>Adrian J. MorenoAfter spending a couple of weeks rebuilding this site with Github Pages, I discovered that Gitlab had a similar offering. Since I’ve been using Gitlab exclusively at work, I figured I should give that a shot instead. Moving the files wasn’t difficult, but I did discover that some things worked differently. I also learned that Gitlab Pages had more to offer.Converting BlogCFC Posts to Markdown2018-10-06T17:00:00+00:002018-10-06T17:00:00+00:00https://adrianmoreno.com/2018/10/06/converting-blogcfc-posts-to-markdown<p>I’d been trying to convert this site away from BlogCFC for some time. After investigating a few blogging platforms, I decided on the simplicity of a Jekyll static site via Github Pages. Ultimately I choose Gitlab Pages, but before I talk about that, here’s how I converted my posts.<!--more--></p>
<h2 id="query-for-blogcfc-posts">Query for BlogCFC Posts</h2>
<p><a href="https://github.com/teamcfadvance/BlogCFC5" class="outbound">BlogCFC</a> is a <a href="https://www.adobe.com/products/coldfusion-family.html" class="outbound">ColdFusion</a> based blogging application that works a few databases out of the box. The SQL in this script is targeted at MySQL.</p>
<script src="https://gist.github.com/iknowkungfoo/38c7dbd6fcf7bc651ec05ea9bd0b33ff.js"></script>
<h2 id="converting-content">Converting Content</h2>
<p>This part of the script begins removing common HTML and converting it to the equivalent markdown syntax. For example,</p>
<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><h1></span>Header<span class="nt"></h1></span>
<span class="gh"># Header</span>
</code></pre></div></div>
<script src="https://gist.github.com/iknowkungfoo/2c73f83e081bf4f9f86d9f3426094b99.js"></script>
<h2 id="saving-markdown-files">Saving Markdown Files</h2>
<p>Finally, the posts can be output and saved as markdown files. The area wrapped with three dashes <code class="language-plaintext highlighter-rouge">---</code> at the top of each file is called <a href="https://jekyllrb.com/docs/front-matter/" class="outbound">YAML front matter</a>. It contains configuration variables for each post as needed.</p>
<p>The <code class="language-plaintext highlighter-rouge">date</code> setting, for example, does not need the time or timezone if you so choose. Its value powers the <code class="language-plaintext highlighter-rouge">Posted on {date}</code> line under the title of each rendered post. I’ll discuss these further, as well as differences between Github and Gitlab Pages in an upcoming post.</p>
<script src="https://gist.github.com/iknowkungfoo/ef8459ed376bf115463e341d9c4b95ef.js"></script>
<h2 id="cleaning-up">Cleaning Up</h2>
<p>You can pretty much use the resulting markdown files at this point. Since overall, I didn’t have a high volume of posts, I decided to do some cleanup of the HTML and decided to sunset some far-outdated posts (who talks about Flex anymore? Honestly.). I’ve switched almost exclusively to <a href="https://code.visualstudio.com/" class="outbound">VSCode</a> as an editor. There are a number of plugins that helped with this process:</p>
<ul>
<li><a href="https://github.com/neilsustc/vscode-markdown" class="outbound">Markdown All in One</a></li>
<li><a href="https://github.com/DavidAnson/vscode-markdownlint" class="outbound">markdownlint</a></li>
<li><a href="https://github.com/kurrestahlberg/turndown-vscode" class="outbound">Turndown-VSCode</a> - Converts HTML to Markdown</li>
<li><a href="https://github.com/Jason-Rev/vscode-spell-checker" class="outbound">Code Spell Checker</a> - I mean, where has this been all my life?</li>
</ul>
<h3 id="quick-note-on-code-sections">Quick Note on Code Sections</h3>
<p>All code sections are opened with <code>```cfscript</code> and closed with <code>cfscript```</code>. The opening syntax triggers code highlighting by <a href="http://rouge.jneen.net/" class="outbound">Rouge</a>, the closing syntax was an attempt at finding the related closing marks for each section. You’ll want to go through and replace <code>```cfscript</code> with the correct language for each section of code and then replace <code>cfscript```</code> with just <code>```</code> to ensure the code is formatted correctly.</p>
<h2 id="regarding-old-comments">Regarding Old Comments</h2>
<p>I’m using <a href="https://disqus.com/" class="outbound">Disqus</a> to manage comments now. I’ve got a backup of all the comments as part of the old site’s database, but I didn’t think it was worth porting them into Disqus. <a href="https://www.raymondcamden.com/2014/11/26/disqus-update-and-blogcfc-export-script" class="outbound">Ray Camden tackled this effort</a> when he moved off of BlogCFC (did I mention he created it?) years ago.</p>
<p>Now I can enable comments via Disqus simply by adding <code class="language-plaintext highlighter-rouge">comments: true</code> to the YAML front matter on a post by post basis.</p>
<h2 id="final-thoughts">Final Thoughts</h2>
<p>It was relatively easy to convert from BlogCFC to Markdown. Learning the ins and outs of <a href="https://jekyllrb.com/" class="outbound">Jekyll</a> was annoying at times, but after a short while it all started to click. I’ll post more about the process of getting the site live on Gitlab Pages, but if you have any questions about the process so far, leave a comment below.</p>Adrian J. MorenoI’d been trying to convert this site away from BlogCFC for some time. After investigating a few blogging platforms, I decided on the simplicity of a Jekyll static site via Github Pages. Ultimately I choose Gitlab Pages, but before I talk about that, here’s how I converted my posts.Don’t Call It a Comeback2018-09-24T00:00:00+00:002018-09-24T00:00:00+00:00https://adrianmoreno.com/2018/09/24/dont-call-it-a-comeback<p>Welcome to my redesigned, rebuilt and reinvigorated blog! Out with the much appreciated BlogCFC and ColdFusion powered site on iknowkungfoo.com. In with a static site hosted on Gitlab Pages, powered by Jekyll and a new domain. It’s been a while, let me explain. No, there is too much. Let me sum up.<!--more--></p>
<h2 id="ive-been-here-for-years">I’ve Been Here for Years</h2>
<p>It’s been five and a half years since I last posted anything of worth on my old blog. It’s not like I didn’t have anything to post about, I’ve just been busy. Back then, I was working at Equator, a SaaS platform built primarily with <a href="https://www.adobe.com/products/coldfusion-family.html" class="outbound">ColdFusion</a> and <a href="https://www.coldbox.org/" class="outbound">ColdBox</a>. We added a Java SOA layer, built some complex user interfaces and collected an insane volume of data. It was rarely boring, but after 8 years I felt I had reached a plateau and was in need of a change.</p>
<p>I felt I needed a change for three reasons:</p>
<ol>
<li>To learn some new tech.</li>
<li>To challenge myself.</li>
<li>To further my career.</li>
</ol>
<p>They say opportunity knocks, sometimes it emails through LinkedIn.</p>
<h2 id="im-rocking-my-peers">I’m Rocking My Peers</h2>
<p>Last June, I was contacted by <a href="https://stacksports.com/" class="outbound">Stack Sports</a> (formerly Blue Star Sports). At the time, they had purchased 20 sports technology companies (currently, 27). With a wide variety of tech stacks across the acquisitions, there was plenty to learn (and fix). New development would focus on microservices architecure using <a href="https://nodejs.org/en/" class="outbound">NodeJS</a> (yay!) or <a href="http://php.net/" class="outbound">PHP</a> (ugh!) with front end development using <a href="https://reactjs.org/" class="outbound">ReactJS</a> and <a href="https://facebook.github.io/react-native/" class="outbound">React Native</a>.</p>
<p>It was an opportunity I couldn’t pass up. My initial responsibilities included managing and optimizing a legacy ColdFusion application (part of an acquisition). More recently, I’ve been part of a dev team working on its replacement using Node and React.</p>
<h2 id="puttin-suckers-in-fear">Puttin’ Suckers in Fear</h2>
<p><img src="/assets/images/blog/stack_sports_desk.png" alt=""Standing" Desk @ Stack Sports" class="float-right pl-2" /></p>
<p>My second biggest fear was moving from a private office with a custom standing desk to an open office floor plan with, well, the closet thing to a standing desk we could find. The change wasn’t so bad. We moved offices earlier this year, gained a considerable space increase and I was able to make a few steps towards a better desk configuration.</p>
<p>My biggest fear was switching from ColdFusion, a Java based application server, to Node and React, which are all modern JavaScript. When I say “modern JavaScript”, I mean <a href="http://es6-features.org/#Constants">ECMAScript6 (ES6)</a>. I’ve been working with JavaScript since 1997 and have built some complex applications with it, but all the back-end processing was done in either CF or Java. I had to get used to the ES6 syntax and how these libraries worked. It wasn’t as difficult to make the switch as I’d thought. We’re just building objects and services, passing data back and forth to a UI and running business logic. It’ll just take some time to build the right syntactic muscle memory.</p>
<p>Not long after I started, another fear caught me by complete surprise. I’m handling it pretty well, but I’ll talk about it later.</p>
<h2 id="im-gonna-knock-you-out">I’m Gonna Knock You Out</h2>
<p>In the meantime, I’m doing everything I can to make a positive impact at this company. I’ve tackled my first two reasons for needing a change fairly well. I had to move the legacy app into AWS at the end of the year. This meant learning all of the 3rd party integration points, creating tests, working with DevOps to make the move and with QA to validate it all still worked. We’re doing AWS for pretty much everything new and that’s another world of tech I’ve started to learn. This isn’t the first time I’ve built a new platform from scratch, but the scale of what we intend to achieve . . . that’s a welcome challenge.</p>
<p>That last one though, that’s interesting. I went from being in an architecture group to being on a development team. The company’s growing and that includes the IT department (psst, <a href="https://stacksports.com/careers/" class="outbound">we’re hiring</a>). Our managers and directors pitch in and code as much as they can, but that’s not their primary responsibility. I’m not sure that I want to move into a management role if it means not coding for most of my time. I’m having too much fun building the things that run this company.</p>
<p>As long as I keep learning and challenging myself, my career shouldn’t falter. Stick and move, stick and move. Wrecking shop when I write [this code].</p>
<p>Mama said knock you out.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/vimZj8HW0Kg" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen=""></iframe>Adrian J. MorenoWelcome to my redesigned, rebuilt and reinvigorated blog! Out with the much appreciated BlogCFC and ColdFusion powered site on iknowkungfoo.com. In with a static site hosted on Gitlab Pages, powered by Jekyll and a new domain. It’s been a while, let me explain. No, there is too much. Let me sum up.Code and Video from my ColdBox Developers Week 2013 Presentation2013-07-03T02:59:00+00:002013-07-03T02:59:00+00:00https://adrianmoreno.com/2013/07/03/code-and-video-from-my-coldbox-developers-week-2013-presentationAdrian J. MorenoI gave this talk at cfObjective() 2013 using an application built with no MVC framework. In “Better UI Means Better UX”, I rebuilt the Kung Foo Gallery application using the ColdBox MVC framework. I was able to get a bit more in depth during this presentation (and all of my examples worked).Better UI Means Better UX at ColdBox Developers Week 20132013-06-05T03:16:00+00:002013-06-05T03:16:00+00:00https://adrianmoreno.com/2013/06/05/better-ui-means-better-ux-at-coldbox-developers-week-2013Adrian J. MorenoOn June 20, 2013 at 3pm CST, I’ll be presenting a ColdBox version of my KungFoo Gallery application during ColdBox Developers Week. This online conference runs from June 17-21, 2013. 5 days & 19 sessions on ColdBox, ContentBox, WireBox, PhoneGap, REST, ORM and more.Slides and Code from my cfObjective() 2013 Presentation2013-06-05T02:26:00+00:002013-06-05T02:26:00+00:00https://adrianmoreno.com/2013/06/05/slides-and-code-from-my-cfobjective-2013-presentationAdrian J. MorenoSlides and code are available via DropBox and Github. I’ve posted links on my Twitter account @iKnowKungFoo already, but here they are for those not following me (and why aren’t you?). :)Ditching ColdFusion’s UI Controls at cfObjective2013-05-16T17:18:00+00:002013-05-16T17:18:00+00:00https://adrianmoreno.com/2013/05/16/ditching-coldfusions-ui-controlsAdrian J. MorenoSaturday at 3pm, I’m presenting at cfObjective(). The title in the schedule says, “Building Modern ColdFusion Applications”, but I should have asked them to update it to say, “Ditch ColdFusion’s UI Controls”. In this session, I’ll cover why and how you can replace the native UI controls with HTML5 and some modern JavaScript and CSS libraries. I’m also running a Birds of a Feather session about Coding Standards and will be giving a Lightning Talk on my multi-monitor standing desk.Installing ColdFusion 10 on OSX 10.8 Mountain Lion2013-02-27T11:00:00+00:002013-02-27T11:00:00+00:00https://adrianmoreno.com/2013/02/27/installing-coldfusion-10-on-osx-108-mountain-lion<p>While setting up my Macbook Pro for web development, I was flummoxed by the issues reported by many people trying to setup ColdFusion 10 on OSX 10.8 Mountain Lion, as well as Window 8. Adobe even has a <a href="http://blogs.coldfusion.com/post.cfm/pre-release-for-new-platform-support" class="outbound">pre-release program</a> to test new installers for both. I can understand having problems with Windows 8, but installing on OSX 10.8 couldn’t have been easier.<!--more--></p>
<h3 id="stop-that-do-this-osx">Stop that, do this: OSX</h3>
<p>Other than my iPhone 4S and iPad (the first one), I haven’t had an Apple computer since my brother and I shared an Apple IIe back in grade school. BTW, that computer still works.</p>
<p><img src="/assets/images/blog/cf10-osx/marco_moreno_apple_iie.jpg" alt="Apple IIe still working." /></p>
<p>I know some people have issues using OSX when they’ve been in the Windows world for so long. One comment I saw told the poster to “stop thinking in Windows and start thinking in Unix.” Best advice you can get.</p>
<p>I’ve used BSD, Unix and Linux (CentOS, Red Hat, Ubuntu) for around 15 years, so OSX can’t be to difficult, right?</p>
<h3 id="install-java">Install Java</h3>
<p>This was probably the easiest time I’ve ever had installing Java. I’d installed a 256 GB SSD and a fresh install of Mountain Lion. The original hard drive had a previous version of OSX and Java was already installed. I wasn’t sure if OSX came with Java pre-installed, so I opened up a Terminal, typed “java -version” and hit enter.</p>
<p>OSX responded like Crush from Finding Nemo: “Yo dude, I know you want to see which Java I have. Sorry bro, don’t have it. I could, you know, <em>get it</em> for you if that’s cool. Yeah? Awesome. Just hang loose a minute.” And then, BAM! Java’s installed.</p>
<h3 id="get-apache-up-and-running">Get Apache up and running</h3>
<p>OSX ships with Apache pre-installed. With Mountain Lion, Apple <a href="http://reviews.cnet.com/8301-13727_7-57481978-263/how-to-enable-web-sharing-in-os-x-mountain-lion/" class="outbound">changed how Apache is controlled</a> through the System Preferences. Having never used a previous version of OSX, who cares? Let’s proceed.</p>
<p>Apache can (and should) be controlled via the command line, same as with any *nix operating system, by using <a href="http://linux.about.com/od/commands/l/blcmdl8_sudo.htm" class="outbound">“sudo” commands</a>. The first time you call one of these commands, you’ll get prompted for your password.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// Start
<span class="nb">sudo </span>apachectl start
// Stop
<span class="nb">sudo </span>apachectl stop
// Restart
<span class="nb">sudo </span>apachectl restart
</code></pre></div></div>
<p>You’ll get used to using “sudo” as you get more familiar with Unix. Even when you’re not actually <em>using</em> Unix. (Image courtesy of <a href="https://xkcd.com/" class="outbound">xkcd</a>.)</p>
<p><a href="https://xkcd.com/149/" class="outbound"><img src="https://imgs.xkcd.com/comics/sandwich.png" alt="" /></a></p>
<p>One Apache is started, you can go to http://localhost or http://127.0.0.1 and you should see the message “It works!”.</p>
<h3 id="installing-coldfusion-10">Installing ColdFusion 10</h3>
<p>If you haven’t installed ColdFusion before, it’s pretty simple. Simon Free has some excellent <a href="http://www.learncfinaweek.com/week1/" class="outbound">instructions and videos</a> over on “Learn CF in a Week”. I also tried <a href="http://www.trunkful.com/index.cfm/2012/12/26/Installing-ColdFusion-10-on-OS-X-Mountain-Lion" class="outbound">Wil Genovese’s instructions</a> for CF10 on Mountain Lion, but he uses a “non-Apple way”, which I couldn’t get to work. For a moment, I considered installing CF10 on MAMP, but I saw something shiny out of the corner of my eye and got distracted.</p>
<p>What was I talking about?</p>
<p>Oh yeah.</p>
<p>You can download the ColdFusion installer from the <a href="https://www.adobe.com/products/coldfusion-family.html" class="outbound">Adobe website</a>. You’ll have to create an account if you don’t already have one to get the installation file.</p>
<p>Simon’s instructions tell you to use the built in web server, but we want to use Apache. Also, don’t set CF to start automatically when OSX starts. You only want CF running when you <em>want</em> it running.</p>
<ol>
<li>Open Finder > Downloads > double-click the <code class="language-plaintext highlighter-rouge">ColdFusion_10_WWEJ_osx10.dmg</code> file.</li>
<li><code class="language-plaintext highlighter-rouge">Introduction:</code> Next</li>
<li><code class="language-plaintext highlighter-rouge">License Agreement:</code> Accept : Next</li>
<li><code class="language-plaintext highlighter-rouge">Install Type:</code> Developer : Next</li>
<li><code class="language-plaintext highlighter-rouge">Subcomponent Installation:</code> Uncheck “Start ColdFusion on system init” : Next</li>
<li><code class="language-plaintext highlighter-rouge">Enable Secure Profile:</code> Not for local development : Next</li>
<li><code class="language-plaintext highlighter-rouge">Remote Admin Credentials:</code> Meh, not for local development : Next</li>
<li><code class="language-plaintext highlighter-rouge">Select Installation Directory:</code> Use the default, “/Applications/ColdFusion10” : Next</li>
<li><code class="language-plaintext highlighter-rouge">Earlier Versions of CF:</code> BORED! : Next</li>
<li><code class="language-plaintext highlighter-rouge">Configure Web Servers:</code> Click on Add<br />
The configuration directory for Apache on Mountain Lion is “/private/etc/apache2”. This is key!<br />
<img src="/assets/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_10.png" alt="" /></li>
<li>You should now see this configuration listed : Next<br />
<img src="/assets/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_09.png" alt="" /></li>
<li><code class="language-plaintext highlighter-rouge">Configure Open Office:</code> I tried to configure <a href="http://www.libreoffice.org/">Libre Office</a>, but it didn’t work. Skip this unless you need <a href="http://www.openoffice.org/">Open Office</a>.</li>
<li><code class="language-plaintext highlighter-rouge">Admin Password:</code> Something simple for local development : Next</li>
<li><code class="language-plaintext highlighter-rouge">Enable RDS:</code> Only if you want to integrate with ColdFusion Builder and other remote access. Not for Production servers. : Next</li>
<li><code class="language-plaintext highlighter-rouge">Server Updates:</code> Yes, please! : Next</li>
<li><code class="language-plaintext highlighter-rouge">Current User Password:</code> This was surprising, but should have been expected. I’ve never seen this on any Linux installation before. Since I’m not using the built in webserver, I think CF needs to “sudo” to alter the Apache configuration file. This would also have been needed if I had elected to start CF when OSX starts.<br />
<img src="/assets/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_15.png" alt="" /></li>
<li><code class="language-plaintext highlighter-rouge">Admin Password:</code> Something simple for local development : Next</li>
<li><code class="language-plaintext highlighter-rouge">Pre-installation summary:</code> Next</li>
<li><code class="language-plaintext highlighter-rouge">Installation Complete:</code> Launch the Configuration Wizard @ http://127.0.0.1/CFIDE/administrator/index.cfm<br />
<img src="/assets/images/blog/cf10-osx/coldfusion_10_osx_mountain_lion_20.png" alt="" /><br />
This will finish configuring ColdFusion and log you into the CF Admin.</li>
</ol>
<h2 id="manage-coldfusion-from-the-terminal">Manage ColdFusion from the Terminal</h2>
<p>Starting and stopping ColdFusion from the terminal is very similar to Apache.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// Start
/Applications/ColdFusion10/cfusion/bin/coldfusion start
// Stop
/Applications/ColdFusion10/cfusion/bin/coldfusion stop
// Restart
/Applications/ColdFusion10/cfusion/bin/coldfusion restart
</code></pre></div></div>
<p>Chris Simmons shows a few more helpful commands <a href="http://www.cfchimp.com/wordpress/2012/06/helpful-commands-for-coldfusion-10-on-osx-aka-start-and-stop-cf10-from-the-command-line/" class="outbound">in this blog post</a>.</p>
<h3 id="osx-sites">OSX Sites</h3>
<p>Referring back to <a href="http://reviews.cnet.com/8301-13727_7-57481978-263/how-to-enable-web-sharing-in-os-x-mountain-lion/" class="outbound">the cnet article</a>, you can configure a Sites directory in your Home folder in order to develop multiple web sites/applications.</p>
<ul>
<li>Open the OS X Terminal utility (/Applicaitions/Utilities/)</li>
<li>Create and edit an Apache user configuration file named after your user account by running the following command:</li>
</ul>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>pico /etc/apache2/users/whoami.conf
</code></pre></div></div>
<ul>
<li>Copy the following text into the Terminal editor that opens, but be sure to change the “username” text to the short name of your user account:</li>
</ul>
<div class="language-cfscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o"><</span><span class="nx">Directory</span> <span class="s2">"/Users/username/Sites/"</span><span class="o">></span>
<span class="nx">Options</span> <span class="nx">Indexes</span> <span class="nx">MultiViews</span>
<span class="nx">AllowOverride</span> <span class="nx">All</span>
<span class="nx">Order</span> <span class="nx">allow</span><span class="p">,</span><span class="nx">deny</span>
<span class="nx">Allow</span> <span class="nx">from</span> <span class="nx">all</span>
<span class="o"></</span><span class="nx">Directory</span><span class="o">></span>
</code></pre></div></div>
<ul>
<li>Save and close the editor by pressing Control-O followed by Control-X.</li>
<li>Stay in Terminal and go to your home directory. Create a folder named <code class="language-plaintext highlighter-rouge">Sites</code>, then create an <code class="language-plaintext highlighter-rouge">index.htm</code> file in that folder with the contents “I fight for the Users!”.</li>
<li>Start or re-start Apache to pick up these changes.</li>
<li>You should be able to visit <code class="language-plaintext highlighter-rouge">http://localhost/~username/index.htm</code> and see the contents of the file you just created.</li>
<li>Now create an “index.cfm” file in your Sites folder with this simple content:</li>
</ul>
<div class="language-cfscript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o"><</span><span class="nx">cfoutput</span><span class="o">></span><span class="err">#</span><span class="nf">now</span><span class="p">()</span><span class="err">#</span><span class="o"></</span><span class="nx">cfoutput</span><span class="o">></span>
</code></pre></div></div>
<ul>
<li>Visit <code class="language-plaintext highlighter-rouge">http://localhost/~username/index.cfm</code> and you should see the current time.</li>
</ul>
<p>Now you have a web root folder for your development efforts and you’ve verified that ColdFusion can parse CFML files in your Sites directory.</p>
<h3 id="apache-virtual-hosts">Apache Virtual Hosts</h3>
<p>Often you’ll want to use a local domain like “http://test.site” instead of “http://localhost/~username/test.site”. By enabling Virtual Hosts in Apache, you can create multiple websites with their own domain, pointing to different folders inside the Sites folder.</p>
<p>Rather than write the details here, <a href="http://osxwebdev.wordpress.com/2012/09/24/enable-apache-virtual-hosts-on-os-x-10-8-mountain-lion/" class="outbound">I’ll just point to this simple example I found</a> which is a breeze to implement.</p>
<h3 id="start-coding">Start coding</h3>
<p>Now that I have Apache, ColdFusion and ColdFusion Builder (see related entry) installed on OSX Mountain Lion. I just need some data stores. MySQL and MongoDB will be a good start.</p>
<p>If you have any questions, feel free to contact me via this website or on Twitter <a href="https://twitter.com/iknowkungfoo" class="outbound">@iknowkungfoo</a>.</p>Adrian J. MorenoWhile setting up my Macbook Pro for web development, I was flummoxed by the issues reported by many people trying to setup ColdFusion 10 on OSX 10.8 Mountain Lion, as well as Window 8. Adobe even has a pre-release program to test new installers for both. I can understand having problems with Windows 8, but installing on OSX 10.8 couldn’t have been easier.Always install ColdFusion Builder 2 as an Eclipse plugin2013-02-26T11:00:00+00:002013-02-26T11:00:00+00:00https://adrianmoreno.com/2013/02/26/always-install-coldfusion-builder-2-as-an-eclipse-pluginAdrian J. MorenoI recently picked up a 17” Macbook Pro and am in the process of setting it up as my primary development machine. I’m a long time user of Eclipse and moved from CFEclipse to ColdFusion Builder when version 2 arrived. I’ve heard a number of users complain about performance. Other than opening massive legacy files that contain thousands of lines of code, I haven’t had many issues myself. The trick is to not install CF Builder as a stand-alone IDE. Here’s why and how.