Great Planes RealFlight 7.5 Review

RealFlight is an RC flight simulator that you can use to practice flying RC planes, helicopters, and multirotors (drones). It is a lot cheaper to crash in the simulator than in real life.

RealFlight is a good flight-sim, I feel like there are other sims out there that have better physics and are more realistic, but RealFlight feels like the most polished and has many more options than any of the others. But to get the most out of it you will have to turn to the community around it.

There are many versions of RealFlight available and it can be very confusing picking the right one. You can get just the software, with a cable, or with a controller. To make it a bit more confusing there is more than one cable available. I went to my local hobby shop and bought Great Planes RealFlight 7.5 with Wired Interface which is currently $129.98 at Amazon.

If you buy this version you will also need a controller, I use the Spektrum DX6 controller (transmitter) and like it a lot. It is available on Amazon for $199.52 right now, which is a great price.

A great feature of RealFlight is that you can install it on as many computers as you want, but to use it you have to have the Interlink cable with its built in reset button to run it.

RealFlight will not run on MacOS so I primarily use Bootcamp and Windows 8 to play it. But I sometimes use Parallels with Windows 7 or Windows 8, it works but requires a fast Mac to work.

Community

After getting the software installed and you’ve taken a couple of test flights I recommend going over to RCGroups.com and downloading the RCG online field and then the RCG Killer Quad. After installing them and giving them a go you can see if RCG is hosting the field for multiplayer to have some fun with other RC Group members.

If the field does not offer you enough challenges you can open it up in the editor and make it more challenging. I added more gates and removed the stadium seating from mine.

The next place to stop is the Knife Edge Software Swap Pages. These are aircraft and airports created by other players.

Troubleshooting

The only problem I have had with the software is that when I load a new multirotor and try to fly it the plane flops around until it is crashed. This is fixed by flipping the auxillary switches, ‘Y’, ‘U’, ‘I’, and ‘O’, for me it is ‘O’ that usually does the trick.

Improvements

I hope that that next version of RealFlight includes more realistic physics, more realistic graphics, and a simpler interface.

Competition

Phoenix RC is the direct competitor and has its own flaws.
FPV Freerider is a multirotor FPV specific sim with a handful of maps.

Give them all a try, it is a lot cheaper than wrecking and rebuilding your planes.

Udemy Course: All about Node.js

I am working on a personal side-project for some friends and decided to build it using Node, Express, Mongo, and Passport.

About the time I was working on the database architecture I received a coupon via email for the Udemy course “All about Node.js” taught by Sachin Bhatnagar. The full price for the course is currently $150 but it comes up on-sale from time-to-time and coupons are often available.

The course is 64 lectures with 8 hours of video and a handful of quizzes. It took me 3 weeks to work my way through all of the lectures as I was also reading a couple of books on Safari Books Online and Learn All The Node http://www.learnallthenodes.com/.

Sachin’s class is great; the lectures about using Amazon’s CloudFront and EC2 alone are worth the full price of $150. He is very articulate, easy to understand, and does a great job breaking complicated systems into easy to digest lessons.

From the course description:

“My intent is hand hold you all the way from writing your first NodeJS app to deploying production level apps on the cloud.”

What am I going to get from this course?

  • Over 64 lectures and 7.5 hours of content!
  • Build High Performance and Scalable Apps using NodeJS
  • Use NodeJS Streams to write a Web Server
  • Use the Node Package Manager (NPM) for managing dependencies
  • Use the Express 4 Framework for building NodeJS Apps
  • Use the Hogan Templating Language
  • Understand MongoDB as a NoSQL Database
  • Create & Use MongoDB Databases using services like MongoLab
  • Create Realtime Apps that use Web Sockets
  • Upload & Resize Images using NodeJS
  • Integrate Authentication using Social Media Sites like Facebook
  • Structure the NodeJS app into modules
  • Create and Deploy EC2 Cloud Server Instances on Amazon Web Services
  • Create and Use Amazon’s S3 Storage Service with NodeJS
  • Use Amazon’s Cloudfront Service
  • Using Amazon’s Elastic IP
  • Configure Security Groups, Ports & Forwarding on Amazon EC2
  • Deploy a NodeJS app on the EC2 Instance
  • Deploy a NodeJS app on Heroku
  • Deploy a NodeJS app on Digital Ocean
  • Install & Deploy NGINX as a Reverse Proxy Server for NodeJS Apps
  • Configure NGINX as a Load Balancer

What is the target audience?

  • Web Designers & Front End Developers who wish to extend their knowledge of Javascript for building high performance network applications.
  • Software Developers who want to build high performance network applications.
  • Absolute beginners with basic knowledge of HTML, CSS and Javascript, wanting to upgrade to professional Web Development and Building Web Apps.
  • PHP, ASP.net, Perl, Java & Ruby coders wanting to leap onto the Node.Js bandwagon.
  • Anyone who wishes to get hands-on training with setting up an Amazon EC2 Instance with a host of other services like Cloudfront, Elastic IP and S3
  • Anyone who wishes to get hands-on training with deploying a NodeJS app on the cloud
  • Computer Engineering students
  • Tech Entrepreneurs who want to get their hands down and dirty with Web Coding & App Development.
  • Anyone who wishes to stay on the forefront of technology!

I rate the Udemy Course: All about Node.js a 10 out of 10 and highly recommend it to anyone who wants to learn Node.js and its surrounding technologies and frameworks.

Learn Raspberry Pi with Linux by Peter Membrey and David Hows

This is the Raspberry Pi book I have been looking for. Instead of trying to push some advanced scripting language or Linux distribution, this book shows you how to use the most widely used distribution, Raspbian, and good old Bash scripts to do useful things with a Raspberry Pi.

Now 3 years old the lessons in Learn Raspberry Pi still hold up. Raspbian has been through some major updates and the new Model A+ and B+ computers have added to the Pi’s capabilities, but the Linux/Unix commands, SSH and VNC techniques, network information, Web Server installation (LAMP), and a decent chapter covering compiling XMBC on your Pi.

This book does not cover any topics in depth, but it includes enough information to give you an idea of what to enter into Google to find out more. This is one of the greatest features of Linux and the Raspberry Pi, once you know what to search for, there is more information available for free. The community is made up of millions of people from all over the world that want to share what they have learned and what they have created.

From the publisher:

Learn Raspberry Pi with Linux will tell you everything you need to know about the Raspberry Pi’s GUI and command line so you can get started doing amazing things. You’ll learn how to set up your new Raspberry Pi with a monitor, keyboard and mouse, and you’ll discover that what may look unfamiliar in Linux is really very familiar. You’ll find out how to connect to the internet, change your desktop settings, and you’ll get a tour of installed applications.

Next, you’ll take your first steps toward being a Raspberry Pi expert by learning how to get around at the Linux command line. You’ll learn about different shells, including the bash shell, and commands that will make you a true power user.

Finally, you’ll learn how to create your first Raspberry Pi projects:

  • Making a Pi web server: run LAMP on your own network
  • Making your Pi wireless: remove all the cables and retain all the functionality
  • Making a Raspberry Pi-based security cam and messenger service: find out who’s dropping by
  • Making a Pi media center: stream videos and music from your Pi

Raspberry Pi is awesome, and it’s Linux. And it’s awesome because it’s Linux. But if you’ve never used Linux or worked at the Linux command line before, it can be a bit daunting. Raspberry Pi is an amazing little computer with tons of potential. And Learn Raspberry Pi with Linux can be your first step in unlocking that potential.

What you’ll learn

  • How to get online with Raspberry Pi
  • How to customize your Pi’s desktop environment
  • Essential commands for putting your Pi to work
  • Basic network services – the power behind what Pi can do
  • How to make your Pi totally wireless by removing all the cables
  • How to turn your Pi into your own personal web server
  • How to turn your Pi into a spy
  • How to turn your Pi into a media center

Who this book is for

Raspberry Pi users who are new to Linux and the Linux command line.

I rate this book an 8 out of 10 and highly recommend it to anyone looking to make a project with a Raspberry Pi.

Make an Icon for Mac Yosemite

How to make a new folder icon for your MAME games is pretty easy with a handful of steps. This is the process I followed; there are other ways to do it using other tools. I used Preview, Adobe Photoshop, and Xcode’s Icon Utility.

Step 1: Get the Icons

I like JohanChalibert’s OS X Yosemite Icon set that he has posted on Deviant Art, but you could search around a bit and find many different icon sets that would be a great place to start.

Download the icon set, unzip it, take a moment to read the readme file, and then find the folder icon you want to use as a starting point, I used GenericFolderIcon.icns. Right-click the Icns file and open it in Preview.

Step 2: Export the Base Icon

Preview Inspector Dialog Box

Preview Inpector

Now that you have the icon set open in preview you can see that it is made up of 10 different graphics. By opening the Inspector (Tools > Show Inspector or Command i) you can see the details for each graphic, like the first graphic is 1024 x 1024 pixels in size at 144 dpi.

Right-click menu

Export As…

Right-click the “1” graphic and choose Export As…, change the Format to PNG making sure the Alpha checkbox is checked. I kept the default name of GenericFolderIcon.png.

Step 3: Editing the Graphics

Now I download the super large version of the MAME logo from MAME Dev. This is what I want to put on the front of my folder icon.

  1. Open both the GenericFolderIcon.png and the MAMELogoTM.jpg files in Photoshop.
  2. On the MAME logo in the Layers panel click the padlock icon to convert the background to a regular layer.
  3. Using the Magic Wand tool with a Tolerance of 12, Anti-alias checked, and Contiguous unchecked click the black background of the logo.
  4. Photoshop delete background image

    Delete Background

    Click the Delete key to remove that black background then Command D to cancel the selection.
  5. Photoshop adjust levels

    Adjust Levels

    Open the Levels panel (Image > Adjustments > Levels… or Command L) and under Output Levels make both sides “0” which will make the entire logo solid black.
  6. Photoshop pasted MAME logo

    Pasted Logo

    Then Select All (Command A), Copy (Command C), then switch to the GenericFolderIcon graphic and Paste (Command V).
  7. Photoshop resize MAME logo

    Tranform Logo

    Initially the MAME logo will be huge compared to the folder so you will need to transform it to fie. Transform (Command T) then while holding down the shift key to keep the ratio of the logo locked start resizing the logo until it looks good to you.
  8. In the Layer panel switch the mode to Overlay.
  9. Create an “fx” layer with an Inner Shadow, I like the settings Blend Mode: Mulitply, Opacity: 36%, Angle: 128, Distance: 9px, Choke: 0, Size: 21px. Play with it until you find something you like.
  10. Photoshop add fx to the logo layer

    Adjust Logo

    For my tastes the MAME logo is still too strong, I want it to more closely match the Apple Applications folder Icon. So back in the Layers I turn the Opacity of the logo layer down to 38%.
  11. Save that PSD file early and often so you have something to go back too if there are any problems or you want to make adjustments later.

Step 4: Saving the Graphics

For a complete Apple icon you need 10 images.

icon_16x16.png
icon_16x16@2x.png
icon_32x32.png
icon_32x32@2x.png
icon_128x128.png
icon_128x128@2x.png
icon_256x256.png
icon_256x256@2x.png
icon_512x512.png
icon_512x512@2x.png

The “2x” images are saved at 144 DPI while the others are saved at 72 DPI.

It can get a bit confusing at this point, but keep in mind that icon_128x128@2x.png is really 256×256 at a resolution of 144 DPI while icon_256x256.png is 256×256 at a resolution of 72 DPI.

  1. I make a Duplicate (Image > Duplicate) of the image so that I wont accidentally overwrite my full-sized PSD file.
  2. Photoshop image size 512@2x

    Image Size 512@2x

    In the Image Size panel (Image > Image Size… or Command Option I) adjust the resolution to 1024×1024 at 144 DPI.
  3. Then Save for Web (File > Save for Web… or Command Option Shift S) with the settings of PNG-24 and Transparency Checked.
  4. Click Save and in the Save Optimized As dialog box make a new folder naming it “MAMEFolderIcon.iconset”. The “.iconset” portion is important later.
  5. Name this first file icon_512x512@2x.png and save it.
  6. Photoshop image size 512

    Image Size 512

    Back to the Image Size panel adjust the size to 72 DPI Resolution and sized 512×512 (easier to make the changes in that order as adjusting the resolution will change the width and height). Resample should be set to “Automatic” or “Bicubic Sharper (reduction)”.
  7. Save this one as icon_512x512.png.
  8. Finished images for the icon

    Finished Files

    Now do that another 8 times adjusting the size and saving based on the file names above.

As the icon graphic gets smaller you could change it up to keep it distinguishable from other icons. Instead of using the full MAME logo you could use just an “M” or you could darken the logo, or anything else you can think of.

Step 5: Building the Icon Set

I am using the Icon Utilities tool that comes with Xcode. There are a lot of icon tools out there, the App Store is full of them, but I happen to have Xcode installed and decided this was the easiest way for me to create the finished icon set.

  1. Open the Terminal app and change the directory to where you have the MAMEFolderIcon.iconset saved. For me that was cd /Users/dnelson/Documents/Folder\ Icon\ Post/
  2. Then run the Icon Utilities app “iconutil -c icns MAMEFolderIcon.iconset

And BANG! You have your very own MAMEFolderIcon.icns icon set.

Step 6: Put your New Icon Set to Use

Find the folder you want to give your new Icon Set to and get ready for the magic.

  1. Select the folder, click on it once, than then Get Info (right-click and choose Get Info or Command I).
  2. Drag-and-drop the new icon set

    Drag-and-Drop

    Now drag-and-drop you new icon set on top of the folder icon at the top of the Get Info dialog box.
  3. Folder with new icon set

    Updated Folder

    And you are done!

It is a tedious process, but it is nice to have custom icons like this, especially for folders in the Doc. This process will also work for making icons for your game launching files.

Easy Launching of MAME Games in Mac OSX Yosemite

Sometimes you want to be able to launch a game by double-clicking an icon rather than going through MAME’s interface or using the Terminal. This method has the added benefit of letting you easily launch MAME with various options.

We are going to write a small shell script, save it as a command file, and make it executable.

If you have followed the directions in my previous post “MAME on Mac OSX Yosemite” you can follow these instructions exactly, if you have made changes or modified any steps, keep that in mind while working through these steps.

First off we write the shell script.

  1. 1. Open the Documents directory and create a new folder named “MAME Games”.
  2. 2. Open Applications > TextEdit and click Format > Make Plain Text
  3. 3. On the first line of the document enter “#!/usr/bin/env bash”. This is known as a shebang and tells the computer that we want to use the Bash shell to run our script.
  4. 4. Then for readablility’s sake skip a line and enter “cd ~/Documents/mame” on the next line. This changes the directory to your mame folder inside of your Documents folder.
  5. 5. On the last line enter “./mame64 robotbwl” which launches the MAME application and loads the Robot Bowl ROM.
  6. 6. Now save the file naming it “Robot Bowl.command”. The filename extension of “command” tells Mac OSX that this is a Terminal shell script.

We have created our script now we have to give it permission to be executable.

  1. 1. Open the Terminal app and end enter “chmod +x ~/Documents/MAME\ Games/Robot\ Bowl.command”, this modifies the permissions of the “Robot Bowl.command” file by adding the Executebale for everyone permissions to it.
  2. 2. NOTE: The back slash “\” in the code escapes the spaces in the directory path and file names, without those back slashes the code will not work.

That is all there is to it, you should now be able to double click on the Robot Bowl file to launch MAME and the Robot Bowl game.

Options

Now we are going to create a file that will launch the Robot Bowl game with the screen much brighter than normal. This can be really handy if you have a screen or a game that is dark.

  1. 1. Copy the Robot Bowl file we created above and name it “Robot Bowl Bright”. By copying the Robot Bowl file the copied file will have the original’s executable permissions.
  2. 2. Open the Robot Bowl Bright file in TextEdit and add the brightness option to it by changing the last line to be “./mame64 robotbwl -brightness 1.5” and save it.

Now launch the new Robot Bowl Bright file and you can see how much brighter it is, the background has become gray. Hit the Escape (esc) key to quit and launch the original Robot Bowl file and you should see that the background is black when launching the game from that file.

In the docs directory there is a config.txt file that contains many other options you can use to configure your launchers. The ones you will probably use most often are the joystick options.

The Dock

To make launching games even easier you can drag the MAME Games folder onto the right-hand side of the Dock by the trashcan. I don’t like the default view of folders in the Dock so I right-click the folder and choose “Display as Folder” and “View content as List”. Now I can click the folder in the dock and choose a game from the list.

You could get creative with this and have a different folder for different types of games or with different options enabled for the games.

MAME on Mac OSX Yosemite

Multiple Arcade Machine Emulator (MAME) is a free and open source application used as a reference of the inner workings of arcade gaming systems. A side effect of this is that MAME can be used to play old arcade games if you can find the games. MAME uses data dumps from the Read Only Memory chips (ROMs) that were used in the original arcade games.

You can download the ROMs of some games from the mamedev.org website. I am going to use Robot Bowl as an example.

You will have to use the terminal app and the console to get MAME working, but it is very easy following the steps below. You will also need admin privileges on the computer, this is not absolutely necessary to run MAME, but that is how I am going to cover it here.

These instructions are for SDLMAME version 0.156 64-bit which was released on November 28, 2014.

Lets get started.

  1. Visit http://wiki.mamedev.org/index.php/SDL_Supported_Platforms and click on the URL for “Apple Macintosh OS X Intel” with a build target of “MAME”. Curretly that URL is http://sdlmame.lngn.net/
  2. Follow the instructions at the top of the page and install the “SDL runtime library
    1. From the SDL website download SDL2-2.0.3.dmg or the latest version.
    2. Double-click the SDL2-2.0.3.dmg file which will mount it as a drive.
    3. Open the Terminal application Applications > Utilities > Terminal
    4. Enter “open /Library/Frameworks” into the terminal window, this will open a window for the Frameworks directory
    5. Drag the “SDL2.framework” file from the SDL2 window into the “Frameworks” window, you may be prompted to enter an Admin username and password to authenticate your desire to modify the Frameworks directory. Click “Authenticate” and then enter an Admin Username and Password.
  3. Back at the SDLMAME page click on the “SDLMAME v0.156 64-bit” link and save the file to your computer. I am placing it in the “Documents” directory.
  4. Double-click the zip file, when finished you should now have a folder named “mame0156-64bit”, now rename this folder “mame”, keep in mind that case counts so make sure the folder name is all lower-case.
  5. Open the “mame” folder and take a look at the contents
  6. Over in the Terminal app, enter “cd ~/Documents/mame” and then “ls -al” to double-check that you are in the right directory
  7. Now to create the MAME configuration file enter “./mame64 -createconfig” this will create a “mame.ini” file in the “mame” directory
  8. Now to get a ROM visit the mamedev.org website and the Robot Bowl game at http://mamedev.org/roms/robotbwl/
    1. Click on “I understand…” and download the game to the Documents/mame/roms directory
    2. WARNING: ROMs are saved as zip files and they should stay zipped. MAME will handle unzipping them and using the contents inside. If you use a web browser that automatically unzips files when you download them you will need to change that setting to preserve the original files.
  9. In Yosemite the keyboard does not use the function keys on as F-1 through F19 the way other operating systems do, they are assigned all kinds of other functions. You can hold the “Function (fn)” key down everytime you want to use a function key or you can open the System Preferences > Keyboard and check the “Use all F1, F2, etc. keys as standard function keys” box. If you check this box you can use the “fn” key to utilize the special functions of those keys. That is my preferred method.
  10. Now to launch MAMA and give Robot Bowl a try
    1. In the Terminal enter “./mame64”
    2. Use the arrow keys to select “robotbwl Robot Bowl” and tap Enter
    3. You may see a screen warning about using ROMs that you are not legally entitled to play, give it a quick read and know that you have been given permission by H.R. Kaufmann, president of Xidy, the original ROM images for Robot Bowl have been made available for free, non-commercial use. On your keyboard the left then right arrows to move on.
    4. Then you may see a message that there are known problems with this game. The sound emulation isn’t 100% accurate. Click the left then right arrow keys again to move on.
    5. Now the game should be playing its attract animation of a stick figure coming out to bowl.
    6. Tap the “Tab” key to bring up the in-game configuration menu and choose “Input (this Game)”
      1. NOTE: I prefer not to change the “Input (general)” controls from the default. By keeping the general defaults tutorials and other help I may use in the future will work without me having to translate which keys to press.
    7. Controls
      1. This is really cool, when you look at the input controls for a specific game, it shows ALL of the control options for that game making it very easy to learn how to play that game and re-configure the buttons and controls for it.
      2. For Robot Bowl the default controls are:
        1. 1 Player Start: 1
        2. Coin 1: 5
        3. P1 Left Button: Left arrow key
        4. P1 Right Button: Right arrow key
        5. P1 Button 1: Left Control key or mouse button 1 (left mouse button)
        6. P1 Button 2: Left Alt key or muse button 3 (right mouse button)
        7. Hook Left: Z key
        8. Hook Right: X key
      3. You can use the arrow keys to navigate to any of these and change them by tapping the Enter key then tapping the key you want to use; you can have more than one key assigned to a single control.

And that is it; you now have MAME up and running on your Mac OSX Yosemite computer.

You can find a lot more information about customizing MAME in the ~/Documents/mame/docs directory, especially in the config.txt file.

Hitman Absolution by Eidos

I was looking for a good shot’em-up and realized I had bought Hitman Absolution from Steam on sale a long time ago and hadn’t played it yet, and even better I could play it on my iMac in MacOS instead of booting into Windows Bootcamp.

I have played most of the other Hitman games and liked some more than others. A couple of them have been really awesome. I clearly remember a scene in an opera house where I was forced to harm a police officer for the first time in any of the games, that was really hard for me, I almost stopped playing the game because of it. But after dying and restarting the level for what felt like 100 times I was able to complete the mission without killing any cops. Knocking them around a bit is ok.

In Hitman Absolution the only mission that came close for me was in Chinatown with a ton of witnesses and a chase that led to me wearing a furry suit.

The gameplay was ok but not great, I took a couple of week long breaks while playing it and coming back to it I had to re-learn a lot of the controls. Keyboard and mouse all the way.

The story line was not very interesting to me, definitely the worst of the series. I feel like the core of its problem is that to much time and money creating infuriatingly long cut-scenes instead of honing the gameplay. The cut-scenes ruined the game for me, I feel like I spent 25% of my time playing the game and 75% watching boring cut scenes.

For a 2012 game played on a Late 2013 27” iMac the graphics were impressive, at full resolution the game was smooth-ish with good framerates that only slowed noticeably when there was a lot going on.

I don’t remember what I paid for the game, but if it was in the $10 range I am happy with it, but will probably never play it again.

I rate Hitman Absolution a 4 out of 10 and only recommend it to people who are playing their way through the franchise or for game developers to learn how not to do it.

DragonCon Photography Team Computer Setup

As a volunteer at DragonCon one of my current responsibilities is getting the computers setup for use by the photographers and the librarians. This year I had to re-learn a lot of what worked so well last year as my notes were not complete, so I decided to write them up more thoroughly this year and post them hear so that I will not loose them.

At the 2014 DragonCon we used a total of 5 computers, 3 for the photographers to drop off photographs at and 2 for the librarians to use for key wording. The computers were running Windows 7 and required a lot of Windows updates and video driver updates before they were ready to use, luckily the internet connection at the show was fairly fast on Thursday afternoon when I was setting them up.

We call the 2 librarian computers A and B; each computer has 2 external hard drives which we call the Piles, a primary drive and a backup drive. The primary drive on each library computer is shared on the network as Pile A and Pile B.

I don’t know a lot about Windows networking, so I winged it and believe I set up a Windows home network with file sharing turned on. I wasted a lot of time before I figured out that all 5 computers had the same network name so they could not share files, giving each computer a unique name fixed all of the sharing issues I was having.

On the desktop of each computer I made a shortcut to the shared Pile A and Pile B folders so that the photographers could easily find the correct place to copy their pictures to. At this point I was done with the 3 photographers computers, by the end of the show photographers had installed Infranview and other tools to help them edit and cull their photos.

On the librarian computer we install the latest version of Adobe Lightroom and use it in the 30-day trial mode. Next up is importing the keyword list provided by the show into Lightroom, this gives us a controlled vocabulary for keywording making pictures easy to find later on.

Then in Lightroom install the latest version of Jeffrey Friedl’s Folder Watch Plugin, this is the tool that automatically imports any new pictures found in watched folders into Lightroom, it is really amazing how quickly and reliably this works.

Then we use the Windows Sync Toy and Windows Task Manager to keep the primary and secondary drives in sync so that at the end of the show we can turn over the primary A and B drives to the show and keep the backup A and B drives for the photography team’s use.

Here is my updated checklist:

  1. Verify that each computer has a unique network name/id
  2. Run Windows Update and install all updates
  3. Update video card drivers if they are separate from Windows Update
  4. Verify that all computers are using the same type of networking so they can see each other, in Windows 7 a homegroup network is easiest http://windows.microsoft.com/en-us/windows7/start-here-to-set-up-a-home-network-in-windows-7
  5. External Drives
    1. Attach the primary and backup drives to the librarian computers
    2. Format and name the external drives and name them
      1. Pile A
      2. Pile A Back
      3. iPile B
      4. iv. Pile B Back
    3. On the Pile A drive make new directories named Pile A and Lightroom A
    4. On the Pile B drive make new directories named Pile B and Lightroom B
  6. Sync’ing
    1. Here is a great article that walks through setting up sync’ing
      http://www.techrepublic.com/blog/it-consultant/configure-automated-backups-using-synctoy-and-windows-7s-scheduled-task/
    2. Install the latest version of Sync Toy
      1. http://www.microsoft.com/en-us/download/details.aspx?id=15155
    3. Set up a New Folder Pair in Sync Toy to keep the primary and backup drives in sync, use Echo so that changes to the primary drive are copied to the backup drive but not from the backup to primary
    4. Use Windows Task Manager to run Sync Toy every 10 minutes
    5. Verify at least once a day that the sync’ing is occurring successfully, but the primary and backup drive should have the same number of files in the Pile directories
  7. Lightroom
    1. Install the latest version of Lightroom and choose the 30-day version when launching it
    2. Preferences – “Lightroom > Preferences”
      1. General
        1. Uncheck “Automatically check for updates”
        2. Unchesk “Show splash screen during startup”
        3. Choose the correct DragonCon default library
        4. Uncheck the “Select the “Current/Previous Import””
        5. Turn off all completion sounds
    3. Remove all of the modules except for Library and Develop. Right-click the top toolbar and uncheck the unneeded modules.
    4. Then import keywords, “Metadata > Import Keywords”. Verify that the full keyword list is available in the “Keyword List” panel. More information about keywording in Lightroom is available at http://adobe.ly/148Icbo
    5. Setup Jeffrey Friedl’s Folder Watch Plugin
      1. http://regex.info/blog/lightroom-goodies/folder-watch
      2. Lightroom “File > Plug-in Manager”
        1. Choose “jf Folder Watch”
        2. Choose the parent folder on the Pile
          1. Defaults are good with the following exceptions (If desired “Apply meta data preset, covered elsewhere)
      3. Choose “Watch”
      4. Choose “Restart on Launch”
      5. Choose “Show Splash on Launch”
    6. f. Then create a new library named “dragoncon-2014-pile-a” or “dragoncon-2014-pile-b” and save it into the “lightroom a” or “lightroom b” folder on the attached primary external drive
  8. Testing
    1. Use a non-librarian computer to drop a couple of pictures into Pile A and Pile B
      1. Verify these pictures appear in Lightroom on the expected librarian computer
      2. After a period of time verify that the pictures and updated Lightroom library appear on the backup drives
    2. At least once a day check the primary and secondary drives to verify that they are in sync

We are always looking for better ways to handle the 30,000 plus pictures we collect at DragonCon, if you have any big ideas please let me know.

The Elder Scrolls V: Skyrim

I burnt myself out trying to learn to many JavaScript frameworks, build tools, unit testing, Debian eccentricities and BeagleBone Black programming so I decided to take a break and play a video game. Steam was having their summer sale and Skyrim happened to be a great deal. I bought "The Elder Scrolls V: Skyrim – Legendary Edition" and have been playing it for a couple weeks now.

Back in 2011 when The Elder Scrolls V: Skyrim was released I remember reading and hearing from a lot of friends, acquaintances, and internet personalities who played it and talked about it for weeks on end. So my interest was peeked, but I didn’t have time or the desire to play it then.

The world of Skyrim is amazingly large. I was shocked by the sheer size of it. The developers have a done a great job making traveling from place to place very fast and easy. You can walk, run, take a carriage, ride a horse, or if you have been to your destination before you can "fast travel" to it. When fast traveling even though you get there very quickly the time in the game passes as though you had walked or ridden a horse that same distance, so the sun may be down or the shops may be closed.

Time plays a really large roll in the game, night and day is a big deal and change a lot of what is going on. Vendors are only available between 8am and 8pm, vampires are roaming around in the dark, werewolves are prowling the night, thieves and assassins abound.

Indulging in the role-playing aspects of the game I have tried to do my usual straight-and-narrow play through. When playing old-school pen-and-paper games I enjoy being the paladin, in this game I played a Wood Elf with a strong right hand wielding a sharp sword and bow for fighting at a distance.

Anything is allowed in this game, there are opportunities to be a goodie two-shoes (how I play) or to be a total scoundrel, there are even rewards for both. You can even choose to be a cannibal by completing a quest, personally I ended that quest short with an arrow to her head as soon as possible.

I really enjoyed the dungeon crawling, bandit fighting, dragon slaying, vampire hunting, and exploring Skyrim. I did not enjoy all of the bugs, dead ends, and lack of help in the game.

No matter how hard I tried not to, I ended up going to The Elder Scrolls Wiki and The Unofficial Elder Scrolls Pages to figure out what was going on and how to work around bugs in the game. And man there are a lot of bugs, I pity the people who are playing on Playstation and Xbox machines where they do not have the luxury of entering console commands to fix things.

Now I am 135 hours into with my Wood Elf Bowman and having a great time with it. I have played through most of the main quests that do not require me to do anything that would tarnish my good guy reputation. I have not been a werewolf , an imperial or stormcloak soldier, or a vampire. I have adopted 2 orphans, have nice houses in Whiterun and Solstheim and have built a wonderful lakehouse outside of Falkreath that I call home.

I am level 99 out of 100 with a single-handed weapon and around 85 with the bow. Enchanting and Smithing are both at 100 with lots of perks that have allowed me to construct some awesome dragon armor and weapons with tons of helpful enchantments that have made all but the toughest opponents easy to set right. I started out the game kind of wobbly and found it very hard, I had to rely on a lot of potions and scrolls to stay alive, but with my crafted armor and weapons I now only carry a handful of healing potions and no scrolls at all. Dragonbone arrows with a paralyze/health absorbing bow is an awesome combination.

Before I stop plying Skyrim I plan on getting married, buying all of the available hold houses, building the other 2 available country houses, and clearing more of the dungeons and mines in Solstheim.

I am playing Skyrim on a 27" iMac running Windows 8 in Bootcamp. This computer is so amazing, the mSATA drive is so fast that I rarely got to see the loading screens, which was kind of annoying because the loading screens contain a lot of information that adds to the game… hahaha, first-world problems abound.

From the publisher:

EPIC FANTASY REBORN
The next chapter in the highly anticipated Elder Scrolls saga arrives from the makers of the 2006 and 2008 Games of the Year, Bethesda Game Studios. Skyrim reimagines and revolutionizes the open-world fantasy epic, bringing to life a complete virtual world open for you to explore any way you choose.

LIVE ANOTHER LIFE, IN ANOTHER WORLD
Play any type of character you can imagine, and do whatever you want; the legendary freedom of choice, storytelling, and adventure of The Elder Scrolls is realized like never before.

ALL NEW GRAPHICS AND GAMEPLAY ENGINE
Skyrim’s new game engine brings to life a complete virtual world with rolling clouds, rugged mountains, bustling cities, lush fields, and ancient dungeons.

YOU ARE WHAT YOU PLAY
Choose from hundreds of weapons, spells, and abilities. The new character system allows you to play any way you want and define yourself through your actions.

DRAGON RETURN
Battle ancient dragons like you’ve never seen. As Dragonborn, learn their secrets and harness their power for yourself.

I rate The Elder Scrolls V: Skyrim a 9 out of 10 even with the bugs and dead ends, the overall experience is just that good. I recommend it to any who enjoys fantasy role-playing but also first-person-shooter fans.

Learning Adobe Edge Animate CC by Tony Ross

Learning Adobe Edge Animate CC training video from Infinite Skills Inc. featuring Tony Ross is a great place to start learning Adobe Edge Animate.

I found Tony’s voice easy to listen to, his explanations easy to understand, and the video of the computer screen easy to read and follow.

Half way through the video I built my first animation, it’s good stuff.

Edge Animate has a lot of problems as an application, it is definitely going to improve as new versions are released, and this video does nothing to highlight those problems and steer you clear of them. But the video is definitely worth watching closely. You can learn about the bugs and limitations somewhere else.

I think Tony Ross and Infinite Skills did a great job making a training video that can get anyone familiar with other Adobe applications up and running in Adobe Edge Animate.

I rate Learning Adobe Edge Animate CC an 8 out of 10 and recommend it to anyone looking to learn how to use Adobe Edge Animate.

BeagleBone Black WiFi Adapter (WNA1100)

Boris, the BeagleBoard Logo Mascot

Boris, the BeagleBoard Logo Mascot

I initially bought an Edimax EW-7811Un Dongle for use with my BeagleBone Black (BBB), but after a lof of fiddling and frustration I gave up on it. Turns out that I may have been using the wrong setting in the interfaces file, but after some research I found many instances of people complaining about the Edimax dongles in general, so I started looking for solutions that others were having good luck with.

Along with a lot of email threads I found WiFi Adapter http://www.elinux.org/Beagleboard:BeagleBoneBlack#WIFI_Adapters recommendations on the Embedded Linux Wiki BBB page. http://www.elinux.org/Beagleboard:BeagleBoneBlack After searching Amazon for the listed adapters I chose the NETGEAR N150 Wi-Fi USB Adapter (WNA1100) http://www.amazon.com/gp/product/B0036R9XRU/ref=oh_details_o00_s00_i00?ie=UTF8&psc=1 for $17.50, not the cheapest of the bunch but it comes with a "Desktop Dock" that is basically an USB extension cable which sounds good to me as it will let me place the adapter a distance away from the BBB to get the best WiFi signal.

With the latest build of Debian I was able to get the WNA1100 adapter to work just by editing the interfaces file and rebooting the BeagleBone. Pretty awesome!

Steps

  1. Plugged the BBB into the computer with a USB cable and plugged in a power supply.
  2. Logged into the BBB with the root account with my “fish” "ssh fish@192.168.7.2"
  3. # sudo nano /etc/network/interfaces and edited the "WiFi Example" to match my network ID and password

This is what the finished WiFi part of the file looks like:

# WiFi Example
auto wlan0
iface wlan0 inet dhcp
     wpa-ssid "ssid"
     wpa-psk  "password"

And BANG! it worked. I am now enjoying WiFi with my BeagleBone Black!

Unable to Connect to BeagleBone Black via Ethernet

Unable to Connect to BeagleBone Black via Ethernet

Everything works fine when the BeagleBone Black is connected to a computer via USB but when connected to the network via Ethernet it does not work. I ran into this issue when I first started using my BeagleBone Black out-of-the-box and again when I updated the OS to Debian.

Here is the solution:

  1. Connect the BBB to your computer via USB and give it time to boot
  2. In a web browser open the Cloud9 IDE by going to http://192.168.7.2:3000/. You may be prompted to choose some settings, I like the defaults.
  3. Create a new file, paste in the script below, and run it
    var fs = require("fs");
    var destroyed_key_file = "/etc/dropbear/dropbear_rsa_host_key";
    fs.readFile(destroyed_key_file, function (err, data) {
      if (err) throw err;
      if( data===null || data.length===0 )
      {
        console.log("we have a corrupted host key file... try do delete it");
        fs.unlink(destroyed_key_file, function (err) {
        if (err) throw err;
            console.log("successfully deleted " + destroyed_key_file);
            console.log("you should now reboot your beaglebone.");
            console.log("the /etc/init.d/dropbear script will create a new rsa host key file for you.");
            console.log("after the reboot you should be able to login over ssh");
        });
      } else {
          console.log("it seems that you have another problem, sorry");
      }
    });
    
  4. Now shutdown, I like to sudo shutdown -hP now, the USR lights will all go out when it is shut down
  5. Now you can unplug the BBB from USB and plug in an Ethernet cable and power adapter.
    1. You should now be able to access the BBB from anywhere on your network using http://beaglebone.local or ssh beaglebone.log.

      Thanks to https://groups.google.com/forum/?fromgroups=#!msg/beagleboard/Ya2qE4repSY/u4lvOjF66JEJ

Remote Host Identification Has Changed!

After updating the operating system to Debian and plugging in your BeagleBone Black via USB you may receive the error message:
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

This is normal as the RSA key has changed when you updated the OS.

The easiest way to fix it is to run ssh-keygen -R then try connecting again.

When connected via USB
ssh-keygen -R 192.168.7.2
ssh debian@192.168.7.2

When connected via Ethernet
ssh-keygen -R beaglebone.local
ssh debian@beaglebone.local

You should then be asked to add the new fingerprint to your "known hosts", say yes and you should then be asked for your Debian password who’s default is temppwd.

And your in debian@beaglebone:~$.

Thanks to http://blog.tinned-software.net/ssh-remote-host-identification-has-changed/

Setting up Debian on a BeagleBone Black

This post is about installing Debian (BeagleBone Black – 2GB eMMC) 2014-03-27 and Flashing the eMMC using a Mac running OSX 10.9 Mavericks.

I decided to get a head start on using Debian with the BBB which is soon to tbe the default OS installed on them.

These are the steps I used today to get up and running:

  1. Download image from http://beagleboard.org/latest-images
     – BBB-eMMC-flasher-debian-7.4-2014-03-27-2gb.img.xz
  2. Use Unarchiver to extract disk image
     – BBB-eMMC-flasher-debian-7.4-2014-03-27-2gb.img
  3. Download PiFiller to copy the disk image to the SD card
     – http://ivanx.com/raspberrypi/
    WARNING: Do not insert the SD card yet, PiFiller will tell you when
  4. Run PiFiller and follow the directions
    1. Choose the disk image
    2. Insert the SD card
    3. Verify that PiFiller has found the correct device
    4. Some more verifying, click OK a couple of times
    5. Now wait awhile, it took about 20 minutes on my MacBook Pro
      Holy Cow! The dialog box opening and closing gets really annoying to watch!
    6. All set when you get the “Your SD card is ready” message
  5. Eject the SD from the Mac OS then remove it from the computer
  6. With the BBB unplugged, no network, USB, video, power cables, insert the SD card into the BBB
    WARNING: The SD card pokes out of the back of the BBB enough that it is easy to bump it and cause it to eject. Especially when plugging in a USB or HDML cable. It pays to be slow and patient when manipulating the BBB with an SD card in place.
  7. Get ready: When plugging in the BBB you will need to hold down the Boot button until all 4 USR lights turn on
     – While holding down the Boot button insert a 5V 2A power supply, release the Boot button when all 4 USR lights turn on
  8. Now the USR buttons should start blinking in a seemingly random pattern, this should go on for 20 to 60 minutes depending on the OS and SD card
  9. When the USR lights all light-up again the eMMC has been flashed with Debian
  10. Remove the power adapter
  11. Remove the SD card

You are now ready to plug-in the devices you want to work with and enjoy Debian

More information about installing operating systems on the BeagleBone Black:
http://beagleboard.org/Getting%20Started#update
http://learn.adafruit.com/beaglebone-black-installing-operating-systems/overview

BeagleBone Black Microcontroller

Boris, the BeagleBoard Logo MascotI recently bought a BeagleBone Black (BBB) and am having a great time with it.

From the website beaglebord.org:

BeagleBone Black is a $45 MSRP community-supported development platform for developers and hobbyists. Boot Linux in under 10 seconds and get started on development in less than 5 minutes with just a single USB cable.

What I Bought

I bought my BBB from Makershed as a part of a kit which included the book Getting Started with BeagleBone by Matt Richardson and a handful of electronic components. The kit is not bad, but I feel like it is overpriced, especially for someone who has a lot of components already.

I recommend the book as a good starting point, it does a great job of introducing the basics of the board and using Python and JavaScript to program it. There aren’t many other books out there, but I am not sure there needs to be.

I also bought a power supply, a very cool case, and a wi-fi dongle from Amazon.

The power supply is very basic one that provides the 2 amps necessary to power the BBB with a Wi-Fi dongle attached. Power Adapter DC 5V, 2A, 10W for BeagleBone Black at Amazon

I don’t have much to say about the Wi-Fi dongle yet as I haven’t tried to use it, I will write more about it when I do. It is small and was only $10 so I happy with it so far. Edimax EW-7811Un 150 Mbps Wireless 11n Nano Size USB Adapter with EZmax Setup Wizard

The case is pretty awesome. It is very well made and lets you see right into the board with risers for the buttons that make it much easier to press them. The BegaleBone Black should ship with a case like this. It looks like Laser Goodies has pulled their products from Amazon, or maybe they are just out of stock, here is the page on their website Beaglebone Black Slim Case – Clear

Laser Goodies Beaglebone Black Slim Case - Clear

Laser Goodies Beaglebone Black Slim Case – Clear

Why I Bought It

I regularly attend the wonderful Atlanta JavaScript Meetup group and a couple of weeks ago Tim Kadom of Thoughtworks showed us his Telepresence robot built with a BeagleBone black and an iPhone. All of the code was written on the BBB with the Cloud9 IDE in JavaScript. I was seriously intrigued.

I have been playing with Ardunio microcontrollers for awhile now and really like them. But they require that you program in their own C like language which I can muddle through but don’t really like. And it is not easy getting an Ardunio on a network, the code to make Ethernet, Wi-Fi, or Bluetooth to work doesn’t leave much space for your own ideas.

The Rasberry Pi on the other hand just doesn’t speak to me. I am more interested in them now that I have spent some time with a BeagleBoard, but I still don’t think I have much of a use for a Rasberry Pi right now.

With the BeagleBone it appears that I get all of the inputs and outputs of an Arduino while having all of the network abilities of a Rasberry Pi that I can program using JavaScript. That really gets me excited!

In the coming weeks I will be posting more about the BeagleBone Black and the project I am working towards.

Getting Started with BeagleBone by Matt Richardson

After seeing a really cool telepresence robot using a BeagleBone at an Atlanta JavaScript Meetup I just had to get one.

I ended up buying a Beagle Bone Black (BBB) from MakerShed in a kit that included some components and a paperback of Getting Started with BeagleBone.

While waiting for the BBB to arrive I started reading the book on Safari Books Online and ended up never reading more than a couple of pages from the printed book. I was more comfortable reading the book on an iPad using the Safari Books Online app.

This is a very good “Getting Started” book. Its purpose is to build familiarity and confidence for someone who has not used a BBB before, and it does that very well. So well that even before I was done with it I had a ton of plans for my BBB including updating the OS from Angstrom to Debian, adding an NTP server, and a lot more.

Now I am planning on creating a remote home automation system for our garage doors.

From the publisher:

Many people think of Linux as a computer operating system, running on users’ desktops and powering servers. But Linux can also be found inside many consumer electronics devices. Whether they’re the brains of a cell phone, cable box, or exercise bike, embedded Linux systems blur the distinction between computer and device.

Many makers love microcontroller platforms such as Arduino, but as the complexity increases in their projects, they need more power for applications, such as computer vision. The BeagleBone is an embedded Linux board for makers. It’s got built-in networking, many inputs and outputs, and a fast processor to handle demanding tasks. This book introduces you to both the original BeagleBone and the BeagleBone Black and gets you started with projects that take advantage of the board’s processing power and its ability to interface with the outside world.

I rate Getting Started with BeagleBone a 10 out of 10 and recommend it to anyone as a first exposure to the BBB.

Metro: Last Light by 4A Games

I played the first Metro game, Metro 2033, and thought it was pretty good so when I saw Metro: Last light on sale at Steam I decided to give it a try.

The Metro games are based on books written by Dmitry Glukhovsky; which I have not read. After playing both of these video games I will probably not read them… It is not my kind of story. I am not really a big fan of the Horror-Survival genre but somehow I have found myself playing a few of them.

Metro: Last Light was ok but nothing great, I am surprised that it received Gamespot’s Editor’s Choice Award in 2013. I guess there weren’t that many good games in 2013.

In both of the games I was seriously annoyed by all of the cut-scenes and times that I was not in control of the character. It felt like there was very little time spent playing with a lot of time just watching, BORING!

To top it off there were no guns in the game that really excited me, they were mostly ok, but nothing special at all.

In 9 hours I played through the entire game at Normal settings and I really do feel like I spent as much time passively watching cut-scenes as I spent playing.

The graphics are gorgeous though, I played it on a Late 2013 27" iMac with very high settings and it was smooth and beautiful throughout.

From the publisher:

It Is the Year 2034.

Beneath the ruins of post-apocalyptic Moscow, in the tunnels of the Metro, the remnants of mankind are besieged by deadly threats from outside – and within. Mutants stalk the catacombs beneath the desolate surface, and hunt amidst the poisoned skies above.

But rather than stand united, the station-cities of the Metro are locked in a struggle for the ultimate power, a doomsday device from the military vaults of D6. A civil war is stirring that could wipe humanity from the face of the earth forever.

As Artyom, burdened by guilt but driven by hope, you hold the key to our survival – the last light in our darkest hour…

I rate this game a 6 out of 10 and only recommend it to the desperate.

Delicious Library 3

Delicious Library 3 WebsiteMy wife and I read a lot of books. Now that our son has gotten a little older and needs less attention, I go through more than a book a week on average, Bobbie doesn’t go through as many books in number, but she is reading much larger non-fiction books and taking copious amounts of notes.

Many years ago I bought Delicious Library 2 (DL2) as a part of a bundle deal. Bobbie and I used it to catalog all of our fiction and collectable books. It worked well enough and with some simple PHP and YUI coding I built a simple web page we could use on our phones to check our library while out and about.

Then disaster struck, I reformatted/re-installed all of our computers and updated them to the latest version of the Mac OS. I thought I had backed everything up, but apparently Delicious Library’s database was not.

Lately Bobbie has been asking me about how to update the Library page with the new books we have purchased. I did another round of research for library software and came to the decision to buy and use Delicious Library 3 (DL3).

I bought it from the Apple App Store, which means it can run on all of our machines and it will stay up-to-date via the App Store app.

The great news is that even though I had lost the DL2 database, DL3 was able to import the CSV file I was using on our website and retrieve the information for the 450+ plus books that were in it from Amazon. That was pretty amazing and made me very happy.

Also, the iPhone app Delicious Scanner worked great for me successfully scanning about 75% of the books that had barcodes in our library. I was kind of surprised how well it worked, DL2 was not nearly as successful using the iSight camera on a laptop. I was also surprised by how many books we have that do not have any kind of bar code or even an ISBN code, a lot of Bobbie’s antique books predate ISBN.

The good news is that scanning the rest of the books went faster than I expected and DL3 did a good job of finding the books on Amazon with a little bit of manual help. DL3 is not fully automatic; I don’t think any book library app could be, there is always going to be manual work involved. Adding the meta-data that is important to us like the name of the Series that a book is a part of, the book’s number in the series, and the character name’s that appear in the book is always going to be manual because what is important to us is not going to be important to everyone.

The bad news is the DL3 is still burying its database in a proprietary format in a deeply hidden corner of your computer. There is still no way for multiple people to collaborate on a single library, you can export/import libraries but it is very klunky and if every book does not have an associated ISBN or Amazon code you are bound to have duplicate entries. And the templates for exporting an HTML version of your library are absolutely useless!

The HTML output and even the default interface of DL3 makes me very sad and frustrated. The developers/designers of the app spent all this time on graphics, 3D effects, and a multitude of wood grains instead of on the usability of the app.

This is what we need from a library app:

  1. Easy book entry
  2. Easy to find a book in the library

Delicious Library 3 is awesome at book entry, that part fits my needs almost perfectly. The only thing that would make it better is integration with data sources other than Amazon.

DL3 Bookshelf ViewWhen it comes to finding a previously entered book, the DL3 app on the desktop works ok. The default 3D Bookshelf view with the books on a shelf (duh) is absolutely worthless for this, it makes it almost impossible to scan through the books and the cover from Amazon may not match the cover of the real book on your shelf making it counter-productive.

Switching to List view improves the situation a lot. You can control what fields/columns are visible and sort the columns.

DL3 Search ResultsOh wait; right there in the top left is search box. Well that should help right? WRONG, when you enter text in that box it displays the results in a pop-up with a fixed width that truncates the book titles to the point that they are useless.

I am going to stop complaining right there. Delicious Library has a lot of usability issues that will apparently never be addressed, lets move on to why it is still a very useful app.

You can output a CSV file!

DL3 Export a CSVI have written a little PHP file that takes the CVS file that DL3 outputs and makes a very simple HTML table with the data. Then I use jQuery and a couple libraries to make the table sortable, searchable, and filterable.

The PHP is not very efficient, if we had many more books the JavaScript/jQuery would be to slow to be useful, and having it all in a database would make it easier to do some other cool stuff with the data. But for now the simple PHP and JavaScript fit our needs and give us a great interface into our book library.

My Simple Library

My Simple Library

Here is my UGLY PHP:


<?PHP
$firstRow = true;
$file_handle = fopen("export.csv""r");
while (!feof($file_handle) ) {
    $line_of_text = fgetcsv($file_handle1024);
    $author = $line_of_text[1];
    $title = $line_of_text[4];
    $series = $line_of_text[2];
    $subtitle = $line_of_text[3];
    if ($author == "") {
        $author = " ";
    }
    if ($title == "") {
        $title = " ";
    }
    if ($series == "") {
        $series = " ";
    }
    if ($subtitle == "") {
        $subtitle = " ";
    }
    if ($firstRow == false) {
        if ($line_of_text[0]) {
            print "" . $author . "" . $title . "" . $series . "" . $subtitle . " ";
        }
    } else {
        $firstRow = false;
    }
}
fclose($file_handle);
?>

I am using jQuery 2.0.2 and tablesorter with the Zebra and Filter widgets.

Here is the JavaScript, it is almost entirely cut and paste from the tablesorter web page:


$(document).ready(function()
    {
        $("#myTable").tablesorter({
          theme : 'blue',
          sortList: [[0,0], [1,0]],
          widgets: ["zebra""filter"],
          widgetOptions : {
            // If there are child rows in the table (rows with class name from "cssChildRow" option)
            // and this option is true and a match is found anywhere in the child row, then it will make that row
            // visible; default is false
            filter_childRows : false,
            // if true, a filter will be added to the top of each table column;
            // disabled by using -> headers: { 1: { filter: false } } OR add class="filter-false"
            // if you set this to false, make sure you perform a search using the second method below
            filter_columnFilters : true,
            // css class applied to the table row containing the filters & the inputs within that row
            filter_cssFilter : 'tablesorter-filter',
            // class added to filtered rows (rows that are not showing); needed by pager plugin
            filter_filteredRow   : 'filtered',
            // add custom filter elements to the filter row
            // see the filter formatter demos for more specifics
            filter_formatter : null,
            // add custom filter functions using this option
            // see the filter widget custom demo for more specifics on how to use this option
            filter_functions : null,
            // if true, filters are collapsed initially, but can be revealed by hovering over the grey bar immediately
            // below the header row. Additionally, tabbing through the document will open the filter row when an input gets focus
            filter_hideFilters : false// true, (see note in the options section above)

            // Set this option to false to make the searches case sensitive
            filter_ignoreCase : true,
            // if true, search column content while the user types (with a delay)
            filter_liveSearch : true,
            // jQuery selector string of an element used to reset the filters
            filter_reset : 'button.reset',
            // Delay in milliseconds before the filter widget starts searching; This option prevents searching for
            // every character while typing and should make searching large tables faster.
            filter_searchDelay : 300,
            // if true, server-side filtering should be performed because client-side filtering will be disabled, but
            // the ui and events will still be used.
            filter_serversideFilteringfalse,
            // Set this option to true to use the filter to find text from the start of the column
            // So typing in "a" will find "albert" but not "frank", both have a's; default is false
            filter_startsWith : false,
            // Filter using parsed content for ALL columns
            // be careful on using this on date columns as the date is parsed and stored as time in seconds
            filter_useParsedData : false,
            filter_onlyAvail : 'filter-onlyAvail'
          }
        });
    }
);

If you are looking for a way to keep track of your books, give Delicious Library 3 a try. So far it is working well for us.

Maintainable JavaScript by Nicholas C. Zakas

Maintainable JavaScript by Nicholas C. Zakas

Maintainable JavaScript by Nicholas C. Zakas

I read this book using Safari Books Online using various laptops and an iPad.

This is an amazing book.

Following a style guide while programming is common in many languages, but for me it is a new idea in JavaScript. Reading Douglas Crockford’s Style Guide http://javascript.crockford.com/code.html can teach you a lot, but Maintainable JavaScript teaches you not only the how, but also the why.

This book does focus on following a style guide but it also includes how to set-up and use a build system with your JavaScript. I can’t wait to start putting that information to use. As a front-end developer I have not used a build system.

Nicholas also has a great presentation available that covers many of the topics in the book on SlideShare at http://www.slideshare.net/nzakas/maintainable-javascript-2012

From the publisher:

You may have definite ideas about writing code when working alone, but team development requires that everyone use the same approach. With the JavaScript practices in this book—including code style, programming tips, and automation—you’ll learn how to write maintainable code that other team members can easily understand, adapt, and extend. Author Nicholas Zakas assembled this collection of best practices as a front-end tech leader at Yahoo!, after completing his own journey from solo hacker to team player.

I rate this book a 10 out of 10 and recommend it to anyone who has moved beyond beginner JavaScript.

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.

Apple Pop-Up Museum and Vintage Computer Festival

Last weekend I attended the Vintage Computer Festival and Apple Pop-Up Museum at the empty CompUSA store off of Holcomb Bridge Road. It was nice to see someone doing something with one of these abandoned storefronts.

It was great fun seeing all of the old Apple, Commodore, Atari, and other computers and gaming consoles. It all made me very nostalgic, but not so much as I would trade in any of my current computers for any of them. It was really amazing what we were able to produce using those old machines.

And good news, the Apple Pop-Up Museum is going to be open 2 additional Saturdays, May 18 and June 8.

About the Vintage Computer Festival:

The Vintage Computer Festival is an international event that celebrates the history of computing.

The mission of the Vintage Computer Festival is to promote the preservation of "obsolete" computers by offering folks a chance to experience the technologies, people and stories that embody the remarkable tale of the computer revolution.

Through our event and the Vintage Computer Festival Archives—our publicly accessible archive of computer hardware, software, literature and ephemera—we promote interest in researching and documenting the history of the computer. Above all, we promote the fun of playing with old computers.

About the Apple Pop-Up Museum:

The exhibit displays an exclusive collection of game-changing Apple personal computers and consumer electronics products while presenting the history of the company since its founding in 1976 to the present. An Apple I, the first disk II and controller card, an original Apple II, an original Lisa and a Xerox Alto are among the rare artifacts to be displayed.

Check out more pictures from the Museum and Festival: http://photo.davenelson.com/Events/2013-Apple-Pop-Up-Museum/29080622_ZnCzzN

Portal 2 Video Game

I really enjoyed the first Portal video game, it was a much needed break from the first person shooters I had been playing that were focused on violence.

Portal did not disappoint, the levels grew progressively harder as the game went on and the payoff at the end was spectacular. The GLaDOS song at the end of the game is fantastic.

Now we have Portal 2, I played it using Steam from Valve on a MacBook Pro. There were no slowdowns, frame-drops, or stutters during the game, and the audio was great.

It took me about 50 hours to play through the game, there were only a couple of levels where I got stuck and spent more than 20 minutes trying to get past. There were also plenty of levels where I died a number of time, but death in Portal is no big deal, you start over in the same puzzle close to the place where you dies, you even get to keep a lot of your progress in many of them.

Another great feature of Portal 2 is that it is easy to create your own puzzles and share them with the world. There are tons of player created levels available to play and they are a great way to add re-playability to the game.

From the Portal 2 web site:

The sequel to 2007’s Game of the Year, Portal 2 is a hilariously mind-bending adventure that challenges you to use wits over weaponry in a funhouse of diabolical science.

Using a highly experimental portal device, you’ll once again face off against a lethally inventive, power-mad A.I. named GLaDOS. And this time you won’t be alone. Meet an expanded cast of characters as you think your way through dangerous, never-before-seen areas of Aperture Laboratories.

Break the laws of spatial physics in ways you never thought possible, with a wider variety of portal puzzles and an expansive story that spans a single player and co-operative game mode.

I rate this game a 9 out of 10 and recommend it to anyone who loves first person shooters and puzzle games.