<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>iBeck.com</title>
    <description>Ruminations on technology, faith, sports, food and life.  Did I miss anything?</description>
    <link>/</link>
    <atom:link href="/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 17 Feb 2026 02:45:50 +0000</pubDate>
    <lastBuildDate>Tue, 17 Feb 2026 02:45:50 +0000</lastBuildDate>
    <generator>Jekyll v4.3.3</generator>
    
      <item>
        <title>Using a branded email address with Gmail (Updated)</title>
        <description>&lt;p&gt;You just set up your new organization and you have your spiffy new web site. You look like a pro, now you need to communicate like a pro.&lt;/p&gt;

&lt;p&gt;For this example, I’m using the &lt;a href=&quot;http://ibeck.com&quot;&gt;&lt;strong&gt;ibeck.com&lt;/strong&gt;&lt;/a&gt; domain to send email as &lt;strong&gt;chris@ibeck.com&lt;/strong&gt; rather than my Gmail address.&lt;/p&gt;

&lt;p&gt;It takes 2 things to pull that off:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Create my branded &lt;strong&gt;chris@ibeck.com&lt;/strong&gt; email addresses with &lt;a href=&quot;http://improvmx.com&quot;&gt;improvmx.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Configure Gmail to use my newly branded email address.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;gmail-account-settings&quot;&gt;Gmail account settings&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;Go into Gmail and click on the &lt;strong&gt;Settings&lt;/strong&gt; option.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-settings.jpg&quot; alt=&quot;Google Settings&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Now click on the &lt;strong&gt;See All Settings&lt;/strong&gt; option.&lt;/li&gt;
  &lt;li&gt;You will see a navigation bar at the top of the page. Click on the &lt;strong&gt;Accounts and Import&lt;/strong&gt; option:&lt;/li&gt;
  &lt;li&gt;You will get a screen like this:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-settings-add-email.jpg&quot; alt=&quot;Google Settings&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Now click on the &lt;strong&gt;Add another email address&lt;/strong&gt; link:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-add-email.jpg&quot; alt=&quot;Gmail Add Email&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Enter your Name and Email Address&lt;/li&gt;
  &lt;li&gt;Ensure that &lt;strong&gt;Treat as Alias&lt;/strong&gt; is checked&lt;/li&gt;
  &lt;li&gt;Click on &lt;strong&gt;Next Step&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-add-smtp.jpg&quot; alt=&quot;Gmail Add SMTP&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Add &lt;strong&gt;smtp.improvmx.com&lt;/strong&gt; as your SMTP Server on port &lt;strong&gt;587&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Enter the &lt;strong&gt;Password&lt;/strong&gt; that I’ve provided you in a DM&lt;/li&gt;
  &lt;li&gt;Use &lt;strong&gt;Secure connection using TLS&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Click on &lt;strong&gt;Add Account&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-add-final.jpg&quot; alt=&quot;Gmail Add Final&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Click on &lt;strong&gt;Close Window&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Now go to your Gmail Inbox and look for confirmation email like this:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-verify-email.jpg&quot; alt=&quot;Gmail Confirmation Email&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Click on the &lt;strong&gt;Confirmation Link&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-verify.jpg&quot; alt=&quot;Gmail Confirmation&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Then click on the &lt;strong&gt;Confirm&lt;/strong&gt; button&lt;/li&gt;
  &lt;li&gt;Your settings should look like this&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/2024-gmail-settings-make-default.jpg&quot; alt=&quot;Gmail Settings&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Click &lt;strong&gt;Make Default&lt;/strong&gt; to make your new email your default&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Sat, 04 May 2024 00:00:00 +0000</pubDate>
        <link>/2024-using-branded-email-with-gmail/</link>
        <guid isPermaLink="true">/2024-using-branded-email-with-gmail/</guid>
        
        
        <category>gmail</category>
        
        <category>tech</category>
        
      </item>
    
      <item>
        <title>Date Picker for Rails</title>
        <description>&lt;p&gt;It’s nice to take advantage of the new HTML5 input types like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;input type=&apos;date&apos;&amp;gt;&lt;/code&gt;.  On the surface it seems so simple, but the devil is in the details.&lt;/p&gt;

&lt;h2 id=&quot;requirements&quot;&gt;Requirements&lt;/h2&gt;

&lt;p&gt;Add a date (no time) field to a rails form and have it:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use native HTML5 date controls where available&lt;/li&gt;
  &lt;li&gt;Backfill HTML5 with a bootstrap-compatible datepicker when not available&lt;/li&gt;
  &lt;li&gt;Enter and display according to locale (I18n)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;toolset&quot;&gt;Toolset&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bootstrap-ruby/rails-bootstrap-forms&quot;&gt;bootstrap_form&lt;/a&gt; - a gem for rendering rails form tags in the bootstrap way&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/eternicode/bootstrap-datepicker&quot;&gt;bootstrap-datepicker&lt;/a&gt; - the most upvoted and flexible bootstrap datepicker&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;

&lt;p&gt;First, let’s get the HTML5 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;type=[date]&lt;/code&gt; attribute working with the rails form helper:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;%= f.date_field :opened_on %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;At the moment, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date_field&lt;/code&gt; work’s well in iOS 9 and OSX Chrome 46.0. Request &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;controller#new&lt;/code&gt; and you get a native datepicker that shows the current month on a blank input control.  Nice.&lt;/p&gt;

&lt;h2 id=&quot;backfilling&quot;&gt;Backfilling&lt;/h2&gt;

&lt;p&gt;However, there is no native control support for Safari or Firefox so lets add a little Coffeescript to backfill with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bootstrap-datepicker&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;unless Modernizr.inputtypes.date
  $(&quot;input[type=&apos;date&apos;]&quot;).datepicker()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Request &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;controller#new&lt;/code&gt; in Safari and you get a bootstrap-styled datepicker that shows the current month on a blank input.  Meanwhile, Chrome is still using the native control thanks to &lt;a href=&quot;https://modernizr.com/download?inputtypes-setclasses&amp;amp;q=inpu&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;modernizr&lt;/code&gt;&lt;/a&gt;’s ability to backfill &lt;a href=&quot;http://caniuse.com/#feat=input-datetime&quot;&gt;incompatible browsers&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;issues&quot;&gt;Issues&lt;/h2&gt;

&lt;p&gt;Out of the box, selecting a date from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bootstrap-datepicker&lt;/code&gt; fills the input control like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;11/07/2015&lt;/code&gt;.  Press “Save” and the Rails &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;params&lt;/code&gt; hash look like this:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{&quot;violation&quot;=&amp;gt;{&quot;name&quot;=&amp;gt;&quot;Test&quot;, &quot;opened_on&quot;=&amp;gt;&quot;11/07/2015&quot;}, &quot;id&quot;=&amp;gt;&quot;4&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Go to the console for a little “smoke testing” and:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pry(main)&amp;gt; Violation.find(4).opened_on
=&amp;gt; Sat, 11 Jul 2015
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Bummer.  Looks like we have a difference of opinion with regard to date formats – &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bootstrap-datepicker&lt;/code&gt; emits &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mm/dd/yyyy&lt;/code&gt; but &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date_field&lt;/code&gt; expects &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;yyyy-mm-dd&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;under-the-hood&quot;&gt;Under the Hood&lt;/h2&gt;

&lt;p&gt;Let’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle open actionview&lt;/code&gt;, search for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;def date_field&lt;/code&gt; and see what’s going on:&lt;/p&gt;

&lt;p&gt;actionview-4.2.0/lib/action_view/helpers/form_helper.rb is where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;date_field&lt;/code&gt; is declared:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;def date_field(object_name, method, options = {})
  Tags::DateField.new(object_name, method, self, options).render
end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;actionview-4.2.0/lib/action_view/helpers/tags/date_field.rb is where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Tags::DateField&lt;/code&gt; is declared&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;module ActionView
  module Helpers
    module Tags # :nodoc:
      class DateField &amp;lt; DatetimeField # :nodoc:
        private

          def format_date(value)
            value.try(:strftime, &quot;%Y-%m-%d&quot;)
          end
      end
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notice that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;format_date&lt;/code&gt; doesn’t use any of Rail’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;I18n&lt;/code&gt; magic.  Looking further, we find the parent &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DatetimeField&lt;/code&gt; class implements the reverse transformation with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;datetime_value&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;private

  def format_date(value)
    value.try(:strftime, &quot;%Y-%m-%dT%T.%L%z&quot;)
  end

  def datetime_value(value)
    if value.is_a? String
      DateTime.parse(value) rescue nil
    else
      value
    end
  end
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This implies that an HTML5 date control expects the browser to deal with the localization.  As it turns out HTML5 date controls expect values that are &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO_8601&quot;&gt;ISO 8601 / RFC 3339&lt;/a&gt; values.&lt;/p&gt;

&lt;h2 id=&quot;making-it-work&quot;&gt;Making it Work&lt;/h2&gt;

&lt;p&gt;Now all we need is a little “glue” code to get &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bootstrap-datepicker&lt;/code&gt; to output dates that work with Rails.  My solution was to add a little Coffeescript to create a separate &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hidden&lt;/code&gt; input that mimics the HTML created by Rails:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;App.Forms.backfillDatePicker = -&amp;gt;
  unless Modernizr.inputtypes.date
    $(&quot;input[type=&apos;date&apos;]&quot;).each (i,e)=&amp;gt;
      $e = $(e)
      # create a hidden field with the name and id of the input[type=date]
      $hidden = $(&apos;&amp;lt;input type=&quot;hidden&quot;&amp;gt;&apos;)
        .attr(&apos;name&apos;, $e.attr(&apos;name&apos;))
        .attr(&apos;id&apos;, $e.attr(&apos;id&apos;))
        .val($e.val())
      # modify the input[type=date] field with different attributes
      $e.data(&apos;hidden-id&apos;, $e.attr(&apos;id&apos;)) # stash the id of the hidden field
        .attr(&apos;name&apos;, &quot;&quot;)
        .attr(&apos;id&apos;, &quot;&quot;)
        .val(@formatDateToPicker($e.val())) # transform the date
        .after($hidden) # insert the hidden field
      # attach the picker
      $e.datepicker()
      # update the hidden field when there is an edit
      $e.on &apos;change&apos;, (e)=&amp;gt;
        $e = $(e.target)
        $v = $(&apos;#&apos; + $e.data(&apos;hidden-id&apos;))
        $v.val(@formatDateFromPicker($e.val()))
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notice there are a couple of custom Date formatting methods:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# dateStr is what Rails emits &quot;yyyy-mm-dd&quot;
App.Forms.formatDateToPicker = (dateStr)-&amp;gt;
  return &apos;&apos; if dateStr == &apos;&apos;
  parts = dateStr.split(&apos;-&apos;)
  return &apos;Invalid ISO date&apos; unless parts.length == 3
  &quot;#{parts[1]}/#{parts[2]}/#{parts[0]}&quot;

# dateStr is what the datepicker emits &quot;mm/dd/yyyy&quot;
App.Forms.formatDateFromPicker = (dateStr)-&amp;gt;
  return &apos;&apos; if dateStr == &apos;&apos;
  parts = dateStr.split(&apos;/&apos;)
  return &apos;Invalid picker date&apos; unless parts.length == 3
  &quot;#{parts[2]}-#{parts[0]}-#{parts[1]}&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The reason to roll my own formatters is that the javascript &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Date&lt;/code&gt; object contains timezone information.  When you’re working with Dates that don’t include Times, it’s easier to just ignore the timezone.&lt;/p&gt;

&lt;p&gt;Note: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;App&lt;/code&gt; is a custom, global javascript object that I use to “namespace” and “modularize” all the “app-specific” javascript code to avoid naming collisions with other plug-ins.&lt;/p&gt;

&lt;h2 id=&quot;translation&quot;&gt;Translation&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bootstrap-datepicker&lt;/code&gt; comes with translation files and it’s as easy as this to set the locale:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# attach the picker
$e.datepicker
  orientation: &apos;bottom left&apos;
  language: App.config.locale
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In this example, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;App.config.locale&lt;/code&gt; is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;es&lt;/code&gt; and derived from the url: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;example.com/es/controller/method&lt;/code&gt;.  The native HTML5 date controls are up to the browser to localize based on user preferences.&lt;/p&gt;

&lt;h2 id=&quot;left-for-later&quot;&gt;Left for Later&lt;/h2&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bootstrap-datepicker&lt;/code&gt; should honor the date formats of other locales like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;en-GB&lt;/code&gt;.  This exercise is left for later and I’m hoping it can be accomplished with the &lt;a href=&quot;https://github.com/fnando/i18n-js/tree/v3.0.0.rc11&quot;&gt;i18n-js&lt;/a&gt; gem.&lt;/p&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/18020950/how-to-make-input-type-date-supported-on-all-browslogo.png
ers-any-alternatives&quot;&gt;http://stackoverflow.com/questions/18020950/how-to-make-input-type-date-supported-on-all-browsers-any-alternatives&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://html5doctor.com/using-modernizr-to-detect-html5-features-and-provide-fallbacks/&quot;&gt;http://html5doctor.com/using-modernizr-to-detect-html5-features-and-provide-fallbacks/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.sitepoint.com/finding-date-picker-input-solution-bootstrap/&quot;&gt;http://www.sitepoint.com/finding-date-picker-input-solution-bootstrap/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://tjvantoll.com/2012/06/30/creating-a-native-html5-datepicker-with-a-fallback-to-jquery-ui/&quot;&gt;http://tjvantoll.com/2012/06/30/creating-a-native-html5-datepicker-with-a-fallback-to-jquery-ui/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Sat, 07 Nov 2015 00:00:00 +0000</pubDate>
        <link>/2015-date-picker-rails/</link>
        <guid isPermaLink="true">/2015-date-picker-rails/</guid>
        
        
        <category>rails</category>
        
      </item>
    
      <item>
        <title>iBeck on Jekyll</title>
        <description>&lt;p&gt;Half the fun of having a blog is migrating to new technologies. Today, I made the move from &lt;a href=&quot;http://wordpress.org&quot;&gt;Wordpress&lt;/a&gt; to &lt;a href=&quot;http://jekyllrb.com&quot;&gt;Jekyll&lt;/a&gt; because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll&lt;/code&gt; leverages &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ruby&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sass&lt;/code&gt; and other open-source technologies.&lt;/p&gt;

&lt;p&gt;Best of all I can write my web pages in a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;markdown&lt;/code&gt; language (&lt;a href=&quot;http://kramdown.gettalong.org&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kramdown&lt;/code&gt;&lt;/a&gt; actually) using my programming editor, &lt;a href=&quot;http://macromates.com/download&quot;&gt;Textmate&lt;/a&gt;. I can even display fancy source code snippets:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;no&quot;&gt;Timecop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;freeze&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;years&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ago&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;apple&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Investment&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;If only that worked in real life.&lt;/p&gt;

&lt;h1 id=&quot;installing-was-easy&quot;&gt;Installing was easy&lt;/h1&gt;

&lt;p&gt;Read the &lt;a href=&quot;http://jekyllrb.com/docs/usage/&quot;&gt;Jekyll Documentation&lt;/a&gt; – it’s beautiful.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I have a Mac, so I already have &lt;a href=&quot;https://www.ruby-lang.org&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ruby&lt;/code&gt;&lt;/a&gt; installed.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gem install jekyll&lt;/code&gt; downloads the code to run locally&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll new ibeck&lt;/code&gt; created my new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ibeck&lt;/code&gt; web folder with sample files&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll build --watch&lt;/code&gt; compiles my pages &lt;em&gt;as I save them&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll serve&lt;/code&gt; starts a local web sever at &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://localhost:4000&lt;/code&gt; to preview the site&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enter a few simple settings in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_config.yml&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;iBeck.com&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;email&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;chris@ibeck.com&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Ruminations on technology, faith, sports, food and life.  Did I miss anything?&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;twitter_username&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;ccmcbeck&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;github_username&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;ccmcbeck&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;markdown&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kramdown&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;And I’m ready to start blogging!&lt;/p&gt;

&lt;h1 id=&quot;editing-is-fun&quot;&gt;Editing is fun&lt;/h1&gt;

&lt;p&gt;Just modify the sample post in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_posts&lt;/code&gt; folder and follow the &lt;a href=&quot;http://jekyllrb.com/docs/posts/&quot;&gt;Jekyll Guide on Posts&lt;/a&gt;.  Here is what the previous sentence looks like coded in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kramdown&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-ruby&quot; data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;no&quot;&gt;Just&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;modify&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sample&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;sb&quot;&gt;`_posts`&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;sb&quot;&gt;`kramdown`&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;following&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Jekyll&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Guide&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Posts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:/&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;jekyllrb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;docs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;posts&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;No HTML.  No muss.  No fuss.  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll&lt;/code&gt; compiles everything into your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_site&lt;/code&gt; folder which is thoughtfully included in your default &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gitignore&lt;/code&gt;.&lt;/p&gt;

&lt;h1 id=&quot;deploying-was-easy&quot;&gt;Deploying was easy&lt;/h1&gt;

&lt;p&gt;There are lots of ways to &lt;a href=&quot;http://jekyllrb.com/docs/deployment-methods/&quot;&gt;deploy a Jekyll site&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html&quot;&gt;Amazon S3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you don’t have a server &lt;a href=&quot;https://github.com/laurilehmijoki/s3_website&quot;&gt;follow this recipe&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gem install s3_website&lt;/code&gt; to be able to deploy directly to S3&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_website cfg create&lt;/code&gt; to generate an &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_website.yml&lt;/code&gt;
    &lt;ul&gt;
      &lt;li&gt;Enter your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_id&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_secret&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_bucket&lt;/code&gt; into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_website.yml&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_website cfg apply&lt;/code&gt; to connect to your S3 bucket&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;s3_website cfg push&lt;/code&gt; to transmit your pages to S3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://rsync.samba.org&quot;&gt;Rsync&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have a server &lt;a href=&quot;http://nathangrigg.net/2012/04/rsyncing-jekyll/&quot;&gt;follow this recipe&lt;/a&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;rsync &lt;span class=&quot;nt&quot;&gt;--compress&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--recursive&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--checksum&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--delete&lt;/span&gt; _site/ user@ibeck.com:/public_html&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;h1 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;i class=&quot;fa fa-check-square-o&quot;&gt;&lt;/i&gt; Port my &lt;a href=&quot;/wordpress&quot;&gt;other Wordpress blog posts&lt;/a&gt; to Jekyll&lt;/li&gt;
  &lt;li&gt;&lt;i class=&quot;fa fa-check-square-o&quot;&gt;&lt;/i&gt; Embed the cool &lt;a href=&quot;https://disqus.com&quot;&gt;Disqus&lt;/a&gt; commenting engine&lt;/li&gt;
  &lt;li&gt;&lt;i class=&quot;fa fa-square-o&quot;&gt;&lt;/i&gt; Design my own custom theme using &lt;a href=&quot;http://getbootstrap.com&quot;&gt;Twitter Bootstrap&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;i class=&quot;fa fa-square-o&quot;&gt;&lt;/i&gt; Integrate my fancy &lt;a href=&quot;directra&quot;&gt;Directra&lt;/a&gt; contact us gadget&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Thu, 15 Jan 2015 18:09:07 +0000</pubDate>
        <link>/2015-ibeck-on-jekyll/</link>
        <guid isPermaLink="true">/2015-ibeck-on-jekyll/</guid>
        
        
        <category>jekyll</category>
        
        <category>tech</category>
        
      </item>
    
      <item>
        <title>Blogging with a better purpose</title>
        <description>&lt;p&gt;Originally, when I set up my blog, my purpose was to learn &lt;a href=&quot;http://wordpress.com/&quot;&gt;Wordpress&lt;/a&gt; and build a Wordpress plug-in. Alas, that went on hold.&lt;/p&gt;

&lt;p&gt;Recently, I’ve joined &lt;a href=&quot;http://inohearts.org&quot;&gt;International Network of Hearts&lt;/a&gt;, an organization dedicated to stopping &lt;a href=&quot;http://en.wikipedia.org/wiki/Human_trafficking&quot;&gt;human trafficking&lt;/a&gt; – especially as it pertains to the San Diego / Tijuana border where I live. My goal is to help INOHearts to:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Cast their vision to volunteers, supporters and followers&lt;/li&gt;
	&lt;li&gt;Communicate more effectively both inside and outside the organization&lt;/li&gt;
	&lt;li&gt;Establish and promote their brand identity across all communication channels&lt;/li&gt;
	&lt;li&gt;Scale from a small team to a team with hundreds of volunteers&lt;/li&gt;
	&lt;li&gt;But, most of all, save hundreds of young girls from a life of sexual slavery&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As a software developer learning &lt;a href=&quot;http://http://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; and relying so heavily on the blogs of others like &lt;a href=&quot;http://railscasts.com/&quot;&gt;Railscasts&lt;/a&gt; or &lt;a href=&quot;http://37signals.com/svn&quot;&gt;Signal vs. Noise&lt;/a&gt;, I’m motivated to share and curate whatever best practices I learn for something that I’m equally passionate about.  Here are just some of the challenges we face:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Rebrand our Wordpress web sites in both English and Spanish&lt;/li&gt;
	&lt;li&gt;Manage our social media channels in both English and Spanish&lt;/li&gt;
	&lt;li&gt;Empowering our entire team to actively participate in our social media efforts&lt;/li&gt;
	&lt;li&gt;Promote our brand via email and voice&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As our team develops best practices, I will publish them here on my blog and maybe (just maybe) we’ll actually learn to use Wordpress in the process.&lt;/p&gt;
</description>
        <pubDate>Thu, 30 Jan 2014 00:00:00 +0000</pubDate>
        <link>/2014-blogging-with-a-better-purpose/</link>
        <guid isPermaLink="true">/2014-blogging-with-a-better-purpose/</guid>
        
        
        <category>faith</category>
        
        <category>tech</category>
        
      </item>
    
      <item>
        <title>10 lessons learned recovering from a Windows virus</title>
        <description>&lt;h2&gt;The big decision&lt;/h2&gt;

&lt;p&gt;When you get a Windows virus, take a deep breath then ask yourself:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Should I just try to remove the virus?&lt;/li&gt;
  &lt;li&gt;Or is it time to reinstall Windows again?&lt;/li&gt;
  &lt;li&gt;Or is it time to buy a new PC &lt;a href=&quot;/2012-why-i-love-my-mac&quot;&gt;or switch to a Mac&lt;/a&gt; ?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a recent story about how I recently helped a friend deal with such a crisis.&lt;/p&gt;

&lt;p&gt;My friend calls me in a panic,  ”I think I have a virus and I can’t use my PC anymore and I’m going on vacation in 7 days.  Help!”  I said come on by and she dropped off her 2004 HP Pavillion 9000 laptop with Windows Vista and (cough, cough) 2G of RAM.&lt;/p&gt;
&lt;h2&gt;Kill the pig&lt;/h2&gt;
&lt;p&gt;&lt;img class=&quot;alignright&quot; src=&quot;/assets/images/lord-of-the-flies.jpg &quot; alt=&quot;&quot; width=&quot;232&quot; height=&quot;350&quot; /&gt;Time is of the essence so I want to take the course of least resistance – kill the virus. However, I learn that her McAfee Anti-Virus software has expired and since the install program also replaced the Windows Firewall with a McAfee equivalent, she’s been running without a firewall.  Yikes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #1:  &lt;/strong&gt;Think long and hard about replacing the Windows Firewall with some 3rd party tool that can leave you exposed when your credit card expires and they can’t re-bill you because the expiration notice went in your SPAM folder or you changed email addresses.  Windows Firewall is pretty darn good.&lt;/p&gt;
&lt;h2&gt;Google is your friend&lt;/h2&gt;
&lt;p&gt;Turns out she caught the &lt;a href=&quot;http://www.mcbsys.com/blog/2011/11/new-airline-ticket-virus-email/&quot; target=&quot;_blank&quot;&gt;Airline Ticket Virus&lt;/a&gt; which is a trojan horse for delivering the &lt;a href=&quot;http://trojan-killer.net/tag/system-recovery-virus/&quot; target=&quot;_blank&quot;&gt;System Recovery Virus&lt;/a&gt; which (in plain English) pops up a fake Windows-looking dialog box that says your computer has all kinds of problems and please pay $80 to fix them.  So you think the Airline Ticket is the virus and the System Recovery is your friend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #2:  &lt;/strong&gt;When in doubt, verify everything on the Internet using Google Search.  Search for the name of the email, the name of the attachment or the title of the popup window.  Somebody has documented this somewhere.  You aren’t the first.  &lt;a href=&quot;http://www.snopes.com&quot;&gt;Snopes&lt;/a&gt; is also your friend in case Google or the Internet are lying to you.&lt;/p&gt;

&lt;p&gt;To make matters worse, the System Recovery Virus hid the following files by tweaking one of the Windows &lt;a href=&quot;http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/attrib.mspx?mfr=true&quot; target=&quot;_blank&quot;&gt;file attributes&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Everything in My Documents&lt;/li&gt;
	&lt;li&gt;Everything in \Users\Public&lt;/li&gt;
	&lt;li&gt;All the Shortcuts on the Start Menu&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So you really think your computer is messed up.  Then, to make matters even more grodo, the attribute is stored &lt;em&gt;in the file&lt;/em&gt; so all your backups preserve this “file is hidden” flag as well.  It fooled me, but fortunately my friend was using &lt;a href=&quot;http://www.carbonite.com/en/&quot;&gt;Carbonite&lt;/a&gt; (more on this later) to do the backups.&lt;/p&gt;
&lt;h2&gt;Resistance is futile&lt;/h2&gt;
&lt;p&gt;&lt;img class=&quot;alignright&quot; src=&quot;https://lh3.googleusercontent.com/-GD2nZQevL0E/TW7VecfX5RI/AAAAAAAAAVc/UvxjCXyQl5g/resistance-is-futile.jpg&quot; alt=&quot;&quot; width=&quot;256&quot; height=&quot;320&quot; /&gt;Now back to the original decision. The evidence suggested that her computer was really messed up.  My first thought was to download Microsoft’s free anti-virus software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #3:  &lt;/strong&gt;Consider using the anti-virus, anti-malware software that comes with &lt;a href=&quot;http://windows.microsoft.com/en-US/windows/products/security-essentials&quot; target=&quot;_blank&quot;&gt;Microsoft Security Essentials&lt;/a&gt;.  It’s possible that Norton or AVG or McAfee are incrementally better, but &lt;em&gt;free&lt;/em&gt; and &lt;em&gt;never expires &lt;/em&gt;is a hard combination to beat.&lt;/p&gt;

&lt;p&gt;However, the virus figured out some way to block my ability to install or run any software.  I could have tried to figure out a way to beat it (and blew off my afternoon) but at this point, my decision switched to “Should I reinstall Windows?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #4:&lt;/strong&gt;  Every 1-3 years, you will probably need to reinstall Windows.  It’s just the way it is.  The Windows Registry is frail.  Un-installers don’t always work.  You can get into &lt;a href=&quot;http://en.wikipedia.org/wiki/DLL_Hell&quot; target=&quot;_blank&quot;&gt;DLL Hell&lt;/a&gt;.  Resistance is futile.&lt;/p&gt;

&lt;p&gt;To reinstall Windows you need one of 3 things:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Recovery partition on your hard drive.&lt;/li&gt;
	&lt;li&gt;Recovery DVD or CD that you (hopefully) made.&lt;/li&gt;
	&lt;li&gt;The original OS install disks that (maybe) came with your computer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fortunately, this HP did not have a hard drive failure.  If it did, I would have been screwed and would have told her “It’s time to buy a new computer”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #5:  &lt;/strong&gt;Read this carefully!  MAKE SURE YOU HAVE / MAKE A RECOVERY DISK!  A recovery partition on your hard drive is not enough protection because the hard drive can (and will) fail.  HP has it’s own Recovery Manager program.  Having a recovery disk is like putting a hide-a-key on your car.  Don’t get stranded.&lt;/p&gt;

&lt;p&gt;Restoring from a recovery partition is pretty simple.  For the HP, I just had to press F2 while it was rebooting.  Your magic F key may differ by manufacturer.&lt;/p&gt;
&lt;h2&gt;Take a hike&lt;/h2&gt;
&lt;p&gt;Reinstalling Windows is a lot like hiking up a mountain:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You make a lot of great initial progress&lt;/li&gt;
	&lt;li&gt;But there are all sorts of &lt;a href=&quot;http://destinationthejourney.com/2009/06/02/false-summit/&quot; target=&quot;_blank&quot;&gt;false summits&lt;/a&gt; and treacherous pitfalls along the way&lt;/li&gt;
	&lt;li&gt;But most people can actually do it with a little guidance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In just 20 minutes, I had reinstalled Windows just the way it was when the PC was brand new back in 2004.  It was zippy and happy and dying to have 8 years of patches (er, upgrades) applied to it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #6:  &lt;/strong&gt;Now is the time to uninstall all the free useless software that comes bundled with the PC.  Just go to the Control Panel and Remove Programs.  This is quite liberating.  I call it PC liposuction.&lt;/p&gt;
&lt;h2&gt;Windows Update&lt;/h2&gt;
&lt;p&gt;The hike has just begun.  Don’t be afraid, Windows Update is a good thing and it’s surprisingly resilient.  You may have to run it many times in a row depending on how old your computer is.  For the 2004 HP, I ran it 8 times to get 257 updates and 2 service packs over 2 days.  A service pack is an update that is so ginormous, it needs its own name.  During that time, I had multiple reboots and a couple of &lt;a href=&quot;http://en.wikipedia.org/wiki/Blue_Screen_of_Death&quot; target=&quot;_blank&quot;&gt;blue screens of death&lt;/a&gt; aka BSODs aka crashes (the treacherous pitfalls).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #7:  &lt;/strong&gt;Unlike Macs, PCs have 2 cooks in the kitchen.  In this case, HP made the hardware and Microsoft made the operating system.  To reinstall the operating system on this PC,  I needed Windows Update and HP Update.  It just wasn’t clear when to run which program so trial and error is the only way.  Like mountain  hiking, be prepared to backtrack a few times before getting to the top.&lt;/p&gt;
&lt;h2&gt;Abby Normal&lt;/h2&gt;
&lt;p&gt;&lt;img class=&quot;alignright&quot; src=&quot;http://4.bp.blogspot.com/_Y-z5miHic0A/TPg72CiF4dI/AAAAAAAABJc/pO9tilsN6Rw/s1600/abby-normal.jpg&quot; alt=&quot;&quot; width=&quot;384&quot; height=&quot;307&quot; /&gt;After my initial batch of 102 Windows Updates, I tried to run the HP Health Check Update (a really crappy piece of vital software) and it crashed with a BSOD telling me that my RAID driver was missing.  That sucked since HP Update is the way to upgrade that driver,  but you need to be persistent.  I just kept running Windows Update and retrying HP Update and finally I got to the point where I could update the RAID driver and all the other drivers (video, network, modem, trackpad, sound, etc).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #8:&lt;/strong&gt;  Hardware update programs and device driver installers for Windows look about as integrated as Young Frankenstein.  Some of them look like they were written in the DOS age and they all want you to accept their terms of service.  Half the time you can’t tell if they are done or hung, but be patient.  By the time you are done clicking Next and Yes you’ll feel just like you did after you signed all the paperwork for your home loan:  worn-out, confused and in need of a shower.&lt;/p&gt;

&lt;p&gt;However, the real summit of the mountain is now in sight.   Well…almost.  Now you need to run all the upgrades and service packs for Microsoft Office!  But that only took a mere hour or so.&lt;/p&gt;
&lt;h2&gt;You have arrived&lt;/h2&gt;
&lt;p&gt;&lt;img class=&quot;alignright&quot; src=&quot;http://www.project-himalaya.com/dispatches/2008/i08-everest/d18-david-cole-summit.jpg&quot; alt=&quot;&quot; width=&quot;235&quot; height=&quot;314&quot; /&gt;You are at the top of the mountain!  It’s time to set up a safe camp site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #9:&lt;/strong&gt;  A secure web browser with safe email and a password manager will make you a happy camper.  I recommend &lt;a href=&quot;http://www.google.com/chrome&quot; target=&quot;_blank&quot;&gt;Google Chrome&lt;/a&gt;, &lt;a href=&quot;http://mail.google.com&quot; target=&quot;_blank&quot;&gt;Gmail&lt;/a&gt; and &lt;a href=&quot;http://www.lastpass.com&quot; target=&quot;_blank&quot;&gt;Lastpass&lt;/a&gt;.  This combination of free software is just unbeatable.  Never reuse passwords.  Never name passwords after your dog, husband or birth year.  Might as well just lay out a welcome mat for cyber-thieves.&lt;/p&gt;

&lt;p&gt;Gmail has the best SPAM, Phishing and Virus detection of all the web-based email programs.  It also has the most ergonomic UI – especially if you turn on the keyboard shortcuts and other cool Lab features like Undo Send or Reply + Archive.&lt;/p&gt;

&lt;h2&gt;Back up to normal&lt;/h2&gt;
&lt;p&gt;Finally, it was time to recover my friend’s files so I reinstalled Carbonite which was trivial and Carbonite recognized that I had done a complete restore and didn’t just start overwriting my backup.  That was a relief and made Carbonite worth the money just for that one feature.&lt;/p&gt;

&lt;p&gt;However, when I restored the data files, they were all hidden so I couldn’t find them in Explorer or a DOS window.  Carbonite claimed to have restored them but they were nowhere to be found.  At this point I was running out of time so I called Carbonite and they figured it out in a flash.  Nice.  Great customer support – just when you need it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson #10:&lt;/strong&gt;  Always have a backup.  Have a second drive in your computer that uses RAID.  Have a local backup on your network like Time Machine.  Have an offsite backup like Carbonite.  You can never have too many backups.  Then do the occasional restore to see if it really works.&lt;/p&gt;
&lt;h2&gt;Retrospective&lt;/h2&gt;
&lt;p&gt;When you go through a sequence like this, you really learn a lot.  I’m not sure how my friend would have survived doing this on her own or taking it to Fry’s or Best Buy to get fixed.  Everyone’s situation is a little different.  If it wasn’t for the fact that she was running Quickbooks I would have told her to “go buy a Mac” but that’s my answer for everything.  However, I would recommend that she upgrades from Vista to Windows 7 but that’s a whole different post.&lt;/p&gt;
</description>
        <pubDate>Sun, 29 Jan 2012 00:00:00 +0000</pubDate>
        <link>/2012-lessons-learned-windows-virus-recovery/</link>
        <guid isPermaLink="true">/2012-lessons-learned-windows-virus-recovery/</guid>
        
        
        <category>windows</category>
        
        <category>tech</category>
        
      </item>
    
      <item>
        <title>11 reasons why I love my Mac</title>
        <description>&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;:   This is a very opinionated posting that is rated M for Mac bias.  I was a die-hard Windows user for years.  ”Die” and “Hard” being the operative words.&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;strong&gt;Built on UNIX -- &lt;/strong&gt;In 1981, I learned to program in UNIX on a &lt;a href=&quot;http://en.wikipedia.org/wiki/DEC_VAX&quot;&gt;DEC VAX&lt;/a&gt; @ Cal State Fullerton.  UNIX works as good today as it did back them.  Most serious Web development has moved to UNIX.  Long live the Terminal window.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Total Cost of Ownership -- &lt;/strong&gt;You might pay twice as much for a Mac as some bargain-basement, loss-leader laptop du jour, but over the 3-4 years that you own it, I think a Mac will cost you less.  Every year I used to set aside a full day to reinstall Windows because it had become so thrashed.  To me, that&apos;s worth about $500 right there.  Wanna get your kids excited about computing.  Buy a Mac.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Family Tech Support -- &lt;/strong&gt;My family hates asking me for computer help because I turn the simplest questions into a full blown usability analysis.  They are more confused than when they started.  Now that everyone is on a Mac in my family, they can avoid these awkward moments with &quot;Dad&quot;.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;strong&gt;iPhoto &amp;amp; iMovie&lt;/strong&gt;&lt;/strong&gt; -- Most apps are moving to the web, but photo and video editing belong on the desktop.  These two apps are so much better than anything out there for the basic digital enthusiast and they are initially free with the OS.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;strong&gt;iTunes Licensing&lt;/strong&gt;&lt;/strong&gt;  -- When I upgraded to &lt;a href=&quot;http://www.apple.com/macosx/&quot;&gt;OSX Lion&lt;/a&gt;, I did it via the iTunes store.  Since all our computers (you can have 5) are linked to the same iTunes account, I paid for Lion once and installed it on all 4 Macs.  With Windows, I would have paid 4 different times.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;strong&gt;Time Machine&lt;/strong&gt;&lt;/strong&gt; -- It used to suck to do backups, but the Mac Time Machine runs all the time so you are backing up every minute.  It&apos;s more like having Undo.  When I install new software on my Mac,  I&apos;m never worried about the ramifications.  Software installation on Windows could be summed up in two words, &quot;Be Afraid&quot;.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;strong&gt;No Registry&lt;/strong&gt;&lt;/strong&gt; -- The Windows Registry is perhaps the worst idea in the history of personal computing.  Let&apos;s force all apps to put vital cryptic codes into a single point of failure (SPOF) database so you can&apos;t move apps around or remove them with the Delete key.  Even PC-DOS let you move and delete programs.  Wanna get rid of a Mac app, just delete it.  Wanna get rid of a Windows app, start looking around for the dreaded uninstaller.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Unibody Construction&lt;/strong&gt; -- Lets face it.  Macs look like BMWs and PCs look like &lt;a href=&quot;http://en.wikipedia.org/wiki/Chrysler_K_platform&quot;&gt;K Cars&lt;/a&gt;.  OK, maybe not K Cars, since they all now seem willing to copy Apple&apos;s designs.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Trackpad&lt;/strong&gt; -- The trackpad on MacBooks is so good that it&apos;s depressing trying to move the mouse around on other laptops.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Holistic Design&lt;/strong&gt; -- This could easily be #1 on the list.  Apple sweats all the little design details so you don&apos;t have to.  When you go pure Apple for all your computing devices, your technology world is in harmony.  Technology is complex enough as it is.  Apple is about less knobs.  For too many years, PCs were about more knobs.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;The Apple Store&lt;/strong&gt; -- Because in the virtual world, the leading tech company, has the audacity to be old school and actually have a store.  I love contrarians.&lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Tue, 17 Jan 2012 00:00:00 +0000</pubDate>
        <link>/2012-why-i-love-my-mac</link>
        <guid isPermaLink="true">/2012-why-i-love-my-mac</guid>
        
        
        <category>apple</category>
        
        <category>tech</category>
        
      </item>
    
      <item>
        <title>Welcome to my blog</title>
        <description>&lt;p&gt;I’ve always wanted to have my own blog and now I have a reason.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.bridge2u.com&quot;&gt;&lt;img class=&quot;alignright&quot; src=&quot;http://www.bridge2u.com/images/logo.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;95&quot; /&gt;&lt;/a&gt;It’s time to build a new web site for the &lt;a href=&quot;http://www.bridge2u.com&quot;&gt;Bridge Community Church&lt;/a&gt;.  This time, we’ll go with &lt;a href=&quot;http://wordpress.org/&quot;&gt;Wordpress&lt;/a&gt; so lots of people can add content to the site – including the congregation and visitors.  I’m a &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; guy so naturally I want a framework that others can understand.  I took a quick look at &lt;a href=&quot;http://www.studiopress.com/themes/genesis&quot;&gt;Genesys&lt;/a&gt;, &lt;a href=&quot;http://diythemes.com/&quot;&gt;Thesis&lt;/a&gt; and &lt;a href=&quot;http://themehybrid.com/&quot;&gt;Hybrid&lt;/a&gt; (mostly because &lt;a href=&quot;http://justintadlock.com/&quot;&gt;Justin Tadlock&lt;/a&gt; looks like a really smart guy) with the help of these  great postings:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.webdesignerdepot.com/2011/10/a-comparison-of-leading-wordpress-theme-frameworks/&quot;&gt;Comparison of Wordpress Theme Frameworks&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.artofblog.com/thesis-and-genesis-compared/&quot;&gt;ArtOfBlog comparison of Genesys and Thesis&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://justintadlock.com/archives/2009/01/23/coding-the-wordpress-loop&quot;&gt;Coding the Wordpress Loop&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For my blog, I decided to go with Genesys since I liked the &lt;a href=&quot;http://www.studiopress.com/themes/nomadic&quot;&gt;Nomadic&lt;/a&gt; child theme.  Once I take Pastor Greg and Webmaster Jeanne &lt;em&gt;theme shopping&lt;/em&gt;, they’ll probably pick a theme on some other framework.  Sigh.  In the end, I’ll probably write my own child theme.  I’m also curious about writing a Wordpress plug-in for my day job at &lt;a href=&quot;http://www.directra.com&quot;&gt;Directra&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But, I figure this is a great start.  Excelsior.&lt;/p&gt;
</description>
        <pubDate>Thu, 12 Jan 2012 00:00:00 +0000</pubDate>
        <link>/2012-welcome-to-my-blog/</link>
        <guid isPermaLink="true">/2012-welcome-to-my-blog/</guid>
        
        
        <category>faith</category>
        
      </item>
    
  </channel>
</rss>
