12 April 2017

Windows: Clear Disk Space

Left to its own devices, Windows will happily fill up whatever drive you put it on. Latest versions are better, but still leave unnecessary bloat around e.g. Windows Updates. Cleaning up these files is particularly important when you are running virtuals.

Where Is Space Being Used

Use a program like TreeSize Free to find where your space is used up.

Clean Up Disk

Use "Disk Cleanup" program included in Windows to clear space on drive C. 
NB You'll need to run it twice: once as normal used, then select 'Clean up System Files' to run it again and review the options.

Clean Up WinSxS

Windows keeps removable files in C:\Windows\WinSxs which is often quite large.
Using a command prompt as admin:
Dism.exe /online /Cleanup-Image /StartComponentCleanup

13 March 2017

Mac: Dual Boot With Windows 10

NB: This procedure has the potential to render your machine useless. Make sure you have external backups of your data and OSX install media before you begin.

Run Disk Utils Disk First Aid

You need to do this to check for errors. If there are any you'll have to fix them first.
In my case that meant:

  • Running at boot time via restart with Cmd R held down. 
  • Restoring from my Airport Extreme Time machine backup
  • Re-installing MAC OSX from the local backup as I'd excluded Applications from the TM backup.
Boring but still, after all that my machine was back up.

Install Windows

  • Open Bootcamp and run through the procedure to 
    • Download and create a bootable Windows USB drive
    • Introduce a new Windows partition
  • Once that's done, you can boot from the USB (Power on with Alt/Option key held down)
  • Install Windows, delete the Bootcamp partition and create new partitions using Windows' Setup (create's two: Drive 0 Partition 4 and Drive 0 Unallocated Space). See the note below.
A note on partitions: After installing Windows I found the install failed with a message about being unable to write to the Boot partition. Some people online suggest doing the procedure twice: Bootcamp partition, install, fail to write, 2x PRAM reset, destroy the partition using Bootcamp, re partition. I can't be sure as I had to repeat the process anyway.

Enable Virtualisation in Windows

If you need HyperV then you might find you don't get it on the Windows side:
To avoid: "Could not set boot device property: 0xe00002bc":
Back in OSX:
  • Download and extract rEFind
  • Edit the config: sudo vi refind/refind.conf-sample
    • Un-comment enable_and_lock_vmx and set to true
    • You might want to reduce the timeout
  • Install it: sudo ./refind-install
Re-enable SIP.

12 March 2017

Mac: Create Bootable SD from ISO

Using Ubuntu as an example: https://www.ubuntu.com/download downloaded to Downloads folder.

Download Ubuntu and Create img file


Create Bootable SD from img file

  • Disk Utility: Erase the SD Card (not sub partition) select:
      Name: (Optional) e.g. UBUNTU
      Format: MS-DOS (FAT)
      Scheme: GUID Partition Map
  • Unmount any partitions, but leave the drive itself mounted
  • Terminal: cd to location of downloaded img
    cd Downloads (ls to check)
  • List disks:
    sudo diskutil list
  • Note identifier of SD card found by disk size e.g. disk3s2
  • Unmount:
    sudo umount disk3 && sudo umount disk3s1 && sudo umount disk3s2
  • Copy image across:
    sudo dd bs=4m if=ubuntu-16.04.2-desktop-amd64.img of=/dev/disk3
  • WAIT: It could take around 20 minutes with little indication it's happening.
Now try your boot: Reboot and hold down Alt/Option key to select the boot disk.



28 February 2017

Firefox Responsive UI

When designing and building websites we need to consider multiple screen resolutions and platforms e.g. iPhone Safari browser, or Pixel C Android tablet in landscape mode.

Resolution Design Mode
Firefox has an excellent Resolution Mode that allows you to select a variety of resolutions. You can also import more:

  1. In Firefox go to about:config and accept the risk
  2. Right click and select New, String, 'devtools.responsiveUI.presets'
  3. Enter the new values e.g. Thanks to Geoffrey Liu for this version
  4. Close any RDM tabs and re-open them to see the new options
User Agent
When changing the resolution we may need to also change the User Agent. Firefox has a plugin for that: written by Chris Pederick User Agent Switcher: download, install and add the list of user agents.
You can check your UserAgent at UserAgentString.com

14 February 2017

Digital Life: How to store your Photos, Files and Music

As a professional software engineer I'm often asked socially about computer problems. Most of them stem from not having their systems set up properly in the first place or a lack of understanding of the importance of doing that, hence this post.

Why

If you only have files (photos, music, spreadsheets etc) on your computer then you will ultimately loose them: hard drives have a fixed life span and one day it will fail: its not 'if', its 'when'. So you need to use an alternative place to store them. Previously we used to use 'local' backups: large disks at home that the computer will backup to, however, with the advent of smartphones and tablets it makes much more sense to use online services that are then available to all your devices.

Cloud Storage

All your files, e.g. letters written in Word or spreadsheets should all be kept in a secure online storage solution e.g. Google Drive (https://drive.google.com). In the same way as for the photos, there is an application to install on your computer to keep a folder in sync with this online storage:
https://www.google.com/drive/download/
In this way. when your computer dies, you still have all your files.
If you're neurotic, there are solutions like ownCloud that keep your files away from Google etc.


Backup

NB: Cloud Storage solutions like GDrive or Dropbox are a syncing solutions NOT a backup, so when you delete the file on your computer its deleted online too. For backup, other cloud services like https://www.crashplan.com exist.

Passwords

Passwords should not be re-used: if one service is compromised (hacked) as we see in the press almost weekly, then its likely your email/password combination will be traded online with everyone else's, and then used to try defraud you e.g. steal your identity. Once this happens its very difficult/costly to 'go back'.
I recommend using a 'Password Safe' program in which to store your credentials. This is then a single password to enter that 'safe' and all your passwords are within. You can store this on a cloud storage (e.g. Google Drive see 'Cloud Storage') and access it from all your devices (phone, ipad, computer)
KeePass: http://keepass.info/download.html
An alternative is to use an online service where you store all your passwords like http://www.lastpass.com/ The advantage is it's easier to setup and use, the disadvantage is that all your passwords are on their servers so you are trusting that they are keeping them securely, will stay in business and won't be hacked.

Photos

If you're using mixed 'platforms' (e.g. Windows and Mac) then Apples iCloud won't work for you: it only really works within the Apple systems. Most alternatives offer some kind of application that you download to your computer which then uploads all your photos over time. You'll need to leave it on for a week or so for this to happen, depending on how many photos you have.

As most people have a gmail account you'll already have access to Google Photos and they offer an app to download here:
https://photos.google.com/apps
You'll likely need to tell it which folders to include/ignore and also to set it to 'upload original' not a reduced size version. There will likely be a cost implication (a few dollars a year) but the alternative is loosing your photos.



09 February 2017

.Net Core Project Files

I've spent he last few weeks playing around with the new project format (csproj) and VS2017 RC2 seeing if its possible to work with this format AND allow for Cross Platform development i.e. using VS2017 on Windows, [Visual Studio Code](https://code.visualstudio.com/) on a Mac and also [VS2015](https://www.visualstudio.com/) or command line (Windows, Mac, Linux). Here are my notes from this work.

Project File Format

As of writing (9/2/2017) there are three possible formats:
* csproj: The new project format of csproj files BUT cannot be built on Mac [see this issue](https://github.com/Microsoft/vsts-tasks/issues/3311). The tooling just isn't there yet.
* xproj: project.json replacement using in VS2015. We can have project.json and xproj in same project, although not ideal as obviously they need to be kept in sync.
* project.json: Less features than the other two (e.g. not full msbuild support) and will be deprecated in favour of csproj
NB: As of writing if you open a project.json or xproj in VStudio2017 it will transform the project files into csproj moving the old to a 'backup' folder. Not all the tooling supports csproj yet.

Building

* dotnet restore
* dotnet build (optional, build will also happen when it's run)

Testing

* VSCode: Run individual tests using the C# Extension OmniSharp
* Command line: dotnet test [path/project Name NOT project file]

Running

* VSCode: Use the Debug Panel
* Command line:
  * dotnet build */**/project.json
  * [Project path] > dotnet run [path/project Name NOT project file]

NodeJs Notes

NodeJS notes for working with client side.

Installation/Setup Node.js

NPM is used for installing Node js modules i.e. client side or dev dependencies.

Install NodeJs

  • Windows: Open Command Prompt as admin in Project root.
    • Chocolatey: @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    • Node.js NPM: choco install nodejs
  • Mac: Use the installer from Homebrew:
    • brew install node -without-npm
      NB: you need to use a script to set it up: (see this post and this npm bug)
ls -1 /usr/local/lib/node_modules > ~/node_modules.txt
sed -e "s,/\+$,," -e "s,^/\+,," ~/node_modules.txt
rm -rf /usr/local/lib/node_modules
brew uninstall node --force node
brew install node --without-npm
echo prefix=~/.node >> ~/.npmrc
curl -L https://www.npmjs.com/install.sh | sh
echo 'export PATH="$HOME/.node/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
for i in `cat ~/node_modules.txt`;do npm install -g $i;done
rm ~/node_modules.txtInitialise DotNet Project
Use Yoman to create new project
* npm install -g generator-aspnet
* yo aspnet

Initialise

* Node.js: to create project.json: npm init --yes

Install NodeJs Packages

* npm search [package name]
* npm install [package name] [--no-optional]

Add Client Side Dependencies

* [TypeScript](https://www.typescriptlang.org/): npm install typescript --save-dev

JSPM

[JavaScript Package Manager](http://jspm.io/docs/getting-started.html)
* npm install jspm --save-dev
* jspm init
* Install from jspm, github or npm:
  * jspm install npm:lodash-node
  * jspm install github:components/jquery
  * jspm install jquery
NB: Got github you can use any source like owner/repo:
jspm install bulma=github:jgthms/bulma

Typings

These have been replaced by e.g:
npm install --save @types/systemjs

Add Client Side Dependency

To add a new client side dependency e.g. requirejs:
* JSPM:
    * jspm search requirejs
    * jspm install requirejs --save
* Types:
    * npm install --save @types/systemjs

Update npm

https://docs.npmjs.com/misc/semver
npm update <package name> --save

Cleaning node_modules

Sometimes the node_modules folder in particular contains too many sub-folders and the resulting folder structure is too long for Windows Ui tools to delete. To overcome this you can use a third party tool like rimraf:
* cd to node_modules's parent directory
* npm install rimraf -g
* rimraf node_modules

Develpment on Different Platform

It's possible to run the NPM part of apps on Android:
* Install Termux from Google Play
* apt update && apt upgrade
* termux-setup-storage
* set the environment variables: TMPDIR, TMP or TEMP