For the next few sessions of our Toronto Ethereum Developers Meetup Group we are going to build an Ethereum-enabled Beer Machine. Why? Because Beer! And fun. And coding practice. Yay! Each step will be well-documented and will serve as an instructional resource for building an application and all of its components from conception to completion.
On 14 October 2016 we had a group meeting to outline a high-level breakdown of the project's development needs. The sections are as follows:
- Front-end (UI/UX).
- Team leads: Chelsea
- Main features: link to eth.contract, display price, display QR code and payment info, display number of beers remaining, and perhaps info about whether beer is currently being displensed; error handling; UI design.
- Ethereum contract
- Team Leads: Richard Moore and Nick Dodson. The coding for this section will be done in the main group session every 2nd Friday.
- Main desired features: Set dynamic price, payment events, send funds upon payment to keg and delivery costs account, pay devs automatic percentage, manage frequent beer drinking points / subscription plan
- Python code interfaced with Hardware.
- Team Leads: Anastasia and Michael
- Main features: payment watching loop, send signal to machine to start/stop pouring, display "beer remaining" info on LED.
- Hardware
- Team Leads: Nelia and Spiro
- Hardware, at minimum, a Raspberry Pi and Beer Machine (including a valve attachment that can be controlled by the RPi).
- Desired: LED displaying beer remaining; an overfill sensor, a sensor for determining if cup is properly placed (and not pour if cup either not present or improperly placed)
- Will need to work closely with Python team
Group communication and management/organization will occur primarily on the Blockchain Canada slack group, and the #dev-ethereum and #dev-beer-machine channels in that group. Here is the slack invite if you aren't a member already. See you there!
I'll start adding educational and background resources as we progress.
Background information that one should read.
- Ethereum.org: The main Ethereum foundation site.
- Ethereum Homestead Docs
- What is Ethereum, in brief
-
Solidity: Read the Docs. For coding smart contracts, read this guide.
-
Learn Solidity in Y minutes: Excellent resource.
-
Browser Solidity: Easy way to compile and inject soldity code.
-
Gitter.im/ethereum/solidity: Get information from the source -- Solidity devs themselves.
- Mist -- Ethereum Wallet: Use this if you want to create an ether wallet and start using Ether, trade tokens, watch tokens, or watch contracts. It's build by the Ethereum Foundation, and is in a constant state of improvement and development.
- MyEtherWallet: An in-browser wallet generator
- Ethers.io: An in-browser wallet with a solidity code compiler; it's also adding support for applications (dApps)
- Metamask.io: A chrome extension ethereum wallet with a good user interface. Useful in conjunction with Browser Solidity to inject contracts into the blockchain.
- Harvard CS50: Awesome course; so many great lectures, quizzes, and reading material.
- Eloquent Javascript: Highly regarded free ebook
- Python Crash Course: A Hands-On, Project-Based Introduction to Programming
- Derek Banas: Learn to Program: A great place to start. Learn how to code using Python.
- Bitcoin and Cryptocurrency Technologies. A free draft is also available.
- Mastering Bitcoin (Antonopoulos, 2015).
- Age of Cryptocurrencies (Vigna and Casey, 2015).
Must Read books on programming and design in general, according to Jeff Atwood (Stack Exchange)
- Code Complete (Steve McConnell)
- Don't Make me Think (Steve Krug)
- Peopleware
- The Pragmattic Programmer
- Facts and Fallacies of Software Engineering
- Computational Thinking
- Unix Philosophy and Introduction to Unix Philosophy. First rule: Make each program do one thing well. Rule2: Expect the output of every program to become the input to another.
Jeff Atwood(Creator of Stack Exchange), from an ITworld article. See his Reddit AMA as well:
- Learn by Doing real projects. "Build stuff. In the process of building something, if you need a new tool, learn it then"
- Aim to be dumbest person in the room
- Have a coding buddy
Adding to that, we should include:
- Start as soon as you can. Start yesterday. This reminds of another good article on the important habit of just starting
- Don't Call yourself a programmer -- Kalzumeus