The Human Division by John Scalzi

I bought these books from Audible and listened to them using the Audible App on my iPhone.

The Human Division is something different, it is a collection of 13 short stories that take place in the "Old Man’s War" universe. This review is of the first 10 books in the series as the last 3 are not yet available.

I am a huge fan of John Scalzi’s writing and the first two books from Old Man’s War were pretty great. But now I have grown tired of the series and don’t feel like it is doing much anymore. My guess is that I will continue to listen to any new "Old Man’s War" books that come out in the future, but they will not be my first choice, if something else is available, I will read that first.

About "The B-Team" the first book in the series:

Colonial Union Ambassador Ode Abumwe and her team are used to life on the lower end of the diplomatic ladder. But when a high-profile diplomat goes missing, Abumwe and her team are last-minute replacements on a mission critical to the Colonial Union’s future. As the team works to pull off their task, CDF Lieutenant Harry Wilson discovers there’s more to the story of the missing diplomats than anyone expected… a secret that could spell war for humanity.

The B-Team is a tale from John Scalzi’s The Human Division, a series of self-contained but interrelated short stories set in the Old Man’s War universe.

©2012 John Scalzi (P)2013 Audible, Inc.

I rate this series a 5 out of 10. If you like "Old Man’s War" or are an undying fan of John Scalzi then you will want to read them.

P.S.
This series is the first time the Audible App has really let me down. They have updated the user interface in the app and I don’t like it much. They are truncating file names and the file names in the app do not match the file names on the web site.

When looking at the individual books in this series in the iPhone app I could not tell which book was next. My solution was to send myself an email that listed the names of the books in the correct order.

Codecademy JavaScript Courses

Codecademy Web Site

Codecademy

I first learned about Codecademy last year and I immediately jumped into it and completed a few of the JavaScript courses and promptly forgot about it.

Lately I have been writing more and more JavaScript and jQuery to make interactive prototypes for work. I rate my JavaScript skills somewhere around intermediate and I am challenging myself to work my way up to expert by the end of the year. As a part of that personal challenge I have been reading a lot of JavaScript, jQuery, and Git books and websites, this is how I ended up back on the Codecademy website.

Compared to last year, Codecademy has made many improvements. The JavaScript courses have been updated, they still have plenty of ambiguous wordings that makes completing the lesson harder than it should be and many of the lessons don’t teach much more than how to cut-and-paste. But with some help from the available Forums, I finished the JavaScript courses in 4 days without too much trouble.

I really enjoyed the courses on inheritance and constructors. I am going to put that to use immediately and refactor a lot of code and use courses to make my code much easier to maintain, modify and re-use.

All that said, I did have some issues while working through the lessons. A handful of times, I thought I understood the task but just couldn’t get it to accept my answer. The forums were helpful but it was not easy to find questions/answers related to the exact lesson/task I was having trouble with. I would appreciate it if the forums were broken down by individual lessons instead of by whole class.

The in-browser coding environment is very slick, but in many of the lessons there were warnings from JSHint. Those warning were very distracting when I was starting out, after awhile I learned to ignore most of them.

Overall I enjoyed the Codecademy experience and I plan on continuing participating on the courses offered there. In between reading books and writing code, probably while on the couch in front of the TV, I will work my way through the Web Fundamentals, jQuery, JavaScript (done), Projects, Python, Ruby, PHP, and APIs lessons.

From Codecademy:

Codecademy is an education company. But not one in the way you might think. We’re committed to building the best learning experience inside and out, making Codecademy the best place for our team to learn, teach, and create the online learning experience of the future.

Education is old. The current public school system in the US dates back to the 19th century and wasn’t designed to scale the way it has. Lots of companies are working to "disrupt" education by changing the way things work in the classroom and by bringing the classroom online.

We’re not one of those companies. We are rethinking education from the bottom up. The web has rethought nearly everything – commerce, social networking, healthcare, and more. We are building the education the world needs – the first truly net native education. We take more cues from Facebook and Zynga in creating an engaging educational experience than we do from the classroom.

We do not want to open up universities. We want to open up knowledge. Everyone knows something they can teach someone else and we want to help them do it. Our community has created tens of thousands of courses and taken millions of courses. At this point, more than a billion lines of code have been submitted to Codecademy.

Education is broken. Come help us build the education the world deserves.

I rate Codecademy a 9 out of 10 and it wouldn’t take many improvements to make it a 10.

Adobe Fireworks CS6 Classroom in a Book: The official training workbook from Adobe Systems

I read this book on O’Reilley’s Safari Books Online using personal and work laptops along with the Safari Books app on an iPad.

I really like the Adobe Classroom in a Book series and have read many of them. They are great because they are based on real-world use and come with all of the files needed to build the projects used in them.

Back in the day I did the Photoshop Classroom in a Book and completed all of the tutorials, followed every step, and wrote out the answers to the quizzes at the end of each chapter. Since then I pretty much just read through the book and absorb as much as I can, returning to the book when I get stuck in the project I am working on.

I am working with a designer that uses Fireworks to build his web site designs and was completely befuddled by Fireworks. Getting the images I needed to build a demo web site seemed incredibly hard and inefficient. So I grabbed this book and spent a couple of days reading it.

This book did not disappoint, it has already helped me figure out how to get the content out of Fireworks more efficiently. It still doesn’t make a lot of sense to me just how hard it is, but most of that is just how Fireworks functions and I am still not a fan of it. Fireworks is a through-back to the Macromedia days and I don’t feel like it has been updated the way it should be for modern web design. It may be a good tool for designers to build prototypes and designs to show clients, but for the people trying to implement those designs it kinda sucks.

One of the cool features of Fireworks I learned form the book is the creation of CSS3 properties that closely mimic the Live Filters such as drop-shadows, with some tweaking this has worked great for us and really saved a lot of time.

I only have one real complaint about this book, the design used in the tutorials feels very Y2K to me, it is very dated. It is not Web 2.0, responsive, or anything that I would consider "modern."

From the publisher:

Those creative professionals seeking the fastest, easiest, most comprehensive way to learn Adobe Fireworks choose Adobe Fireworks CS6 Classroom in a Book from the Adobe Creative Team. The 14 project-based lessons in this book show readers step-by-step the key techniques for working in Fireworks.

Readers will learn what they need to know to design and mock up Web pages or interfaces for rich Internet applications or tablet apps. In addition readers will learn how to demo a design for a client in real time, export the design as an interactive PDF, and export vector design elements as CSS3-only markup for use in websites. This edition, fully revised for CS6, covers CSS extraction using the CSS Properties panel, jQuery Mobile skinning, and sprite creation. It also includes instruction on working with the Styles panel and several new enhancements to the Properties panel, including the new color selection and gradient editing features. The companion DVD includes lesson files so readers can work along with the book.

I rate this book an 8 out of 10, anyone who needs to or wants to learn Adobe Fireworks can learn a lot from it in a short time.

Fotorama Slide Show and phpSmug

Fotorama Web Site Home Page

Fotorama

As a part of my web site moving and redesign I wanted to include a slideshow at the top of the home page.

After researching and thinking about writing one of my own I found Fotorama which is a jQuery based slideshow framework that allows for many different types of slideshows with a ton of options. Take a look at the website and the examples, they are amazing.

So I broke the process down into a handful of steps and iterated up to the dynamic slideshow that it is now.

The first step was getting a version running on a test page with static content hard-coded into the page. There was a bit of tweaking here and there along with coming up with the idea to have a design that resembles a new window "Window" with Hide and Fullscreen buttons.

The next step was figuring out how to dynamically get the picture URLs and Captions directly from SmugMug so that anytime I update SmugMug the slidesow on my website would also be updated. For that I chose to use phpSmug which is a wrapper class for the SmugMug API written and maintained by Colin Seymour.

I ran into 2 issues with implementing phpSmug, the biggest of which was that it would randomly error out with a "CURL Error 7" which was causing my website to load very slowly and breaking the slideshow. I have addressed this issue by using the caching built into phpSmug combined with writing the parsed data necessary for the slideshow into a MySQL table. Anytime the SmugMug API is not available and the phpSmug cache has expired the data for the slideshow will be pulled from the database.

Here is the code:


<?php
$user="username";
$password="password";
$database="database_name";
$tablename="table_name";
mysql_connect(localhost,$user,$password);
@mysql_select_db($databaseor die"Unable to select database");
/* Last updated with phpSmug 3.0 */
require_once"/path/to/phpSmug.php" );
try {
  $code = "SmugMug API";
  // My API Key and App Name from SmugMug Admin Panel
  $f = new phpSmug"APIKey=api_key""AppName=app_name_and_version" );
  // Enable disk based caching with expires in 1 hour
  $f->enableCache("type=fs""cache_dir=/path/to/phpsmugcache""cache_expire=3600" );
  // Set timeout
  $f->req->setConfig(array'timeout' => 2));
  // Login Anonymously
  $f->login();
  // Get images from Portfolio
  $images = $f->images_get"AlbumID=album_id""AlbumKey=album_key""Heavy=1" );
  $images = ( $f->APIVer == "1.2.2" ) ? $images['Images'] : $images;
  $i = 0;
  foreach ( $images as $image ) {
    if ($i != 0) {
      $query .=  ",\n";
      $output .=  ",\n";
    }
    $i++;
    // Create SQL String
    $query .= "('','".$image['X2LargeURL']."','".$image['TinyURL']."','".htmlentities($image['Caption'],ENT_QUOTES)."')";
    $output .= "{img: \"".$image['X2LargeURL']."\", thumb: \"".$image['TinyURL']."\", caption: \"".htmlentities($image['Caption'])."\"}";
  }
  // Empty Out Table
  mysql_query('TRUNCATE TABLE '.$tablenameor die(mysql_error());
  // Populate Table
  mysql_query("INSERT INTO cache (`id`, `x2largeurl`, `tinyurl`, `caption`) VALUES ".$query);
} catch ( Exception $e ) {
  $code = "{$e->getMessage()} (Error Code: {$e->getCode()})";
  //Read from Database
  $query="SELECT * FROM ".$tablename;
  $result=mysql_query($query);
  $num=mysql_numrows($result);
  $i=0;
  while ($i < $num) {
    $X2LargeURL=mysql_result($result,$i,"x2largeurl");
    $TinyURL=mysql_result($result,$i,"tinyurl");
    $Caption=mysql_result($result,$i,"caption");
    if ($i != 0) {
      $output .=  ",\n";
    }
    $i++;
    // Create SQL String
    $output .= "{img: \"".$X2LargeURL."\", thumb: \"".$TinyURL."\", caption: \"".$Caption."\"}";
  }
}
mysql_close();
?>
jQuery(document).ready(function(){
  try { console.log('code: <?php echo $code ?>'); } catch(err) { }
  // Load Fotorama.js script
  jQuery.getScript("/scripts/fotorama.js"function(){
    var portfolioBuildFlag = false;
    jQuery('#main').prepend('<article class="fotoramaWrapper"><div class="portfolioHeader gradient">Dave Nelson's Portfolio <div><span id="portfolioHide">[ Hide ]</span> <span id="portfolioFullScreen">[ Fullscreen ]</span></div></div><div id="myPortfolio"></div></article>');
    jQuery('#portfolioHide').on('click',portfolioToggle);
    jQuery('#portfolioFullScreen').on('click',function() {
      if(jQuery("#myPortfolio").is(":hidden") || portfolioBuildFlag === false) {
        portfolioShow();
      }
      jQuery('#myPortfolio').trigger('fullscreenopen');
    });
    function portfolioBuild() {
      jQuery('#myPortfolio').fotorama({
        data: [
        <?php
          echo $output."\n";
        ?>
        ],
        width'100%',
        height'auto',
        aspectRatio1.5,
        minHeight500,
        fitToWindowHeightfalse,
        margin0,
        shadowsfalse,
        cropToFitfalse,
        caption'overlay',
        autoplay3000,
        thumbBorderColor'#FCB03E',
        fullscreenIcontrue
      });
      portfolioBuildFlag = true;
    }
    function portfolioCookie(state) {
      if (state === "hidden") {
        document.cookie = "portfolioHide=true";
      } else {
        document.cookie = "portfolioHide=false";
      }
    }
    function portfolioToggle() {
      if(jQuery("#myPortfolio").is(":hidden") || portfolioBuildFlag === false) {
        portfolioShow();
      } else {
        portfolioHide();
      }
    }
    function portfolioShow() {
      if (portfolioBuildFlag === false) {
        portfolioBuild();
      }
      jQuery('#myPortfolio').slideDown('fast');
      jQuery('#portfolioHide').text('[ Hide ]');
      jQuery('#myPortfolio').trigger('play')
      portfolioCookie('shown');
    }
    function portfolioHide() {
      jQuery('#myPortfolio').slideUp('fast');
      jQuery('#portfolioHide').text('[ Show ]');
      jQuery('#myPortfolio').trigger('pause')
      portfolioCookie('hidden');
    }
    function portfolioInit() {
      var portfolioHide = document.cookie.replace(/(?:(?:^|.*;\s*)portfolioHide\s*\=\s*((?:[^;](?!;))*[^;]?).*)|.*/"$1");
      if (portfolioHide != "true") {
        portfolioBuild();
      } else {
        jQuery('#portfolioHide').text('[ Show ]');
      }
    }
    portfolioInit();
  }); // Load Fotorama.js script

}); // document ready

Pro jQuery by Adam Freeman

I read this book on Safari Books Online using Firefox.

I am doing more and more with jQuery and went looking for a book that could show me the ins-and-outs of it and "Pro jQuery" is definitely that book.

I do not agree that this is a “Pro” book as it does not cover professional techniques for programming in JavaScript using the current best practices that you would find in a production environment, but this book is a great reference for jQuery and I could find none that were better.

This book has taken my jQuery skills from advanced newbie to a solid understanding of what I would use jQuery for and what I would not. I expect to use it as a reference for a long time to come.

From the publisher:

Query is one of the most popular and powerful JavaScript libraries available today. It’s widely used to create rich user experiences and to simplify website and application development. It is the tool of choice for web developers everywhere and sets the standard for simplicity, flexibility and extensibility.

In Pro jQuery, seasoned author Adam Freeman explains how to get the most from jQuery by focusing on the features you need for your project. He starts with the nuts and bolts and shows you everything through to advanced features, going in depth to give you the knowledge you need. Getting the most from jQuery is essential to truly mastering web development.

What you’ll learn

  • Understand the capabilities of jQuery and why it is special
  • Use the core of jQuery to enrich HTML, including tables, forms and data displays
  • Use jQuery UI to create rich and fluid user experiences
  • Use rich interactions such as drag and drop, sortable data and touch sensitivity
  • Use jQuery Mobile to create touch-enabled interfaces for mobile devices and tablets
  • Extend jQuery by creating custom plugins and widgets

Each topic is covered clearly and concisely, and is packed with the details you’ll need to learn to be truly effective with jQuery. The most important features are given a no-nonsense, in-depth treatment, and chapters contain examples that demonstrate both the power and the subtlety of jQuery.

I rate this book an 8 out of 10 and recommend it to anyone interested in learning more about jQuery.

Responsive Design in Practice

What the heck does "Repsonsive" mean when it comes to a web site?

For my own practical purposes it means that I have a single web site with one set of HTML, CSS, and JavaScript being served to all web browsers, but the appearance of the website changes based upon the width of the web browser’s window to give a great viewing experience to everyone.

Haha, that is a mouthful.

So here it is in action:

davenelson.com Desktop Web Browser Screen Shot

Desktop Web Browser


davenelson.com iPad Screen Shot

iPad


iPhone

davenelson.com iPhone Screen Shot

The great thing is I did not need to build three different websites, no "mobile" version, just "The Website." Another great thing is that I was able to start with a WordPress theme that someone else spent a lot of time an effort in building. I just tweaked it to fit my needs.

Sunspot WordPress Theme Screen Shot

Sunspot WordPress Theme Screen Shot

The theme is called Sunspot by Automattic and I really like the way my content looks when using it.

From the author:

A sharp theme with subtle grid lines and sun-splashed accents, Sunspot is a great all-purpose blogging canvas, especially for those who prefer a dark color scheme. Sunspot offers two arrangements for posts on the front page. Additional features include a custom header and a custom background, two optional widget areas, and a responsive layout that adapts gracefully to smaller screen sizes.

Responsive design is not a fit for all web sites, content and interactions that work great in a desktop web browser are not always appropriate for the really small screens of smartphones and conversely content made for smartphones does not always scale well for big screens. But for a blog or any site that is primarily text-based I think responsive design is a great way to reach a broader audience.

Canon 5D Mark III: From Snapshots to Great Shots by Ibarionex Perello

I read this book on Safari Books Online using a web browser and an iPad.

I have read the "From Snapshots to Great Shots" for the 7D and the G12 and they were pretty good. So I decided to give the one for the 5D Mark III a try and it did not disappoint.

Unlike the books "Canon EOS 5D Mark III by James Johnson" and "Canon EOS 5D Mark III Digital Field Guide by Charlotte K. Lowrie" this book tells you not only about the features and functions of the Canon 5D Mark III but also tells you why you may choose one setting over another.

This book, and the series in general, did not blow me away or provide any mind-blowing insights. But it does contain a lot of information to get you starting working with your camera.

I really like the idea of the assignments at the end of each chapter, anyone who works through each of them will have a very solid understanding of their camera.

From the publisher:

Now that you’ve bought the amazing Canon 5D Mark III, you need a book that goes beyond a tour of the camera’s features to show you exactly how to use the 5D Mark III to take great pictures. With Canon 5D Mark III: From Snapshots to Great Shots, you get the perfect blend of photography instruction and camera reference that will take your images to the next level! Beautifully illustrated with large, vibrant photos, this book teaches you how to take control of your photography to get the image you want every time you pick up the camera.

With Canon 5D Mark III: From Snapshots to Great Shots, you’ll learn not only what makes a great shot work–you’ll learn how to get that shot using your 5D Mark III.

I rate this book a 7 out of 10 and recommend it to anyone interested in reading about the Canon 5D Mk III, especially beginning photographers who want to get the most out of their camera.

I Changed Web Site Hosts

web site screen shot

Dreamhost’s Web Site

After 4 years at my previous host I had become pretty unhappy with them.

I was running a WordPress blog and a PHP/MySQL based app to track an office football pool along with a handful of pictures for clients to download and prototype websites for conducting usability tests. But I was regularly having issues, mostly based around the web site being really slow.

So after reading a post in Lifehacker about the best personal web host which highlighted Dreamhost as the best option, I decided to make the jump.

The Dreamhost discount from the article was no longer valid, but I was able to find a $50 off coupon when signing up for a year or more. It made my first year cost less than $70. And after that the cost will be within $20 of what I was paying my previous host.

It took about 2 days for the DNS entries to be updated, to make my tweaks, and to get WordPress up and running with my imported content.

A big shout-out to the folks that make WordPress happen, exporting the content from my old provider then importing it into the new one worked like a charm. I had to tweak some settings and add some information in widgets and plug-ins, but overall it was amazingly easy.

I’ve spent some time over the last 2 weeks picking a Responsive theme, Sunspot by Automattic, that works great on a desktop at any width, smartphone, and tablet. It took some tweaking based on the heading and navigation, but it is clean and easy to modify.

Then I started with the basic plugins, Akismet and Jetpack by WordPress.com which are great and easy to install and setup.

Then I tried a bunch of different plugins that were all awful. For any WordPress install I highly recommend you go to a site like Pingdom Website Speed Test and check your speed with no plugins installed and then run it again after you add each plug-in. Also check it again anytime you make big changes to any plugins. Using Pingdom I was able to see that the “SmugMug for WordPress” plugin was absolutely killing the speed of my website, even when it was not displaying content on my website, so I am not using that anymore.

In the end I am using SmugMug Widget to display some of my most recent photos uploaded to my photography website. With some tweaking to the CSS I have the widget working great in the Sunspot theme and is now a part of the responsive design. Best of all the SmugMug Widget did not negatively affect the speed of my website.

Then I tried W3 Total Cache and after a day of fiddling with it decided it was not for me. If you are not running some type of minification and caching system on your WordPress website I do suggest giving it a try, but I chose to go a simpler route.

I am using WP Minify to remove all of the extra white space and combine separate files for JavaScript, CSS, and HTML. Running YSlow using minification made a difference, but not a big one.

The big performance improvement for my website comes from WordPress Super Cache which makes dynamic pages static. On my server the pages are still served by PHP, but they are so much faster!

Now my website includes the content I want, has a responsive design that looks great on desktop web browsers, iPads, and iPhones, and is faster than I could have ever hoped for.