Wednesday, August 31, 2016

Bitcoin Reading List

Minimum Viable Block Chain, by Ilya Grigorik, is an introductory paper which includes most of the required concepts.

Bitcoin and Cryptocurrency Technologies was published from Princeton and has a corresponding Coursera course. The draft version of the book is available in a free pdf.

Financial services regulation and policy.  Bitcoin A Primer For Policymakers is a free pdf.

Mastering Bitcoin: Unlocking Digital Cryptocurrencies is a good read from O'Reilly.

Monday, June 27, 2016

SkypeHost.exe on Windows 10

Anyone who does not use Skype and who is looking through Task Manager may be frustrated to observe a task named SkypeHost.exe. While it may have "Suspended" status, some users would like to completely remove the task while not affecting Skype for other users on the PC.

SkypeHost.exe will restart if it is killed through "End task" in the Task Manager. The following instructions will remove the task, while allowing Skype to continue to function for other users of the PC.

The process is to open the Skype application and log in.  Then choose "Options" and uncheck "Start Skype which I start Windows" and "Sign me in when Skype starts".

 The process will end, and it will not restart the next time you log in.

Tuesday, June 07, 2016

Tuning I/O for Ethereum

At a high level, the I/O request goes from the running program to the operating system. Then from the operating system to the appropriate file system driver, then to the disk controller which writes to the disk.

It is usually important to match the I/O length (the amount of data being written) in each step of the process. Disks and the disk controllers typically write large stripes of data, such as 512KB. The file system may be set up with RAID, which can have stripes of 512KB or 1 MB. The operating system may default to a size of 16 KB (NTFS default has been 4 KB). To complicate this further, the operating system may implement file compression, which can pack more data into each I/O. And remember the filesystem may have logging, and may also frequently update inode access times which can cause contention.

It is typically difficult to change RAID settings after it has been implemented. RAID 5 will often be slow. It is typically impossible to change disk controller settings.

Therefore, let's concentrate on tuning a high I/O workload with commonly available settings in the filesystem and the program.

Increase the filesystem block size to a reasonably large value such as 64 KB. This is set when formatting a partition. While larger block sizes can lead to some wasted disk space, this is not typically a problem with modern large disks.

For tuning the program, if possible increase the program's (database or geth) cache size and match the logical I/O to the filesystem I/O size. For geth, it is possible to set the cache size with the --cache flag:
.\geth.exe --cache 512

The default geth cache is 16 MB, so 512 MB is a large increase. Set this lower than the amount of real RAM in the system, to avoid creating a swapping situation. Monitor this with Task Manager, using the following examples. Note 1.6 GB of real RAM is available to avoid swapping, which is a safe margin of error in case the program data increases.

Using the geth default of 16 MB, the maximum observed I/O was about 3 MB per second. Using geth's cache of 512 MB increased the maximum I/O to about 12 MB per second, a significant increase.

Wednesday, June 01, 2016

Move Microsoft Windows pagefile.sys

Moving the page file off the system disk can lead to reductions in disk I/O contention, which can lead to a quicker-feeling system. Systems which have small system disks can regain some disk space by moving the pagefile. These instructions for moving the pagefile to another disk are for Microsoft Windows 10.

Open a command prompt or Windows PowerShell.  To open PowerShell, press the Windows button and search for (start typing the words) "powershell". Click on PowerShell. (You may want to right-click and pin PowerShell for easy access in the future.)
With Windows PowerShell running, type> systeminfo
(PowerShell systeminfo displays the same information which is available through Control Panel, Administrative Tools, System Information.)
Note the "Windows Directory" and "Page File Location" are both on drive C.

This example computer is several years old, so drive C is relatively slow. The new drive is F, a three terabyte internal drive. The new drive has much better seek times and data throughput, so the system will likely feel more responsive if the pagefile is moved to drive F.

List the drives & volumes in powershell with > GET-WMIOBJECT win32_logicaldisk | format-table

Move the pagefile to the faster drive, F.

Show the virtual memory by opening Control Panel, System and Security, System, Advanced System Settings, Advanced tab, press Performance Settings... button, Advanced tab, press Change... button. Note the virtual memory is currently managed by the system and on drive C.

Create a pagefile on drive F with a Custom size by clicking on the new drive (F) and choosing Custom Size. Most users will choose a virtual memory size equal to real RAM or a multiple to the real RAM in the system. Press the Set button.
Select drive C and choose No Paging File and press the Set button. Press OK and the system will prompt for reboot. Reboot the system.

After reboot, verify the pagefile has moved correctly.

Using PowerShell to verify the pagefile, type > wmic pagefile list /format:list


Notice the PeakUsage is low, as it is a new pagefile.

Simpler PowerShell command, without formatting, is > wmic pagefile

Monday, May 02, 2016

Configure Windows Bitlocker

This guide demonstrates how to configure Microsoft Bitlocker disk encryption on an external drive using Microsoft Windows 10.

Determine which version of Microsoft Windows is in use. Press the Windows search button and type: powershell
Choose the PowerShell application.
In PowerShell type: Type: [System.Environment]::OSVersion.Version

Open Control Panel: right-click on Windows button, choose Control Panel

In Control Panel upper-right search box, type: group policy
Choose: Edit group policy

For those who watch the Windows error log, the BitLocker Event IDs are described here. The Event IDs are 24577 - 24621.

In the Local Group Policy Editor, navigate to Navigate to: Computer Configuration\Administrative Templates\Windows Components\BitLocker Drive Encryption

To change the default drive encryption of 128-bit to 256-bit, edit the entry: Choose drive encryption method and cipher strength

To turn on drive encryption, go to Windows Explorer and right-click on the drive. Select Turn on BitLocker
The drive will be set up for encryption.

Choose a password.

It may be good to print a recovery key. Place the printed key offsite in a secure location.

The process of encrypting the drive will begin. Existing data is maintained, so the encryption process may take a day or more.

After the drive is encrypted, test unlocking the drive. This is a good time to restart the PC, then go to Windows Explorer and note the yellow icon on the drive letter. Right-click the drive and choose: Unlock Drive...

Enter the drive password.

This shows Computer Management with the drive designated as "BitLocker Encrypted".

Wednesday, April 27, 2016

How to mine Ethereum on Microsoft Windows 64 bit - benchmark the miner and mine

These instructions have been tested on Microsoft Windows 10 64 bit, 4GB RAM, with an ATI video card.

In a prior post, the geth software which communicates with the Ethereum network was downloaded and installed. An account address was created and the current block chain was downloaded. The mining software was downloaded and installed.

In this post, we will test the mining software by benchmarking both CPU mining and GPU mining.

Two command prompt windows will be opened, one for geth and one for ethminer.

Open a cmd prompt.

Go to the geth software directory.

Start geth by typing: .\geth --rpc

The block chain will be synchronized, which should take a few minutes to download the latest blocks.

Open another cmd prompt.

Go to the ethminer directory: cd %PROGRAMFILES%\Ethereum <release number>\Release

Ethminer communicates with geth, so ensure it is still running in the other cmd window. The first time ethminer is run, it will create a "DAG" file. The DAG creation process conveniently shows percent complete.

Start ethminer to create the DAG file.
C:\Program Files\Ethereum 0.9.41\Release>.\ethminer
miner  13:13:26|main  Getting work package...
JSON-RPC problem. Probably couldn't connect. Retrying in 1...
miner  13:13:28|main  Getting work package...
miner  13:13:28|main  Grabbing DAG for #0016beddΓǪ
DAG  13:13:55|main  Generating DAG file. Progress: 0 %
Creating DAG. 0% done...DAG  13:14:08|main  Generating DAG file. Progress: 1 %
Creating DAG. 1% done...

Start ethminer in benchmark mode (-M) and benchmark CPU mining.
Benchmarking on platform: CPU
Preparing DAG...
Warming up...
Trial 1... 377068
Trial 2... 381018
Trial 3... 385818
Trial 4... 386728
Trial 5... 388705
min/mean/max: 377068/383867/388705 H/s
inner mean: 384521 H/s
Phoning home to find world ranking...

Start ethminer in benchmark mode (-M) and benchmark GPU (-G) mining.
.\ethminer -G -M

If the miner does not start, there are some troubleshooting steps. A common failure message is "No GPU device with sufficient memory was found. Can't GPU mine. Remove the -G argument"

List the GPU devices: .\ethminer --list-devices

Listing OpenCL devices.
FORMAT: [deviceID] deviceName
[0] Bonaire
        CL_DEVICE_GLOBAL_MEM_SIZE: 2147483648
        CL_DEVICE_MAX_MEM_ALLOC_SIZE: 1409286144

Try to specify the GPU: .\ethminer -G -M --opencl-device 0

Try to specify a different OpenCL platform implementation: .\ethminer -G --opencl-platform 1 -M

Found suitable OpenCL device [Bonaire] with 2147483648 bytes of GPU memory
Benchmarking on platform: GPU
Preparing DAG...
  i  22:35:42|gpumineWra0r m iwnogr kuLpo.o.p.
0 #00000000… #00000000…
  i  22:35:42|gpuminer0  Initialising miner...
Using platform: AMD Accelerated Parallel Processing
Using device: Bonaire(OpenCL 2.0 AMD-APP (2004.6))
Printing program log

Creating one big buffer for the DAG
Loading single big chunk kernels
Mapping one big chunk.
Creating buffer for header.
Creating mining buffer 0
Creating mining buffer 1
Trial 1... 4801172
Trial 2... 4886838
Trial 3... 4972448
Trial 4... 4886838
Trial 5... 4974103
min/mean/max: 4801172/4904279/4974103 H/s
inner mean: 4944463 H/s
Phoning home to find world ranking...

Start mining with whichever flags work on your platform:
.\ethminer -G
.\ethminer -G --opencl-platform 1

Monday, April 25, 2016

How to mine Ethereum on Microsoft Windows 64 bit - ethminer

These instructions have been tested on Microsoft Windows 10 64 bit, 4GB RAM, with an ATI video card.

In a prior post, the geth software which communicates with the Ethereum network, was downloaded and installed. An account address was created and the current block chain was downloaded.

In this post, the block miner ethminer will be downloaded and installed.

Download the latest Ethereum miner at

Unzip the files. By default, the files will go to the %PROGRAMFILES%\Ethereum <release number>

The Ethereum miner has been downloaded and installed.

The next step is to test the miner.

Friday, April 22, 2016

How to mine Ethereum on Microsoft Windows 64 bit - geth

These instructions have been tested on Microsoft Windows 10 64 bit, 4GB RAM, with an ATI video card.

Geth is software which communicates with the Ethereum network, a block chain crypto-currency and global programming network.

Download the latest version of geth at
Put geth in a convenient directory, like c:

Open a command prompt by pressing Windows button and typing: cmd
Navigate to the geth directory and unzip the files.

Using a strong password which you will remember, create an account address.
C:\Geth-Win64-20160401105807-1.3.6-9e323d6>.\geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Repeat Passphrase:
Address: {long_address_string_____________________}

The account keys are stored in <DATADIR>/keystore.
View the new account key in directory: cd %APPDATA%\Ethereum

Display the geth version.
C:\Geth-Win64-20160401105807-1.3.6-9e323d6>.\geth version
Version: 1.3.6
Protocol Versions: [63 62 61]
Network Id: 1
Go Version: go1.5.1
OS: windows

Start geth to download and synchronize the block chain.
C:\Geth-Win64-20160401105807-1.3.6-9e323d6>.\geth --rpc
I0411 16:54:24.451793    4296 database.go:71] Alloted 16MB cache to C:\Users\mswindows_username\AppData\Roaming\Ethereum\chaindata
I0411 16:54:25.233804    4296 database.go:71] Alloted 16MB cache to C:\Users\mswindows_username\AppData\Roaming\Ethereum\dapp
I0411 16:54:25.270260    4296 backend.go:314] Protocol Versions: [63 62 61], Network Id: 1
I0411 16:54:25.351417    4296 backend.go:362] Blockchain DB Version: 3
I0411 16:54:25.582006    4296 blockchain.go:214] Last header: #99215 [babce72f…] TD=166437631468780593
I0411 16:54:25.585960    4296 blockchain.go:215] Last block: #99215 [babce72f…] TD=166437631468780593
I0411 16:54:25.592422    4296 blockchain.go:216] Fast block: #99215 [babce72f…] TD=166437631468780593
I0411 16:54:25.787411    4296 cmd.go:115] Starting Geth/v1.3.6/windows/go1.5.1
I0411 16:54:25.800840    4296 server.go:311] Starting Server
I0411 16:54:27.043156    4296 udp.go:212] Listening, enode://e4f5fd7e13e73e227bbe2f5ca4001f4872ef24379199fe290b99df65bad9dc6f98248dfd0554bffc318973dc7eae21a17a934199e869133201af7e8331418b51@[::]:30303
I0411 16:54:27.052664    4296 backend.go:526] Server started
I0411 16:54:27.052664    4296 server.go:552] Listening on [::]:30303
I0411 16:54:27.073593    4296 ipc.go:112] IPC service started (\\.\pipe\geth.ipc)
I0411 16:54:47.054104    4296 downloader.go:288] Block synchronisation started
I0411 16:56:24.358034    4296 blockchain.go:1251] imported 256 block(s) (0 queued 0 ignored) including 58 txs in 7.7356549s. #99471 [7378a4ef / 0ed10e27]
I0411 16:56:28.799755    4296 blockchain.go:1251] imported 256 block(s) (0 queued 0 ignored) including 51 txs in 4.4371818s. #99727 [5b7e1e92 / 70ef8fdb]

Geth will acquire blocks in chunks of 256 (the first chunk can take minutes to appear). In the geth output, you will typically see low "txs" numbers and importing one block at a time when the block chain is synchronized.
With a web broswer, go to and look at "BEST BLOCK". Geth will be done downloading the block chain when your machine shows the "best block" number.

After the block chain is synchronized, end the geth process by pressing: ctrl-c
I0415 12:45:31.430682    4296 blockchain.go:1251] imported 1 block(s) (0 queued 0 ignored) including 0 txs in 8.981ms. #1342669 [ebc34c57 / ebc34c57]
I0415 12:45:35.800612    4296 blockchain.go:1251] imported 1 block(s) (0 queued 0 ignored) including 6 txs in 42.0009ms. #1342670 [9e7e42f5 / 9e7e42f5]
I0415 12:46:00.582403    4296 blockchain.go:1251] imported 1 block(s) (0 queued 0 ignored) including 5 txs in 29.5749ms. #1342671 [0f1555a6 / 0f1555a6]
I0415 12:46:17.510895    4296 cmd.go:124] Got interrupt, shutting down...
I0415 12:46:17.617873    4296 blockchain.go:690] Chain manager stopped
I0415 12:46:17.621902    4296 handler.go:192] Stopping ethereum protocol handler...
I0415 12:46:17.624903    4296 handler.go:202] Ethereum protocol handler stopped
I0415 12:46:17.628907    4296 tx_pool.go:156] Transaction pool stopped
I0415 12:46:17.650008    4296 backend.go:630] Automatic pregeneration of ethash DAG OFF (ethash dir: C:\Users\mswindows_username\AppData\Ethash)
I0415 12:46:17.719083    4296 database.go:158] closed db: C:\Users\mswindows_username\AppData\Roaming\Ethereum\chaindata
I0415 12:46:17.728089    4296 database.go:158] closed db: C:\Users\mswindows_username\AppData\Roaming\Ethereum\dapp

List the new account.
.\geth account list

Using geth console, verify there are zero rewards on the new account address.
.\geth console
web3.fromWei(eth.getBalance(eth.coinbase), "ether")

Geth has now been downloaded, an account has been created, and the existing block chain has been downloaded.

The next step is to download the Ethereum miner.

Monday, April 18, 2016

Performance Comparison With New GPU

The old video was Intel HD Graphics 4600, built in to the motherboard. The free PerformanceTest 8.0 was run to determine rough graphics processing capabilities.

Onboard graphics card

PassMark rating 1825

Add-in graphics card

PassMark rating 2405

The benchmarks don't show everything, and in this case appeared to under-rate the new video card. In real usage, the AMD showed about double the 3D graphics performance compared with the onboard video.

GPU-Z is used to measure the new video card, including the temperature. Running a stress test, the fan is at 56% and the temperature is 71 C.

Sunday, April 17, 2016

GPU Video Card Upgrade

This PC had video built in to the motherboard. The motherboard has one PCI Express slot for expansion. After carefully measuring available height and width, and upgrading the power supply, an ATI R7 360 GPU was purchased.

ATI R7 360 box

ATI R7 360 card

ATI R7 360 power connector

ATI R7 360 installed

The installation of the GPU was tight, and took patience. Two metal slots were removed from the PC case. Note the additional power connector is on the right side of this picture.

Saturday, April 16, 2016

Power Supply Upgrade

When adding power-hungry cards such as a GPU, check the power supply capacity. While researching a GPU upgrade, the desired GPU performance would require more power than the existing power supply. This PC is a ATX size.

The specifications of the existing power supply should be on a label. Open the PC case and read the label.
Determine what size power supply will be needed (add up motherboard, disk drives, existing peripherals, and new card) to find the required wattage. Research power supplies to find a power supply unit (PSU) size which will fit inside the PC case.
Measure, measure, measure. The existing power supply was about 5 1/2" long.
As the new power supply likely has a fan, carefully determine the fan position and if it will work with your PC case.

Old power supply length

Old power supply width

A Cougar DX500 was chosen as the new power supply. This new power supply has the same width and is about 1 1/2" longer. The power supply fan exits out the back of the unit, near the power cord.

Cougar DX500 power supply

Next, locate the motherboard connector. The existing motherboard connector was 24 pins. The new power supply is a 20 + 4 pin connector. This means the main connector is 20 pins with an additional 4 pin connector.

Mother board connector in top right corner (near the arrow)

If adding a GPU, the card will typically take additional power from a 4 pin power supply connector. Carefully determine what power is needed by the new card, and what is provided by the new power supply unit.

Old 24 pin connector beside new 20 + 4 pin connector

Remove old power supply and carefully install new power supply. Routing power cables may be tricky, so take your time.

New power supply installed, with old power supply in picture

Power on the new power supply and test the PC.

Thursday, March 10, 2016

Windows 10 System Repair Disc

Microsoft Windows 10 continues the functionality of creating a System Repair Disc. This can help recover your system if it will not boot. This is easy and quick.

Open the Control Panel.
In the Control Panel search box, search for "backup" and choose Backup and Restore (Windows 7).

Create a system repair disc

Select the DVD drive and press Create disc

Label the disc and put the disc in a safe place where it can be quickly found, if needed.