Smart contracts are like serverless applications since the code lives on the network so you do not need a node in order for clients to use your dapp since clients should be using their own node or a third party node. Having your own node will make things like sending transactions/testing/monitoring much easier for you.
You might have missed out the variable “interface”. I just retested the code on rinkeby and have no issues. You can check the code against mine at https://gist.github.com/qx133/f3df13d7093a2fd190d5910057ae5fae . My transactions on rinkeby can be seen at https://rinkeby.etherscan.io/address/0x8d68583e625caae969fa9249502e105a21435ebf .
Unfortunately some things have changed since we wrote the article. The faucet does not seem to be working. You can use the ‘Rinkeby” testnet instead. They have a faucet at https://faucet.rinkeby.io/ . You will need to change the web3 provider to https://rinkeby.infura.io and block explorer to https://rinkeby.etherscan.io/ in the article.