From dff9fef0f84d3a81bb30be68d15584f3485b0fcf Mon Sep 17 00:00:00 2001 From: brycematheson Date: Sat, 21 Nov 2015 02:09:18 -0700 Subject: Lots of changes --- .gitignore | 1 - LICENSE.md | 20 - README.md | 48 +- archetypes/default.md | 1 + bootstrap_custom_config.json | 409 --------- config.toml | 10 + ...01-i-dont-use-anti-virus-software-am-i-crazy.md | 46 + ...02-removing-category-from-your-wordpress-url.md | 21 + content/post/2014-07-16-understanding-raid.md | 165 ++++ ...7-18-change-crop-orientation-adobe-lightroom.md | 9 + ...014-07-26-how-to-record-your-screen-on-a-mac.md | 26 + .../post/2014-07-29-my-experience-with-joomla.md | 33 + .../post/2014-08-03-my-experience-with-a-mac.md | 43 + ...14-09-09-the-most-important-camera-accessory.md | 17 + ...14-10-03-visual-form-builder-paypal-redirect.md | 23 + .../2014-10-06-tmobile-im-breaking-up-with-you.md | 27 + ...4-11-29-i-have-an-iphone-and-mac-get-an-ipad.md | 23 + ...05-heres-to-actually-sticking-with-something.md | 12 + ...-06-my-love-hate-relationship-with-wordpress.md | 51 ++ .../post/2014-12-08-investment-calculator-java.md | 272 ++++++ .../post/2014-12-15-pseudo-responsive-images.md | 24 + content/post/2014-12-20-take-that-mr-barney.md | 31 + .../2015-01-02-5-things-to-stop-doing-in-2015.md | 27 + .../post/2015-01-19-static-site-contact-form.md | 34 + .../2015-01-24-remove-ds_store-from-zip-file.md | 25 + .../post/2015-02-14-i-love-to-grunt-and-gulp.md | 104 +++ content/post/2015-02-20-command-line-essentials.md | 56 ++ .../post/2015-06-03-powershell-extend-script.md | 116 +++ content/post/2015-07-25-hindsight.md | 25 + .../2015-07-31-windows-10-first-impressions.md | 37 + content/post/2015-09-15-moral-sensitivity.md | 21 + .../2015-11-09-mathesondigital-wordpress-theme.md | 25 + images/screenshot.png | Bin 736235 -> 0 bytes images/tn.png | Bin 373673 -> 0 bytes layouts/404.html | 6 +- layouts/_default/li.html | 30 +- layouts/_default/single.html | 142 ++-- layouts/_default/terms.html | 13 - layouts/index.html | 7 +- layouts/partials/footer.html | 33 +- layouts/partials/header.html | 160 ++-- layouts/partials/link.html | 47 -- layouts/partials/pagination.html | 22 +- public/404.html | 96 +++ public/css/font-awesome.min.css | 4 + public/css/style.css | 808 ++++++++++++++++++ public/fonts/FontAwesome.otf | Bin 0 -> 93888 bytes public/fonts/fontawesome-webfont.eot | Bin 0 -> 60767 bytes public/fonts/fontawesome-webfont.svg | 565 +++++++++++++ public/fonts/fontawesome-webfont.ttf | Bin 0 -> 122092 bytes public/fonts/fontawesome-webfont.woff | Bin 0 -> 71508 bytes public/fonts/fontawesome-webfont.woff2 | Bin 0 -> 56780 bytes public/img/apple-touch-icon.jpg | Bin 0 -> 4566 bytes public/img/apple-touch-icon.png | Bin 0 -> 3518 bytes public/img/avatar.jpg | Bin 0 -> 7168 bytes public/img/cross.png | Bin 0 -> 273 bytes public/img/favicon.ico | Bin 0 -> 15301 bytes public/img/plane.jpg | Bin 0 -> 502698 bytes public/img/post_images/antivirus_1.png | Bin 0 -> 384339 bytes public/img/post_images/antivirus_2.jpg | Bin 0 -> 157789 bytes public/img/post_images/antivirus_3.jpg | Bin 0 -> 258084 bytes public/img/post_images/antivirus_4.jpg | Bin 0 -> 167150 bytes public/img/post_images/exif1.png | Bin 0 -> 731230 bytes public/img/post_images/exif2.png | Bin 0 -> 767133 bytes public/img/post_images/exif3.png | Bin 0 -> 744404 bytes public/img/post_images/exif4.png | Bin 0 -> 321255 bytes public/img/post_images/exif5.png | Bin 0 -> 831377 bytes public/img/post_images/exif6.png | Bin 0 -> 989375 bytes public/img/post_images/exif7.png | Bin 0 -> 303427 bytes public/img/post_images/guicalculator.png | Bin 0 -> 48802 bytes public/img/post_images/joomla.png | Bin 0 -> 305112 bytes .../img/post_images/mathesondigital-wordpress.png | Bin 0 -> 234222 bytes public/img/post_images/permalinks_wordpress.png | Bin 0 -> 91509 bytes public/img/post_images/pingdom-speed-results.jpg | Bin 0 -> 33529 bytes public/img/post_images/raid1.png | Bin 0 -> 34825 bytes public/img/post_images/raid2.png | Bin 0 -> 34573 bytes public/img/post_images/raid3.png | Bin 0 -> 42640 bytes public/img/post_images/raid4.png | Bin 0 -> 34487 bytes public/img/post_images/record1.png | Bin 0 -> 191694 bytes public/img/post_images/record2.png | Bin 0 -> 155565 bytes public/img/post_images/record3.png | Bin 0 -> 38791 bytes public/img/post_images/sparks_fly.jpg | Bin 0 -> 566780 bytes public/img/post_images/tmobile.jpg | Bin 0 -> 170018 bytes public/img/post_images/visualformbuilder1.png | Bin 0 -> 58673 bytes public/img/post_images/visualformbuilder2.png | Bin 0 -> 235566 bytes .../post_images/windows-10-first-impressions-1.png | Bin 0 -> 470927 bytes .../post_images/windows-10-first-impressions-2.png | Bin 0 -> 13805 bytes .../post_images/windows-10-first-impressions-3.png | Bin 0 -> 47616 bytes .../post_images/windows-10-first-impressions-4.png | Bin 0 -> 34111 bytes .../post_images/windows-10-first-impressions-5.png | Bin 0 -> 61669 bytes .../post_images/windows-10-first-impressions-6.png | Bin 0 -> 102274 bytes public/img/post_images/wordpress-logo.png | Bin 0 -> 14705 bytes public/img/texture.png | Bin 0 -> 9080 bytes public/index.html | 204 +++++ public/index.xml | 929 +++++++++++++++++++++ public/js/highlight.pack.js | 1 + public/page/1/index.html | 1 + public/page/2/index.html | 206 +++++ public/page/3/index.html | 164 ++++ .../index.html | 260 ++++++ .../index.html | 236 ++++++ .../post/2014-07-16-understanding-raid/index.html | 378 +++++++++ .../index.html | 222 +++++ .../index.html | 249 ++++++ .../index.html | 248 ++++++ .../index.html | 220 +++++ .../2014-08-03-my-experience-with-a-mac/index.html | 258 ++++++ .../index.html | 230 +++++ .../index.html | 236 ++++++ .../index.html | 240 ++++++ .../index.html | 224 +++++ .../index.html | 238 ++++++ .../index.html | 224 +++++ .../index.html | 266 ++++++ .../index.html | 471 +++++++++++ .../2014-12-15-pseudo-responsive-images/index.html | 236 ++++++ .../post/2014-12-20-take-that-mr-barney/index.html | 244 ++++++ .../index.html | 242 ++++++ .../2015-01-19-static-site-contact-form/index.html | 245 ++++++ .../index.html | 238 ++++++ .../2015-02-14-i-love-to-grunt-and-gulp/index.html | 316 +++++++ .../2015-02-20-command-line-essentials/index.html | 270 ++++++ .../2015-06-03-powershell-extend-script/index.html | 328 ++++++++ public/post/2015-07-25-hindsight/index.html | 237 ++++++ .../index.html | 250 ++++++ .../post/2015-09-15-moral-sensitivity/index.html | 234 ++++++ .../index.html | 234 ++++++ public/post/index.html | 330 ++++++++ public/post/index.xml | 929 +++++++++++++++++++++ public/sitemap.xml | 140 ++++ static/css/bootstrap.min.css | 10 - static/css/github.css | 115 --- static/css/main.css | 289 ------- static/css/style.css | 808 ++++++++++++++++++ static/images/apple-touch-icon.png | Bin 3518 -> 0 bytes static/images/bg.jpg | Bin 351009 -> 0 bytes static/images/favicon.ico | Bin 1150 -> 0 bytes static/img/apple-touch-icon.jpg | Bin 0 -> 4566 bytes static/img/avatar.jpg | Bin 0 -> 7168 bytes static/img/cross.png | Bin 0 -> 273 bytes static/img/favicon.ico | Bin 0 -> 15301 bytes static/img/plane.jpg | Bin 0 -> 502698 bytes static/img/post_images/antivirus_1.png | Bin 0 -> 384339 bytes static/img/post_images/antivirus_2.jpg | Bin 0 -> 157789 bytes static/img/post_images/antivirus_3.jpg | Bin 0 -> 258084 bytes static/img/post_images/antivirus_4.jpg | Bin 0 -> 167150 bytes static/img/post_images/exif1.png | Bin 0 -> 731230 bytes static/img/post_images/exif2.png | Bin 0 -> 767133 bytes static/img/post_images/exif3.png | Bin 0 -> 744404 bytes static/img/post_images/exif4.png | Bin 0 -> 321255 bytes static/img/post_images/exif5.png | Bin 0 -> 831377 bytes static/img/post_images/exif6.png | Bin 0 -> 989375 bytes static/img/post_images/exif7.png | Bin 0 -> 303427 bytes static/img/post_images/guicalculator.png | Bin 0 -> 48802 bytes static/img/post_images/joomla.png | Bin 0 -> 305112 bytes .../img/post_images/mathesondigital-wordpress.png | Bin 0 -> 234222 bytes static/img/post_images/permalinks_wordpress.png | Bin 0 -> 91509 bytes static/img/post_images/pingdom-speed-results.jpg | Bin 0 -> 33529 bytes static/img/post_images/raid1.png | Bin 0 -> 34825 bytes static/img/post_images/raid2.png | Bin 0 -> 34573 bytes static/img/post_images/raid3.png | Bin 0 -> 42640 bytes static/img/post_images/raid4.png | Bin 0 -> 34487 bytes static/img/post_images/record1.png | Bin 0 -> 191694 bytes static/img/post_images/record2.png | Bin 0 -> 155565 bytes static/img/post_images/record3.png | Bin 0 -> 38791 bytes static/img/post_images/sparks_fly.jpg | Bin 0 -> 566780 bytes static/img/post_images/tmobile.jpg | Bin 0 -> 170018 bytes static/img/post_images/visualformbuilder1.png | Bin 0 -> 58673 bytes static/img/post_images/visualformbuilder2.png | Bin 0 -> 235566 bytes .../post_images/windows-10-first-impressions-1.png | Bin 0 -> 470927 bytes .../post_images/windows-10-first-impressions-2.png | Bin 0 -> 13805 bytes .../post_images/windows-10-first-impressions-3.png | Bin 0 -> 47616 bytes .../post_images/windows-10-first-impressions-4.png | Bin 0 -> 34111 bytes .../post_images/windows-10-first-impressions-5.png | Bin 0 -> 61669 bytes .../post_images/windows-10-first-impressions-6.png | Bin 0 -> 102274 bytes static/img/post_images/wordpress-logo.png | Bin 0 -> 14705 bytes static/img/texture.png | Bin 0 -> 9080 bytes theme.toml | 10 +- 178 files changed, 13999 insertions(+), 1126 deletions(-) delete mode 100644 .gitignore delete mode 100644 LICENSE.md delete mode 100644 bootstrap_custom_config.json create mode 100644 config.toml create mode 100644 content/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy.md create mode 100644 content/post/2014-07-02-removing-category-from-your-wordpress-url.md create mode 100644 content/post/2014-07-16-understanding-raid.md create mode 100644 content/post/2014-07-18-change-crop-orientation-adobe-lightroom.md create mode 100644 content/post/2014-07-26-how-to-record-your-screen-on-a-mac.md create mode 100644 content/post/2014-07-29-my-experience-with-joomla.md create mode 100644 content/post/2014-08-03-my-experience-with-a-mac.md create mode 100644 content/post/2014-09-09-the-most-important-camera-accessory.md create mode 100644 content/post/2014-10-03-visual-form-builder-paypal-redirect.md create mode 100644 content/post/2014-10-06-tmobile-im-breaking-up-with-you.md create mode 100644 content/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad.md create mode 100644 content/post/2014-12-05-heres-to-actually-sticking-with-something.md create mode 100644 content/post/2014-12-06-my-love-hate-relationship-with-wordpress.md create mode 100644 content/post/2014-12-08-investment-calculator-java.md create mode 100644 content/post/2014-12-15-pseudo-responsive-images.md create mode 100644 content/post/2014-12-20-take-that-mr-barney.md create mode 100644 content/post/2015-01-02-5-things-to-stop-doing-in-2015.md create mode 100644 content/post/2015-01-19-static-site-contact-form.md create mode 100644 content/post/2015-01-24-remove-ds_store-from-zip-file.md create mode 100644 content/post/2015-02-14-i-love-to-grunt-and-gulp.md create mode 100644 content/post/2015-02-20-command-line-essentials.md create mode 100644 content/post/2015-06-03-powershell-extend-script.md create mode 100644 content/post/2015-07-25-hindsight.md create mode 100644 content/post/2015-07-31-windows-10-first-impressions.md create mode 100644 content/post/2015-09-15-moral-sensitivity.md create mode 100644 content/post/2015-11-09-mathesondigital-wordpress-theme.md delete mode 100644 images/screenshot.png delete mode 100644 images/tn.png delete mode 100644 layouts/_default/terms.html delete mode 100644 layouts/partials/link.html create mode 100644 public/404.html create mode 100644 public/css/font-awesome.min.css create mode 100644 public/css/style.css create mode 100644 public/fonts/FontAwesome.otf create mode 100644 public/fonts/fontawesome-webfont.eot create mode 100644 public/fonts/fontawesome-webfont.svg create mode 100644 public/fonts/fontawesome-webfont.ttf create mode 100644 public/fonts/fontawesome-webfont.woff create mode 100644 public/fonts/fontawesome-webfont.woff2 create mode 100644 public/img/apple-touch-icon.jpg create mode 100644 public/img/apple-touch-icon.png create mode 100644 public/img/avatar.jpg create mode 100755 public/img/cross.png create mode 100644 public/img/favicon.ico create mode 100644 public/img/plane.jpg create mode 100644 public/img/post_images/antivirus_1.png create mode 100644 public/img/post_images/antivirus_2.jpg create mode 100644 public/img/post_images/antivirus_3.jpg create mode 100644 public/img/post_images/antivirus_4.jpg create mode 100644 public/img/post_images/exif1.png create mode 100644 public/img/post_images/exif2.png create mode 100644 public/img/post_images/exif3.png create mode 100644 public/img/post_images/exif4.png create mode 100644 public/img/post_images/exif5.png create mode 100644 public/img/post_images/exif6.png create mode 100644 public/img/post_images/exif7.png create mode 100644 public/img/post_images/guicalculator.png create mode 100644 public/img/post_images/joomla.png create mode 100644 public/img/post_images/mathesondigital-wordpress.png create mode 100644 public/img/post_images/permalinks_wordpress.png create mode 100644 public/img/post_images/pingdom-speed-results.jpg create mode 100644 public/img/post_images/raid1.png create mode 100644 public/img/post_images/raid2.png create mode 100644 public/img/post_images/raid3.png create mode 100644 public/img/post_images/raid4.png create mode 100644 public/img/post_images/record1.png create mode 100644 public/img/post_images/record2.png create mode 100644 public/img/post_images/record3.png create mode 100644 public/img/post_images/sparks_fly.jpg create mode 100644 public/img/post_images/tmobile.jpg create mode 100644 public/img/post_images/visualformbuilder1.png create mode 100644 public/img/post_images/visualformbuilder2.png create mode 100644 public/img/post_images/windows-10-first-impressions-1.png create mode 100644 public/img/post_images/windows-10-first-impressions-2.png create mode 100644 public/img/post_images/windows-10-first-impressions-3.png create mode 100644 public/img/post_images/windows-10-first-impressions-4.png create mode 100644 public/img/post_images/windows-10-first-impressions-5.png create mode 100644 public/img/post_images/windows-10-first-impressions-6.png create mode 100644 public/img/post_images/wordpress-logo.png create mode 100644 public/img/texture.png create mode 100644 public/index.html create mode 100644 public/index.xml create mode 100644 public/js/highlight.pack.js create mode 100644 public/page/1/index.html create mode 100644 public/page/2/index.html create mode 100644 public/page/3/index.html create mode 100644 public/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy/index.html create mode 100644 public/post/2014-07-02-removing-category-from-your-wordpress-url/index.html create mode 100644 public/post/2014-07-16-understanding-raid/index.html create mode 100644 public/post/2014-07-18-change-crop-orientation-adobe-lightroom/index.html create mode 100644 public/post/2014-07-26-how-to-record-your-screen-on-a-mac/index.html create mode 100644 public/post/2014-07-29-my-experience-with-joomla/index.html create mode 100644 public/post/2014-07-30-how-to-use-the-photoshop-liquify-tool/index.html create mode 100644 public/post/2014-08-03-my-experience-with-a-mac/index.html create mode 100644 public/post/2014-09-09-the-most-important-camera-accessory/index.html create mode 100644 public/post/2014-10-03-visual-form-builder-paypal-redirect/index.html create mode 100644 public/post/2014-10-06-tmobile-im-breaking-up-with-you/index.html create mode 100644 public/post/2014-10-29-adobe-lightroom-tutorial-for-beginners/index.html create mode 100644 public/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad/index.html create mode 100644 public/post/2014-12-05-heres-to-actually-sticking-with-something/index.html create mode 100644 public/post/2014-12-06-my-love-hate-relationship-with-wordpress/index.html create mode 100644 public/post/2014-12-08-investment-calculator-java/index.html create mode 100644 public/post/2014-12-15-pseudo-responsive-images/index.html create mode 100644 public/post/2014-12-20-take-that-mr-barney/index.html create mode 100644 public/post/2015-01-02-5-things-to-stop-doing-in-2015/index.html create mode 100644 public/post/2015-01-19-static-site-contact-form/index.html create mode 100644 public/post/2015-01-24-remove-ds_store-from-zip-file/index.html create mode 100644 public/post/2015-02-14-i-love-to-grunt-and-gulp/index.html create mode 100644 public/post/2015-02-20-command-line-essentials/index.html create mode 100644 public/post/2015-06-03-powershell-extend-script/index.html create mode 100644 public/post/2015-07-25-hindsight/index.html create mode 100644 public/post/2015-07-31-windows-10-first-impressions/index.html create mode 100644 public/post/2015-09-15-moral-sensitivity/index.html create mode 100644 public/post/2015-11-09-mathesondigital-wordpress-theme/index.html create mode 100644 public/post/index.html create mode 100644 public/post/index.xml create mode 100644 public/sitemap.xml delete mode 100644 static/css/bootstrap.min.css delete mode 100644 static/css/github.css delete mode 100644 static/css/main.css create mode 100644 static/css/style.css delete mode 100644 static/images/apple-touch-icon.png delete mode 100644 static/images/bg.jpg delete mode 100644 static/images/favicon.ico create mode 100644 static/img/apple-touch-icon.jpg create mode 100644 static/img/avatar.jpg create mode 100755 static/img/cross.png create mode 100644 static/img/favicon.ico create mode 100644 static/img/plane.jpg create mode 100644 static/img/post_images/antivirus_1.png create mode 100644 static/img/post_images/antivirus_2.jpg create mode 100644 static/img/post_images/antivirus_3.jpg create mode 100644 static/img/post_images/antivirus_4.jpg create mode 100644 static/img/post_images/exif1.png create mode 100644 static/img/post_images/exif2.png create mode 100644 static/img/post_images/exif3.png create mode 100644 static/img/post_images/exif4.png create mode 100644 static/img/post_images/exif5.png create mode 100644 static/img/post_images/exif6.png create mode 100644 static/img/post_images/exif7.png create mode 100644 static/img/post_images/guicalculator.png create mode 100644 static/img/post_images/joomla.png create mode 100644 static/img/post_images/mathesondigital-wordpress.png create mode 100644 static/img/post_images/permalinks_wordpress.png create mode 100644 static/img/post_images/pingdom-speed-results.jpg create mode 100644 static/img/post_images/raid1.png create mode 100644 static/img/post_images/raid2.png create mode 100644 static/img/post_images/raid3.png create mode 100644 static/img/post_images/raid4.png create mode 100644 static/img/post_images/record1.png create mode 100644 static/img/post_images/record2.png create mode 100644 static/img/post_images/record3.png create mode 100644 static/img/post_images/sparks_fly.jpg create mode 100644 static/img/post_images/tmobile.jpg create mode 100644 static/img/post_images/visualformbuilder1.png create mode 100644 static/img/post_images/visualformbuilder2.png create mode 100644 static/img/post_images/windows-10-first-impressions-1.png create mode 100644 static/img/post_images/windows-10-first-impressions-2.png create mode 100644 static/img/post_images/windows-10-first-impressions-3.png create mode 100644 static/img/post_images/windows-10-first-impressions-4.png create mode 100644 static/img/post_images/windows-10-first-impressions-5.png create mode 100644 static/img/post_images/windows-10-first-impressions-6.png create mode 100644 static/img/post_images/wordpress-logo.png create mode 100644 static/img/texture.png diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1377554..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.swp diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index daabe67..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Keichi Takahashi - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 0aa13c7..c4e9910 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,14 @@ -# Vienna +# Allegiant ## Overview -Vienna is a simple and clean blog theme for [Hugo](http://gohugo.io/). -Notable features are: - -- Simple and clean design +Allegiant is a simple and clean blog theme for [Hugo](http://gohugo.io/). Some of the more notable features are: +- Super simple/clean design - Client side source code highlighting -- Social links (Twitter, Facebook, GitHub, LinkedIn, Instagram, Keybase) +- Social links (Twitter, Facebook, GitHub, LinkedIn, Instagram, etc.) - Support for tags -- Analytics with Google Analytics or Mixpanel -- Responsive design +- Analytics with Google Analytics +- Responsive - Font Awesome icons ## Installation @@ -20,11 +18,9 @@ In your hugo site directory, run: ```shell $ mkdir themes $ cd themes -$ git clone https://github.com/keichi/vienna +$ git clone https://github.com/brycematheson/allegiant ``` -Vienna is also included in the `spf13/hugoThemes` repository. - ## Configuration You may specify following options in `config.toml` of your site to make use of @@ -33,42 +29,28 @@ this theme's features. ```toml baseurl = "Your site URL" languageCode = "en-us" -title = "Your site title" -# Copyright notice. This is displayer in the footer. -copyright = "© Copyright notice" +title = "Allegiant" +copyright = "© Allegiant." # Copyright notice. This will be displayed in the footer [params] - # Social accounts. Link to these accounts are displayed in the header and - # footer. + # Social accounts. Links to these accounts are displayed in the header and footer. twitter = "Your Twitter username" github = "Your GitHub username" linkedin = "Your LinkedIn username" googleplus = "Your Google+ user id" facebook = "Your Facebook username" - stackoverflow = "Your Stackoverflow user id (number)" - keybase = "Your keybase.io username" - instagram = "Your Instagram username" + # stackoverflow = "Your Stackoverflow user id (number)" + # keybase = "Your keybase.io username" + # instagram = "Your Instagram username" # Disqus shortname disqus = "Your disqus shortname" # Google Analytics API key. - ga_api_key = "Your Google Analytics tracking id" - # Mixpanel API key. - mixpanel_api_key = "Your Mixpanel API key" - author = "Your Name" + #ga_api_key = "Your Google Analytics tracking id" + author = "Bryce Matheson" avatar = "/path/to/avatar" contact = "Your contact link (ex. mailto:foo@example.com)" bio = "Your short bio" # Short subtitle/tagline. This is displayed in the header. subtitle = "Short subtitle/tagline of your blog" - themecolor = "#hexcolor" # Defines the tab color in Chrome for Android. -``` - -## Usage - -Use hugo's `-t vienna` or `--theme=vienna` option with hugo commands. -Example: - -```shell -$ hugo server -t vienna -w -D ``` diff --git a/archetypes/default.md b/archetypes/default.md index f69ac4f..abe5a7a 100644 --- a/archetypes/default.md +++ b/archetypes/default.md @@ -1,4 +1,5 @@ +++ Description = "" Tags = [] +FeaturedImage = "" +++ diff --git a/bootstrap_custom_config.json b/bootstrap_custom_config.json deleted file mode 100644 index 77212d6..0000000 --- a/bootstrap_custom_config.json +++ /dev/null @@ -1,409 +0,0 @@ -{ - "vars": { - "@gray-base": "#000", - "@gray-darker": "lighten(@gray-base, 13.5%)", - "@gray-dark": "lighten(@gray-base, 20%)", - "@gray": "lighten(@gray-base, 33.5%)", - "@gray-light": "lighten(@gray-base, 46.7%)", - "@gray-lighter": "lighten(@gray-base, 93.5%)", - "@brand-primary": "darken(#428bca, 6.5%)", - "@brand-success": "#5cb85c", - "@brand-info": "#5bc0de", - "@brand-warning": "#f0ad4e", - "@brand-danger": "#d9534f", - "@body-bg": "#fff", - "@text-color": "@gray-dark", - "@link-color": "@brand-primary", - "@link-hover-color": "darken(@link-color, 15%)", - "@link-hover-decoration": "underline", - "@font-family-sans-serif": "\"Source Sans Pro\", \"Hiragino Kaku Gothic ProN\", Meiryo, sans-serif", - "@font-family-serif": "Georgia, \"Times New Roman\", Times, serif", - "@font-family-monospace": "Menlo, Monaco, Consolas, \"Courier New\", monospace", - "@font-family-base": "@font-family-sans-serif", - "@font-size-base": "17px", - "@font-size-large": "ceil((@font-size-base * 1.25))", - "@font-size-small": "ceil((@font-size-base * 0.85))", - "@font-size-h1": "floor((@font-size-base * 2.6))", - "@font-size-h2": "floor((@font-size-base * 2.15))", - "@font-size-h3": "ceil((@font-size-base * 1.7))", - "@font-size-h4": "ceil((@font-size-base * 1.25))", - "@font-size-h5": "@font-size-base", - "@font-size-h6": "ceil((@font-size-base * 0.85))", - "@line-height-base": "1.5882352941", - "@line-height-computed": "floor((@font-size-base * @line-height-base))", - "@headings-font-family": "inherit", - "@headings-font-weight": "300", - "@headings-line-height": "1.1", - "@headings-color": "inherit", - "@icon-font-path": "\"../fonts/\"", - "@icon-font-name": "\"glyphicons-halflings-regular\"", - "@icon-font-svg-id": "\"glyphicons_halflingsregular\"", - "@padding-base-vertical": "6px", - "@padding-base-horizontal": "12px", - "@padding-large-vertical": "10px", - "@padding-large-horizontal": "16px", - "@padding-small-vertical": "5px", - "@padding-small-horizontal": "10px", - "@padding-xs-vertical": "1px", - "@padding-xs-horizontal": "5px", - "@line-height-large": "1.3333333", - "@line-height-small": "1.5", - "@border-radius-base": "4px", - "@border-radius-large": "6px", - "@border-radius-small": "3px", - "@component-active-color": "#fff", - "@component-active-bg": "@brand-primary", - "@caret-width-base": "4px", - "@caret-width-large": "5px", - "@table-cell-padding": "8px", - "@table-condensed-cell-padding": "5px", - "@table-bg": "transparent", - "@table-bg-accent": "#f9f9f9", - "@table-bg-hover": "#f5f5f5", - "@table-bg-active": "@table-bg-hover", - "@table-border-color": "#ddd", - "@btn-font-weight": "normal", - "@btn-default-color": "#333", - "@btn-default-bg": "#fff", - "@btn-default-border": "#ccc", - "@btn-primary-color": "#fff", - "@btn-primary-bg": "@brand-primary", - "@btn-primary-border": "darken(@btn-primary-bg, 5%)", - "@btn-success-color": "#fff", - "@btn-success-bg": "@brand-success", - "@btn-success-border": "darken(@btn-success-bg, 5%)", - "@btn-info-color": "#fff", - "@btn-info-bg": "@brand-info", - "@btn-info-border": "darken(@btn-info-bg, 5%)", - "@btn-warning-color": "#fff", - "@btn-warning-bg": "@brand-warning", - "@btn-warning-border": "darken(@btn-warning-bg, 5%)", - "@btn-danger-color": "#fff", - "@btn-danger-bg": "@brand-danger", - "@btn-danger-border": "darken(@btn-danger-bg, 5%)", - "@btn-link-disabled-color": "@gray-light", - "@input-bg": "#fff", - "@input-bg-disabled": "@gray-lighter", - "@input-color": "@gray", - "@input-border": "#ccc", - "@input-border-radius": "@border-radius-base", - "@input-border-radius-large": "@border-radius-large", - "@input-border-radius-small": "@border-radius-small", - "@input-border-focus": "#66afe9", - "@input-color-placeholder": "#999", - "@input-height-base": "(@line-height-computed + (@padding-base-vertical * 2) + 2)", - "@input-height-large": "(ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2)", - "@input-height-small": "(floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2)", - "@legend-color": "@gray-dark", - "@legend-border-color": "#e5e5e5", - "@input-group-addon-bg": "@gray-lighter", - "@input-group-addon-border-color": "@input-border", - "@cursor-disabled": "not-allowed", - "@dropdown-bg": "#fff", - "@dropdown-border": "rgba(0,0,0,.15)", - "@dropdown-fallback-border": "#ccc", - "@dropdown-divider-bg": "#e5e5e5", - "@dropdown-link-color": "@gray-dark", - "@dropdown-link-hover-color": "darken(@gray-dark, 5%)", - "@dropdown-link-hover-bg": "#f5f5f5", - "@dropdown-link-active-color": "@component-active-color", - "@dropdown-link-active-bg": "@component-active-bg", - "@dropdown-link-disabled-color": "@gray-light", - "@dropdown-header-color": "@gray-light", - "@dropdown-caret-color": "#000", - "@screen-xs": "480px", - "@screen-xs-min": "@screen-xs", - "@screen-phone": "@screen-xs-min", - "@screen-sm": "768px", - "@screen-sm-min": "@screen-sm", - "@screen-tablet": "@screen-sm-min", - "@screen-md": "992px", - "@screen-md-min": "@screen-md", - "@screen-desktop": "@screen-md-min", - "@screen-lg": "1200px", - "@screen-lg-min": "@screen-lg", - "@screen-lg-desktop": "@screen-lg-min", - "@screen-xs-max": "(@screen-sm-min - 1)", - "@screen-sm-max": "(@screen-md-min - 1)", - "@screen-md-max": "(@screen-lg-min - 1)", - "@grid-columns": "12", - "@grid-gutter-width": "30px", - "@grid-float-breakpoint": "@screen-sm-min", - "@grid-float-breakpoint-max": "(@grid-float-breakpoint - 1)", - "@container-tablet": "(720px + @grid-gutter-width)", - "@container-sm": "@container-tablet", - "@container-desktop": "(940px + @grid-gutter-width)", - "@container-md": "@container-desktop", - "@container-large-desktop": "(1140px + @grid-gutter-width)", - "@container-lg": "@container-large-desktop", - "@navbar-height": "50px", - "@navbar-margin-bottom": "@line-height-computed", - "@navbar-border-radius": "@border-radius-base", - "@navbar-padding-horizontal": "floor((@grid-gutter-width / 2))", - "@navbar-padding-vertical": "((@navbar-height - @line-height-computed) / 2)", - "@navbar-collapse-max-height": "340px", - "@navbar-default-color": "#777", - "@navbar-default-bg": "#f8f8f8", - "@navbar-default-border": "darken(@navbar-default-bg, 6.5%)", - "@navbar-default-link-color": "#777", - "@navbar-default-link-hover-color": "#333", - "@navbar-default-link-hover-bg": "transparent", - "@navbar-default-link-active-color": "#555", - "@navbar-default-link-active-bg": "darken(@navbar-default-bg, 6.5%)", - "@navbar-default-link-disabled-color": "#ccc", - "@navbar-default-link-disabled-bg": "transparent", - "@navbar-default-brand-color": "@navbar-default-link-color", - "@navbar-default-brand-hover-color": "darken(@navbar-default-brand-color, 10%)", - "@navbar-default-brand-hover-bg": "transparent", - "@navbar-default-toggle-hover-bg": "#ddd", - "@navbar-default-toggle-icon-bar-bg": "#888", - "@navbar-default-toggle-border-color": "#ddd", - "@navbar-inverse-color": "lighten(@gray-light, 15%)", - "@navbar-inverse-bg": "#222", - "@navbar-inverse-border": "darken(@navbar-inverse-bg, 10%)", - "@navbar-inverse-link-color": "lighten(@gray-light, 15%)", - "@navbar-inverse-link-hover-color": "#fff", - "@navbar-inverse-link-hover-bg": "transparent", - "@navbar-inverse-link-active-color": "@navbar-inverse-link-hover-color", - "@navbar-inverse-link-active-bg": "darken(@navbar-inverse-bg, 10%)", - "@navbar-inverse-link-disabled-color": "#444", - "@navbar-inverse-link-disabled-bg": "transparent", - "@navbar-inverse-brand-color": "@navbar-inverse-link-color", - "@navbar-inverse-brand-hover-color": "#fff", - "@navbar-inverse-brand-hover-bg": "transparent", - "@navbar-inverse-toggle-hover-bg": "#333", - "@navbar-inverse-toggle-icon-bar-bg": "#fff", - "@navbar-inverse-toggle-border-color": "#333", - "@nav-link-padding": "10px 15px", - "@nav-link-hover-bg": "@gray-lighter", - "@nav-disabled-link-color": "@gray-light", - "@nav-disabled-link-hover-color": "@gray-light", - "@nav-tabs-border-color": "#ddd", - "@nav-tabs-link-hover-border-color": "@gray-lighter", - "@nav-tabs-active-link-hover-bg": "@body-bg", - "@nav-tabs-active-link-hover-color": "@gray", - "@nav-tabs-active-link-hover-border-color": "#ddd", - "@nav-tabs-justified-link-border-color": "#ddd", - "@nav-tabs-justified-active-link-border-color": "@body-bg", - "@nav-pills-border-radius": "@border-radius-base", - "@nav-pills-active-link-hover-bg": "@component-active-bg", - "@nav-pills-active-link-hover-color": "@component-active-color", - "@pagination-color": "@link-color", - "@pagination-bg": "#fff", - "@pagination-border": "#ddd", - "@pagination-hover-color": "@link-hover-color", - "@pagination-hover-bg": "@gray-lighter", - "@pagination-hover-border": "#ddd", - "@pagination-active-color": "#fff", - "@pagination-active-bg": "@brand-primary", - "@pagination-active-border": "@brand-primary", - "@pagination-disabled-color": "@gray-light", - "@pagination-disabled-bg": "#fff", - "@pagination-disabled-border": "#ddd", - "@pager-bg": "@pagination-bg", - "@pager-border": "@pagination-border", - "@pager-border-radius": "15px", - "@pager-hover-bg": "@pagination-hover-bg", - "@pager-active-bg": "@pagination-active-bg", - "@pager-active-color": "@pagination-active-color", - "@pager-disabled-color": "@pagination-disabled-color", - "@jumbotron-padding": "30px", - "@jumbotron-color": "inherit", - "@jumbotron-bg": "@gray-lighter", - "@jumbotron-heading-color": "inherit", - "@jumbotron-font-size": "ceil((@font-size-base * 1.5))", - "@state-success-text": "#3c763d", - "@state-success-bg": "#dff0d8", - "@state-success-border": "darken(spin(@state-success-bg, -10), 5%)", - "@state-info-text": "#31708f", - "@state-info-bg": "#d9edf7", - "@state-info-border": "darken(spin(@state-info-bg, -10), 7%)", - "@state-warning-text": "#8a6d3b", - "@state-warning-bg": "#fcf8e3", - "@state-warning-border": "darken(spin(@state-warning-bg, -10), 5%)", - "@state-danger-text": "#a94442", - "@state-danger-bg": "#f2dede", - "@state-danger-border": "darken(spin(@state-danger-bg, -10), 5%)", - "@tooltip-max-width": "200px", - "@tooltip-color": "#fff", - "@tooltip-bg": "#000", - "@tooltip-opacity": ".9", - "@tooltip-arrow-width": "5px", - "@tooltip-arrow-color": "@tooltip-bg", - "@popover-bg": "#fff", - "@popover-max-width": "276px", - "@popover-border-color": "rgba(0,0,0,.2)", - "@popover-fallback-border-color": "#ccc", - "@popover-title-bg": "darken(@popover-bg, 3%)", - "@popover-arrow-width": "10px", - "@popover-arrow-color": "@popover-bg", - "@popover-arrow-outer-width": "(@popover-arrow-width + 1)", - "@popover-arrow-outer-color": "fadein(@popover-border-color, 5%)", - "@popover-arrow-outer-fallback-color": "darken(@popover-fallback-border-color, 20%)", - "@label-default-bg": "@gray-light", - "@label-primary-bg": "@brand-primary", - "@label-success-bg": "@brand-success", - "@label-info-bg": "@brand-info", - "@label-warning-bg": "@brand-warning", - "@label-danger-bg": "@brand-danger", - "@label-color": "#fff", - "@label-link-hover-color": "#fff", - "@modal-inner-padding": "15px", - "@modal-title-padding": "15px", - "@modal-title-line-height": "@line-height-base", - "@modal-content-bg": "#fff", - "@modal-content-border-color": "rgba(0,0,0,.2)", - "@modal-content-fallback-border-color": "#999", - "@modal-backdrop-bg": "#000", - "@modal-backdrop-opacity": ".5", - "@modal-header-border-color": "#e5e5e5", - "@modal-footer-border-color": "@modal-header-border-color", - "@modal-lg": "900px", - "@modal-md": "600px", - "@modal-sm": "300px", - "@alert-padding": "15px", - "@alert-border-radius": "@border-radius-base", - "@alert-link-font-weight": "bold", - "@alert-success-bg": "@state-success-bg", - "@alert-success-text": "@state-success-text", - "@alert-success-border": "@state-success-border", - "@alert-info-bg": "@state-info-bg", - "@alert-info-text": "@state-info-text", - "@alert-info-border": "@state-info-border", - "@alert-warning-bg": "@state-warning-bg", - "@alert-warning-text": "@state-warning-text", - "@alert-warning-border": "@state-warning-border", - "@alert-danger-bg": "@state-danger-bg", - "@alert-danger-text": "@state-danger-text", - "@alert-danger-border": "@state-danger-border", - "@progress-bg": "#f5f5f5", - "@progress-bar-color": "#fff", - "@progress-border-radius": "@border-radius-base", - "@progress-bar-bg": "@brand-primary", - "@progress-bar-success-bg": "@brand-success", - "@progress-bar-warning-bg": "@brand-warning", - "@progress-bar-danger-bg": "@brand-danger", - "@progress-bar-info-bg": "@brand-info", - "@list-group-bg": "#fff", - "@list-group-border": "#ddd", - "@list-group-border-radius": "@border-radius-base", - "@list-group-hover-bg": "#f5f5f5", - "@list-group-active-color": "@component-active-color", - "@list-group-active-bg": "@component-active-bg", - "@list-group-active-border": "@list-group-active-bg", - "@list-group-active-text-color": "lighten(@list-group-active-bg, 40%)", - "@list-group-disabled-color": "@gray-light", - "@list-group-disabled-bg": "@gray-lighter", - "@list-group-disabled-text-color": "@list-group-disabled-color", - "@list-group-link-color": "#555", - "@list-group-link-hover-color": "@list-group-link-color", - "@list-group-link-heading-color": "#333", - "@panel-bg": "#fff", - "@panel-body-padding": "15px", - "@panel-heading-padding": "10px 15px", - "@panel-footer-padding": "@panel-heading-padding", - "@panel-border-radius": "@border-radius-base", - "@panel-inner-border": "#ddd", - "@panel-footer-bg": "#f5f5f5", - "@panel-default-text": "@gray-dark", - "@panel-default-border": "#ddd", - "@panel-default-heading-bg": "#f5f5f5", - "@panel-primary-text": "#fff", - "@panel-primary-border": "@brand-primary", - "@panel-primary-heading-bg": "@brand-primary", - "@panel-success-text": "@state-success-text", - "@panel-success-border": "@state-success-border", - "@panel-success-heading-bg": "@state-success-bg", - "@panel-info-text": "@state-info-text", - "@panel-info-border": "@state-info-border", - "@panel-info-heading-bg": "@state-info-bg", - "@panel-warning-text": "@state-warning-text", - "@panel-warning-border": "@state-warning-border", - "@panel-warning-heading-bg": "@state-warning-bg", - "@panel-danger-text": "@state-danger-text", - "@panel-danger-border": "@state-danger-border", - "@panel-danger-heading-bg": "@state-danger-bg", - "@thumbnail-padding": "4px", - "@thumbnail-bg": "@body-bg", - "@thumbnail-border": "#ddd", - "@thumbnail-border-radius": "@border-radius-base", - "@thumbnail-caption-color": "@text-color", - "@thumbnail-caption-padding": "9px", - "@well-bg": "#f5f5f5", - "@well-border": "darken(@well-bg, 7%)", - "@badge-color": "#fff", - "@badge-link-hover-color": "#fff", - "@badge-bg": "@gray-light", - "@badge-active-color": "@link-color", - "@badge-active-bg": "#fff", - "@badge-font-weight": "bold", - "@badge-line-height": "1", - "@badge-border-radius": "10px", - "@breadcrumb-padding-vertical": "8px", - "@breadcrumb-padding-horizontal": "15px", - "@breadcrumb-bg": "#f5f5f5", - "@breadcrumb-color": "#ccc", - "@breadcrumb-active-color": "@gray-light", - "@breadcrumb-separator": "\"/\"", - "@carousel-text-shadow": "0 1px 2px rgba(0,0,0,.6)", - "@carousel-control-color": "#fff", - "@carousel-control-width": "15%", - "@carousel-control-opacity": ".5", - "@carousel-control-font-size": "20px", - "@carousel-indicator-active-bg": "#fff", - "@carousel-indicator-border-color": "#fff", - "@carousel-caption-color": "#fff", - "@close-font-weight": "bold", - "@close-color": "#000", - "@close-text-shadow": "0 1px 0 #fff", - "@code-color": "#c7254e", - "@code-bg": "#f9f2f4", - "@kbd-color": "#fff", - "@kbd-bg": "#333", - "@pre-bg": "#f5f5f5", - "@pre-color": "@gray-dark", - "@pre-border-color": "#ccc", - "@pre-scrollable-max-height": "340px", - "@component-offset-horizontal": "180px", - "@text-muted": "@gray-light", - "@abbr-border-color": "@gray-light", - "@headings-small-color": "@gray-light", - "@blockquote-small-color": "@gray-light", - "@blockquote-font-size": "(@font-size-base * 1.25)", - "@blockquote-border-color": "@gray-lighter", - "@page-header-border-color": "@gray-lighter", - "@dl-horizontal-offset": "@component-offset-horizontal", - "@hr-border": "@gray-lighter" - }, - "css": [ - "print.less", - "type.less", - "code.less", - "grid.less", - "tables.less", - "forms.less", - "buttons.less", - "responsive-utilities.less", - "button-groups.less", - "input-groups.less", - "navs.less", - "navbar.less", - "breadcrumbs.less", - "pagination.less", - "pager.less", - "labels.less", - "badges.less", - "jumbotron.less", - "thumbnails.less", - "alerts.less", - "progress-bars.less", - "media.less", - "list-group.less", - "panels.less", - "responsive-embed.less", - "wells.less", - "close.less" - ], - "js": [], - "customizerUrl": "http://getbootstrap.com/customize/?id=e16c91898db07ac9c492" -} \ No newline at end of file diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..3059707 --- /dev/null +++ b/config.toml @@ -0,0 +1,10 @@ +baseurl = "http://brycematheson.github.io/brycematheson.io/" +languageCode = "en-us" +title = "Allegiant" +copyright = "© Allegiant. All Rights Reserved." # Copyright notice. This will be displayed in the footer. +canonifyurls = true + +[params] + ga_api_key = "Your Google Analytics tracking id" # Google Analytics API key. + avatar = "../../img/avatar.jpg" + bio = "Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning." \ No newline at end of file diff --git a/content/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy.md b/content/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy.md new file mode 100644 index 0000000..05bbf27 --- /dev/null +++ b/content/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy.md @@ -0,0 +1,46 @@ ++++ +title = "I don't use Anti-Virus software. Am I crazy?" +date = "2014-07-01T18:50:20-07:00" ++++ +I've been the go-to tech guy for family and friends for as long as I can remember. I can't tell you how many times I've had someone come up to me asking, “My computer is SO slow. Can you fix it?” 99% percent of the time, this involves removing malware or virus infections. You're all very familiar with these: browser hijacking, tons of popups, and a computer running as slow as molasses. + +What's funny about all of this is that more often than not, all of these systems are running anti-virus software, or at least some form of protection. McAfee, Symantec, or something similar. After swearing under my breath about all of the pebcak errors, I often get the question, “Well, then, what do *you* use? + +*Nothing*. + +That's right. Nothing. After staring at me for a moment in disbelief, they ask again, “Really? Nothing? And you've never had any problems?” This has been my set of security tools for years, and I've never once had a root kit, popups, virus, or browser hijacking on any kind. + +Now, I am in no way saying that I'm against the use of third-party security programs. Nor am I saying that I don't approve of taking security measures to protect your personal data and equipment. In fact, I almost always recommend AVG Free to users looking for a good, free solution. But why, then, do I not listen to my own advice? I absolutely refuse to pay for something that cripples my system's performance (although, I will admit that both of these aspects have improved dramatically over the years). + +## My Secret + +From fixing (probably thousands of different) computers, and watching how people use their machines, there seems to be a common theme to all of them. People are allowing this to happen to themselves, albeit unknowingly. As I watch over people's shoulders at where they surf, I often cringe at what they click on (or don't click on). And this isn't necessarily their fault. They just haven't been trained yet as to what is or isn't safe to click on. + +The two main culprits are unsafe links, or spyware-included downloads. These can come from a phishing e-mail, or be installed alongside a piece of software that you were actually intending to install of your computer. + +I get it, though. When you visit a page that looks like this one, how are you supposed to know which “download” button is actually the correct one? + +AntiVirus + +The best bit of advice I can give to you is “look before you click.” When hovering over a button, you can look in the bottom corner of your web browser, and most (darn you, safari!) will give you a preview of where that URL will take you before you actually click on it. If that url is going to take you somewhere other than you intended, it's very obviously not the correct link. + +Another piece of advice is that most download links are not giant flashy wiggling buttons that say, “Download.” Usually, they are just a simple blue hyperlink. This isn't always the case, but something good to keep in mind. + +And for heaven's sake, please please PLEASE stop downloading movies and music from random websites. Not only is it illegal, but it's a surefire way to get viruses and malware. Music and movies are not inherently evil, but only if they are purchased and downloaded through a trusted third-party application (iTunes, Google, etc.) + +Another piece of advice: When installing an application, be sure to actually READ what you're agreeing to. Just clicking “next, next, next” is doing a lot more hurt than good. Below are a few screenshots of the uTorrent installation. If I hadn't unchecked, or declined all three of those ‘offers', I would have just crippled my machine in a matter of seconds. + + +AntiVirus + +AntiVirus + +AntiVirus + +## So what should you do? + +I'm not recommending that everyone ditch all of the security principles that they've learned over the course of their life. I'm simply saying what I do, and what I've found in order to keep my machine clean. Starting in Windows 7, Microsoft offered many more security features than ever before with Windows Defender, improved Firewall, and since Vista, tools such as the User Account Control. All of these pieces are great additions, and for many people, these may be sufficient. + +One last piece of advice: I absolutely swear by Malware Bytes. I do Tech Support at work, and I use this application multiple times a day without a hitch. It's great at finding and removing malware infections. Use it. + +So now, what do all my readers think? Am I a nit-wit for recommending this? What have you found in your personal experience? \ No newline at end of file diff --git a/content/post/2014-07-02-removing-category-from-your-wordpress-url.md b/content/post/2014-07-02-removing-category-from-your-wordpress-url.md new file mode 100644 index 0000000..13cd75d --- /dev/null +++ b/content/post/2014-07-02-removing-category-from-your-wordpress-url.md @@ -0,0 +1,21 @@ ++++ +title = "Removing 'category' from your WordPress URL" +date = "2014-07-02T18:50:20-07:00" ++++ +There's no doubt about it. WordPress is popular, easy to use, and here to stay. It's estimated that more than 20% of the internet is currently running on the CMS. With drag-and-drop features, thousands of themes, and super-simple customization, it's easy to see why. That doesn't mean WordPress doesn't come without any quirks, though. + +One of those many quirks (annoyances, really) are the ‘categories' feature. While it's a piece of cake to categorize posts into various sections, there's always been one thing that has bugged me. In your browser, underneath a specific category, the URL will always look something like this: "http://www.mysite.com/category/agriculture". Have you ever wanted to get rid of the “category” piece so that your url simply looks like this: "http://www.mysite.com/agriculture"? + +It's actually quite simple to do. If you're a fan of plugins, you can use the FV Top Level Categories plugin. There's no configuration, no settings. Just activate the plugin, and you're ready to go. Now, with that being said, I'm not against plugins by any means, but if I can find another way around, I'll usually take that route. + +### Option 2 + +You can simple change the settings under your permalinks in WordPress. In WordPress, on the left side menu, go to \*\*Settings –> Permalinks\*\*. + +Under “Custom Structure,” enter “`/%category%/%postname%/`”. Also, enter a “`.`” under “Category base” as shown below in the photo. + +RAID + +Select “Save Changes”, and you should be good to go. From my experience, this hasn't broken any links, and everything works as it should. While this works for now, there's no telling if any future updates or upgrades to WordPress can or will break this. + +Happy tweaking! \ No newline at end of file diff --git a/content/post/2014-07-16-understanding-raid.md b/content/post/2014-07-16-understanding-raid.md new file mode 100644 index 0000000..6c06336 --- /dev/null +++ b/content/post/2014-07-16-understanding-raid.md @@ -0,0 +1,165 @@ ++++ +title = "Understanding RAID" +date = "2014-07-16T18:50:20-07:00" ++++ +Although this is changing with the advent of solid-state drives, most hard drives are mechanical, which means they are often the first part of a standard computer system to fail. Data is everything these days, and its up to you to protect it. But in the case of a drive failing, you have no excuse for not having a backup with the ease of RAID. + +Instead of waiting for a hard drive to fail, an easier approach can be taken. Through using a technology known as RAID (Redundant Array of Independent Drives), a system of hard drives based on redundancy can be achieved which uses multiple hard drives for increased reliability and performance. You can implement RAID through either software or hardware, however in this article, I’m only going to focus on hardware-based RAID. Software-based RAID is implemented at the operating system level and/or with third-party software, while hardware-based RAID requires a special controller card that is either on the motherboard, as an added-in daughter card, or on the array that holds the RAID drives. + +Interesting tidbit: RAID used to stand for “Redundant Array of Inexpensive Disks.” + +Originally there were five standard RAID configurations (called levels), but several additional levels have since been developed. These additional levels include “nested” levels and nonstandard levels that are proprietary to specific vendors. Nested RAIDs are usually described by combining the numbers indicating the RAID levels with a “+” between the numbers, such as ‘RAID Level 0+1′. While there are other levels of RAID, such as 2, 3, 4, and 6, I will only be discussing the most common in this article. + +The most common levels of RAID are as follows: + +RAID Level 0 (striped disk array without fault tolerance): RAID 0 technology is based on striping. “Striping” takes the data written to the hard drive and partitions the storage space of each hard drive into smaller sections (stripes), which can be as small as 512 bytes or as large as several megabytes. Data written to the stripes is alternated across each of the drives, as shown in the diagram. + +RAID + +Although RAID Level 0 uses multiple drives, it is not fault tolerant, which means that if one of the drive fails, all of the data on that drive is lost. + +RAID Level 1 (mirroring): RAID Level 1 uses disk mirroring. Disk mirroring involves connecting multiple drives in the computer (or server) to the same disk controller card. When data has been requested to write data to the drive, the controller sends that same request to each drive. The same happens for a read request: the data is read twice, once from each drive. By “mirroring” the read/write actions on the primary drive, all the other drives become identical duplicates. If the primary hard drive fails, the other drives take over immediately, without losing any data. This is shown in the diagram below. + +RAID + +RAID 5 (independent disks with distributed parity): RAID Level 5 distributes parity data (a type of error checking) across all drives, instead of using a separate hard drive to hold the parity error-checking information. Data is always stored on one drive, while its parity information is stored on another drive, as you can see from the diagram below. Distributing parity across other disks simply provides a user with an additional layer of protection from data loss. + +RAID + +RAID 0 + 1 (high data transfer): RAID 0+1 is a nested-level RAID. It acts as a mirrored array whose segments are RAID 0 arrays. RAID 0+1 can achieve high data transfer rates because there are multiple strip segments. RAID 0+1 is shown below. With nested RAIDs, the elements can either be individual disks, or entire RAIDs. This is my preferred RAID configuration, as it provides redundancy for protection in case one of the drives fails, but it also increase read/write input/output. The only downside to this configuration is that you have to purchase four hard drives as a minimum. Start getting into solid-state drives, and you’re easily looking at $600. + +RAID + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Level + + Description + + Minimum # of drives needed + + Typical Usage + + Advantages + + Disadvantages +
+ RAID 0 + +  Uses a striped disk array so that data is broken down into blocks and each block is written to a separate drive. + + 2 + + Video Production/Editing + + Simple design and easy to implement + + Not fault tolerant +
+ RAID 1 + + Data is written twice to separate drives. + + 2 + + Financial + + Easiest RAID to implement + + Can slow down system if RAID controlling software is used instead of hardware +
+ RAID 5 + +  Each entire data block is written on a data disk and parity for blocks in the same rank is generated and recorded on a separate disk. + + 3 + +  Databases + + Most versatile RAID + + Can be difficult to rebuild in the event that a disk fails +
+ RAID 0+1 + + A mirrored array whose segments are RAID 0 arrays + + 4 + + Imaging Applications + + High input/output rates + + Expensive +
+ +  \ No newline at end of file diff --git a/content/post/2014-07-18-change-crop-orientation-adobe-lightroom.md b/content/post/2014-07-18-change-crop-orientation-adobe-lightroom.md new file mode 100644 index 0000000..a10b318 --- /dev/null +++ b/content/post/2014-07-18-change-crop-orientation-adobe-lightroom.md @@ -0,0 +1,9 @@ ++++ +title = "Change Crop Orientation in Adobe Lightroom" +date = "2014-07-18T18:50:20-07:00" ++++ +Here’s a quick tip that, sadly, I just now discovered in Adobe Lightroom. I’d say I’m quite familiar with the tools and capabilities of Adobe Lightroom, however, one thing has always baffled me. While cropping an image, I could never get the crop tool to switch from landscape orientation to portrait. I like to constrain my cropping proportions so that if I ever need to print my images, I won’t have any letter boxing. The easiest way to do that is to “lock” proportions. However, if you do that, you can’t change the orientation, or so I thought. + +Prior to finding this tip, I just used “Custom” and dragged the crop box wherever I wanted. If you **simply press the letter “X” while cropping**, your orientation will swap from landscape to portrait, and vise versa. I wish Adobe would make this option a little more apparent to it’s large user base. + +And there you go! That’s all there is to it! \ No newline at end of file diff --git a/content/post/2014-07-26-how-to-record-your-screen-on-a-mac.md b/content/post/2014-07-26-how-to-record-your-screen-on-a-mac.md new file mode 100644 index 0000000..e18d1da --- /dev/null +++ b/content/post/2014-07-26-how-to-record-your-screen-on-a-mac.md @@ -0,0 +1,26 @@ ++++ +title = "How to record your screen on a Mac" +date = "2014-07-26T18:50:20-07:00" ++++ +While I'm sure there are a plethora of third-party applications that you can download to do this, why add something to your computer that would potentially slow it down when the functionality is already built-in? The ability is already built straight into the Quicktime app on your Mac. That's right! The same application that allows you to watch videos on your computer also allows you to record your screen. It's remarkably simple, and best of all — free! + +### How to use the Mac Screen Recorder + +The functionality to record your screen using Quicktime is only built-in to Mac OS 10.6-10.9 (and I'm assuming later). + +1. Start by launching Quicktime (found in Spotlight or in the /Applications folder) +2. From the top menu, select “File –> New Screen Recording” + +Mac Screen Record + +3.  To the left of the giant red “record” button, there  is a little while triangle that drops down to give you various options. From here, you can choose the default microphone that you wish to use (I use the built-in mic on the Mac, as I don't have anything better). You can also choose whether to show mouse clicks or not. + +Mac Screen Record + +4. Once you have all the options set, click the big red button to begin. To stop recording, you can either press \*\*Command + Control + Escape\*\*, or you can press the little “stop” button in the task bar at the top: + +Mac Screen Record + +5. Once you stop the recording, a “Save as…” dialog box opens automatically, and you can name your file whatever you'd like. It'll be saved in a .mov format by default so you can edit it in iMovie or wherever, but you can also export it in a different format if you choose. + +Ultimately, I think the best feature of all of this is the fact that Quicktime is completely out of the way as you're doing your recordings. The program vanishes completely so that it's unobtrusive and doesn't get in your video. The first time I recorded a video, I wasn't quite sure how to end the recording. It's a really great feature, and best of all, you don't have to download any other programs. The capability is already there! \ No newline at end of file diff --git a/content/post/2014-07-29-my-experience-with-joomla.md b/content/post/2014-07-29-my-experience-with-joomla.md new file mode 100644 index 0000000..a23f22c --- /dev/null +++ b/content/post/2014-07-29-my-experience-with-joomla.md @@ -0,0 +1,33 @@ ++++ +title = "My Experience with Joomla" +date = "2014-07-29T18:50:20-07:00" ++++ +By reading through the various posts and topics that I have on this website, it's pretty obvious to see that I'm a fan of WordPress. It makes complex tasks incredibly simple and automated for users who want to create/build a website, but don't want to have to deal with code at all. For more advanced users who do want to tweak a bit more with code, WordPress is great for that as well. However, I'm not so biased or blind as to believe that there isn't/can't be something better out there. + +I received an e-mail from someone looking for help managing a website. As I'm almost always looking for freelance work, I was up for the task. As I continued reading through the e-mail, I discovered that their website was built upon Joomla. I was almost deterred a little bit, but I figured that if I was ever going to mess around with Joomla, this might as well be it. I responded to the e-mail, and the company gave me a day or two to familiarize myself with Joomla before getting to work on their production site. + +### First Impressions + +I installed a fresh version of Joomla on my hosting server and began to tinker a bit with the backend piece. Upon first glance, I was a little intimidated, honestly, as there was a lot of unfamiliarity. I felt like a little kid who had been separated from their parents at Disney Land — eager and excited to be somewhere new and magical, but scared and intimidated by something new and foreign. So many menus, and dialog boxes to choose from. + +Okay, so I wasn't \*that\* scared, but it was strange to be working with something other than WordPress. After watching a few tutorials on YouTube, I felt somewhat more comfortable with the user interface and how things worked. It appears that Joomla is very modular, and the entire face of the website is built upon little pieces that are customized individually to create the front end. + +Joomla + +### The Good + +Out of everything that I experienced with the little time I spent with Joomla, the thing that impressed me most was the amount of customization. Every little module, or template could be customized, changed, or manipulated to your heart's content. Just when I felt I had been through all of the menus, I found three more that were embedded underneath the first. + +While this might not be a very valid point to all your readers out there, another good part about Joomla is that it's \*not WordPress\*. The last statistic I heard, roughly 20% of the internet is running on WordPress. That means that if a security hole is found in WordPress, 20% of the websites on the internet instantly become vulnerable. WordPress is good about putting out patches and updates, but even that can lead to another slew of problems with themes and plugins breaking. So you ask, “How is Joomla any different?” Well, for starters, Joomla has a much more solid foundation to build upon. When WordPress began in the early 2000's, it was nothing more than a blogging platform. Since then, it has morphed into a hideous beast with tens of thousands of poorly-written themes and plugins to extend it's capabilities. It wasn't initially developed to be used for an e-commerce platform, or for large business websites. Joomla, on the other hand, is open source and has been coded with this in mind. + +### The Bad + +The longer I played with Joomla, the more I couldn't help but feel that Joomla was trying too hard to distinguish themselves as “not WordPress,” even though it's basically the same. “Pages” are called “Articles,” “Plugins” are called “Extensions,” and “Widgets” are called “Modules.” I understand that it's hard to create something new and different, but by changing the names and moving the menus from the left side of the screen to the top, it doesn't exactly feel “different.” + +I also felt that Joomla as a whole had an unpolished feel to it, almost as if it's a dying project. Joomla is open source and has a great community following, but Joomla kind of falls into the “grey area” as far as popular CMS's go. Those who are looking for a quick and easy way to make a web presence will choose Wordpress, while those who fall into the category of “code warrior” will often overlook Joomla and head straight for Drupal. + +### My Verdict + +I'm not so naive as to think that I haven't been blinded or built an allegiance to WordPress. I absolutely have. Perhaps I haven't spent enough time with Joomla, and that's most likely the case, but as for me and my needs, I'll be sticking with WordPress, thanks. For ease of use, functionality, capability, theme and plugin support, and a huge community following, WordPress does exactly what I need. I'm familiar with that, so why switch? When I'm in need of coding capabilities, I can do that too through the editor panel. + +What else do you need? \ No newline at end of file diff --git a/content/post/2014-08-03-my-experience-with-a-mac.md b/content/post/2014-08-03-my-experience-with-a-mac.md new file mode 100644 index 0000000..3a41853 --- /dev/null +++ b/content/post/2014-08-03-my-experience-with-a-mac.md @@ -0,0 +1,43 @@ ++++ +title = "My Experience with a Mac" +date = "2014-08-03T18:50:20-07:00" ++++ +About six months ago, I finally made the switch. Not because I hadn't wanted to do it earlier, or because I suddenly became so fed up with the Windows operating system. I simply just had a little excess of money, and so I figured, “Well, this will never happen again. Might as well do it now.” + +Before I start this article, I simply want to throw out a disclaimer that I am not a hardcore “fanboy.” I work as a Computer Technician, and I service both Macintosh and Windows systems. I feel that I'm well-versed in both worlds, and am capable of giving an unbiased opinion. + +### The Purchase + +I walked into the Apple Store feeling slightly nervous as to the amount of money I was about to drop on a computer. Never before in my entire life had I spent close to $1500 on a laptop computer. Up until this point, I was using a Lenovo Touch u430, which was honestly, a really great computer. It was thin, light, had a touch screen, the latest Core i5 Processor, and sufficient amounts of RAM to tackle pretty much any of the tasks that I would use it for on a daily basis. But regardless of all that, I sold it (for about $350 less than I purchased it for only 6 months later) and dove headfirst into the world of Apple. + +I decided on the MacBook Pro Retina 13″ with a 256GB SSD and 8GB of RAM. The grand total came to $1482.32. Swiping that card was tough thinking, “Am I really doing this? Am I really going to spend that much?” As I brought it home, all of that seemed to melt away as I opened up the beautiful packaging. + +### Physical Quality + +One of the things I learned from my parents was that quality is worth a higher price tag. Buying cheap won't outlast in the long run. To me, that still holds true. Everything about this computer just feels rock solid. Having an entire aluminum chassis just seems right to me. Grabbing hold of the left and right sides of the laptop, try twisting the laptop. There isn't any flex whatsoever. Same with the keyboard. I don't consider myself a weighty typer, but even then, I've felt keyboard flex, and it's not a good feeling. The physical build quality of this computer is leaps and bounds ahead of my $700 Lenovo. + +I've never used a trackpad that is as sensitive as on a MacBook. I use probably 30 different trackpads at work on the daily. Some are nice, and some are… lacking. Many are “sticky” and don't allow your finger to easily slide across the surface. Others are jittery and don't quite give enough options to adjust the sensitivity. Others don't work well until there's a good amount of finger grease smeared across the surface to allow your finger to slide easily. With the trackpad on the MacBooks, the surface is created from glass. It's sensitive, but not so oversensitive that an accidental palm swipe or knuckle tapping it will send your cursor shooting off into space. + +And while this last reason is incredibly stupid, I love the perfect tightness of the screen hinge. Being able to open the laptop with only one hand is a treat to me every morning as I sit down to work. Rather than having one hand on the screen lid, and the other holding down the base of the laptop, I can simply use one finger. It's pathetic how giddy I get over such a small detail. I also am thrilled that the screen doesn't “wobble” back and forth upon opening the lid. The hinge is loose enough to open with one finger, but still tight enough that the screen is sturdy and doesn't have any give to it. + +### Software + +The hardware is really sets this computer apart, not the software. I was never too impressed with OS X that it warranted a ton of praise. In spending more time with Mavericks, I've had to bite my tongue a little bit in realizing that there's more than meets the eye. + +I really feel that the Terminal is much more powerful than the comparable Command Prompt in Windows. While there are those who will argue that they are either equivalent or that Windows is much more polished, that may very well be the case. Sadly, I don't have any hardcore evidence in which I can say, “Yes, well, Terminal can do X, but Command Prompt can only do Y.” The reason I treat this as a plus is because I feel I would enter the Terminal to do daily tasks that I would never do in the command prompt. I've downloaded an extension called "Total Terminal" which allows me to access the terminal system-wide from just a key stroke. Simple things as small as creating a folder are examples of something I would do through the terminal, that I would never have thought of doing through the Command Prompt. Feel free to prove me wrong. + +iMessages: Wow. I love it. A large portion of my contacts are Apple users, meaning I can connect with them easily through iMessages. Just a texting application, you say? Not true. There are added advantages, such as much faster sending/receiving, no limits from your carrier (aside from data, I suppose, but even then, text takes up a minuscule amount of data), sent/delivered/read confirmations, and the ability to use iMessages over Wifi. My office at work has been nicknamed the “bat cave.” It's dark, dingy, has no windows, and is located in the basement. Cellphone reception is nonexistent. To me, this is a lifesaver. I love the fact that it syncs between my iPhone. The only caveat I see is that normal SMS messages can't be received through iMessage, but this will be fixed in the upcoming release of \[OS X Yosemite\]\[3\] this Fall. + +Virtual Desktops have increased my workflow tenfold. I've tried various third-party applications to add this functionality to Windows, such as \[Dexpot\]\[4\], but it just doesn't do it as well. The four-finger swipe between workflows is almost contagious. Working on PC laptops, I often find myself swiping with four fingers, only to realize that I'm not on a Mac. If I were to switch back to a PC right now, I feel I could do it fairly easily, minus this piece. I would miss that capability quite a bit. + +It's just all the little things, really. Things such as syncing my open tabs and bookmarks between my laptop and iPhone, or automatic spelling correction.They really make a difference, and all add up to create a very well-rounded product. + +That doesn't mean that OS X isn't without fault, though. There are a lot of things that have plagued Apple's operating systems since conception, and they refuse to fix them. What's with bouncing dock items? If that's not the most obnoxious ‘feature' I've ever seen, then I don't know what is. It's like a little kid poking his Mom saying, “Mommy. Mommy. Mommy. Mommy. Look at me. Mommy.” Or what about the green “Maximize” button only working half the time? Or the spinning beach ball of death. OS X Mavericks, even with its hundreds of added features still has a long way to go. + +### Conclusion + +Now, with all that being said, I'm not telling everyone around me to jump ship and switch immediately. I'm not under the false impression that Macs “just work,” as Apple has hinted. If a PC works for you, then stick with it. If you prefer a Mac, then go for it. Personally, I'm an Apple fan. The features, to me, make it all worth-while. Actually, I guess that she be rephrased to “the hardware alone make it all worth-while.” If one day I decide that I completely hate OS X, I would ditch the software entirely, and just install Windows as my full-time production operating system. + +Really, it all comes down to personal preference. Pick your poison. This comic says it better than I ever could: + + \ No newline at end of file diff --git a/content/post/2014-09-09-the-most-important-camera-accessory.md b/content/post/2014-09-09-the-most-important-camera-accessory.md new file mode 100644 index 0000000..5be550b --- /dev/null +++ b/content/post/2014-09-09-the-most-important-camera-accessory.md @@ -0,0 +1,17 @@ ++++ +title = "The Most Important Camera Accessory" +date = "2014-09-09T18:50:20-07:00" ++++ +Want to know what my most cherished and valuable piece of photography equipment is? You might be surprised. It’s not my beautiful Canon 6D. Nor is it my 24-70 F2.8 lens. It’s light, portable, and inexpensive, yet it’s the most important piece of equipment that I own: a plastic bag. + +Last night, we spent the evening playing with steel wool and throwing sparks into circular patterns into the air. Add a little fill flash, and some creativity, and you’ve got a fun evening planned. Soon, it starts to sprinkle, and you think, “It’s a good thing I invested in a nice full-frame camera. It’s got weather sealing!” You wait a few more minutes, and the rain begins to pick up just ever-so-slightly. You think again to yourself, “It’s a good thing I invested in some ‘L’ Canon glass! It’s weather resistant!” + +Sparks Fly + +Soon, it’s an all-out downpour, and I reach into my gear bag for my trusty sidekick. I rip a small hole into the bottom of the bag, just the size of the lens opening, and the open end of the bag gently lays over the rest of the camera, allowing me to lift it up to peer through the eyepiece and view the image on the LCD screen. + +Rewind four years ago to when I was a young Mormon Missionary, serving in the small town of Los Lunes, New Mexico. It was our day off, and a friend of mine wanted to go hiking. I grabbed my trusty Canon Rebel XTi, one of my few possessions, and we headed out. Halfway into the hike, the sky unloaded on us. We were absolutely drenched. Getting back into the car, I knew that my camera was in trouble. I did the best I could to protect the camera from the elements, carrying it underneath my shirt. + +Sadly, it was a goner. No matter which lens I tried, I got the deadly “Error 00: No lens connected’ error.” I tore it apart, in hopes that letting it air out might fix the problem. No luck. I had definitely learned my lesson. + +Back to last night, I’m grateful I had learned my lesson earlier, and not with the more expensive 6D counterpart. I learned my lesson, but here’s in hopes that you learn from my mistake, and not your own. Carry a plastic bag in your camera bag at all times. You’ll never know when you need it. \ No newline at end of file diff --git a/content/post/2014-10-03-visual-form-builder-paypal-redirect.md b/content/post/2014-10-03-visual-form-builder-paypal-redirect.md new file mode 100644 index 0000000..7925751 --- /dev/null +++ b/content/post/2014-10-03-visual-form-builder-paypal-redirect.md @@ -0,0 +1,23 @@ ++++ +title = "Visual Form Builder PayPal Redirect" +date = "2014-10-03T18:50:20-07:00" ++++ +For anyone who knows me even slightly well knows that I’m a huge fan of WordPress. I use it as my go-to CMS for all of the websites I create, whether for myself or for clients. It gives me the flexibility I need in a well designed format, and it gives my clients the ability to make changes to their own websites without knowing any code. + +Some people will give you a giant list of plugins that you have to download when first setting up your WordPress site. My theory is the opposite. The fewer plugins, the better. I don’t install something if I don’t need it, just to have it. One plugin I almost always find myself installing, though, is Visual Form Builder. It makes creating HTML forms a piece of cake. Sure, you can code them all yourself, but why when this is so easy? It offers plenty of features, such as sending a copy of the form to administrators, to the person filling out the form, and so many other features. There is a Pro version as well if you need it, but I’ve found that all the features I need are offered in the free version. + +One thing I often do for clients is build a form using this plugin so that they can collect some data or information from their customers. Once the customers click “Submit” on the form, it redirects them to a PayPal link where they can purchase a product. All of this is done through Visual Form Builder. On the “Confirmation” section, you have the option of redirecting the user to a different page in your WordPress site, to a different URL, or just display some text. Here is where I select “URL” and then post in the link that (under the email tab, not the WordPress form code) that PayPal has given me. + +This morning, however, I ran into a new problem I’d never seen before. Upon redirection, I saw this error through PayPal: + +Visual Form Builder + +I did everything that I could think of, and I could not for the life of me figure out the issue. It kept saying that I was missing “required information”. The thing was that I wasn’t sending any information. And what was even more baffling was that if I copied the link directly into a browser, the URL worked fine, and I was successfully redirected to PayPal. Therefore, the problem lies with Visual Form Builder. + +I scoured the internet. I found a post on the plugin support page with someone having the same issue as me, but it was a quick dead-end. It was over 2 years old, and no problem had been found. The developer basically said, “Buy the Pro version.” And then the topic was closed. Well, that was no help. + +I continued trying. After a lot of trial and error, I finally found a workaround. I used the Google Link Shortener, and for some reason, that worked. I pasted in my PayPal “email” link, and then Google spit out a shorter URL. I pasted that into the “Redirect” field under the confirmation settings, and voila! It worked! + +Visual Form Builder + +This seemed to work for me. It’s not ideal, but it’ll do for now. Have you had a similar problem? Does this work for you? Let me know what you think. \ No newline at end of file diff --git a/content/post/2014-10-06-tmobile-im-breaking-up-with-you.md b/content/post/2014-10-06-tmobile-im-breaking-up-with-you.md new file mode 100644 index 0000000..bff38c8 --- /dev/null +++ b/content/post/2014-10-06-tmobile-im-breaking-up-with-you.md @@ -0,0 +1,27 @@ ++++ +title = "T-Mobile, I'm Breaking Up With You" +date = "2014-10-06T18:50:20-07:00" ++++ +“It’s me, not you. Okay, no. Actually, it *is* you. We’ve had a good run together. We’ve tried it out for more than a year, but things just aren’t working out. That’s not to say that we haven’t had some good times together, but I’m just ready to move on.” + +Usually, it’s safer if I keep my credit card in a different room while I’m surfing the internet late at night. I don’t seem to make the best decisions when I’m sleepy. However, late last night, I made a decision that won’t leave me with buyer’s remorse the next morning. + +I’ve had a love/hate relationship with T-Mobile ever since signing with them a little over one year ago. While I’m in town, I get decently good service. I’ve enjoyed my iPhone 5S on their network, as well as the ability to tether my laptop to my phone. However, sometimes, I’ll have random dead-zones. Walmart, for some reason, is notorious for getting a “No Service” notification on my phone. And if I’m on a random highway somewhere trying to access any form of data, forget about it. WHY!? + +Yesterday, however, was the last straw. My girlfriend and I were hiking high in the mountains. We took a quick weekend drive to a canyon two hours away. Literally, as we were on top of the mountain, I hear the all-too-familiar text-tone, “duh duh!” I was shocked to think that it might possibly be coming from my own pocket. How could I have been so foolish? Pulling my phone from my pocket, I saw the “No Service” symbol almost mocking me while my girlfriend quickly replied to her text message. Are you kidding me? She has service even way out here in the middle of nowhere? + +On our way back, we were going to stop at a restaurant as we passed through a small town. A friend of mine had recommended a restaurant, but I couldn’t remember the name off the top of my head. Knowing that they had mentioned the name in an Instagram post, I pulled out my oh-so-reliable cell phone to look it up. While I actually had service this time, I was only connected with one bar of “E” (Edge). I attempted to load a few pictures, but it was useless. Even the loading screen got tired of loading. All the while, my girlfriend was happily browsing with LTE speeds. + +I was fed up. I set out to compare prices. I navigated to Verizon Wireless, knowing before-hand that they were the most expensive, and that I would not be able to afford them, even though they provide the best coverage (for my area). Opening to their main page, I was presented with this advertisement: + +T-Mobile, I'm Breaking Up With You + +I was hesitant. I thought to myself, “Okay. Sure. Only $60. But they’re only going to give you 300MB of data, and to upgrade to at least 2GB will be an additional $20. Add taxes on top of that, as well as a monthly payment on the phone, and you’ll be up to $120 a month.” I couldn’t believe my eyes when the plan details loaded on my screen. Really? Unlimited Talk, Text, and 2GB of data for only $60? I don’t believe it. I chatted with an online representative too, just to make sure that it wasn’t too good to be true. She assured me that it was only $60 a month. Even with taxes, that will still bring me to more than $20 cheaper than my current bill. + +With not even a twinge of guilt, I whipped out my credit card, and signed the 2-year contract with giddy excitement. I ported my number over easily, and within a week or two, my new iPhone 6 will show up right on my doorstep. + +Sorry, babe. We’ve had a good run, but I’ve found someone better. Someone who will stay by my side, and not leave me hanging when I need you most. + +***************** + +For those who are interested, the plan I’ve mentioned above is only for a Single Line. If you need more than one line, Verizon’s “More Everything” is the option you’ll have to choose. It’s also important to mention that with the Single Line plan, you can’t use your phone as a WiFi Hotspot. You’ll also want to watch your data usage. Every gigabyte used over the allotted 2GB of data will be charged $15. I figured that this was fine, as I don’t tether often, and the only time I’ve ever gone over my data is when I am tethering. \ No newline at end of file diff --git a/content/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad.md b/content/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad.md new file mode 100644 index 0000000..ef3a1c0 --- /dev/null +++ b/content/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad.md @@ -0,0 +1,23 @@ ++++ +title = "I have an iPhone and Mac. Get an iPad?" +date = "2014-11-29T18:50:20-07:00" ++++ +Let me start off right away by saying that you do not “need” an iPad. Regardless of what you do or do not have, you do not *NEED* an iPad. If you want to hear me go off on a big spiel about instant gratification and entitlement, I could talk your ear off. But we’ll save that for another day. + +But let’s get to what you’re really interested about. I am not an Apple Fanboy (an Apple Watch for $350?! Heh. Yeah right. I’m not jumping on that bandwagon), but I’ll definitely admit that I’m caught up in the Cupertino Ecosystem. And that’s not to say that I’m against the guys working over in Redmond, or that I believe Microsoft is of the devil. Do I believe that Apple creates superior products? Absolutely. Do I try and sway people to shell out the extra cash for a similarly-capable machine that can do the same thing for hundreds of dollars extra? No, not necessarily (iPhone vs. Android is another debate, though). Anyway, enough side-tangents. I really do love Apple products, but that doesn’t necessarily mean that I’m waiting first in line to buy the “next big thing.” + +iPhones and Macs fit so well into my life and have changed the entire way I do things that naturally I’ve asked myself, “Do I need an iPad?” The debate is that an iPad is really just a larger iPhone, and has a lot of the same capabilities, but it’s not quite a PC-replacement (at least not yet). So is there a need or some hole in my life that an iPad could fill? + +I’ve been through the whole Windows 8, touch-screen thing. Meh. Not for me. There are some things where it was “kinda cool” to manipulate and change just with your finger, but honestly, it always just felt ever-so-slightly awkward to stretch my arm across the keyboard and touch the screen. To me, it just felt — wrong. In my mind, it’s as if Grandma had come to Thanksgiving dinner wearing a belly shirt. Lines have been crossed, and I never want to see that ever again. In a post-PC era, it was bound to happen, but belly shirts and older women are two things that should never be mixed. Laptop computers and touch-screen devices should not be combined. + +I’ll admit that I’ve always had my eyes on an iPad. Walking through the mall, even with my girlfriend yanking on my arm, it was simply a futile attempt to try and have me walk past an Apple store. First stop: MacBook Pro’s, second stop: iMac’s, third stop: iPads. It was alway something where I would say, “These are cool. But it’s just a big iPhone. Do I need one?” I always toyed with the idea in my mind, but ultimately decided against it. + +Yesterday, on an impulse, I pulled the trigger. I found myself walking out of the store with an iPad Mini 2 (no way in hell am I paying $100 extra for identical hardware, minus the Touch-ID just to have the latest and greatest), and surprisingly feeling quite guilty. + +I came home, ripped open the packaging, downloaded all the apps, restored from an iCloud Backup, and then I thought, “Now what?” There were some cool things, such as larger-screen games, or an even better mobile-browsing experience via Safari. But even after the first few hours, I couldn’t convince myself that I really “needed” this device. I kept fighting within myself saying, “Well think about all the Web Development you do. You can use this to test how client sites function on a tablet.” or even, “If you don’t find a need for it, you can gift it to Mom for Christmas.” + +## The verdict + +I don’t really have one, yet. I’ve had a full 24 hours using the device, and I’ve decided that an iPad, for me, is a *luxury device*. It doesn’t fill any gaping holes in my life that I had previously. I will say that browsing in bed on a larger screen is a better experience, as well as larger-screen gameplay (although I’m not a gamer by any stretch of the imagination). I also prefer a lot of the iPad-based apps compared to the iPhone alternative. They seem more capable and feature-packed. Netflix is more pleasant to watch rather than having a hot laptop searing off my chest hair. And if I ever decided to get into reading, I could see it as a good eReader. But ultimately, it just felt more limiting than anything. I found myself thinking, “I need to edit this line of co — oh wait. I have to get on my MacBook to do that.” or “I need to send that photo to Cary — oh wait, that’s on my laptop.” I want it to be a replacement, or at least a good substitute, to my MacBook Pro, and it just isn’t there yet. + +If I can’t find a good reason to keep it within the next few days, it’ll probably go back. Can anyone change my mind? \ No newline at end of file diff --git a/content/post/2014-12-05-heres-to-actually-sticking-with-something.md b/content/post/2014-12-05-heres-to-actually-sticking-with-something.md new file mode 100644 index 0000000..b8fbee2 --- /dev/null +++ b/content/post/2014-12-05-heres-to-actually-sticking-with-something.md @@ -0,0 +1,12 @@ ++++ +title = "Here's to actually sticking with something" +date = "2014-12-05T18:50:20-07:00" ++++ + +When I was 16 (yes, I'm young, okay?), I had the idea for a Tech Blog. Not that it had never been done before or anything, but it's just that ever since the age of 9, technology is the only hobby or thing in my life that I've consistently held interest in. I'm not sure why I wanted to start one, but I just figured it would be a good way of tracking my progress and learning of various technologies, as well as helping others in anyway, if possible. I got about three posts in, got discouraged, thought “this is stupid”, and told myself that I would never in any way, shape, or form be able to compete with the larger tech blogs like CNet, TechCrunch, or TUAW (now iMore). + +But now, I'm kicking myself. In hindsight, I keep thinking to myself, “Imagine the web presence you could have had, if only you had hung on for all these years.” Well, recently, I've had a bit of motivation (or maybe it's procrastination of more important things), and I've decided to actually stick to this blog. It's been going for about six months now, and I plan on continuing the trend. + +I have another blog dealing with the religious aspect of my life, and it's actually proven to be successful (at least in my book), getting around 30,000 hits a month. It's not incredible, and I haven't been very great at posting lately, but it's really rewarding to see what I've been able to achieve by keeping it running for around a year and a half. + +So, here's to actually sticking with something, for once in my life. \ No newline at end of file diff --git a/content/post/2014-12-06-my-love-hate-relationship-with-wordpress.md b/content/post/2014-12-06-my-love-hate-relationship-with-wordpress.md new file mode 100644 index 0000000..2d4f363 --- /dev/null +++ b/content/post/2014-12-06-my-love-hate-relationship-with-wordpress.md @@ -0,0 +1,51 @@ ++++ +title = "My love-hate relationship with WordPress" +date = "2014-12-06T18:50:20-07:00" ++++ +Recently, I’ve really been getting fed up with WordPress. And here’s why. + +WordPress dates all the way back to 2001. It was originally developed as a simple blogging platform based off of MySQL and PHP. Close to fifteen years later, it’s become a web standard and is used as the Framework/CMS for more than 20% of all the websites on the internet. And that’s exactly the problem. + +WordPress has exploded into a million different forks and subprojects, and has been expanded to run an equal amount of themes and plugins. My biggest issue with this is that WordPress was never *designed* to support this. Years down the road, it’s still sitting on code that dates back a decade. The same issue holds true with Microsoft. Even after launching Windows 8.1, it still has pieces of code that were used in the Windows 3.1 and Windows 95 operating systems. It baffles me that 20 years later, we still can’t seem to ditch MS-DOS or the Registry. + +WordPress was never designed to be used as an e-commerce platform, but with the help from the guys over at Woocommerce, it’s never been easier and quicker to do so. WordPress was never designed to be used as a Social Media platform, but of course, there are plugins to do that as well. WordPress is so simple and easy to use, that it’s become overly bloated with features to cater to the needs of everyone. I fear that it’s soon going to crumble in on itself. + +## Security Holes + +And here’s something else to think about too. Even if only 1/100th of all websites on the internet were using WordPress as their CMS, imagine what would happen if a large exploit were found. Millions of websites are instantly vulnerable in the hands of skilled hackers. Sadly, the number of potential targets is a lot larger than 1%, should an exploit be found. Many users don’t know that they would be perfectly fine completely ditching the database, and just using static HTML to host their blogs, completely eliminating the security flaws. + +## Updates + +WordPress updates are the absolute worst. Starting somewhere in the time-frame of Wordpress 3, automatic updates were introduced by default (although you can turn these off through the database, I believe). For a lot of the websites I build and manage for clients, I set myself up as an administrator. Whenever an automatic update is pushed, I get an email saying, “Your WordPress installation has been updated to version 4.0.1…” I cringe just thinking about all the hundreds of things that could now be broken on dozens of my websites. Granted, the WordPress team does their absolute best to ensure that nothing breaks, but with hundreds of thousands of different themes and plugins, how can anyone be absolutely certain that they won’t be a compatibility issue somewhere? + +## Comments + +The comment system in WordPress is so flawed, it’s not even funny. Even when using a plugin to block/prevent spam, there are times when I’ll log into my dashboard and find that I have 300+ pending comments to be approved, 90% of them being complete garbage. What’s even more annoying is that all of these comments, whether legitimate or spam, are being stored in the database, ultimately slowing down the over-all speed of your website. + +## Speed + +Touching on this already a little earlier, having a backend attached to any website is most always going to ensure a decrease in speed unless it’s closely managed and optimized. Most of the time, the end-user has little to no knowledge on how to do this. Many users would be perfectly fine serving plain ol’ static HTML or using a static site builder such as Jekyll or Middleman. Every query to a database requires more bandwidth, and more server strain. + +I’m a little hesitant to even touch on the topic of themes, because it irritates me so much. The other day I was looking at some of the best-selling WordPress themes on themeforest. These themes, in my opinion, are so poorly coded, and so irritatingly slow. The builders of these themes attempt to cater to everyone and no one, all at the same time. Do they have any training about UI or UX? Do they understand that they need to minimize their CSS and JavaScript? Do they understand that they need to optimize their images to a suitable web size? Clients come to me and say, “Oooh. I like this look.” They truly have no idea what they’re doing. Having something that looks “pretty” just won’t cut it. There’s a lot more to think about behind the scenes, rather than just how a website looks. + +I’ve seen theme packages that, for the entire install, run in the area of 15 megabytes. 15 MEGABYTES!? Are you kidding me? Even with LTE cell phone speeds and fiber-optic internet connections, 15 megabytes is a lot of data. Good luck having users stick around when your site won’t load on their phones. Some people might say, “Well, users will wait for at least a second for my site to load.” Wrong. Amazon did a study on page load speed, and how it affects their sales conversion rates. They found that a one-second difference in page-loading speed could cost them up to $1.6 Billion in sales. + +## The Art of Web Design + +In my mind, building a website truly is a work of art. I’m proud of the hours that I’ve spent in learning, growing, and honing my skills in order to develop something out of thin air that helps a client’s business or hobby or whatever. However, nowadays, it seems that we’re beginning to lose that art in development. Websites such as wix make it seemingly so simple to throw up a website that anyone can do it. WordPress is no different. Now, because of the simplicity of WordPress, people begin calling themselves “Developers” or “Experts” without even touching a single line of code. + +## Ease of Clients + +Now, here comes the love. I really don’t hate WordPress, although it may seem that way. One of the number one reasons I use WordPress as a CMS for my entire client base is the ability to entirely hand of a project. We’ve all worked with clients that are annoying, nagging, and constantly changing their mind. When the project is done, I can’t wait to get “rid” of them, because it’s a never-ending project. Nothing ever gets finished. WordPress allows me to (finally!) finish a project and give them the ability to change and manipulate virtually anything they may want with knowing little or no code at all, and best of all, without involving me. + +## Quick and Inexpensive + +When you’re constantly beginning new projects, you get in the habit of building your own mini-framework, in hopes to cut off some of the development time or shave off some of the repetitiveness. WordPress is KING of saving time. I can create a new hosting environment, and have a functional WordPress installation in less than five minutes total. Then, I can focus on the needs of the customer and the design, rather than re-inventing the wheel for the 500th time. + +## Conclusion + +Ultimately, I think my hatred really comes down to the bloat of WordPress. It reminds me so frequently of those who attempt to build an entire website using Dreamweaver’s visual mode. Yes, it’s possible to do it without knowing any code at all. But if you know anything about code, you can instantly look at the code that Dreamweaver spits out, and you know how much bloat and garbage can be cut out. WordPress is an incredible piece of software, and that’s apparent in it’s widespread usage. But bloat is my number one concern. + +If you’re familiar with Google’s Page Speed analysis, you might be surprised to see that even some of the most popular websites rarely score above 50%. Take a basic WordPress theme, give it a test, and you might be surprised that you only received a score of 27. Developing everything from scratch, you can easily shave off the bloat and improve your page speed, which can equate to improved SEO through Google. + +One last point, and then I’ll shut up. Am I using WordPress to run my blog? Absolutely. Is there a lot of bloat? Maybe a little, but I’ve tried to cut out everything that I could. I’m scoring in the 90’s in most aspects of Google’s Page rankings. I think I fall into the trap that so many other users do, and try too hard to focus on design, colors, and appearance, and not so much on the content. I was recently inspired by David Calhoun’s blog, and have since changed the design of my own blog to a more minimal design. David’s blog is great. It’s plain, clean, crisp, but more important, it’s fast. It provides the required functionality, and then the rest is focused on the content. Does David’s readers care that his blog is plain? Not really. He has a consistent reader-base, because of what he provides. Rarely, if ever, would anyone say, “This is a great looking site. I’m going to come back, even if there’s nothing here for me.” No. Does a good design/functionality help? Of course. But it’s not everything. \ No newline at end of file diff --git a/content/post/2014-12-08-investment-calculator-java.md b/content/post/2014-12-08-investment-calculator-java.md new file mode 100644 index 0000000..ae3c395 --- /dev/null +++ b/content/post/2014-12-08-investment-calculator-java.md @@ -0,0 +1,272 @@ ++++ +title = "Build a GUI Investment Calculator in Java" +date = "2014-12-08T18:50:20-07:00" ++++ +I’m not a programmer. Some people just have that natural itch to want to go out and code all day long, but that isn’t me. I enjoy scripting and web development, but deep, low-level programming just simply isn’t my thing. So the fact that even *I* was able to create a simple GUI application should tell you how easy it is. The code below might look daunting at first, but we’ll walk through it piece by piece to hopefully clear things up. I’ll try to make it as easy as possible to understand, but you should have at least a *basic* understanding of programming to go through this. + +Java makes creating applications really simple. I’ve dabbled with C++, but never stuck with it long enough to get into the Object Oriented pieces of it. Whenever learning a new programming language, it seems the first program you write is “Hello World.” The next program after that is a basic investment calculator, and so we’re going to continue that pattern. + +When we’re finished, we’ll have a program that looks something like this: + +GUI Investment Calculator + +At the end of this post, I’ll show the complete code. If you have the Java JDK (a free download, here), you can easily import this code into a text editor, save it with a .java extension, and then compile it using the command line. Something this would work: + +~~~java +javac SimpleGUIProgram.java +java SimpleGUIProgram +~~~ + +Personally, I use Eclipse. It’s a free IDE that you can download, if you’re not interested in using a text editor. + +Let’s get started. + +First, let’s import some libraries. Libraries are basically a repository of reusable code. Rather than having to rewrite code over and over, why don’t we write it once, store it in the Java API, and then import it into our program whenever we need it? Luckily, someone has already done that for us! The specifics of each of these libraries isn’t super important, but just know that these include the graphical components that we’ll need to build our program. + +~~~java +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +~~~ + +Next, we’ll create the text fields and buttons that will be used in our program. Notice in the image above that we have four input fields (Investment Amount, Years, Annual Interest Rate, and Future Value) and two buttons (Compute and Reset). They’re pretty easy to define in Java. + +You might wonder what private means. Whenever you create an object and set it to private, that means that it can only be accessed within that same class. We could change it to public or even protected, but for this example, we’ll leave it how it is. There are some benefits to leaving things private, such as avoiding data corruption and a few other things, but that’s outside the scope of this tutorial. + +Then we need to tell Java what kind of object we’ll be creating. We’ll be using JTextField, which is just an input box, and JButton, which, obviously, is a button. And after that, we just need to name our object. For the sake of being descriptive, I usually like to prefix my object names with jtf or jb or similar, so I know what it is quickly by looking at it. + +~~~java +private JTextField jtfInvestmentAmount; +private JTextField jtfAnnualInterestRate; +private JTextField jtfNumberOfYears; +private JTextField jtfFutureValue; +private JButton jbtCompute; +private JButton jbtReset; +~~~ + +Next, we’re going to define the properties for the frame (the program window). The setTitle property allows us to name the frame. You can see in the image above that the title of the window is “Loan Calculator” as we’ve defined here. You can name it whatever you’d like. + +Next, we define the default close operation. This tells the computer what to do whenever the program is closed. We have the option to let the program to continue running, even when the box is closed. In this example, when the user hits the “x” in the corner of the window, we want our program to terminate, so we’ll use setDefaultCloseOperation(Frame.EXIT_ON_CLOSE). + +setSize defines the window width and height in pixels. Pretty self-explanatory. + +setLocationRelativeTo(null) allows us to center the window right in the middle of the screen. In my opinion, that’s the easiest and most user friendly. You have the option to set that location in pixels, using x and y coordinates, but generally, I’ve found that the user expects the window to open in the center of the screen. + +Last, we want to set the layout. Java uses things called “Layout Managers”, which basically defines how elements are laid out inside of the program window. There are three layout managers that are most commonly used: Border, Flow, and Grid. You can read up on those other two, as I’m not going to explain them, but in this program, we’re going to be using the grid layout manager. It allows us to define how many rows, and how many columns we want for our program. GridLayout(5,2,5,5) tells our program that we want to use the Grid Layout Manager, with five rows, two columns and then 5 pixels for spacing. + +~~~java +setTitle("Loan Calculator"); +setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +setSize(500,300); +setLocationRelativeTo(null); +setLayout(new GridLayout(5,2,5,5)); +~~~ + +Now that we’ve defined our window, we need to create some text labels next to our input fields. Because it’s just text, we don’t use private or public on these objects. We use the following code to create a new label (JLabel) object. Again, when we name the object, it’s good practice to use a prefix so you can easily tell what type of object it is. I use jl as my prefix. Then, we create the string of text for what the JLabel will output. + +If you notice, I’ve placed a preceding space in front of the text. I find that Java likes to push things right up against the frame, and it’s not very aesthetically pleasing. By adding a space, it allows us to push the text away from the left edge ever-so-slightly. You can add more spacing if you prefer. + +~~~java +JLabel jlInvestmentAmount = new JLabel(" Investment Amount"); +JLabel jlNumberOfYears = new JLabel(" Number of Years"); +JLabel jlAnnualInterestRate = new JLabel(" Annual Interest Rate"); +JLabel jlFutureValue = new JLabel(" Future Value"); +~~~ + +Earlier, we defined our textfields and buttons, but we didn’t actually create them. We basically told the program, “Hey, I’m going to be making these soon. Just wanted to give you a heads up.” But now we create them. + +In the last line of code, we write jtfFutureValue.setEditable(false). I wanted the first three fields to be able to accept input from the user. But the last field (the Future Value field) is going to simply output our final answer. Rather than making the user confused by thinking they need to input something, I set the editing to false. + +~~~java +jtfInvestmentAmount = new JTextField(); +jtfNumberOfYears = new JTextField(); +jtfAnnualInterestRate = new JTextField(); +jtfFutureValue = new JTextField(); +jbtCompute = new JButton("Compute"); +jbtReset = new JButton("Reset"); +jtfFutureValue.setEditable(false); +~~~ + +Now that we’ve defined and created everything, we should be good right? Not quite. If were to run the program right now, our program wouldn’t do anything. What happened to all the things we created, you might ask? We’ve created all the objects, but we haven’t told the program to add them to our frame (window). We can do this simply by typing add and then the name of the object. + +~~~java +add (jlInvestmentAmount); +add (jtfInvestmentAmount); +add (jlNumberOfYears); +add (jtfNumberOfYears); +add (jlAnnualInterestRate); +add (jtfAnnualInterestRate); +add (jlFutureValue); +add (jtfFutureValue); +add (jbtCompute); +add (jbtReset); +~~~ + +Next, we need to tell the computer that we want it to do something once we click on a button. This code doesn’t do much else, besides call other methods (functions) that we’ll define in a bit. + +~~~java +ListenerClass listener = new ListenerClass(); +jbtCompute.addActionListener(listener); +jbtReset.addActionListener(listener); +~~~ + +Another very important piece: We need to set the window visibility to true. Otherwise, nothing will appear when we run the program. + +~~~java +setVisible(true); +~~~ + +Every program in Java requires a main method. All this code does is calls the class that we’ve already created. It doesn’t look like much, but our program won’t run at all if we don’t have this. + +~~~java +public static void main(String[] args) { +new SimpleGUIProgram(); +~~~ + +The following code does two important things: catches exceptions, and does all the math calculations for our program. + +First, we need to assume that people are stupid. You would think that most people would be smart enough to input numbers into the fields of our program, but what happens if they entered a word instead of a number? Without a “try…catch”, the program would just crash, without any warning to our user. Instead, we can make things a little bit more user friendly and say, “Please enter numeric values” if they enter anything except numbers. + +And second, the rest of this code takes the data entered by the user in the fields, does all of the calculations, and then formats it to look pretty. We pull the data from the fields, parse it into a number (either an Integer or a Double), and then convert the annual interest rate into a monthly interest rate. We could do that by dividing by 12, but I also combined the percentage into that calculation as well (1200 instead of 12) so that I don’t have to write another line of code to divide the percent by 100 as well. + +~~~java +private void computeValue() { +try { +double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText()); +double monthlyInterestRate = annualInterestRate / 1200.0; +int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText()); +double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText()); +double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12); +jtfFutureValue.setText(String.format("%.2f", futureValue)); +} catch (Exception e) { +JOptionPane.showMessageDialog(null, " Please enter numeric values."); +} +} +~~~ + +This code is very simple. Whenever a user clicks on the “Reset” button, it will call this method, and change whatever is input into the boxes into a blank string. + +~~~java +private void resetForm() { +jtfInvestmentAmount.setText(""); +jtfAnnualInterestRate.setText(""); +jtfNumberOfYears.setText(""); +jtfFutureValue.setText(""); +} +~~~ + +And finally, this code is what links the buttons to the methods we created. We create a ListenerClass, which essentially says, “When I do this, do this.” So, “when I click on a button, call this method.” + +~~~java +private class ListenerClass implements ActionListener { +public void actionPerformed(ActionEvent e) { +if (e.getSource() == jbtCompute) { +computeValue(); +} +if (e.getSource() == jbtReset) { +resetForm(); +} +~~~ + +And really, that’s it! Not to shabby for ~100 lines of code, eh? Here’s the entire code: + +~~~java +/************************* +* Created by: Bryce Matheson +* Website: blog.mathesondigital.com +* Date: 12/7/2014 +* +* Purpose: A simple GUI Investment Calculator +* +* Rights: Free to use for Personal Use +*************************/ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class SimpleGUIProgram extends JFrame { + + private JTextField jtfInvestmentAmount; + private JTextField jtfAnnualInterestRate; + private JTextField jtfNumberOfYears; + private JTextField jtfFutureValue; + private JButton jbtCompute; + private JButton jbtReset; + + public SimpleGUIProgram() { + + setTitle("Loan Calculator"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(500,300); + setLocationRelativeTo(null); + setLayout(new GridLayout(5,2,5,5)); + + JLabel jlInvestmentAmount = new JLabel(" Investment Amount"); + JLabel jlNumberOfYears = new JLabel(" Number of Years"); + JLabel jlAnnualInterestRate = new JLabel(" Annual Interest Rate"); + JLabel jlFutureValue = new JLabel(" Future Value"); + + jtfInvestmentAmount = new JTextField(); + jtfNumberOfYears = new JTextField(); + jtfAnnualInterestRate = new JTextField(); + jtfFutureValue = new JTextField(); + jtfFutureValue.setEditable(false); + + jbtCompute = new JButton("Compute"); + jbtReset = new JButton("Reset"); + + add (jlInvestmentAmount); + add (jtfInvestmentAmount); + add (jlNumberOfYears); + add (jtfNumberOfYears); + add (jlAnnualInterestRate); + add (jtfAnnualInterestRate); + add (jlFutureValue); + add (jtfFutureValue); + add (jbtCompute); + add (jbtReset); + + ListenerClass listener = new ListenerClass(); + jbtCompute.addActionListener(listener); + jbtReset.addActionListener(listener); + + setVisible(true); + } + + public static void main(String[] args) { + new SimpleGUIProgram(); + } + + private void computeValue() { + try { + double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText()); + double monthlyInterestRate = annualInterestRate / 1200.0; + int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText()); + double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText()); + double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12); + jtfFutureValue.setText(String.format("%.2f", futureValue)); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, " Please enter numeric values."); + } + } + + private void resetForm() { + jtfInvestmentAmount.setText(""); + jtfAnnualInterestRate.setText(""); + jtfNumberOfYears.setText(""); + jtfFutureValue.setText(""); + } + + private class ListenerClass implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (e.getSource() == jbtCompute) { + computeValue(); + } + if (e.getSource() == jbtReset) { + resetForm(); + } + } + } +} +~~~ \ No newline at end of file diff --git a/content/post/2014-12-15-pseudo-responsive-images.md b/content/post/2014-12-15-pseudo-responsive-images.md new file mode 100644 index 0000000..64cdb7a --- /dev/null +++ b/content/post/2014-12-15-pseudo-responsive-images.md @@ -0,0 +1,24 @@ ++++ +title = "Pseudo-Responsive Images" +date = "2014-12-15T18:50:20-07:00" ++++ +Honestly, I'm a bit embarrassed to say that I didn't know how to do this before. I'll be creating a blog post here fairly soon on my conversion from WordPress to Jekyll for this blog, but in doing so, I've learned a lot of cool new things. + +Due to the vast number of mobile devices in circulation right now, I make it a habit to try and develop for mobile first, and then expand for the desktop user. Developing for mobile almost instantly implies responsive design. There are dozens of CSS frameworks to do this (Bootstrap, Foundation, Skeleton, etc.) intended to make your job a little bit easier. + +I ran into an issue while coding this site. My content would all scale down properly and fit into the viewport perfectly, except for images, which would overflow the bounds of the viewport. I couldn't for the life of me figure out what I was doing wrong. When copying content over from WordPress, I guess that I had added ‘width' and ‘height' attributes, which forced the images to display at those dimensions. After going through all of the images and removing both of those attributes, I simply went to my stylesheet and added the following. Lucky for me, I didn't have too many images to go through: + +~~~css +img { + width: 100%; + box-shadow: 10px 10px 5px #888888; +} +~~~ + +Obviously the box-shadow isn't required, but I just like add it for aesthetics. + +That selects all images across my entire website, and tells them to stretch to 100% of the viewport (which, in the case of this site, is 700px). As the page resizes, or is viewed on a different viewport size (such as a phone or tablet), that image is scaled down accordingly. + +One thing to mention, too, is that if you remove just the ‘width' attribute, but leave the ‘height' attribute, your images will come out all stretched and skewed as the image is scaled according to the viewport size. + +It's also important to note that this isn't the ‘real' way to present responsive images on your site, I'm just too lazy to do it the real way. This way works perfectly for me, until it becomes simpler. \ No newline at end of file diff --git a/content/post/2014-12-20-take-that-mr-barney.md b/content/post/2014-12-20-take-that-mr-barney.md new file mode 100644 index 0000000..9177b4e --- /dev/null +++ b/content/post/2014-12-20-take-that-mr-barney.md @@ -0,0 +1,31 @@ ++++ +title = "Take that, Mr. Barney" +date = "2014-12-20T18:50:20-07:00" ++++ +We've all had those professors/teachers that we just don't seem to mesh with. Recently, I had a professor with whom I could *not* set aside my differences. The class was about Mobile Application Development. I went into it thinking, “Wow, I'm excited! Finally, I'll be able to create an iOS/Android application!” On the first day of the class, Mr. Barney walked in and said, “This is not a programming class. This is not an iOS development class. This is not an Android development class. This class has no tests. This class has no assignments. This class has no texts, no books.” + +As the class progressed, I got more and more frustrated with the structure and Mr. Barney's teaching style. It seemed that the class was more about learning Mr. Barney than it was about the material. He came off as a close-to-retirement professor with a God-complex, who was tired of his job, and was just coasting on his measly salary for a few more years until he could finally escape. + +The class consisted of a few technologies that we were forced to learn on our own, namely HTML 5, CSS Animations and Transitions, AJAX, DOM Manipulation, JavaScript Basics, etc. Because there were no class materials, we resorted to YouTube tutorials and blog articles to learn. On a bi-monthly basis, we would meet one-on-one in his office and present some sandbox code that we had been playing with that demonstrated one or more of these technologies. Based on his mood that day, he would open a little spreadsheet and rate you anywhere from “Strongly Disagree” to “Strongly Agree,” which ultimately equated to your class grade. + +At one point, I decided to bring in a simple sandbox weather application, using an AJAX call to link to an API and populate data into the DOM based on the user's location. The application used JQuery. While looking at my code, the second he saw a reference to JQuery, he tore it to *pieces.* “JQuery is of the devil.” or “JQuery is only for lazy programmers.” and “What happens if the JQuery library breaks, what happens to your application?” + +Okay, so, maybe he didn't say, “JQuery was of the devil.” + +Basically, his point all boiled down to this: You can use JQuery, but it's a bloated library and it contains so many additional pieces that you don't need, and ultimately, you can do exactly what you need with plain ol' vanilla JavaScript. It's slow, and it would take a long time to download the entire library, when you don't need it. + +For the rest of the class, I hated him for it. 9 times out of 10 as I left his office, I was fuming. And I really do understand his point, and I believe that it has *some* validity, but mostly, it's just him being old and outdated, and stuck in his ways. + +Even after finishing the class, I hated him for it. Have you tried looking for web tutorials online for advanced AJAX calls that don't use JQuery? It's *impossible*! + +In case you hadn't noticed (as in, you aren't using this website on a mobile device), the top navigation bar uses JQuery to convert to a small menu icon on smaller screens. I wanted to prove to myself that JQuery really isn't *that* bloated, and that it is in fact a useful tool, and better than writing vanilla JavaScript. + +After playing with a few things, I finally got the results I was looking for. Check out the results that I got while using Pingdom Page Speed. More specifically, look at the red box. My ‘styles.css' file (that isn't minified, btw) weighs a whopping 6.2kB. JQuery, which is more than 6x larger, loads more than twice as fast. How did I do it? + +Pingdom PageSpeed Results + +If you're familiar with Bootstrap, and the way that you can customize it just to your liking, JQuery is the same. Usually, whenever I use Bootstrap, I don't need all the font icons or navigation bars, or any of that. I only use the responsive pieces. With JQuery, they have similar options on their website to where you can customize it to your liking. I knew that the only piece I'd be using on my website is the navigation library. So I stripped everything else out. + +Also, up until this point, I wasn't familiar with CDNs, or the power that they potentially had. Pulling JQuery from their hosted CDN, rather than from my on my own shared web server undoubtedly speeds up the page load. My website is pretty barebones, and that's done on purpose to increase page speed. Loading times have come into consideration for everything I do on this site, but I don't feel that JQuery has in anyway been detrimental to that. + +I feel justified. Take that, Mr. Barney! \ No newline at end of file diff --git a/content/post/2015-01-02-5-things-to-stop-doing-in-2015.md b/content/post/2015-01-02-5-things-to-stop-doing-in-2015.md new file mode 100644 index 0000000..1036ff2 --- /dev/null +++ b/content/post/2015-01-02-5-things-to-stop-doing-in-2015.md @@ -0,0 +1,27 @@ ++++ +title = "5 Things to Stop Doing in 2015" +date = "2015-01-02T18:50:20-07:00" ++++ +It seems that a year has ended, and new year resolutions are all on the rage again. Yeah, there's those typical ones such as joining a gym and getting in shape (although, I really think I might do it this year), etc. Here are five things I'd like to quit doing this year. + +### 1. Quit checking my Instagram likes + +Yeah, it's stupid, but really. I mean it. We all do it. We open up Instagram and are excited when we see 30+ likes, 4 comments, and 2 new followers. I won't say that I base my self-worth on it, but I do get a bit of a thrill when I post a great photograph, or come up with some whitty remark. I'm going to try my best to quit doing that. I love photography, and I'd call it more than a hobby, but I can get better at finding self-gratification from other peoples' acceptance. + +### 2. Stop thinking that the grass will be greener + +“I'll be happy when I'm married…”, “If only I made more money…”. Stop. Please. Stop it. Happiness truly comes from gratitude. I need to work on being content with where I'm at, and simply finding joy in the journey. It's not a destination. I don't want to wish life away thinking, “If only, if only.” + +### 3. Stop comparing + +“Comparison is the theif of joy.” Are you ever happy with your love life, until you see another girl at the other table? Are you content and grateful with your talents, and ever-eager to hone them, until you see the successes of others? Are you happy with your job and your work, until you see a potentially better offer? There is always going to be someone or something better, and should you actually ever obtain that, you'd find something else to complain about. + +### 4. Quit feeling guilty + +People make mistakes. People change. And so do you. You live, you learn, you grow. The end. What happened in the past doesn't have to define you, unless you let it. Put on your big boy underwear, man up, and move on. + +### 5. Stop feeling obligated + +It's okay to say, “No.” Don't (always) make decisions based on what you think you *should* do. Make decisions based on what you WANT to do. It's your life, and you're going to have to live with the actions that you make. You have value, and your ruining your brand by undercharging. + +That's my list. What does yours look like? \ No newline at end of file diff --git a/content/post/2015-01-19-static-site-contact-form.md b/content/post/2015-01-19-static-site-contact-form.md new file mode 100644 index 0000000..e0b2880 --- /dev/null +++ b/content/post/2015-01-19-static-site-contact-form.md @@ -0,0 +1,34 @@ ++++ +title = "Static Site (Database Free) Contact Form" +date = "2015-01-19T18:50:20-07:00" ++++ +Although my site is always a work in progress, (I've still got plenty of things I need to do on it), I feel like it's in the final stages. Recently, I was trying to add the finishing touches by implementing a contact form. Mostly, to combat spam. I didn't want to throw my direct e-mail address out there, because that's just asking for an inbox full of viagra ads. + +The thing that I wanted to completely avoid was having any server-side (PHP) scripting, or databases. With most contact forms, that's a inevitable. But my main concern with just about everything on my site is performance. I wasn't willing to add a database just for that. So I went searching. + +Introducing Formspree.io. It's crazy easy. It involves using code, so if that scares you, you might want to stay away. But really, it's just simply copying and pasting that anyone can do it. Besides, if you're not into code, what're you doing reading my blog? + +Basically, you place their code on your site, and when someone submits anything in the form, all of the processing is done on their servers and forwarded to an email address that you provide. And what I love is that their logo isn't plastered all over the place. It's super minimal, and you don't even have to register an account with them. + +~~~html +
+

Email:

+

Message:


+ +
+~~~ + +All you have to do is replace the `youremail@pasteithere.com` with the address you want your submissions to be forwarded to. Throw that on your site. The first thing you have to do is submit a test form, and a confirmation email will be sent to the address you specified. Once it's confirmed, you're set to go! + +I left all the styling that I used in my form for you to use. You can strip it out or do whatever you want with it, obviously. + +You might be wondering about costs or privacy. Right now, there's a 1000/month cap on emails. Anything above that and you'll have to pay, but I'd be surprised to get even 20 submissions a month from legitimate sources on my own site. As far as privacy, they say that don't store any of the contents of the submissions, because they're using the Mailgun API. And even if they did, I'm not too worried about it. You shouldn't be submitting sensitive data to an unsecure form on the web anyway. + +One of my favorite features is the ability to add a “honeypot” for those who are just scraping the web, looking for forms to easily submit. You can add a textfield to the form, give it a name value of `_gotcha`, and then hide it using CSS. If any value is entered in this field, the message will be silently ignored. At the same time, this field is hidden from humans so that they won't accidentally enter anything. + +~~~html + +~~~ + +What about adding additional fields or features? Head on over to their website to see everything they've got to offer. This probably sounds like I'm being paid to write this post, but I'm not. I'm just grateful that I found a simple, easy solution to fill my needs. Enjoy! \ No newline at end of file diff --git a/content/post/2015-01-24-remove-ds_store-from-zip-file.md b/content/post/2015-01-24-remove-ds_store-from-zip-file.md new file mode 100644 index 0000000..a30c370 --- /dev/null +++ b/content/post/2015-01-24-remove-ds_store-from-zip-file.md @@ -0,0 +1,25 @@ ++++ +title = "Remove .DS_Store from ZIP Files" +date = "2015-01-24T18:50:20-07:00" ++++ +At work this week, I had to download a bunch of compressed XML files, delete some duplicate files contained therein, recompress the files, and then reupload them to a server. The problem, however, is that whenever I tried to upload the files, I got a strange server error. After some trial and error, and some deep examination, I found that the hidden file “.DS\_Store” was causing the server error issue. When I removed the hidden “.DS\_Store” file, I had no more issues. + +If you're a Mac user, you've undoubtedly noticed these strange files that seem to creep into every directory. They've plagued the operating system for years, and there's still not a super great solution for removing them. And the files don't just stay on your machine. Ever plugged in a USB flash drive to take over to a Windows machine? These obnoxious files have most certainly hopped on for a ride. They're nothing more than metadata (data about data), but they've never been an issue for me until now. + +So I navigated through the compressed folders again, deleted the hidden files, and then thought I was set. Upon recompressing the files once more and trying to upload them, I was still presented with the same error. Guess what happened when the folders were compressed again? Yep. The infamous .DS_Store file had once again shown up. + +So how do you remove these files in a compressed directory? Unzipping the files to remove them doesn't work, as they'll just show up again as soon as you re-zip the file. Well, I've had to resort to the command line. Using the following command in the terminal, I was successfully able to remove the annoyance quickly. + +zip -r mynewzipfile.zip wherethefilesarecomingfrom -x "*.DS_Store" + +Just to break down the above command: +zip – The terminal command +-r – “Recursive.” This means to select all files and subfolders under the directory +mynewzipfile.zip – Name this whatever you'd like the new ZIP file to be called +wherethefilesarecomingfrom – The directory that contains the files to be zipped +-x – “Exclude” flag. +"*.DS_Store" – Selects all files that are named “.DS_Store” + +Your new zip file will be created WITHOUT the .DS_Store file. Tah-dah! + +Upon doing a quick search on the internet, I found the following program called Asepsis. I haven't given it a try, but apparently it prevents the creation of any .DS_Store files. Might be worth giving it a try. \ No newline at end of file diff --git a/content/post/2015-02-14-i-love-to-grunt-and-gulp.md b/content/post/2015-02-14-i-love-to-grunt-and-gulp.md new file mode 100644 index 0000000..93fadb0 --- /dev/null +++ b/content/post/2015-02-14-i-love-to-grunt-and-gulp.md @@ -0,0 +1,104 @@ ++++ +title = "I love to Grunt and Gulp" +date = "2015-02-14T18:50:20-07:00" ++++ +(Happy Valentine's Day, ya'll. Get off the computer and go buy something nice for your woman.) + +Sometimes I like to pretend that I know stuff, when I really don't. Gulp is one of those things. :) + +I need to get better at finding solutions to a lot of the repetitive tasks that I do on a daily basis. Up until now, let's say I was about to push some production code to the web. Of course I needed to minify the CSS first. So I would copy the code, hit up CSS Minifier, paste the code back into my CSS file, and then rename the file, `styles.min.css`. This wouldn't be that big of an issue if I only did it once upon completion of a site. But it never really worked out that way. I'd forget to change a specific style last minute, and then I'd have to copy all of my code into CSS Minifier and do it all again. + +Wouldn't it be great if there were a service that did all of this for you, automatically? You're in luck! They're called “Task Runners”. I'm going to be focusing on “Gulp”, which is a JavaScript task runner, built off of Node.js. + +Now, to many of you, you've probably been using a task runner of some sort for years. For a long time, Grunt has been the big name in the game. Not too long ago, Gulp emerged and has been hogging the spotlight. It's not only faster at rendering, but it also has an easier-to-read syntax. + +Now, I'm too lazy to reinvent the wheel and write a tutorial on how to install and run gulp. This guy does a much better job than I could do, anyway. + +But I did at least want to post my gulpfile and say how freaking awesome it is. By simply running the `gulp` command, in less than second, I can minify my CSS, JS, and HTML, concatenate multiple files into one, rename them automatically, add in browser prefixes, and then reload the browser window. In less than a second. Boom. Pretty nifty, huh? Additionally, my gulpfile will watch for any changes to those files, and rerun all of those tanks without me doing anything. Dope. + +~~~js +var gulp = require('gulp'); + +/********************************************** +****************** Modules ******************** +***********************************************/ +var sass = require('gulp-ruby-sass'); //Compiles SASS +var autoprefix = require('gulp-autoprefixer'); //Automatically throws in browser prefixes +var minifycss = require('gulp-minify-css'); //Minifies CSS +var rename = require("gulp-rename"); //Renames files to .min after minifying +var minifyhtml = require('gulp-minify-html'); //Minifies the HTML +var concat = require('gulp-concat'); //Concatenates all source files into one file +var uglify = require('gulp-uglify'); //Removes whitespaces from JavaScript +var imagemin = require('gulp-imagemin'); //Compresses images +var livereload = require('gulp-livereload'); //Live reload +var plumber = require('gulp-plumber'); //Error handling + +/********************************************** +****************** Functions ******************** +***********************************************/ + +// css auto-prefix, minify, and rename +gulp.task('styles', function() { + return sass('src/styles/', {style:'expanded'}).on('error', function(handleError){ console.log('Error: There\'s a problem with your SASS, stupid. Fix that shiz.'); }) + .pipe(autoprefix('last 2 versions')) + .pipe(minifycss()) + .pipe(rename({suffix:'.min'})) + .pipe(gulp.dest('build/styles/')) + .pipe(livereload()); +}); + +// minify new images +gulp.task('imagemin', function() { + gulp.src('src/images/*.jpg').on('error', function(handleError){ console.log('Error: There\'s a problem with your images, stupid. Fix that shiz.'); }) + .pipe(imagemin()) + .pipe(gulp.dest('build/images/')); +}); + +// minify new or changed HTML pages +gulp.task('html', function() { + gulp.src('src/*.html') + .pipe(minifyhtml()) + .pipe(gulp.dest('build/')) + .pipe(livereload()); +}); + +// JS concat, strip debugging and minify +gulp.task('scripts', function() { + gulp.src('src/scripts/*.js') + .pipe(concat('script.js')) + .pipe(uglify()) + .pipe(rename({suffix:'.min'})) + .pipe(gulp.dest('build/scripts/')) + .pipe(livereload()); +}); + +/********************************************** +************ Watch & Build Tasks ************** +***********************************************/ +gulp.task('default', ['styles', 'html', 'scripts', 'imagemin'], function() { + // watch for CSS changes & minify + gulp.watch('./src/styles/*.scss', function() { + livereload.listen(); + gulp.run('styles'); + }); + + // watch for html & minify + gulp.watch('./src/*.html', function() { + livereload.listen(); + gulp.run('html'); + }); + + // watch for JS changes + gulp.watch('./src/scripts/*.js', function() { + livereload.listen(); + gulp.run('scripts'); + }); + + // watch for new images + gulp.watch('./src/images/*.jpg', function() { + gulp.run('imagemin'); + }); +}); +~~~ + +This isn't even the tip of the iceberg. There are hundreds of gulp plugins, and I have yet to play with the majority of them. But these seem to be the most basic/common plugins, and so far, they've proved invaluable. \ No newline at end of file diff --git a/content/post/2015-02-20-command-line-essentials.md b/content/post/2015-02-20-command-line-essentials.md new file mode 100644 index 0000000..69cdf79 --- /dev/null +++ b/content/post/2015-02-20-command-line-essentials.md @@ -0,0 +1,56 @@ ++++ +title = "Command Line Essentials" +date = "2015-02-20T18:50:20-07:00" ++++ + +It wasn't too long ago that I was terrified of the terminal. It's pretty daunting to be staring at a blank screen with a blinking cursor taunting you. Want to know something? It's not as scary as you might think. It would take years to master the command line, so don't expect to know everything all at once. Everyday, try and find little ways to slowly blend the terminal with basic tasks. Slowly, you'll find that it makes a lot of things easier. + +## Terminology + +You may have heard words such as “terminal”, “command line”, “shell”, “bash”, etc. There are slight differences, but generally, they all refer to the same thing. + +## Terminal vs iTerm + +‘iTerm' is a terminal replacement. It's simply a program that adds some features for developers and advanced users such as split panes, paste history, and a plethora of others. If you don't need any of these, you can use the basic terminal just as well. If you're looking for additional functionality, this might be worth looking into. + +Honestly, I tried iTerm and didn't care too much for it. I prefer TotalTerminal. I don't have a bunch of needs for extra fancy features, but one thing I do love is the “visor” functionality. From anywhere on my computer, I can have a terminal window slide down from the top of my screen, simply by pressing a keyboard shortcut. This is much easier than navigating to Finder, then Applications, then Utilities, then Terminal. Or even faster than searching for it through Spotlight. Many people use the standard Command/Ctrl + ~ shortcut, but I've customized mine to Control + Control. + +Another nifty feature is being able to have multiple terminal windows running different processes. I generally have a Jekyll or Grunt server running in one window, and then I use the other window for navigating through folders or committing changes on Git. It works similar to using tabs in Chrome or any other browser. + +## Basic Commands + +Let's get started. Go ahead and open up a terminal window and play with the following commands. Each command should be entered on a single line, and then followed by the [return/enter] key. + +pwd – stands for “print working directory”. It lists the folder that you're currently in (i.e. /Users/yourusername/Documents) + +cd – stands for “change directory”. This lets you move in and out of folders. For example, if you're in the “Documents” directory and want to move to another directory underneath named “School”, you would type cd School. + +cd .. – Move “back” or “up” a folder. In our previous example, this would move you out of the “School” directory and back into the “Documents” folder. + +cd ~ – Takes you back to your home directory. Let's say you're deep in a folder structure (i.e. /Users/yourusername/Documents/School/Senior/Thesis). Rather than having to type cd .. a billion times, you could type cd ~ to take you back to “/Users/yourusername”. + +open . – Opens the current working directory in finder. I use this one ALL the time and love it. + +clear – Clears the screen of all text. Sometimes the output of all previous commands can make me claustrophobic. This gives me a fresh, blank screen. + +rm [filename] – Deletes a file. + +mkdir [directoryname] – Stands for “make directory”. Creates a new folder. + +ls – Stands for “list”. Shows a listing of all the files/folders in a directory. Often, I find myself adding an -al flag. -a shows “all files” (hidden files included), and -l shows a long listing of files, rather than in a three-column short listing. This to me, is easier to read. You can combine the two flags together with the ls command by typing ls -al. + +sudo [command] – Stands for “super user do”. Sometimes you need elevated privileges to run a certain command. Typing sudo before the command will prompt for your password, and will then run the command. Be careful when using this command. If you don't know what you're doing, you can make some unwanted changes. If at all possible, run the command first *without* sudo, and only add it in if needed. + +control + c – Cancels a current process. For example, if you're running a script, you can kill (cancel) it. + +[Up arrow] – You can see a list of all the previous commands you've entered by pressing the up arrow key. This saves time rather than having to type in a command over and over again. + +[tab] – Autocomplete. Let's say I have a long folder name such “Discertation”. Start typing the first few letters of the file/folder to distinguish it from other files, and then press the “tab” key. It will autocomplete the filename for you. + +## Give it a try! + +Well, there are a few commands to get you started and make you just dangerous enough. Practice makes perfect! I use most all of these commands on a daily basis, but there are thousands of additional commands that you can learn. Baby steps. + +## Comments + +Did I miss any of your favorites? Let me know, and I'll list them here. \ No newline at end of file diff --git a/content/post/2015-06-03-powershell-extend-script.md b/content/post/2015-06-03-powershell-extend-script.md new file mode 100644 index 0000000..1e7e2e4 --- /dev/null +++ b/content/post/2015-06-03-powershell-extend-script.md @@ -0,0 +1,116 @@ ++++ +title = "VMware Disk Extend Powershell Script" +date = "2015-06-03T18:50:20-07:00" ++++ +About a month ago, I began working at Intermountain Healthcare, here in Utah, as a Systems Administrator. We have a bunch of monitoring software, one of which is called “Spectrum”. It searches for hardware errors or any other faults and then reports them to us. One of the most common reports that we find is that “C: 90% usage”, or something similar. Because the majority of the servers that we run are virtual, with a thin disk setup, they have relatively small drives (some starting as small as 25GB). As applications are installed or the demands of the business unit increase, we find that these drives fill up rather quickly. Currently, the process to extend these drives is to log into vConsole (vSphere Client), find the drive, edit the settings, provision additional disk space, remote into the virtual machine, open diskpart.exe, rescan the drive, and then extend it. + +Now, that's fine if you only have a couple of drives to extend each day. But with nearly 3500 servers that we're in charge of, we get quite a few, and it becomes rather monotonous. Hence, I began playing with powershell and wrote a simple script that both provisions additional disk space for you, as well as extends the drive in the Guest Operating System. + +The following script requires the VMWare PowerCLI. I prefer to use the PowerCLI, but you can also use the Snap-in and run it from Powershell directly. This has been tested to work on Windows Server 2003, 2008, and 2012. Because Windows 2003 doesn't have the capability to extend a virtual disk from the OS natively, we use Dell's 3rd party software “extpart.exe” (extend partition). + +You'll have to modify the script below to your needs by adding the VM host servers you want to connect to (indicated by “server1”, etc), as well as change the locations below for where to check for extpart.exe, as well as where to copy the program should it be found missing. + +Cheers! + +~~~powershell +#Import the PowerCLI module +#Add-PSSnapin VMware.VimAutomation.Core +Set-PowerCLIConfiguration -DisplayDeprecationWarnings $false -InvalidCertificateAction Ignore -Confirm:$false + +function getDisk { + $disk = Read-Host "Which disk would you like to extend (i.e., '1')?" + Return $disk +} + +function getDiskSize { + $diskSize = Read-Host "Enter new (total) drive size (in GB)?" + Return $diskSize +} + +function setVMSize($vm, $disk, $diskSize) { + Get-HardDisk -vm $vm | where {$_.Name -eq "$disk"} | Set-HardDisk -CapacityGB $diskSize -ResizeGuestPartition -confirm:$false -ErrorAction:SilentlyContinue +} + +# Connect to vConsole servers +$authenticated = $false; +while (-not $authenticated) { + Try { + Connect-VIServer -Server server1,server2,server3 -ErrorAction Stop | Select-Object -Property Name,IsConnected + $authenticated = $true + } + Catch { + Write-Host "Invalid username or password." -foreground "red" + } +} + +# Check to make sure that the user inputs a valid VM +$validVM = $false +while (-not $validVM) { + $vm = Read-Host "Enter VM name" + Try { + Get-VM -Name $vm | Select-Object -Property Name + $validVM = $true + } + Catch { + Write-Host "Invalid VM name. Try again." -foreground "red" + } +} + +# Get drive letter mappings and store them in the $diskArray array. Data from this +# array can be accessed like so: $diskArray[0].DiskName, or .DriveLetter, or .DiskSize +$diskArray = @() + +if ($vm) { + $VmView = Get-View -ViewType VirtualMachine -Filter @{"Name" = $vm} + foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | where {$_.DeviceInfo.Label -match "SCSI Controller"})) { + foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | where {$_.ControllerKey -eq $VirtualSCSIController.Key})) { + $VirtualDisk = "" | Select DiskName, DiskSize, DriveLetter + $VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label + $VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB + + $LogicalDisks = @() + # Look up path for this disk using WMI. + $thisVirtualDisk = get-wmiobject -class "Win32_DiskDrive" -namespace "root\CIMV2" -computername $vm | where {$_.SCSIBus -eq $VirtualSCSIController.BusNumber -and $_.SCSITargetID -eq $VirtualDiskDevice.UnitNumber} + # Look up partition using WMI. + $Disk2Part = Get-WmiObject Win32_DiskDriveToDiskPartition -computername $vm | Where {$_.Antecedent -eq $thisVirtualDisk.__Path} + foreach ($thisPartition in $Disk2Part) { + #Look up logical drives for that partition using WMI. + $Part2Log = Get-WmiObject -Class Win32_LogicalDiskToPartition -computername $vm | Where {$_.Antecedent -eq $thisPartition.Dependent} + foreach ($thisLogical in $Part2Log) { + if ($thisLogical.Dependent -match "[A-Z]:") { + $LogicalDisks += $matches[0] + } + } + } + $VirtualDisk.DriveLetter = $LogicalDisks + $diskArray += $VirtualDisk + Write-Output $VirtualDisk + } + } +} + +# Check which OS version -- If Server 2003, run extpart. Run diskpart for all others. +If ((Get-VMGuest $vm | Select-Object -Property OSFullName) -like '*2003*') { + $disk = getDisk + $diskSize = getDiskSize + setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize + # If extpart exists, do nothing. Otherwise, copy to C:\UTILS folder on VM. + if (Test-Path "\\$vm\c$\UTILS\extpart.exe"){ + # do nothing + } else { + Copy-Item -Path "S:\SA\PostInstallDoNotModify\Installs\UTILS\extpart.exe" -Destination "\\$vm\c$\UTILS" + Write-Host "Successfully copied 'extpart.exe' to UTILS folder." -foreground "green" + } + $driveLetter = $diskArray[$disk - 1].DriveLetter + $sizeInMB = ((($diskSize)-($diskArray[$disk - 1].DiskSize))*1024) + $script = "C:\UTILS\extpart.exe $driveLetter $sizeInMB" + Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT +} else { + $disk = getDisk + $diskSize = getDiskSize + $driveLetter = $diskArray[$disk - 1].DriveLetter + setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize + $script = "echo select volume = $driveLetter > c:\diskpart.txt && echo rescan >> c:\diskpart.txt && echo extend >> c:\diskpart.txt && diskpart.exe /s c:\diskpart.txt" + Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT +} +~~~ \ No newline at end of file diff --git a/content/post/2015-07-25-hindsight.md b/content/post/2015-07-25-hindsight.md new file mode 100644 index 0000000..20447cc --- /dev/null +++ b/content/post/2015-07-25-hindsight.md @@ -0,0 +1,25 @@ ++++ +title = "Hindsight" +date = "2015-07-15T18:50:20-07:00" ++++ +David Walsh, a popular Web Development blogger I follow, wrote a post a few months ago about the “Imposter Syndrome,” a common feeling that many developers have going into a new job, or even in their current position; a feeling of inadequacy or fear that someone is going to discover them as a “fake,” simply pretending to be competent in their field. As I was reading through his comments, I couldn't help but relate. + +Although I've felt that all-too-often (especially now — I start a new job in a week), I couldn't help but look back with hindsight and feel fairly accomplished as to how far I've come in the past few years. + +As some of you may know, I'm a Mormon (Latter-day Saint). When men of our congregation hit the ripe old age of 18-19, we're expected to head out on a 2-year Missionary trip, teaching others and sharing our faith. During that time, we're expected to set aside all personal endeavors to fully focus on sharing the Gospel and help others. Technology has always been a love of mine. It's been more than just a hobby. Putting all of my technical interests on hold proved really difficult for me. + +Upon returning home after those two years, I jumped head first into my technical degree. I felt *so* inadequate about all of things that I didn't know, and especially outdated by all the latest technologies that had emerged in a rapidly-changing field. + +Where I stand currently, I understand that there's a plethora of information in front of me to learn. But it's fun to look back and actually see how I've progressed. + +It makes me laugh (and slightly embarrassed) to think that I used to build websites, and I never used a single `class=` statement, because my HTML documents consisted entirely of `id=` tags. + +I can't believe that I used to have absolutely no comprehension of what a “backend” was, and how server-side scripting and databases interacted to create full-fledged web applications. I was a sophomore in High School when I first heard the acronym “SQL,” but it wouldn't be years until I even built my first query or understood what SQL was. + +I remember the first time I learned how to insert PHP into my HTML code. My teacher wrote the following code on the board, and it just looked like greek to me. Not only did I not understand what it did, I couldn't even begin to wrap my head around how it worked. + +~~~php + +~~~ + +I could go on forever. Anyway, the point to all of this, is simply to tell myself that I have progressed, and I have learned. Keep it up. Five years from now, you'll look back at yourself again and think about how much farther you've come. \ No newline at end of file diff --git a/content/post/2015-07-31-windows-10-first-impressions.md b/content/post/2015-07-31-windows-10-first-impressions.md new file mode 100644 index 0000000..31b7c4e --- /dev/null +++ b/content/post/2015-07-31-windows-10-first-impressions.md @@ -0,0 +1,37 @@ ++++ +title = 'Windows 10: First Impressions' +date = "2015-07-31T18:50:20-07:00" ++++ +Windows 10 launched yesterday, and so being my naturally-curious self on all the latest and greatest in the tech world, I gave it a go. I got an ISO and started it up in VM Fusion on my Mac. This won't be an in-depth review on all the latest features and all that jazz. There are plenty of Tech Blogs out there that can perform a better review than I ever could. Besides, I'm lazy and don't feel all that interested in doing so, anyway. + +On first boot-up, the very first thing that I said to myself was, “Wow, this feels dark.” It doesn't really feel like a warm, inviting welcome like Windows 7 or Windows 8.1 felt. The default background is a dark, deep blue (which can be changed, obviously), and the taskbar is straight black, without any nifty aero effects or transparency. It just seems very cold to me, something that you might see on a Batman movie. It might be something small and subtle that only I care about, but I feel like having brighter colors make things less intimidating. It almost has a Unix feel. I know that everything these days is turning towards a more flat UI, but what happened to Aero glass? I personally miss that transparent touch on the taskbar and open windows. + +Windows 10 First Impressions + +Also, I feel that the default icon set is absolutely disgusting. “This PC” and “Recycle Bin” look like something from Windows 95. Not a fan. + +Windows 10 First Impressions + +The next thing I couldn't help but notice was that there were many features that seemed very “Mac”-esque. Virtual desktops, a notification panel that slides in from the right side of the screen, and a dedicated button to display all open applications as small panels (similar to how Expose/Mission Control does things). It seems like a poorly done copy cat of some of the features that I love most about OS X. Also, smaller pop-up messages slide in from the right side of the screen whenever new updates have been installed, or when Windows deems itself worthy to let you know that something has changed. Rather than informing you in the top-right corner like on a Mac, Microsoft has discretely moved these notifications to the bottom-right hand corner of the screen, as not to look too much like OS X. + +Generally, after installing a brand new Windows OS, the first thing I tend to do is head over to Windows Update to install drivers. It's kind of ironic, because everything listed under “Important Updates”, I uncheck, and everything listed under “Recommended Updates” are usually checked. I only select the specific hardware drivers that I'm looking for, and those are most often listed under “Recommended.” Shoot me for saying this (especially because my daily job is as a Windows Systems Administrator), but I've never really felt that Windows Updates have helped the security/stability/functionality of a Windows environment, and if anything, have had detrimental effects as far as performance goes. Most often, I decide to change the update settings to “Never install”. When I feel I need a specific update, I have enough technical know-how to manually select what I want. In Windows 10, only two options are listed now: “Automatic” and “Notify to schedule restart.” Sorry, Microsoft, but I like to have a little more control over update settings than that. For novice users, this might be a welcome feature, but I dislike it. + +Windows 10 First Impressions + +Another simple thing that I like to do on any new Windows installation is throw “Computer” on the desktop for easy access to the file system. “Computer” has been renamed to “This PC” in Windows 10 (I'm coming from Windows 7, so I don't remember if this was changed previously in 8.1 or not). Normally, I can simply write-click on “Computer” and choose “Show on Desktop” to have it placed conveniently for me. All mentions of this have been removed. It's small and stupid, but I really appreciated having that in a context menu. Now, you have to go into “Personalize” and then “Themes” and then “Desktop Icon Settings” — an unnecessary number of steps, in my opinion. I know that the “Windows + E” shortcut is available to open the file explorer, but still. + +Windows 10 First Impressions + +I'm sure (and hoping) that it's only because I'm running the OS as a Virtual Machine, and the drivers just aren't quite there yet for Mac, but I just couldn't help but feel that everything that I did had a bit of latency. Clicks weren't as snappy as I would have liked. There seemed to be a delay on just about everything I tried to do. Everything from clicking on the Start menu, to loading basic applications like Notepad. Mind you, that this is all running on a laptop with an SSD also. Windows 7 never seemed to have any sort of lag. It's also very possible that because Windows 10 is 6 years newer than Windows 7, it requires more System Resources than any of its older siblings. It seemed the same to me, though. On a blank desktop, with no active applications, RAM usage was 0.7GB, although CPU utilization seemed a bit high for doing absolutely nothing. + +Windows 10 First Impressions + +Everything thus-far has been negative — So is there anything about Windows 10 that I *do* like? The new start menu. It's wonderful. It's as if Windows 7 and Windows 8 got together and had a baby. This is how the start menu in Windows 8 *should* have been. I welcome the live tiles that automatically update. It gives me quick access to weather and sports at a glance, rather than having to open a full-blown web page. + +Windows 10 First Impressions + +And speaking of Web pages, I've really enjoyed using Edge so far, the new browser to replace Internet Explorer. It's not as different as I had expected, and still has subtle UI designs from IE 11, but it appears that it will do a much better job at rendering some of the latest HTML5/CSS3 properties that were almost completely missing previously. + +Overall, I'm not super impressed. I'm sure it will get better as I use it more and discover where things have been moved to. Most new released from Microsoft are a bit buggy anyway, right out the door. As service packages are released and more user data is sent to Microsoft, thats bound to improve. It is much less intimidating than Windows 8.1 was, that's for sure. I still can't help but notice that everything is geared more and more towards tablet use, though. Microsoft has done a great job at making the OS fairly fluid for use on a standard desktop computer or a device with touch capability. I'm not ready to jump on that bandwagon yet, though. I haven't been very impressed with many of the Windows tablets. + +I'm a hater. Sue me. \ No newline at end of file diff --git a/content/post/2015-09-15-moral-sensitivity.md b/content/post/2015-09-15-moral-sensitivity.md new file mode 100644 index 0000000..4af2663 --- /dev/null +++ b/content/post/2015-09-15-moral-sensitivity.md @@ -0,0 +1,21 @@ ++++ +title = "Moral Sensitivity" +date = "2015-09-15T18:50:20-07:00" ++++ +This has absolutely nothing to do with technology, but it's my blog, so I can do what I want. + +This past Memorial Day weekend, I had the most incredible chance to visit Yellowstone National Park. I’m embarrassed to say that I’ve lived less than two hours away from one of the largest National Parks in the United States for more than three years, and I’ve never made the trip. Once the weather warmed up, and we had a chance to get away for a full day, we gassed up the car, filled the coolers, and headed north. + +As we entered into the park, the beauty was simply overwhelming. Lakes surrounded you as you drove, and the valleys appeared to roll on forever. Wildlife walked right up to your car, so close you could pet them. Waterfalls, thermal pools with rich colors, caves, geysers; every little detail was remarkable to look at, down to the very last tree or blade of grass. + +However, as the day came to a close, I noticed something that I had not anticipated. I felt as if I was becoming more and more desensitized to the beauty that was around me. As we would arrive at a new location, we would get out, walk around, and in essence say, “Oh, look. Another waterfall. Okay! Everyone back in the car. Let’s go!” Driving down the road, we would pass a pasture with hundreds of bison, and barely bother to turn our heads. How could I have become so numb to God’s beautiful creations in only 8 short hours? + +Each and every generation faces new challenges and new problems. I believe the biggest difference between my generation, and previous generations is our moral sensitivity. Or should I say, the lack thereof? + +Talk to any elderly person, and they will have a myriad of stories to tell you about the “good ol’ days.” Cars weren’t made from plastic, the streets were safe after dark, gas was fifty cents a gallon, and people still had manners. Fast-forward fifty years in the future, and it’s not hard to see that our society has declined to moral numbness. + +Miley Cyrus is seen half-naked “twerking” on television, children having children, music artists ‘singing’ violent lyrics, and the media distorting everyone’s definition of “beauty.” Can we go back? Can we rewind to a time when people were responsible, integrious, and had a work ethic? + +When did it all begin? When did our culture as a whole say, “That’s it. We don’t care anymore,” and throw their hands in the air in disgust? It’s fairly easy to see that all of this didn’t happen overnight, but similar to my experience in Yellowstone, where did I begin to lose sight of what was around me? How do we train ourselves to view an oncoming social train wreck, and do something about it? + +The answer is to simply take a break. If we become so engrossed in something for long, those things soon lose their importance. “You never know what you have until you lose it,” a common idiom. I think we should change that to say, “You always know what you have, you just never think you’d lose it.” Here’s to taking a stand for what’s right, and clinging onto what little we still have of that moral compass. And it all starts with one. \ No newline at end of file diff --git a/content/post/2015-11-09-mathesondigital-wordpress-theme.md b/content/post/2015-11-09-mathesondigital-wordpress-theme.md new file mode 100644 index 0000000..a2929ba --- /dev/null +++ b/content/post/2015-11-09-mathesondigital-wordpress-theme.md @@ -0,0 +1,25 @@ ++++ +Description = "" +Tags = [] +date = "2015-11-15T18:50:20-07:00" +title = "MathesonDigital Wordpress Theme" +featuredimage = "img/plane.jpg" ++++ + +So I made a WordPress Theme. + +MathesonDigital Wordpress Theme + +Why? Because I'm sick of everything else on the internet. And that's not to say that there aren't some great themes out there. There are some truly incredible themes. And they do everything. The problem is, however, that I don't need everything. All I need is a simple page that is aesthetically pleasing, and quick. And that's about it. No frills, no fuss, no crazy configuration options, nothing. + +So many of you might be asking then, “Bryce, why not just use a static site generator for your blog?” Good question. Been there, done that. And it was fine. I'm definitely a fan of Jekyll. The speed of a static site is great. For the first little while, I missed the features that came with a back-end language (PHP is my backend language of choice, which means WordPress works great for me), and some of the database features too. But of course, those are the benefits of a static site. I quickly was able to cope with some of the losses through the use of third-party commenting systems, like Disqus, but then I quickly found that I didn't even care about that. You'll notice that on this site, I've completely omitted the comment system. + +But the main reason I ditched the static site generator were the painfully slow load times. My blog used to showcase a lot of my photography, and so I probably had around 50 posts total overall, most of which were photos. Everytime I made a little, itty-bitty change, it would have to regenerate, and take about 3-5 minutes per generation. That might not sound like a lot, but it would have to regenerate each and every time, regardless of how small of a change I made. And I'm one of those “code-and-check-and-code-and-check-some-more” type people. I don't have enough confidence in myself to code lines and lines and lines of code before checking my work. + +Another thing that I really missed also, was the ability to update the blog from anywhere I wanted. All of my static files were on my laptop at home, making it extremely difficult to access. Yeah, people mention options like Dropbox or whatever, but that's just a hassle. WordPress works great for what I need, and because I don't jam-pack my sites full of crappy third-party plugins, it works reasonably well. + +If you like what you see, you're free to use it. You can head over to my GitHub and grab it off of there. As I mention in the Readme, I didn't really design the theme to be “user-friendly”, however. There's no admin panel, there's no fancy color changing options, blech. No, none of that. If I were designing this theme for mass use, or planning on selling it, of course I would have incorporated those features. But I just made it for my purposes, therefore any changes that you'll want to make (aside from small menu adjustments, adding things to the footer, and adding banner images) will have to be done via code. But that should be the ultimate goal anyway, shouldn't it? + +It's decently fast. And it's responsive, too. Google Page Insights only ranks me a 65/100, which I think is a bit of bull, but maybe I'll take the time to go back and fix it at some point. I've been working on this project all weekend, and to be honest, I'm pretty sick of it and just ready to be done. + +So anyway, enough rambling. Here's a cool theme if you want to use it. \ No newline at end of file diff --git a/images/screenshot.png b/images/screenshot.png deleted file mode 100644 index 44e96d7..0000000 Binary files a/images/screenshot.png and /dev/null differ diff --git a/images/tn.png b/images/tn.png deleted file mode 100644 index 887e5e5..0000000 Binary files a/images/tn.png and /dev/null differ diff --git a/layouts/404.html b/layouts/404.html index 0a5b1d6..db0917d 100644 --- a/layouts/404.html +++ b/layouts/404.html @@ -1,7 +1,7 @@ {{ partial "header.html" . }} -
-

404

-
That page doesn't exist!
+
+

404

+
This page doesn't exist.
{{ partial "footer.html" . }} diff --git a/layouts/_default/li.html b/layouts/_default/li.html index bbb1ead..1f3fc0a 100644 --- a/layouts/_default/li.html +++ b/layouts/_default/li.html @@ -1,23 +1,7 @@ -
-
-

{{ .Title }}

- -
-
- {{ .Summary }} -
- {{ if .Truncated }} - - {{ end }} -
+ \ No newline at end of file diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 5dbe531..0e5664e 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,75 +1,75 @@ {{ partial "header.html" . }} {{ $baseurl := .Site.BaseURL }} +
+ +
-
-

{{ .Title }}

- -
-
- {{ .Content }} -
-
- {{ with .Site.Params.disqus }} -
-
- - - {{ end }} -
-
- {{ with .Site.Params.avatar }} - Author Avatar - {{ end }} -
-
- {{ with .Site.Params.author }} -

{{ . }}

- {{ end }} - {{ with .Site.Params.bio }} -
{{ . }}
- {{ end }} -
- {{ with .Site.Params.contact }} - - {{ end }} -
- -
+{{ .Content }} +
+
- -{{ partial "footer.html" . }} + +
+
+{{ with .Site.Params.avatar }}{{ end }} +{{ with .Site.Params.bio }}
{{ . }}
{{ end }} +
+ +
+{{ partial "footer.html" . }} \ No newline at end of file diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html deleted file mode 100644 index a7bcd93..0000000 --- a/layouts/_default/terms.html +++ /dev/null @@ -1,13 +0,0 @@ -{{ partial "header.html" . }} -{{ $baseurl := .Site.BaseURL}} -
-

{{ .Title }}

-
    - {{ $data := .Data }} - {{ range $key, $value := .Data.Terms }} -
  • {{ $key }} {{ len $value }}
  • - {{ end }} -
-
-{{ partial "footer.html" . }} - diff --git a/layouts/index.html b/layouts/index.html index 17de6dc..1f0bd27 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,12 +1,11 @@ {{ partial "header.html" . }} -
+
{{ range $index, $page := .Paginator.Pages }} {{ if ne $index 0 }} -
{{ end }} {{ .Render "li" }} {{ end }} -
-{{ partial "pagination.html" .Paginator }} + {{ partial "pagination.html" .Paginator }} +
{{ partial "footer.html" . }} diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index 63cdbeb..da318e2 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -1,12 +1,21 @@ - -
- +
+
- - + + +
+ + +
+ @@ -20,10 +29,6 @@ ga('send', 'pageview'); {{ end }} - {{ with .Site.Params.mixpanel_api_key }} - - {{ end }} + - + \ No newline at end of file diff --git a/layouts/partials/header.html b/layouts/partials/header.html index ff9c187..81cedd0 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -1,67 +1,113 @@ - + - - - {{ with .Site.Params.themecolor }} - - {{ end }} - - - {{ with .Params.images }}{{ range first 5 . }} - - {{ end }}{{ end }} - {{ if .IsPage }} - - {{ with .Site.Params.facebook }} - - {{ end }} - - {{ range .Params.tags }} - - {{ end }} - {{ else }} - - {{ end }} - - - {{ if ne .URL "/" }} {{ .Title }} · {{ end }} {{ .Site.Title }} - - - - + + {{ if ne .URL "/" }}{{ .Title }} · {{ end }}{{ .Site.Title }} + - - - - + + + {{ if eq .URL "/" }} {{ end }} - -
+ + + +
diff --git a/layouts/partials/link.html b/layouts/partials/link.html deleted file mode 100644 index b925b18..0000000 --- a/layouts/partials/link.html +++ /dev/null @@ -1,47 +0,0 @@ - diff --git a/layouts/partials/pagination.html b/layouts/partials/pagination.html index 474f028..7b6e68c 100644 --- a/layouts/partials/pagination.html +++ b/layouts/partials/pagination.html @@ -1,12 +1,10 @@ - + \ No newline at end of file diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..b7b2d08 --- /dev/null +++ b/public/404.html @@ -0,0 +1,96 @@ + + + + + + 404 Page not found · Allegiant + + + + + + + + + + + +
+ +
+

404

+
This page doesn't exist.
+
+
+
+
+ + +
+ + + + + +
+ + + diff --git a/public/css/font-awesome.min.css b/public/css/font-awesome.min.css new file mode 100644 index 0000000..24fcc04 --- /dev/null +++ b/public/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.3.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css new file mode 100644 index 0000000..1b293aa --- /dev/null +++ b/public/css/style.css @@ -0,0 +1,808 @@ +a.moretag, +h2 a { + text-decoration: none +} +.clear, +.clearfix { + clear: both +} +.author-bio, +footer { + box-sizing: border-box +} +.overlay ul, +ol, +ul { + list-style: none +} +#mainmenu, +#mainmenu li, +#site-title, +.lower label, +.overlay ul li a, +strong { + text-transform: uppercase +} +#copyright, +#nav-below, +#nav-below a, +.footer-column, +.lower label, +.overlay nav, +.post-heading h1, +td { + text-align: center +} +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +embed, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +output, +p, +q, +ruby, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + font: inherit; + padding: 0; + border: 0; + margin: 0; + vertical-align: baseline +} +body, +button, +input, +select, +textarea { + font-family: Lato, Avenir, HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + color: #3A3B3C; + font-weight: 400; + font-size: 1.125rem; + line-height: 1.5; + margin: 0; + padding: 0 +} +blockquote, +q { + quotes: none +} +blockquote:after, +blockquote:before, +q:after, +q:before { + content: ''; + content: none +} +aside, +details, +figcaption, +figure, +header, +hgroup, +menu, +nav, +section { + display: block +} +pre { + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word +} +.alignright { + float: right +} +.alignleft { + float: left +} +h1, +h2, +h3 { + letter-spacing: -.01em; + word-spacing: .02em +} +h1, +h1 a, +h2, +h2 a, +h3, +h3 a { + font-weight: 400 +} +b, +strong { + font-weight: 600 +} +h1 { + font-size: 2.2em +} +h2 { + font-size: 1.7em +} +h2 a { + color: inherit +} +h3, +legend { + font-size: 1.37em +} +h5 { + font-size: 1.03em +} +h6 { + font-size: .95em +} +mark { + background: #FDFFB6 +} +abbr[title] { + border-bottom: 1px dotted #D1D1D1 +} +em { + font-style: italic; +} + +blockquote { + background: #f9f9f9; + border-left: 10px solid #ccc; + margin: 1.5em 10px; + padding: 0.5em 10px; + quotes: "\201C""\201D""\2018""\2019"; +} +blockquote:before { + color: #ccc; + content: open-quote; + font-size: 4em; + line-height: 0.1em; + margin-right: 0.25em; + vertical-align: -0.4em; +} +blockquote p { + display: inline; +} + +hr { + border: 0; + border-bottom: 1px solid #D1D1D1; + margin-top: 3.125rem; + margin-bottom: 3.125rem +} +.post-title { + margin-top: 80px +} +.post-date { + color: #7A7B7C; + font-size: .778em +} +a.moretag { + font-weight: 400 +} +a.moretag, +a.moretag:visited { + color: #009DDC; + border-bottom: 1px solid transparent +} +a.moretag:hover { + text-decoration: underline +} +.smallcode { + font-family: monospace; + padding: .25em .5em; + font-size: inherit; + border-radius: 3px; + background-color: #e5e5e5; + white-space: nowrap; + color: #c7254e +} +#branding, +#mainmenu li, +#site-title a { + font-family: Lato, Avenir, HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif +} +article p { + margin: 1.5rem 0; + color: inherit +} +#content { + width: 700px; + margin: 0 auto 60px +} +footer { + width: 100%; + padding: 20px +} +#footer-container { + width: 1000px; + margin: 0 auto +} +.footer-column { + width: 30%; + float: left; + color: #7A7B7C; + padding: 0 1%; + font-size: .85em +} +#nav-below, +.header { + width: 100%; + position: relative +} +footer .menu-item a { + color: #7A7B7C; + text-decoration: none; + font-weight: 400 +} +#mainmenu li, +#nav-below a { + display: inline-block; + font-weight: 600; + cursor: pointer +} +footer .menu-item a:hover { + color: #fff; + text-decoration: underline +} +#mainmenu a, +#nav-below a, +#site-title a, +.overlay ul li a { + text-decoration: none +} +#branding { + margin-left: 0; + height: 80px; + padding-left: calc(55% - 62.5rem * .5); + padding-right: calc(55% - 62.5rem * .5) +} +#site-title { + margin-top: 25px; + float: left +} +#site-title a { + font-size: 1.2em; + color: #fff +} +#mainmenu { + margin-top: 35px; + float: right +} +#mainmenu a { + color: #fff +} +#mainmenu a:hover { + border-bottom: 1px solid #fff +} +#mainmenu li { + float: left; + margin-right: 5px; + vertical-align: top; + font-size: .667em; + margin-left: 24px +} +.header { + height: 500px; + margin-bottom: 60px +} +.divider { + margin-bottom: -30px; + border: 0; + height: 1px; + background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, .1), rgba(0, 0, 0, 0)) +} +#nav-below { + font-size: .875em; + margin: 90px 0 75px +} +#nav-below a { + width: 80%; + color: #fff; + border: 1px solid #5bb141; + text-shadow: 0 1px 1px #5bb141; + background: #6cbf52; + border-radius: 2px; + padding: 12px 18px; + margin-bottom: 30px +} +#nav-below a, +#nav-below span { + vertical-align: middle; + font-size: .889em +} +#nav-below a:hover { + background: #5bb141 +} +.pagination { + margin: 0 auto; + position: absolute; + bottom: 40px; + left: 45% +} +.older { + float: left +} +.newer { + float: right +} +.post-heading { + height: 350px; + width: 50%; + margin-top: -1%; + margin-left: 25%; + display: table; + z-index: 1 +} +.post-heading h1 { + font-size: 2.2em; + font-weight: 400; + color: #fff; + display: table-cell; + vertical-align: middle +} +.lower, +input { + display: none +} +.author-bio { + margin: 40px 0; + width: 100%; + border: 1px solid #D1D1D1; + border-radius: 2px; + padding: 1.5em +} +.bio-image { + border-radius: 50%; + height: 70px; + width: 70px; + margin-right: 1.2em; + margin-top: .4em; + vertical-align: middle; + float: left +} +.bio-text { + font-size: .778em; + color: #3A3B3C; + overflow: hidden +} +figure strong { + font-size: .85em +} +#mainmenu .current-menu-item a { + border-bottom: 1px #fff solid +} +img { + width: 100%; + height: auto +} + +article img { + box-shadow: 0 0 15px rgba(0,0,0,0.35); +} + +.lower { + float: right; + margin-top: 28px; + border: 1px solid #fff; + padding: 0 .85em; + border-radius: 30px; + color: #fff; + font-weight: 600; + line-height: 25px; +} +.lower:hover { + background: #fff; + color: #008BC3 +} +.lower label { + font-family: inherit; + font-size: .7em +} +.lower label:hover { + cursor: pointer +} +.overlay { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: rgba(0, 0, 0, .9) +} +.overlay label { + width: 58px; + height: 58px; + position: absolute; + right: 20px; + top: 20px; + background: url(../img/cross.png); + z-index: 100; + cursor: pointer +} +.overlay nav { + position: relative; + top: 50%; + height: 60%; + font-size: 54px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%) +} +.overlay ul { + padding: 0; + margin: 0 auto; + display: inline-block; + height: 100%; + position: relative +} +td, +th { + padding: 3px +} +.overlay ul li { + display: block; + height: 20%; + height: calc(100% / 5); + min-height: 54px +} +.overlay ul li a { + font-weight: 300; + display: block; + color: #fff; + -webkit-transition: color .05s; + transition: color .05s; + font-family: inherit; + margin-top: 20px +} +.hljs-strong, +.hljs-strongemphasis, +th { + font-weight: 700 +} +.overlay ul li a:focus, +.overlay ul li a:hover { + color: #849368 +} +.lower~.overlay-hugeinc { + opacity: 0; + visibility: hidden; + -webkit-transition: opacity .05s, visibility 0s .05s; + transition: opacity .05s, visibility 0s .05s +} +#op:checked~.overlay-hugeinc { + opacity: 1; + visibility: visible; + -webkit-transition: opacity .05s; + transition: opacity .05s +} +.overlay-hugeinc nav { + -moz-perspective: 300px +} +.overlay-hugeinc nav ul { + opacity: .4; + -webkit-transform: translateY(-25%) rotateX(35deg); + transform: translateY(-25%) rotateX(35deg); + -webkit-transition: -webkit-transform .25s, opacity .25s; + transition: transform .25s, opacity .25s +} +#op:checked~.overlay-hugeinc nav ul { + opacity: 1; + -webkit-transform: rotateX(0); + transform: rotateX(0); + display: block +} +#op:not(:checked)~.overlay-hugeinc nav ul { + -webkit-transform: translateY(25%) rotateX(-35deg); + transform: translateY(25%) rotateX(-35deg); + display: block +} +.share-icons-body svg:hover, +.share-icons-header svg:hover { + transform: scale(1.25) +} +.share-icons-header svg { + width: 30px; + height: 30px; + fill: #fff +} +.share-icons-footer svg { + width: 30px; + height: 30px; + fill: #7A7B7C; + margin-right: 5px +} +.share-icons-footer svg:hover { + transform: scale(1.25); + fill: #fff +} +.share-icons-body svg { + width: 30px; + height: 30px; + fill: #009DDC; + float: left; + margin-right: 5px +} +#copyright { + width: 100%; + color: #7A7B7C; + font-family: inherit; + font-size: .65em; + margin-top: 40px; + padding-bottom: 40px +} +table { + color: #333; + font-family: Helvetica, Arial, sans-serif; + width: 100%; + border-collapse: collapse; + border-spacing: 0 +} +td, +th { + border: 1px solid transparent; + height: 30px; + transition: all .3s +} +th { + background: #DFDFDF +} +td { + background: #FAFAFA +} +tr:nth-child(even) td { + background: #F1F1F1 +} +tr:nth-child(odd) td { + background: #FEFEFE +} +tr td:hover { + background: #069; + color: #FFF +} +.hljs { + display: block; + padding: .5em; + background: #23241f +} +.css .hljs-function .hljs-preprocessor, +.css .hljs-rules, +.css .hljs-value, +.hljs, +.hljs-pragma, +.hljs-tag { + color: #f8f8f2 +} +.hljs-emphasis, +.hljs-strong, +.hljs-strongemphasis { + color: #a8a8a2 +} +.alias .hljs-keyword, +.hljs-blockquote, +.hljs-bullet, +.hljs-hexcolor, +.hljs-horizontal_rule, +.hljs-literal, +.hljs-number, +.hljs-regexp { + color: #ae81ff +} +.css .hljs-class, +.hljs-class .hljs-title:last-child, +.hljs-code, +.hljs-tag .hljs-value, +.hljs-title { + color: #a6e22e +} +.hljs-link_url { + font-size: 80% +} +.hljs-class .hljs-title:last-child, +.hljs-emphasis, +.hljs-strongemphasis { + font-style: italic +} +.alias .hljs-keyword:first-child, +.clojure .hljs-built_in, +.css .hljs-important, +.css .hljs-tag, +.css .unit, +.hljs-attribute, +.hljs-change, +.hljs-flow, +.hljs-function, +.hljs-header, +.hljs-keyword, +.hljs-symbol, +.hljs-symbol .hljs-string, +.hljs-tag .hljs-title, +.hljs-value, +.hljs-winutils, +.lisp .hljs-title, +.nginx .hljs-title, +.tex .hljs-special { + color: #F92672 +} +.css .hljs-attribute, +.hljs-class .hljs-keyword:first-child, +.hljs-constant, +.hljs-function .hljs-keyword { + color: #66d9ef +} +.hljs-class .hljs-title, +.hljs-params, +.hljs-variable { + color: #f8f8f2 +} +.apache .hljs-cbracket, +.apache .hljs-tag, +.css .hljs-id, +.django .hljs-filter .hljs-argument, +.django .hljs-template_tag, +.django .hljs-variable, +.haskell .hljs-type, +.hljs-addition, +.hljs-attr_selector, +.hljs-built_in, +.hljs-envvar, +.hljs-link_label, +.hljs-link_url, +.hljs-prompt, +.hljs-pseudo, +.hljs-stream, +.hljs-string, +.hljs-subst, +.ruby .hljs-class .hljs-parent, +.smalltalk .hljs-array, +.smalltalk .hljs-class, +.smalltalk .hljs-localvars, +.sql .hljs-aggregate, +.tex .hljs-command { + color: #e6db74 +} +.apache .hljs-sqbracket, +.hljs-comment, +.hljs-deletion, +.hljs-doctype, +.hljs-javadoc, +.hljs-pi, +.hljs-shebang, +.hljs-template_comment, +.java .hljs-annotation, +.python .hljs-decorator, +.tex .hljs-formula { + color: #75715e +} +.coffeescript .javascript, +.javascript .xml, +.php .xml, +.tex .hljs-formula, +.xml .css, +.xml .hljs-cdata, +.xml .javascript, +.xml .php, +.xml .vbscript { + opacity: .5 +} +@media (max-width: 1000px) { + #footer-container { + width: 95%; + text-align: center + } +} +@media (max-width: 700px) { + .post-heading h1, + h2 { + font-size: 1.2em + } + #branding, + #content { + padding: 0 5%; + box-sizing: border-box + } + #content { + width: 100% + } + .header { + height: 300px + } + .lower { + display: block + } + #mainmenu, + .pagination { + display: none + } + .post-heading { + height: 180px; + width: 50%; + margin-top: -1%; + margin-left: 25%; + display: table + } + #branding, + .footer-column { + width: 100% + } + .share-icons-header svg { + margin-right: 5px + } + .share-icons-body svg { + margin-right: 10px + } + #nav-below { + margin-bottom: 30px + } + article p { + font-size: .85em + } +} \ No newline at end of file diff --git a/public/fonts/FontAwesome.otf b/public/fonts/FontAwesome.otf new file mode 100644 index 0000000..f7936cc Binary files /dev/null and b/public/fonts/FontAwesome.otf differ diff --git a/public/fonts/fontawesome-webfont.eot b/public/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..33b2bb8 Binary files /dev/null and b/public/fonts/fontawesome-webfont.eot differ diff --git a/public/fonts/fontawesome-webfont.svg b/public/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..1ee89d4 --- /dev/null +++ b/public/fonts/fontawesome-webfont.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/fonts/fontawesome-webfont.ttf b/public/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..ed9372f Binary files /dev/null and b/public/fonts/fontawesome-webfont.ttf differ diff --git a/public/fonts/fontawesome-webfont.woff b/public/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..8b280b9 Binary files /dev/null and b/public/fonts/fontawesome-webfont.woff differ diff --git a/public/fonts/fontawesome-webfont.woff2 b/public/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..3311d58 Binary files /dev/null and b/public/fonts/fontawesome-webfont.woff2 differ diff --git a/public/img/apple-touch-icon.jpg b/public/img/apple-touch-icon.jpg new file mode 100644 index 0000000..c104393 Binary files /dev/null and b/public/img/apple-touch-icon.jpg differ diff --git a/public/img/apple-touch-icon.png b/public/img/apple-touch-icon.png new file mode 100644 index 0000000..d711caa Binary files /dev/null and b/public/img/apple-touch-icon.png differ diff --git a/public/img/avatar.jpg b/public/img/avatar.jpg new file mode 100644 index 0000000..bbf6780 Binary files /dev/null and b/public/img/avatar.jpg differ diff --git a/public/img/cross.png b/public/img/cross.png new file mode 100755 index 0000000..aa9f646 Binary files /dev/null and b/public/img/cross.png differ diff --git a/public/img/favicon.ico b/public/img/favicon.ico new file mode 100644 index 0000000..fd6eb11 Binary files /dev/null and b/public/img/favicon.ico differ diff --git a/public/img/plane.jpg b/public/img/plane.jpg new file mode 100644 index 0000000..8db139c Binary files /dev/null and b/public/img/plane.jpg differ diff --git a/public/img/post_images/antivirus_1.png b/public/img/post_images/antivirus_1.png new file mode 100644 index 0000000..fa5b83c Binary files /dev/null and b/public/img/post_images/antivirus_1.png differ diff --git a/public/img/post_images/antivirus_2.jpg b/public/img/post_images/antivirus_2.jpg new file mode 100644 index 0000000..2020088 Binary files /dev/null and b/public/img/post_images/antivirus_2.jpg differ diff --git a/public/img/post_images/antivirus_3.jpg b/public/img/post_images/antivirus_3.jpg new file mode 100644 index 0000000..aff9777 Binary files /dev/null and b/public/img/post_images/antivirus_3.jpg differ diff --git a/public/img/post_images/antivirus_4.jpg b/public/img/post_images/antivirus_4.jpg new file mode 100644 index 0000000..2838cdc Binary files /dev/null and b/public/img/post_images/antivirus_4.jpg differ diff --git a/public/img/post_images/exif1.png b/public/img/post_images/exif1.png new file mode 100644 index 0000000..b8e026a Binary files /dev/null and b/public/img/post_images/exif1.png differ diff --git a/public/img/post_images/exif2.png b/public/img/post_images/exif2.png new file mode 100644 index 0000000..745a6cf Binary files /dev/null and b/public/img/post_images/exif2.png differ diff --git a/public/img/post_images/exif3.png b/public/img/post_images/exif3.png new file mode 100644 index 0000000..25f637a Binary files /dev/null and b/public/img/post_images/exif3.png differ diff --git a/public/img/post_images/exif4.png b/public/img/post_images/exif4.png new file mode 100644 index 0000000..631afd9 Binary files /dev/null and b/public/img/post_images/exif4.png differ diff --git a/public/img/post_images/exif5.png b/public/img/post_images/exif5.png new file mode 100644 index 0000000..1a94646 Binary files /dev/null and b/public/img/post_images/exif5.png differ diff --git a/public/img/post_images/exif6.png b/public/img/post_images/exif6.png new file mode 100644 index 0000000..f92158e Binary files /dev/null and b/public/img/post_images/exif6.png differ diff --git a/public/img/post_images/exif7.png b/public/img/post_images/exif7.png new file mode 100644 index 0000000..db2bb7a Binary files /dev/null and b/public/img/post_images/exif7.png differ diff --git a/public/img/post_images/guicalculator.png b/public/img/post_images/guicalculator.png new file mode 100644 index 0000000..d46a9f7 Binary files /dev/null and b/public/img/post_images/guicalculator.png differ diff --git a/public/img/post_images/joomla.png b/public/img/post_images/joomla.png new file mode 100644 index 0000000..8a17ac7 Binary files /dev/null and b/public/img/post_images/joomla.png differ diff --git a/public/img/post_images/mathesondigital-wordpress.png b/public/img/post_images/mathesondigital-wordpress.png new file mode 100644 index 0000000..0667a37 Binary files /dev/null and b/public/img/post_images/mathesondigital-wordpress.png differ diff --git a/public/img/post_images/permalinks_wordpress.png b/public/img/post_images/permalinks_wordpress.png new file mode 100644 index 0000000..0e5be65 Binary files /dev/null and b/public/img/post_images/permalinks_wordpress.png differ diff --git a/public/img/post_images/pingdom-speed-results.jpg b/public/img/post_images/pingdom-speed-results.jpg new file mode 100644 index 0000000..1f5b07c Binary files /dev/null and b/public/img/post_images/pingdom-speed-results.jpg differ diff --git a/public/img/post_images/raid1.png b/public/img/post_images/raid1.png new file mode 100644 index 0000000..55e1022 Binary files /dev/null and b/public/img/post_images/raid1.png differ diff --git a/public/img/post_images/raid2.png b/public/img/post_images/raid2.png new file mode 100644 index 0000000..777db9f Binary files /dev/null and b/public/img/post_images/raid2.png differ diff --git a/public/img/post_images/raid3.png b/public/img/post_images/raid3.png new file mode 100644 index 0000000..3499a11 Binary files /dev/null and b/public/img/post_images/raid3.png differ diff --git a/public/img/post_images/raid4.png b/public/img/post_images/raid4.png new file mode 100644 index 0000000..773806c Binary files /dev/null and b/public/img/post_images/raid4.png differ diff --git a/public/img/post_images/record1.png b/public/img/post_images/record1.png new file mode 100644 index 0000000..b4ab3c6 Binary files /dev/null and b/public/img/post_images/record1.png differ diff --git a/public/img/post_images/record2.png b/public/img/post_images/record2.png new file mode 100644 index 0000000..e3f0cc2 Binary files /dev/null and b/public/img/post_images/record2.png differ diff --git a/public/img/post_images/record3.png b/public/img/post_images/record3.png new file mode 100644 index 0000000..68fde2c Binary files /dev/null and b/public/img/post_images/record3.png differ diff --git a/public/img/post_images/sparks_fly.jpg b/public/img/post_images/sparks_fly.jpg new file mode 100644 index 0000000..c728f9f Binary files /dev/null and b/public/img/post_images/sparks_fly.jpg differ diff --git a/public/img/post_images/tmobile.jpg b/public/img/post_images/tmobile.jpg new file mode 100644 index 0000000..83035b4 Binary files /dev/null and b/public/img/post_images/tmobile.jpg differ diff --git a/public/img/post_images/visualformbuilder1.png b/public/img/post_images/visualformbuilder1.png new file mode 100644 index 0000000..893016c Binary files /dev/null and b/public/img/post_images/visualformbuilder1.png differ diff --git a/public/img/post_images/visualformbuilder2.png b/public/img/post_images/visualformbuilder2.png new file mode 100644 index 0000000..f8e1d13 Binary files /dev/null and b/public/img/post_images/visualformbuilder2.png differ diff --git a/public/img/post_images/windows-10-first-impressions-1.png b/public/img/post_images/windows-10-first-impressions-1.png new file mode 100644 index 0000000..4e96477 Binary files /dev/null and b/public/img/post_images/windows-10-first-impressions-1.png differ diff --git a/public/img/post_images/windows-10-first-impressions-2.png b/public/img/post_images/windows-10-first-impressions-2.png new file mode 100644 index 0000000..651cefa Binary files /dev/null and b/public/img/post_images/windows-10-first-impressions-2.png differ diff --git a/public/img/post_images/windows-10-first-impressions-3.png b/public/img/post_images/windows-10-first-impressions-3.png new file mode 100644 index 0000000..71a78bd Binary files /dev/null and b/public/img/post_images/windows-10-first-impressions-3.png differ diff --git a/public/img/post_images/windows-10-first-impressions-4.png b/public/img/post_images/windows-10-first-impressions-4.png new file mode 100644 index 0000000..e4b2124 Binary files /dev/null and b/public/img/post_images/windows-10-first-impressions-4.png differ diff --git a/public/img/post_images/windows-10-first-impressions-5.png b/public/img/post_images/windows-10-first-impressions-5.png new file mode 100644 index 0000000..4e07130 Binary files /dev/null and b/public/img/post_images/windows-10-first-impressions-5.png differ diff --git a/public/img/post_images/windows-10-first-impressions-6.png b/public/img/post_images/windows-10-first-impressions-6.png new file mode 100644 index 0000000..8fb32f7 Binary files /dev/null and b/public/img/post_images/windows-10-first-impressions-6.png differ diff --git a/public/img/post_images/wordpress-logo.png b/public/img/post_images/wordpress-logo.png new file mode 100644 index 0000000..9a9aac0 Binary files /dev/null and b/public/img/post_images/wordpress-logo.png differ diff --git a/public/img/texture.png b/public/img/texture.png new file mode 100644 index 0000000..89c5f03 Binary files /dev/null and b/public/img/texture.png differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..98e40ff --- /dev/null +++ b/public/index.html @@ -0,0 +1,204 @@ + + + + + + Allegiant + + + + + + + + + + + + + +
+ +
+ + +
+

MathesonDigital Wordpress Theme

+ +

So I made a WordPress Theme. Why? Because I’m sick of everything else on the internet. And that’s not to say that there aren’t some great themes out there. There are some truly incredible themes. And they do everything. The problem is, however, that I don’t need everything. All I need is a simple page that is aesthetically pleasing, and quick. And that’s about it. No frills, no fuss, no crazy configuration options, nothing.

+ Continue reading ↦ +
+
+ + + +
+

Moral Sensitivity

+ +

This has absolutely nothing to do with technology, but it’s my blog, so I can do what I want. This past Memorial Day weekend, I had the most incredible chance to visit Yellowstone National Park. I’m embarrassed to say that I’ve lived less than two hours away from one of the largest National Parks in the United States for more than three years, and I’ve never made the trip. Once the weather warmed up, and we had a chance to get away for a full day, we gassed up the car, filled the coolers, and headed north.

+ Continue reading ↦ +
+
+ + + +
+

Windows 10: First Impressions

+ +

Windows 10 launched yesterday, and so being my naturally-curious self on all the latest and greatest in the tech world, I gave it a go. I got an ISO and started it up in VM Fusion on my Mac. This won’t be an in-depth review on all the latest features and all that jazz. There are plenty of Tech Blogs out there that can perform a better review than I ever could.

+ Continue reading ↦ +
+
+ + + +
+

Hindsight

+ +

David Walsh, a popular Web Development blogger I follow, wrote a post a few months ago about the “Imposter Syndrome,” a common feeling that many developers have going into a new job, or even in their current position; a feeling of inadequacy or fear that someone is going to discover them as a “fake,” simply pretending to be competent in their field. As I was reading through his comments, I couldn’t help but relate.

+ Continue reading ↦ +
+
+ + + +
+

VMware Disk Extend Powershell Script

+ +

About a month ago, I began working at Intermountain Healthcare, here in Utah, as a Systems Administrator. We have a bunch of monitoring software, one of which is called “Spectrum”. It searches for hardware errors or any other faults and then reports them to us. One of the most common reports that we find is that “C: 90% usage”, or something similar. Because the majority of the servers that we run are virtual, with a thin disk setup, they have relatively small drives (some starting as small as 25GB).

+ Continue reading ↦ +
+
+ + + +
+

Command Line Essentials

+ +

It wasn’t too long ago that I was terrified of the terminal. It’s pretty daunting to be staring at a blank screen with a blinking cursor taunting you. Want to know something? It’s not as scary as you might think. It would take years to master the command line, so don’t expect to know everything all at once. Everyday, try and find little ways to slowly blend the terminal with basic tasks.

+ Continue reading ↦ +
+
+ + + +
+

I love to Grunt and Gulp

+ +

(Happy Valentine’s Day, ya’ll. Get off the computer and go buy something nice for your woman.) Sometimes I like to pretend that I know stuff, when I really don’t. Gulp is one of those things. :) I need to get better at finding solutions to a lot of the repetitive tasks that I do on a daily basis. Up until now, let’s say I was about to push some production code to the web.

+ Continue reading ↦ +
+
+ + + +
+

Remove .DS_Store from ZIP Files

+ +

At work this week, I had to download a bunch of compressed XML files, delete some duplicate files contained therein, recompress the files, and then reupload them to a server. The problem, however, is that whenever I tried to upload the files, I got a strange server error. After some trial and error, and some deep examination, I found that the hidden file “.DS_Store” was causing the server error issue. When I removed the hidden “.DS_Store” file, I had no more issues.

+ Continue reading ↦ +
+
+ + + +
+

Static Site (Database Free) Contact Form

+ +

Although my site is always a work in progress, (I’ve still got plenty of things I need to do on it), I feel like it’s in the final stages. Recently, I was trying to add the finishing touches by implementing a contact form. Mostly, to combat spam. I didn’t want to throw my direct e-mail address out there, because that’s just asking for an inbox full of viagra ads. The thing that I wanted to completely avoid was having any server-side (PHP) scripting, or databases.

+ Continue reading ↦ +
+
+ + + +
+

5 Things to Stop Doing in 2015

+ +

It seems that a year has ended, and new year resolutions are all on the rage again. Yeah, there’s those typical ones such as joining a gym and getting in shape (although, I really think I might do it this year), etc. Here are five things I’d like to quit doing this year. 1. Quit checking my Instagram likes Yeah, it’s stupid, but really. I mean it. We all do it.

+ Continue reading ↦ +
+
+ + +
+
+
+
+ + +
+ + + + + + + + + diff --git a/public/index.xml b/public/index.xml new file mode 100644 index 0000000..02eb018 --- /dev/null +++ b/public/index.xml @@ -0,0 +1,929 @@ + + + + Allegiant + http://localhost:1313/brycematheson.io/ + Recent content on Allegiant + Hugo -- gohugo.io + en-us + &copy; Allegiant. All Rights Reserved. + Sun, 15 Nov 2015 18:50:20 -0700 + + + + MathesonDigital Wordpress Theme + http://localhost:1313/brycematheson.io/post/2015-11-09-mathesondigital-wordpress-theme/ + Sun, 15 Nov 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-11-09-mathesondigital-wordpress-theme/ + <p>So I made a WordPress Theme.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/mathesondigital-wordpress.png" alt="MathesonDigital Wordpress Theme" /></p> + +<p>Why? Because I&rsquo;m sick of everything else on the internet. And that&rsquo;s not to say that there aren&rsquo;t some great themes out there. There are some truly incredible themes. And they do everything. The problem is, however, that I don&rsquo;t need everything. All I need is a simple page that is aesthetically pleasing, and quick. And that&rsquo;s about it. No frills, no fuss, no crazy configuration options, nothing.</p> + +<p>So many of you might be asking then, &#8220;Bryce, why not just use a static site generator for your blog?&#8221; Good question. Been there, done that. And it was fine. I&rsquo;m definitely a fan of Jekyll. The speed of a static site is great. For the first little while, I missed the features that came with a back-end language (PHP is my backend language of choice, which means WordPress works great for me), and some of the database features too. But of course, those are the benefits of a static site. I quickly was able to cope with some of the losses through the use of third-party commenting systems, like <a href="https://disqus.com/" target="_blank">Disqus</a>, but then I quickly found that I didn&rsquo;t even care about that. You&rsquo;ll notice that on this site, I&rsquo;ve completely omitted the comment system.</p> + +<p>But the main reason I ditched the static site generator were the painfully slow load times. My blog used to showcase a lot of my photography, and so I probably had around 50 posts total overall, most of which were photos. Everytime I made a little, itty-bitty change, it would have to regenerate, and take about 3-5 minutes per generation. That might not sound like a lot, but it would have to regenerate each and every time, regardless of how small of a change I made. And I&rsquo;m one of those &#8220;code-and-check-and-code-and-check-some-more&#8221; type people. I don&rsquo;t have enough confidence in myself to code lines and lines and lines of code before checking my work.</p> + +<p>Another thing that I really missed also, was the ability to update the blog from anywhere I wanted. All of my static files were on my laptop at home, making it extremely difficult to access. Yeah, people mention options like Dropbox or whatever, but that&rsquo;s just a hassle. WordPress works great for what I need, and because I don&rsquo;t jam-pack my sites full of crappy third-party plugins, it works reasonably well.</p> + +<p>If you like what you see, you&rsquo;re free to use it. You can <a href="https://github.com/brycematheson/mathesondigital-wordpress" target="_blank">head over to my GitHub and grab it off of there</a>. As I mention in the Readme, I didn&rsquo;t really design the theme to be &#8220;user-friendly&#8221;, however. There&rsquo;s no admin panel, there&rsquo;s no fancy color changing options, blech. No, none of that. If I were designing this theme for mass use, or planning on selling it, of course I would have incorporated those features. But I just made it for my purposes, therefore any changes that you&rsquo;ll want to make (aside from small menu adjustments, adding things to the footer, and adding banner images) will have to be done via code. But that should be the ultimate goal anyway, shouldn&rsquo;t it?</p> + +<p>It&rsquo;s decently fast. And it&rsquo;s responsive, too. Google Page Insights only ranks me a <sup>65</sup>&frasl;<sub>100</sub>, which I think is a bit of bull, but maybe I&rsquo;ll take the time to go back and fix it at some point. I&rsquo;ve been working on this project all weekend, and to be honest, I&rsquo;m pretty sick of it and just ready to be done.</p> + +<p>So anyway, enough rambling. Here&rsquo;s a cool theme if you want to use it.</p> + + + + + Moral Sensitivity + http://localhost:1313/brycematheson.io/post/2015-09-15-moral-sensitivity/ + Tue, 15 Sep 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-09-15-moral-sensitivity/ + <p>This has absolutely nothing to do with technology, but it&rsquo;s my blog, so I can do what I want.</p> + +<p>This past Memorial Day weekend, I had the most incredible chance to visit Yellowstone National Park. I’m embarrassed to say that I’ve lived less than two hours away from one of the largest National Parks in the United States for more than three years, and I’ve never made the trip. Once the weather warmed up, and we had a chance to get away for a full day, we gassed up the car, filled the coolers, and headed north.</p> + +<p>As we entered into the park, the beauty was simply overwhelming. Lakes surrounded you as you drove, and the valleys appeared to roll on forever. Wildlife walked right up to your car, so close you could pet them. Waterfalls, thermal pools with rich colors, caves, geysers; every little detail was remarkable to look at, down to the very last tree or blade of grass.</p> + +<p>However, as the day came to a close, I noticed something that I had not anticipated. I felt as if I was becoming more and more desensitized to the beauty that was around me. As we would arrive at a new location, we would get out, walk around, and in essence say, “Oh, look. Another waterfall. Okay! Everyone back in the car. Let’s go!” Driving down the road, we would pass a pasture with hundreds of bison, and barely bother to turn our heads. How could I have become so numb to God’s beautiful creations in only 8 short hours?</p> + +<p>Each and every generation faces new challenges and new problems. I believe the biggest difference between my generation, and previous generations is our moral sensitivity. Or should I say, the lack thereof?</p> + +<p>Talk to any elderly person, and they will have a myriad of stories to tell you about the “good ol’ days.” Cars weren’t made from plastic, the streets were safe after dark, gas was fifty cents a gallon, and people still had manners. Fast-forward fifty years in the future, and it’s not hard to see that our society has declined to moral numbness.</p> + +<p>Miley Cyrus is seen half-naked “twerking” on television, children having children, music artists ‘singing’ violent lyrics, and the media distorting everyone’s definition of “beauty.” Can we go back? Can we rewind to a time when people were responsible, integrious, and had a work ethic?</p> + +<p>When did it all begin? When did our culture as a whole say, “That’s it. We don’t care anymore,” and throw their hands in the air in disgust? It’s fairly easy to see that all of this didn’t happen overnight, but similar to my experience in Yellowstone, where did I begin to lose sight of what was around me? How do we train ourselves to view an oncoming social train wreck, and do something about it?</p> + +<p>The answer is to simply take a break. If we become so engrossed in something for long, those things soon lose their importance. “You never know what you have until you lose it,” a common idiom. I think we should change that to say, “You always know what you have, you just never think you’d lose it.” Here’s to taking a stand for what’s right, and clinging onto what little we still have of that moral compass. And it all starts with one.</p> + + + + + Windows 10: First Impressions + http://localhost:1313/brycematheson.io/post/2015-07-31-windows-10-first-impressions/ + Fri, 31 Jul 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-07-31-windows-10-first-impressions/ + <p>Windows 10 launched yesterday, and so being my naturally-curious self on all the latest and greatest in the tech world, I gave it a go. I got an ISO and started it up in VM Fusion on my Mac. This won&rsquo;t be an in-depth review on all the latest features and all that jazz. There are plenty of Tech Blogs out there that can perform a <a href="http://www.cnet.com/products/microsoft-windows-10/" target="_blank">better review</a> than I ever could. Besides, I&rsquo;m lazy and don&rsquo;t feel all that interested in doing so, anyway.</p> + +<p>On first boot-up, the very first thing that I said to myself was, &#8220;Wow, this feels dark.&#8221; It doesn&rsquo;t really feel like a warm, inviting welcome like Windows 7 or Windows 8.1 felt. The default background is a dark, deep blue (which can be changed, obviously), and the taskbar is straight black, without any nifty aero effects or transparency. It just seems very cold to me, something that you might see on a Batman movie. It might be something small and subtle that only I care about, but I feel like having brighter colors make things less intimidating. It almost has a Unix feel. I know that everything these days is turning towards a more flat UI, but what happened to Aero glass? I personally miss that transparent touch on the taskbar and open windows.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-1.png" alt="Windows 10 First Impressions" /></p> + +<p>Also, I feel that the default icon set is absolutely disgusting. &#8220;This PC&#8221; and &#8220;Recycle Bin&#8221; look like something from Windows 95. Not a fan.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-2.png" alt="Windows 10 First Impressions" /></p> + +<p>The next thing I couldn&rsquo;t help but notice was that there were many features that seemed very &#8220;Mac&#8221;-esque. Virtual desktops, a notification panel that slides in from the right side of the screen, and a dedicated button to display all open applications as small panels (similar to how Expose/Mission Control does things). It seems like a poorly done copy cat of some of the features that I love most about OS X. Also, smaller pop-up messages slide in from the right side of the screen whenever new updates have been installed, or when Windows deems itself worthy to let you know that something has changed. Rather than informing you in the top-right corner like on a Mac, Microsoft has discretely moved these notifications to the bottom-right hand corner of the screen, as not to look too much like OS X.</p> + +<p>Generally, after installing a brand new Windows OS, the first thing I tend to do is head over to Windows Update to install drivers. It&rsquo;s kind of ironic, because everything listed under &#8220;Important Updates&#8221;, I uncheck, and everything listed under &#8220;Recommended Updates&#8221; are usually checked. I only select the specific hardware drivers that I&rsquo;m looking for, and those are most often listed under &#8220;Recommended.&#8221; Shoot me for saying this (especially because my daily job is as a Windows Systems Administrator), but I&rsquo;ve never really felt that Windows Updates have helped the security/stability/functionality of a Windows environment, and if anything, have had detrimental effects as far as performance goes. Most often, I decide to change the update settings to &#8220;Never install&#8221;. When I feel I need a specific update, I have enough technical know-how to manually select what I want. In Windows 10, only two options are listed now: &#8220;Automatic&#8221; and &#8220;Notify to schedule restart.&#8221; Sorry, Microsoft, but I like to have a little more control over update settings than that. For novice users, this might be a welcome feature, but I dislike it.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-3.png" alt="Windows 10 First Impressions" /></p> + +<p>Another simple thing that I like to do on any new Windows installation is throw &#8220;Computer&#8221; on the desktop for easy access to the file system. &#8220;Computer&#8221; has been renamed to &#8220;This PC&#8221; in Windows 10 (I&rsquo;m coming from Windows 7, so I don&rsquo;t remember if this was changed previously in 8.1 or not). Normally, I can simply write-click on &#8220;Computer&#8221; and choose &#8220;Show on Desktop&#8221; to have it placed conveniently for me. All mentions of this have been removed. It&rsquo;s small and stupid, but I really appreciated having that in a context menu. Now, you have to go into &#8220;Personalize&#8221; and then &#8220;Themes&#8221; and then &#8220;Desktop Icon Settings&#8221; &#8212; an unnecessary number of steps, in my opinion. I know that the &#8220;Windows + E&#8221; shortcut is available to open the file explorer, but still.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-4.png" alt="Windows 10 First Impressions" /></p> + +<p>I&rsquo;m sure (and hoping) that it&rsquo;s only because I&rsquo;m running the OS as a Virtual Machine, and the drivers just aren&rsquo;t quite there yet for Mac, but I just couldn&rsquo;t help but feel that everything that I did had a bit of latency. Clicks weren&rsquo;t as snappy as I would have liked. There seemed to be a delay on just about everything I tried to do. Everything from clicking on the Start menu, to loading basic applications like Notepad. Mind you, that this is all running on a laptop with an SSD also. Windows 7 never seemed to have any sort of lag. It&rsquo;s also very possible that because Windows 10 is 6 years newer than Windows 7, it requires more System Resources than any of its older siblings. It seemed the same to me, though. On a blank desktop, with no active applications, RAM usage was 0.7GB, although CPU utilization seemed a bit high for doing absolutely nothing.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-5.png" alt="Windows 10 First Impressions" /></p> + +<p>Everything thus-far has been negative &#8212; So is there anything about Windows 10 that I <em>do</em> like? The new start menu. It&rsquo;s wonderful. It&rsquo;s as if Windows 7 and Windows 8 got together and had a baby. This is how the start menu in Windows 8 <em>should</em> have been. I welcome the live tiles that automatically update. It gives me quick access to weather and sports at a glance, rather than having to open a full-blown web page.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-6.png" alt="Windows 10 First Impressions" /></p> + +<p>And speaking of Web pages, I&rsquo;ve really enjoyed using Edge so far, the new browser to replace Internet Explorer. It&rsquo;s not as different as I had expected, and still has subtle UI designs from IE 11, but it appears that it will do a much better job at rendering some of the latest HTML5/CSS3 properties that were almost completely missing previously.</p> + +<p>Overall, I&rsquo;m not super impressed. I&rsquo;m sure it will get better as I use it more and discover where things have been moved to. Most new released from Microsoft are a bit buggy anyway, right out the door. As service packages are released and more user data is sent to Microsoft, thats bound to improve. It is much less intimidating than Windows 8.1 was, that&rsquo;s for sure. I still can&rsquo;t help but notice that everything is geared more and more towards tablet use, though. Microsoft has done a great job at making the OS fairly fluid for use on a standard desktop computer or a device with touch capability. I&rsquo;m not ready to jump on that bandwagon yet, though. I haven&rsquo;t been very impressed with many of the Windows tablets.</p> + +<p>I&rsquo;m a hater. Sue me.</p> + + + + + Hindsight + http://localhost:1313/brycematheson.io/post/2015-07-25-hindsight/ + Wed, 15 Jul 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-07-25-hindsight/ + <p>David Walsh, a popular Web Development blogger I follow, <a href="http://davidwalsh.name/impostor-syndrome" target="_blank">wrote a post a few months ago about the &#8220;Imposter Syndrome,&#8221;</a> a common feeling that many developers have going into a new job, or even in their current position; a feeling of inadequacy or fear that someone is going to discover them as a &#8220;fake,&#8221; simply pretending to be competent in their field. As I was reading through his comments, I couldn&rsquo;t help but relate.</p> + +<p>Although I&rsquo;ve felt that all-too-often (especially now &#8212; I start a new job in a week), I couldn&rsquo;t help but look back with hindsight and feel fairly accomplished as to how far I&rsquo;ve come in the past few years.</p> + +<p>As some of you may know, <a href="http://mormon.org" target="_blank">I&rsquo;m a Mormon</a> (Latter-day Saint). When men of our congregation hit the ripe old age of 18-19, we&rsquo;re expected to head out on a 2-year Missionary trip, teaching others and sharing our faith. During that time, we&rsquo;re expected to set aside all personal endeavors to fully focus on sharing the Gospel and help others. Technology has always been a love of mine. It&rsquo;s been more than just a hobby. Putting all of my technical interests on hold proved really difficult for me.</p> + +<p>Upon returning home after those two years, I jumped head first into my technical degree. I felt *so* inadequate about all of things that I didn&rsquo;t know, and especially outdated by all the latest technologies that had emerged in a rapidly-changing field.</p> + +<p>Where I stand currently, I understand that there&rsquo;s a plethora of information in front of me to learn. But it&rsquo;s fun to look back and actually see how I&rsquo;ve progressed.</p> + +<p>It makes me laugh (and slightly embarrassed) to think that I used to build websites, and I never used a single <code>class=</code> statement, because my HTML documents consisted entirely of <code>id=</code> tags.</p> + +<p>I can&rsquo;t believe that I used to have absolutely no comprehension of what a &#8220;backend&#8221; was, and how server-side scripting and databases interacted to create full-fledged web applications. I was a sophomore in High School when I first heard the acronym &#8220;SQL,&#8221; but it wouldn&rsquo;t be years until I even built my first query or understood what SQL was.</p> + +<p>I remember the first time I learned how to insert PHP into my HTML code. My teacher wrote the following code on the board, and it just looked like greek to me. Not only did I not understand what it did, I couldn&rsquo;t even begin to wrap my head around how it worked.</p> + +<pre><code class="language-php">&lt;?php include $_SERVER['DOCUMENT_ROOT'].&quot;/views/somefile.php&quot;;?&gt; +</code></pre> + +<p>I could go on forever. Anyway, the point to all of this, is simply to tell myself that I have progressed, and I have learned. Keep it up. Five years from now, you&rsquo;ll look back at yourself again and think about how much farther you&rsquo;ve come.</p> + + + + + VMware Disk Extend Powershell Script + http://localhost:1313/brycematheson.io/post/2015-06-03-powershell-extend-script/ + Wed, 03 Jun 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-06-03-powershell-extend-script/ + <p>About a month ago, I began working at Intermountain Healthcare, here in Utah, as a Systems Administrator. We have a bunch of monitoring software, one of which is called &#8220;Spectrum&#8221;. It searches for hardware errors or any other faults and then reports them to us. One of the most common reports that we find is that &#8220;C: 90% usage&#8221;, or something similar. Because the majority of the servers that we run are virtual, with a thin disk setup, they have relatively small drives (some starting as small as 25GB). As applications are installed or the demands of the business unit increase, we find that these drives fill up rather quickly. Currently, the process to extend these drives is to log into vConsole (vSphere Client), find the drive, edit the settings, provision additional disk space, remote into the virtual machine, open diskpart.exe, rescan the drive, and then extend it.</p> + +<p>Now, that&rsquo;s fine if you only have a couple of drives to extend each day. But with nearly 3500 servers that we&rsquo;re in charge of, we get quite a few, and it becomes rather monotonous. Hence, I began playing with powershell and wrote a simple script that both provisions additional disk space for you, as well as extends the drive in the Guest Operating System.</p> + +<p>The following script requires the VMWare PowerCLI. I prefer to use the PowerCLI, but you can also use the Snap-in and run it from Powershell directly. This has been tested to work on Windows Server 2003, 2008, and 2012. Because Windows 2003 doesn&rsquo;t have the capability to extend a virtual disk from the OS natively, we use Dell&rsquo;s 3rd party software &#8220;extpart.exe&#8221; (extend partition).</p> + +<p>You&rsquo;ll have to modify the script below to your needs by adding the VM host servers you want to connect to (indicated by &#8220;server1&#8221;, etc), as well as change the locations below for where to check for extpart.exe, as well as where to copy the program should it be found missing.</p> + +<p>Cheers!</p> + +<pre><code class="language-powershell">#Import the PowerCLI module +#Add-PSSnapin VMware.VimAutomation.Core +Set-PowerCLIConfiguration -DisplayDeprecationWarnings $false -InvalidCertificateAction Ignore -Confirm:$false + +function getDisk { + $disk = Read-Host &quot;Which disk would you like to extend (i.e., '1')?&quot; + Return $disk +} + +function getDiskSize { + $diskSize = Read-Host &quot;Enter new (total) drive size (in GB)?&quot; + Return $diskSize +} + +function setVMSize($vm, $disk, $diskSize) { + Get-HardDisk -vm $vm | where {$_.Name -eq &quot;$disk&quot;} | Set-HardDisk -CapacityGB $diskSize -ResizeGuestPartition -confirm:$false -ErrorAction:SilentlyContinue +} + +# Connect to vConsole servers +$authenticated = $false; +while (-not $authenticated) { + Try { + Connect-VIServer -Server server1,server2,server3 -ErrorAction Stop | Select-Object -Property Name,IsConnected + $authenticated = $true + } + Catch { + Write-Host &quot;Invalid username or password.&quot; -foreground &quot;red&quot; + } +} + +# Check to make sure that the user inputs a valid VM +$validVM = $false +while (-not $validVM) { + $vm = Read-Host &quot;Enter VM name&quot; + Try { + Get-VM -Name $vm | Select-Object -Property Name + $validVM = $true + } + Catch { + Write-Host &quot;Invalid VM name. Try again.&quot; -foreground &quot;red&quot; + } +} + +# Get drive letter mappings and store them in the $diskArray array. Data from this +# array can be accessed like so: $diskArray[0].DiskName, or .DriveLetter, or .DiskSize +$diskArray = @() + +if ($vm) { + $VmView = Get-View -ViewType VirtualMachine -Filter @{&quot;Name&quot; = $vm} + foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | where {$_.DeviceInfo.Label -match &quot;SCSI Controller&quot;})) { + foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | where {$_.ControllerKey -eq $VirtualSCSIController.Key})) { + $VirtualDisk = &quot;&quot; | Select DiskName, DiskSize, DriveLetter + $VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label + $VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB + + $LogicalDisks = @() + # Look up path for this disk using WMI. + $thisVirtualDisk = get-wmiobject -class &quot;Win32_DiskDrive&quot; -namespace &quot;root\CIMV2&quot; -computername $vm | where {$_.SCSIBus -eq $VirtualSCSIController.BusNumber -and $_.SCSITargetID -eq $VirtualDiskDevice.UnitNumber} + # Look up partition using WMI. + $Disk2Part = Get-WmiObject Win32_DiskDriveToDiskPartition -computername $vm | Where {$_.Antecedent -eq $thisVirtualDisk.__Path} + foreach ($thisPartition in $Disk2Part) { + #Look up logical drives for that partition using WMI. + $Part2Log = Get-WmiObject -Class Win32_LogicalDiskToPartition -computername $vm | Where {$_.Antecedent -eq $thisPartition.Dependent} + foreach ($thisLogical in $Part2Log) { + if ($thisLogical.Dependent -match &quot;[A-Z]:&quot;) { + $LogicalDisks += $matches[0] + } + } + } + $VirtualDisk.DriveLetter = $LogicalDisks + $diskArray += $VirtualDisk + Write-Output $VirtualDisk + } + } +} + +# Check which OS version -- If Server 2003, run extpart. Run diskpart for all others. +If ((Get-VMGuest $vm | Select-Object -Property OSFullName) -like '*2003*') { + $disk = getDisk + $diskSize = getDiskSize + setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize + # If extpart exists, do nothing. Otherwise, copy to C:\UTILS folder on VM. + if (Test-Path &quot;\\$vm\c$\UTILS\extpart.exe&quot;){ + # do nothing + } else { + Copy-Item -Path &quot;S:\SA\PostInstallDoNotModify\Installs\UTILS\extpart.exe&quot; -Destination &quot;\\$vm\c$\UTILS&quot; + Write-Host &quot;Successfully copied 'extpart.exe' to UTILS folder.&quot; -foreground &quot;green&quot; + } + $driveLetter = $diskArray[$disk - 1].DriveLetter + $sizeInMB = ((($diskSize)-($diskArray[$disk - 1].DiskSize))*1024) + $script = &quot;C:\UTILS\extpart.exe $driveLetter $sizeInMB&quot; + Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT +} else { + $disk = getDisk + $diskSize = getDiskSize + $driveLetter = $diskArray[$disk - 1].DriveLetter + setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize + $script = &quot;echo select volume = $driveLetter &gt; c:\diskpart.txt &amp;&amp; echo rescan &gt;&gt; c:\diskpart.txt &amp;&amp; echo extend &gt;&gt; c:\diskpart.txt &amp;&amp; diskpart.exe /s c:\diskpart.txt&quot; + Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT +} +</code></pre> + + + + + Command Line Essentials + http://localhost:1313/brycematheson.io/post/2015-02-20-command-line-essentials/ + Fri, 20 Feb 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-02-20-command-line-essentials/ + + +<p>It wasn&rsquo;t too long ago that I was terrified of the terminal. It&rsquo;s pretty daunting to be staring at a blank screen with a blinking cursor taunting you. Want to know something? It&rsquo;s not as scary as you might think. It would take years to master the command line, so don&rsquo;t expect to know everything all at once. Everyday, try and find little ways to slowly blend the terminal with basic tasks. Slowly, you&rsquo;ll find that it makes a lot of things easier.</p> + +<h2 id="terminology:9b1b4563a184a5dc550b880f1d4829c3">Terminology</h2> + +<p>You may have heard words such as &#8220;terminal&#8221;, &#8220;command line&#8221;, &#8220;shell&#8221;, &#8220;bash&#8221;, etc. There are slight differences, but generally, they all refer to the same thing.</p> + +<h2 id="terminal-vs-iterm:9b1b4563a184a5dc550b880f1d4829c3">Terminal vs iTerm</h2> + +<p>&#8216;iTerm&rsquo; is a terminal replacement. It&rsquo;s simply a program that adds some features for developers and advanced users such as split panes, paste history, and a plethora of others. If you don&rsquo;t need any of these, you can use the basic terminal just as well. If you&rsquo;re looking for additional functionality, this might be worth looking into.</p> + +<p>Honestly, I tried iTerm and didn&rsquo;t care too much for it. I prefer <a href="http://totalterminal.binaryage.com/" target="_blank">TotalTerminal</a>. I don&rsquo;t have a bunch of needs for extra fancy features, but one thing I do love is the &#8220;visor&#8221; functionality. From anywhere on my computer, I can have a terminal window slide down from the top of my screen, simply by pressing a keyboard shortcut. This is much easier than navigating to Finder, then Applications, then Utilities, then Terminal. Or even faster than searching for it through Spotlight. Many people use the standard <span class="smallcode">Command/Ctrl + ~</span> shortcut, but I&rsquo;ve customized mine to <span class="smallcode">Control + Control</span>.</p> + +<p>Another nifty feature is being able to have multiple terminal windows running different processes. I generally have a Jekyll or Grunt server running in one window, and then I use the other window for navigating through folders or committing changes on Git. It works similar to using tabs in Chrome or any other browser.</p> + +<h2 id="basic-commands:9b1b4563a184a5dc550b880f1d4829c3">Basic Commands</h2> + +<p>Let&rsquo;s get started. Go ahead and open up a terminal window and play with the following commands. Each command should be entered on a single line, and then followed by the <span class="smallcode">[return/enter]</span> key.</p> + +<p><span class="smallcode">pwd</span> &#8211; stands for &#8220;print working directory&#8221;. It lists the folder that you&rsquo;re currently in (i.e. /Users/yourusername/Documents)</p> + +<p><span class="smallcode">cd</span> &#8211; stands for &#8220;change directory&#8221;. This lets you move in and out of folders. For example, if you&rsquo;re in the &#8220;Documents&#8221; directory and want to move to another directory underneath named &#8220;School&#8221;, you would type <span class="smallcode">cd School</span>.</p> + +<p><span class="smallcode">cd ..</span> &#8211; Move &#8220;back&#8221; or &#8220;up&#8221; a folder. In our previous example, this would move you out of the &#8220;School&#8221; directory and back into the &#8220;Documents&#8221; folder.</p> + +<p><span class="smallcode">cd ~</span> &#8211; Takes you back to your home directory. Let&rsquo;s say you&rsquo;re deep in a folder structure (i.e. /Users/yourusername/Documents/School/Senior/Thesis). Rather than having to type <span class="smallcode">cd ..</span> a billion times, you could type <span class="smallcode">cd ~</span> to take you back to &#8220;/Users/yourusername&#8221;.</p> + +<p><span class="smallcode">open .</span> &#8211; Opens the current working directory in finder. I use this one ALL the time and love it.</p> + +<p><span class="smallcode">clear</span> &#8211; Clears the screen of all text. Sometimes the output of all previous commands can make me claustrophobic. This gives me a fresh, blank screen.</p> + +<p><span class="smallcode">rm [filename]</span> &#8211; Deletes a file.</p> + +<p><span class="smallcode">mkdir [directoryname]</span> &#8211; Stands for &#8220;make directory&#8221;. Creates a new folder.</p> + +<p><span class="smallcode">ls</span> &#8211; Stands for &#8220;list&#8221;. Shows a listing of all the files/folders in a directory. Often, I find myself adding an <span class="smallcode">-al</span> flag. <span class="smallcode">-a</span> shows &#8220;all files&#8221; (hidden files included), and <span class="smallcode">-l</span> shows a long listing of files, rather than in a three-column short listing. This to me, is easier to read. You can combine the two flags together with the ls command by typing <span class="smallcode">ls -al</span>.</p> + +<p><span class="smallcode">sudo [command]</span> &#8211; Stands for &#8220;super user do&#8221;. Sometimes you need elevated privileges to run a certain command. Typing <span class="smallcode">sudo</span> before the command will prompt for your password, and will then run the command. Be careful when using this command. If you don&rsquo;t know what you&rsquo;re doing, you can make some unwanted changes. If at all possible, run the command first <em>without</em> sudo, and only add it in if needed.</p> + +<p><span class="smallcode">control + c</span> &#8211; Cancels a current process. For example, if you&rsquo;re running a script, you can kill (cancel) it.</p> + +<p><span class="smallcode">[Up arrow]</span> &#8211; You can see a list of all the previous commands you&rsquo;ve entered by pressing the up arrow key. This saves time rather than having to type in a command over and over again.</p> + +<p><span class="smallcode">[tab]</span> &#8211; Autocomplete. Let&rsquo;s say I have a long folder name such &#8220;Discertation&#8221;. Start typing the first few letters of the file/folder to distinguish it from other files, and then press the &#8220;tab&#8221; key. It will autocomplete the filename for you.</p> + +<h2 id="give-it-a-try:9b1b4563a184a5dc550b880f1d4829c3">Give it a try!</h2> + +<p>Well, there are a few commands to get you started and make you just dangerous enough. Practice makes perfect! I use most all of these commands on a daily basis, but there are thousands of additional commands that you can learn. Baby steps.</p> + +<h2 id="comments:9b1b4563a184a5dc550b880f1d4829c3">Comments</h2> + +<p>Did I miss any of your favorites? Let me know, and I&rsquo;ll list them here.</p> + + + + + I love to Grunt and Gulp + http://localhost:1313/brycematheson.io/post/2015-02-14-i-love-to-grunt-and-gulp/ + Sat, 14 Feb 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-02-14-i-love-to-grunt-and-gulp/ + <p>(Happy Valentine&rsquo;s Day, ya&rsquo;ll. Get off the computer and go buy something nice for your woman.)</p> + +<p>Sometimes I like to pretend that I know stuff, when I really don&rsquo;t. Gulp is one of those things. :)</p> + +<p>I need to get better at finding solutions to a lot of the repetitive tasks that I do on a daily basis. Up until now, let&rsquo;s say I was about to push some production code to the web. Of course I needed to minify the CSS first. So I would copy the code, hit up <a href="http://cssminifier.com/" target="_blank">CSS Minifier</a>, paste the code back into my CSS file, and then rename the file, <code>styles.min.css</code>. This wouldn&rsquo;t be that big of an issue if I only did it once upon completion of a site. But it never really worked out that way. I&rsquo;d forget to change a specific style last minute, and then I&rsquo;d have to copy all of my code into CSS Minifier and do it all again.</p> + +<p>Wouldn&rsquo;t it be great if there were a service that did all of this for you, automatically? You&rsquo;re in luck! They&rsquo;re called &#8220;Task Runners&#8221;. I&rsquo;m going to be focusing on &#8220;Gulp&#8221;, which is a JavaScript task runner, built off of Node.js.</p> + +<p>Now, to many of you, you&rsquo;ve probably been using a task runner of some sort for years. For a long time, Grunt has been the big name in the game. Not too long ago, Gulp emerged and has been hogging the spotlight. It&rsquo;s not only faster at rendering, but it also has an easier-to-read syntax.</p> + +<p>Now, I&rsquo;m too lazy to reinvent the wheel and write a tutorial on how to install and run gulp. <a href="http://travismaynard.com/writing/getting-started-with-gulp" target="_blank">This guy</a> does a much better job than I could do, anyway.</p> + +<p>But I did at least want to post my gulpfile and say how freaking awesome it is. By simply running the <code>gulp</code> command, in less than second, I can minify my CSS, JS, and HTML, concatenate multiple files into one, rename them automatically, add in browser prefixes, and then reload the browser window. In less than a second. Boom. Pretty nifty, huh? Additionally, my gulpfile will watch for any changes to those files, and rerun all of those tanks without me doing anything. Dope.</p> + +<pre><code class="language-js">var gulp = require('gulp'); + +/********************************************** +****************** Modules ******************** +***********************************************/ +var sass = require('gulp-ruby-sass'); //Compiles SASS +var autoprefix = require('gulp-autoprefixer'); //Automatically throws in browser prefixes +var minifycss = require('gulp-minify-css'); //Minifies CSS +var rename = require(&quot;gulp-rename&quot;); //Renames files to .min after minifying +var minifyhtml = require('gulp-minify-html'); //Minifies the HTML +var concat = require('gulp-concat'); //Concatenates all source files into one file +var uglify = require('gulp-uglify'); //Removes whitespaces from JavaScript +var imagemin = require('gulp-imagemin'); //Compresses images +var livereload = require('gulp-livereload'); //Live reload +var plumber = require('gulp-plumber'); //Error handling + +/********************************************** +****************** Functions ******************** +***********************************************/ + +// css auto-prefix, minify, and rename +gulp.task('styles', function() { + return sass('src/styles/', {style:'expanded'}).on('error', function(handleError){ console.log('Error: There\'s a problem with your SASS, stupid. Fix that shiz.'); }) + .pipe(autoprefix('last 2 versions')) + .pipe(minifycss()) + .pipe(rename({suffix:'.min'})) + .pipe(gulp.dest('build/styles/')) + .pipe(livereload()); +}); + +// minify new images +gulp.task('imagemin', function() { + gulp.src('src/images/*.jpg').on('error', function(handleError){ console.log('Error: There\'s a problem with your images, stupid. Fix that shiz.'); }) + .pipe(imagemin()) + .pipe(gulp.dest('build/images/')); +}); + +// minify new or changed HTML pages +gulp.task('html', function() { + gulp.src('src/*.html') + .pipe(minifyhtml()) + .pipe(gulp.dest('build/')) + .pipe(livereload()); +}); + +// JS concat, strip debugging and minify +gulp.task('scripts', function() { + gulp.src('src/scripts/*.js') + .pipe(concat('script.js')) + .pipe(uglify()) + .pipe(rename({suffix:'.min'})) + .pipe(gulp.dest('build/scripts/')) + .pipe(livereload()); +}); + +/********************************************** +************ Watch &amp; Build Tasks ************** +***********************************************/ +gulp.task('default', ['styles', 'html', 'scripts', 'imagemin'], function() { + // watch for CSS changes &amp; minify + gulp.watch('./src/styles/*.scss', function() { + livereload.listen(); + gulp.run('styles'); + }); + + // watch for html &amp;amp; minify + gulp.watch('./src/*.html', function() { + livereload.listen(); + gulp.run('html'); + }); + + // watch for JS changes + gulp.watch('./src/scripts/*.js', function() { + livereload.listen(); + gulp.run('scripts'); + }); + + // watch for new images + gulp.watch('./src/images/*.jpg', function() { + gulp.run('imagemin'); + }); +}); +</code></pre> + +<p>This isn&rsquo;t even the tip of the iceberg. There are hundreds of gulp plugins, and I have yet to play with the majority of them. But these seem to be the most basic/common plugins, and so far, they&rsquo;ve proved invaluable.</p> + + + + + Remove .DS_Store from ZIP Files + http://localhost:1313/brycematheson.io/post/2015-01-24-remove-ds_store-from-zip-file/ + Sat, 24 Jan 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-01-24-remove-ds_store-from-zip-file/ + <p>At work this week, I had to download a bunch of compressed XML files, delete some duplicate files contained therein, recompress the files, and then reupload them to a server. The problem, however, is that whenever I tried to upload the files, I got a strange server error. After some trial and error, and some deep examination, I found that the hidden file &#8220;.DS_Store&#8221; was causing the server error issue. When I removed the hidden &#8220;.DS_Store&#8221; file, I had no more issues.</p> + +<p>If you&rsquo;re a Mac user, you&rsquo;ve undoubtedly noticed these strange files that seem to creep into every directory. They&rsquo;ve plagued the operating system for years, and there&rsquo;s still not a super great solution for removing them. And the files don&rsquo;t just stay on your machine. Ever plugged in a USB flash drive to take over to a Windows machine? These obnoxious files have most certainly hopped on for a ride. They&rsquo;re nothing more than metadata (data about data), but they&rsquo;ve never been an issue for me until now.</p> + +<p>So I navigated through the compressed folders again, deleted the hidden files, and then thought I was set. Upon recompressing the files once more and trying to upload them, I was still presented with the same error. Guess what happened when the folders were compressed again? Yep. The infamous .DS_Store file had once again shown up.</p> + +<p>So how do you remove these files in a compressed directory? Unzipping the files to remove them doesn&rsquo;t work, as they&rsquo;ll just show up again as soon as you re-zip the file. Well, I&rsquo;ve had to resort to the command line. Using the following command in the terminal, I was successfully able to remove the annoyance quickly.</p> + +<p><span class="smallcode">zip -r mynewzipfile.zip wherethefilesarecomingfrom -x &ldquo;*.DS_Store&rdquo;</span></p> + +<p>Just to break down the above command:<br /> +<span class="smallcode">zip</span> &#8211; The terminal command<br /> +<span class="smallcode">-r</span> &#8211; &#8220;Recursive.&#8221; This means to select all files and subfolders under the directory<br /> +<span class="smallcode">mynewzipfile.zip</span> &#8211; Name this whatever you&rsquo;d like the new ZIP file to be called<br /> +<span class="smallcode">wherethefilesarecomingfrom</span> &#8211; The directory that contains the files to be zipped<br /> +<span class="smallcode">-x</span> &#8211; &#8220;Exclude&#8221; flag.<br /> +<span class="smallcode">&ldquo;*.DS_Store&rdquo;</span> &#8211; Selects all files that are named &#8220;.DS_Store&#8221;</p> + +<p>Your new zip file will be created WITHOUT the .DS_Store file. Tah-dah!</p> + +<p>Upon doing a quick search on the internet, I found the following program called <a href="http://asepsis.binaryage.com" target="_blank">Asepsis</a>. I haven&rsquo;t given it a try, but apparently it prevents the creation of any .DS_Store files. Might be worth giving it a try.</p> + + + + + Static Site (Database Free) Contact Form + http://localhost:1313/brycematheson.io/post/2015-01-19-static-site-contact-form/ + Mon, 19 Jan 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-01-19-static-site-contact-form/ + <p>Although my site is always a work in progress, (I&rsquo;ve still got plenty of things I need to do on it), I feel like it&rsquo;s in the final stages. Recently, I was trying to add the finishing touches by implementing a contact form. Mostly, to combat spam. I didn&rsquo;t want to throw my direct e-mail address out there, because that&rsquo;s just asking for an inbox full of viagra ads.</p> + +<p>The thing that I wanted to completely avoid was having any server-side (PHP) scripting, or databases. With most contact forms, that&rsquo;s a inevitable. But my main concern with just about everything on my site is performance. I wasn&rsquo;t willing to add a database just for that. So I went searching.</p> + +<p>Introducing <a href="http://formspree.io/" target="_blank">Formspree.io.</a> It&rsquo;s crazy easy. It involves using code, so if that scares you, you might want to stay away. But really, it&rsquo;s just simply copying and pasting that anyone can do it. Besides, if you&rsquo;re not into code, what&rsquo;re you doing reading my blog?</p> + +<p>Basically, you place their code on your site, and when someone submits anything in the form, all of the processing is done on their servers and forwarded to an email address that you provide. And what I love is that their logo isn&rsquo;t plastered all over the place. It&rsquo;s super minimal, and you don&rsquo;t even have to register an account with them.</p> + +<pre><code class="language-html">&lt;form action=&quot;http://formspree.io/youremail@pasteithere.com&quot; method=&quot;POST&quot;&gt; + &lt;p&gt;Email:&lt;/p&gt;&lt;input type=&quot;email&quot; size=&quot;40&quot; name=&quot;_replyto&quot;&gt; + &lt;p&gt;Message:&lt;/p&gt;&lt;textarea style=&quot;border: 1px lightgray solid; width: 100%; height: 300px;&quot; name=&quot;body&quot;&gt; + &lt;/textarea&gt;&lt;br/&gt; + &lt;input style=&quot;display: block; width: 125px; text-size: 20px;&quot; type=&quot;submit&quot; value=&quot;Send&quot;&gt; +&lt;/form&gt; +</code></pre> + +<p>All you have to do is replace the <code>youremail@pasteithere.com</code> with the address you want your submissions to be forwarded to. Throw that on your site. The first thing you have to do is submit a test form, and a confirmation email will be sent to the address you specified. Once it&rsquo;s confirmed, you&rsquo;re set to go!</p> + +<p>I left all the styling that I used in my form for you to use. You can strip it out or do whatever you want with it, obviously.</p> + +<p>You might be wondering about costs or privacy. Right now, there&rsquo;s a 1000/month cap on emails. Anything above that and you&rsquo;ll have to pay, but I&rsquo;d be surprised to get even 20 submissions a month from legitimate sources on my own site. As far as privacy, they say that don&rsquo;t store any of the contents of the submissions, because they&rsquo;re using the Mailgun API. And even if they did, I&rsquo;m not too worried about it. You shouldn&rsquo;t be submitting sensitive data to an unsecure form on the web anyway.</p> + +<p>One of my favorite features is the ability to add a &#8220;honeypot&#8221; for those who are just scraping the web, looking for forms to easily submit. You can add a textfield to the form, give it a name value of <code>_gotcha</code>, and then hide it using CSS. If any value is entered in this field, the message will be silently ignored. At the same time, this field is hidden from humans so that they won&rsquo;t accidentally enter anything.</p> + +<pre><code class="language-html">&lt;input type=&quot;text&quot; name=&quot;_gotcha&quot; style=&quot;display:none&quot; /&gt; +</code></pre> + +<p>What about adding additional fields or features? Head on over to <a href="http://formspree.io/" target="_blank">their website</a> to see everything they&rsquo;ve got to offer. This probably sounds like I&rsquo;m being paid to write this post, but I&rsquo;m not. I&rsquo;m just grateful that I found a simple, easy solution to fill my needs. Enjoy!</p> + + + + + 5 Things to Stop Doing in 2015 + http://localhost:1313/brycematheson.io/post/2015-01-02-5-things-to-stop-doing-in-2015/ + Fri, 02 Jan 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-01-02-5-things-to-stop-doing-in-2015/ + + +<p>It seems that a year has ended, and new year resolutions are all on the rage again. Yeah, there&rsquo;s those typical ones such as joining a gym and getting in shape (although, I really think I might do it this year), etc. Here are five things I&rsquo;d like to quit doing this year.</p> + +<h3 id="1-quit-checking-my-instagram-likes:6478d31356be52c166d4d2d1b32313ca">1. Quit checking my Instagram likes</h3> + +<p>Yeah, it&rsquo;s stupid, but really. I mean it. We all do it. We open up Instagram and are excited when we see 30+ likes, 4 comments, and 2 new followers. I won&rsquo;t say that I base my self-worth on it, but I do get a bit of a thrill when I post a great photograph, or come up with some whitty remark. I&rsquo;m going to try my best to quit doing that. I love photography, and I&rsquo;d call it more than a hobby, but I can get better at finding self-gratification from other peoples&rsquo; acceptance.</p> + +<h3 id="2-stop-thinking-that-the-grass-will-be-greener:6478d31356be52c166d4d2d1b32313ca">2. Stop thinking that the grass will be greener</h3> + +<p>&#8220;I&rsquo;ll be happy when I&rsquo;m married&#8230;&#8221;, &#8220;If only I made more money&#8230;&#8221;. Stop. Please. Stop it. Happiness truly comes from gratitude. I need to work on being content with where I&rsquo;m at, and simply finding joy in the journey. It&rsquo;s not a destination. I don&rsquo;t want to wish life away thinking, &#8220;If only, if only.&#8221;</p> + +<h3 id="3-stop-comparing:6478d31356be52c166d4d2d1b32313ca">3. Stop comparing</h3> + +<p>&#8220;Comparison is the theif of joy.&#8221; Are you ever happy with your love life, until you see another girl at the other table? Are you content and grateful with your talents, and ever-eager to hone them, until you see the successes of others? Are you happy with your job and your work, until you see a potentially better offer? There is always going to be someone or something better, and should you actually ever obtain that, you&rsquo;d find something else to complain about.</p> + +<h3 id="4-quit-feeling-guilty:6478d31356be52c166d4d2d1b32313ca">4. Quit feeling guilty</h3> + +<p>People make mistakes. People change. And so do you. You live, you learn, you grow. The end. What happened in the past doesn&rsquo;t have to define you, unless you let it. Put on your big boy underwear, man up, and move on.</p> + +<h3 id="5-stop-feeling-obligated:6478d31356be52c166d4d2d1b32313ca">5. Stop feeling obligated</h3> + +<p>It&rsquo;s okay to say, &#8220;No.&#8221; Don&rsquo;t (always) make decisions based on what you think you <em>should</em> do. Make decisions based on what you WANT to do. It&rsquo;s your life, and you&rsquo;re going to have to live with the actions that you make. You have value, and your ruining your brand by undercharging.</p> + +<p>That&rsquo;s my list. What does yours look like?</p> + + + + + Take that, Mr. Barney + http://localhost:1313/brycematheson.io/post/2014-12-20-take-that-mr-barney/ + Sat, 20 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-20-take-that-mr-barney/ + <p>We&rsquo;ve all had those professors/teachers that we just don&rsquo;t seem to mesh with. Recently, I had a professor with whom I could <em>not</em> set aside my differences. The class was about Mobile Application Development. I went into it thinking, &#8220;Wow, I&rsquo;m excited! Finally, I&rsquo;ll be able to create an iOS/Android application!&#8221; On the first day of the class, Mr. Barney walked in and said, &#8220;This is not a programming class. This is not an iOS development class. This is not an Android development class. This class has no tests. This class has no assignments. This class has no texts, no books.&#8221;</p> + +<p>As the class progressed, I got more and more frustrated with the structure and Mr. Barney&rsquo;s teaching style. It seemed that the class was more about learning Mr. Barney than it was about the material. He came off as a close-to-retirement professor with a God-complex, who was tired of his job, and was just coasting on his measly salary for a few more years until he could finally escape.</p> + +<p>The class consisted of a few technologies that we were forced to learn on our own, namely HTML 5, CSS Animations and Transitions, AJAX, DOM Manipulation, JavaScript Basics, etc. Because there were no class materials, we resorted to YouTube tutorials and blog articles to learn. On a bi-monthly basis, we would meet one-on-one in his office and present some sandbox code that we had been playing with that demonstrated one or more of these technologies. Based on his mood that day, he would open a little spreadsheet and rate you anywhere from &#8220;Strongly Disagree&#8221; to &#8220;Strongly Agree,&#8221; which ultimately equated to your class grade.</p> + +<p>At one point, I decided to bring in a simple sandbox weather application, using an AJAX call to link to an API and populate data into the DOM based on the user&rsquo;s location. The application used JQuery. While looking at my code, the second he saw a reference to JQuery, he tore it to <em>pieces.</em> &#8220;JQuery is of the devil.&#8221; or &#8220;JQuery is only for lazy programmers.&#8221; and &#8220;What happens if the JQuery library breaks, what happens to your application?&#8221;</p> + +<p>Okay, so, maybe he didn&rsquo;t say, &#8220;JQuery was of the devil.&#8221;</p> + +<p>Basically, his point all boiled down to this: You can use JQuery, but it&rsquo;s a bloated library and it contains so many additional pieces that you don&rsquo;t need, and ultimately, you can do exactly what you need with plain ol&rsquo; vanilla JavaScript. It&rsquo;s slow, and it would take a long time to download the entire library, when you don&rsquo;t need it.</p> + +<p>For the rest of the class, I hated him for it. 9 times out of 10 as I left his office, I was fuming. And I really do understand his point, and I believe that it has <em>some</em> validity, but mostly, it&rsquo;s just him being old and outdated, and stuck in his ways.</p> + +<p>Even after finishing the class, I hated him for it. Have you tried looking for web tutorials online for advanced AJAX calls that don&rsquo;t use JQuery? It&rsquo;s <em>impossible</em>!</p> + +<p>In case you hadn&rsquo;t noticed (as in, you aren&rsquo;t using this website on a mobile device), the top navigation bar uses JQuery to convert to a small menu icon on smaller screens. I wanted to prove to myself that JQuery really isn&rsquo;t <em>that</em> bloated, and that it is in fact a useful tool, and better than writing vanilla JavaScript.</p> + +<p>After playing with a few things, I finally got the results I was looking for. Check out the results that I got while using <a href="http://tools.pingdom.com/fpt/" target="_blank">Pingdom Page Speed</a>. More specifically, look at the red box. My &#8216;styles.css&rsquo; file (that isn&rsquo;t minified, btw) weighs a whopping 6.2kB. JQuery, which is more than 6x larger, loads more than twice as fast. How did I do it?</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/pingdom-speed-results.jpg" alt="Pingdom PageSpeed Results" /></p> + +<p>If you&rsquo;re familiar with Bootstrap, and the way that you can customize it just to your liking, JQuery is the same. Usually, whenever I use Bootstrap, I don&rsquo;t need all the font icons or navigation bars, or any of that. I only use the responsive pieces. With JQuery, they have similar options on their website to where you can customize it to your liking. I knew that the only piece I&rsquo;d be using on my website is the navigation library. So I stripped everything else out.</p> + +<p>Also, up until this point, I wasn&rsquo;t familiar with CDNs, or the power that they potentially had. Pulling JQuery from their hosted CDN, rather than from my on my own shared web server undoubtedly speeds up the page load. My website is pretty barebones, and that&rsquo;s done on purpose to increase page speed. Loading times have come into consideration for everything I do on this site, but I don&rsquo;t feel that JQuery has in anyway been detrimental to that.</p> + +<p>I feel justified. Take that, Mr. Barney! </rant></p> + + + + + Pseudo-Responsive Images + http://localhost:1313/brycematheson.io/post/2014-12-15-pseudo-responsive-images/ + Mon, 15 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-15-pseudo-responsive-images/ + <p>Honestly, I&rsquo;m a bit embarrassed to say that I didn&rsquo;t know how to do this before. I&rsquo;ll be creating a blog post here fairly soon on my conversion from WordPress to Jekyll for this blog, but in doing so, I&rsquo;ve learned a lot of cool new things.</p> + +<p>Due to the vast number of mobile devices in circulation right now, I make it a habit to try and develop for mobile first, and then expand for the desktop user. Developing for mobile almost instantly implies responsive design. There are dozens of CSS frameworks to do this (Bootstrap, Foundation, Skeleton, etc.) intended to make your job a little bit easier.</p> + +<p>I ran into an issue while coding this site. My content would all scale down properly and fit into the viewport perfectly, except for images, which would overflow the bounds of the viewport. I couldn&rsquo;t for the life of me figure out what I was doing wrong. When copying content over from WordPress, I guess that I had added &#8216;width&rsquo; and &#8216;height&rsquo; attributes, which forced the images to display at those dimensions. After going through all of the images and removing both of those attributes, I simply went to my stylesheet and added the following. Lucky for me, I didn&rsquo;t have too many images to go through:</p> + +<pre><code class="language-css">img { + width: 100%; + box-shadow: 10px 10px 5px #888888; +} +</code></pre> + +<p>Obviously the box-shadow isn&rsquo;t required, but I just like add it for aesthetics.</p> + +<p>That selects all images across my entire website, and tells them to stretch to 100% of the viewport (which, in the case of this site, is 700px). As the page resizes, or is viewed on a different viewport size (such as a phone or tablet), that image is scaled down accordingly.</p> + +<p>One thing to mention, too, is that if you remove just the &#8216;width&rsquo; attribute, but leave the &#8216;height&rsquo; attribute, your images will come out all stretched and skewed as the image is scaled according to the viewport size.</p> + +<p>It&rsquo;s also important to note that this isn&rsquo;t the &#8216;real&rsquo; way to present responsive images on your site, I&rsquo;m just too lazy to do it the <a href="http://css-tricks.com/responsive-images-youre-just-changing-resolutions-use-srcset/" target="_blank">real way</a>. This way works perfectly for me, until it becomes simpler.</p> + + + + + Build a GUI Investment Calculator in Java + http://localhost:1313/brycematheson.io/post/2014-12-08-investment-calculator-java/ + Mon, 08 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-08-investment-calculator-java/ + <p>I’m not a programmer. Some people just have that natural itch to want to go out and code all day long, but that isn’t me. I enjoy scripting and web development, but deep, low-level programming just simply isn’t my thing. So the fact that even <em>I</em> was able to create a simple GUI application should tell you how easy it is. The code below might look daunting at first, but we’ll walk through it piece by piece to hopefully clear things up. I’ll try to make it as easy as possible to understand, but you should have at least a <em>basic</em> understanding of programming to go through this.</p> + +<p>Java makes creating applications really simple. I’ve dabbled with C++, but never stuck with it long enough to get into the Object Oriented pieces of it. Whenever learning a new programming language, it seems the first program you write is “Hello World.” The next program after that is a basic investment calculator, and so we’re going to continue that pattern.</p> + +<p>When we’re finished, we’ll have a program that looks something like this:</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/guicalculator.png" alt="GUI Investment Calculator" /></p> + +<p>At the end of this post, I’ll show the complete code. If you have the Java JDK (a free download, <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" target="_blank">here</a>), you can easily import this code into a text editor, save it with a .java extension, and then compile it using the command line. Something this would work:</p> + +<pre><code class="language-java">javac SimpleGUIProgram.java +java SimpleGUIProgram +</code></pre> + +<p>Personally, I use Eclipse. It’s a <a href="https://eclipse.org/downloads/packages/eclipse-ide-java-developers/keplersr1" target="_blank">free IDE that you can download</a>, if you’re not interested in using a text editor.</p> + +<p>Let’s get started.</p> + +<p>First, let’s import some libraries. Libraries are basically a repository of reusable code. Rather than having to rewrite code over and over, why don’t we write it once, store it in the Java API, and then import it into our program whenever we need it? Luckily, someone has already done that for us! The specifics of each of these libraries isn’t super important, but just know that these include the graphical components that we’ll need to build our program.</p> + +<pre><code class="language-java">import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +</code></pre> + +<p>Next, we’ll create the text fields and buttons that will be used in our program. Notice in the image above that we have four input fields (Investment Amount, Years, Annual Interest Rate, and Future Value) and two buttons (Compute and Reset). They’re pretty easy to define in Java.</p> + +<p>You might wonder what <span class="smallcode">private</span> means. Whenever you create an object and set it to private, that means that it can only be accessed within that same class. We could change it to <span class="smallcode">public</span> or even <span class="smallcode">protected</span>, but for this example, we’ll leave it how it is. There are some benefits to leaving things private, such as avoiding data corruption and a few other things, but that’s outside the scope of this tutorial.</p> + +<p>Then we need to tell Java what kind of object we’ll be creating. We’ll be using <span class="smallcode">JTextField</span>, which is just an input box, and <span class="smallcode">JButton</span>, which, obviously, is a button. And after that, we just need to name our object. For the sake of being descriptive, I usually like to prefix my object names with <span class="smallcode">jtf</span> or <span class="smallcode">jb</span> or similar, so I know what it is quickly by looking at it.</p> + +<pre><code class="language-java">private JTextField jtfInvestmentAmount; +private JTextField jtfAnnualInterestRate; +private JTextField jtfNumberOfYears; +private JTextField jtfFutureValue; +private JButton jbtCompute; +private JButton jbtReset; +</code></pre> + +<p>Next, we’re going to define the properties for the frame (the program window). The <span class="smallcode">setTitle</span> property allows us to name the frame. You can see in the image above that the title of the window is “Loan Calculator” as we’ve defined here. You can name it whatever you’d like.</p> + +<p>Next, we define the default close operation. This tells the computer what to do whenever the program is closed. We have the option to let the program to continue running, even when the box is closed. In this example, when the user hits the “x” in the corner of the window, we want our program to terminate, so we’ll use <span class="smallcode">setDefaultCloseOperation(Frame.EXIT_ON_CLOSE)</span>.</p> + +<p><span class="smallcode">setSize</span> defines the window width and height in pixels. Pretty self-explanatory.</p> + +<p><span class="smallcode">setLocationRelativeTo(null)</span> allows us to center the window right in the middle of the screen. In my opinion, that’s the easiest and most user friendly. You have the option to set that location in pixels, using x and y coordinates, but generally, I’ve found that the user expects the window to open in the center of the screen.</p> + +<p>Last, we want to set the layout. Java uses things called “Layout Managers”, which basically defines how elements are laid out inside of the program window. There are three layout managers that are most commonly used: Border, Flow, and Grid. You can read up on those other two, as I’m not going to explain them, but in this program, we’re going to be using the grid layout manager. It allows us to define how many rows, and how many columns we want for our program. <span class="smallcode">GridLayout(5,2,5,5)</span> tells our program that we want to use the Grid Layout Manager, with five rows, two columns and then 5 pixels for spacing.</p> + +<pre><code class="language-java">setTitle(&quot;Loan Calculator&quot;); +setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +setSize(500,300); +setLocationRelativeTo(null); +setLayout(new GridLayout(5,2,5,5)); +</code></pre> + +<p>Now that we’ve defined our window, we need to create some text labels next to our input fields. Because it’s just text, we don’t use <span class="smallcode">private</span> or <span class="smallcode">public</span> on these objects. We use the following code to create a new label (JLabel) object. Again, when we name the object, it’s good practice to use a prefix so you can easily tell what type of object it is. I use <span class="smallcode">jl</span> as my prefix. Then, we create the string of text for what the JLabel will output.</p> + +<p>If you notice, I’ve placed a preceding space in front of the text. I find that Java likes to push things right up against the frame, and it’s not very aesthetically pleasing. By adding a space, it allows us to push the text away from the left edge ever-so-slightly. You can add more spacing if you prefer.</p> + +<pre><code class="language-java">JLabel jlInvestmentAmount = new JLabel(&quot; Investment Amount&quot;); +JLabel jlNumberOfYears = new JLabel(&quot; Number of Years&quot;); +JLabel jlAnnualInterestRate = new JLabel(&quot; Annual Interest Rate&quot;); +JLabel jlFutureValue = new JLabel(&quot; Future Value&quot;); +</code></pre> + +<p>Earlier, we defined our textfields and buttons, but we didn’t actually create them. We basically told the program, “Hey, I’m going to be making these soon. Just wanted to give you a heads up.” But now we create them.</p> + +<p>In the last line of code, we write <span class="smallcode">jtfFutureValue.setEditable(false)</span>. I wanted the first three fields to be able to accept input from the user. But the last field (the Future Value field) is going to simply output our final answer. Rather than making the user confused by thinking they need to input something, I set the editing to <span class="smallcode">false</span>.</p> + +<pre><code class="language-java">jtfInvestmentAmount = new JTextField(); +jtfNumberOfYears = new JTextField(); +jtfAnnualInterestRate = new JTextField(); +jtfFutureValue = new JTextField(); +jbtCompute = new JButton(&quot;Compute&quot;); +jbtReset = new JButton(&quot;Reset&quot;); +jtfFutureValue.setEditable(false); +</code></pre> + +<p>Now that we’ve defined and created everything, we should be good right? Not quite. If were to run the program right now, our program wouldn’t do anything. What happened to all the things we created, you might ask? We’ve created all the objects, but we haven’t told the program to add them to our frame (window). We can do this simply by typing <span class="smallcode">add</span> and then the name of the object.</p> + +<pre><code class="language-java">add (jlInvestmentAmount); +add (jtfInvestmentAmount); +add (jlNumberOfYears); +add (jtfNumberOfYears); +add (jlAnnualInterestRate); +add (jtfAnnualInterestRate); +add (jlFutureValue); +add (jtfFutureValue); +add (jbtCompute); +add (jbtReset); +</code></pre> + +<p>Next, we need to tell the computer that we want it to do something once we click on a button. This code doesn’t do much else, besides call other methods (functions) that we’ll define in a bit.</p> + +<pre><code class="language-java">ListenerClass listener = new ListenerClass(); +jbtCompute.addActionListener(listener); +jbtReset.addActionListener(listener); +</code></pre> + +<p>Another very important piece: We need to set the window visibility to <span class="smallcode">true</span>. Otherwise, nothing will appear when we run the program.</p> + +<pre><code class="language-java">setVisible(true); +</code></pre> + +<p>Every program in Java requires a <span class="smallcode">main</span> method. All this code does is calls the class that we’ve already created. It doesn’t look like much, but our program won’t run at all if we don’t have this.</p> + +<pre><code class="language-java">public static void main(String[] args) { +new SimpleGUIProgram(); +</code></pre> + +<p>The following code does two important things: catches exceptions, and does all the math calculations for our program.</p> + +<p>First, we need to assume that people are stupid. You would think that most people would be smart enough to input numbers into the fields of our program, but what happens if they entered a word instead of a number? Without a “try…catch”, the program would just crash, without any warning to our user. Instead, we can make things a little bit more user friendly and say, “Please enter numeric values” if they enter anything except numbers.</p> + +<p>And second, the rest of this code takes the data entered by the user in the fields, does all of the calculations, and then formats it to look pretty. We pull the data from the fields, parse it into a number (either an Integer or a Double), and then convert the annual interest rate into a monthly interest rate. We could do that by dividing by 12, but I also combined the percentage into that calculation as well (1200 instead of 12) so that I don’t have to write another line of code to divide the percent by 100 as well.</p> + +<pre><code class="language-java">private void computeValue() { +try { +double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText()); +double monthlyInterestRate = annualInterestRate / 1200.0; +int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText()); +double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText()); +double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12); +jtfFutureValue.setText(String.format(&quot;%.2f&quot;, futureValue)); +} catch (Exception e) { +JOptionPane.showMessageDialog(null, &quot; Please enter numeric values.&quot;); +} +} +</code></pre> + +<p>This code is very simple. Whenever a user clicks on the “Reset” button, it will call this method, and change whatever is input into the boxes into a blank string.</p> + +<pre><code class="language-java">private void resetForm() { +jtfInvestmentAmount.setText(&quot;&quot;); +jtfAnnualInterestRate.setText(&quot;&quot;); +jtfNumberOfYears.setText(&quot;&quot;); +jtfFutureValue.setText(&quot;&quot;); +} +</code></pre> + +<p>And finally, this code is what links the buttons to the methods we created. We create a ListenerClass, which essentially says, “When I do this, do this.” So, “when I click on a button, call this method.”</p> + +<pre><code class="language-java">private class ListenerClass implements ActionListener { +public void actionPerformed(ActionEvent e) { +if (e.getSource() == jbtCompute) { +computeValue(); +} +if (e.getSource() == jbtReset) { +resetForm(); +} +</code></pre> + +<p>And really, that’s it! Not to shabby for ~100 lines of code, eh? Here’s the entire code:</p> + +<pre><code class="language-java">/************************* +* Created by: Bryce Matheson +* Website: blog.mathesondigital.com +* Date: 12/7/2014 +* +* Purpose: A simple GUI Investment Calculator +* +* Rights: Free to use for Personal Use +*************************/ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class SimpleGUIProgram extends JFrame { + + private JTextField jtfInvestmentAmount; + private JTextField jtfAnnualInterestRate; + private JTextField jtfNumberOfYears; + private JTextField jtfFutureValue; + private JButton jbtCompute; + private JButton jbtReset; + + public SimpleGUIProgram() { + + setTitle(&quot;Loan Calculator&quot;); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(500,300); + setLocationRelativeTo(null); + setLayout(new GridLayout(5,2,5,5)); + + JLabel jlInvestmentAmount = new JLabel(&quot; Investment Amount&quot;); + JLabel jlNumberOfYears = new JLabel(&quot; Number of Years&quot;); + JLabel jlAnnualInterestRate = new JLabel(&quot; Annual Interest Rate&quot;); + JLabel jlFutureValue = new JLabel(&quot; Future Value&quot;); + + jtfInvestmentAmount = new JTextField(); + jtfNumberOfYears = new JTextField(); + jtfAnnualInterestRate = new JTextField(); + jtfFutureValue = new JTextField(); + jtfFutureValue.setEditable(false); + + jbtCompute = new JButton(&quot;Compute&quot;); + jbtReset = new JButton(&quot;Reset&quot;); + + add (jlInvestmentAmount); + add (jtfInvestmentAmount); + add (jlNumberOfYears); + add (jtfNumberOfYears); + add (jlAnnualInterestRate); + add (jtfAnnualInterestRate); + add (jlFutureValue); + add (jtfFutureValue); + add (jbtCompute); + add (jbtReset); + + ListenerClass listener = new ListenerClass(); + jbtCompute.addActionListener(listener); + jbtReset.addActionListener(listener); + + setVisible(true); + } + + public static void main(String[] args) { + new SimpleGUIProgram(); + } + + private void computeValue() { + try { + double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText()); + double monthlyInterestRate = annualInterestRate / 1200.0; + int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText()); + double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText()); + double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12); + jtfFutureValue.setText(String.format(&quot;%.2f&quot;, futureValue)); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, &quot; Please enter numeric values.&quot;); + } + } + + private void resetForm() { + jtfInvestmentAmount.setText(&quot;&quot;); + jtfAnnualInterestRate.setText(&quot;&quot;); + jtfNumberOfYears.setText(&quot;&quot;); + jtfFutureValue.setText(&quot;&quot;); + } + + private class ListenerClass implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (e.getSource() == jbtCompute) { + computeValue(); + } + if (e.getSource() == jbtReset) { + resetForm(); + } + } + } +} +</code></pre> + + + + + My love-hate relationship with WordPress + http://localhost:1313/brycematheson.io/post/2014-12-06-my-love-hate-relationship-with-wordpress/ + Sat, 06 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-06-my-love-hate-relationship-with-wordpress/ + + +<p>Recently, I’ve really been getting fed up with WordPress. And here’s why.</p> + +<p>WordPress dates all the way back to 2001. It was originally developed as a simple blogging platform based off of MySQL and PHP. Close to fifteen years later, it’s become a web standard and is used as the Framework/CMS for <a href="http://en.wikipedia.org/wiki/WordPress" target="_blank">more than 20% of all the websites on the internet</a>. And that’s exactly the problem.</p> + +<p>WordPress has exploded into a million different forks and subprojects, and has been expanded to run an equal amount of themes and plugins. My biggest issue with this is that WordPress was never <em>designed</em> to support this. Years down the road, it’s still sitting on code that dates back a decade. The same issue holds true with Microsoft. Even after launching Windows 8.1, it still has pieces of code that were used in the Windows 3.1 and Windows 95 operating systems. It baffles me that 20 years later, we still can’t seem to ditch MS-DOS or the Registry.</p> + +<p>WordPress was never designed to be used as an e-commerce platform, but with the help from the guys over at <a href="http://www.woothemes.com/woocommerce/" target="_blank">Woocommerce</a>, it’s never been easier and quicker to do so. WordPress was never designed to be used as a Social Media platform, but of course, there are plugins to do that as well. WordPress is so simple and easy to use, that it’s become overly bloated with features to cater to the needs of everyone. I fear that it’s soon going to crumble in on itself.</p> + +<h2 id="security-holes:4416bd877d3758ff29e0e8e3c2df4fd1">Security Holes</h2> + +<p>And here’s something else to think about too. Even if only 1/100th of all websites on the internet were using WordPress as their CMS, imagine what would happen if a large exploit were found. Millions of websites are instantly vulnerable in the hands of skilled hackers. Sadly, the number of potential targets is a lot larger than 1%, should an exploit be found. Many users don’t know that they would be perfectly fine completely ditching the database, and just using static HTML to host their blogs, completely eliminating the security flaws.</p> + +<h2 id="updates:4416bd877d3758ff29e0e8e3c2df4fd1">Updates</h2> + +<p>WordPress updates are the absolute worst. Starting somewhere in the time-frame of Wordpress 3, automatic updates were introduced by default (although you can turn these off through the database, I believe). For a lot of the websites I build and manage for clients, I set myself up as an administrator. Whenever an automatic update is pushed, I get an email saying, “Your WordPress installation has been updated to version 4.0.1…” I cringe just thinking about all the hundreds of things that could now be broken on dozens of my websites. Granted, the WordPress team does their absolute best to ensure that nothing breaks, but with hundreds of thousands of different themes and plugins, how can anyone be absolutely certain that they won’t be a compatibility issue somewhere?</p> + +<h2 id="comments:4416bd877d3758ff29e0e8e3c2df4fd1">Comments</h2> + +<p>The comment system in WordPress is so flawed, it’s not even funny. Even when using a plugin to block/prevent spam, there are times when I’ll log into my dashboard and find that I have 300+ pending comments to be approved, 90% of them being complete garbage. What’s even more annoying is that all of these comments, whether legitimate or spam, are being stored in the database, ultimately slowing down the over-all speed of your website.</p> + +<h2 id="speed:4416bd877d3758ff29e0e8e3c2df4fd1">Speed</h2> + +<p>Touching on this already a little earlier, having a backend attached to any website is most always going to ensure a decrease in speed unless it’s closely managed and optimized. Most of the time, the end-user has little to no knowledge on how to do this. Many users would be perfectly fine serving plain ol’ static HTML or using a static site builder such as <a href="http://jekyllrb.com" target="_blank">Jekyll</a> or <a href="http://middlemanapp.com" target="_blank">Middleman</a>. Every query to a database requires more bandwidth, and more server strain.</p> + +<p>I’m a little hesitant to even touch on the topic of themes, because it irritates me so much. The other day I was looking at some of <a href="http://themeforest.net/search?utf8=✓&term=&view=list&sort=sales&date=&category=wordpress&price_min=&price_max=&sales=&rating_min=&platform=" target="_blank">the best-selling WordPress themes on themeforest</a>. These themes, in my opinion, are so poorly coded, and so irritatingly slow. The builders of these themes attempt to cater to everyone and no one, all at the same time. Do they have any training about UI or UX? Do they understand that they need to minimize their CSS and JavaScript? Do they understand that they need to optimize their images to a suitable web size? Clients come to me and say, “Oooh. I like this look.” They truly have no idea what they’re doing. Having something that looks “pretty” just won’t cut it. There’s a lot more to think about behind the scenes, rather than just how a website looks.</p> + +<p>I’ve seen theme packages that, for the entire install, run in the area of 15 megabytes. 15 MEGABYTES!? Are you kidding me? Even with LTE cell phone speeds and fiber-optic internet connections, 15 megabytes is a lot of data. Good luck having users stick around when your site won’t load on their phones. Some people might say, “Well, users will wait for at least a second for my site to load.” Wrong. <a href="http://www.fastcompany.com/1825005/how-one-second-could-cost-amazon-16-billion-sales" target="_blank">Amazon did a study</a> on page load speed, and how it affects their sales conversion rates. They found that a one-second difference in page-loading speed could cost them up to $1.6 Billion in sales.</p> + +<h2 id="the-art-of-web-design:4416bd877d3758ff29e0e8e3c2df4fd1">The Art of Web Design</h2> + +<p>In my mind, building a website truly is a work of art. I’m proud of the hours that I’ve spent in learning, growing, and honing my skills in order to develop something out of thin air that helps a client’s business or hobby or whatever. However, nowadays, it seems that we’re beginning to lose that art in development. Websites such as <a href="http://www.wix.com" target="_blank">wix</a> make it seemingly so simple to throw up a website that anyone can do it. WordPress is no different. Now, because of the simplicity of WordPress, people begin calling themselves “Developers” or “Experts” without even touching a single line of code.</p> + +<h2 id="ease-of-clients:4416bd877d3758ff29e0e8e3c2df4fd1">Ease of Clients</h2> + +<p>Now, here comes the love. I really don’t hate WordPress, although it may seem that way. One of the number one reasons I use WordPress as a CMS for my entire client base is the ability to entirely hand of a project. We’ve all worked with clients that are annoying, nagging, and constantly changing their mind. When the project is done, I can’t wait to get “rid” of them, because it’s a never-ending project. Nothing ever gets finished. WordPress allows me to (finally!) finish a project and give them the ability to change and manipulate virtually anything they may want with knowing little or no code at all, and best of all, without involving me.</p> + +<h2 id="quick-and-inexpensive:4416bd877d3758ff29e0e8e3c2df4fd1">Quick and Inexpensive</h2> + +<p>When you’re constantly beginning new projects, you get in the habit of building your own mini-framework, in hopes to cut off some of the development time or shave off some of the repetitiveness. WordPress is KING of saving time. I can create a new hosting environment, and have a functional WordPress installation in less than five minutes total. Then, I can focus on the needs of the customer and the design, rather than re-inventing the wheel for the 500th time.</p> + +<h2 id="conclusion:4416bd877d3758ff29e0e8e3c2df4fd1">Conclusion</h2> + +<p>Ultimately, I think my hatred really comes down to the bloat of WordPress. It reminds me so frequently of those who attempt to build an entire website using Dreamweaver’s visual mode. Yes, it’s possible to do it without knowing any code at all. But if you know anything about code, you can instantly look at the code that Dreamweaver spits out, and you know how much bloat and garbage can be cut out. WordPress is an incredible piece of software, and that’s apparent in it’s widespread usage. But bloat is my number one concern.</p> + +<p>If you’re familiar with <a href="https://developers.google.com/speed/pagespeed/" target="_blank">Google’s Page Speed</a> analysis, you might be surprised to see that even some of the most popular websites rarely score above 50%. Take a basic WordPress theme, give it a test, and you might be surprised that you only received a score of 27. Developing everything from scratch, you can easily shave off the bloat and improve your page speed, which can equate to improved SEO through Google.</p> + +<p>One last point, and then I’ll shut up. Am I using WordPress to run my blog? Absolutely. Is there a lot of bloat? Maybe a little, but I’ve tried to cut out everything that I could. I’m scoring in the 90’s in most aspects of Google’s Page rankings. I think I fall into the trap that so many other users do, and try too hard to focus on design, colors, and appearance, and not so much on the content. I was recently inspired by <a href="http://davidbcalhoun.com" target="_blank">David Calhoun’s blog</a>, and have since changed the design of my own blog to a more minimal design. David’s blog is great. It’s plain, clean, crisp, but more important, it’s fast. It provides the required functionality, and then the rest is focused on the content. Does David’s readers care that his blog is plain? Not really. He has a consistent reader-base, because of what he provides. Rarely, if ever, would anyone say, “This is a great looking site. I’m going to come back, even if there’s nothing here for me.” No. Does a good design/functionality help? Of course. But it’s not everything.</p> + + + + + Here's to actually sticking with something + http://localhost:1313/brycematheson.io/post/2014-12-05-heres-to-actually-sticking-with-something/ + Fri, 05 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-05-heres-to-actually-sticking-with-something/ + <p>When I was 16 (yes, I&rsquo;m young, okay?), I had the idea for a Tech Blog. Not that it had never been done before or anything, but it&rsquo;s just that ever since the age of 9, technology is the only hobby or thing in my life that I&rsquo;ve consistently held interest in. I&rsquo;m not sure why I wanted to start one, but I just figured it would be a good way of tracking my progress and learning of various technologies, as well as helping others in anyway, if possible. I got about three posts in, got discouraged, thought &#8220;this is stupid&#8221;, and told myself that I would never in any way, shape, or form be able to compete with the larger tech blogs like <a href="http://www.cnet.com" target="_blank">CNet</a>, <a href="http://techcrunch.com" target="_blank">TechCrunch</a>, or TUAW (now<a href="http://www.imore.com" target="_blank"> iMore</a>).</p> + +<p>But now, I&rsquo;m kicking myself. In hindsight, I keep thinking to myself, &#8220;Imagine the web presence you could have had, if only you had hung on for all these years.&#8221; Well, recently, I&rsquo;ve had a bit of motivation (or maybe it&rsquo;s procrastination of more important things), and I&rsquo;ve decided to actually stick to this blog. It&rsquo;s been going for about six months now, and I plan on continuing the trend.</p> + +<p>I have <a href="http://www.laytreasuresinheaven.com" target="_blank">another blog</a> dealing with the religious aspect of my life, and it&rsquo;s actually proven to be successful (at least in my book), getting around 30,000 hits a month. It&rsquo;s not incredible, and I haven&rsquo;t been very great at posting lately, but it&rsquo;s really rewarding to see what I&rsquo;ve been able to achieve by keeping it running for around a year and a half.</p> + +<p>So, here&rsquo;s to actually sticking with something, for once in my life.</p> + + + + + \ No newline at end of file diff --git a/public/js/highlight.pack.js b/public/js/highlight.pack.js new file mode 100644 index 0000000..67c19ca --- /dev/null +++ b/public/js/highlight.pack.js @@ -0,0 +1 @@ +!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){var n=(e.className+" "+(e.parentNode?e.parentNode.className:"")).split(/\s+/);return n=n.map(function(e){return e.replace(/^lang(uage)?-/,"")}),n.filter(function(e){return N(e)||/no(-?)highlight/.test(e)})[0]}function o(e,n){var t={};for(var r in e)t[r]=e[r];if(n)for(var r in n)t[r]=n[r];return t}function i(e){var n=[];return function r(e,a){for(var o=e.firstChild;o;o=o.nextSibling)3==o.nodeType?a+=o.nodeValue.length:1==o.nodeType&&(n.push({event:"start",offset:a,node:o}),a=r(o,a),t(o).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:o}));return a}(e,0),n}function c(e,r,a){function o(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function c(e){l+=""}function u(e){("start"==e.event?i:c)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=o();if(l+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){f.reverse().forEach(c);do u(g.splice(0,1)[0]),g=o();while(g==e&&g.length&&g[0].offset==s);f.reverse().forEach(i)}else"start"==g[0].event?f.push(g[0].node):f.pop(),u(g.splice(0,1)[0])}return l+n(a.substr(s))}function u(e){function n(e){return e&&e.source||e}function t(t,r){return RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var c={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");c[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):Object.keys(a.k).forEach(function(e){u(e,a.k[e])}),a.k=c}a.lR=t(a.l||/\b[A-Za-z0-9_]+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function s(e,t,a,o){function i(e,n){for(var t=0;t";return o+=e+'">',o+n+i}function d(){if(!w.k)return n(y);var e="",t=0;w.lR.lastIndex=0;for(var r=w.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(w,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=w.lR.lastIndex,r=w.lR.exec(y)}return e+n(y.substr(t))}function h(){if(w.sL&&!R[w.sL])return n(y);var e=w.sL?s(w.sL,y,!0,L[w.sL]):l(y);return w.r>0&&(B+=e.r),"continuous"==w.subLanguageMode&&(L[w.sL]=e.top),p(e.language,e.value,!1,!0)}function v(){return void 0!==w.sL?h():d()}function b(e,t){var r=e.cN?p(e.cN,"",!0):"";e.rB?(M+=r,y=""):e.eB?(M+=n(t)+r,y=""):(M+=r,y=t),w=Object.create(e,{parent:{value:w}})}function m(e,t){if(y+=e,void 0===t)return M+=v(),0;var r=i(t,w);if(r)return M+=v(),b(r,t),r.rB?0:t.length;var a=c(w,t);if(a){var o=w;o.rE||o.eE||(y+=t),M+=v();do w.cN&&(M+=""),B+=w.r,w=w.parent;while(w!=a.parent);return o.eE&&(M+=n(t)),y="",a.starts&&b(a.starts,""),o.rE?0:t.length}if(f(t,w))throw new Error('Illegal lexeme "'+t+'" for mode "'+(w.cN||"")+'"');return y+=t,t.length||1}var x=N(e);if(!x)throw new Error('Unknown language: "'+e+'"');u(x);for(var w=o||x,L={},M="",k=w;k!=x;k=k.parent)k.cN&&(M=p(k.cN,"",!0)+M);var y="",B=0;try{for(var C,j,I=0;;){if(w.t.lastIndex=I,C=w.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}m(t.substr(I));for(var k=w;k.parent;k=k.parent)k.cN&&(M+="");return{r:B,value:M,language:e,top:w}}catch(A){if(-1!=A.message.indexOf("Illegal"))return{r:0,value:n(t)};throw A}}function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(N(n)){var t=s(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function f(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
")),e}function g(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/(\s|^)hljs(\s|$)/)||a.push("hljs"),r&&a.push(r),a.join(" ").trim()}function p(e){var n=a(e);if(!/no(-?)highlight/.test(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?s(n,r,!0):l(r),u=i(t);if(u.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(u,i(p),r)}o.value=f(o.value),e.innerHTML=o.value,e.className=g(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",h,!1),addEventListener("load",h,!1)}function b(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function m(){return Object.keys(R)}function N(e){return R[e]||R[x[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},R={},x={};return e.highlight=s,e.highlightAuto=l,e.fixMarkup=f,e.highlightBlock=p,e.configure=d,e.initHighlighting=h,e.initHighlightingOnLoad=v,e.registerLanguage=b,e.listLanguages=m,e.getLanguage=N,e.inherit=o,e.IR="[a-zA-Z][a-zA-Z0-9_]*",e.UIR="[a-zA-Z_][a-zA-Z0-9_]*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.CLCM={cN:"comment",b:"//",e:"$",c:[e.PWM]},e.CBCM={cN:"comment",b:"/\\*",e:"\\*/",c:[e.PWM]},e.HCM={cN:"comment",b:"#",e:"$",c:[e.PWM]},e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("cpp",function(t){var i={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginaryintmax_t uintmax_t int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_tint_least8_t uint_least8_t int_least16_t uint_least16_t int_least32_t uint_least32_tint_least64_t uint_least64_t int_fast8_t uint_fast8_t int_fast16_t uint_fast16_t int_fast32_tuint_fast32_t int_fast64_t uint_fast64_t intptr_t uintptr_t atomic_bool atomic_char atomic_scharatomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llongatomic_ullong atomic_wchar_t atomic_char16_t atomic_char32_t atomic_intmax_t atomic_uintmax_tatomic_intptr_t atomic_uintptr_t atomic_size_t atomic_ptrdiff_t atomic_int_least8_t atomic_int_least16_tatomic_int_least32_t atomic_int_least64_t atomic_uint_least8_t atomic_uint_least16_t atomic_uint_least32_tatomic_uint_least64_t atomic_int_fast8_t atomic_int_fast16_t atomic_int_fast32_t atomic_int_fast64_tatomic_uint_fast8_t atomic_uint_fast16_t atomic_uint_fast32_t atomic_uint_fast64_t",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"};return{aliases:["c","h","c++","h++"],k:i,i:""]',k:"include",i:"\\n"},t.CLCM]},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:i,c:["self"]},{b:t.IR+"::"},{bK:"new throw return",r:0},{cN:"function",b:"("+t.IR+"\\s+)+"+t.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:t.IR+"\\s*\\(",rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:i,r:0,c:[t.CBCM]},t.CLCM,t.CBCM]}]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",c={cN:"yardoctag",b:"@[A-Za-z]+"},a={cN:"value",b:"#<",e:">"},s={cN:"comment",v:[{b:"#",e:"$",c:[c]},{b:"^\\=begin",e:"^\\=end",c:[c],r:10},{b:"^__END__",e:"\\n$"}]},n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={cN:"params",b:"\\(",e:"\\)",k:r},d=[t,a,s,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]},s]},{cN:"function",bK:"def",e:" |$|;",r:0,c:[e.inherit(e.TM,{b:b}),i,s]},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[a,s,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];n.c=d,i.c=d;var l="[>?]>",u="[\\w#]+\\(\\w+\\):\\d+:\\d+>",N="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",o=[{b:/^\s*=>/,cN:"status",starts:{e:"$",c:d}},{cN:"prompt",b:"^("+l+"|"+u+"|"+N+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,c:[s].concat(o).concat(d)}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"tag",b:""},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("python",function(e){var r={cN:"prompt",b:/^(>>>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},l={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},c={cN:"params",b:/\(/,e:/\)/,c:["self",r,l,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,l,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n]/,c:[e.UTM,c]},{cN:"decorator",b:/@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("javascript",function(r){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",r:10,v:[{b:/^\s*('|")use strict('|")/},{b:/^\s*('|")use asm('|")/}]},r.ASM,r.QSM,r.CLCM,r.CBCM,r.CNM,{b:"("+r.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[r.CLCM,r.CBCM,r.RM,{b:/;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[r.inherit(r.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[r.CLCM,r.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+r.IR,r:0}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",t={cN:"subst",b:/#\{/,e:/}/,k:c},r=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,t]},{b:/"/,e:/"/,c:[e.BE,t]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[t,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];t.c=r;var i=e.inherit(e.TM,{b:n}),s="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(r)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:r.concat([{cN:"comment",b:"###",e:"###",c:[e.PWM]},e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+s,e:"[-=]>",rB:!0,c:[i,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:s,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("http",function(){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:!0}}]}});hljs.registerLanguage("haskell",function(e){var i={cN:"comment",v:[{b:"--",e:"$"},{b:"{-",e:"-}",c:["self"]}]},c={cN:"pragma",b:"{-#",e:"#-}"},a={cN:"preprocessor",b:"^#",e:"$"},n={cN:"type",b:"\\b[A-Z][\\w']*",r:0},l={cN:"container",b:"\\(",e:"\\)",i:'"',c:[c,i,a,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"})]},t={cN:"container",b:"{",e:"}",c:l.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[l,i],i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 qualified as hiding",c:[l,i],i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[n,l,i]},{cN:"typedef",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[c,i,n,l,t]},{cN:"default",bK:"default",e:"$",c:[n,l,i]},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM,i]},{cN:"foreign",b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[n,e.QSM,i]},{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},c,i,a,e.QSM,e.CNM,n,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}]}});hljs.registerLanguage("tex",function(){var c={cN:"command",b:"\\\\[a-zA-Zа-яА-я]+[\\*]?"},e={cN:"command",b:"\\\\[^a-zA-Zа-яА-я0-9]"},m={cN:"special",b:"[{}\\[\\]\\&#~]",r:0};return{c:[{b:"\\\\[a-zA-Zа-яА-я]+[\\*]? *= *-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",rB:!0,c:[c,e,{cN:"number",b:" *=",e:"-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",eB:!0}],r:10},c,e,m,{cN:"formula",b:"\\$\\$",e:"\\$\\$",c:[c,e,m],r:0},{cN:"formula",b:"\\$",e:"\\$",c:[c,e,m],r:0},{cN:"comment",b:"%",e:"$",r:0}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("};return{cI:!0,i:"[=/|']",c:[e.CBCM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[e.CBCM,{cN:"rule",b:"[^\\s]",rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}});hljs.registerLanguage("objectivec",function(e){var t={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"NSString NSData NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView NSView NSViewController NSWindow NSWindowController NSSet NSUUID NSIndexSet UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection NSURLSession NSURLSessionDataTask NSURLSessionDownloadTask NSURLSessionUploadTask NSURLResponseUIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,a="@interface @class @protocol @implementation";return{aliases:["m","mm","objc","obj-c"],k:t,l:o,i:""}]}]},{cN:"class",b:"("+a.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:a,l:o,c:[e.UTM]},{cN:"variable",b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("swift",function(e){var t={keyword:"class deinit enum extension func import init let protocol static struct subscript typealias var break case continue default do else fallthrough if in for return switch where while as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned unowned safe unsafe weak willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue assert bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal false filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced join lexicographicalCompare map max maxElement min minElement nil numericCast partition posix print println quickSort reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof strideofValue swap swift toString transcode true underestimateCount unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafePointers withVaList"},i={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n={cN:"comment",b:"/\\*",e:"\\*/",c:[e.PWM,"self"]},r={cN:"subst",b:/\\\(/,e:"\\)",k:t,c:[]},s={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[s],{k:t,c:[o,e.CLCM,n,i,s,{cN:"func",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/,i:/\(/}),{cN:"generics",b:/\/,i:/\>/},{cN:"params",b:/\(/,e:/\)/,k:t,c:["self",s,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",k:"struct protocol class extension enum",b:"(struct|protocol|class(?! (func|var))|extension|enum)",e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:"preprocessor",b:"(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix)"}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)\}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("markdown",function(){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("diff",function(){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={cN:"variable",v:[{b:/\$\d/},{b:/[\$\%\@](\^\w\b|#\w+(\:\:\w+)*|{\w+}|\w+(\:\:\w*)*)/},{b:/[\$\%\@][^\s\w{]/,r:0}]},o={cN:"comment",b:"^(__END__|__DATA__)",e:"\\n$",r:5},i=[e.BE,r,n],c=[n,e.HCM,o,{cN:"comment",b:"^\\=\\w",e:"\\=cut",eW:!0},s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,o,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0}];return r.c=c,s.c=c,{aliases:["pl"],k:t,c:c}});hljs.registerLanguage("vim",function(e){return{l:/[!#@\w]+/,k:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw d|0 delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu g|0 go gr grepa gu gv ha h|0 helpf helpg helpt hi hid his i|0 ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs n|0 new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf q|0 quita qa r|0 rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv s|0 sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync t|0 tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up v|0 ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"abs acos add and append argc argidx argv asin atan atan2 browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call ceil changenr char2nr cindent clearmatches col complete complete_add complete_check confirm copy cos cosh count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists exp expand extend feedkeys filereadable filewritable filter finddir findfile float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getmatches getpid getpos getqflist getreg getregtype gettabvar gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key haslocaldir hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert invert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime log log10 luaeval map maparg mapcheck match matchadd matcharg matchdelete matchend matchlist matchstr max min mkdir mode mzeval nextnonblank nr2char or pathshorten pow prevnonblank printf pumvisible py3eval pyeval range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse round screenattr screenchar screencol screenrow search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar setwinvar sha256 shellescape shiftwidth simplify sin sinh sort soundfold spellbadword spellsuggest split sqrt str2float str2nr strchars strdisplaywidth strftime stridx string strlen strpart strridx strtrans strwidth submatch substitute synconcealed synID synIDattr synIDtrans synstack system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname tolower toupper tr trunc type undofile undotree values virtcol visualmode wildmenumode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile xor"},i:/[{:]/,c:[e.NM,e.ASM,{cN:"string",b:/"((\\")|[^"\n])*("|\n)/},{cN:"variable",b:/[bwtglsav]:[\w\d_]*/},{cN:"function",bK:"function function!",e:"$",r:0,c:[e.TM,{cN:"params",b:"\\(",e:"\\)"}]}]}});hljs.registerLanguage("makefile",function(e){var a={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage("cs",function(e){var r="abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",t=e.IR+"(<"+e.IR+">)?";return{aliases:["csharp"],k:r,i:/::/,c:[{cN:"comment",b:"///",e:"$",rB:!0,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:""},{b:""}]}]},e.CLCM,e.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},e.ASM,e.QSM,e.CNM,{bK:"class namespace interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:"",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"title",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("sql",function(e){var t={cN:"comment",b:"--",e:"$"};return{cI:!0,i:/[<>]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup",e:/;/,eW:!0,k:{keyword:"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("xml",function(){var t="[A-Za-z0-9\\._:-]+",e={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"},c={eW:!0,i:/]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[c],starts:{e:"",rE:!0,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[c],starts:{e:"",rE:!0,sL:"javascript"}},e,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},c]}]}});hljs.registerLanguage("x86asm",function(s){return{cI:!0,l:"\\.?"+s.IR,k:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",literal:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l",pseudo:"db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times",preprocessor:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public ",built_in:"bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},c:[{cN:"comment",b:";",e:"$",r:0},{cN:"number",b:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",r:0},{cN:"number",b:"\\$[0-9][0-9A-Fa-f]*",r:0},{cN:"number",b:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[HhXx]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{cN:"number",b:"\\b(?:0[HhXx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"},s.QSM,{cN:"string",b:"'",e:"[^\\\\]'",r:0},{cN:"string",b:"`",e:"[^\\\\]`",r:0},{cN:"string",b:"\\.[A-Za-z0-9]+",r:0},{cN:"label",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0},{cN:"label",b:"^\\s*%%[A-Za-z0-9_$#@~.?]*:",r:0},{cN:"argument",b:"%[0-9]+",r:0},{cN:"built_in",b:"%!S+",r:0}]}});hljs.registerLanguage("scala",function(e){var t={cN:"annotation",b:"@[A-Za-z]+"},a={cN:"string",b:'u?r?"""',e:'"""',r:10},r={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},c={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},i={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0},l={cN:"class",bK:"class object trait type",e:/[:={\[(\n;]/,c:[{cN:"keyword",bK:"extends with",r:10},i]},n={cN:"function",bK:"def val",e:/[:={\[(\n;]/,c:[i]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,e.QSM,r,c,n,l,e.CNM,t]}}); \ No newline at end of file diff --git a/public/page/1/index.html b/public/page/1/index.html new file mode 100644 index 0000000..7b67a19 --- /dev/null +++ b/public/page/1/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/page/2/index.html b/public/page/2/index.html new file mode 100644 index 0000000..7c8d372 --- /dev/null +++ b/public/page/2/index.html @@ -0,0 +1,206 @@ + + + + + + Allegiant + + + + + + + + + + + + + +
+ +
+ + +
+

Take that, Mr. Barney

+ +

We’ve all had those professors/teachers that we just don’t seem to mesh with. Recently, I had a professor with whom I could not set aside my differences. The class was about Mobile Application Development. I went into it thinking, “Wow, I’m excited! Finally, I’ll be able to create an iOS/Android application!” On the first day of the class, Mr. Barney walked in and said, “This is not a programming class. This is not an iOS development class.

+ Continue reading ↦ +
+
+ + + +
+

Pseudo-Responsive Images

+ +

Honestly, I’m a bit embarrassed to say that I didn’t know how to do this before. I’ll be creating a blog post here fairly soon on my conversion from WordPress to Jekyll for this blog, but in doing so, I’ve learned a lot of cool new things. Due to the vast number of mobile devices in circulation right now, I make it a habit to try and develop for mobile first, and then expand for the desktop user.

+ Continue reading ↦ +
+
+ + + +
+

Build a GUI Investment Calculator in Java

+ +

I’m not a programmer. Some people just have that natural itch to want to go out and code all day long, but that isn’t me. I enjoy scripting and web development, but deep, low-level programming just simply isn’t my thing. So the fact that even I was able to create a simple GUI application should tell you how easy it is. The code below might look daunting at first, but we’ll walk through it piece by piece to hopefully clear things up.

+ Continue reading ↦ +
+
+ + + +
+

My love-hate relationship with WordPress

+ +

Recently, I’ve really been getting fed up with WordPress. And here’s why. WordPress dates all the way back to 2001. It was originally developed as a simple blogging platform based off of MySQL and PHP. Close to fifteen years later, it’s become a web standard and is used as the Framework/CMS for more than 20% of all the websites on the internet. And that’s exactly the problem. WordPress has exploded into a million different forks and subprojects, and has been expanded to run an equal amount of themes and plugins.

+ Continue reading ↦ +
+
+ + + +
+

Here's to actually sticking with something

+ +

When I was 16 (yes, I’m young, okay?), I had the idea for a Tech Blog. Not that it had never been done before or anything, but it’s just that ever since the age of 9, technology is the only hobby or thing in my life that I’ve consistently held interest in. I’m not sure why I wanted to start one, but I just figured it would be a good way of tracking my progress and learning of various technologies, as well as helping others in anyway, if possible.

+ Continue reading ↦ +
+
+ + + +
+

I have an iPhone and Mac. Get an iPad?

+ +

Let me start off right away by saying that you do not “need” an iPad. Regardless of what you do or do not have, you do not NEED an iPad. If you want to hear me go off on a big spiel about instant gratification and entitlement, I could talk your ear off. But we’ll save that for another day. But let’s get to what you’re really interested about. I am not an Apple Fanboy (an Apple Watch for $350?!

+ Continue reading ↦ +
+
+ + + +
+

T-Mobile, I'm Breaking Up With You

+ +

“It’s me, not you. Okay, no. Actually, it is you. We’ve had a good run together. We’ve tried it out for more than a year, but things just aren’t working out. That’s not to say that we haven’t had some good times together, but I’m just ready to move on.” Usually, it’s safer if I keep my credit card in a different room while I’m surfing the internet late at night.

+ Continue reading ↦ +
+
+ + + +
+

Visual Form Builder PayPal Redirect

+ +

For anyone who knows me even slightly well knows that I’m a huge fan of WordPress. I use it as my go-to CMS for all of the websites I create, whether for myself or for clients. It gives me the flexibility I need in a well designed format, and it gives my clients the ability to make changes to their own websites without knowing any code. Some people will give you a giant list of plugins that you have to download when first setting up your WordPress site.

+ Continue reading ↦ +
+
+ + + +
+

The Most Important Camera Accessory

+ +

Want to know what my most cherished and valuable piece of photography equipment is? You might be surprised. It’s not my beautiful Canon 6D. Nor is it my 24-70 F2.8 lens. It’s light, portable, and inexpensive, yet it’s the most important piece of equipment that I own: a plastic bag. Last night, we spent the evening playing with steel wool and throwing sparks into circular patterns into the air. Add a little fill flash, and some creativity, and you’ve got a fun evening planned.

+ Continue reading ↦ +
+
+ + + +
+

My Experience with a Mac

+ +

About six months ago, I finally made the switch. Not because I hadn’t wanted to do it earlier, or because I suddenly became so fed up with the Windows operating system. I simply just had a little excess of money, and so I figured, “Well, this will never happen again. Might as well do it now.” Before I start this article, I simply want to throw out a disclaimer that I am not a hardcore “fanboy.” I work as a Computer Technician, and I service both Macintosh and Windows systems.

+ Continue reading ↦ +
+
+ + +
+
+
+
+ + +
+ + + + + + + + + diff --git a/public/page/3/index.html b/public/page/3/index.html new file mode 100644 index 0000000..5bcb246 --- /dev/null +++ b/public/page/3/index.html @@ -0,0 +1,164 @@ + + + + + + Allegiant + + + + + + + + + + + + + +
+ +
+ + +
+

My Experience with Joomla

+ +

By reading through the various posts and topics that I have on this website, it’s pretty obvious to see that I’m a fan of WordPress. It makes complex tasks incredibly simple and automated for users who want to create/build a website, but don’t want to have to deal with code at all. For more advanced users who do want to tweak a bit more with code, WordPress is great for that as well.

+ Continue reading ↦ +
+
+ + + +
+

How to record your screen on a Mac

+ +

While I’m sure there are a plethora of third-party applications that you can download to do this, why add something to your computer that would potentially slow it down when the functionality is already built-in? The ability is already built straight into the Quicktime app on your Mac. That’s right! The same application that allows you to watch videos on your computer also allows you to record your screen. It’s remarkably simple, and best of all — free!

+ Continue reading ↦ +
+
+ + + +
+

Change Crop Orientation in Adobe Lightroom

+ +

Here’s a quick tip that, sadly, I just now discovered in Adobe Lightroom. I’d say I’m quite familiar with the tools and capabilities of Adobe Lightroom, however, one thing has always baffled me. While cropping an image, I could never get the crop tool to switch from landscape orientation to portrait. I like to constrain my cropping proportions so that if I ever need to print my images, I won’t have any letter boxing.

+ Continue reading ↦ +
+
+ + + +
+

Understanding RAID

+ +

Although this is changing with the advent of solid-state drives, most hard drives are mechanical, which means they are often the first part of a standard computer system to fail. Data is everything these days, and its up to you to protect it. But in the case of a drive failing, you have no excuse for not having a backup with the ease of RAID. Instead of waiting for a hard drive to fail, an easier approach can be taken.

+ Continue reading ↦ +
+
+ + + +
+

Removing 'category' from your WordPress URL

+ +

There’s no doubt about it. WordPress is popular, easy to use, and here to stay. It’s estimated that more than 20% of the internet is currently running on the CMS. With drag-and-drop features, thousands of themes, and super-simple customization, it’s easy to see why. That doesn’t mean WordPress doesn’t come without any quirks, though. One of those many quirks (annoyances, really) are the ‘categories’ feature. While it’s a piece of cake to categorize posts into various sections, there’s always been one thing that has bugged me.

+ Continue reading ↦ +
+
+ + + +
+

I don't use Anti-Virus software. Am I crazy?

+ +

I’ve been the go-to tech guy for family and friends for as long as I can remember. I can’t tell you how many times I’ve had someone come up to me asking, “My computer is SO slow. Can you fix it?” 99% percent of the time, this involves removing malware or virus infections. You’re all very familiar with these: browser hijacking, tons of popups, and a computer running as slow as molasses.

+ Continue reading ↦ +
+
+ + +
+
+
+
+ + +
+ + + + + + + + + diff --git a/public/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy/index.html b/public/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy/index.html new file mode 100644 index 0000000..4081df4 --- /dev/null +++ b/public/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy/index.html @@ -0,0 +1,260 @@ + + + + + + I don't use Anti-Virus software. Am I crazy? · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

I’ve been the go-to tech guy for family and friends for as long as I can remember. I can’t tell you how many times I’ve had someone come up to me asking, “My computer is SO slow. Can you fix it?” 99% percent of the time, this involves removing malware or virus infections. You’re all very familiar with these: browser hijacking, tons of popups, and a computer running as slow as molasses.

+ +

What’s funny about all of this is that more often than not, all of these systems are running anti-virus software, or at least some form of protection. McAfee, Symantec, or something similar. After swearing under my breath about all of the pebcak errors, I often get the question, “Well, then, what do you use?

+ +

Nothing.

+ +

That’s right. Nothing. After staring at me for a moment in disbelief, they ask again, “Really? Nothing? And you’ve never had any problems?” This has been my set of security tools for years, and I’ve never once had a root kit, popups, virus, or browser hijacking on any kind.

+ +

Now, I am in no way saying that I’m against the use of third-party security programs. Nor am I saying that I don’t approve of taking security measures to protect your personal data and equipment. In fact, I almost always recommend AVG Free to users looking for a good, free solution. But why, then, do I not listen to my own advice? I absolutely refuse to pay for something that cripples my system’s performance (although, I will admit that both of these aspects have improved dramatically over the years).

+ +

My Secret

+ +

From fixing (probably thousands of different) computers, and watching how people use their machines, there seems to be a common theme to all of them. People are allowing this to happen to themselves, albeit unknowingly. As I watch over people’s shoulders at where they surf, I often cringe at what they click on (or don’t click on). And this isn’t necessarily their fault. They just haven’t been trained yet as to what is or isn’t safe to click on.

+ +

The two main culprits are unsafe links, or spyware-included downloads. These can come from a phishing e-mail, or be installed alongside a piece of software that you were actually intending to install of your computer.

+ +

I get it, though. When you visit a page that looks like this one, how are you supposed to know which “download” button is actually the correct one?

+ +

AntiVirus

+ +

The best bit of advice I can give to you is “look before you click.” When hovering over a button, you can look in the bottom corner of your web browser, and most (darn you, safari!) will give you a preview of where that URL will take you before you actually click on it. If that url is going to take you somewhere other than you intended, it’s very obviously not the correct link.

+ +

Another piece of advice is that most download links are not giant flashy wiggling buttons that say, “Download.” Usually, they are just a simple blue hyperlink. This isn’t always the case, but something good to keep in mind.

+ +

And for heaven’s sake, please please PLEASE stop downloading movies and music from random websites. Not only is it illegal, but it’s a surefire way to get viruses and malware. Music and movies are not inherently evil, but only if they are purchased and downloaded through a trusted third-party application (iTunes, Google, etc.)

+ +

Another piece of advice: When installing an application, be sure to actually READ what you’re agreeing to. Just clicking “next, next, next” is doing a lot more hurt than good. Below are a few screenshots of the uTorrent installation. If I hadn’t unchecked, or declined all three of those ‘offers’, I would have just crippled my machine in a matter of seconds.

+ +

AntiVirus

+ +

AntiVirus

+ +

AntiVirus

+ +

So what should you do?

+ +

I’m not recommending that everyone ditch all of the security principles that they’ve learned over the course of their life. I’m simply saying what I do, and what I’ve found in order to keep my machine clean. Starting in Windows 7, Microsoft offered many more security features than ever before with Windows Defender, improved Firewall, and since Vista, tools such as the User Account Control. All of these pieces are great additions, and for many people, these may be sufficient.

+ +

One last piece of advice: I absolutely swear by Malware Bytes. I do Tech Support at work, and I use this application multiple times a day without a hitch. It’s great at finding and removing malware infections. Use it.

+ +

So now, what do all my readers think? Am I a nit-wit for recommending this? What have you found in your personal experience?

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-07-02-removing-category-from-your-wordpress-url/index.html b/public/post/2014-07-02-removing-category-from-your-wordpress-url/index.html new file mode 100644 index 0000000..fd12bc5 --- /dev/null +++ b/public/post/2014-07-02-removing-category-from-your-wordpress-url/index.html @@ -0,0 +1,236 @@ + + + + + + Removing 'category' from your WordPress URL · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

There’s no doubt about it. WordPress is popular, easy to use, and here to stay. It’s estimated that more than 20% of the internet is currently running on the CMS. With drag-and-drop features, thousands of themes, and super-simple customization, it’s easy to see why. That doesn’t mean WordPress doesn’t come without any quirks, though.

+ +

One of those many quirks (annoyances, really) are the ‘categories’ feature. While it’s a piece of cake to categorize posts into various sections, there’s always been one thing that has bugged me. In your browser, underneath a specific category, the URL will always look something like this: “http://www.mysite.com/category/agriculture". Have you ever wanted to get rid of the “category” piece so that your url simply looks like this: “http://www.mysite.com/agriculture"?

+ +

It’s actually quite simple to do. If you’re a fan of plugins, you can use the FV Top Level Categories plugin. There’s no configuration, no settings. Just activate the plugin, and you’re ready to go. Now, with that being said, I’m not against plugins by any means, but if I can find another way around, I’ll usually take that route.

+ +

Option 2

+ +

You can simple change the settings under your permalinks in WordPress. In WordPress, on the left side menu, go to **Settings –> Permalinks**.

+ +

Under “Custom Structure,” enter “/%category%/%postname%/”. Also, enter a “.” under “Category base” as shown below in the photo.

+ +

RAID

+ +

Select “Save Changes”, and you should be good to go. From my experience, this hasn’t broken any links, and everything works as it should. While this works for now, there’s no telling if any future updates or upgrades to WordPress can or will break this.

+ +

Happy tweaking!

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-07-16-understanding-raid/index.html b/public/post/2014-07-16-understanding-raid/index.html new file mode 100644 index 0000000..60d4479 --- /dev/null +++ b/public/post/2014-07-16-understanding-raid/index.html @@ -0,0 +1,378 @@ + + + + + + Understanding RAID · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

Although this is changing with the advent of solid-state drives, most hard drives are mechanical, which means they are often the first part of a standard computer system to fail. Data is everything these days, and its up to you to protect it. But in the case of a drive failing, you have no excuse for not having a backup with the ease of RAID.

+ +

Instead of waiting for a hard drive to fail, an easier approach can be taken. Through using a technology known as RAID (Redundant Array of Independent Drives), a system of hard drives based on redundancy can be achieved which uses multiple hard drives for increased reliability and performance. You can implement RAID through either software or hardware, however in this article, I’m only going to focus on hardware-based RAID. Software-based RAID is implemented at the operating system level and/or with third-party software, while hardware-based RAID requires a special controller card that is either on the motherboard, as an added-in daughter card, or on the array that holds the RAID drives.

+ +

Interesting tidbit: RAID used to stand for “Redundant Array of Inexpensive Disks.”

+ +

Originally there were five standard RAID configurations (called levels), but several additional levels have since been developed. These additional levels include “nested” levels and nonstandard levels that are proprietary to specific vendors. Nested RAIDs are usually described by combining the numbers indicating the RAID levels with a “+” between the numbers, such as ‘RAID Level 0+1′. While there are other levels of RAID, such as 2, 3, 4, and 6, I will only be discussing the most common in this article.

+ +

The most common levels of RAID are as follows:

+ +

RAID Level 0 (striped disk array without fault tolerance): RAID 0 technology is based on striping. “Striping” takes the data written to the hard drive and partitions the storage space of each hard drive into smaller sections (stripes), which can be as small as 512 bytes or as large as several megabytes. Data written to the stripes is alternated across each of the drives, as shown in the diagram.

+ +

RAID

+ +

Although RAID Level 0 uses multiple drives, it is not fault tolerant, which means that if one of the drive fails, all of the data on that drive is lost.

+ +

RAID Level 1 (mirroring): RAID Level 1 uses disk mirroring. Disk mirroring involves connecting multiple drives in the computer (or server) to the same disk controller card. When data has been requested to write data to the drive, the controller sends that same request to each drive. The same happens for a read request: the data is read twice, once from each drive. By “mirroring” the read/write actions on the primary drive, all the other drives become identical duplicates. If the primary hard drive fails, the other drives take over immediately, without losing any data. This is shown in the diagram below.

+ +

RAID

+ +

RAID 5 (independent disks with distributed parity): RAID Level 5 distributes parity data (a type of error checking) across all drives, instead of using a separate hard drive to hold the parity error-checking information. Data is always stored on one drive, while its parity information is stored on another drive, as you can see from the diagram below. Distributing parity across other disks simply provides a user with an additional layer of protection from data loss.

+ +

RAID

+ +

RAID 0 + 1 (high data transfer): RAID 0+1 is a nested-level RAID. It acts as a mirrored array whose segments are RAID 0 arrays. RAID 0+1 can achieve high data transfer rates because there are multiple strip segments. RAID 0+1 is shown below. With nested RAIDs, the elements can either be individual disks, or entire RAIDs. This is my preferred RAID configuration, as it provides redundancy for protection in case one of the drives fails, but it also increase read/write input/output. The only downside to this configuration is that you have to purchase four hard drives as a minimum. Start getting into solid-state drives, and you’re easily looking at $600.

+ +

RAID

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Level + + Description + + Minimum # of drives needed + + Typical Usage + + Advantages + + Disadvantages +
+ RAID 0 + +  Uses a striped disk array so that data is broken down into blocks and each block is written to a separate drive. + + 2 + + Video Production/Editing + + Simple design and easy to implement + + Not fault tolerant +
+ RAID 1 + + Data is written twice to separate drives. + + 2 + + Financial + + Easiest RAID to implement + + Can slow down system if RAID controlling software is used instead of hardware +
+ RAID 5 + +  Each entire data block is written on a data disk and parity for blocks in the same rank is generated and recorded on a separate disk. + + 3 + +  Databases + + Most versatile RAID + + Can be difficult to rebuild in the event that a disk fails +
+ RAID 0+1 + + A mirrored array whose segments are RAID 0 arrays + + 4 + + Imaging Applications + + High input/output rates + + Expensive +
+ +

 

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-07-18-change-crop-orientation-adobe-lightroom/index.html b/public/post/2014-07-18-change-crop-orientation-adobe-lightroom/index.html new file mode 100644 index 0000000..d1c00a9 --- /dev/null +++ b/public/post/2014-07-18-change-crop-orientation-adobe-lightroom/index.html @@ -0,0 +1,222 @@ + + + + + + Change Crop Orientation in Adobe Lightroom · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

Here’s a quick tip that, sadly, I just now discovered in Adobe Lightroom. I’d say I’m quite familiar with the tools and capabilities of Adobe Lightroom, however, one thing has always baffled me. While cropping an image, I could never get the crop tool to switch from landscape orientation to portrait. I like to constrain my cropping proportions so that if I ever need to print my images, I won’t have any letter boxing. The easiest way to do that is to “lock” proportions. However, if you do that, you can’t change the orientation, or so I thought.

+ +

Prior to finding this tip, I just used “Custom” and dragged the crop box wherever I wanted. If you simply press the letter “X” while cropping, your orientation will swap from landscape to portrait, and vise versa. I wish Adobe would make this option a little more apparent to it’s large user base.

+ +

And there you go! That’s all there is to it!

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-07-26-how-to-record-your-screen-on-a-mac/index.html b/public/post/2014-07-26-how-to-record-your-screen-on-a-mac/index.html new file mode 100644 index 0000000..aec75e0 --- /dev/null +++ b/public/post/2014-07-26-how-to-record-your-screen-on-a-mac/index.html @@ -0,0 +1,249 @@ + + + + + + How to record your screen on a Mac · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

While I’m sure there are a plethora of third-party applications that you can download to do this, why add something to your computer that would potentially slow it down when the functionality is already built-in? The ability is already built straight into the Quicktime app on your Mac. That’s right! The same application that allows you to watch videos on your computer also allows you to record your screen. It’s remarkably simple, and best of all — free!

+ +

How to use the Mac Screen Recorder

+ +

The functionality to record your screen using Quicktime is only built-in to Mac OS 10.6-10.9 (and I’m assuming later).

+ +
    +
  1. Start by launching Quicktime (found in Spotlight or in the /Applications folder)
  2. +
  3. From the top menu, select “File –> New Screen Recording”
  4. +
+ +

Mac Screen Record

+ +
    +
  1.  To the left of the giant red “record” button, there  is a little while triangle that drops down to give you various options. From here, you can choose the default microphone that you wish to use (I use the built-in mic on the Mac, as I don’t have anything better). You can also choose whether to show mouse clicks or not.
  2. +
+ +

Mac Screen Record

+ +
    +
  1. Once you have all the options set, click the big red button to begin. To stop recording, you can either press **Command + Control + Escape**, or you can press the little “stop” button in the task bar at the top:
  2. +
+ +

Mac Screen Record

+ +
    +
  1. Once you stop the recording, a “Save as…” dialog box opens automatically, and you can name your file whatever you’d like. It’ll be saved in a .mov format by default so you can edit it in iMovie or wherever, but you can also export it in a different format if you choose.
  2. +
+ +

Ultimately, I think the best feature of all of this is the fact that Quicktime is completely out of the way as you’re doing your recordings. The program vanishes completely so that it’s unobtrusive and doesn’t get in your video. The first time I recorded a video, I wasn’t quite sure how to end the recording. It’s a really great feature, and best of all, you don’t have to download any other programs. The capability is already there!

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-07-29-my-experience-with-joomla/index.html b/public/post/2014-07-29-my-experience-with-joomla/index.html new file mode 100644 index 0000000..682eb84 --- /dev/null +++ b/public/post/2014-07-29-my-experience-with-joomla/index.html @@ -0,0 +1,248 @@ + + + + + + My Experience with Joomla · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

By reading through the various posts and topics that I have on this website, it’s pretty obvious to see that I’m a fan of WordPress. It makes complex tasks incredibly simple and automated for users who want to create/build a website, but don’t want to have to deal with code at all. For more advanced users who do want to tweak a bit more with code, WordPress is great for that as well. However, I’m not so biased or blind as to believe that there isn’t/can’t be something better out there.

+ +

I received an e-mail from someone looking for help managing a website. As I’m almost always looking for freelance work, I was up for the task. As I continued reading through the e-mail, I discovered that their website was built upon Joomla. I was almost deterred a little bit, but I figured that if I was ever going to mess around with Joomla, this might as well be it. I responded to the e-mail, and the company gave me a day or two to familiarize myself with Joomla before getting to work on their production site.

+ +

First Impressions

+ +

I installed a fresh version of Joomla on my hosting server and began to tinker a bit with the backend piece. Upon first glance, I was a little intimidated, honestly, as there was a lot of unfamiliarity. I felt like a little kid who had been separated from their parents at Disney Land — eager and excited to be somewhere new and magical, but scared and intimidated by something new and foreign. So many menus, and dialog boxes to choose from.

+ +

Okay, so I wasn’t *that* scared, but it was strange to be working with something other than WordPress. After watching a few tutorials on YouTube, I felt somewhat more comfortable with the user interface and how things worked. It appears that Joomla is very modular, and the entire face of the website is built upon little pieces that are customized individually to create the front end.

+ +

Joomla

+ +

The Good

+ +

Out of everything that I experienced with the little time I spent with Joomla, the thing that impressed me most was the amount of customization. Every little module, or template could be customized, changed, or manipulated to your heart’s content. Just when I felt I had been through all of the menus, I found three more that were embedded underneath the first.

+ +

While this might not be a very valid point to all your readers out there, another good part about Joomla is that it’s *not WordPress*. The last statistic I heard, roughly 20% of the internet is running on WordPress. That means that if a security hole is found in WordPress, 20% of the websites on the internet instantly become vulnerable. WordPress is good about putting out patches and updates, but even that can lead to another slew of problems with themes and plugins breaking. So you ask, “How is Joomla any different?” Well, for starters, Joomla has a much more solid foundation to build upon. When WordPress began in the early 2000’s, it was nothing more than a blogging platform. Since then, it has morphed into a hideous beast with tens of thousands of poorly-written themes and plugins to extend it’s capabilities. It wasn’t initially developed to be used for an e-commerce platform, or for large business websites. Joomla, on the other hand, is open source and has been coded with this in mind.

+ +

The Bad

+ +

The longer I played with Joomla, the more I couldn’t help but feel that Joomla was trying too hard to distinguish themselves as “not WordPress,” even though it’s basically the same. “Pages” are called “Articles,” “Plugins” are called “Extensions,” and “Widgets” are called “Modules.” I understand that it’s hard to create something new and different, but by changing the names and moving the menus from the left side of the screen to the top, it doesn’t exactly feel “different.”

+ +

I also felt that Joomla as a whole had an unpolished feel to it, almost as if it’s a dying project. Joomla is open source and has a great community following, but Joomla kind of falls into the “grey area” as far as popular CMS’s go. Those who are looking for a quick and easy way to make a web presence will choose Wordpress, while those who fall into the category of “code warrior” will often overlook Joomla and head straight for Drupal.

+ +

My Verdict

+ +

I’m not so naive as to think that I haven’t been blinded or built an allegiance to WordPress. I absolutely have. Perhaps I haven’t spent enough time with Joomla, and that’s most likely the case, but as for me and my needs, I’ll be sticking with WordPress, thanks. For ease of use, functionality, capability, theme and plugin support, and a huge community following, WordPress does exactly what I need. I’m familiar with that, so why switch? When I’m in need of coding capabilities, I can do that too through the editor panel.

+ +

What else do you need?

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-07-30-how-to-use-the-photoshop-liquify-tool/index.html b/public/post/2014-07-30-how-to-use-the-photoshop-liquify-tool/index.html new file mode 100644 index 0000000..1739b86 --- /dev/null +++ b/public/post/2014-07-30-how-to-use-the-photoshop-liquify-tool/index.html @@ -0,0 +1,220 @@ + + + + + + How to use the Liquify Tool in Photoshop · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

The Liquify Tool is incredible, if you know how to use it right. Sometimes it can be tricky to get the hang of it at first, but eventually you’ll figure it out. I know that even now I’m not very effective when using it. Regardless, I created a quick video tutorial on how to use the Liquify Tool in Photoshop. In this video tutorial, I use a sample image I took from one of my recent shoots to quickly fix a small portion on an arm that was bugging me a hint.

+ +

As always, be sure not to overdo it. People often go crazy when they learn how to use the liquify tool. Going too far can absolutely make something look Photoshopped and fake.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-08-03-my-experience-with-a-mac/index.html b/public/post/2014-08-03-my-experience-with-a-mac/index.html new file mode 100644 index 0000000..bae1acb --- /dev/null +++ b/public/post/2014-08-03-my-experience-with-a-mac/index.html @@ -0,0 +1,258 @@ + + + + + + My Experience with a Mac · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

About six months ago, I finally made the switch. Not because I hadn’t wanted to do it earlier, or because I suddenly became so fed up with the Windows operating system. I simply just had a little excess of money, and so I figured, “Well, this will never happen again. Might as well do it now.”

+ +

Before I start this article, I simply want to throw out a disclaimer that I am not a hardcore “fanboy.” I work as a Computer Technician, and I service both Macintosh and Windows systems. I feel that I’m well-versed in both worlds, and am capable of giving an unbiased opinion.

+ +

The Purchase

+ +

I walked into the Apple Store feeling slightly nervous as to the amount of money I was about to drop on a computer. Never before in my entire life had I spent close to $1500 on a laptop computer. Up until this point, I was using a Lenovo Touch u430, which was honestly, a really great computer. It was thin, light, had a touch screen, the latest Core i5 Processor, and sufficient amounts of RAM to tackle pretty much any of the tasks that I would use it for on a daily basis. But regardless of all that, I sold it (for about $350 less than I purchased it for only 6 months later) and dove headfirst into the world of Apple.

+ +

I decided on the MacBook Pro Retina 13″ with a 256GB SSD and 8GB of RAM. The grand total came to $1482.32. Swiping that card was tough thinking, “Am I really doing this? Am I really going to spend that much?” As I brought it home, all of that seemed to melt away as I opened up the beautiful packaging.

+ +

Physical Quality

+ +

One of the things I learned from my parents was that quality is worth a higher price tag. Buying cheap won’t outlast in the long run. To me, that still holds true. Everything about this computer just feels rock solid. Having an entire aluminum chassis just seems right to me. Grabbing hold of the left and right sides of the laptop, try twisting the laptop. There isn’t any flex whatsoever. Same with the keyboard. I don’t consider myself a weighty typer, but even then, I’ve felt keyboard flex, and it’s not a good feeling. The physical build quality of this computer is leaps and bounds ahead of my $700 Lenovo.

+ +

I’ve never used a trackpad that is as sensitive as on a MacBook. I use probably 30 different trackpads at work on the daily. Some are nice, and some are… lacking. Many are “sticky” and don’t allow your finger to easily slide across the surface. Others are jittery and don’t quite give enough options to adjust the sensitivity. Others don’t work well until there’s a good amount of finger grease smeared across the surface to allow your finger to slide easily. With the trackpad on the MacBooks, the surface is created from glass. It’s sensitive, but not so oversensitive that an accidental palm swipe or knuckle tapping it will send your cursor shooting off into space.

+ +

And while this last reason is incredibly stupid, I love the perfect tightness of the screen hinge. Being able to open the laptop with only one hand is a treat to me every morning as I sit down to work. Rather than having one hand on the screen lid, and the other holding down the base of the laptop, I can simply use one finger. It’s pathetic how giddy I get over such a small detail. I also am thrilled that the screen doesn’t “wobble” back and forth upon opening the lid. The hinge is loose enough to open with one finger, but still tight enough that the screen is sturdy and doesn’t have any give to it.

+ +

Software

+ +

The hardware is really sets this computer apart, not the software. I was never too impressed with OS X that it warranted a ton of praise. In spending more time with Mavericks, I’ve had to bite my tongue a little bit in realizing that there’s more than meets the eye.

+ +

I really feel that the Terminal is much more powerful than the comparable Command Prompt in Windows. While there are those who will argue that they are either equivalent or that Windows is much more polished, that may very well be the case. Sadly, I don’t have any hardcore evidence in which I can say, “Yes, well, Terminal can do X, but Command Prompt can only do Y.” The reason I treat this as a plus is because I feel I would enter the Terminal to do daily tasks that I would never do in the command prompt. I’ve downloaded an extension called “Total Terminal” which allows me to access the terminal system-wide from just a key stroke. Simple things as small as creating a folder are examples of something I would do through the terminal, that I would never have thought of doing through the Command Prompt. Feel free to prove me wrong.

+ +

iMessages: Wow. I love it. A large portion of my contacts are Apple users, meaning I can connect with them easily through iMessages. Just a texting application, you say? Not true. There are added advantages, such as much faster sending/receiving, no limits from your carrier (aside from data, I suppose, but even then, text takes up a minuscule amount of data), sent/delivered/read confirmations, and the ability to use iMessages over Wifi. My office at work has been nicknamed the “bat cave.” It’s dark, dingy, has no windows, and is located in the basement. Cellphone reception is nonexistent. To me, this is a lifesaver. I love the fact that it syncs between my iPhone. The only caveat I see is that normal SMS messages can’t be received through iMessage, but this will be fixed in the upcoming release of [OS X Yosemite][3] this Fall.

+ +

Virtual Desktops have increased my workflow tenfold. I’ve tried various third-party applications to add this functionality to Windows, such as [Dexpot][4], but it just doesn’t do it as well. The four-finger swipe between workflows is almost contagious. Working on PC laptops, I often find myself swiping with four fingers, only to realize that I’m not on a Mac. If I were to switch back to a PC right now, I feel I could do it fairly easily, minus this piece. I would miss that capability quite a bit.

+ +

It’s just all the little things, really. Things such as syncing my open tabs and bookmarks between my laptop and iPhone, or automatic spelling correction.They really make a difference, and all add up to create a very well-rounded product.

+ +

That doesn’t mean that OS X isn’t without fault, though. There are a lot of things that have plagued Apple’s operating systems since conception, and they refuse to fix them. What’s with bouncing dock items? If that’s not the most obnoxious ‘feature’ I’ve ever seen, then I don’t know what is. It’s like a little kid poking his Mom saying, “Mommy. Mommy. Mommy. Mommy. Look at me. Mommy.” Or what about the green “Maximize” button only working half the time? Or the spinning beach ball of death. OS X Mavericks, even with its hundreds of added features still has a long way to go.

+ +

Conclusion

+ +

Now, with all that being said, I’m not telling everyone around me to jump ship and switch immediately. I’m not under the false impression that Macs “just work,” as Apple has hinted. If a PC works for you, then stick with it. If you prefer a Mac, then go for it. Personally, I’m an Apple fan. The features, to me, make it all worth-while. Actually, I guess that she be rephrased to “the hardware alone make it all worth-while.” If one day I decide that I completely hate OS X, I would ditch the software entirely, and just install Windows as my full-time production operating system.

+ +

Really, it all comes down to personal preference. Pick your poison. This comic says it better than I ever could:

+ +

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-09-09-the-most-important-camera-accessory/index.html b/public/post/2014-09-09-the-most-important-camera-accessory/index.html new file mode 100644 index 0000000..0adf02f --- /dev/null +++ b/public/post/2014-09-09-the-most-important-camera-accessory/index.html @@ -0,0 +1,230 @@ + + + + + + The Most Important Camera Accessory · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

Want to know what my most cherished and valuable piece of photography equipment is? You might be surprised. It’s not my beautiful Canon 6D. Nor is it my 24-70 F2.8 lens. It’s light, portable, and inexpensive, yet it’s the most important piece of equipment that I own: a plastic bag.

+ +

Last night, we spent the evening playing with steel wool and throwing sparks into circular patterns into the air. Add a little fill flash, and some creativity, and you’ve got a fun evening planned. Soon, it starts to sprinkle, and you think, “It’s a good thing I invested in a nice full-frame camera. It’s got weather sealing!” You wait a few more minutes, and the rain begins to pick up just ever-so-slightly. You think again to yourself, “It’s a good thing I invested in some ‘L’ Canon glass! It’s weather resistant!”

+ +

Sparks Fly

+ +

Soon, it’s an all-out downpour, and I reach into my gear bag for my trusty sidekick. I rip a small hole into the bottom of the bag, just the size of the lens opening, and the open end of the bag gently lays over the rest of the camera, allowing me to lift it up to peer through the eyepiece and view the image on the LCD screen.

+ +

Rewind four years ago to when I was a young Mormon Missionary, serving in the small town of Los Lunes, New Mexico. It was our day off, and a friend of mine wanted to go hiking. I grabbed my trusty Canon Rebel XTi, one of my few possessions, and we headed out. Halfway into the hike, the sky unloaded on us. We were absolutely drenched. Getting back into the car, I knew that my camera was in trouble. I did the best I could to protect the camera from the elements, carrying it underneath my shirt.

+ +

Sadly, it was a goner. No matter which lens I tried, I got the deadly “Error 00: No lens connected’ error.” I tore it apart, in hopes that letting it air out might fix the problem. No luck. I had definitely learned my lesson.

+ +

Back to last night, I’m grateful I had learned my lesson earlier, and not with the more expensive 6D counterpart. I learned my lesson, but here’s in hopes that you learn from my mistake, and not your own. Carry a plastic bag in your camera bag at all times. You’ll never know when you need it.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-10-03-visual-form-builder-paypal-redirect/index.html b/public/post/2014-10-03-visual-form-builder-paypal-redirect/index.html new file mode 100644 index 0000000..930cd0f --- /dev/null +++ b/public/post/2014-10-03-visual-form-builder-paypal-redirect/index.html @@ -0,0 +1,236 @@ + + + + + + Visual Form Builder PayPal Redirect · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

For anyone who knows me even slightly well knows that I’m a huge fan of WordPress. I use it as my go-to CMS for all of the websites I create, whether for myself or for clients. It gives me the flexibility I need in a well designed format, and it gives my clients the ability to make changes to their own websites without knowing any code.

+ +

Some people will give you a giant list of plugins that you have to download when first setting up your WordPress site. My theory is the opposite. The fewer plugins, the better. I don’t install something if I don’t need it, just to have it. One plugin I almost always find myself installing, though, is Visual Form Builder. It makes creating HTML forms a piece of cake. Sure, you can code them all yourself, but why when this is so easy? It offers plenty of features, such as sending a copy of the form to administrators, to the person filling out the form, and so many other features. There is a Pro version as well if you need it, but I’ve found that all the features I need are offered in the free version.

+ +

One thing I often do for clients is build a form using this plugin so that they can collect some data or information from their customers. Once the customers click “Submit” on the form, it redirects them to a PayPal link where they can purchase a product. All of this is done through Visual Form Builder. On the “Confirmation” section, you have the option of redirecting the user to a different page in your WordPress site, to a different URL, or just display some text. Here is where I select “URL” and then post in the link that (under the email tab, not the WordPress form code) that PayPal has given me.

+ +

This morning, however, I ran into a new problem I’d never seen before. Upon redirection, I saw this error through PayPal:

+ +

Visual Form Builder

+ +

I did everything that I could think of, and I could not for the life of me figure out the issue. It kept saying that I was missing “required information”. The thing was that I wasn’t sending any information. And what was even more baffling was that if I copied the link directly into a browser, the URL worked fine, and I was successfully redirected to PayPal. Therefore, the problem lies with Visual Form Builder.

+ +

I scoured the internet. I found a post on the plugin support page with someone having the same issue as me, but it was a quick dead-end. It was over 2 years old, and no problem had been found. The developer basically said, “Buy the Pro version.” And then the topic was closed. Well, that was no help.

+ +

I continued trying. After a lot of trial and error, I finally found a workaround. I used the Google Link Shortener, and for some reason, that worked. I pasted in my PayPal “email” link, and then Google spit out a shorter URL. I pasted that into the “Redirect” field under the confirmation settings, and voila! It worked!

+ +

Visual Form Builder

+ +

This seemed to work for me. It’s not ideal, but it’ll do for now. Have you had a similar problem? Does this work for you? Let me know what you think.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-10-06-tmobile-im-breaking-up-with-you/index.html b/public/post/2014-10-06-tmobile-im-breaking-up-with-you/index.html new file mode 100644 index 0000000..2651b2d --- /dev/null +++ b/public/post/2014-10-06-tmobile-im-breaking-up-with-you/index.html @@ -0,0 +1,240 @@ + + + + + + T-Mobile, I'm Breaking Up With You · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

“It’s me, not you. Okay, no. Actually, it is you. We’ve had a good run together. We’ve tried it out for more than a year, but things just aren’t working out. That’s not to say that we haven’t had some good times together, but I’m just ready to move on.”

+ +

Usually, it’s safer if I keep my credit card in a different room while I’m surfing the internet late at night. I don’t seem to make the best decisions when I’m sleepy. However, late last night, I made a decision that won’t leave me with buyer’s remorse the next morning.

+ +

I’ve had a love/hate relationship with T-Mobile ever since signing with them a little over one year ago. While I’m in town, I get decently good service. I’ve enjoyed my iPhone 5S on their network, as well as the ability to tether my laptop to my phone. However, sometimes, I’ll have random dead-zones. Walmart, for some reason, is notorious for getting a “No Service” notification on my phone. And if I’m on a random highway somewhere trying to access any form of data, forget about it. WHY!?

+ +

Yesterday, however, was the last straw. My girlfriend and I were hiking high in the mountains. We took a quick weekend drive to a canyon two hours away. Literally, as we were on top of the mountain, I hear the all-too-familiar text-tone, “duh duh!” I was shocked to think that it might possibly be coming from my own pocket. How could I have been so foolish? Pulling my phone from my pocket, I saw the “No Service” symbol almost mocking me while my girlfriend quickly replied to her text message. Are you kidding me? She has service even way out here in the middle of nowhere?

+ +

On our way back, we were going to stop at a restaurant as we passed through a small town. A friend of mine had recommended a restaurant, but I couldn’t remember the name off the top of my head. Knowing that they had mentioned the name in an Instagram post, I pulled out my oh-so-reliable cell phone to look it up. While I actually had service this time, I was only connected with one bar of “E” (Edge). I attempted to load a few pictures, but it was useless. Even the loading screen got tired of loading. All the while, my girlfriend was happily browsing with LTE speeds.

+ +

I was fed up. I set out to compare prices. I navigated to Verizon Wireless, knowing before-hand that they were the most expensive, and that I would not be able to afford them, even though they provide the best coverage (for my area). Opening to their main page, I was presented with this advertisement:

+ +

T-Mobile, I'm Breaking Up With You

+ +

I was hesitant. I thought to myself, “Okay. Sure. Only $60. But they’re only going to give you 300MB of data, and to upgrade to at least 2GB will be an additional $20. Add taxes on top of that, as well as a monthly payment on the phone, and you’ll be up to $120 a month.” I couldn’t believe my eyes when the plan details loaded on my screen. Really? Unlimited Talk, Text, and 2GB of data for only $60? I don’t believe it. I chatted with an online representative too, just to make sure that it wasn’t too good to be true. She assured me that it was only $60 a month. Even with taxes, that will still bring me to more than $20 cheaper than my current bill.

+ +

With not even a twinge of guilt, I whipped out my credit card, and signed the 2-year contract with giddy excitement. I ported my number over easily, and within a week or two, my new iPhone 6 will show up right on my doorstep.

+ +

Sorry, babe. We’ve had a good run, but I’ve found someone better. Someone who will stay by my side, and not leave me hanging when I need you most.

+ +
+ +

For those who are interested, the plan I’ve mentioned above is only for a Single Line. If you need more than one line, Verizon’s “More Everything” is the option you’ll have to choose. It’s also important to mention that with the Single Line plan, you can’t use your phone as a WiFi Hotspot. You’ll also want to watch your data usage. Every gigabyte used over the allotted 2GB of data will be charged $15. I figured that this was fine, as I don’t tether often, and the only time I’ve ever gone over my data is when I am tethering.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-10-29-adobe-lightroom-tutorial-for-beginners/index.html b/public/post/2014-10-29-adobe-lightroom-tutorial-for-beginners/index.html new file mode 100644 index 0000000..4ddab33 --- /dev/null +++ b/public/post/2014-10-29-adobe-lightroom-tutorial-for-beginners/index.html @@ -0,0 +1,224 @@ + + + + + + Adobe Lightroom 5 Tutorial for Beginners · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

Adobe Lightroom is an industry standard for photographers, however, upon opening it for the first time, it can be a little bit intimidating. But take a deep breath, sit back, and watch this quick tutorial that I threw together, and you’ll be blown away with all of the power and capabilities that Lightroom has. I’ve been with Lightroom since version 3, and the capabilities and features that have been added in the recent additions have all been more than beneficial.

+ +

Whether you’re a professional photographer, or you’d just like to do a little bit of retouching on your photos, Adobe Lightroom is the way to go. It syncs so well with Photoshop as well, that the workflow between the two really is seemless.

+ +

If you’re like most people (me included) and are on a fairly tight budget, Adobe is currently offering a package for $9.99 a month where you can get Photoshop and Lightroom together. It’s known as their “Photography Plan” and it can be found here.

+ +

Either way, give it a look over. Comment if you have any questions, and I’d be more than happy to help out.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad/index.html b/public/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad/index.html new file mode 100644 index 0000000..2c17009 --- /dev/null +++ b/public/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad/index.html @@ -0,0 +1,238 @@ + + + + + + I have an iPhone and Mac. Get an iPad? · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

Let me start off right away by saying that you do not “need” an iPad. Regardless of what you do or do not have, you do not NEED an iPad. If you want to hear me go off on a big spiel about instant gratification and entitlement, I could talk your ear off. But we’ll save that for another day.

+ +

But let’s get to what you’re really interested about. I am not an Apple Fanboy (an Apple Watch for $350?! Heh. Yeah right. I’m not jumping on that bandwagon), but I’ll definitely admit that I’m caught up in the Cupertino Ecosystem. And that’s not to say that I’m against the guys working over in Redmond, or that I believe Microsoft is of the devil. Do I believe that Apple creates superior products? Absolutely. Do I try and sway people to shell out the extra cash for a similarly-capable machine that can do the same thing for hundreds of dollars extra? No, not necessarily (iPhone vs. Android is another debate, though). Anyway, enough side-tangents. I really do love Apple products, but that doesn’t necessarily mean that I’m waiting first in line to buy the “next big thing.”

+ +

iPhones and Macs fit so well into my life and have changed the entire way I do things that naturally I’ve asked myself, “Do I need an iPad?” The debate is that an iPad is really just a larger iPhone, and has a lot of the same capabilities, but it’s not quite a PC-replacement (at least not yet). So is there a need or some hole in my life that an iPad could fill?

+ +

I’ve been through the whole Windows 8, touch-screen thing. Meh. Not for me. There are some things where it was “kinda cool” to manipulate and change just with your finger, but honestly, it always just felt ever-so-slightly awkward to stretch my arm across the keyboard and touch the screen. To me, it just felt — wrong. In my mind, it’s as if Grandma had come to Thanksgiving dinner wearing a belly shirt. Lines have been crossed, and I never want to see that ever again. In a post-PC era, it was bound to happen, but belly shirts and older women are two things that should never be mixed. Laptop computers and touch-screen devices should not be combined.

+ +

I’ll admit that I’ve always had my eyes on an iPad. Walking through the mall, even with my girlfriend yanking on my arm, it was simply a futile attempt to try and have me walk past an Apple store. First stop: MacBook Pro’s, second stop: iMac’s, third stop: iPads. It was alway something where I would say, “These are cool. But it’s just a big iPhone. Do I need one?” I always toyed with the idea in my mind, but ultimately decided against it.

+ +

Yesterday, on an impulse, I pulled the trigger. I found myself walking out of the store with an iPad Mini 2 (no way in hell am I paying $100 extra for identical hardware, minus the Touch-ID just to have the latest and greatest), and surprisingly feeling quite guilty.

+ +

I came home, ripped open the packaging, downloaded all the apps, restored from an iCloud Backup, and then I thought, “Now what?” There were some cool things, such as larger-screen games, or an even better mobile-browsing experience via Safari. But even after the first few hours, I couldn’t convince myself that I really “needed” this device. I kept fighting within myself saying, “Well think about all the Web Development you do. You can use this to test how client sites function on a tablet.” or even, “If you don’t find a need for it, you can gift it to Mom for Christmas.”

+ +

The verdict

+ +

I don’t really have one, yet. I’ve had a full 24 hours using the device, and I’ve decided that an iPad, for me, is a luxury device. It doesn’t fill any gaping holes in my life that I had previously. I will say that browsing in bed on a larger screen is a better experience, as well as larger-screen gameplay (although I’m not a gamer by any stretch of the imagination). I also prefer a lot of the iPad-based apps compared to the iPhone alternative. They seem more capable and feature-packed. Netflix is more pleasant to watch rather than having a hot laptop searing off my chest hair. And if I ever decided to get into reading, I could see it as a good eReader. But ultimately, it just felt more limiting than anything. I found myself thinking, “I need to edit this line of co — oh wait. I have to get on my MacBook to do that.” or “I need to send that photo to Cary — oh wait, that’s on my laptop.” I want it to be a replacement, or at least a good substitute, to my MacBook Pro, and it just isn’t there yet.

+ +

If I can’t find a good reason to keep it within the next few days, it’ll probably go back. Can anyone change my mind?

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-12-05-heres-to-actually-sticking-with-something/index.html b/public/post/2014-12-05-heres-to-actually-sticking-with-something/index.html new file mode 100644 index 0000000..be08d5f --- /dev/null +++ b/public/post/2014-12-05-heres-to-actually-sticking-with-something/index.html @@ -0,0 +1,224 @@ + + + + + + Here's to actually sticking with something · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

When I was 16 (yes, I’m young, okay?), I had the idea for a Tech Blog. Not that it had never been done before or anything, but it’s just that ever since the age of 9, technology is the only hobby or thing in my life that I’ve consistently held interest in. I’m not sure why I wanted to start one, but I just figured it would be a good way of tracking my progress and learning of various technologies, as well as helping others in anyway, if possible. I got about three posts in, got discouraged, thought “this is stupid”, and told myself that I would never in any way, shape, or form be able to compete with the larger tech blogs like CNet, TechCrunch, or TUAW (now iMore).

+ +

But now, I’m kicking myself. In hindsight, I keep thinking to myself, “Imagine the web presence you could have had, if only you had hung on for all these years.” Well, recently, I’ve had a bit of motivation (or maybe it’s procrastination of more important things), and I’ve decided to actually stick to this blog. It’s been going for about six months now, and I plan on continuing the trend.

+ +

I have another blog dealing with the religious aspect of my life, and it’s actually proven to be successful (at least in my book), getting around 30,000 hits a month. It’s not incredible, and I haven’t been very great at posting lately, but it’s really rewarding to see what I’ve been able to achieve by keeping it running for around a year and a half.

+ +

So, here’s to actually sticking with something, for once in my life.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-12-06-my-love-hate-relationship-with-wordpress/index.html b/public/post/2014-12-06-my-love-hate-relationship-with-wordpress/index.html new file mode 100644 index 0000000..551bded --- /dev/null +++ b/public/post/2014-12-06-my-love-hate-relationship-with-wordpress/index.html @@ -0,0 +1,266 @@ + + + + + + My love-hate relationship with WordPress · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

Recently, I’ve really been getting fed up with WordPress. And here’s why.

+ +

WordPress dates all the way back to 2001. It was originally developed as a simple blogging platform based off of MySQL and PHP. Close to fifteen years later, it’s become a web standard and is used as the Framework/CMS for more than 20% of all the websites on the internet. And that’s exactly the problem.

+ +

WordPress has exploded into a million different forks and subprojects, and has been expanded to run an equal amount of themes and plugins. My biggest issue with this is that WordPress was never designed to support this. Years down the road, it’s still sitting on code that dates back a decade. The same issue holds true with Microsoft. Even after launching Windows 8.1, it still has pieces of code that were used in the Windows 3.1 and Windows 95 operating systems. It baffles me that 20 years later, we still can’t seem to ditch MS-DOS or the Registry.

+ +

WordPress was never designed to be used as an e-commerce platform, but with the help from the guys over at Woocommerce, it’s never been easier and quicker to do so. WordPress was never designed to be used as a Social Media platform, but of course, there are plugins to do that as well. WordPress is so simple and easy to use, that it’s become overly bloated with features to cater to the needs of everyone. I fear that it’s soon going to crumble in on itself.

+ +

Security Holes

+ +

And here’s something else to think about too. Even if only 1/100th of all websites on the internet were using WordPress as their CMS, imagine what would happen if a large exploit were found. Millions of websites are instantly vulnerable in the hands of skilled hackers. Sadly, the number of potential targets is a lot larger than 1%, should an exploit be found. Many users don’t know that they would be perfectly fine completely ditching the database, and just using static HTML to host their blogs, completely eliminating the security flaws.

+ +

Updates

+ +

WordPress updates are the absolute worst. Starting somewhere in the time-frame of Wordpress 3, automatic updates were introduced by default (although you can turn these off through the database, I believe). For a lot of the websites I build and manage for clients, I set myself up as an administrator. Whenever an automatic update is pushed, I get an email saying, “Your WordPress installation has been updated to version 4.0.1…” I cringe just thinking about all the hundreds of things that could now be broken on dozens of my websites. Granted, the WordPress team does their absolute best to ensure that nothing breaks, but with hundreds of thousands of different themes and plugins, how can anyone be absolutely certain that they won’t be a compatibility issue somewhere?

+ +

Comments

+ +

The comment system in WordPress is so flawed, it’s not even funny. Even when using a plugin to block/prevent spam, there are times when I’ll log into my dashboard and find that I have 300+ pending comments to be approved, 90% of them being complete garbage. What’s even more annoying is that all of these comments, whether legitimate or spam, are being stored in the database, ultimately slowing down the over-all speed of your website.

+ +

Speed

+ +

Touching on this already a little earlier, having a backend attached to any website is most always going to ensure a decrease in speed unless it’s closely managed and optimized. Most of the time, the end-user has little to no knowledge on how to do this. Many users would be perfectly fine serving plain ol’ static HTML or using a static site builder such as Jekyll or Middleman. Every query to a database requires more bandwidth, and more server strain.

+ +

I’m a little hesitant to even touch on the topic of themes, because it irritates me so much. The other day I was looking at some of the best-selling WordPress themes on themeforest. These themes, in my opinion, are so poorly coded, and so irritatingly slow. The builders of these themes attempt to cater to everyone and no one, all at the same time. Do they have any training about UI or UX? Do they understand that they need to minimize their CSS and JavaScript? Do they understand that they need to optimize their images to a suitable web size? Clients come to me and say, “Oooh. I like this look.” They truly have no idea what they’re doing. Having something that looks “pretty” just won’t cut it. There’s a lot more to think about behind the scenes, rather than just how a website looks.

+ +

I’ve seen theme packages that, for the entire install, run in the area of 15 megabytes. 15 MEGABYTES!? Are you kidding me? Even with LTE cell phone speeds and fiber-optic internet connections, 15 megabytes is a lot of data. Good luck having users stick around when your site won’t load on their phones. Some people might say, “Well, users will wait for at least a second for my site to load.” Wrong. Amazon did a study on page load speed, and how it affects their sales conversion rates. They found that a one-second difference in page-loading speed could cost them up to $1.6 Billion in sales.

+ +

The Art of Web Design

+ +

In my mind, building a website truly is a work of art. I’m proud of the hours that I’ve spent in learning, growing, and honing my skills in order to develop something out of thin air that helps a client’s business or hobby or whatever. However, nowadays, it seems that we’re beginning to lose that art in development. Websites such as wix make it seemingly so simple to throw up a website that anyone can do it. WordPress is no different. Now, because of the simplicity of WordPress, people begin calling themselves “Developers” or “Experts” without even touching a single line of code.

+ +

Ease of Clients

+ +

Now, here comes the love. I really don’t hate WordPress, although it may seem that way. One of the number one reasons I use WordPress as a CMS for my entire client base is the ability to entirely hand of a project. We’ve all worked with clients that are annoying, nagging, and constantly changing their mind. When the project is done, I can’t wait to get “rid” of them, because it’s a never-ending project. Nothing ever gets finished. WordPress allows me to (finally!) finish a project and give them the ability to change and manipulate virtually anything they may want with knowing little or no code at all, and best of all, without involving me.

+ +

Quick and Inexpensive

+ +

When you’re constantly beginning new projects, you get in the habit of building your own mini-framework, in hopes to cut off some of the development time or shave off some of the repetitiveness. WordPress is KING of saving time. I can create a new hosting environment, and have a functional WordPress installation in less than five minutes total. Then, I can focus on the needs of the customer and the design, rather than re-inventing the wheel for the 500th time.

+ +

Conclusion

+ +

Ultimately, I think my hatred really comes down to the bloat of WordPress. It reminds me so frequently of those who attempt to build an entire website using Dreamweaver’s visual mode. Yes, it’s possible to do it without knowing any code at all. But if you know anything about code, you can instantly look at the code that Dreamweaver spits out, and you know how much bloat and garbage can be cut out. WordPress is an incredible piece of software, and that’s apparent in it’s widespread usage. But bloat is my number one concern.

+ +

If you’re familiar with Google’s Page Speed analysis, you might be surprised to see that even some of the most popular websites rarely score above 50%. Take a basic WordPress theme, give it a test, and you might be surprised that you only received a score of 27. Developing everything from scratch, you can easily shave off the bloat and improve your page speed, which can equate to improved SEO through Google.

+ +

One last point, and then I’ll shut up. Am I using WordPress to run my blog? Absolutely. Is there a lot of bloat? Maybe a little, but I’ve tried to cut out everything that I could. I’m scoring in the 90’s in most aspects of Google’s Page rankings. I think I fall into the trap that so many other users do, and try too hard to focus on design, colors, and appearance, and not so much on the content. I was recently inspired by David Calhoun’s blog, and have since changed the design of my own blog to a more minimal design. David’s blog is great. It’s plain, clean, crisp, but more important, it’s fast. It provides the required functionality, and then the rest is focused on the content. Does David’s readers care that his blog is plain? Not really. He has a consistent reader-base, because of what he provides. Rarely, if ever, would anyone say, “This is a great looking site. I’m going to come back, even if there’s nothing here for me.” No. Does a good design/functionality help? Of course. But it’s not everything.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-12-08-investment-calculator-java/index.html b/public/post/2014-12-08-investment-calculator-java/index.html new file mode 100644 index 0000000..70202ac --- /dev/null +++ b/public/post/2014-12-08-investment-calculator-java/index.html @@ -0,0 +1,471 @@ + + + + + + Build a GUI Investment Calculator in Java · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

I’m not a programmer. Some people just have that natural itch to want to go out and code all day long, but that isn’t me. I enjoy scripting and web development, but deep, low-level programming just simply isn’t my thing. So the fact that even I was able to create a simple GUI application should tell you how easy it is. The code below might look daunting at first, but we’ll walk through it piece by piece to hopefully clear things up. I’ll try to make it as easy as possible to understand, but you should have at least a basic understanding of programming to go through this.

+ +

Java makes creating applications really simple. I’ve dabbled with C++, but never stuck with it long enough to get into the Object Oriented pieces of it. Whenever learning a new programming language, it seems the first program you write is “Hello World.” The next program after that is a basic investment calculator, and so we’re going to continue that pattern.

+ +

When we’re finished, we’ll have a program that looks something like this:

+ +

GUI Investment Calculator

+ +

At the end of this post, I’ll show the complete code. If you have the Java JDK (a free download, here), you can easily import this code into a text editor, save it with a .java extension, and then compile it using the command line. Something this would work:

+ +
javac SimpleGUIProgram.java
+java SimpleGUIProgram
+
+ +

Personally, I use Eclipse. It’s a free IDE that you can download, if you’re not interested in using a text editor.

+ +

Let’s get started.

+ +

First, let’s import some libraries. Libraries are basically a repository of reusable code. Rather than having to rewrite code over and over, why don’t we write it once, store it in the Java API, and then import it into our program whenever we need it? Luckily, someone has already done that for us! The specifics of each of these libraries isn’t super important, but just know that these include the graphical components that we’ll need to build our program.

+ +
import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+ +

Next, we’ll create the text fields and buttons that will be used in our program. Notice in the image above that we have four input fields (Investment Amount, Years, Annual Interest Rate, and Future Value) and two buttons (Compute and Reset). They’re pretty easy to define in Java.

+ +

You might wonder what private means. Whenever you create an object and set it to private, that means that it can only be accessed within that same class. We could change it to public or even protected, but for this example, we’ll leave it how it is. There are some benefits to leaving things private, such as avoiding data corruption and a few other things, but that’s outside the scope of this tutorial.

+ +

Then we need to tell Java what kind of object we’ll be creating. We’ll be using JTextField, which is just an input box, and JButton, which, obviously, is a button. And after that, we just need to name our object. For the sake of being descriptive, I usually like to prefix my object names with jtf or jb or similar, so I know what it is quickly by looking at it.

+ +
private JTextField jtfInvestmentAmount;
+private JTextField jtfAnnualInterestRate;
+private JTextField jtfNumberOfYears;
+private JTextField jtfFutureValue;
+private JButton jbtCompute;
+private JButton jbtReset;
+
+ +

Next, we’re going to define the properties for the frame (the program window). The setTitle property allows us to name the frame. You can see in the image above that the title of the window is “Loan Calculator” as we’ve defined here. You can name it whatever you’d like.

+ +

Next, we define the default close operation. This tells the computer what to do whenever the program is closed. We have the option to let the program to continue running, even when the box is closed. In this example, when the user hits the “x” in the corner of the window, we want our program to terminate, so we’ll use setDefaultCloseOperation(Frame.EXIT_ON_CLOSE).

+ +

setSize defines the window width and height in pixels. Pretty self-explanatory.

+ +

setLocationRelativeTo(null) allows us to center the window right in the middle of the screen. In my opinion, that’s the easiest and most user friendly. You have the option to set that location in pixels, using x and y coordinates, but generally, I’ve found that the user expects the window to open in the center of the screen.

+ +

Last, we want to set the layout. Java uses things called “Layout Managers”, which basically defines how elements are laid out inside of the program window. There are three layout managers that are most commonly used: Border, Flow, and Grid. You can read up on those other two, as I’m not going to explain them, but in this program, we’re going to be using the grid layout manager. It allows us to define how many rows, and how many columns we want for our program. GridLayout(5,2,5,5) tells our program that we want to use the Grid Layout Manager, with five rows, two columns and then 5 pixels for spacing.

+ +
setTitle("Loan Calculator");
+setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+setSize(500,300);
+setLocationRelativeTo(null);
+setLayout(new GridLayout(5,2,5,5));
+
+ +

Now that we’ve defined our window, we need to create some text labels next to our input fields. Because it’s just text, we don’t use private or public on these objects. We use the following code to create a new label (JLabel) object. Again, when we name the object, it’s good practice to use a prefix so you can easily tell what type of object it is. I use jl as my prefix. Then, we create the string of text for what the JLabel will output.

+ +

If you notice, I’ve placed a preceding space in front of the text. I find that Java likes to push things right up against the frame, and it’s not very aesthetically pleasing. By adding a space, it allows us to push the text away from the left edge ever-so-slightly. You can add more spacing if you prefer.

+ +
JLabel jlInvestmentAmount = new JLabel(" Investment Amount");
+JLabel jlNumberOfYears = new JLabel(" Number of Years");
+JLabel jlAnnualInterestRate = new JLabel(" Annual Interest Rate");
+JLabel jlFutureValue = new JLabel(" Future Value");
+
+ +

Earlier, we defined our textfields and buttons, but we didn’t actually create them. We basically told the program, “Hey, I’m going to be making these soon. Just wanted to give you a heads up.” But now we create them.

+ +

In the last line of code, we write jtfFutureValue.setEditable(false). I wanted the first three fields to be able to accept input from the user. But the last field (the Future Value field) is going to simply output our final answer. Rather than making the user confused by thinking they need to input something, I set the editing to false.

+ +
jtfInvestmentAmount = new JTextField();
+jtfNumberOfYears = new JTextField();
+jtfAnnualInterestRate = new JTextField();
+jtfFutureValue = new JTextField();
+jbtCompute = new JButton("Compute");
+jbtReset = new JButton("Reset");
+jtfFutureValue.setEditable(false);
+
+ +

Now that we’ve defined and created everything, we should be good right? Not quite. If were to run the program right now, our program wouldn’t do anything. What happened to all the things we created, you might ask? We’ve created all the objects, but we haven’t told the program to add them to our frame (window). We can do this simply by typing add and then the name of the object.

+ +
add (jlInvestmentAmount);
+add (jtfInvestmentAmount);
+add (jlNumberOfYears);
+add (jtfNumberOfYears);
+add (jlAnnualInterestRate);
+add (jtfAnnualInterestRate);
+add (jlFutureValue);
+add (jtfFutureValue);
+add (jbtCompute);
+add (jbtReset);
+
+ +

Next, we need to tell the computer that we want it to do something once we click on a button. This code doesn’t do much else, besides call other methods (functions) that we’ll define in a bit.

+ +
ListenerClass listener = new ListenerClass();
+jbtCompute.addActionListener(listener);
+jbtReset.addActionListener(listener);
+
+ +

Another very important piece: We need to set the window visibility to true. Otherwise, nothing will appear when we run the program.

+ +
setVisible(true);
+
+ +

Every program in Java requires a main method. All this code does is calls the class that we’ve already created. It doesn’t look like much, but our program won’t run at all if we don’t have this.

+ +
public static void main(String[] args) {
+new SimpleGUIProgram();
+
+ +

The following code does two important things: catches exceptions, and does all the math calculations for our program.

+ +

First, we need to assume that people are stupid. You would think that most people would be smart enough to input numbers into the fields of our program, but what happens if they entered a word instead of a number? Without a “try…catch”, the program would just crash, without any warning to our user. Instead, we can make things a little bit more user friendly and say, “Please enter numeric values” if they enter anything except numbers.

+ +

And second, the rest of this code takes the data entered by the user in the fields, does all of the calculations, and then formats it to look pretty. We pull the data from the fields, parse it into a number (either an Integer or a Double), and then convert the annual interest rate into a monthly interest rate. We could do that by dividing by 12, but I also combined the percentage into that calculation as well (1200 instead of 12) so that I don’t have to write another line of code to divide the percent by 100 as well.

+ +
private void computeValue() {
+try {
+double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText());
+double monthlyInterestRate = annualInterestRate / 1200.0;
+int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText());
+double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText());
+double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12);
+jtfFutureValue.setText(String.format("%.2f", futureValue));
+} catch (Exception e) {
+JOptionPane.showMessageDialog(null, " Please enter numeric values.");
+}
+}
+
+ +

This code is very simple. Whenever a user clicks on the “Reset” button, it will call this method, and change whatever is input into the boxes into a blank string.

+ +
private void resetForm() {
+jtfInvestmentAmount.setText("");
+jtfAnnualInterestRate.setText("");
+jtfNumberOfYears.setText("");
+jtfFutureValue.setText("");
+}
+
+ +

And finally, this code is what links the buttons to the methods we created. We create a ListenerClass, which essentially says, “When I do this, do this.” So, “when I click on a button, call this method.”

+ +
private class ListenerClass implements ActionListener {
+public void actionPerformed(ActionEvent e) {
+if (e.getSource() == jbtCompute) {
+computeValue();
+}
+if (e.getSource() == jbtReset) {
+resetForm();
+}
+
+ +

And really, that’s it! Not to shabby for ~100 lines of code, eh? Here’s the entire code:

+ +
/*************************
+* Created by: Bryce Matheson
+* Website: blog.mathesondigital.com
+* Date: 12/7/2014
+*
+* Purpose: A simple GUI Investment Calculator
+*
+* Rights: Free to use for Personal Use
+*************************/
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+public class SimpleGUIProgram extends JFrame {
+    
+    private JTextField jtfInvestmentAmount;
+    private JTextField jtfAnnualInterestRate;
+    private JTextField jtfNumberOfYears;
+    private JTextField jtfFutureValue;
+    private JButton jbtCompute;
+    private JButton jbtReset;
+    
+    public SimpleGUIProgram() {
+        
+        setTitle("Loan Calculator");
+        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        setSize(500,300);
+        setLocationRelativeTo(null);
+        setLayout(new GridLayout(5,2,5,5));
+        
+        JLabel jlInvestmentAmount = new JLabel(" Investment Amount");
+        JLabel jlNumberOfYears = new JLabel(" Number of Years");
+        JLabel jlAnnualInterestRate = new JLabel(" Annual Interest Rate");
+        JLabel jlFutureValue = new JLabel(" Future Value");
+        
+        jtfInvestmentAmount = new JTextField();
+        jtfNumberOfYears = new JTextField();
+        jtfAnnualInterestRate = new JTextField();
+        jtfFutureValue = new JTextField();
+        jtfFutureValue.setEditable(false);
+        
+        jbtCompute = new JButton("Compute");
+        jbtReset = new JButton("Reset");
+        
+        add (jlInvestmentAmount);
+        add (jtfInvestmentAmount);
+        add (jlNumberOfYears);
+        add (jtfNumberOfYears);
+        add (jlAnnualInterestRate);
+        add (jtfAnnualInterestRate);
+        add (jlFutureValue);
+        add (jtfFutureValue);
+        add (jbtCompute);
+        add (jbtReset);
+        
+        ListenerClass listener = new ListenerClass();
+        jbtCompute.addActionListener(listener);
+        jbtReset.addActionListener(listener);
+        
+        setVisible(true);
+    }
+    
+    public static void main(String[] args) {
+        new SimpleGUIProgram();
+    }
+
+    private void computeValue() {
+        try {
+            double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText());
+            double monthlyInterestRate = annualInterestRate / 1200.0;
+            int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText());
+            double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText());
+            double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12);
+            jtfFutureValue.setText(String.format("%.2f", futureValue));
+        } catch (Exception e) {
+            JOptionPane.showMessageDialog(null, " Please enter numeric values.");
+        }
+    }
+    
+    private void resetForm() {
+        jtfInvestmentAmount.setText("");
+        jtfAnnualInterestRate.setText("");
+        jtfNumberOfYears.setText("");
+        jtfFutureValue.setText("");
+    }
+    
+    private class ListenerClass implements ActionListener {
+        public void actionPerformed(ActionEvent e) {
+            if (e.getSource() == jbtCompute) {
+                computeValue();
+            }
+            if (e.getSource() == jbtReset) {
+                resetForm();
+            }
+        }
+    }
+}
+
+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-12-15-pseudo-responsive-images/index.html b/public/post/2014-12-15-pseudo-responsive-images/index.html new file mode 100644 index 0000000..b3d9dd5 --- /dev/null +++ b/public/post/2014-12-15-pseudo-responsive-images/index.html @@ -0,0 +1,236 @@ + + + + + + Pseudo-Responsive Images · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

Honestly, I’m a bit embarrassed to say that I didn’t know how to do this before. I’ll be creating a blog post here fairly soon on my conversion from WordPress to Jekyll for this blog, but in doing so, I’ve learned a lot of cool new things.

+ +

Due to the vast number of mobile devices in circulation right now, I make it a habit to try and develop for mobile first, and then expand for the desktop user. Developing for mobile almost instantly implies responsive design. There are dozens of CSS frameworks to do this (Bootstrap, Foundation, Skeleton, etc.) intended to make your job a little bit easier.

+ +

I ran into an issue while coding this site. My content would all scale down properly and fit into the viewport perfectly, except for images, which would overflow the bounds of the viewport. I couldn’t for the life of me figure out what I was doing wrong. When copying content over from WordPress, I guess that I had added ‘width’ and ‘height’ attributes, which forced the images to display at those dimensions. After going through all of the images and removing both of those attributes, I simply went to my stylesheet and added the following. Lucky for me, I didn’t have too many images to go through:

+ +
img {
+  width: 100%;
+  box-shadow: 10px 10px 5px #888888;
+}
+
+ +

Obviously the box-shadow isn’t required, but I just like add it for aesthetics.

+ +

That selects all images across my entire website, and tells them to stretch to 100% of the viewport (which, in the case of this site, is 700px). As the page resizes, or is viewed on a different viewport size (such as a phone or tablet), that image is scaled down accordingly.

+ +

One thing to mention, too, is that if you remove just the ‘width’ attribute, but leave the ‘height’ attribute, your images will come out all stretched and skewed as the image is scaled according to the viewport size.

+ +

It’s also important to note that this isn’t the ‘real’ way to present responsive images on your site, I’m just too lazy to do it the real way. This way works perfectly for me, until it becomes simpler.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2014-12-20-take-that-mr-barney/index.html b/public/post/2014-12-20-take-that-mr-barney/index.html new file mode 100644 index 0000000..7de64d2 --- /dev/null +++ b/public/post/2014-12-20-take-that-mr-barney/index.html @@ -0,0 +1,244 @@ + + + + + + Take that, Mr. Barney · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

We’ve all had those professors/teachers that we just don’t seem to mesh with. Recently, I had a professor with whom I could not set aside my differences. The class was about Mobile Application Development. I went into it thinking, “Wow, I’m excited! Finally, I’ll be able to create an iOS/Android application!” On the first day of the class, Mr. Barney walked in and said, “This is not a programming class. This is not an iOS development class. This is not an Android development class. This class has no tests. This class has no assignments. This class has no texts, no books.”

+ +

As the class progressed, I got more and more frustrated with the structure and Mr. Barney’s teaching style. It seemed that the class was more about learning Mr. Barney than it was about the material. He came off as a close-to-retirement professor with a God-complex, who was tired of his job, and was just coasting on his measly salary for a few more years until he could finally escape.

+ +

The class consisted of a few technologies that we were forced to learn on our own, namely HTML 5, CSS Animations and Transitions, AJAX, DOM Manipulation, JavaScript Basics, etc. Because there were no class materials, we resorted to YouTube tutorials and blog articles to learn. On a bi-monthly basis, we would meet one-on-one in his office and present some sandbox code that we had been playing with that demonstrated one or more of these technologies. Based on his mood that day, he would open a little spreadsheet and rate you anywhere from “Strongly Disagree” to “Strongly Agree,” which ultimately equated to your class grade.

+ +

At one point, I decided to bring in a simple sandbox weather application, using an AJAX call to link to an API and populate data into the DOM based on the user’s location. The application used JQuery. While looking at my code, the second he saw a reference to JQuery, he tore it to pieces. “JQuery is of the devil.” or “JQuery is only for lazy programmers.” and “What happens if the JQuery library breaks, what happens to your application?”

+ +

Okay, so, maybe he didn’t say, “JQuery was of the devil.”

+ +

Basically, his point all boiled down to this: You can use JQuery, but it’s a bloated library and it contains so many additional pieces that you don’t need, and ultimately, you can do exactly what you need with plain ol’ vanilla JavaScript. It’s slow, and it would take a long time to download the entire library, when you don’t need it.

+ +

For the rest of the class, I hated him for it. 9 times out of 10 as I left his office, I was fuming. And I really do understand his point, and I believe that it has some validity, but mostly, it’s just him being old and outdated, and stuck in his ways.

+ +

Even after finishing the class, I hated him for it. Have you tried looking for web tutorials online for advanced AJAX calls that don’t use JQuery? It’s impossible!

+ +

In case you hadn’t noticed (as in, you aren’t using this website on a mobile device), the top navigation bar uses JQuery to convert to a small menu icon on smaller screens. I wanted to prove to myself that JQuery really isn’t that bloated, and that it is in fact a useful tool, and better than writing vanilla JavaScript.

+ +

After playing with a few things, I finally got the results I was looking for. Check out the results that I got while using Pingdom Page Speed. More specifically, look at the red box. My ‘styles.css’ file (that isn’t minified, btw) weighs a whopping 6.2kB. JQuery, which is more than 6x larger, loads more than twice as fast. How did I do it?

+ +

Pingdom PageSpeed Results

+ +

If you’re familiar with Bootstrap, and the way that you can customize it just to your liking, JQuery is the same. Usually, whenever I use Bootstrap, I don’t need all the font icons or navigation bars, or any of that. I only use the responsive pieces. With JQuery, they have similar options on their website to where you can customize it to your liking. I knew that the only piece I’d be using on my website is the navigation library. So I stripped everything else out.

+ +

Also, up until this point, I wasn’t familiar with CDNs, or the power that they potentially had. Pulling JQuery from their hosted CDN, rather than from my on my own shared web server undoubtedly speeds up the page load. My website is pretty barebones, and that’s done on purpose to increase page speed. Loading times have come into consideration for everything I do on this site, but I don’t feel that JQuery has in anyway been detrimental to that.

+ +

I feel justified. Take that, Mr. Barney!

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-01-02-5-things-to-stop-doing-in-2015/index.html b/public/post/2015-01-02-5-things-to-stop-doing-in-2015/index.html new file mode 100644 index 0000000..b095a8c --- /dev/null +++ b/public/post/2015-01-02-5-things-to-stop-doing-in-2015/index.html @@ -0,0 +1,242 @@ + + + + + + 5 Things to Stop Doing in 2015 · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

It seems that a year has ended, and new year resolutions are all on the rage again. Yeah, there’s those typical ones such as joining a gym and getting in shape (although, I really think I might do it this year), etc. Here are five things I’d like to quit doing this year.

+ +

1. Quit checking my Instagram likes

+ +

Yeah, it’s stupid, but really. I mean it. We all do it. We open up Instagram and are excited when we see 30+ likes, 4 comments, and 2 new followers. I won’t say that I base my self-worth on it, but I do get a bit of a thrill when I post a great photograph, or come up with some whitty remark. I’m going to try my best to quit doing that. I love photography, and I’d call it more than a hobby, but I can get better at finding self-gratification from other peoples’ acceptance.

+ +

2. Stop thinking that the grass will be greener

+ +

“I’ll be happy when I’m married…”, “If only I made more money…”. Stop. Please. Stop it. Happiness truly comes from gratitude. I need to work on being content with where I’m at, and simply finding joy in the journey. It’s not a destination. I don’t want to wish life away thinking, “If only, if only.”

+ +

3. Stop comparing

+ +

“Comparison is the theif of joy.” Are you ever happy with your love life, until you see another girl at the other table? Are you content and grateful with your talents, and ever-eager to hone them, until you see the successes of others? Are you happy with your job and your work, until you see a potentially better offer? There is always going to be someone or something better, and should you actually ever obtain that, you’d find something else to complain about.

+ +

4. Quit feeling guilty

+ +

People make mistakes. People change. And so do you. You live, you learn, you grow. The end. What happened in the past doesn’t have to define you, unless you let it. Put on your big boy underwear, man up, and move on.

+ +

5. Stop feeling obligated

+ +

It’s okay to say, “No.” Don’t (always) make decisions based on what you think you should do. Make decisions based on what you WANT to do. It’s your life, and you’re going to have to live with the actions that you make. You have value, and your ruining your brand by undercharging.

+ +

That’s my list. What does yours look like?

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-01-19-static-site-contact-form/index.html b/public/post/2015-01-19-static-site-contact-form/index.html new file mode 100644 index 0000000..5effa9a --- /dev/null +++ b/public/post/2015-01-19-static-site-contact-form/index.html @@ -0,0 +1,245 @@ + + + + + + Static Site (Database Free) Contact Form · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

Although my site is always a work in progress, (I’ve still got plenty of things I need to do on it), I feel like it’s in the final stages. Recently, I was trying to add the finishing touches by implementing a contact form. Mostly, to combat spam. I didn’t want to throw my direct e-mail address out there, because that’s just asking for an inbox full of viagra ads.

+ +

The thing that I wanted to completely avoid was having any server-side (PHP) scripting, or databases. With most contact forms, that’s a inevitable. But my main concern with just about everything on my site is performance. I wasn’t willing to add a database just for that. So I went searching.

+ +

Introducing Formspree.io. It’s crazy easy. It involves using code, so if that scares you, you might want to stay away. But really, it’s just simply copying and pasting that anyone can do it. Besides, if you’re not into code, what’re you doing reading my blog?

+ +

Basically, you place their code on your site, and when someone submits anything in the form, all of the processing is done on their servers and forwarded to an email address that you provide. And what I love is that their logo isn’t plastered all over the place. It’s super minimal, and you don’t even have to register an account with them.

+ +
<form action="http://formspree.io/youremail@pasteithere.com" method="POST">
+  <p>Email:</p><input type="email" size="40" name="_replyto">
+  <p>Message:</p><textarea style="border: 1px lightgray solid; width: 100%; height: 300px;" name="body">
+  </textarea><br/>
+  <input style="display: block; width: 125px; text-size: 20px;" type="submit" value="Send">
+</form>
+
+ +

All you have to do is replace the youremail@pasteithere.com with the address you want your submissions to be forwarded to. Throw that on your site. The first thing you have to do is submit a test form, and a confirmation email will be sent to the address you specified. Once it’s confirmed, you’re set to go!

+ +

I left all the styling that I used in my form for you to use. You can strip it out or do whatever you want with it, obviously.

+ +

You might be wondering about costs or privacy. Right now, there’s a 1000/month cap on emails. Anything above that and you’ll have to pay, but I’d be surprised to get even 20 submissions a month from legitimate sources on my own site. As far as privacy, they say that don’t store any of the contents of the submissions, because they’re using the Mailgun API. And even if they did, I’m not too worried about it. You shouldn’t be submitting sensitive data to an unsecure form on the web anyway.

+ +

One of my favorite features is the ability to add a “honeypot” for those who are just scraping the web, looking for forms to easily submit. You can add a textfield to the form, give it a name value of _gotcha, and then hide it using CSS. If any value is entered in this field, the message will be silently ignored. At the same time, this field is hidden from humans so that they won’t accidentally enter anything.

+ +
<input type="text" name="_gotcha" style="display:none" />
+
+ +

What about adding additional fields or features? Head on over to their website to see everything they’ve got to offer. This probably sounds like I’m being paid to write this post, but I’m not. I’m just grateful that I found a simple, easy solution to fill my needs. Enjoy!

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-01-24-remove-ds_store-from-zip-file/index.html b/public/post/2015-01-24-remove-ds_store-from-zip-file/index.html new file mode 100644 index 0000000..c8da524 --- /dev/null +++ b/public/post/2015-01-24-remove-ds_store-from-zip-file/index.html @@ -0,0 +1,238 @@ + + + + + + Remove .DS_Store from ZIP Files · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

At work this week, I had to download a bunch of compressed XML files, delete some duplicate files contained therein, recompress the files, and then reupload them to a server. The problem, however, is that whenever I tried to upload the files, I got a strange server error. After some trial and error, and some deep examination, I found that the hidden file “.DS_Store” was causing the server error issue. When I removed the hidden “.DS_Store” file, I had no more issues.

+ +

If you’re a Mac user, you’ve undoubtedly noticed these strange files that seem to creep into every directory. They’ve plagued the operating system for years, and there’s still not a super great solution for removing them. And the files don’t just stay on your machine. Ever plugged in a USB flash drive to take over to a Windows machine? These obnoxious files have most certainly hopped on for a ride. They’re nothing more than metadata (data about data), but they’ve never been an issue for me until now.

+ +

So I navigated through the compressed folders again, deleted the hidden files, and then thought I was set. Upon recompressing the files once more and trying to upload them, I was still presented with the same error. Guess what happened when the folders were compressed again? Yep. The infamous .DS_Store file had once again shown up.

+ +

So how do you remove these files in a compressed directory? Unzipping the files to remove them doesn’t work, as they’ll just show up again as soon as you re-zip the file. Well, I’ve had to resort to the command line. Using the following command in the terminal, I was successfully able to remove the annoyance quickly.

+ +

zip -r mynewzipfile.zip wherethefilesarecomingfrom -x “*.DS_Store”

+ +

Just to break down the above command:
+zip – The terminal command
+-r – “Recursive.” This means to select all files and subfolders under the directory
+mynewzipfile.zip – Name this whatever you’d like the new ZIP file to be called
+wherethefilesarecomingfrom – The directory that contains the files to be zipped
+-x – “Exclude” flag.
+“*.DS_Store” – Selects all files that are named “.DS_Store”

+ +

Your new zip file will be created WITHOUT the .DS_Store file. Tah-dah!

+ +

Upon doing a quick search on the internet, I found the following program called Asepsis. I haven’t given it a try, but apparently it prevents the creation of any .DS_Store files. Might be worth giving it a try.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-02-14-i-love-to-grunt-and-gulp/index.html b/public/post/2015-02-14-i-love-to-grunt-and-gulp/index.html new file mode 100644 index 0000000..f448046 --- /dev/null +++ b/public/post/2015-02-14-i-love-to-grunt-and-gulp/index.html @@ -0,0 +1,316 @@ + + + + + + I love to Grunt and Gulp · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

(Happy Valentine’s Day, ya’ll. Get off the computer and go buy something nice for your woman.)

+ +

Sometimes I like to pretend that I know stuff, when I really don’t. Gulp is one of those things. :)

+ +

I need to get better at finding solutions to a lot of the repetitive tasks that I do on a daily basis. Up until now, let’s say I was about to push some production code to the web. Of course I needed to minify the CSS first. So I would copy the code, hit up CSS Minifier, paste the code back into my CSS file, and then rename the file, styles.min.css. This wouldn’t be that big of an issue if I only did it once upon completion of a site. But it never really worked out that way. I’d forget to change a specific style last minute, and then I’d have to copy all of my code into CSS Minifier and do it all again.

+ +

Wouldn’t it be great if there were a service that did all of this for you, automatically? You’re in luck! They’re called “Task Runners”. I’m going to be focusing on “Gulp”, which is a JavaScript task runner, built off of Node.js.

+ +

Now, to many of you, you’ve probably been using a task runner of some sort for years. For a long time, Grunt has been the big name in the game. Not too long ago, Gulp emerged and has been hogging the spotlight. It’s not only faster at rendering, but it also has an easier-to-read syntax.

+ +

Now, I’m too lazy to reinvent the wheel and write a tutorial on how to install and run gulp. This guy does a much better job than I could do, anyway.

+ +

But I did at least want to post my gulpfile and say how freaking awesome it is. By simply running the gulp command, in less than second, I can minify my CSS, JS, and HTML, concatenate multiple files into one, rename them automatically, add in browser prefixes, and then reload the browser window. In less than a second. Boom. Pretty nifty, huh? Additionally, my gulpfile will watch for any changes to those files, and rerun all of those tanks without me doing anything. Dope.

+ +
var gulp = require('gulp'); 
+
+/**********************************************
+****************** Modules ********************
+***********************************************/
+var sass = require('gulp-ruby-sass'); //Compiles SASS
+var autoprefix = require('gulp-autoprefixer'); //Automatically throws in browser prefixes
+var minifycss = require('gulp-minify-css'); //Minifies CSS
+var rename = require("gulp-rename"); //Renames files to .min after minifying
+var minifyhtml = require('gulp-minify-html'); //Minifies the HTML
+var concat = require('gulp-concat'); //Concatenates all source files into one file
+var uglify = require('gulp-uglify'); //Removes whitespaces from JavaScript
+var imagemin = require('gulp-imagemin'); //Compresses images
+var livereload = require('gulp-livereload'); //Live reload
+var plumber = require('gulp-plumber'); //Error handling
+
+/**********************************************
+****************** Functions ********************
+***********************************************/
+
+// css auto-prefix, minify, and rename
+gulp.task('styles', function() {
+    return sass('src/styles/', {style:'expanded'}).on('error', function(handleError){ console.log('Error: There\'s a problem with your SASS, stupid. Fix that shiz.'); })
+         .pipe(autoprefix('last 2 versions'))
+             .pipe(minifycss())
+                .pipe(rename({suffix:'.min'}))
+                  .pipe(gulp.dest('build/styles/'))
+                      .pipe(livereload());
+});
+
+// minify new images
+gulp.task('imagemin', function() {
+      gulp.src('src/images/*.jpg').on('error', function(handleError){ console.log('Error: There\'s a problem with your images, stupid. Fix that shiz.'); })
+          .pipe(imagemin())
+              .pipe(gulp.dest('build/images/'));
+});
+
+// minify new or changed HTML pages
+gulp.task('html', function() {
+        gulp.src('src/*.html')
+            .pipe(minifyhtml())
+                .pipe(gulp.dest('build/'))
+                .pipe(livereload());
+});
+
+// JS concat, strip debugging and minify
+gulp.task('scripts', function() {
+        gulp.src('src/scripts/*.js')
+            .pipe(concat('script.js'))
+                .pipe(uglify())
+                    .pipe(rename({suffix:'.min'}))
+                        .pipe(gulp.dest('build/scripts/'))
+                    .pipe(livereload());
+});
+
+/**********************************************
+************ Watch & Build Tasks **************
+***********************************************/
+gulp.task('default', ['styles', 'html', 'scripts', 'imagemin'], function() {
+        // watch for CSS changes & minify
+        gulp.watch('./src/styles/*.scss', function() {
+          livereload.listen();
+                 gulp.run('styles');
+                 });
+
+        // watch for html &amp; minify
+        gulp.watch('./src/*.html', function() {
+          livereload.listen();
+            gulp.run('html');
+                });
+
+        // watch for JS changes
+        gulp.watch('./src/scripts/*.js', function() {
+          livereload.listen();
+            gulp.run('scripts');
+                });
+
+        // watch for new images
+        gulp.watch('./src/images/*.jpg', function() {
+            gulp.run('imagemin');
+              });
+});
+
+ +

This isn’t even the tip of the iceberg. There are hundreds of gulp plugins, and I have yet to play with the majority of them. But these seem to be the most basic/common plugins, and so far, they’ve proved invaluable.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-02-20-command-line-essentials/index.html b/public/post/2015-02-20-command-line-essentials/index.html new file mode 100644 index 0000000..122137c --- /dev/null +++ b/public/post/2015-02-20-command-line-essentials/index.html @@ -0,0 +1,270 @@ + + + + + + Command Line Essentials · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+ + +

It wasn’t too long ago that I was terrified of the terminal. It’s pretty daunting to be staring at a blank screen with a blinking cursor taunting you. Want to know something? It’s not as scary as you might think. It would take years to master the command line, so don’t expect to know everything all at once. Everyday, try and find little ways to slowly blend the terminal with basic tasks. Slowly, you’ll find that it makes a lot of things easier.

+ +

Terminology

+ +

You may have heard words such as “terminal”, “command line”, “shell”, “bash”, etc. There are slight differences, but generally, they all refer to the same thing.

+ +

Terminal vs iTerm

+ +

‘iTerm’ is a terminal replacement. It’s simply a program that adds some features for developers and advanced users such as split panes, paste history, and a plethora of others. If you don’t need any of these, you can use the basic terminal just as well. If you’re looking for additional functionality, this might be worth looking into.

+ +

Honestly, I tried iTerm and didn’t care too much for it. I prefer TotalTerminal. I don’t have a bunch of needs for extra fancy features, but one thing I do love is the “visor” functionality. From anywhere on my computer, I can have a terminal window slide down from the top of my screen, simply by pressing a keyboard shortcut. This is much easier than navigating to Finder, then Applications, then Utilities, then Terminal. Or even faster than searching for it through Spotlight. Many people use the standard Command/Ctrl + ~ shortcut, but I’ve customized mine to Control + Control.

+ +

Another nifty feature is being able to have multiple terminal windows running different processes. I generally have a Jekyll or Grunt server running in one window, and then I use the other window for navigating through folders or committing changes on Git. It works similar to using tabs in Chrome or any other browser.

+ +

Basic Commands

+ +

Let’s get started. Go ahead and open up a terminal window and play with the following commands. Each command should be entered on a single line, and then followed by the [return/enter] key.

+ +

pwd – stands for “print working directory”. It lists the folder that you’re currently in (i.e. /Users/yourusername/Documents)

+ +

cd – stands for “change directory”. This lets you move in and out of folders. For example, if you’re in the “Documents” directory and want to move to another directory underneath named “School”, you would type cd School.

+ +

cd .. – Move “back” or “up” a folder. In our previous example, this would move you out of the “School” directory and back into the “Documents” folder.

+ +

cd ~ – Takes you back to your home directory. Let’s say you’re deep in a folder structure (i.e. /Users/yourusername/Documents/School/Senior/Thesis). Rather than having to type cd .. a billion times, you could type cd ~ to take you back to “/Users/yourusername”.

+ +

open . – Opens the current working directory in finder. I use this one ALL the time and love it.

+ +

clear – Clears the screen of all text. Sometimes the output of all previous commands can make me claustrophobic. This gives me a fresh, blank screen.

+ +

rm [filename] – Deletes a file.

+ +

mkdir [directoryname] – Stands for “make directory”. Creates a new folder.

+ +

ls – Stands for “list”. Shows a listing of all the files/folders in a directory. Often, I find myself adding an -al flag. -a shows “all files” (hidden files included), and -l shows a long listing of files, rather than in a three-column short listing. This to me, is easier to read. You can combine the two flags together with the ls command by typing ls -al.

+ +

sudo [command] – Stands for “super user do”. Sometimes you need elevated privileges to run a certain command. Typing sudo before the command will prompt for your password, and will then run the command. Be careful when using this command. If you don’t know what you’re doing, you can make some unwanted changes. If at all possible, run the command first without sudo, and only add it in if needed.

+ +

control + c – Cancels a current process. For example, if you’re running a script, you can kill (cancel) it.

+ +

[Up arrow] – You can see a list of all the previous commands you’ve entered by pressing the up arrow key. This saves time rather than having to type in a command over and over again.

+ +

[tab] – Autocomplete. Let’s say I have a long folder name such “Discertation”. Start typing the first few letters of the file/folder to distinguish it from other files, and then press the “tab” key. It will autocomplete the filename for you.

+ +

Give it a try!

+ +

Well, there are a few commands to get you started and make you just dangerous enough. Practice makes perfect! I use most all of these commands on a daily basis, but there are thousands of additional commands that you can learn. Baby steps.

+ +

Comments

+ +

Did I miss any of your favorites? Let me know, and I’ll list them here.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-06-03-powershell-extend-script/index.html b/public/post/2015-06-03-powershell-extend-script/index.html new file mode 100644 index 0000000..3cdf59b --- /dev/null +++ b/public/post/2015-06-03-powershell-extend-script/index.html @@ -0,0 +1,328 @@ + + + + + + VMware Disk Extend Powershell Script · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

About a month ago, I began working at Intermountain Healthcare, here in Utah, as a Systems Administrator. We have a bunch of monitoring software, one of which is called “Spectrum”. It searches for hardware errors or any other faults and then reports them to us. One of the most common reports that we find is that “C: 90% usage”, or something similar. Because the majority of the servers that we run are virtual, with a thin disk setup, they have relatively small drives (some starting as small as 25GB). As applications are installed or the demands of the business unit increase, we find that these drives fill up rather quickly. Currently, the process to extend these drives is to log into vConsole (vSphere Client), find the drive, edit the settings, provision additional disk space, remote into the virtual machine, open diskpart.exe, rescan the drive, and then extend it.

+ +

Now, that’s fine if you only have a couple of drives to extend each day. But with nearly 3500 servers that we’re in charge of, we get quite a few, and it becomes rather monotonous. Hence, I began playing with powershell and wrote a simple script that both provisions additional disk space for you, as well as extends the drive in the Guest Operating System.

+ +

The following script requires the VMWare PowerCLI. I prefer to use the PowerCLI, but you can also use the Snap-in and run it from Powershell directly. This has been tested to work on Windows Server 2003, 2008, and 2012. Because Windows 2003 doesn’t have the capability to extend a virtual disk from the OS natively, we use Dell’s 3rd party software “extpart.exe” (extend partition).

+ +

You’ll have to modify the script below to your needs by adding the VM host servers you want to connect to (indicated by “server1”, etc), as well as change the locations below for where to check for extpart.exe, as well as where to copy the program should it be found missing.

+ +

Cheers!

+ +
#Import the PowerCLI module
+#Add-PSSnapin VMware.VimAutomation.Core
+Set-PowerCLIConfiguration -DisplayDeprecationWarnings $false -InvalidCertificateAction Ignore -Confirm:$false
+
+function getDisk {
+    $disk = Read-Host "Which disk would you like to extend (i.e., '1')?"
+    Return $disk
+}
+
+function getDiskSize {
+    $diskSize = Read-Host "Enter new (total) drive size (in GB)?"
+    Return $diskSize
+}
+
+function setVMSize($vm, $disk, $diskSize) {
+    Get-HardDisk -vm $vm | where {$_.Name -eq "$disk"} | Set-HardDisk -CapacityGB $diskSize -ResizeGuestPartition -confirm:$false -ErrorAction:SilentlyContinue
+}
+
+# Connect to vConsole servers
+$authenticated = $false;
+while (-not $authenticated) {
+    Try {
+        Connect-VIServer -Server server1,server2,server3 -ErrorAction Stop | Select-Object -Property Name,IsConnected
+        $authenticated = $true
+    }
+    Catch {
+        Write-Host "Invalid username or password." -foreground "red"
+    }
+}
+
+# Check to make sure that the user inputs a valid VM
+$validVM = $false
+while (-not $validVM) {
+    $vm = Read-Host "Enter VM name"
+    Try {
+        Get-VM -Name $vm | Select-Object -Property Name
+        $validVM = $true
+    }
+    Catch {
+        Write-Host "Invalid VM name. Try again." -foreground "red"
+    }
+}
+
+# Get drive letter mappings and store them in the $diskArray array. Data from this
+# array can be accessed like so: $diskArray[0].DiskName, or .DriveLetter, or .DiskSize
+$diskArray = @()
+
+if ($vm) {
+    $VmView = Get-View -ViewType VirtualMachine -Filter @{"Name" = $vm}
+    foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | where {$_.DeviceInfo.Label -match "SCSI Controller"})) {
+        foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | where {$_.ControllerKey -eq $VirtualSCSIController.Key})) {
+            $VirtualDisk = "" | Select DiskName, DiskSize, DriveLetter
+            $VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label
+            $VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB
+
+            $LogicalDisks = @()
+            # Look up path for this disk using WMI.
+            $thisVirtualDisk = get-wmiobject -class "Win32_DiskDrive" -namespace "root\CIMV2" -computername $vm | where {$_.SCSIBus -eq $VirtualSCSIController.BusNumber -and $_.SCSITargetID -eq $VirtualDiskDevice.UnitNumber}
+            # Look up partition using WMI.
+            $Disk2Part = Get-WmiObject Win32_DiskDriveToDiskPartition -computername $vm | Where {$_.Antecedent -eq $thisVirtualDisk.__Path}
+            foreach ($thisPartition in $Disk2Part) {
+                #Look up logical drives for that partition using WMI.
+                $Part2Log = Get-WmiObject -Class Win32_LogicalDiskToPartition -computername $vm | Where {$_.Antecedent -eq $thisPartition.Dependent}
+                foreach ($thisLogical in $Part2Log) {
+                    if ($thisLogical.Dependent -match "[A-Z]:") {
+                        $LogicalDisks += $matches[0]
+                    }
+                }
+            }
+            $VirtualDisk.DriveLetter = $LogicalDisks
+            $diskArray += $VirtualDisk
+            Write-Output $VirtualDisk
+        }
+    }
+}
+
+# Check which OS version -- If Server 2003, run extpart. Run diskpart for all others.
+If ((Get-VMGuest $vm | Select-Object -Property OSFullName) -like '*2003*') {
+    $disk = getDisk
+    $diskSize = getDiskSize
+    setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize
+        # If extpart exists, do nothing. Otherwise, copy to C:\UTILS folder on VM.
+        if (Test-Path "\\$vm\c$\UTILS\extpart.exe"){
+            # do nothing
+        } else {
+            Copy-Item -Path "S:\SA\PostInstallDoNotModify\Installs\UTILS\extpart.exe" -Destination "\\$vm\c$\UTILS"
+            Write-Host "Successfully copied 'extpart.exe' to UTILS folder." -foreground "green"
+       }
+    $driveLetter = $diskArray[$disk - 1].DriveLetter
+    $sizeInMB = ((($diskSize)-($diskArray[$disk - 1].DiskSize))*1024)
+    $script = "C:\UTILS\extpart.exe $driveLetter $sizeInMB"
+    Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT
+} else {
+    $disk = getDisk
+    $diskSize = getDiskSize
+    $driveLetter = $diskArray[$disk - 1].DriveLetter
+    setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize
+    $script = "echo select volume = $driveLetter > c:\diskpart.txt && echo rescan >> c:\diskpart.txt && echo extend >> c:\diskpart.txt && diskpart.exe /s c:\diskpart.txt"
+    Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT
+}
+
+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-07-25-hindsight/index.html b/public/post/2015-07-25-hindsight/index.html new file mode 100644 index 0000000..4ddf101 --- /dev/null +++ b/public/post/2015-07-25-hindsight/index.html @@ -0,0 +1,237 @@ + + + + + + Hindsight · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

David Walsh, a popular Web Development blogger I follow, wrote a post a few months ago about the “Imposter Syndrome,” a common feeling that many developers have going into a new job, or even in their current position; a feeling of inadequacy or fear that someone is going to discover them as a “fake,” simply pretending to be competent in their field. As I was reading through his comments, I couldn’t help but relate.

+ +

Although I’ve felt that all-too-often (especially now — I start a new job in a week), I couldn’t help but look back with hindsight and feel fairly accomplished as to how far I’ve come in the past few years.

+ +

As some of you may know, I’m a Mormon (Latter-day Saint). When men of our congregation hit the ripe old age of 18-19, we’re expected to head out on a 2-year Missionary trip, teaching others and sharing our faith. During that time, we’re expected to set aside all personal endeavors to fully focus on sharing the Gospel and help others. Technology has always been a love of mine. It’s been more than just a hobby. Putting all of my technical interests on hold proved really difficult for me.

+ +

Upon returning home after those two years, I jumped head first into my technical degree. I felt *so* inadequate about all of things that I didn’t know, and especially outdated by all the latest technologies that had emerged in a rapidly-changing field.

+ +

Where I stand currently, I understand that there’s a plethora of information in front of me to learn. But it’s fun to look back and actually see how I’ve progressed.

+ +

It makes me laugh (and slightly embarrassed) to think that I used to build websites, and I never used a single class= statement, because my HTML documents consisted entirely of id= tags.

+ +

I can’t believe that I used to have absolutely no comprehension of what a “backend” was, and how server-side scripting and databases interacted to create full-fledged web applications. I was a sophomore in High School when I first heard the acronym “SQL,” but it wouldn’t be years until I even built my first query or understood what SQL was.

+ +

I remember the first time I learned how to insert PHP into my HTML code. My teacher wrote the following code on the board, and it just looked like greek to me. Not only did I not understand what it did, I couldn’t even begin to wrap my head around how it worked.

+ +
<?php include $_SERVER['DOCUMENT_ROOT']."/views/somefile.php";?>
+
+ +

I could go on forever. Anyway, the point to all of this, is simply to tell myself that I have progressed, and I have learned. Keep it up. Five years from now, you’ll look back at yourself again and think about how much farther you’ve come.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-07-31-windows-10-first-impressions/index.html b/public/post/2015-07-31-windows-10-first-impressions/index.html new file mode 100644 index 0000000..ec10c72 --- /dev/null +++ b/public/post/2015-07-31-windows-10-first-impressions/index.html @@ -0,0 +1,250 @@ + + + + + + Windows 10: First Impressions · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

Windows 10 launched yesterday, and so being my naturally-curious self on all the latest and greatest in the tech world, I gave it a go. I got an ISO and started it up in VM Fusion on my Mac. This won’t be an in-depth review on all the latest features and all that jazz. There are plenty of Tech Blogs out there that can perform a better review than I ever could. Besides, I’m lazy and don’t feel all that interested in doing so, anyway.

+ +

On first boot-up, the very first thing that I said to myself was, “Wow, this feels dark.” It doesn’t really feel like a warm, inviting welcome like Windows 7 or Windows 8.1 felt. The default background is a dark, deep blue (which can be changed, obviously), and the taskbar is straight black, without any nifty aero effects or transparency. It just seems very cold to me, something that you might see on a Batman movie. It might be something small and subtle that only I care about, but I feel like having brighter colors make things less intimidating. It almost has a Unix feel. I know that everything these days is turning towards a more flat UI, but what happened to Aero glass? I personally miss that transparent touch on the taskbar and open windows.

+ +

Windows 10 First Impressions

+ +

Also, I feel that the default icon set is absolutely disgusting. “This PC” and “Recycle Bin” look like something from Windows 95. Not a fan.

+ +

Windows 10 First Impressions

+ +

The next thing I couldn’t help but notice was that there were many features that seemed very “Mac”-esque. Virtual desktops, a notification panel that slides in from the right side of the screen, and a dedicated button to display all open applications as small panels (similar to how Expose/Mission Control does things). It seems like a poorly done copy cat of some of the features that I love most about OS X. Also, smaller pop-up messages slide in from the right side of the screen whenever new updates have been installed, or when Windows deems itself worthy to let you know that something has changed. Rather than informing you in the top-right corner like on a Mac, Microsoft has discretely moved these notifications to the bottom-right hand corner of the screen, as not to look too much like OS X.

+ +

Generally, after installing a brand new Windows OS, the first thing I tend to do is head over to Windows Update to install drivers. It’s kind of ironic, because everything listed under “Important Updates”, I uncheck, and everything listed under “Recommended Updates” are usually checked. I only select the specific hardware drivers that I’m looking for, and those are most often listed under “Recommended.” Shoot me for saying this (especially because my daily job is as a Windows Systems Administrator), but I’ve never really felt that Windows Updates have helped the security/stability/functionality of a Windows environment, and if anything, have had detrimental effects as far as performance goes. Most often, I decide to change the update settings to “Never install”. When I feel I need a specific update, I have enough technical know-how to manually select what I want. In Windows 10, only two options are listed now: “Automatic” and “Notify to schedule restart.” Sorry, Microsoft, but I like to have a little more control over update settings than that. For novice users, this might be a welcome feature, but I dislike it.

+ +

Windows 10 First Impressions

+ +

Another simple thing that I like to do on any new Windows installation is throw “Computer” on the desktop for easy access to the file system. “Computer” has been renamed to “This PC” in Windows 10 (I’m coming from Windows 7, so I don’t remember if this was changed previously in 8.1 or not). Normally, I can simply write-click on “Computer” and choose “Show on Desktop” to have it placed conveniently for me. All mentions of this have been removed. It’s small and stupid, but I really appreciated having that in a context menu. Now, you have to go into “Personalize” and then “Themes” and then “Desktop Icon Settings” — an unnecessary number of steps, in my opinion. I know that the “Windows + E” shortcut is available to open the file explorer, but still.

+ +

Windows 10 First Impressions

+ +

I’m sure (and hoping) that it’s only because I’m running the OS as a Virtual Machine, and the drivers just aren’t quite there yet for Mac, but I just couldn’t help but feel that everything that I did had a bit of latency. Clicks weren’t as snappy as I would have liked. There seemed to be a delay on just about everything I tried to do. Everything from clicking on the Start menu, to loading basic applications like Notepad. Mind you, that this is all running on a laptop with an SSD also. Windows 7 never seemed to have any sort of lag. It’s also very possible that because Windows 10 is 6 years newer than Windows 7, it requires more System Resources than any of its older siblings. It seemed the same to me, though. On a blank desktop, with no active applications, RAM usage was 0.7GB, although CPU utilization seemed a bit high for doing absolutely nothing.

+ +

Windows 10 First Impressions

+ +

Everything thus-far has been negative — So is there anything about Windows 10 that I do like? The new start menu. It’s wonderful. It’s as if Windows 7 and Windows 8 got together and had a baby. This is how the start menu in Windows 8 should have been. I welcome the live tiles that automatically update. It gives me quick access to weather and sports at a glance, rather than having to open a full-blown web page.

+ +

Windows 10 First Impressions

+ +

And speaking of Web pages, I’ve really enjoyed using Edge so far, the new browser to replace Internet Explorer. It’s not as different as I had expected, and still has subtle UI designs from IE 11, but it appears that it will do a much better job at rendering some of the latest HTML5/CSS3 properties that were almost completely missing previously.

+ +

Overall, I’m not super impressed. I’m sure it will get better as I use it more and discover where things have been moved to. Most new released from Microsoft are a bit buggy anyway, right out the door. As service packages are released and more user data is sent to Microsoft, thats bound to improve. It is much less intimidating than Windows 8.1 was, that’s for sure. I still can’t help but notice that everything is geared more and more towards tablet use, though. Microsoft has done a great job at making the OS fairly fluid for use on a standard desktop computer or a device with touch capability. I’m not ready to jump on that bandwagon yet, though. I haven’t been very impressed with many of the Windows tablets.

+ +

I’m a hater. Sue me.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-09-15-moral-sensitivity/index.html b/public/post/2015-09-15-moral-sensitivity/index.html new file mode 100644 index 0000000..18d149f --- /dev/null +++ b/public/post/2015-09-15-moral-sensitivity/index.html @@ -0,0 +1,234 @@ + + + + + + Moral Sensitivity · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

This has absolutely nothing to do with technology, but it’s my blog, so I can do what I want.

+ +

This past Memorial Day weekend, I had the most incredible chance to visit Yellowstone National Park. I’m embarrassed to say that I’ve lived less than two hours away from one of the largest National Parks in the United States for more than three years, and I’ve never made the trip. Once the weather warmed up, and we had a chance to get away for a full day, we gassed up the car, filled the coolers, and headed north.

+ +

As we entered into the park, the beauty was simply overwhelming. Lakes surrounded you as you drove, and the valleys appeared to roll on forever. Wildlife walked right up to your car, so close you could pet them. Waterfalls, thermal pools with rich colors, caves, geysers; every little detail was remarkable to look at, down to the very last tree or blade of grass.

+ +

However, as the day came to a close, I noticed something that I had not anticipated. I felt as if I was becoming more and more desensitized to the beauty that was around me. As we would arrive at a new location, we would get out, walk around, and in essence say, “Oh, look. Another waterfall. Okay! Everyone back in the car. Let’s go!” Driving down the road, we would pass a pasture with hundreds of bison, and barely bother to turn our heads. How could I have become so numb to God’s beautiful creations in only 8 short hours?

+ +

Each and every generation faces new challenges and new problems. I believe the biggest difference between my generation, and previous generations is our moral sensitivity. Or should I say, the lack thereof?

+ +

Talk to any elderly person, and they will have a myriad of stories to tell you about the “good ol’ days.” Cars weren’t made from plastic, the streets were safe after dark, gas was fifty cents a gallon, and people still had manners. Fast-forward fifty years in the future, and it’s not hard to see that our society has declined to moral numbness.

+ +

Miley Cyrus is seen half-naked “twerking” on television, children having children, music artists ‘singing’ violent lyrics, and the media distorting everyone’s definition of “beauty.” Can we go back? Can we rewind to a time when people were responsible, integrious, and had a work ethic?

+ +

When did it all begin? When did our culture as a whole say, “That’s it. We don’t care anymore,” and throw their hands in the air in disgust? It’s fairly easy to see that all of this didn’t happen overnight, but similar to my experience in Yellowstone, where did I begin to lose sight of what was around me? How do we train ourselves to view an oncoming social train wreck, and do something about it?

+ +

The answer is to simply take a break. If we become so engrossed in something for long, those things soon lose their importance. “You never know what you have until you lose it,” a common idiom. I think we should change that to say, “You always know what you have, you just never think you’d lose it.” Here’s to taking a stand for what’s right, and clinging onto what little we still have of that moral compass. And it all starts with one.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/2015-11-09-mathesondigital-wordpress-theme/index.html b/public/post/2015-11-09-mathesondigital-wordpress-theme/index.html new file mode 100644 index 0000000..effada6 --- /dev/null +++ b/public/post/2015-11-09-mathesondigital-wordpress-theme/index.html @@ -0,0 +1,234 @@ + + + + + + MathesonDigital Wordpress Theme · Allegiant + + + + + + + + + + + +
+ + +
+ +
+
+

So I made a WordPress Theme.

+ +

MathesonDigital Wordpress Theme

+ +

Why? Because I’m sick of everything else on the internet. And that’s not to say that there aren’t some great themes out there. There are some truly incredible themes. And they do everything. The problem is, however, that I don’t need everything. All I need is a simple page that is aesthetically pleasing, and quick. And that’s about it. No frills, no fuss, no crazy configuration options, nothing.

+ +

So many of you might be asking then, “Bryce, why not just use a static site generator for your blog?” Good question. Been there, done that. And it was fine. I’m definitely a fan of Jekyll. The speed of a static site is great. For the first little while, I missed the features that came with a back-end language (PHP is my backend language of choice, which means WordPress works great for me), and some of the database features too. But of course, those are the benefits of a static site. I quickly was able to cope with some of the losses through the use of third-party commenting systems, like Disqus, but then I quickly found that I didn’t even care about that. You’ll notice that on this site, I’ve completely omitted the comment system.

+ +

But the main reason I ditched the static site generator were the painfully slow load times. My blog used to showcase a lot of my photography, and so I probably had around 50 posts total overall, most of which were photos. Everytime I made a little, itty-bitty change, it would have to regenerate, and take about 3-5 minutes per generation. That might not sound like a lot, but it would have to regenerate each and every time, regardless of how small of a change I made. And I’m one of those “code-and-check-and-code-and-check-some-more” type people. I don’t have enough confidence in myself to code lines and lines and lines of code before checking my work.

+ +

Another thing that I really missed also, was the ability to update the blog from anywhere I wanted. All of my static files were on my laptop at home, making it extremely difficult to access. Yeah, people mention options like Dropbox or whatever, but that’s just a hassle. WordPress works great for what I need, and because I don’t jam-pack my sites full of crappy third-party plugins, it works reasonably well.

+ +

If you like what you see, you’re free to use it. You can head over to my GitHub and grab it off of there. As I mention in the Readme, I didn’t really design the theme to be “user-friendly”, however. There’s no admin panel, there’s no fancy color changing options, blech. No, none of that. If I were designing this theme for mass use, or planning on selling it, of course I would have incorporated those features. But I just made it for my purposes, therefore any changes that you’ll want to make (aside from small menu adjustments, adding things to the footer, and adding banner images) will have to be done via code. But that should be the ultimate goal anyway, shouldn’t it?

+ +

It’s decently fast. And it’s responsive, too. Google Page Insights only ranks me a 65100, which I think is a bit of bull, but maybe I’ll take the time to go back and fix it at some point. I’ve been working on this project all weekend, and to be honest, I’m pretty sick of it and just ready to be done.

+ +

So anyway, enough rambling. Here’s a cool theme if you want to use it.

+ +
+
+ + +
+
+ +
Bryce Matheson works as a Windows Systems Administrator for a small IT company based out of Idaho Falls. When not consumed by work, Bryce enjoys dabbling with web development and whatever other technologies are currently tickling his fancy. This site is a place to document his learning.
+
+ +
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/public/post/index.html b/public/post/index.html new file mode 100644 index 0000000..68d31e7 --- /dev/null +++ b/public/post/index.html @@ -0,0 +1,330 @@ + + + + + + Posts · Allegiant + + + + + + + + + + + +
+ +
+

Posts

+ +
+
+

MathesonDigital Wordpress Theme

+ +

So I made a WordPress Theme. Why? Because I’m sick of everything else on the internet. And that’s not to say that there aren’t some great themes out there. There are some truly incredible themes. And they do everything. The problem is, however, that I don’t need everything. All I need is a simple page that is aesthetically pleasing, and quick. And that’s about it. No frills, no fuss, no crazy configuration options, nothing.

+ Continue reading ↦ +
+
+ +
+
+

Moral Sensitivity

+ +

This has absolutely nothing to do with technology, but it’s my blog, so I can do what I want. This past Memorial Day weekend, I had the most incredible chance to visit Yellowstone National Park. I’m embarrassed to say that I’ve lived less than two hours away from one of the largest National Parks in the United States for more than three years, and I’ve never made the trip. Once the weather warmed up, and we had a chance to get away for a full day, we gassed up the car, filled the coolers, and headed north.

+ Continue reading ↦ +
+
+ +
+
+

Windows 10: First Impressions

+ +

Windows 10 launched yesterday, and so being my naturally-curious self on all the latest and greatest in the tech world, I gave it a go. I got an ISO and started it up in VM Fusion on my Mac. This won’t be an in-depth review on all the latest features and all that jazz. There are plenty of Tech Blogs out there that can perform a better review than I ever could.

+ Continue reading ↦ +
+
+ +
+
+

Hindsight

+ +

David Walsh, a popular Web Development blogger I follow, wrote a post a few months ago about the “Imposter Syndrome,” a common feeling that many developers have going into a new job, or even in their current position; a feeling of inadequacy or fear that someone is going to discover them as a “fake,” simply pretending to be competent in their field. As I was reading through his comments, I couldn’t help but relate.

+ Continue reading ↦ +
+
+ +
+
+

VMware Disk Extend Powershell Script

+ +

About a month ago, I began working at Intermountain Healthcare, here in Utah, as a Systems Administrator. We have a bunch of monitoring software, one of which is called “Spectrum”. It searches for hardware errors or any other faults and then reports them to us. One of the most common reports that we find is that “C: 90% usage”, or something similar. Because the majority of the servers that we run are virtual, with a thin disk setup, they have relatively small drives (some starting as small as 25GB).

+ Continue reading ↦ +
+
+ +
+
+

Command Line Essentials

+ +

It wasn’t too long ago that I was terrified of the terminal. It’s pretty daunting to be staring at a blank screen with a blinking cursor taunting you. Want to know something? It’s not as scary as you might think. It would take years to master the command line, so don’t expect to know everything all at once. Everyday, try and find little ways to slowly blend the terminal with basic tasks.

+ Continue reading ↦ +
+
+ +
+
+

I love to Grunt and Gulp

+ +

(Happy Valentine’s Day, ya’ll. Get off the computer and go buy something nice for your woman.) Sometimes I like to pretend that I know stuff, when I really don’t. Gulp is one of those things. :) I need to get better at finding solutions to a lot of the repetitive tasks that I do on a daily basis. Up until now, let’s say I was about to push some production code to the web.

+ Continue reading ↦ +
+
+ +
+
+

Remove .DS_Store from ZIP Files

+ +

At work this week, I had to download a bunch of compressed XML files, delete some duplicate files contained therein, recompress the files, and then reupload them to a server. The problem, however, is that whenever I tried to upload the files, I got a strange server error. After some trial and error, and some deep examination, I found that the hidden file “.DS_Store” was causing the server error issue. When I removed the hidden “.DS_Store” file, I had no more issues.

+ Continue reading ↦ +
+
+ +
+
+

Static Site (Database Free) Contact Form

+ +

Although my site is always a work in progress, (I’ve still got plenty of things I need to do on it), I feel like it’s in the final stages. Recently, I was trying to add the finishing touches by implementing a contact form. Mostly, to combat spam. I didn’t want to throw my direct e-mail address out there, because that’s just asking for an inbox full of viagra ads. The thing that I wanted to completely avoid was having any server-side (PHP) scripting, or databases.

+ Continue reading ↦ +
+
+ +
+
+

5 Things to Stop Doing in 2015

+ +

It seems that a year has ended, and new year resolutions are all on the rage again. Yeah, there’s those typical ones such as joining a gym and getting in shape (although, I really think I might do it this year), etc. Here are five things I’d like to quit doing this year. 1. Quit checking my Instagram likes Yeah, it’s stupid, but really. I mean it. We all do it.

+ Continue reading ↦ +
+
+ +
+
+

Take that, Mr. Barney

+ +

We’ve all had those professors/teachers that we just don’t seem to mesh with. Recently, I had a professor with whom I could not set aside my differences. The class was about Mobile Application Development. I went into it thinking, “Wow, I’m excited! Finally, I’ll be able to create an iOS/Android application!” On the first day of the class, Mr. Barney walked in and said, “This is not a programming class. This is not an iOS development class.

+ Continue reading ↦ +
+
+ +
+
+

Pseudo-Responsive Images

+ +

Honestly, I’m a bit embarrassed to say that I didn’t know how to do this before. I’ll be creating a blog post here fairly soon on my conversion from WordPress to Jekyll for this blog, but in doing so, I’ve learned a lot of cool new things. Due to the vast number of mobile devices in circulation right now, I make it a habit to try and develop for mobile first, and then expand for the desktop user.

+ Continue reading ↦ +
+
+ +
+
+

Build a GUI Investment Calculator in Java

+ +

I’m not a programmer. Some people just have that natural itch to want to go out and code all day long, but that isn’t me. I enjoy scripting and web development, but deep, low-level programming just simply isn’t my thing. So the fact that even I was able to create a simple GUI application should tell you how easy it is. The code below might look daunting at first, but we’ll walk through it piece by piece to hopefully clear things up.

+ Continue reading ↦ +
+
+ +
+
+

My love-hate relationship with WordPress

+ +

Recently, I’ve really been getting fed up with WordPress. And here’s why. WordPress dates all the way back to 2001. It was originally developed as a simple blogging platform based off of MySQL and PHP. Close to fifteen years later, it’s become a web standard and is used as the Framework/CMS for more than 20% of all the websites on the internet. And that’s exactly the problem. WordPress has exploded into a million different forks and subprojects, and has been expanded to run an equal amount of themes and plugins.

+ Continue reading ↦ +
+
+ +
+
+

Here's to actually sticking with something

+ +

When I was 16 (yes, I’m young, okay?), I had the idea for a Tech Blog. Not that it had never been done before or anything, but it’s just that ever since the age of 9, technology is the only hobby or thing in my life that I’ve consistently held interest in. I’m not sure why I wanted to start one, but I just figured it would be a good way of tracking my progress and learning of various technologies, as well as helping others in anyway, if possible.

+ Continue reading ↦ +
+
+ +
+
+

I have an iPhone and Mac. Get an iPad?

+ +

Let me start off right away by saying that you do not “need” an iPad. Regardless of what you do or do not have, you do not NEED an iPad. If you want to hear me go off on a big spiel about instant gratification and entitlement, I could talk your ear off. But we’ll save that for another day. But let’s get to what you’re really interested about. I am not an Apple Fanboy (an Apple Watch for $350?!

+ Continue reading ↦ +
+
+ +
+
+

T-Mobile, I'm Breaking Up With You

+ +

“It’s me, not you. Okay, no. Actually, it is you. We’ve had a good run together. We’ve tried it out for more than a year, but things just aren’t working out. That’s not to say that we haven’t had some good times together, but I’m just ready to move on.” Usually, it’s safer if I keep my credit card in a different room while I’m surfing the internet late at night.

+ Continue reading ↦ +
+
+ +
+
+

Visual Form Builder PayPal Redirect

+ +

For anyone who knows me even slightly well knows that I’m a huge fan of WordPress. I use it as my go-to CMS for all of the websites I create, whether for myself or for clients. It gives me the flexibility I need in a well designed format, and it gives my clients the ability to make changes to their own websites without knowing any code. Some people will give you a giant list of plugins that you have to download when first setting up your WordPress site.

+ Continue reading ↦ +
+
+ +
+
+

The Most Important Camera Accessory

+ +

Want to know what my most cherished and valuable piece of photography equipment is? You might be surprised. It’s not my beautiful Canon 6D. Nor is it my 24-70 F2.8 lens. It’s light, portable, and inexpensive, yet it’s the most important piece of equipment that I own: a plastic bag. Last night, we spent the evening playing with steel wool and throwing sparks into circular patterns into the air. Add a little fill flash, and some creativity, and you’ve got a fun evening planned.

+ Continue reading ↦ +
+
+ +
+
+

My Experience with a Mac

+ +

About six months ago, I finally made the switch. Not because I hadn’t wanted to do it earlier, or because I suddenly became so fed up with the Windows operating system. I simply just had a little excess of money, and so I figured, “Well, this will never happen again. Might as well do it now.” Before I start this article, I simply want to throw out a disclaimer that I am not a hardcore “fanboy.” I work as a Computer Technician, and I service both Macintosh and Windows systems.

+ Continue reading ↦ +
+
+ +
+
+

My Experience with Joomla

+ +

By reading through the various posts and topics that I have on this website, it’s pretty obvious to see that I’m a fan of WordPress. It makes complex tasks incredibly simple and automated for users who want to create/build a website, but don’t want to have to deal with code at all. For more advanced users who do want to tweak a bit more with code, WordPress is great for that as well.

+ Continue reading ↦ +
+
+ +
+
+

How to record your screen on a Mac

+ +

While I’m sure there are a plethora of third-party applications that you can download to do this, why add something to your computer that would potentially slow it down when the functionality is already built-in? The ability is already built straight into the Quicktime app on your Mac. That’s right! The same application that allows you to watch videos on your computer also allows you to record your screen. It’s remarkably simple, and best of all — free!

+ Continue reading ↦ +
+
+ +
+
+

Change Crop Orientation in Adobe Lightroom

+ +

Here’s a quick tip that, sadly, I just now discovered in Adobe Lightroom. I’d say I’m quite familiar with the tools and capabilities of Adobe Lightroom, however, one thing has always baffled me. While cropping an image, I could never get the crop tool to switch from landscape orientation to portrait. I like to constrain my cropping proportions so that if I ever need to print my images, I won’t have any letter boxing.

+ Continue reading ↦ +
+
+ +
+
+

Understanding RAID

+ +

Although this is changing with the advent of solid-state drives, most hard drives are mechanical, which means they are often the first part of a standard computer system to fail. Data is everything these days, and its up to you to protect it. But in the case of a drive failing, you have no excuse for not having a backup with the ease of RAID. Instead of waiting for a hard drive to fail, an easier approach can be taken.

+ Continue reading ↦ +
+
+ +
+
+

Removing 'category' from your WordPress URL

+ +

There’s no doubt about it. WordPress is popular, easy to use, and here to stay. It’s estimated that more than 20% of the internet is currently running on the CMS. With drag-and-drop features, thousands of themes, and super-simple customization, it’s easy to see why. That doesn’t mean WordPress doesn’t come without any quirks, though. One of those many quirks (annoyances, really) are the ‘categories’ feature. While it’s a piece of cake to categorize posts into various sections, there’s always been one thing that has bugged me.

+ Continue reading ↦ +
+
+ +
+
+

I don't use Anti-Virus software. Am I crazy?

+ +

I’ve been the go-to tech guy for family and friends for as long as I can remember. I can’t tell you how many times I’ve had someone come up to me asking, “My computer is SO slow. Can you fix it?” 99% percent of the time, this involves removing malware or virus infections. You’re all very familiar with these: browser hijacking, tons of popups, and a computer running as slow as molasses.

+ Continue reading ↦ +
+
+ +
+
+
+
+ + +
+ + + + + + + + + diff --git a/public/post/index.xml b/public/post/index.xml new file mode 100644 index 0000000..4648466 --- /dev/null +++ b/public/post/index.xml @@ -0,0 +1,929 @@ + + + + Posts on Allegiant + http://localhost:1313/brycematheson.io/post/ + Recent content in Posts on Allegiant + Hugo -- gohugo.io + en-us + &copy; Allegiant. All Rights Reserved. + Sun, 15 Nov 2015 18:50:20 -0700 + + + + MathesonDigital Wordpress Theme + http://localhost:1313/brycematheson.io/post/2015-11-09-mathesondigital-wordpress-theme/ + Sun, 15 Nov 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-11-09-mathesondigital-wordpress-theme/ + <p>So I made a WordPress Theme.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/mathesondigital-wordpress.png" alt="MathesonDigital Wordpress Theme" /></p> + +<p>Why? Because I&rsquo;m sick of everything else on the internet. And that&rsquo;s not to say that there aren&rsquo;t some great themes out there. There are some truly incredible themes. And they do everything. The problem is, however, that I don&rsquo;t need everything. All I need is a simple page that is aesthetically pleasing, and quick. And that&rsquo;s about it. No frills, no fuss, no crazy configuration options, nothing.</p> + +<p>So many of you might be asking then, &#8220;Bryce, why not just use a static site generator for your blog?&#8221; Good question. Been there, done that. And it was fine. I&rsquo;m definitely a fan of Jekyll. The speed of a static site is great. For the first little while, I missed the features that came with a back-end language (PHP is my backend language of choice, which means WordPress works great for me), and some of the database features too. But of course, those are the benefits of a static site. I quickly was able to cope with some of the losses through the use of third-party commenting systems, like <a href="https://disqus.com/" target="_blank">Disqus</a>, but then I quickly found that I didn&rsquo;t even care about that. You&rsquo;ll notice that on this site, I&rsquo;ve completely omitted the comment system.</p> + +<p>But the main reason I ditched the static site generator were the painfully slow load times. My blog used to showcase a lot of my photography, and so I probably had around 50 posts total overall, most of which were photos. Everytime I made a little, itty-bitty change, it would have to regenerate, and take about 3-5 minutes per generation. That might not sound like a lot, but it would have to regenerate each and every time, regardless of how small of a change I made. And I&rsquo;m one of those &#8220;code-and-check-and-code-and-check-some-more&#8221; type people. I don&rsquo;t have enough confidence in myself to code lines and lines and lines of code before checking my work.</p> + +<p>Another thing that I really missed also, was the ability to update the blog from anywhere I wanted. All of my static files were on my laptop at home, making it extremely difficult to access. Yeah, people mention options like Dropbox or whatever, but that&rsquo;s just a hassle. WordPress works great for what I need, and because I don&rsquo;t jam-pack my sites full of crappy third-party plugins, it works reasonably well.</p> + +<p>If you like what you see, you&rsquo;re free to use it. You can <a href="https://github.com/brycematheson/mathesondigital-wordpress" target="_blank">head over to my GitHub and grab it off of there</a>. As I mention in the Readme, I didn&rsquo;t really design the theme to be &#8220;user-friendly&#8221;, however. There&rsquo;s no admin panel, there&rsquo;s no fancy color changing options, blech. No, none of that. If I were designing this theme for mass use, or planning on selling it, of course I would have incorporated those features. But I just made it for my purposes, therefore any changes that you&rsquo;ll want to make (aside from small menu adjustments, adding things to the footer, and adding banner images) will have to be done via code. But that should be the ultimate goal anyway, shouldn&rsquo;t it?</p> + +<p>It&rsquo;s decently fast. And it&rsquo;s responsive, too. Google Page Insights only ranks me a <sup>65</sup>&frasl;<sub>100</sub>, which I think is a bit of bull, but maybe I&rsquo;ll take the time to go back and fix it at some point. I&rsquo;ve been working on this project all weekend, and to be honest, I&rsquo;m pretty sick of it and just ready to be done.</p> + +<p>So anyway, enough rambling. Here&rsquo;s a cool theme if you want to use it.</p> + + + + + Moral Sensitivity + http://localhost:1313/brycematheson.io/post/2015-09-15-moral-sensitivity/ + Tue, 15 Sep 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-09-15-moral-sensitivity/ + <p>This has absolutely nothing to do with technology, but it&rsquo;s my blog, so I can do what I want.</p> + +<p>This past Memorial Day weekend, I had the most incredible chance to visit Yellowstone National Park. I’m embarrassed to say that I’ve lived less than two hours away from one of the largest National Parks in the United States for more than three years, and I’ve never made the trip. Once the weather warmed up, and we had a chance to get away for a full day, we gassed up the car, filled the coolers, and headed north.</p> + +<p>As we entered into the park, the beauty was simply overwhelming. Lakes surrounded you as you drove, and the valleys appeared to roll on forever. Wildlife walked right up to your car, so close you could pet them. Waterfalls, thermal pools with rich colors, caves, geysers; every little detail was remarkable to look at, down to the very last tree or blade of grass.</p> + +<p>However, as the day came to a close, I noticed something that I had not anticipated. I felt as if I was becoming more and more desensitized to the beauty that was around me. As we would arrive at a new location, we would get out, walk around, and in essence say, “Oh, look. Another waterfall. Okay! Everyone back in the car. Let’s go!” Driving down the road, we would pass a pasture with hundreds of bison, and barely bother to turn our heads. How could I have become so numb to God’s beautiful creations in only 8 short hours?</p> + +<p>Each and every generation faces new challenges and new problems. I believe the biggest difference between my generation, and previous generations is our moral sensitivity. Or should I say, the lack thereof?</p> + +<p>Talk to any elderly person, and they will have a myriad of stories to tell you about the “good ol’ days.” Cars weren’t made from plastic, the streets were safe after dark, gas was fifty cents a gallon, and people still had manners. Fast-forward fifty years in the future, and it’s not hard to see that our society has declined to moral numbness.</p> + +<p>Miley Cyrus is seen half-naked “twerking” on television, children having children, music artists ‘singing’ violent lyrics, and the media distorting everyone’s definition of “beauty.” Can we go back? Can we rewind to a time when people were responsible, integrious, and had a work ethic?</p> + +<p>When did it all begin? When did our culture as a whole say, “That’s it. We don’t care anymore,” and throw their hands in the air in disgust? It’s fairly easy to see that all of this didn’t happen overnight, but similar to my experience in Yellowstone, where did I begin to lose sight of what was around me? How do we train ourselves to view an oncoming social train wreck, and do something about it?</p> + +<p>The answer is to simply take a break. If we become so engrossed in something for long, those things soon lose their importance. “You never know what you have until you lose it,” a common idiom. I think we should change that to say, “You always know what you have, you just never think you’d lose it.” Here’s to taking a stand for what’s right, and clinging onto what little we still have of that moral compass. And it all starts with one.</p> + + + + + Windows 10: First Impressions + http://localhost:1313/brycematheson.io/post/2015-07-31-windows-10-first-impressions/ + Fri, 31 Jul 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-07-31-windows-10-first-impressions/ + <p>Windows 10 launched yesterday, and so being my naturally-curious self on all the latest and greatest in the tech world, I gave it a go. I got an ISO and started it up in VM Fusion on my Mac. This won&rsquo;t be an in-depth review on all the latest features and all that jazz. There are plenty of Tech Blogs out there that can perform a <a href="http://www.cnet.com/products/microsoft-windows-10/" target="_blank">better review</a> than I ever could. Besides, I&rsquo;m lazy and don&rsquo;t feel all that interested in doing so, anyway.</p> + +<p>On first boot-up, the very first thing that I said to myself was, &#8220;Wow, this feels dark.&#8221; It doesn&rsquo;t really feel like a warm, inviting welcome like Windows 7 or Windows 8.1 felt. The default background is a dark, deep blue (which can be changed, obviously), and the taskbar is straight black, without any nifty aero effects or transparency. It just seems very cold to me, something that you might see on a Batman movie. It might be something small and subtle that only I care about, but I feel like having brighter colors make things less intimidating. It almost has a Unix feel. I know that everything these days is turning towards a more flat UI, but what happened to Aero glass? I personally miss that transparent touch on the taskbar and open windows.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-1.png" alt="Windows 10 First Impressions" /></p> + +<p>Also, I feel that the default icon set is absolutely disgusting. &#8220;This PC&#8221; and &#8220;Recycle Bin&#8221; look like something from Windows 95. Not a fan.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-2.png" alt="Windows 10 First Impressions" /></p> + +<p>The next thing I couldn&rsquo;t help but notice was that there were many features that seemed very &#8220;Mac&#8221;-esque. Virtual desktops, a notification panel that slides in from the right side of the screen, and a dedicated button to display all open applications as small panels (similar to how Expose/Mission Control does things). It seems like a poorly done copy cat of some of the features that I love most about OS X. Also, smaller pop-up messages slide in from the right side of the screen whenever new updates have been installed, or when Windows deems itself worthy to let you know that something has changed. Rather than informing you in the top-right corner like on a Mac, Microsoft has discretely moved these notifications to the bottom-right hand corner of the screen, as not to look too much like OS X.</p> + +<p>Generally, after installing a brand new Windows OS, the first thing I tend to do is head over to Windows Update to install drivers. It&rsquo;s kind of ironic, because everything listed under &#8220;Important Updates&#8221;, I uncheck, and everything listed under &#8220;Recommended Updates&#8221; are usually checked. I only select the specific hardware drivers that I&rsquo;m looking for, and those are most often listed under &#8220;Recommended.&#8221; Shoot me for saying this (especially because my daily job is as a Windows Systems Administrator), but I&rsquo;ve never really felt that Windows Updates have helped the security/stability/functionality of a Windows environment, and if anything, have had detrimental effects as far as performance goes. Most often, I decide to change the update settings to &#8220;Never install&#8221;. When I feel I need a specific update, I have enough technical know-how to manually select what I want. In Windows 10, only two options are listed now: &#8220;Automatic&#8221; and &#8220;Notify to schedule restart.&#8221; Sorry, Microsoft, but I like to have a little more control over update settings than that. For novice users, this might be a welcome feature, but I dislike it.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-3.png" alt="Windows 10 First Impressions" /></p> + +<p>Another simple thing that I like to do on any new Windows installation is throw &#8220;Computer&#8221; on the desktop for easy access to the file system. &#8220;Computer&#8221; has been renamed to &#8220;This PC&#8221; in Windows 10 (I&rsquo;m coming from Windows 7, so I don&rsquo;t remember if this was changed previously in 8.1 or not). Normally, I can simply write-click on &#8220;Computer&#8221; and choose &#8220;Show on Desktop&#8221; to have it placed conveniently for me. All mentions of this have been removed. It&rsquo;s small and stupid, but I really appreciated having that in a context menu. Now, you have to go into &#8220;Personalize&#8221; and then &#8220;Themes&#8221; and then &#8220;Desktop Icon Settings&#8221; &#8212; an unnecessary number of steps, in my opinion. I know that the &#8220;Windows + E&#8221; shortcut is available to open the file explorer, but still.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-4.png" alt="Windows 10 First Impressions" /></p> + +<p>I&rsquo;m sure (and hoping) that it&rsquo;s only because I&rsquo;m running the OS as a Virtual Machine, and the drivers just aren&rsquo;t quite there yet for Mac, but I just couldn&rsquo;t help but feel that everything that I did had a bit of latency. Clicks weren&rsquo;t as snappy as I would have liked. There seemed to be a delay on just about everything I tried to do. Everything from clicking on the Start menu, to loading basic applications like Notepad. Mind you, that this is all running on a laptop with an SSD also. Windows 7 never seemed to have any sort of lag. It&rsquo;s also very possible that because Windows 10 is 6 years newer than Windows 7, it requires more System Resources than any of its older siblings. It seemed the same to me, though. On a blank desktop, with no active applications, RAM usage was 0.7GB, although CPU utilization seemed a bit high for doing absolutely nothing.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-5.png" alt="Windows 10 First Impressions" /></p> + +<p>Everything thus-far has been negative &#8212; So is there anything about Windows 10 that I <em>do</em> like? The new start menu. It&rsquo;s wonderful. It&rsquo;s as if Windows 7 and Windows 8 got together and had a baby. This is how the start menu in Windows 8 <em>should</em> have been. I welcome the live tiles that automatically update. It gives me quick access to weather and sports at a glance, rather than having to open a full-blown web page.</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/windows-10-first-impressions-6.png" alt="Windows 10 First Impressions" /></p> + +<p>And speaking of Web pages, I&rsquo;ve really enjoyed using Edge so far, the new browser to replace Internet Explorer. It&rsquo;s not as different as I had expected, and still has subtle UI designs from IE 11, but it appears that it will do a much better job at rendering some of the latest HTML5/CSS3 properties that were almost completely missing previously.</p> + +<p>Overall, I&rsquo;m not super impressed. I&rsquo;m sure it will get better as I use it more and discover where things have been moved to. Most new released from Microsoft are a bit buggy anyway, right out the door. As service packages are released and more user data is sent to Microsoft, thats bound to improve. It is much less intimidating than Windows 8.1 was, that&rsquo;s for sure. I still can&rsquo;t help but notice that everything is geared more and more towards tablet use, though. Microsoft has done a great job at making the OS fairly fluid for use on a standard desktop computer or a device with touch capability. I&rsquo;m not ready to jump on that bandwagon yet, though. I haven&rsquo;t been very impressed with many of the Windows tablets.</p> + +<p>I&rsquo;m a hater. Sue me.</p> + + + + + Hindsight + http://localhost:1313/brycematheson.io/post/2015-07-25-hindsight/ + Wed, 15 Jul 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-07-25-hindsight/ + <p>David Walsh, a popular Web Development blogger I follow, <a href="http://davidwalsh.name/impostor-syndrome" target="_blank">wrote a post a few months ago about the &#8220;Imposter Syndrome,&#8221;</a> a common feeling that many developers have going into a new job, or even in their current position; a feeling of inadequacy or fear that someone is going to discover them as a &#8220;fake,&#8221; simply pretending to be competent in their field. As I was reading through his comments, I couldn&rsquo;t help but relate.</p> + +<p>Although I&rsquo;ve felt that all-too-often (especially now &#8212; I start a new job in a week), I couldn&rsquo;t help but look back with hindsight and feel fairly accomplished as to how far I&rsquo;ve come in the past few years.</p> + +<p>As some of you may know, <a href="http://mormon.org" target="_blank">I&rsquo;m a Mormon</a> (Latter-day Saint). When men of our congregation hit the ripe old age of 18-19, we&rsquo;re expected to head out on a 2-year Missionary trip, teaching others and sharing our faith. During that time, we&rsquo;re expected to set aside all personal endeavors to fully focus on sharing the Gospel and help others. Technology has always been a love of mine. It&rsquo;s been more than just a hobby. Putting all of my technical interests on hold proved really difficult for me.</p> + +<p>Upon returning home after those two years, I jumped head first into my technical degree. I felt *so* inadequate about all of things that I didn&rsquo;t know, and especially outdated by all the latest technologies that had emerged in a rapidly-changing field.</p> + +<p>Where I stand currently, I understand that there&rsquo;s a plethora of information in front of me to learn. But it&rsquo;s fun to look back and actually see how I&rsquo;ve progressed.</p> + +<p>It makes me laugh (and slightly embarrassed) to think that I used to build websites, and I never used a single <code>class=</code> statement, because my HTML documents consisted entirely of <code>id=</code> tags.</p> + +<p>I can&rsquo;t believe that I used to have absolutely no comprehension of what a &#8220;backend&#8221; was, and how server-side scripting and databases interacted to create full-fledged web applications. I was a sophomore in High School when I first heard the acronym &#8220;SQL,&#8221; but it wouldn&rsquo;t be years until I even built my first query or understood what SQL was.</p> + +<p>I remember the first time I learned how to insert PHP into my HTML code. My teacher wrote the following code on the board, and it just looked like greek to me. Not only did I not understand what it did, I couldn&rsquo;t even begin to wrap my head around how it worked.</p> + +<pre><code class="language-php">&lt;?php include $_SERVER['DOCUMENT_ROOT'].&quot;/views/somefile.php&quot;;?&gt; +</code></pre> + +<p>I could go on forever. Anyway, the point to all of this, is simply to tell myself that I have progressed, and I have learned. Keep it up. Five years from now, you&rsquo;ll look back at yourself again and think about how much farther you&rsquo;ve come.</p> + + + + + VMware Disk Extend Powershell Script + http://localhost:1313/brycematheson.io/post/2015-06-03-powershell-extend-script/ + Wed, 03 Jun 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-06-03-powershell-extend-script/ + <p>About a month ago, I began working at Intermountain Healthcare, here in Utah, as a Systems Administrator. We have a bunch of monitoring software, one of which is called &#8220;Spectrum&#8221;. It searches for hardware errors or any other faults and then reports them to us. One of the most common reports that we find is that &#8220;C: 90% usage&#8221;, or something similar. Because the majority of the servers that we run are virtual, with a thin disk setup, they have relatively small drives (some starting as small as 25GB). As applications are installed or the demands of the business unit increase, we find that these drives fill up rather quickly. Currently, the process to extend these drives is to log into vConsole (vSphere Client), find the drive, edit the settings, provision additional disk space, remote into the virtual machine, open diskpart.exe, rescan the drive, and then extend it.</p> + +<p>Now, that&rsquo;s fine if you only have a couple of drives to extend each day. But with nearly 3500 servers that we&rsquo;re in charge of, we get quite a few, and it becomes rather monotonous. Hence, I began playing with powershell and wrote a simple script that both provisions additional disk space for you, as well as extends the drive in the Guest Operating System.</p> + +<p>The following script requires the VMWare PowerCLI. I prefer to use the PowerCLI, but you can also use the Snap-in and run it from Powershell directly. This has been tested to work on Windows Server 2003, 2008, and 2012. Because Windows 2003 doesn&rsquo;t have the capability to extend a virtual disk from the OS natively, we use Dell&rsquo;s 3rd party software &#8220;extpart.exe&#8221; (extend partition).</p> + +<p>You&rsquo;ll have to modify the script below to your needs by adding the VM host servers you want to connect to (indicated by &#8220;server1&#8221;, etc), as well as change the locations below for where to check for extpart.exe, as well as where to copy the program should it be found missing.</p> + +<p>Cheers!</p> + +<pre><code class="language-powershell">#Import the PowerCLI module +#Add-PSSnapin VMware.VimAutomation.Core +Set-PowerCLIConfiguration -DisplayDeprecationWarnings $false -InvalidCertificateAction Ignore -Confirm:$false + +function getDisk { + $disk = Read-Host &quot;Which disk would you like to extend (i.e., '1')?&quot; + Return $disk +} + +function getDiskSize { + $diskSize = Read-Host &quot;Enter new (total) drive size (in GB)?&quot; + Return $diskSize +} + +function setVMSize($vm, $disk, $diskSize) { + Get-HardDisk -vm $vm | where {$_.Name -eq &quot;$disk&quot;} | Set-HardDisk -CapacityGB $diskSize -ResizeGuestPartition -confirm:$false -ErrorAction:SilentlyContinue +} + +# Connect to vConsole servers +$authenticated = $false; +while (-not $authenticated) { + Try { + Connect-VIServer -Server server1,server2,server3 -ErrorAction Stop | Select-Object -Property Name,IsConnected + $authenticated = $true + } + Catch { + Write-Host &quot;Invalid username or password.&quot; -foreground &quot;red&quot; + } +} + +# Check to make sure that the user inputs a valid VM +$validVM = $false +while (-not $validVM) { + $vm = Read-Host &quot;Enter VM name&quot; + Try { + Get-VM -Name $vm | Select-Object -Property Name + $validVM = $true + } + Catch { + Write-Host &quot;Invalid VM name. Try again.&quot; -foreground &quot;red&quot; + } +} + +# Get drive letter mappings and store them in the $diskArray array. Data from this +# array can be accessed like so: $diskArray[0].DiskName, or .DriveLetter, or .DiskSize +$diskArray = @() + +if ($vm) { + $VmView = Get-View -ViewType VirtualMachine -Filter @{&quot;Name&quot; = $vm} + foreach ($VirtualSCSIController in ($VMView.Config.Hardware.Device | where {$_.DeviceInfo.Label -match &quot;SCSI Controller&quot;})) { + foreach ($VirtualDiskDevice in ($VMView.Config.Hardware.Device | where {$_.ControllerKey -eq $VirtualSCSIController.Key})) { + $VirtualDisk = &quot;&quot; | Select DiskName, DiskSize, DriveLetter + $VirtualDisk.DiskName = $VirtualDiskDevice.DeviceInfo.Label + $VirtualDisk.DiskSize = $VirtualDiskDevice.CapacityInKB * 1KB / 1GB + + $LogicalDisks = @() + # Look up path for this disk using WMI. + $thisVirtualDisk = get-wmiobject -class &quot;Win32_DiskDrive&quot; -namespace &quot;root\CIMV2&quot; -computername $vm | where {$_.SCSIBus -eq $VirtualSCSIController.BusNumber -and $_.SCSITargetID -eq $VirtualDiskDevice.UnitNumber} + # Look up partition using WMI. + $Disk2Part = Get-WmiObject Win32_DiskDriveToDiskPartition -computername $vm | Where {$_.Antecedent -eq $thisVirtualDisk.__Path} + foreach ($thisPartition in $Disk2Part) { + #Look up logical drives for that partition using WMI. + $Part2Log = Get-WmiObject -Class Win32_LogicalDiskToPartition -computername $vm | Where {$_.Antecedent -eq $thisPartition.Dependent} + foreach ($thisLogical in $Part2Log) { + if ($thisLogical.Dependent -match &quot;[A-Z]:&quot;) { + $LogicalDisks += $matches[0] + } + } + } + $VirtualDisk.DriveLetter = $LogicalDisks + $diskArray += $VirtualDisk + Write-Output $VirtualDisk + } + } +} + +# Check which OS version -- If Server 2003, run extpart. Run diskpart for all others. +If ((Get-VMGuest $vm | Select-Object -Property OSFullName) -like '*2003*') { + $disk = getDisk + $diskSize = getDiskSize + setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize + # If extpart exists, do nothing. Otherwise, copy to C:\UTILS folder on VM. + if (Test-Path &quot;\\$vm\c$\UTILS\extpart.exe&quot;){ + # do nothing + } else { + Copy-Item -Path &quot;S:\SA\PostInstallDoNotModify\Installs\UTILS\extpart.exe&quot; -Destination &quot;\\$vm\c$\UTILS&quot; + Write-Host &quot;Successfully copied 'extpart.exe' to UTILS folder.&quot; -foreground &quot;green&quot; + } + $driveLetter = $diskArray[$disk - 1].DriveLetter + $sizeInMB = ((($diskSize)-($diskArray[$disk - 1].DiskSize))*1024) + $script = &quot;C:\UTILS\extpart.exe $driveLetter $sizeInMB&quot; + Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT +} else { + $disk = getDisk + $diskSize = getDiskSize + $driveLetter = $diskArray[$disk - 1].DriveLetter + setVMSize $vm $diskArray[$disk - 1].DiskName $diskSize + $script = &quot;echo select volume = $driveLetter &gt; c:\diskpart.txt &amp;&amp; echo rescan &gt;&gt; c:\diskpart.txt &amp;&amp; echo extend &gt;&gt; c:\diskpart.txt &amp;&amp; diskpart.exe /s c:\diskpart.txt&quot; + Invoke-VMScript -vm $vm -ScriptText $script -ScriptType BAT +} +</code></pre> + + + + + Command Line Essentials + http://localhost:1313/brycematheson.io/post/2015-02-20-command-line-essentials/ + Fri, 20 Feb 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-02-20-command-line-essentials/ + + +<p>It wasn&rsquo;t too long ago that I was terrified of the terminal. It&rsquo;s pretty daunting to be staring at a blank screen with a blinking cursor taunting you. Want to know something? It&rsquo;s not as scary as you might think. It would take years to master the command line, so don&rsquo;t expect to know everything all at once. Everyday, try and find little ways to slowly blend the terminal with basic tasks. Slowly, you&rsquo;ll find that it makes a lot of things easier.</p> + +<h2 id="terminology:9b1b4563a184a5dc550b880f1d4829c3">Terminology</h2> + +<p>You may have heard words such as &#8220;terminal&#8221;, &#8220;command line&#8221;, &#8220;shell&#8221;, &#8220;bash&#8221;, etc. There are slight differences, but generally, they all refer to the same thing.</p> + +<h2 id="terminal-vs-iterm:9b1b4563a184a5dc550b880f1d4829c3">Terminal vs iTerm</h2> + +<p>&#8216;iTerm&rsquo; is a terminal replacement. It&rsquo;s simply a program that adds some features for developers and advanced users such as split panes, paste history, and a plethora of others. If you don&rsquo;t need any of these, you can use the basic terminal just as well. If you&rsquo;re looking for additional functionality, this might be worth looking into.</p> + +<p>Honestly, I tried iTerm and didn&rsquo;t care too much for it. I prefer <a href="http://totalterminal.binaryage.com/" target="_blank">TotalTerminal</a>. I don&rsquo;t have a bunch of needs for extra fancy features, but one thing I do love is the &#8220;visor&#8221; functionality. From anywhere on my computer, I can have a terminal window slide down from the top of my screen, simply by pressing a keyboard shortcut. This is much easier than navigating to Finder, then Applications, then Utilities, then Terminal. Or even faster than searching for it through Spotlight. Many people use the standard <span class="smallcode">Command/Ctrl + ~</span> shortcut, but I&rsquo;ve customized mine to <span class="smallcode">Control + Control</span>.</p> + +<p>Another nifty feature is being able to have multiple terminal windows running different processes. I generally have a Jekyll or Grunt server running in one window, and then I use the other window for navigating through folders or committing changes on Git. It works similar to using tabs in Chrome or any other browser.</p> + +<h2 id="basic-commands:9b1b4563a184a5dc550b880f1d4829c3">Basic Commands</h2> + +<p>Let&rsquo;s get started. Go ahead and open up a terminal window and play with the following commands. Each command should be entered on a single line, and then followed by the <span class="smallcode">[return/enter]</span> key.</p> + +<p><span class="smallcode">pwd</span> &#8211; stands for &#8220;print working directory&#8221;. It lists the folder that you&rsquo;re currently in (i.e. /Users/yourusername/Documents)</p> + +<p><span class="smallcode">cd</span> &#8211; stands for &#8220;change directory&#8221;. This lets you move in and out of folders. For example, if you&rsquo;re in the &#8220;Documents&#8221; directory and want to move to another directory underneath named &#8220;School&#8221;, you would type <span class="smallcode">cd School</span>.</p> + +<p><span class="smallcode">cd ..</span> &#8211; Move &#8220;back&#8221; or &#8220;up&#8221; a folder. In our previous example, this would move you out of the &#8220;School&#8221; directory and back into the &#8220;Documents&#8221; folder.</p> + +<p><span class="smallcode">cd ~</span> &#8211; Takes you back to your home directory. Let&rsquo;s say you&rsquo;re deep in a folder structure (i.e. /Users/yourusername/Documents/School/Senior/Thesis). Rather than having to type <span class="smallcode">cd ..</span> a billion times, you could type <span class="smallcode">cd ~</span> to take you back to &#8220;/Users/yourusername&#8221;.</p> + +<p><span class="smallcode">open .</span> &#8211; Opens the current working directory in finder. I use this one ALL the time and love it.</p> + +<p><span class="smallcode">clear</span> &#8211; Clears the screen of all text. Sometimes the output of all previous commands can make me claustrophobic. This gives me a fresh, blank screen.</p> + +<p><span class="smallcode">rm [filename]</span> &#8211; Deletes a file.</p> + +<p><span class="smallcode">mkdir [directoryname]</span> &#8211; Stands for &#8220;make directory&#8221;. Creates a new folder.</p> + +<p><span class="smallcode">ls</span> &#8211; Stands for &#8220;list&#8221;. Shows a listing of all the files/folders in a directory. Often, I find myself adding an <span class="smallcode">-al</span> flag. <span class="smallcode">-a</span> shows &#8220;all files&#8221; (hidden files included), and <span class="smallcode">-l</span> shows a long listing of files, rather than in a three-column short listing. This to me, is easier to read. You can combine the two flags together with the ls command by typing <span class="smallcode">ls -al</span>.</p> + +<p><span class="smallcode">sudo [command]</span> &#8211; Stands for &#8220;super user do&#8221;. Sometimes you need elevated privileges to run a certain command. Typing <span class="smallcode">sudo</span> before the command will prompt for your password, and will then run the command. Be careful when using this command. If you don&rsquo;t know what you&rsquo;re doing, you can make some unwanted changes. If at all possible, run the command first <em>without</em> sudo, and only add it in if needed.</p> + +<p><span class="smallcode">control + c</span> &#8211; Cancels a current process. For example, if you&rsquo;re running a script, you can kill (cancel) it.</p> + +<p><span class="smallcode">[Up arrow]</span> &#8211; You can see a list of all the previous commands you&rsquo;ve entered by pressing the up arrow key. This saves time rather than having to type in a command over and over again.</p> + +<p><span class="smallcode">[tab]</span> &#8211; Autocomplete. Let&rsquo;s say I have a long folder name such &#8220;Discertation&#8221;. Start typing the first few letters of the file/folder to distinguish it from other files, and then press the &#8220;tab&#8221; key. It will autocomplete the filename for you.</p> + +<h2 id="give-it-a-try:9b1b4563a184a5dc550b880f1d4829c3">Give it a try!</h2> + +<p>Well, there are a few commands to get you started and make you just dangerous enough. Practice makes perfect! I use most all of these commands on a daily basis, but there are thousands of additional commands that you can learn. Baby steps.</p> + +<h2 id="comments:9b1b4563a184a5dc550b880f1d4829c3">Comments</h2> + +<p>Did I miss any of your favorites? Let me know, and I&rsquo;ll list them here.</p> + + + + + I love to Grunt and Gulp + http://localhost:1313/brycematheson.io/post/2015-02-14-i-love-to-grunt-and-gulp/ + Sat, 14 Feb 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-02-14-i-love-to-grunt-and-gulp/ + <p>(Happy Valentine&rsquo;s Day, ya&rsquo;ll. Get off the computer and go buy something nice for your woman.)</p> + +<p>Sometimes I like to pretend that I know stuff, when I really don&rsquo;t. Gulp is one of those things. :)</p> + +<p>I need to get better at finding solutions to a lot of the repetitive tasks that I do on a daily basis. Up until now, let&rsquo;s say I was about to push some production code to the web. Of course I needed to minify the CSS first. So I would copy the code, hit up <a href="http://cssminifier.com/" target="_blank">CSS Minifier</a>, paste the code back into my CSS file, and then rename the file, <code>styles.min.css</code>. This wouldn&rsquo;t be that big of an issue if I only did it once upon completion of a site. But it never really worked out that way. I&rsquo;d forget to change a specific style last minute, and then I&rsquo;d have to copy all of my code into CSS Minifier and do it all again.</p> + +<p>Wouldn&rsquo;t it be great if there were a service that did all of this for you, automatically? You&rsquo;re in luck! They&rsquo;re called &#8220;Task Runners&#8221;. I&rsquo;m going to be focusing on &#8220;Gulp&#8221;, which is a JavaScript task runner, built off of Node.js.</p> + +<p>Now, to many of you, you&rsquo;ve probably been using a task runner of some sort for years. For a long time, Grunt has been the big name in the game. Not too long ago, Gulp emerged and has been hogging the spotlight. It&rsquo;s not only faster at rendering, but it also has an easier-to-read syntax.</p> + +<p>Now, I&rsquo;m too lazy to reinvent the wheel and write a tutorial on how to install and run gulp. <a href="http://travismaynard.com/writing/getting-started-with-gulp" target="_blank">This guy</a> does a much better job than I could do, anyway.</p> + +<p>But I did at least want to post my gulpfile and say how freaking awesome it is. By simply running the <code>gulp</code> command, in less than second, I can minify my CSS, JS, and HTML, concatenate multiple files into one, rename them automatically, add in browser prefixes, and then reload the browser window. In less than a second. Boom. Pretty nifty, huh? Additionally, my gulpfile will watch for any changes to those files, and rerun all of those tanks without me doing anything. Dope.</p> + +<pre><code class="language-js">var gulp = require('gulp'); + +/********************************************** +****************** Modules ******************** +***********************************************/ +var sass = require('gulp-ruby-sass'); //Compiles SASS +var autoprefix = require('gulp-autoprefixer'); //Automatically throws in browser prefixes +var minifycss = require('gulp-minify-css'); //Minifies CSS +var rename = require(&quot;gulp-rename&quot;); //Renames files to .min after minifying +var minifyhtml = require('gulp-minify-html'); //Minifies the HTML +var concat = require('gulp-concat'); //Concatenates all source files into one file +var uglify = require('gulp-uglify'); //Removes whitespaces from JavaScript +var imagemin = require('gulp-imagemin'); //Compresses images +var livereload = require('gulp-livereload'); //Live reload +var plumber = require('gulp-plumber'); //Error handling + +/********************************************** +****************** Functions ******************** +***********************************************/ + +// css auto-prefix, minify, and rename +gulp.task('styles', function() { + return sass('src/styles/', {style:'expanded'}).on('error', function(handleError){ console.log('Error: There\'s a problem with your SASS, stupid. Fix that shiz.'); }) + .pipe(autoprefix('last 2 versions')) + .pipe(minifycss()) + .pipe(rename({suffix:'.min'})) + .pipe(gulp.dest('build/styles/')) + .pipe(livereload()); +}); + +// minify new images +gulp.task('imagemin', function() { + gulp.src('src/images/*.jpg').on('error', function(handleError){ console.log('Error: There\'s a problem with your images, stupid. Fix that shiz.'); }) + .pipe(imagemin()) + .pipe(gulp.dest('build/images/')); +}); + +// minify new or changed HTML pages +gulp.task('html', function() { + gulp.src('src/*.html') + .pipe(minifyhtml()) + .pipe(gulp.dest('build/')) + .pipe(livereload()); +}); + +// JS concat, strip debugging and minify +gulp.task('scripts', function() { + gulp.src('src/scripts/*.js') + .pipe(concat('script.js')) + .pipe(uglify()) + .pipe(rename({suffix:'.min'})) + .pipe(gulp.dest('build/scripts/')) + .pipe(livereload()); +}); + +/********************************************** +************ Watch &amp; Build Tasks ************** +***********************************************/ +gulp.task('default', ['styles', 'html', 'scripts', 'imagemin'], function() { + // watch for CSS changes &amp; minify + gulp.watch('./src/styles/*.scss', function() { + livereload.listen(); + gulp.run('styles'); + }); + + // watch for html &amp;amp; minify + gulp.watch('./src/*.html', function() { + livereload.listen(); + gulp.run('html'); + }); + + // watch for JS changes + gulp.watch('./src/scripts/*.js', function() { + livereload.listen(); + gulp.run('scripts'); + }); + + // watch for new images + gulp.watch('./src/images/*.jpg', function() { + gulp.run('imagemin'); + }); +}); +</code></pre> + +<p>This isn&rsquo;t even the tip of the iceberg. There are hundreds of gulp plugins, and I have yet to play with the majority of them. But these seem to be the most basic/common plugins, and so far, they&rsquo;ve proved invaluable.</p> + + + + + Remove .DS_Store from ZIP Files + http://localhost:1313/brycematheson.io/post/2015-01-24-remove-ds_store-from-zip-file/ + Sat, 24 Jan 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-01-24-remove-ds_store-from-zip-file/ + <p>At work this week, I had to download a bunch of compressed XML files, delete some duplicate files contained therein, recompress the files, and then reupload them to a server. The problem, however, is that whenever I tried to upload the files, I got a strange server error. After some trial and error, and some deep examination, I found that the hidden file &#8220;.DS_Store&#8221; was causing the server error issue. When I removed the hidden &#8220;.DS_Store&#8221; file, I had no more issues.</p> + +<p>If you&rsquo;re a Mac user, you&rsquo;ve undoubtedly noticed these strange files that seem to creep into every directory. They&rsquo;ve plagued the operating system for years, and there&rsquo;s still not a super great solution for removing them. And the files don&rsquo;t just stay on your machine. Ever plugged in a USB flash drive to take over to a Windows machine? These obnoxious files have most certainly hopped on for a ride. They&rsquo;re nothing more than metadata (data about data), but they&rsquo;ve never been an issue for me until now.</p> + +<p>So I navigated through the compressed folders again, deleted the hidden files, and then thought I was set. Upon recompressing the files once more and trying to upload them, I was still presented with the same error. Guess what happened when the folders were compressed again? Yep. The infamous .DS_Store file had once again shown up.</p> + +<p>So how do you remove these files in a compressed directory? Unzipping the files to remove them doesn&rsquo;t work, as they&rsquo;ll just show up again as soon as you re-zip the file. Well, I&rsquo;ve had to resort to the command line. Using the following command in the terminal, I was successfully able to remove the annoyance quickly.</p> + +<p><span class="smallcode">zip -r mynewzipfile.zip wherethefilesarecomingfrom -x &ldquo;*.DS_Store&rdquo;</span></p> + +<p>Just to break down the above command:<br /> +<span class="smallcode">zip</span> &#8211; The terminal command<br /> +<span class="smallcode">-r</span> &#8211; &#8220;Recursive.&#8221; This means to select all files and subfolders under the directory<br /> +<span class="smallcode">mynewzipfile.zip</span> &#8211; Name this whatever you&rsquo;d like the new ZIP file to be called<br /> +<span class="smallcode">wherethefilesarecomingfrom</span> &#8211; The directory that contains the files to be zipped<br /> +<span class="smallcode">-x</span> &#8211; &#8220;Exclude&#8221; flag.<br /> +<span class="smallcode">&ldquo;*.DS_Store&rdquo;</span> &#8211; Selects all files that are named &#8220;.DS_Store&#8221;</p> + +<p>Your new zip file will be created WITHOUT the .DS_Store file. Tah-dah!</p> + +<p>Upon doing a quick search on the internet, I found the following program called <a href="http://asepsis.binaryage.com" target="_blank">Asepsis</a>. I haven&rsquo;t given it a try, but apparently it prevents the creation of any .DS_Store files. Might be worth giving it a try.</p> + + + + + Static Site (Database Free) Contact Form + http://localhost:1313/brycematheson.io/post/2015-01-19-static-site-contact-form/ + Mon, 19 Jan 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-01-19-static-site-contact-form/ + <p>Although my site is always a work in progress, (I&rsquo;ve still got plenty of things I need to do on it), I feel like it&rsquo;s in the final stages. Recently, I was trying to add the finishing touches by implementing a contact form. Mostly, to combat spam. I didn&rsquo;t want to throw my direct e-mail address out there, because that&rsquo;s just asking for an inbox full of viagra ads.</p> + +<p>The thing that I wanted to completely avoid was having any server-side (PHP) scripting, or databases. With most contact forms, that&rsquo;s a inevitable. But my main concern with just about everything on my site is performance. I wasn&rsquo;t willing to add a database just for that. So I went searching.</p> + +<p>Introducing <a href="http://formspree.io/" target="_blank">Formspree.io.</a> It&rsquo;s crazy easy. It involves using code, so if that scares you, you might want to stay away. But really, it&rsquo;s just simply copying and pasting that anyone can do it. Besides, if you&rsquo;re not into code, what&rsquo;re you doing reading my blog?</p> + +<p>Basically, you place their code on your site, and when someone submits anything in the form, all of the processing is done on their servers and forwarded to an email address that you provide. And what I love is that their logo isn&rsquo;t plastered all over the place. It&rsquo;s super minimal, and you don&rsquo;t even have to register an account with them.</p> + +<pre><code class="language-html">&lt;form action=&quot;http://formspree.io/youremail@pasteithere.com&quot; method=&quot;POST&quot;&gt; + &lt;p&gt;Email:&lt;/p&gt;&lt;input type=&quot;email&quot; size=&quot;40&quot; name=&quot;_replyto&quot;&gt; + &lt;p&gt;Message:&lt;/p&gt;&lt;textarea style=&quot;border: 1px lightgray solid; width: 100%; height: 300px;&quot; name=&quot;body&quot;&gt; + &lt;/textarea&gt;&lt;br/&gt; + &lt;input style=&quot;display: block; width: 125px; text-size: 20px;&quot; type=&quot;submit&quot; value=&quot;Send&quot;&gt; +&lt;/form&gt; +</code></pre> + +<p>All you have to do is replace the <code>youremail@pasteithere.com</code> with the address you want your submissions to be forwarded to. Throw that on your site. The first thing you have to do is submit a test form, and a confirmation email will be sent to the address you specified. Once it&rsquo;s confirmed, you&rsquo;re set to go!</p> + +<p>I left all the styling that I used in my form for you to use. You can strip it out or do whatever you want with it, obviously.</p> + +<p>You might be wondering about costs or privacy. Right now, there&rsquo;s a 1000/month cap on emails. Anything above that and you&rsquo;ll have to pay, but I&rsquo;d be surprised to get even 20 submissions a month from legitimate sources on my own site. As far as privacy, they say that don&rsquo;t store any of the contents of the submissions, because they&rsquo;re using the Mailgun API. And even if they did, I&rsquo;m not too worried about it. You shouldn&rsquo;t be submitting sensitive data to an unsecure form on the web anyway.</p> + +<p>One of my favorite features is the ability to add a &#8220;honeypot&#8221; for those who are just scraping the web, looking for forms to easily submit. You can add a textfield to the form, give it a name value of <code>_gotcha</code>, and then hide it using CSS. If any value is entered in this field, the message will be silently ignored. At the same time, this field is hidden from humans so that they won&rsquo;t accidentally enter anything.</p> + +<pre><code class="language-html">&lt;input type=&quot;text&quot; name=&quot;_gotcha&quot; style=&quot;display:none&quot; /&gt; +</code></pre> + +<p>What about adding additional fields or features? Head on over to <a href="http://formspree.io/" target="_blank">their website</a> to see everything they&rsquo;ve got to offer. This probably sounds like I&rsquo;m being paid to write this post, but I&rsquo;m not. I&rsquo;m just grateful that I found a simple, easy solution to fill my needs. Enjoy!</p> + + + + + 5 Things to Stop Doing in 2015 + http://localhost:1313/brycematheson.io/post/2015-01-02-5-things-to-stop-doing-in-2015/ + Fri, 02 Jan 2015 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2015-01-02-5-things-to-stop-doing-in-2015/ + + +<p>It seems that a year has ended, and new year resolutions are all on the rage again. Yeah, there&rsquo;s those typical ones such as joining a gym and getting in shape (although, I really think I might do it this year), etc. Here are five things I&rsquo;d like to quit doing this year.</p> + +<h3 id="1-quit-checking-my-instagram-likes:6478d31356be52c166d4d2d1b32313ca">1. Quit checking my Instagram likes</h3> + +<p>Yeah, it&rsquo;s stupid, but really. I mean it. We all do it. We open up Instagram and are excited when we see 30+ likes, 4 comments, and 2 new followers. I won&rsquo;t say that I base my self-worth on it, but I do get a bit of a thrill when I post a great photograph, or come up with some whitty remark. I&rsquo;m going to try my best to quit doing that. I love photography, and I&rsquo;d call it more than a hobby, but I can get better at finding self-gratification from other peoples&rsquo; acceptance.</p> + +<h3 id="2-stop-thinking-that-the-grass-will-be-greener:6478d31356be52c166d4d2d1b32313ca">2. Stop thinking that the grass will be greener</h3> + +<p>&#8220;I&rsquo;ll be happy when I&rsquo;m married&#8230;&#8221;, &#8220;If only I made more money&#8230;&#8221;. Stop. Please. Stop it. Happiness truly comes from gratitude. I need to work on being content with where I&rsquo;m at, and simply finding joy in the journey. It&rsquo;s not a destination. I don&rsquo;t want to wish life away thinking, &#8220;If only, if only.&#8221;</p> + +<h3 id="3-stop-comparing:6478d31356be52c166d4d2d1b32313ca">3. Stop comparing</h3> + +<p>&#8220;Comparison is the theif of joy.&#8221; Are you ever happy with your love life, until you see another girl at the other table? Are you content and grateful with your talents, and ever-eager to hone them, until you see the successes of others? Are you happy with your job and your work, until you see a potentially better offer? There is always going to be someone or something better, and should you actually ever obtain that, you&rsquo;d find something else to complain about.</p> + +<h3 id="4-quit-feeling-guilty:6478d31356be52c166d4d2d1b32313ca">4. Quit feeling guilty</h3> + +<p>People make mistakes. People change. And so do you. You live, you learn, you grow. The end. What happened in the past doesn&rsquo;t have to define you, unless you let it. Put on your big boy underwear, man up, and move on.</p> + +<h3 id="5-stop-feeling-obligated:6478d31356be52c166d4d2d1b32313ca">5. Stop feeling obligated</h3> + +<p>It&rsquo;s okay to say, &#8220;No.&#8221; Don&rsquo;t (always) make decisions based on what you think you <em>should</em> do. Make decisions based on what you WANT to do. It&rsquo;s your life, and you&rsquo;re going to have to live with the actions that you make. You have value, and your ruining your brand by undercharging.</p> + +<p>That&rsquo;s my list. What does yours look like?</p> + + + + + Take that, Mr. Barney + http://localhost:1313/brycematheson.io/post/2014-12-20-take-that-mr-barney/ + Sat, 20 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-20-take-that-mr-barney/ + <p>We&rsquo;ve all had those professors/teachers that we just don&rsquo;t seem to mesh with. Recently, I had a professor with whom I could <em>not</em> set aside my differences. The class was about Mobile Application Development. I went into it thinking, &#8220;Wow, I&rsquo;m excited! Finally, I&rsquo;ll be able to create an iOS/Android application!&#8221; On the first day of the class, Mr. Barney walked in and said, &#8220;This is not a programming class. This is not an iOS development class. This is not an Android development class. This class has no tests. This class has no assignments. This class has no texts, no books.&#8221;</p> + +<p>As the class progressed, I got more and more frustrated with the structure and Mr. Barney&rsquo;s teaching style. It seemed that the class was more about learning Mr. Barney than it was about the material. He came off as a close-to-retirement professor with a God-complex, who was tired of his job, and was just coasting on his measly salary for a few more years until he could finally escape.</p> + +<p>The class consisted of a few technologies that we were forced to learn on our own, namely HTML 5, CSS Animations and Transitions, AJAX, DOM Manipulation, JavaScript Basics, etc. Because there were no class materials, we resorted to YouTube tutorials and blog articles to learn. On a bi-monthly basis, we would meet one-on-one in his office and present some sandbox code that we had been playing with that demonstrated one or more of these technologies. Based on his mood that day, he would open a little spreadsheet and rate you anywhere from &#8220;Strongly Disagree&#8221; to &#8220;Strongly Agree,&#8221; which ultimately equated to your class grade.</p> + +<p>At one point, I decided to bring in a simple sandbox weather application, using an AJAX call to link to an API and populate data into the DOM based on the user&rsquo;s location. The application used JQuery. While looking at my code, the second he saw a reference to JQuery, he tore it to <em>pieces.</em> &#8220;JQuery is of the devil.&#8221; or &#8220;JQuery is only for lazy programmers.&#8221; and &#8220;What happens if the JQuery library breaks, what happens to your application?&#8221;</p> + +<p>Okay, so, maybe he didn&rsquo;t say, &#8220;JQuery was of the devil.&#8221;</p> + +<p>Basically, his point all boiled down to this: You can use JQuery, but it&rsquo;s a bloated library and it contains so many additional pieces that you don&rsquo;t need, and ultimately, you can do exactly what you need with plain ol&rsquo; vanilla JavaScript. It&rsquo;s slow, and it would take a long time to download the entire library, when you don&rsquo;t need it.</p> + +<p>For the rest of the class, I hated him for it. 9 times out of 10 as I left his office, I was fuming. And I really do understand his point, and I believe that it has <em>some</em> validity, but mostly, it&rsquo;s just him being old and outdated, and stuck in his ways.</p> + +<p>Even after finishing the class, I hated him for it. Have you tried looking for web tutorials online for advanced AJAX calls that don&rsquo;t use JQuery? It&rsquo;s <em>impossible</em>!</p> + +<p>In case you hadn&rsquo;t noticed (as in, you aren&rsquo;t using this website on a mobile device), the top navigation bar uses JQuery to convert to a small menu icon on smaller screens. I wanted to prove to myself that JQuery really isn&rsquo;t <em>that</em> bloated, and that it is in fact a useful tool, and better than writing vanilla JavaScript.</p> + +<p>After playing with a few things, I finally got the results I was looking for. Check out the results that I got while using <a href="http://tools.pingdom.com/fpt/" target="_blank">Pingdom Page Speed</a>. More specifically, look at the red box. My &#8216;styles.css&rsquo; file (that isn&rsquo;t minified, btw) weighs a whopping 6.2kB. JQuery, which is more than 6x larger, loads more than twice as fast. How did I do it?</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/pingdom-speed-results.jpg" alt="Pingdom PageSpeed Results" /></p> + +<p>If you&rsquo;re familiar with Bootstrap, and the way that you can customize it just to your liking, JQuery is the same. Usually, whenever I use Bootstrap, I don&rsquo;t need all the font icons or navigation bars, or any of that. I only use the responsive pieces. With JQuery, they have similar options on their website to where you can customize it to your liking. I knew that the only piece I&rsquo;d be using on my website is the navigation library. So I stripped everything else out.</p> + +<p>Also, up until this point, I wasn&rsquo;t familiar with CDNs, or the power that they potentially had. Pulling JQuery from their hosted CDN, rather than from my on my own shared web server undoubtedly speeds up the page load. My website is pretty barebones, and that&rsquo;s done on purpose to increase page speed. Loading times have come into consideration for everything I do on this site, but I don&rsquo;t feel that JQuery has in anyway been detrimental to that.</p> + +<p>I feel justified. Take that, Mr. Barney! </rant></p> + + + + + Pseudo-Responsive Images + http://localhost:1313/brycematheson.io/post/2014-12-15-pseudo-responsive-images/ + Mon, 15 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-15-pseudo-responsive-images/ + <p>Honestly, I&rsquo;m a bit embarrassed to say that I didn&rsquo;t know how to do this before. I&rsquo;ll be creating a blog post here fairly soon on my conversion from WordPress to Jekyll for this blog, but in doing so, I&rsquo;ve learned a lot of cool new things.</p> + +<p>Due to the vast number of mobile devices in circulation right now, I make it a habit to try and develop for mobile first, and then expand for the desktop user. Developing for mobile almost instantly implies responsive design. There are dozens of CSS frameworks to do this (Bootstrap, Foundation, Skeleton, etc.) intended to make your job a little bit easier.</p> + +<p>I ran into an issue while coding this site. My content would all scale down properly and fit into the viewport perfectly, except for images, which would overflow the bounds of the viewport. I couldn&rsquo;t for the life of me figure out what I was doing wrong. When copying content over from WordPress, I guess that I had added &#8216;width&rsquo; and &#8216;height&rsquo; attributes, which forced the images to display at those dimensions. After going through all of the images and removing both of those attributes, I simply went to my stylesheet and added the following. Lucky for me, I didn&rsquo;t have too many images to go through:</p> + +<pre><code class="language-css">img { + width: 100%; + box-shadow: 10px 10px 5px #888888; +} +</code></pre> + +<p>Obviously the box-shadow isn&rsquo;t required, but I just like add it for aesthetics.</p> + +<p>That selects all images across my entire website, and tells them to stretch to 100% of the viewport (which, in the case of this site, is 700px). As the page resizes, or is viewed on a different viewport size (such as a phone or tablet), that image is scaled down accordingly.</p> + +<p>One thing to mention, too, is that if you remove just the &#8216;width&rsquo; attribute, but leave the &#8216;height&rsquo; attribute, your images will come out all stretched and skewed as the image is scaled according to the viewport size.</p> + +<p>It&rsquo;s also important to note that this isn&rsquo;t the &#8216;real&rsquo; way to present responsive images on your site, I&rsquo;m just too lazy to do it the <a href="http://css-tricks.com/responsive-images-youre-just-changing-resolutions-use-srcset/" target="_blank">real way</a>. This way works perfectly for me, until it becomes simpler.</p> + + + + + Build a GUI Investment Calculator in Java + http://localhost:1313/brycematheson.io/post/2014-12-08-investment-calculator-java/ + Mon, 08 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-08-investment-calculator-java/ + <p>I’m not a programmer. Some people just have that natural itch to want to go out and code all day long, but that isn’t me. I enjoy scripting and web development, but deep, low-level programming just simply isn’t my thing. So the fact that even <em>I</em> was able to create a simple GUI application should tell you how easy it is. The code below might look daunting at first, but we’ll walk through it piece by piece to hopefully clear things up. I’ll try to make it as easy as possible to understand, but you should have at least a <em>basic</em> understanding of programming to go through this.</p> + +<p>Java makes creating applications really simple. I’ve dabbled with C++, but never stuck with it long enough to get into the Object Oriented pieces of it. Whenever learning a new programming language, it seems the first program you write is “Hello World.” The next program after that is a basic investment calculator, and so we’re going to continue that pattern.</p> + +<p>When we’re finished, we’ll have a program that looks something like this:</p> + +<p><img src="http://localhost:1313/brycematheson.io/img/post_images/guicalculator.png" alt="GUI Investment Calculator" /></p> + +<p>At the end of this post, I’ll show the complete code. If you have the Java JDK (a free download, <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" target="_blank">here</a>), you can easily import this code into a text editor, save it with a .java extension, and then compile it using the command line. Something this would work:</p> + +<pre><code class="language-java">javac SimpleGUIProgram.java +java SimpleGUIProgram +</code></pre> + +<p>Personally, I use Eclipse. It’s a <a href="https://eclipse.org/downloads/packages/eclipse-ide-java-developers/keplersr1" target="_blank">free IDE that you can download</a>, if you’re not interested in using a text editor.</p> + +<p>Let’s get started.</p> + +<p>First, let’s import some libraries. Libraries are basically a repository of reusable code. Rather than having to rewrite code over and over, why don’t we write it once, store it in the Java API, and then import it into our program whenever we need it? Luckily, someone has already done that for us! The specifics of each of these libraries isn’t super important, but just know that these include the graphical components that we’ll need to build our program.</p> + +<pre><code class="language-java">import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +</code></pre> + +<p>Next, we’ll create the text fields and buttons that will be used in our program. Notice in the image above that we have four input fields (Investment Amount, Years, Annual Interest Rate, and Future Value) and two buttons (Compute and Reset). They’re pretty easy to define in Java.</p> + +<p>You might wonder what <span class="smallcode">private</span> means. Whenever you create an object and set it to private, that means that it can only be accessed within that same class. We could change it to <span class="smallcode">public</span> or even <span class="smallcode">protected</span>, but for this example, we’ll leave it how it is. There are some benefits to leaving things private, such as avoiding data corruption and a few other things, but that’s outside the scope of this tutorial.</p> + +<p>Then we need to tell Java what kind of object we’ll be creating. We’ll be using <span class="smallcode">JTextField</span>, which is just an input box, and <span class="smallcode">JButton</span>, which, obviously, is a button. And after that, we just need to name our object. For the sake of being descriptive, I usually like to prefix my object names with <span class="smallcode">jtf</span> or <span class="smallcode">jb</span> or similar, so I know what it is quickly by looking at it.</p> + +<pre><code class="language-java">private JTextField jtfInvestmentAmount; +private JTextField jtfAnnualInterestRate; +private JTextField jtfNumberOfYears; +private JTextField jtfFutureValue; +private JButton jbtCompute; +private JButton jbtReset; +</code></pre> + +<p>Next, we’re going to define the properties for the frame (the program window). The <span class="smallcode">setTitle</span> property allows us to name the frame. You can see in the image above that the title of the window is “Loan Calculator” as we’ve defined here. You can name it whatever you’d like.</p> + +<p>Next, we define the default close operation. This tells the computer what to do whenever the program is closed. We have the option to let the program to continue running, even when the box is closed. In this example, when the user hits the “x” in the corner of the window, we want our program to terminate, so we’ll use <span class="smallcode">setDefaultCloseOperation(Frame.EXIT_ON_CLOSE)</span>.</p> + +<p><span class="smallcode">setSize</span> defines the window width and height in pixels. Pretty self-explanatory.</p> + +<p><span class="smallcode">setLocationRelativeTo(null)</span> allows us to center the window right in the middle of the screen. In my opinion, that’s the easiest and most user friendly. You have the option to set that location in pixels, using x and y coordinates, but generally, I’ve found that the user expects the window to open in the center of the screen.</p> + +<p>Last, we want to set the layout. Java uses things called “Layout Managers”, which basically defines how elements are laid out inside of the program window. There are three layout managers that are most commonly used: Border, Flow, and Grid. You can read up on those other two, as I’m not going to explain them, but in this program, we’re going to be using the grid layout manager. It allows us to define how many rows, and how many columns we want for our program. <span class="smallcode">GridLayout(5,2,5,5)</span> tells our program that we want to use the Grid Layout Manager, with five rows, two columns and then 5 pixels for spacing.</p> + +<pre><code class="language-java">setTitle(&quot;Loan Calculator&quot;); +setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +setSize(500,300); +setLocationRelativeTo(null); +setLayout(new GridLayout(5,2,5,5)); +</code></pre> + +<p>Now that we’ve defined our window, we need to create some text labels next to our input fields. Because it’s just text, we don’t use <span class="smallcode">private</span> or <span class="smallcode">public</span> on these objects. We use the following code to create a new label (JLabel) object. Again, when we name the object, it’s good practice to use a prefix so you can easily tell what type of object it is. I use <span class="smallcode">jl</span> as my prefix. Then, we create the string of text for what the JLabel will output.</p> + +<p>If you notice, I’ve placed a preceding space in front of the text. I find that Java likes to push things right up against the frame, and it’s not very aesthetically pleasing. By adding a space, it allows us to push the text away from the left edge ever-so-slightly. You can add more spacing if you prefer.</p> + +<pre><code class="language-java">JLabel jlInvestmentAmount = new JLabel(&quot; Investment Amount&quot;); +JLabel jlNumberOfYears = new JLabel(&quot; Number of Years&quot;); +JLabel jlAnnualInterestRate = new JLabel(&quot; Annual Interest Rate&quot;); +JLabel jlFutureValue = new JLabel(&quot; Future Value&quot;); +</code></pre> + +<p>Earlier, we defined our textfields and buttons, but we didn’t actually create them. We basically told the program, “Hey, I’m going to be making these soon. Just wanted to give you a heads up.” But now we create them.</p> + +<p>In the last line of code, we write <span class="smallcode">jtfFutureValue.setEditable(false)</span>. I wanted the first three fields to be able to accept input from the user. But the last field (the Future Value field) is going to simply output our final answer. Rather than making the user confused by thinking they need to input something, I set the editing to <span class="smallcode">false</span>.</p> + +<pre><code class="language-java">jtfInvestmentAmount = new JTextField(); +jtfNumberOfYears = new JTextField(); +jtfAnnualInterestRate = new JTextField(); +jtfFutureValue = new JTextField(); +jbtCompute = new JButton(&quot;Compute&quot;); +jbtReset = new JButton(&quot;Reset&quot;); +jtfFutureValue.setEditable(false); +</code></pre> + +<p>Now that we’ve defined and created everything, we should be good right? Not quite. If were to run the program right now, our program wouldn’t do anything. What happened to all the things we created, you might ask? We’ve created all the objects, but we haven’t told the program to add them to our frame (window). We can do this simply by typing <span class="smallcode">add</span> and then the name of the object.</p> + +<pre><code class="language-java">add (jlInvestmentAmount); +add (jtfInvestmentAmount); +add (jlNumberOfYears); +add (jtfNumberOfYears); +add (jlAnnualInterestRate); +add (jtfAnnualInterestRate); +add (jlFutureValue); +add (jtfFutureValue); +add (jbtCompute); +add (jbtReset); +</code></pre> + +<p>Next, we need to tell the computer that we want it to do something once we click on a button. This code doesn’t do much else, besides call other methods (functions) that we’ll define in a bit.</p> + +<pre><code class="language-java">ListenerClass listener = new ListenerClass(); +jbtCompute.addActionListener(listener); +jbtReset.addActionListener(listener); +</code></pre> + +<p>Another very important piece: We need to set the window visibility to <span class="smallcode">true</span>. Otherwise, nothing will appear when we run the program.</p> + +<pre><code class="language-java">setVisible(true); +</code></pre> + +<p>Every program in Java requires a <span class="smallcode">main</span> method. All this code does is calls the class that we’ve already created. It doesn’t look like much, but our program won’t run at all if we don’t have this.</p> + +<pre><code class="language-java">public static void main(String[] args) { +new SimpleGUIProgram(); +</code></pre> + +<p>The following code does two important things: catches exceptions, and does all the math calculations for our program.</p> + +<p>First, we need to assume that people are stupid. You would think that most people would be smart enough to input numbers into the fields of our program, but what happens if they entered a word instead of a number? Without a “try…catch”, the program would just crash, without any warning to our user. Instead, we can make things a little bit more user friendly and say, “Please enter numeric values” if they enter anything except numbers.</p> + +<p>And second, the rest of this code takes the data entered by the user in the fields, does all of the calculations, and then formats it to look pretty. We pull the data from the fields, parse it into a number (either an Integer or a Double), and then convert the annual interest rate into a monthly interest rate. We could do that by dividing by 12, but I also combined the percentage into that calculation as well (1200 instead of 12) so that I don’t have to write another line of code to divide the percent by 100 as well.</p> + +<pre><code class="language-java">private void computeValue() { +try { +double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText()); +double monthlyInterestRate = annualInterestRate / 1200.0; +int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText()); +double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText()); +double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12); +jtfFutureValue.setText(String.format(&quot;%.2f&quot;, futureValue)); +} catch (Exception e) { +JOptionPane.showMessageDialog(null, &quot; Please enter numeric values.&quot;); +} +} +</code></pre> + +<p>This code is very simple. Whenever a user clicks on the “Reset” button, it will call this method, and change whatever is input into the boxes into a blank string.</p> + +<pre><code class="language-java">private void resetForm() { +jtfInvestmentAmount.setText(&quot;&quot;); +jtfAnnualInterestRate.setText(&quot;&quot;); +jtfNumberOfYears.setText(&quot;&quot;); +jtfFutureValue.setText(&quot;&quot;); +} +</code></pre> + +<p>And finally, this code is what links the buttons to the methods we created. We create a ListenerClass, which essentially says, “When I do this, do this.” So, “when I click on a button, call this method.”</p> + +<pre><code class="language-java">private class ListenerClass implements ActionListener { +public void actionPerformed(ActionEvent e) { +if (e.getSource() == jbtCompute) { +computeValue(); +} +if (e.getSource() == jbtReset) { +resetForm(); +} +</code></pre> + +<p>And really, that’s it! Not to shabby for ~100 lines of code, eh? Here’s the entire code:</p> + +<pre><code class="language-java">/************************* +* Created by: Bryce Matheson +* Website: blog.mathesondigital.com +* Date: 12/7/2014 +* +* Purpose: A simple GUI Investment Calculator +* +* Rights: Free to use for Personal Use +*************************/ + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class SimpleGUIProgram extends JFrame { + + private JTextField jtfInvestmentAmount; + private JTextField jtfAnnualInterestRate; + private JTextField jtfNumberOfYears; + private JTextField jtfFutureValue; + private JButton jbtCompute; + private JButton jbtReset; + + public SimpleGUIProgram() { + + setTitle(&quot;Loan Calculator&quot;); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setSize(500,300); + setLocationRelativeTo(null); + setLayout(new GridLayout(5,2,5,5)); + + JLabel jlInvestmentAmount = new JLabel(&quot; Investment Amount&quot;); + JLabel jlNumberOfYears = new JLabel(&quot; Number of Years&quot;); + JLabel jlAnnualInterestRate = new JLabel(&quot; Annual Interest Rate&quot;); + JLabel jlFutureValue = new JLabel(&quot; Future Value&quot;); + + jtfInvestmentAmount = new JTextField(); + jtfNumberOfYears = new JTextField(); + jtfAnnualInterestRate = new JTextField(); + jtfFutureValue = new JTextField(); + jtfFutureValue.setEditable(false); + + jbtCompute = new JButton(&quot;Compute&quot;); + jbtReset = new JButton(&quot;Reset&quot;); + + add (jlInvestmentAmount); + add (jtfInvestmentAmount); + add (jlNumberOfYears); + add (jtfNumberOfYears); + add (jlAnnualInterestRate); + add (jtfAnnualInterestRate); + add (jlFutureValue); + add (jtfFutureValue); + add (jbtCompute); + add (jbtReset); + + ListenerClass listener = new ListenerClass(); + jbtCompute.addActionListener(listener); + jbtReset.addActionListener(listener); + + setVisible(true); + } + + public static void main(String[] args) { + new SimpleGUIProgram(); + } + + private void computeValue() { + try { + double annualInterestRate = Double.parseDouble(jtfAnnualInterestRate.getText()); + double monthlyInterestRate = annualInterestRate / 1200.0; + int NumberOfYears = Integer.parseInt(jtfNumberOfYears.getText()); + double investmentAmount = Double.parseDouble(jtfInvestmentAmount.getText()); + double futureValue = investmentAmount * Math.pow(1.0 + monthlyInterestRate, NumberOfYears * 12); + jtfFutureValue.setText(String.format(&quot;%.2f&quot;, futureValue)); + } catch (Exception e) { + JOptionPane.showMessageDialog(null, &quot; Please enter numeric values.&quot;); + } + } + + private void resetForm() { + jtfInvestmentAmount.setText(&quot;&quot;); + jtfAnnualInterestRate.setText(&quot;&quot;); + jtfNumberOfYears.setText(&quot;&quot;); + jtfFutureValue.setText(&quot;&quot;); + } + + private class ListenerClass implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (e.getSource() == jbtCompute) { + computeValue(); + } + if (e.getSource() == jbtReset) { + resetForm(); + } + } + } +} +</code></pre> + + + + + My love-hate relationship with WordPress + http://localhost:1313/brycematheson.io/post/2014-12-06-my-love-hate-relationship-with-wordpress/ + Sat, 06 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-06-my-love-hate-relationship-with-wordpress/ + + +<p>Recently, I’ve really been getting fed up with WordPress. And here’s why.</p> + +<p>WordPress dates all the way back to 2001. It was originally developed as a simple blogging platform based off of MySQL and PHP. Close to fifteen years later, it’s become a web standard and is used as the Framework/CMS for <a href="http://en.wikipedia.org/wiki/WordPress" target="_blank">more than 20% of all the websites on the internet</a>. And that’s exactly the problem.</p> + +<p>WordPress has exploded into a million different forks and subprojects, and has been expanded to run an equal amount of themes and plugins. My biggest issue with this is that WordPress was never <em>designed</em> to support this. Years down the road, it’s still sitting on code that dates back a decade. The same issue holds true with Microsoft. Even after launching Windows 8.1, it still has pieces of code that were used in the Windows 3.1 and Windows 95 operating systems. It baffles me that 20 years later, we still can’t seem to ditch MS-DOS or the Registry.</p> + +<p>WordPress was never designed to be used as an e-commerce platform, but with the help from the guys over at <a href="http://www.woothemes.com/woocommerce/" target="_blank">Woocommerce</a>, it’s never been easier and quicker to do so. WordPress was never designed to be used as a Social Media platform, but of course, there are plugins to do that as well. WordPress is so simple and easy to use, that it’s become overly bloated with features to cater to the needs of everyone. I fear that it’s soon going to crumble in on itself.</p> + +<h2 id="security-holes:4416bd877d3758ff29e0e8e3c2df4fd1">Security Holes</h2> + +<p>And here’s something else to think about too. Even if only 1/100th of all websites on the internet were using WordPress as their CMS, imagine what would happen if a large exploit were found. Millions of websites are instantly vulnerable in the hands of skilled hackers. Sadly, the number of potential targets is a lot larger than 1%, should an exploit be found. Many users don’t know that they would be perfectly fine completely ditching the database, and just using static HTML to host their blogs, completely eliminating the security flaws.</p> + +<h2 id="updates:4416bd877d3758ff29e0e8e3c2df4fd1">Updates</h2> + +<p>WordPress updates are the absolute worst. Starting somewhere in the time-frame of Wordpress 3, automatic updates were introduced by default (although you can turn these off through the database, I believe). For a lot of the websites I build and manage for clients, I set myself up as an administrator. Whenever an automatic update is pushed, I get an email saying, “Your WordPress installation has been updated to version 4.0.1…” I cringe just thinking about all the hundreds of things that could now be broken on dozens of my websites. Granted, the WordPress team does their absolute best to ensure that nothing breaks, but with hundreds of thousands of different themes and plugins, how can anyone be absolutely certain that they won’t be a compatibility issue somewhere?</p> + +<h2 id="comments:4416bd877d3758ff29e0e8e3c2df4fd1">Comments</h2> + +<p>The comment system in WordPress is so flawed, it’s not even funny. Even when using a plugin to block/prevent spam, there are times when I’ll log into my dashboard and find that I have 300+ pending comments to be approved, 90% of them being complete garbage. What’s even more annoying is that all of these comments, whether legitimate or spam, are being stored in the database, ultimately slowing down the over-all speed of your website.</p> + +<h2 id="speed:4416bd877d3758ff29e0e8e3c2df4fd1">Speed</h2> + +<p>Touching on this already a little earlier, having a backend attached to any website is most always going to ensure a decrease in speed unless it’s closely managed and optimized. Most of the time, the end-user has little to no knowledge on how to do this. Many users would be perfectly fine serving plain ol’ static HTML or using a static site builder such as <a href="http://jekyllrb.com" target="_blank">Jekyll</a> or <a href="http://middlemanapp.com" target="_blank">Middleman</a>. Every query to a database requires more bandwidth, and more server strain.</p> + +<p>I’m a little hesitant to even touch on the topic of themes, because it irritates me so much. The other day I was looking at some of <a href="http://themeforest.net/search?utf8=✓&term=&view=list&sort=sales&date=&category=wordpress&price_min=&price_max=&sales=&rating_min=&platform=" target="_blank">the best-selling WordPress themes on themeforest</a>. These themes, in my opinion, are so poorly coded, and so irritatingly slow. The builders of these themes attempt to cater to everyone and no one, all at the same time. Do they have any training about UI or UX? Do they understand that they need to minimize their CSS and JavaScript? Do they understand that they need to optimize their images to a suitable web size? Clients come to me and say, “Oooh. I like this look.” They truly have no idea what they’re doing. Having something that looks “pretty” just won’t cut it. There’s a lot more to think about behind the scenes, rather than just how a website looks.</p> + +<p>I’ve seen theme packages that, for the entire install, run in the area of 15 megabytes. 15 MEGABYTES!? Are you kidding me? Even with LTE cell phone speeds and fiber-optic internet connections, 15 megabytes is a lot of data. Good luck having users stick around when your site won’t load on their phones. Some people might say, “Well, users will wait for at least a second for my site to load.” Wrong. <a href="http://www.fastcompany.com/1825005/how-one-second-could-cost-amazon-16-billion-sales" target="_blank">Amazon did a study</a> on page load speed, and how it affects their sales conversion rates. They found that a one-second difference in page-loading speed could cost them up to $1.6 Billion in sales.</p> + +<h2 id="the-art-of-web-design:4416bd877d3758ff29e0e8e3c2df4fd1">The Art of Web Design</h2> + +<p>In my mind, building a website truly is a work of art. I’m proud of the hours that I’ve spent in learning, growing, and honing my skills in order to develop something out of thin air that helps a client’s business or hobby or whatever. However, nowadays, it seems that we’re beginning to lose that art in development. Websites such as <a href="http://www.wix.com" target="_blank">wix</a> make it seemingly so simple to throw up a website that anyone can do it. WordPress is no different. Now, because of the simplicity of WordPress, people begin calling themselves “Developers” or “Experts” without even touching a single line of code.</p> + +<h2 id="ease-of-clients:4416bd877d3758ff29e0e8e3c2df4fd1">Ease of Clients</h2> + +<p>Now, here comes the love. I really don’t hate WordPress, although it may seem that way. One of the number one reasons I use WordPress as a CMS for my entire client base is the ability to entirely hand of a project. We’ve all worked with clients that are annoying, nagging, and constantly changing their mind. When the project is done, I can’t wait to get “rid” of them, because it’s a never-ending project. Nothing ever gets finished. WordPress allows me to (finally!) finish a project and give them the ability to change and manipulate virtually anything they may want with knowing little or no code at all, and best of all, without involving me.</p> + +<h2 id="quick-and-inexpensive:4416bd877d3758ff29e0e8e3c2df4fd1">Quick and Inexpensive</h2> + +<p>When you’re constantly beginning new projects, you get in the habit of building your own mini-framework, in hopes to cut off some of the development time or shave off some of the repetitiveness. WordPress is KING of saving time. I can create a new hosting environment, and have a functional WordPress installation in less than five minutes total. Then, I can focus on the needs of the customer and the design, rather than re-inventing the wheel for the 500th time.</p> + +<h2 id="conclusion:4416bd877d3758ff29e0e8e3c2df4fd1">Conclusion</h2> + +<p>Ultimately, I think my hatred really comes down to the bloat of WordPress. It reminds me so frequently of those who attempt to build an entire website using Dreamweaver’s visual mode. Yes, it’s possible to do it without knowing any code at all. But if you know anything about code, you can instantly look at the code that Dreamweaver spits out, and you know how much bloat and garbage can be cut out. WordPress is an incredible piece of software, and that’s apparent in it’s widespread usage. But bloat is my number one concern.</p> + +<p>If you’re familiar with <a href="https://developers.google.com/speed/pagespeed/" target="_blank">Google’s Page Speed</a> analysis, you might be surprised to see that even some of the most popular websites rarely score above 50%. Take a basic WordPress theme, give it a test, and you might be surprised that you only received a score of 27. Developing everything from scratch, you can easily shave off the bloat and improve your page speed, which can equate to improved SEO through Google.</p> + +<p>One last point, and then I’ll shut up. Am I using WordPress to run my blog? Absolutely. Is there a lot of bloat? Maybe a little, but I’ve tried to cut out everything that I could. I’m scoring in the 90’s in most aspects of Google’s Page rankings. I think I fall into the trap that so many other users do, and try too hard to focus on design, colors, and appearance, and not so much on the content. I was recently inspired by <a href="http://davidbcalhoun.com" target="_blank">David Calhoun’s blog</a>, and have since changed the design of my own blog to a more minimal design. David’s blog is great. It’s plain, clean, crisp, but more important, it’s fast. It provides the required functionality, and then the rest is focused on the content. Does David’s readers care that his blog is plain? Not really. He has a consistent reader-base, because of what he provides. Rarely, if ever, would anyone say, “This is a great looking site. I’m going to come back, even if there’s nothing here for me.” No. Does a good design/functionality help? Of course. But it’s not everything.</p> + + + + + Here's to actually sticking with something + http://localhost:1313/brycematheson.io/post/2014-12-05-heres-to-actually-sticking-with-something/ + Fri, 05 Dec 2014 18:50:20 -0700 + + http://localhost:1313/brycematheson.io/post/2014-12-05-heres-to-actually-sticking-with-something/ + <p>When I was 16 (yes, I&rsquo;m young, okay?), I had the idea for a Tech Blog. Not that it had never been done before or anything, but it&rsquo;s just that ever since the age of 9, technology is the only hobby or thing in my life that I&rsquo;ve consistently held interest in. I&rsquo;m not sure why I wanted to start one, but I just figured it would be a good way of tracking my progress and learning of various technologies, as well as helping others in anyway, if possible. I got about three posts in, got discouraged, thought &#8220;this is stupid&#8221;, and told myself that I would never in any way, shape, or form be able to compete with the larger tech blogs like <a href="http://www.cnet.com" target="_blank">CNet</a>, <a href="http://techcrunch.com" target="_blank">TechCrunch</a>, or TUAW (now<a href="http://www.imore.com" target="_blank"> iMore</a>).</p> + +<p>But now, I&rsquo;m kicking myself. In hindsight, I keep thinking to myself, &#8220;Imagine the web presence you could have had, if only you had hung on for all these years.&#8221; Well, recently, I&rsquo;ve had a bit of motivation (or maybe it&rsquo;s procrastination of more important things), and I&rsquo;ve decided to actually stick to this blog. It&rsquo;s been going for about six months now, and I plan on continuing the trend.</p> + +<p>I have <a href="http://www.laytreasuresinheaven.com" target="_blank">another blog</a> dealing with the religious aspect of my life, and it&rsquo;s actually proven to be successful (at least in my book), getting around 30,000 hits a month. It&rsquo;s not incredible, and I haven&rsquo;t been very great at posting lately, but it&rsquo;s really rewarding to see what I&rsquo;ve been able to achieve by keeping it running for around a year and a half.</p> + +<p>So, here&rsquo;s to actually sticking with something, for once in my life.</p> + + + + + \ No newline at end of file diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..8c92251 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,140 @@ + + + + + http://localhost:1313/brycematheson.io/ + 2015-11-15T18:50:20-07:00 + 0 + + + + http://localhost:1313/brycematheson.io/post/2015-11-09-mathesondigital-wordpress-theme/ + 2015-11-15T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-09-15-moral-sensitivity/ + 2015-09-15T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-07-31-windows-10-first-impressions/ + 2015-07-31T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-07-25-hindsight/ + 2015-07-15T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-06-03-powershell-extend-script/ + 2015-06-03T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-02-20-command-line-essentials/ + 2015-02-20T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-02-14-i-love-to-grunt-and-gulp/ + 2015-02-14T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-01-24-remove-ds_store-from-zip-file/ + 2015-01-24T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-01-19-static-site-contact-form/ + 2015-01-19T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2015-01-02-5-things-to-stop-doing-in-2015/ + 2015-01-02T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-12-20-take-that-mr-barney/ + 2014-12-20T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-12-15-pseudo-responsive-images/ + 2014-12-15T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-12-08-investment-calculator-java/ + 2014-12-08T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-12-06-my-love-hate-relationship-with-wordpress/ + 2014-12-06T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-12-05-heres-to-actually-sticking-with-something/ + 2014-12-05T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-11-29-i-have-an-iphone-and-mac-get-an-ipad/ + 2014-11-29T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-10-06-tmobile-im-breaking-up-with-you/ + 2014-10-06T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-10-03-visual-form-builder-paypal-redirect/ + 2014-10-03T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-09-09-the-most-important-camera-accessory/ + 2014-09-09T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-08-03-my-experience-with-a-mac/ + 2014-08-03T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-07-29-my-experience-with-joomla/ + 2014-07-29T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-07-26-how-to-record-your-screen-on-a-mac/ + 2014-07-26T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-07-18-change-crop-orientation-adobe-lightroom/ + 2014-07-18T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-07-16-understanding-raid/ + 2014-07-16T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-07-02-removing-category-from-your-wordpress-url/ + 2014-07-02T18:50:20-07:00 + + + + http://localhost:1313/brycematheson.io/post/2014-07-01-i-dont-use-anti-virus-software-am-i-crazy/ + 2014-07-01T18:50:20-07:00 + + + \ No newline at end of file diff --git a/static/css/bootstrap.min.css b/static/css/bootstrap.min.css deleted file mode 100644 index 1dc96f4..0000000 --- a/static/css/bootstrap.min.css +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Bootstrap v3.3.2 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=e16c91898db07ac9c492) - * Config saved to config.json and https://gist.github.com/e16c91898db07ac9c492 - *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Source Sans Pro","Hiragino Kaku Gothic ProN",Meiryo,sans-serif;font-size:17px;line-height:1.58823529;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.58823529;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:26px;margin-bottom:26px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:300;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:26px;margin-bottom:13px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:13px;margin-bottom:13px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:44px}h2,.h2{font-size:36px}h3,.h3{font-size:29px}h4,.h4{font-size:22px}h5,.h5{font-size:17px}h6,.h6{font-size:15px}p{margin:0 0 13px}.lead{margin-bottom:26px;font-size:19px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:25.5px}}small,.small{font-size:88%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:12px;margin:52px 0 26px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:13px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:26px}dt,dd{line-height:1.58823529}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:13px 26px;margin:0 0 26px;font-size:21.25px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.58823529;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:26px;font-style:normal;line-height:1.58823529}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:12.5px;margin:0 0 13px;font-size:16px;line-height:1.58823529;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:26px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.58823529;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:19.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:26px;font-size:25.5px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:17px;line-height:1.58823529;color:#555}.form-control{display:block;width:100%;height:40px;padding:6px 12px;font-size:17px;line-height:1.58823529;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{line-height:40px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:34px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:52px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:26px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:34px;padding:5px 10px;font-size:15px;line-height:1.5;border-radius:3px}select.input-sm{height:34px;line-height:34px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:34px;padding:5px 10px;font-size:15px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:34px;line-height:34px}textarea.form-group-sm .form-control,select[multiple].form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:34px;padding:5px 10px;font-size:15px;line-height:1.5}.input-lg{height:52px;padding:10px 16px;font-size:22px;line-height:1.3333333;border-radius:6px}select.input-lg{height:52px;line-height:52px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:52px;padding:10px 16px;font-size:22px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:52px;line-height:52px}textarea.form-group-lg .form-control,select[multiple].form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:52px;padding:10px 16px;font-size:22px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:50px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:40px;height:40px;line-height:40px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:52px;height:52px;line-height:52px}.input-sm+.form-control-feedback{width:34px;height:34px;line-height:34px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:31px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:33px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.333333px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:17px;line-height:1.58823529;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:22px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:15px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:15px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:52px;padding:10px 16px;font-size:22px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:52px;line-height:52px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:34px;padding:5px 10px;font-size:15px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:34px;line-height:34px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:17px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:15px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:22px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:12px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.58823529;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:26px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:12px 15px;font-size:22px;line-height:26px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:6px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:26px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:26px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:12px;padding-bottom:12px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:5px;margin-bottom:5px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:5px;margin-bottom:5px}.navbar-btn.btn-sm{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:12px;margin-bottom:12px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:26px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:26px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.58823529;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:22px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:15px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:26px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:15px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:26px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:76.5px}}.thumbnail{display:block;padding:4px;margin-bottom:26px;line-height:1.58823529;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:26px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:26px;margin-bottom:26px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:15px;line-height:26px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:26px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:20px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:26px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:25.5px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/static/css/github.css b/static/css/github.css deleted file mode 100644 index af6eedb..0000000 --- a/static/css/github.css +++ /dev/null @@ -1,115 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov - -*/ - -.hljs-comment, -.diff .hljs-header, -.hljs-javadoc { - color: #998; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #333; - font-weight: bold; -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #008080; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.hljs-dartdoc, -.tex .hljs-formula { - color: #d14; -} - -.hljs-title, -.hljs-id, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold; -} - -.hljs-list .hljs-keyword, -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body { - color: #008080; -} - -.hljs-regexp { - color: #009926; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.clojure .hljs-keyword, -.scheme .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073; -} - -.hljs-built_in { - color: #0086b3; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.diff .hljs-change { - background: #0086b3; -} - -.hljs-chunk { - color: #aaa; -} diff --git a/static/css/main.css b/static/css/main.css deleted file mode 100644 index b5fdc48..0000000 --- a/static/css/main.css +++ /dev/null @@ -1,289 +0,0 @@ -main { - max-width: 750px; - word-wrap: break-word; -} - -/* Header */ - -.global-header { - background: #222 no-repeat center center; - background-size: cover; -} - -.header-text { - position: relative; - padding-bottom: 1px; - height: 100%; - background-color: rgba(0, 0, 0, 0.4); - color: rgba(255, 255, 255, 0.9); -} - -.header-text .tag-line { - margin: 10px auto; - padding: 0 10px; - max-width: 430px; - color: rgba(255, 255, 255, 0.7); - text-align: center; - font-weight: 300; -} - -.header-text .sns-links { - margin: 20px auto; - text-align: center; -} - -.header-text .sns-links a { - display: inline-block; - margin: 0 2px; - width: 30px; - height: 30px; - border: 1px solid rgba(255, 255, 255, 0.6); - border-radius: 15px; - color: rgba(255, 255, 255, 0.6); - text-decoration: none; - font-size: 20px; - line-height: 30px; - transition: color,border-color 0.1s linear; -} - -.header-text .sns-links a:hover { - border-color: rgba(255, 255, 255, 1.0); - color: rgba(255, 255, 255, 1.0); -} - -.header-text h1 { - margin: 0 auto; - padding-top: 30px; - text-align: center; - font-weight: 200; -} - -.header-text h1 a { - color: rgba(255, 255, 255, 1.0); - text-decoration: none; -} - -a.btn-header { - position: absolute; - top: 20px; - padding: 7px 16px; - border: 1px solid rgba(255, 255, 255, 1.0); - border-radius: 3px; - background-color: rgba(0, 0, 0, 0.1); - color: rgba(255, 255, 255, 1.0); - text-decoration: none; - font-weight: 300; - font-size: 13px; - transition: color,background-color 0.1s linear; -} - -a.btn-header:hover { - background-color: rgba(255, 255, 255, 1.0); - color: rgba(0, 0, 0, 1.0); -} - -a.btn-subscribe { - right: 20px; -} - -a.btn-back { - left: 20px; -} - -/* Footer */ - -.global-footer { - margin-top: 10px; - padding-top: 10px; - max-width: 750px; - height: 100px; - border-top: 1px solid rgba(0, 0, 0, 0.2); - color: rgba(0, 0, 0, 0.4); -} - -.global-footer .sns-links { - float: right; -} - -.global-footer .sns-links a { - display: inline-block; - width: 24px; - height: 24px; - border: 1px solid rgba(0, 0, 0, 0.4); - border-radius: 12px; - color: rgba(0, 0, 0, 0.4); - vertical-align: top; - text-align: center; - text-decoration: none; - font-size: 13px; - transition: color,border-color 0.1s linear; -} - -.global-footer .sns-links a i { - vertical-align: middle; -} - -.global-footer .sns-links a:hover { - border: 1px solid rgba(0, 0, 0, 0.8); - color: rgba(0, 0, 0, 0.7); -} - -/* Article */ - -.article-list h2 a { - text-decoration: none; - transition: color 0.1s linear; -} - -.post-meta { - margin: 5px 0; -} - -.post-date { - color: rgba(0, 0, 0, 0.4); -} - -.post-tag a { - padding: 0 10px; - border: 1px solid rgba(0, 0, 0, 0.3); - border-radius: 12px; - color: rgba(0, 0, 0, 0.3); - text-decoration: none; - transition: color,border-color,background-color 0.1s linear; -} - -.post-tag a:hover { - background-color: rgba(0, 0, 0, 1.0); - color: rgba(255, 255, 255, 1.0); -} - -.not-found h1 { - color: rgba(0, 0, 0, 0.2); - font-weight: 200; - font-size: 80px; -} - -.not-found { - text-align: center; -} - -.author-info { - padding: 25px 0; - border-top: 1px solid rgba(0, 0, 0, 0.2); - border-bottom: 1px solid rgba(0, 0, 0, 0.2); -} - -.author-name { - margin: 0 0 5px 0; - font-size: 30px; -} - -.author-bio { - color: rgba(0, 0, 0, 0.5); -} - -.author-avatar img { - max-width: 100px; - max-height: 100px; - width: 100px; - height: 100px; - border-radius: 50px; -} - -.author-contact { - position: relative; - display: inline-block; - padding-top: 10px; - height: 100px; - text-align: center; -} - -.author-contact a { - display: inline-block; - padding: 7px 16px; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 3px; - color: rgba(0, 0, 0, 0.7); - text-decoration: none; - font-weight: 300; - font-size: 13px; - transition: background-color,border-color,color 0.1s linear; -} - -.author-contact a:hover { - border: 1px solid rgba(51, 122, 182, 1.0); - background-color: rgba(51, 122, 183, 1.0); - color: rgba(255, 255, 255, 1.0); -} - -/* Pagination */ - -.pagination -{ - width: 720px; - text-align: center; -} - -.older-posts,.newer-posts -{ - display: inline!important; - border: 1px solid #ddd; - border-radius: 15px; - text-decoration: none; - transition: border .3s ease; - padding: 5px 14px; -} - -.page-number -{ - display: inline-block; - min-width: 100px; - padding: 2px 0; -} - -.newer-posts -{ - float: left; -} - -.older-posts -{ - float: right; -} - -.older-posts:hover,.newer-posts:hover -{ - color: #889093; - border-color: #98a0a4; -} - -/* Override some of Bootstrap's styles */ - -pre { - font-size: 14px; -} - -pre code { - overflow: auto; - white-space: pre; - word-wrap: normal; -} - -.pager li>a { - transition: background-color 0.1s linear; -} - -blockquote { - font-style:italic; -} - -h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { - font-family: "Source Sans Pro", "Kozuka Gothic Pr6N", Meiryo, sans-serif !important; -} - -article section img { - max-width: 100%; - height: auto; - margin: 13px auto; -} - diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..1b293aa --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,808 @@ +a.moretag, +h2 a { + text-decoration: none +} +.clear, +.clearfix { + clear: both +} +.author-bio, +footer { + box-sizing: border-box +} +.overlay ul, +ol, +ul { + list-style: none +} +#mainmenu, +#mainmenu li, +#site-title, +.lower label, +.overlay ul li a, +strong { + text-transform: uppercase +} +#copyright, +#nav-below, +#nav-below a, +.footer-column, +.lower label, +.overlay nav, +.post-heading h1, +td { + text-align: center +} +a, +abbr, +acronym, +address, +applet, +article, +aside, +audio, +b, +big, +blockquote, +body, +canvas, +caption, +center, +cite, +code, +dd, +del, +details, +dfn, +div, +dl, +dt, +em, +embed, +fieldset, +figcaption, +figure, +footer, +form, +h1, +h2, +h3, +h4, +h5, +h6, +header, +hgroup, +html, +i, +iframe, +img, +ins, +kbd, +label, +legend, +li, +mark, +menu, +nav, +object, +ol, +output, +p, +q, +ruby, +s, +samp, +section, +small, +span, +strike, +strong, +sub, +summary, +sup, +table, +tbody, +td, +tfoot, +th, +thead, +time, +tr, +tt, +u, +ul, +var, +video { + font: inherit; + padding: 0; + border: 0; + margin: 0; + vertical-align: baseline +} +body, +button, +input, +select, +textarea { + font-family: Lato, Avenir, HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + color: #3A3B3C; + font-weight: 400; + font-size: 1.125rem; + line-height: 1.5; + margin: 0; + padding: 0 +} +blockquote, +q { + quotes: none +} +blockquote:after, +blockquote:before, +q:after, +q:before { + content: ''; + content: none +} +aside, +details, +figcaption, +figure, +header, +hgroup, +menu, +nav, +section { + display: block +} +pre { + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word +} +.alignright { + float: right +} +.alignleft { + float: left +} +h1, +h2, +h3 { + letter-spacing: -.01em; + word-spacing: .02em +} +h1, +h1 a, +h2, +h2 a, +h3, +h3 a { + font-weight: 400 +} +b, +strong { + font-weight: 600 +} +h1 { + font-size: 2.2em +} +h2 { + font-size: 1.7em +} +h2 a { + color: inherit +} +h3, +legend { + font-size: 1.37em +} +h5 { + font-size: 1.03em +} +h6 { + font-size: .95em +} +mark { + background: #FDFFB6 +} +abbr[title] { + border-bottom: 1px dotted #D1D1D1 +} +em { + font-style: italic; +} + +blockquote { + background: #f9f9f9; + border-left: 10px solid #ccc; + margin: 1.5em 10px; + padding: 0.5em 10px; + quotes: "\201C""\201D""\2018""\2019"; +} +blockquote:before { + color: #ccc; + content: open-quote; + font-size: 4em; + line-height: 0.1em; + margin-right: 0.25em; + vertical-align: -0.4em; +} +blockquote p { + display: inline; +} + +hr { + border: 0; + border-bottom: 1px solid #D1D1D1; + margin-top: 3.125rem; + margin-bottom: 3.125rem +} +.post-title { + margin-top: 80px +} +.post-date { + color: #7A7B7C; + font-size: .778em +} +a.moretag { + font-weight: 400 +} +a.moretag, +a.moretag:visited { + color: #009DDC; + border-bottom: 1px solid transparent +} +a.moretag:hover { + text-decoration: underline +} +.smallcode { + font-family: monospace; + padding: .25em .5em; + font-size: inherit; + border-radius: 3px; + background-color: #e5e5e5; + white-space: nowrap; + color: #c7254e +} +#branding, +#mainmenu li, +#site-title a { + font-family: Lato, Avenir, HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif +} +article p { + margin: 1.5rem 0; + color: inherit +} +#content { + width: 700px; + margin: 0 auto 60px +} +footer { + width: 100%; + padding: 20px +} +#footer-container { + width: 1000px; + margin: 0 auto +} +.footer-column { + width: 30%; + float: left; + color: #7A7B7C; + padding: 0 1%; + font-size: .85em +} +#nav-below, +.header { + width: 100%; + position: relative +} +footer .menu-item a { + color: #7A7B7C; + text-decoration: none; + font-weight: 400 +} +#mainmenu li, +#nav-below a { + display: inline-block; + font-weight: 600; + cursor: pointer +} +footer .menu-item a:hover { + color: #fff; + text-decoration: underline +} +#mainmenu a, +#nav-below a, +#site-title a, +.overlay ul li a { + text-decoration: none +} +#branding { + margin-left: 0; + height: 80px; + padding-left: calc(55% - 62.5rem * .5); + padding-right: calc(55% - 62.5rem * .5) +} +#site-title { + margin-top: 25px; + float: left +} +#site-title a { + font-size: 1.2em; + color: #fff +} +#mainmenu { + margin-top: 35px; + float: right +} +#mainmenu a { + color: #fff +} +#mainmenu a:hover { + border-bottom: 1px solid #fff +} +#mainmenu li { + float: left; + margin-right: 5px; + vertical-align: top; + font-size: .667em; + margin-left: 24px +} +.header { + height: 500px; + margin-bottom: 60px +} +.divider { + margin-bottom: -30px; + border: 0; + height: 1px; + background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(0, 0, 0, .1), rgba(0, 0, 0, 0)) +} +#nav-below { + font-size: .875em; + margin: 90px 0 75px +} +#nav-below a { + width: 80%; + color: #fff; + border: 1px solid #5bb141; + text-shadow: 0 1px 1px #5bb141; + background: #6cbf52; + border-radius: 2px; + padding: 12px 18px; + margin-bottom: 30px +} +#nav-below a, +#nav-below span { + vertical-align: middle; + font-size: .889em +} +#nav-below a:hover { + background: #5bb141 +} +.pagination { + margin: 0 auto; + position: absolute; + bottom: 40px; + left: 45% +} +.older { + float: left +} +.newer { + float: right +} +.post-heading { + height: 350px; + width: 50%; + margin-top: -1%; + margin-left: 25%; + display: table; + z-index: 1 +} +.post-heading h1 { + font-size: 2.2em; + font-weight: 400; + color: #fff; + display: table-cell; + vertical-align: middle +} +.lower, +input { + display: none +} +.author-bio { + margin: 40px 0; + width: 100%; + border: 1px solid #D1D1D1; + border-radius: 2px; + padding: 1.5em +} +.bio-image { + border-radius: 50%; + height: 70px; + width: 70px; + margin-right: 1.2em; + margin-top: .4em; + vertical-align: middle; + float: left +} +.bio-text { + font-size: .778em; + color: #3A3B3C; + overflow: hidden +} +figure strong { + font-size: .85em +} +#mainmenu .current-menu-item a { + border-bottom: 1px #fff solid +} +img { + width: 100%; + height: auto +} + +article img { + box-shadow: 0 0 15px rgba(0,0,0,0.35); +} + +.lower { + float: right; + margin-top: 28px; + border: 1px solid #fff; + padding: 0 .85em; + border-radius: 30px; + color: #fff; + font-weight: 600; + line-height: 25px; +} +.lower:hover { + background: #fff; + color: #008BC3 +} +.lower label { + font-family: inherit; + font-size: .7em +} +.lower label:hover { + cursor: pointer +} +.overlay { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: rgba(0, 0, 0, .9) +} +.overlay label { + width: 58px; + height: 58px; + position: absolute; + right: 20px; + top: 20px; + background: url(../img/cross.png); + z-index: 100; + cursor: pointer +} +.overlay nav { + position: relative; + top: 50%; + height: 60%; + font-size: 54px; + -webkit-transform: translateY(-50%); + transform: translateY(-50%) +} +.overlay ul { + padding: 0; + margin: 0 auto; + display: inline-block; + height: 100%; + position: relative +} +td, +th { + padding: 3px +} +.overlay ul li { + display: block; + height: 20%; + height: calc(100% / 5); + min-height: 54px +} +.overlay ul li a { + font-weight: 300; + display: block; + color: #fff; + -webkit-transition: color .05s; + transition: color .05s; + font-family: inherit; + margin-top: 20px +} +.hljs-strong, +.hljs-strongemphasis, +th { + font-weight: 700 +} +.overlay ul li a:focus, +.overlay ul li a:hover { + color: #849368 +} +.lower~.overlay-hugeinc { + opacity: 0; + visibility: hidden; + -webkit-transition: opacity .05s, visibility 0s .05s; + transition: opacity .05s, visibility 0s .05s +} +#op:checked~.overlay-hugeinc { + opacity: 1; + visibility: visible; + -webkit-transition: opacity .05s; + transition: opacity .05s +} +.overlay-hugeinc nav { + -moz-perspective: 300px +} +.overlay-hugeinc nav ul { + opacity: .4; + -webkit-transform: translateY(-25%) rotateX(35deg); + transform: translateY(-25%) rotateX(35deg); + -webkit-transition: -webkit-transform .25s, opacity .25s; + transition: transform .25s, opacity .25s +} +#op:checked~.overlay-hugeinc nav ul { + opacity: 1; + -webkit-transform: rotateX(0); + transform: rotateX(0); + display: block +} +#op:not(:checked)~.overlay-hugeinc nav ul { + -webkit-transform: translateY(25%) rotateX(-35deg); + transform: translateY(25%) rotateX(-35deg); + display: block +} +.share-icons-body svg:hover, +.share-icons-header svg:hover { + transform: scale(1.25) +} +.share-icons-header svg { + width: 30px; + height: 30px; + fill: #fff +} +.share-icons-footer svg { + width: 30px; + height: 30px; + fill: #7A7B7C; + margin-right: 5px +} +.share-icons-footer svg:hover { + transform: scale(1.25); + fill: #fff +} +.share-icons-body svg { + width: 30px; + height: 30px; + fill: #009DDC; + float: left; + margin-right: 5px +} +#copyright { + width: 100%; + color: #7A7B7C; + font-family: inherit; + font-size: .65em; + margin-top: 40px; + padding-bottom: 40px +} +table { + color: #333; + font-family: Helvetica, Arial, sans-serif; + width: 100%; + border-collapse: collapse; + border-spacing: 0 +} +td, +th { + border: 1px solid transparent; + height: 30px; + transition: all .3s +} +th { + background: #DFDFDF +} +td { + background: #FAFAFA +} +tr:nth-child(even) td { + background: #F1F1F1 +} +tr:nth-child(odd) td { + background: #FEFEFE +} +tr td:hover { + background: #069; + color: #FFF +} +.hljs { + display: block; + padding: .5em; + background: #23241f +} +.css .hljs-function .hljs-preprocessor, +.css .hljs-rules, +.css .hljs-value, +.hljs, +.hljs-pragma, +.hljs-tag { + color: #f8f8f2 +} +.hljs-emphasis, +.hljs-strong, +.hljs-strongemphasis { + color: #a8a8a2 +} +.alias .hljs-keyword, +.hljs-blockquote, +.hljs-bullet, +.hljs-hexcolor, +.hljs-horizontal_rule, +.hljs-literal, +.hljs-number, +.hljs-regexp { + color: #ae81ff +} +.css .hljs-class, +.hljs-class .hljs-title:last-child, +.hljs-code, +.hljs-tag .hljs-value, +.hljs-title { + color: #a6e22e +} +.hljs-link_url { + font-size: 80% +} +.hljs-class .hljs-title:last-child, +.hljs-emphasis, +.hljs-strongemphasis { + font-style: italic +} +.alias .hljs-keyword:first-child, +.clojure .hljs-built_in, +.css .hljs-important, +.css .hljs-tag, +.css .unit, +.hljs-attribute, +.hljs-change, +.hljs-flow, +.hljs-function, +.hljs-header, +.hljs-keyword, +.hljs-symbol, +.hljs-symbol .hljs-string, +.hljs-tag .hljs-title, +.hljs-value, +.hljs-winutils, +.lisp .hljs-title, +.nginx .hljs-title, +.tex .hljs-special { + color: #F92672 +} +.css .hljs-attribute, +.hljs-class .hljs-keyword:first-child, +.hljs-constant, +.hljs-function .hljs-keyword { + color: #66d9ef +} +.hljs-class .hljs-title, +.hljs-params, +.hljs-variable { + color: #f8f8f2 +} +.apache .hljs-cbracket, +.apache .hljs-tag, +.css .hljs-id, +.django .hljs-filter .hljs-argument, +.django .hljs-template_tag, +.django .hljs-variable, +.haskell .hljs-type, +.hljs-addition, +.hljs-attr_selector, +.hljs-built_in, +.hljs-envvar, +.hljs-link_label, +.hljs-link_url, +.hljs-prompt, +.hljs-pseudo, +.hljs-stream, +.hljs-string, +.hljs-subst, +.ruby .hljs-class .hljs-parent, +.smalltalk .hljs-array, +.smalltalk .hljs-class, +.smalltalk .hljs-localvars, +.sql .hljs-aggregate, +.tex .hljs-command { + color: #e6db74 +} +.apache .hljs-sqbracket, +.hljs-comment, +.hljs-deletion, +.hljs-doctype, +.hljs-javadoc, +.hljs-pi, +.hljs-shebang, +.hljs-template_comment, +.java .hljs-annotation, +.python .hljs-decorator, +.tex .hljs-formula { + color: #75715e +} +.coffeescript .javascript, +.javascript .xml, +.php .xml, +.tex .hljs-formula, +.xml .css, +.xml .hljs-cdata, +.xml .javascript, +.xml .php, +.xml .vbscript { + opacity: .5 +} +@media (max-width: 1000px) { + #footer-container { + width: 95%; + text-align: center + } +} +@media (max-width: 700px) { + .post-heading h1, + h2 { + font-size: 1.2em + } + #branding, + #content { + padding: 0 5%; + box-sizing: border-box + } + #content { + width: 100% + } + .header { + height: 300px + } + .lower { + display: block + } + #mainmenu, + .pagination { + display: none + } + .post-heading { + height: 180px; + width: 50%; + margin-top: -1%; + margin-left: 25%; + display: table + } + #branding, + .footer-column { + width: 100% + } + .share-icons-header svg { + margin-right: 5px + } + .share-icons-body svg { + margin-right: 10px + } + #nav-below { + margin-bottom: 30px + } + article p { + font-size: .85em + } +} \ No newline at end of file diff --git a/static/images/apple-touch-icon.png b/static/images/apple-touch-icon.png deleted file mode 100644 index d711caa..0000000 Binary files a/static/images/apple-touch-icon.png and /dev/null differ diff --git a/static/images/bg.jpg b/static/images/bg.jpg deleted file mode 100644 index 818da92..0000000 Binary files a/static/images/bg.jpg and /dev/null differ diff --git a/static/images/favicon.ico b/static/images/favicon.ico deleted file mode 100644 index 911eee3..0000000 Binary files a/static/images/favicon.ico and /dev/null differ diff --git a/static/img/apple-touch-icon.jpg b/static/img/apple-touch-icon.jpg new file mode 100644 index 0000000..c104393 Binary files /dev/null and b/static/img/apple-touch-icon.jpg differ diff --git a/static/img/avatar.jpg b/static/img/avatar.jpg new file mode 100644 index 0000000..bbf6780 Binary files /dev/null and b/static/img/avatar.jpg differ diff --git a/static/img/cross.png b/static/img/cross.png new file mode 100755 index 0000000..aa9f646 Binary files /dev/null and b/static/img/cross.png differ diff --git a/static/img/favicon.ico b/static/img/favicon.ico new file mode 100644 index 0000000..fd6eb11 Binary files /dev/null and b/static/img/favicon.ico differ diff --git a/static/img/plane.jpg b/static/img/plane.jpg new file mode 100644 index 0000000..8db139c Binary files /dev/null and b/static/img/plane.jpg differ diff --git a/static/img/post_images/antivirus_1.png b/static/img/post_images/antivirus_1.png new file mode 100644 index 0000000..fa5b83c Binary files /dev/null and b/static/img/post_images/antivirus_1.png differ diff --git a/static/img/post_images/antivirus_2.jpg b/static/img/post_images/antivirus_2.jpg new file mode 100644 index 0000000..2020088 Binary files /dev/null and b/static/img/post_images/antivirus_2.jpg differ diff --git a/static/img/post_images/antivirus_3.jpg b/static/img/post_images/antivirus_3.jpg new file mode 100644 index 0000000..aff9777 Binary files /dev/null and b/static/img/post_images/antivirus_3.jpg differ diff --git a/static/img/post_images/antivirus_4.jpg b/static/img/post_images/antivirus_4.jpg new file mode 100644 index 0000000..2838cdc Binary files /dev/null and b/static/img/post_images/antivirus_4.jpg differ diff --git a/static/img/post_images/exif1.png b/static/img/post_images/exif1.png new file mode 100644 index 0000000..b8e026a Binary files /dev/null and b/static/img/post_images/exif1.png differ diff --git a/static/img/post_images/exif2.png b/static/img/post_images/exif2.png new file mode 100644 index 0000000..745a6cf Binary files /dev/null and b/static/img/post_images/exif2.png differ diff --git a/static/img/post_images/exif3.png b/static/img/post_images/exif3.png new file mode 100644 index 0000000..25f637a Binary files /dev/null and b/static/img/post_images/exif3.png differ diff --git a/static/img/post_images/exif4.png b/static/img/post_images/exif4.png new file mode 100644 index 0000000..631afd9 Binary files /dev/null and b/static/img/post_images/exif4.png differ diff --git a/static/img/post_images/exif5.png b/static/img/post_images/exif5.png new file mode 100644 index 0000000..1a94646 Binary files /dev/null and b/static/img/post_images/exif5.png differ diff --git a/static/img/post_images/exif6.png b/static/img/post_images/exif6.png new file mode 100644 index 0000000..f92158e Binary files /dev/null and b/static/img/post_images/exif6.png differ diff --git a/static/img/post_images/exif7.png b/static/img/post_images/exif7.png new file mode 100644 index 0000000..db2bb7a Binary files /dev/null and b/static/img/post_images/exif7.png differ diff --git a/static/img/post_images/guicalculator.png b/static/img/post_images/guicalculator.png new file mode 100644 index 0000000..d46a9f7 Binary files /dev/null and b/static/img/post_images/guicalculator.png differ diff --git a/static/img/post_images/joomla.png b/static/img/post_images/joomla.png new file mode 100644 index 0000000..8a17ac7 Binary files /dev/null and b/static/img/post_images/joomla.png differ diff --git a/static/img/post_images/mathesondigital-wordpress.png b/static/img/post_images/mathesondigital-wordpress.png new file mode 100644 index 0000000..0667a37 Binary files /dev/null and b/static/img/post_images/mathesondigital-wordpress.png differ diff --git a/static/img/post_images/permalinks_wordpress.png b/static/img/post_images/permalinks_wordpress.png new file mode 100644 index 0000000..0e5be65 Binary files /dev/null and b/static/img/post_images/permalinks_wordpress.png differ diff --git a/static/img/post_images/pingdom-speed-results.jpg b/static/img/post_images/pingdom-speed-results.jpg new file mode 100644 index 0000000..1f5b07c Binary files /dev/null and b/static/img/post_images/pingdom-speed-results.jpg differ diff --git a/static/img/post_images/raid1.png b/static/img/post_images/raid1.png new file mode 100644 index 0000000..55e1022 Binary files /dev/null and b/static/img/post_images/raid1.png differ diff --git a/static/img/post_images/raid2.png b/static/img/post_images/raid2.png new file mode 100644 index 0000000..777db9f Binary files /dev/null and b/static/img/post_images/raid2.png differ diff --git a/static/img/post_images/raid3.png b/static/img/post_images/raid3.png new file mode 100644 index 0000000..3499a11 Binary files /dev/null and b/static/img/post_images/raid3.png differ diff --git a/static/img/post_images/raid4.png b/static/img/post_images/raid4.png new file mode 100644 index 0000000..773806c Binary files /dev/null and b/static/img/post_images/raid4.png differ diff --git a/static/img/post_images/record1.png b/static/img/post_images/record1.png new file mode 100644 index 0000000..b4ab3c6 Binary files /dev/null and b/static/img/post_images/record1.png differ diff --git a/static/img/post_images/record2.png b/static/img/post_images/record2.png new file mode 100644 index 0000000..e3f0cc2 Binary files /dev/null and b/static/img/post_images/record2.png differ diff --git a/static/img/post_images/record3.png b/static/img/post_images/record3.png new file mode 100644 index 0000000..68fde2c Binary files /dev/null and b/static/img/post_images/record3.png differ diff --git a/static/img/post_images/sparks_fly.jpg b/static/img/post_images/sparks_fly.jpg new file mode 100644 index 0000000..c728f9f Binary files /dev/null and b/static/img/post_images/sparks_fly.jpg differ diff --git a/static/img/post_images/tmobile.jpg b/static/img/post_images/tmobile.jpg new file mode 100644 index 0000000..83035b4 Binary files /dev/null and b/static/img/post_images/tmobile.jpg differ diff --git a/static/img/post_images/visualformbuilder1.png b/static/img/post_images/visualformbuilder1.png new file mode 100644 index 0000000..893016c Binary files /dev/null and b/static/img/post_images/visualformbuilder1.png differ diff --git a/static/img/post_images/visualformbuilder2.png b/static/img/post_images/visualformbuilder2.png new file mode 100644 index 0000000..f8e1d13 Binary files /dev/null and b/static/img/post_images/visualformbuilder2.png differ diff --git a/static/img/post_images/windows-10-first-impressions-1.png b/static/img/post_images/windows-10-first-impressions-1.png new file mode 100644 index 0000000..4e96477 Binary files /dev/null and b/static/img/post_images/windows-10-first-impressions-1.png differ diff --git a/static/img/post_images/windows-10-first-impressions-2.png b/static/img/post_images/windows-10-first-impressions-2.png new file mode 100644 index 0000000..651cefa Binary files /dev/null and b/static/img/post_images/windows-10-first-impressions-2.png differ diff --git a/static/img/post_images/windows-10-first-impressions-3.png b/static/img/post_images/windows-10-first-impressions-3.png new file mode 100644 index 0000000..71a78bd Binary files /dev/null and b/static/img/post_images/windows-10-first-impressions-3.png differ diff --git a/static/img/post_images/windows-10-first-impressions-4.png b/static/img/post_images/windows-10-first-impressions-4.png new file mode 100644 index 0000000..e4b2124 Binary files /dev/null and b/static/img/post_images/windows-10-first-impressions-4.png differ diff --git a/static/img/post_images/windows-10-first-impressions-5.png b/static/img/post_images/windows-10-first-impressions-5.png new file mode 100644 index 0000000..4e07130 Binary files /dev/null and b/static/img/post_images/windows-10-first-impressions-5.png differ diff --git a/static/img/post_images/windows-10-first-impressions-6.png b/static/img/post_images/windows-10-first-impressions-6.png new file mode 100644 index 0000000..8fb32f7 Binary files /dev/null and b/static/img/post_images/windows-10-first-impressions-6.png differ diff --git a/static/img/post_images/wordpress-logo.png b/static/img/post_images/wordpress-logo.png new file mode 100644 index 0000000..9a9aac0 Binary files /dev/null and b/static/img/post_images/wordpress-logo.png differ diff --git a/static/img/texture.png b/static/img/texture.png new file mode 100644 index 0000000..89c5f03 Binary files /dev/null and b/static/img/texture.png differ diff --git a/theme.toml b/theme.toml index 45c2431..d6174a7 100644 --- a/theme.toml +++ b/theme.toml @@ -1,6 +1,6 @@ -author = "Keichi Takahashi" -description = "Simple and clean blog theme for hugo" +author = "Bryce Matheson" +description = "A simple, lean blog theme for hugo, designed for my personal blog brycematheson.io, but free to use for whomever." license = "MIT" -name = "vienna" -source_repo = "git@github.com:keichi/vienna.git" -tags = ["blog", "tags", "bootstrap"] +name = "allegiant" +source_repo = "github.com:brycematheson/allegiant.git" +tags = ["blog", "hugo", "allegiant"] -- cgit v1.2.3