Reading up on Bitcoin, Blockchain and Beyond

Digital Gold by Nathaniel Popper is neither a tech nor a finance book, but it provided me with a great introduction to Bitcoin. It describes at length the varied backgrounds and motivations of the people that were instrumental in getting it off the ground.

After you’ve read the book and learned the basics, Coindesk is a great source of current news on all things blockchain, cryptocurrency and so on. For specific questions, there is also a Bitcoin Stack Exchange Q&A site.

Of course, one of the most interesting things to come out of Bitcoin is not the cryptocurrency itself, but the blockchain, a distributed alternative to the centralized ledgers used in finance everywhere, it is built upon.

Blockchain, Distributed Ledgers

Unfortunately, a blockchain as used by Bitcoin has features that make it unsuitable for certain uses; poor scalability and slow speed of processing and confirming transactions being two of them.

There are, however, several projects that try to address these issues, such as Juno which specifically targets greater throughput performance.

Microsoft even has a blockchain project for its cloud computing service Azure called Project Bletchley.

But, the most interesting, in my opinion, distributed ledger project right now is R3 Corda. This is a joint venture between a number of banks aiming to built a distributed ledger specifically for financial transactions. What makes Corda stand out among the many blockchain/distributed ledger projects is that it is not a technology project looking for applications. Instead they are taking real requirements from the world of finance and try to mold the technology to fit them. As Richard Gendal Brown, R3’s Chief Technology Officer, writes in their introduction:

Every successful project I’ve worked on started with the requirements, not some cool piece of technology.

Richard Gendal Brown, by the way, also has his own blog Thoughts on the Future of Finance, on which he discusses technology in the financial sector in general (e.g. Apple Pay), not just distributed ledgers. Highly recommended.

Smart Contracts

Looking beyond finance, there is Ethereum which has built a smart contract platform on its blockchain. One example of such a smart contract is The DAO, a kind of investment company bound by bylaws written in code instead of legal prose. Since the company exists only virtually, it’s still unclear which country’s laws govern it. Its creators say a DAO is self-governing, i.e. its actions determined only by its coding and thereby not subject to outside influence such as a regulator.

Because of a coding error in the code of The DAO, an attacker was (almost) able to rob it of millions of dollars on 17-Jun-2016. This article has a good summary of how it happened. The Slock.it blog also has a number of articles worth reading on the attack and its aftermath. On the topic of entrusting your investment money to an autonomous organization bound only by smart contracts, their COO Stephan Tual writes:

[I]t is very challenging to write smart contracts that are both complex in nature and 100% safe. Therefore, it’s fair to say that the discussion of any Ethereum-based project should be handled with the great care it deserves.

Speaking of Slock.it: they have used the Ethereum blockchain as the backbone of a neat IoT project: the Ethereum computer powering smart locks called slocks.

Cataloging my Gadgets Part 4: Other

Before smartphones, the mobile computing device of the day were PDAs. I was fascinated by devices such as the Psion Series 5, the Nokia 9000 Communicator and eventually the Windows CE powered Pocket PCs Siemens Pocket LOOX and Compaq iPAQ.

Of course, I was still a kid back then, and these devices were way more expensive than anything I could afford (or had a practical use-case for, to be honest). There were, however, simpler “organizer” devices that I had.

Other Small

Casio Data Bank DC-2100ER

An extremely simple organizer whose main feature was storing phone and fax numbers organized by name. Phone numbers were limited to American NPA-NXX-xxx format making the organizer somewhat less useful in Germany.

Rolodex Flash PC Companion RFLS-8

This was a slightly more advanced organizer. Its most distinguishing feature was the PC software it came with, allowing you to sync contacts from a computer to the organizer via the Timex Data Link: For this, you pointed the organizer at the computer screen and pressed the sync button on the device and in the software. This made the software flash horizontal bars across the screen, which were read by an optical sensor on the device. It was quite fascinating to watch, but only worked on CRT screens, meaning I could no longer use the organizer when I switched to my first laptop.

HP Jornada

As I said, I didn’t have a PDA when they were en vogue and didn’t get my first smartphone until 2007. The PDA you see above was gifted to my technology collection a couple of years ago by a colleague when he was clearing out his own collection.

Of course, compared to the smartphones of the day, the PDA was bulky and under-powered. Its resistive touchscreen required using a pen or your fingernail and didn’t support the gestures of  capacitive touchscreens used on smartphones.

The software, however, had a lot going for it. The Windows CE on the device looked and felt a lot like the Windows on your PC, though sticking with the desktop metaphor on a handheld device was probably a stretch. Still, it supported copy&paste for text throughout the system, something the original iPhone did not.

See also

Cataloging my Gadgets Part 3: Calculators

For whatever reason, schools in Germany seem to prefer Casio calculators, while in the US everyone was using Texas Instruments. So while I grew up with the former, I switched to TI after I first got to use one of their graphing calculators during my time as a foreign exchange student in high school. All calculators I bought thereafter, were TIs. I particularly loved the TI-89 I had in college (see below).

Calculators Small

Casio fx-115s

In active use 7th grade until the end of High School
Type Scientific calculator
Comments The first calculator I got for school in 7th grade and the only one we were allowed to use on exams.

Casio Euro Conversion

In active use 1999-2002
Type Basic calculator
Comments Between 1999 and 2002 Euros were used in electronic transactions (such as securities trading) while Deutschmarks were still used in cash transactions. So when I got interested in the stock market I thought I needed a calculator to convert between the two currencies. I was wrong. This calculator was barely used.

Texas Instruments TI-81

In active use Junior year of High School
Type Graphing calculator
Comments This model was a loan from the school when I was a foreign exchange student during my junior year of high school. Getting into programming at the time, I wrote a few utilities for the TI-81, e.g. for converting between the metric system I was used to and the units used in the US.

Texas Instruments TI-89

In active use College, Business School
Type Programmable graphing calculator, computer algebra system
Comments This calculator is amazing. On many exams in college they allowed programmable calculators, since in some states students had already been using them at the end of high school.
I don’t think, though, if they were aware of the capabilities of the TI-89 which was far more advanced than anything the other students had: symbolic differentiation and integration, statistics package, note taking app that synced with a PC, downloadable apps.
Needless to say, learning to use the TI-89 effectively made my exams a whole lot easier. Except for one time, when the calculator crashed during an exam, refused to restart and I had to use my old Casio instead. It worked like a charm again after I had installed an updated version of its operating system.

Texas Instruments BA-II Plus

In active use CFA exams
Type Financial calculator
Comments There are only a handful of calculators allowed on the CFA exams and this one was the cheapest.

Texas Instruments Little Professor

In active use (never)
Type Backwards calculator
Comments I saw this calculator long after I had graduated college and thought it would be a nice addition to the TI-89 and the BA-II Plus, completing my collection of Texas Instruments calculators. After I bought it used, I played around with it for a while, but otherwise had little use for it.

See also

Cataloging my Gadgets Part 2: Phones

Looking at the phones I’ve used over the years, I think it’s funny how until circa 2007 they used to get smaller with each generation. Once touch-screens were introduced, however, devices have been getting bigger with each generation.

Phones Small

Nokia 5110

In active use 1999-2003
Operating system(s) (proprietary)
Comments The first cellphone my family owned to be shared among family members.

Siemens MT50

In active use 2003-2005
Operating system(s) (proprietary)
Comments My first own cellphone.

Siemens M65

In active use 2005-2007
Operating system(s) (proprietary)
Comments Got this from one family member after they got a new phone and passed it on when I got the HTC S710.

HTC S710

In active use 2007-2010
Operating system(s) Windows Mobile 6
Comments My first smartphone, though with a traditional form factor.
Bought Outlook specifically so I could sync contacts, calendar etc. with my computer.

HTC HD7

In active use 2010-2012
Operating system(s) Windows Phone 7
Comments My first “real” smartphone with a touch screen, cloud sync etc.

Nokia Lumia 920

In active use 2012-2015
Operating system(s) Windows Phone 8, Windows Phone 8.1
Comments

Microsoft Lumia 950

In active use Since 2015
Operating system(s) Windows 10 Mobile
Comments

See also

Cataloging my Gadgets Part 1: Computers

Over the years I’ve bought, used and discarded a number of phones, computers and assorted other gadgets. So far, I’ve mostly kept them in storage once I no longer used them. However, as gadgets have kept piling up, it seems like now is a good time to get rid of those that are no longer working.

Instead of simply throwing them out, however, I’ve decided to catalog them here first. This first installment lists all the computers I’ve had. Phones, calculators and other gadgets will be subject of future articles (links at the end).

Vobis Highscreen

Vobis-PC aus

In active use 1995-1999
CPU Intel Pentium 120 MHz
RAM 8MB, upgraded to 32MB
Storage 1.2GB HDD
Operating system(s) Windows 95 with Microsoft Plus!, Windows 98
Machine name Augustus
Comments The very first computer my family owned.
Still worked when I powered it up on 24-Apr-2016, its 20th birthday.

Unnamed Computer

Pentium 200

In active use 1999-2001
CPU Intel Pentium 200 MHz
RAM 32MB
Storage 2GB HDD
Operating system(s) Windows 98, Windows 98 Second Edition
Machine name (unknown)
Comments Discarded sometime in the early 2000s, so the processor shown above is all that’s left.

Gericom Webboy

Gericom Webboy

In active use 2001-2006
CPU Intel Pentium III 1 GHz
RAM 256MB
Storage 6GB HDD
Operating system(s) Windows ME, Windows XP Home
Machine name Brutus
Comments My first very own laptop and the first computer I paid for with money I had saved and earned through my first jobs.
Still works, even though main and CMOS battery died long ago.
Because the processor is actually a desktop processor, the fan is extremely loud. During hot summer days, I often had to turn it off to prevent overheating.

LG M1

LG M1

In active use 2006-2013
CPU Intel Core Duo 1.66GHz
RAM 1GB, upgraded to 2.5GB
Storage 80GB HDD, upgraded several times to eventually 128GB
Operating system(s) Windows XP Home, Windows XP Professional, Windows Vista Business, Windows 7  Ultimate, Windows 8 Pro with Media Center, Windows 8.1 Pro Preview with Media Center
Machine name Caesar
Comments The computer I’ve used the most.
Still works, even though the main battery died long ago.
Also have a docking station and second, extended capacity battery.
Used occasionally for installing and testing OS preview versions.

OLPC XO-1

OLPC XO-1

In active use (never)
CPU AMD Geode LX700
RAM 256MB
Storage 1GB Flash
Operating system(s) Fedora-based with Sugar GUI
Machine name (none)
Comments Played around with it for a while after getting it.
Bought through the Give One, Get One campaign.

Microsoft Surface Pro

Schreibtisch

In active use Since 2013
CPU Intel Core i5-3317U 1.7-2.6GHz
RAM 4GB
Storage 128GB SSD, 200GB microSDXC
Operating system(s) Windows 8 Pro with Media Center, Windows 8.1 Pro with Media Center, Windows 10 Pro
Machine name Domitian
Comments My first laptop/ultra-book with tablet-like features.
Bought with several accessories, only some of which I still use.

See also

Reading up on Concurrent Programming – Reloaded

In 2011 I posted Reading up on Concurrent Programming. Now, five years later, I thought it a good time to review that article, fix a couple of dead links and add a few new ideas I have come across since.

Basics

These are some general explanations a programmer should be familiar with regardless of the platform they are working on.

.NET and Windows

A good book to get you started is Concurrent Programming on Windows by Joe Duffy. It describes various aspects of locking and lock-free programming, the synchronization primitives available on Windows and much more. It’s certainly not easy-reading, but well worth it when you really want to learn these things in detail. The book is for .NET as well as Win32 programmers, as everything is explained in terms of both C# and Visual C++.

If your target platform is .NET, you must check out Threading in C# by Joseph Albahari which contains everything one could possibly want to know about, well, threading in C#. My personal advice, however, when doing multithreading in C#: in 99% of all cases don’t bother about creating your own threads, but use the Task Parallel Library (TPL) extensively. Don’t get me wrong, it’s still important to know these other things, though. And if you are really serious about optimizing your code, you will have to resort to some of the advanced techniques described there.

Another good resource for applications targeting Windows is the Parallel Computing page on MSDN containing links to a bunch of documentation, sample code tutorials and videos. While there is some information there about the Async technology preview, you might also want to check out this separate Visual Studio Asynchronous Programming page. I particularly liked Anders Hejlsberg’s introduction video. This document on the Task-based Asynchronous Pattern provides a great overview of all those scenarios that will become a lot easier to implement with Async.

The PFX team’s blog also has some interesting posts about various parallel programming topics. I particularly recommend Know Thine Implicit Allocations. Applying some of these techniques has made my code a lot more “garbage collector friendly”, meaning fewer interruptions by the GC and thus more reliable execution times.

I also have a separate article on Writing a High-Performance C# Application containing links to more such articles.

In 2011 Raymond Chen did a series on lock-free algorithms on his blog The Old New Thing.

Java

If your focus is Java, you have to take a look at Disruptor, a “hard-core” (their words, not mine) concurrent programming framework for the JVM. To get started, you should check-out this video of a presentation by the developers and/or read their technical paper. There is also a description of the larger architecture that Disruptor is a part of on Martin Fowler’s website.

But even if you are not programming in Java, you should look at this, as it contains some interesting pointers to what one could do in other languages to improve the performance of concurrent code.

The Mechanical Sympathy blog by one of the developers contains a bunch of additional background information regarding Disruptor’s implementation.

Other

Finally, here’s a couple of questions from Stack Overflow and the Programmers Stack Exchange that I think have generated some interesting responses: