Passwords are your keys to online services and all services are not secured equally. These days it is not unheard of for a large company to be compromised and sharing a password across services will make you vulnerable.

For ideal password security your passwords should be:

  • random, a jumble of letters and numbers and symbols
  • long, short passwords can be brute force guessed
  • memorised, written passwords can be found
  • unique, if one password is found out your others are safe

We make compromises on the above to make them more convenient to use. Previously I thought it more important that my passwords be memorised, so I used 3 passwords for different levels of security. After some troubling data breaches I decided to update all my passwords to make them unique.

To achieve this uniqueness I used a password database or password manager. I didn’t previously use this because it was a single point of security failure, however it is a compromise I am now willing to make to address the more likely risk and I would recommend for others concerned about recent data breaches.

KeePass is the one I chose to do this for the following reasons:

  • Open source, this makes the code safe through peer code review
  • No automatic upgrade, new code is not assumed to be equally safe as current
  • Stored locally, online storage opens up risk and many provider have been previously compromised
  • Many password database security options, I have secured mine with a strong master password and also a key file. If I decide to sync online it should make it exponentially more difficult to break in to.

Website: http://keepass.info/

In the past I have used Subversion for version control but having to have a repository somewhere put me off from using it on many projects. Git was created in 2005 by Linus Torvald and Linux developers to address their needs for distributed version control.

Git makes it trivial to have a local respository, so when I rework code to be better sturctured or more efficient I can rest assured that the previous working code can be reverted to if it breaks everything.

On Windows 7 I have installed TortoiseGit which integrates nicely with Explorer. Right click on any directory and select “Git Create repository here…” to start and icons will visually show the status of affected files.

You can push your repository to another remote repository for collaborated projects or for deployment.

I use this for deploying projects on to my web host with the following setup.

Create a bare Git repository to receive push to production:
mkdir www.git
cd www.git
git init --bare

Create the production directory, in this example should be “/home/username/www”
cd ..
mkdir www

Add the file “/home/username/www.git/hooks/post-receive” with the following ensuring that GIT_WORK_TREE is the one create above:
#!/bin/sh
GIT_WORK_TREE=/home/username/www
git checkout -f

Make the new script executable:
chmod +x /home/username/www.git/hooks/post-receive

To setup your development side to push to this new deployment repository:
git remote add live ssh://webhostname/home/username/www.git
git push live +master:refs/heads/master

Or in TortoiseGit use the “TortoiseGit >> Push…” and add the remote destination as above.

From then on this information is stored in the development repository and you can just call:
git push live

Turning your Perl into a Windows Executable lets you distribute a program and not have to worry about having perl installed and managed on the target system.

Using this method does not “compile” the perl, meaning that the source is still accessible and also there is no improvement on performance, in fact there will be a tiny overhead for unpacking and setting up the environment to run.

I am using Strawberry perl which is my preferred package of Perl for Windows.

You will need the PAR::Packer module which you can install from CPAN. Bring up the CPAN shell with the command “cpan” at your Perl Shell or Command Prompt. Within CPAN shell run the command “install PAR::Packer”.

With any luck this will work without a problem but I stumbled upon a few errors during this step. Check that your Strawberry perl shell has PATH of your installation strawberry/perl/site/bin, strawberry/perl/bin and strawberry/c/bin. They MUST appear ahead of any other path with MINGW compiling tools.

When this module is installed an program called “pp” will be available in strawberry/perl/site/bin.
pp perl_program.pl -o program_executable.exe

Before you run the above command you will likely need to disable virus scanning shields. For me Avast! caused an executable name “parlXXXXX.exe” to become frozen without any warnings.

Links are a shortcut for a file or directory which tells any programs that use it where the real location is. Using Links you can access files from multiple locations even across different hard drives.

These are useful for moving physical location of files yet allowing existing software to work with the existing file location.

There are 3 kinds of links in Windows 7, soft links, hard links and Junctions. I found that some software doesn’t handle soft links very well and also Explorer doesn’t distinguish hard links from normal directories, so Junctions worked best for me.

In my case, I installed a Solid State Harddrive (SSD) as the boot partition and some rarely used programs and larger program data were moved to the older Harddrive.

If you have used Linux you may be familiar with the following command to make soft links.
ln -s real_location new_link_location

The equivalent command for Windows 7 to make soft links in Command prompt
mklink /D new_link_location real_location

The command for Windows 7 to make a directory junction in Command prompt
mklink /J new_link_location real_location

Here is an example from one I did recently.

C:\Program Files (x86)>mklink /J "Finale NotePad 2012" "D:\SSDLink\Program Files (HDD)\Finale NotePad 2012"
Junction created for Finale NotePad 2012 <<===>> D:\SSDLink\Program Files (HDD)\Finale NotePad 2012

Update June 2021: I have finally created an application to Manage Directory Junctions to Offload from my SSD.