Jekyll (and GitHub Pages) Liquid Date Formatting Examples

Posted: October 01, 2013 - Updated: September 21, 2013

Note: Since originally posting this, I have learned a better way to remove leading zeros is to use {{ page.date | date: "%-m" }}. Note the dash in front of the "m". The examples haven't been updated yet. Either will work, but the new way is cleaner.

###Summary (tl;dr)

The set of examples below provide tested code snippets for displaying several date formats on a Jekyll blog1. They should also work on GitHub Pages, Shopify or anything else that uses Liquid. An alternate title for this post should be:

Everything you wanted to know about formatting dates in Jekyll but were afraid to ask.


###Overview

Jekyll2 (the simple, blog aware, static website generator) uses Shopify's Liquid Template Engine3. Displaying dates is done using the "{{ page.date }}" supplied Liquid tag4. With no other alteration, the dates produced look something like:

2013-09-21 00:00:00 +0000

If there are designs that use that format, they are few and far between. Creating friendlier looking dates is done by applying Liquid's "date:" filter. For example, the tag/filter combination:

{{ page.date | date: '%B %d, %Y' }}

produces more reader friendly dates like:

September 21, 2013

Much better, but depending on the date, subtle design issues show up. For example, during the first nine days of each month "leading zeros" crop up (e.g. "August 03, 2013" instead of "August 3, 2013"). Other gotchas with the basic Liquid filters include:

  1. Adding a period behind the abbreviated month names has to be adjusted to handle May. For example, "Aug. 16, 2013" is fine. "May. 16, 2013" is not.
  2. September is generally abbreviated "Sept." instead of Liquid's default "Sep."
  3. To comply with the AP style guide the months April, May, June and July should not be abbreviated. Similar alterations are necessary to meet with the guidelines from the Chicago Manual of Style.

Most designs go with the available defaults. Either using a format that doesn't have these issues or, more frequently, letting the details slip. The information still gets across and every web site has a punch list of potential modifications that stretches to the horizon. So, I understand putting off finding a solution, but not having proper date formatting has always bugged me. While solving the issue for myself5, I decided to put together this post as a public reference as well. I don't yet have the Ruby chops to contribute directly to Jekyll, but I can provide this reference to give back a little at least.

This set of Liquid date filters solves the issues listed above and explores a few other formatting options. Each one provides a solution for a specific display format and is provided with four output examples for the following date: 1) May 3, 2013, 2) July 4, 2013, 3) September 23, 2013 and 4) November 26, 2013. These examples demonstrate if/how the various formatting issues are handled. After the examples, a few snippets of code for individual elements are provided. With these samples, just about any date format desired should be within easy reach.


###Liquid Date Formatting Examples for Jekyll

  • ISO 8601 Date5

    {{ page.date | date: "%Y-%m-%d" }}
    

    Output Example 1: 2013-05-03
    Output Example 2: 2013-07-04
    Output Example 3: 2013-09-23
    Output Example 4: 2013-11-26

  • U.S. numeric style with four digit years (With leading zeros.)

    {{ page.date | date: "%m/%d/%Y" }}
    

    Output Example 1: 05/03/2013
    Output Example 2: 07/04/2013
    Output Example 3: 09/23/2013
    Output Example 4: 11/26/2013

  • U.S. numeric style with four digit years (Leading zeros removed.)

    <!-- Whitespace added for code readability -->
    {{ page.date | date: "%m" | plus:'0' }}
    /
    {{ page.date | date: "%d" | plus:'0' }}
    /
    {{ page.date | date: "%Y" }}
    

    Output Example 1: 5/3/2013
    Output Example 2: 7/4/2013
    Output Example 3: 9/23/2013
    Output Example 4: 11/26/2013

  • U.S. numeric style with two digit year (Leading zeros removed.)

    <!-- Whitespace added for code readability -->
    {{ page.date | date: "%m" | plus:'0' }}
    /
    {{ page.date | date: "%d" | plus:'0' }}
    /
    {{ page.date | date: "%y" }}
    

    Output Example 1: 5/3/13
    Output Example 2: 7/4/13
    Output Example 3: 9/23/13
    Output Example 4: 11/26/13

  • Outside U.S. style with full month name (Leading zeros removed.)

    {{ page.date | date: "%d" | plus:'0' }} {{ page.date | date: "%B %Y" }}
    

    Output Example 1: 3 May 2013
    Output Example 2: 4 July 2013
    Output Example 3: 23 September 2013
    Output Example 4: 26 November 2013

  • U.S. style with full month name (Leading zeros removed.)

    {{ page.date | date: "%B" }}
    {{ page.date | date: "%d" | plus:'0' }}, 
    {{ page.date | date: "%Y" }}
    

    Output Example 1: May 3, 2013
    Output Example 2: July 4, 2013
    Output Example 3: September 23, 2013
    Output Example 4: November 26, 2013

  • U.S. style with full month names and ordinalized days (Leading zeros removed.)

    <!-- Whitespace added for code readability -->
    {% assign d = page.date | date: "%d" | plus:'0' %}
    {{ page.date | date: "%B" }} 
    {% case d %}
      {% when 1 or 21 or 31 %}{{ d }}st
      {% when 2 or 22 %}{{ d }}nd
      {% when 3 or 23 %}{{ d }}rd
      {% else %}{{ d }}th
      {% endcase %}, 
    {{ page.date | date: "%Y" }}
    

    Output Example 1: May 3rd, 2013
    Output Example 2: July 4th, 2013
    Output Example 3: September 23rd, 2013
    Output Example 4: November 26th, 2013

  • U.S. style with AP month abbreviations and ordinalized days (Leading zeros removed.)

    <!-- Whitespace added for code readability -->
    {% assign d = page.date | date: "%d" | plus:'0' %} 
    {% assign m = page.date | date: "%B" %} 
    
    {% case m %}
      {% when 'April' or 'May' or 'June' or 'July' %}{{ m }}
      {% when 'September' %}Sept.
      {% else %}{{ page.date | date: "%b" }}.
      {% endcase %}
    {% case d %}
      {% when 1 or 21 or 31 %}{{ d }}st
      {% when 2 or 22 %}{{ d }}nd
      {% when 3 or 23 %}{{ d }}rd
      {% else %}{{ d }}th
      {% endcase %}, 
    {{ page.date | date: "%Y" }}
    

    Output Example 1: May 3rd, 2013
    Output Example 2: July 4th, 2013
    Output Example 3: Sept. 23rd, 2013
    Output Example 4: Nov. 26th, 2013

  • U.S. style full day and full month names (Leading zeros removed.)

    {{ page.date | date: "%A, %B" }} 
    {{ page.date | date: "%d" | plus:'0' }}, 
    {{ page.date | date: "%Y" }}
    

    Output Example 1: Friday, May 3, 2013
    Output Example 2: Thursday, July 4, 2013
    Output Example 3: Monday, September 23, 2013
    Output Example 4: Tuesday, November 26, 2013

  • Chicago Manual of Style day abbreviations and U.S. style date (With "Thurs." and "Tues.")

    <!-- Whitespace added for code readability -->
    {% assign dy = page.date | date: "%a" %}
    {% case dy %}
      {% when "Tue" %}Tues
      {% when "Thu" %}Thurs
      {% else %}{{ dy }}
      {% endcase %}. 
    ~
    {{ page.date | date: "%B" }} 
    {{ page.date | date: "%d" | plus:'0' }}, 
    {{ page.date | date: "%Y" }}
    

    Output Example 1: Fri. ~ May 3, 2013
    Output Example 2: Thurs. ~ July 4, 2013
    Output Example 3: Mon. ~ September 23, 2013
    Output Example 4: Tues. ~ November 26, 2013

###Individual Component Snippets for Liquid Date Formatting

These individual snippets are for a few of the tricker formatting filters. Some that weren't used in the examples above. For those interested in the approach, the hack I'm using to remove leading zeros is to add "0" to the string. This turns the string into an integer. When the integer is rendered back as a string the leading zero disappears. Hurray for dynamic typing.

  • Numeric month with leading zeros removed

    {{ page.date | date: "%m" | plus:'0' }}
    
  • Numeric day with leading zeros removed

    {{ page.date | date: "%d" | plus:'0' }}
    
  • Ordinalized numeric day with leading zeros removed

    {% assign d = page.date | date: "%d" | plus:'0' %}
    {% case d %}
      {% when 1 or 21 or 31 %}{{ d }}st
      {% when 2 or 22 %}{{ d }}nd
      {% when 3 or 23 %}{{ d }}rd
      {% else %}{{ d }}th
      {% endcase %}
    
  • AP Style month abbreviations

    {% assign m = page.date | date: "%B" %}
    {% case m %}
      {% when 'April' or 'May' or 'June' or 'July' %}{{ m }}
      {% when 'September' %}Sept.
      {% else %}{{ page.date | date: "%b" }}.
      {% endcase %}
    

    (Produces: "Jan.", "Feb.", "Mar.", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec.")

  • Chicago Manual of Style day abbreviations

    {% assign dy = page.date | date: "%a" %}
    {% case dy %}
      {% when "Tue" %}Tues
      {% when "Thu" %}Thurs
      {% else %}{{ dy }}
      {% endcase %}.
    

    (Produces: "Sun.", "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat.")

  • Chicago Manual of Style month abbreviations

    {% assign m = page.date | date: "%B" %}
    {% case m %}
      {% when 'May' or June' or 'July' %}{{ m }}
      {% when 'September' %}Sept.
      {% else %}{{ page.date | date: "%b" }}.
      {% endcase %}
    

    (Produces: "Jan.", "Feb.", "Mar.", "Apr.", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec.")

With that, you should be in pretty good shape. If you can't directly create what you need from the above samples or snippets you should at least be able to use a similar approach to piece together what you need.


Notes on the Examples

  1. The hour, minute and second parts of the full date/time stamp aren't being used because Jekyll tends to zero them out.
  2. In some of the examples, the code is split to multiple lines to help readability. If it's a natural break point where white space already exists, this won't effect HTML rendering. In some cases, it will introduce unwanted white space. Simply move everything back to one line to create the desired presentation.

Footnotes

  1. These examples were create on a Mac running OS X 10.8.5 with: Ruby 2.0.0p247 - Jekyll 1.2.1 - liquid 2.5.2. Your mileage may vary.
  2. The main Jekyll website provides a great overview of the software. You can learn even more with a visit to the Jekyll's GitHub Repo.
  3. Shopify's Liquid template engine. "A small and fast template language which is quick to learn but very powerful for full customization."
  4. The Liquid Date Filter offers some basic formatting elements and is the basis of these code snippets. Note that in some cases "post.date" might be required instead of "page.date".
  5. Observant readers will notice that as of the time this post went live, my design still uses a date format with leading zeros. I have the solution, it just hasn't been implement yet. It'll go in with the next set of design changes.
  6. ISO 8601 - "Data elements and interchange formats - Information interchange - Representation of dates and times is an international standard covering the exchange of date and time-related data." A perfect example of how Time really is wibbly wobbly timey wimey… stuff.

Pretty Printing JSON via JavaScript or Extension

August 10, 2013

####Summary

If you're a webdev who uses JSON and you haven't seen JSONView for in-browser pretty printing of JSON, go check it out. Or, take a look at this JS Fiddle if you want to roll your own in JavaScript to do something similar.

####The Problem

Much of my work involves XML and JSON data feeds pulled over a web (HTTP) connection. Most browsers automatically "Pretty Print" XML files and add syntax highlighting and the ability to collapse sections. This makes spot checking data in the XML easy. For example1, this single blob of XML:

<widget><debug>on</debug><window title="Sample Konfabulator Widget"><name>main_window</name><width>500</width><height>500</height></window><image src="Images/Sun.png" name="sun1"><hOffset>250</hOffset><vOffset>250</vOffset><alignment>center</alignment></image><text data="Click Here" size="36" style="bold"><name>text1</name><hOffset>250</hOffset><vOffset>100</vOffset><alignment>center</alignment><onMouseUp>sun1.opacity = (sun1.opacity / 100) * 90;</onMouseUp></text></widget>

is automagically turned into the much friendlier:

Unfortunately, the browsers I use2 haven't caught up with JSON feeds enough to do the same thing. This corresponding JSON example:

{"widget": {"debug": "on","window": {"title": "Sample Konfabulator Widget","name": "main_window","width": 500,"height": 500},"image": { "src": "Images/Sun.png","name": "sun1","hOffset": 250,"vOffset": 250,"alignment": "center"},"text": {"data": "Click Here","size": 36,"style": "bold","name": "text1","hOffset": 250,"vOffset": 100,"alignment": "center","onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"}}}

gets no real help and just shows up like this:

That's not horrible for smaller files, but with larger ones, it gets messy fast.

####Solution 1 - The Hacky Way

I've found two nice solutions for this. The first approach is that of a webdev hacker: Use JavaScript itself to do the formatting. This works great for times when a page is consuming JSON and can be passed a debug flag. The basic approach came from an answer on StackOverflow3. I modified it a little to suite my needs. The first step is to add a <pre> tag with your preferred target ID:

<pre id="pretty_json"></pre>

My version of the JavaScript function looks like this:

function jsonPrettyHighlightToId(jsonobj, id_to_send_to) {
    
    var json = JSON.stringify(jsonobj, undefined, 2);
    
    json = json.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
    json = json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
        var cls = 'color: darkorange;';
        if (/^"/.test(match)) {
            if (/:$/.test(match)) {
                cls = 'color: red;';
            } else {
                cls = 'color: green;';
            }
        } else if (/true|false/.test(match)) {
            cls = 'color: blue;';
        } else if (/null/.test(match)) {
            cls = 'color: magenta;';
        }
        return '<span style="' + cls + '">' + match + '</span>';
    });
    
    document.getElementById(id_to_send_to).innerHTML = json;
}

Just pass the function a JSON object and the ID to update like so:

var pseudo_json_object = {a:1, 'b':'foo', c:[true,false,null,'true','false','null', {d:{e:1.3e5,f:'1.3e5'}}]};

jsonPrettyHighlightToId(pseudo_json_object, 'pretty_json');

Here is a live example of the output (done in an unsafe, hacky way for simplicity that may or may not work with your browser).





Note that the JavaScript function adds the styles inline. Generally a poor practice, it's nice here. Syntax highlighted debugging output is provided without having to alter active CSS files.

####Solution 2 - The JSONView Browser Extension

Of course, most of the time, it's nicer to simply get a human readable version of the JSON directly from the browser. Enter the JSONView4 extension. Originally built for FireFox, there is a Chrome version available as well. It works like a champ, turning the small example JSON from the mess above to this nice, clean output:

Pretty Printing. Syntax Highlighting. Collapsing Nodes. JSONView is great. It even lets you mess with the style sheet and change font sizes. A must have for webdev types who work with JSON.




Foot Notes5

  1. The example XML and JSON files were lifted from the examples on the json.org site.
  2. My main development browsers are Chrome, Firefox and Safari on a Mac. Your mileage may vary with IE.
  3. The initial StackOverflow answer showing how to use regular expressions in JavaScript to stringify a JSON object and add syntax highlighting to it.
  4. JSONView - The extension to make your JSON reading life much nicer.
  5. This really should have been split into a "two-part" set of posts. Alas, other priorities prevent the amount of editing that would take.

Exactly how accurate are the expiration dates on pills?

Posted: July 10, 2013 - Updated: August 01, 2013

Today is August 1st, 2013. This Claritin expired "July 2013."

Probably won't kill me, right?


Bama vs. The Braves (A Logo Comparison)

July 30, 2013

Two quick reference points for those who don't know me:

  1. I'm a fan of the Alabama Crimson Tide.
  2. I'm apathetic towards the Atlanta Braves.

There is generally little confusion to between the two in the sports world. Bama being a college mostly known for football. The Braves, a pro baseball team. Easy enough to tell apart. Unless you're only seeing a monochrome copy of the logos. A True Sports Fan might know which is which in an instant. Me? Not so much.

Whenever I see an "A", I assume Alabama. Since Tuscaloosa (home of the Tide) and Atlanta are just three hours away from each other, this doesn't work out so well. Anywhere a Bama logo might show up is just as likely to have one for the Braves and vice verse. More than once, I've given a "Roll Tide" to someone to get back nothing but a blank stare. To solve this embarrassing issue, here are the two logos side by side.

Atlanta's logo is on the left. Bama's, the right. Viewed together, it's easy to see how to tell them apart. Bama's logo has the serif sticking out of the top. Design geeks will know that there is an imaginary line that runs across the top of letters called the "capline".

Since The University of Alabama is also know as The Capstone, a little mnemonic device is to remember that the logo for The Capstone logo has a serif at the capline. (For non-design-geeks, just remember that the Bama logo has the pointy part sticking out of the top.)

Roll Tide!


Update: A friend, who happens to be an Auburn fan, commented to say, "It's easy to tell them apart. The Bama a has a mullet." While not the way I'd care to think of it, that's too good not to add. (See you at the Iron Bowl, Deason.)


Command Line One-Liner to Compare Files with MD5

July 08, 2013

While working on a tool to eliminate duplicate photos from old hard drives, I wrote this little snippet of code that's worth saving:

if [ $(md5 -q 1.txt) == $(md5 -q 2.txt) ]; then echo "same"; else echo "different"; fi

It's a command line one-liner that generates MD5 hashes for two files, compares them and states if they are the same or different.

For those unfamiliar with MD5, it's a "cryptographic hash function that produces a 128-bit hash value." The useful part for this snippet is that MD5 can be fed a file of any size and the results is a 32 character string. Most importantly, the same input will always produce the same output and any difference (no matter how minor) creates a large difference in the result. For example, any computer can run MD5 on a file with the contents "asdfasdf-1" and it will produce the hash signature:

f3748c05e25ca8cce7795d1ec97749b0

If you change the one to a two (i.e. "asdfasdf-2") the signature changes to:

e9ca151e1882f63c5d05e7958a7527a9

More about this will come in another post, but what this means for a duplicate photo finder is that MD5 hashes can be generated for every photo and then compared. Any two files with the same hash signature are the same* and can be pared down. That is done with a larger program. The little snippet of code is used for verification. It's also useful enough to be broken out to its own.


*Note: For the tech/cryptography minded folks out there, I know that MD5 can have collisions. For what I'm doing, the chances are so small that I'm not worried about it.


Currently Reading - Olsen, Howey and McNally

June 30, 2013

The initial reading list for a week off includes three favorite topics: Programming, Sci-Fi and Photography. (Also, Culture.)

  • The Culture Code: An Ingenious Way to Understand Why People Around the World Live and Buy as They Do by Clotaire Rapaille - Heard about this one on some podcast. Seemed interesting. So, it's the current audiobook. Because the title is designed for Search Engine Optimization, no other description is necessary.
  • Design Patterns in Ruby by Russ Olsen - I've been picking up a little of the Ruby language over the past year. Would have done more except for a giant transition project at work that ate up most of my time. Hitting it harder now. Since actually reading a Design Patterns book is also on my list, this looks perfect.
  • Shift (Silo Saga - Volume 2) by Hugh Howey - The follow up to Wool which I read last year and really enjoyed. If you have a Kindle, you can read the first of the five parts of Wool free here. When you're done, pick up the Omnibus. It's a fun ride. It's also an example of success in self-publishing.
  • Sketching Light: An Illustrated Tour of the Possibilities of Flash by Joe McNally - Photography is the art of lighting. Mr. McNally is a master at the craft. There is always something new to learn from him.

Books I've Read

June 25, 2013

I started putting together a list of the books I've read along with basic ratings. Part of the idea is to remind myself of which ones are worth revisiting. Also, it's just fun to build the list. My rating systems is:

  • 1/4 - I actively recommend against this book. Do not waste your time.
  • 2/4 - Someone may get something out of it, but I didn't.
  • 3/4 - Pretty good. Glad I read it.
  • 4/4 - Really enjoyable and/or educational. Definitely recommended.
  • 5/4 - A reminder to myself to read this book again in the future.

A caveat with these ratings is that I'm making them now even for books I read decades ago. For example, I have "On A Pale Horse" by Piers Anthony as 4/4. I read that in middle school and remember really enjoying it. No idea if it would hold up today. But, that's half the fun of lists like this.

I've got a bunch more that I'll add over time. Until then, here's the first version of the list.

TitleAuthorRating
1984George Orwell4/4
2001: A Space OdysseyArthur C Clarke4/4
Adventures of Huckleberry FinnMark Twain3/4
Adventures of Sherlock HolmesSir Arthur Conan Doyle4/4
All Marketers Are Liars: The Power of Telling Authentic Stories in a Low-Trust WorldSeth Godin3/4
Art and Fear - Observations on the Perils (and Rewards) of ArtmakingDavid Bayles and Ted Orland3/4
Art of War, TheSun Tzu3/4
Autobiography of Benjamin FranklinSilence Dogood3/4
Basic WoodworkingEditors of Sunset Books4/4
Bearing an HourglassPiers Anthony3/4
Being a Green MotherPiers Anthony3/4
Blue Ocean StrategyW. Chan Kim and Renee Mauborgne5/4
Brand Against the MachineJohn Morgan3/4
Brave New WorldAldous Huxley4/4
Cat's CradleKurt Vonnegut3/4
Catching Fire: The Second Book of the Hunger GamesSuzanne Collins3/4
Children of the SkyVernor Vinge4/4
ContactCarl Sagan4/4
Conversion MarketingBryan Heathman1/4
Crush ItGary Vaynerchuk5/4
CryptonomiconNeal Stephenson4/4
Curve of the FutureEdward Passerini4/4
Diamond AgeNeal Stephenson5/4
Do Androids Dream of Electric Sheep?Philip K Dick3/4
Don't Make Me Think - A Common Sense Approach to Web UsabilitySteve Krug5/4
Down and Out In the Magic KingdomCory Doctorow3/4
Duck Tape MarketingJohn Jantsch5/4
DuneFrank Herbert5/4
E-Myth RevisitedMichael E. Gerber5/4
Ender's GameOrson Scott Card4/4
EnoughPatrick Rhone3/4
EonGreg Bear3/4
Fahrenheit 451Ray Bradbury4/4
Fire Upon the DeepVernor Vinge4/4
Forever War, TheJoe Halderman3/4
Forge of God, TheGreg Bear3/4
FoundationIsaac Asimov3/4
Four Hour WorkweekTimothy Ferris5/4
Fourty-eight Laws of PowerRobert Greene2/4
FrankensteinMary Shelley4/4
Free Prize InsideSeth Godin3/4
Free: The Future of a Radical PriceChris Anderson3/4
Get Things DoneDavid Allen5/4
Get Things Done LiveDavid Allen5/4
Getting to YesRoger Fisher and William Ury3/4
Girl with the Dragon Tattoo, TheStieg Larsson3/4
Handmaid's Tale, TheMargaret Atwood3/4
Harry Potter and the Chamber of Secrets (Book 2)J.K. Rowling3/4
Harry Potter and the Deathly Hallows (Book 7)J.K. Rowling3/4
Harry Potter and the Goblet of Fire (Book 4)J.K. Rowling3/4
Harry Potter and the Half-Blood Prince (Book 6)J.K. Rowling3/4
Harry Potter and the Order of the Phoenix (Book 5)J.K. Rowling3/4
Harry Potter and the Philosopher's Stone (Book 1)J.K. Rowling3/4
Harry Potter and the Prisoner of Azkaban (Book 3)J.K. Rowling3/4
Have Space-Suit Will TravelRobert A Heinlein3/4
Head First JavaKathy Sierra and Bert Bates3/4
Hitch Hiker's Guide to the GalaxyDouglas Adams4/4
How to Stay Motivated - The Goals ProgramZig Ziglar5/4
How to Stay Motivated: Developing the Qualities of SuccessZig Ziggler4/4
How to be a Programmer: A Short, Comprehensive, and Personal SummaryRobert L. Read3/4
Hunger Games, TheSuzanne Collins3/4
I Will Teach You To Be RichRamit Sethi3/4
I, RobotIsacc Asimov.4/4
Ignore EverybodyHugh MacLeod4/4
Incredible Secret Money Machine II, TheDon Lancaster5/4
Information Dashboard Design - The Effective Visual Communication of DataStephen Few5/4
Intelligent Entrepreneur, TheBill Murphy2/4
Lost World, TheMichael Crichton3/4
Magic of Thinking Big, TheDavid Schwartz5/4
Marketing for MillionsCanfield, Eker, Assaraf, Mandossian1/4
MasteryRobert Greene3/4
MeditationsMarcus Aurelius2/4
Mockingjay: The Final Book of The Hunger GamesSuzanne Collins3/4
NeuromancerWilliam Gibson5/4
On the RoadJack Kerouac3/4
On a Pale HorsePiers Anthony4/4
Paradox of Choice, The: Why More Is LessBarry Schwartz5/4
Pep Talk, The: A Football Story About The Business Of WinningKevin Elko and Robert L. Shook2/4
Postman, TheDavid Brin4/4
Practical Object-Oriented Design in Ruby An Agile PrimerSandi Metz3/4
Pragmatic Programer, The: From Journeyman to MasterDave Thomas | Andy Hunt5/4
Purple CowSeth Godin3/4
Quiet - The Power of IntrovertsBy Susan Cain5/4
Ready Player OneErnest Cline5/4
Referral Engine: Teaching Your Business to Market ItselfJohn Jantsch5/4
ReworkJason Fried, David Heinemeier Hansson3/4
Rich Dad, Poor DadRobert Kiyosaki5/4
Richest Man in BabylonGeorge Clason5/4
Scanner Darkly, APhilip K Dick3/4
Secrets of the Millionaire MindT. Harv Eker5/4
Seven Habits of Highly Effective PeopleStephen R. Covey3/4
Slaughterhouse FiveKurt Vonnegut4/4
Snow CrashNeal Stephenson4/4
Speaker for the DeadOrson Scott Card3/4
Starship TroopersRobert A Heinlein5/4
Stranger in a Strange LandRobert A Heinlein5/4
Stumbling on HappinessDaniel Gilbert3/4
ThunderstruckErik Larson4/4
To Kill a MockingbirdHarper Lee5/4
Unemployed MillionnaireMatt Morris1/4
Walden; or, Life in the WoodsHenry David Thoreau5/4
War of Art; Winning the Inner Creative BattleSteven Pressfield3/4
Wielding a Red SwordPiers Anthony3/4
With a Tangled SkeinPiers Anthony3/4
Wind Through the Keyhole, TheStephen King4/4
Wool Omnibus (vol. 1-5 - The Silo Saga)Hugh Howey4/4
Zen and the Art of Motorcycle MaintenanceRobert M. Pirsig3/4
Zero HistoryWilliam Gibson3/4

Secrets of Your Cable Modem

February 09, 2013

Most devices that connect to your home internet have miniature web sites built into them. These sites provide an interface to basic info and status updates. If you've ever setup a WiFi router, you probably used the baked in web site to do the configuration.

After having a new cable modem installed yesterday, I checked to see what the web interface offered. In my case, this was done by going to "http://192.168.100.1". (If you're connected through a Motorola SURFBoard Cable Modem, that like will probably work. Otherwise, it probably won't. A quick search for the model number of any device will tell you the address of its site if it has one.)

This is what shows up:

I'm a little disappointed to see that "Initialize Baseline Privacy" is "Skipped". The way I understand it, that means that anyone on the street can snoop on each others regular web site traffic. This doesn't include banking sites or any other "secure" site. Still, it would be nice to have at least baseline privacy.

Most of the interface isn't helpful or even interesting unless you are a techie, but there is one nice feature. The ability to reboot/restart the cable modem without having to physically unplug it. Clicking on the "Configuration" link in the side bar brings up this page:

Just click that "Restart Cable Modem" button to reboot the cable modem. This is especially useful if it's in another room. If it starts acting flaky, a round trip away is no longer necessary to try the default first piece of tech advice: "Have you tried turning it off and on again?"


Go To Index Page: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106


© Alan W. Smith
RSS Feed