With Bitcoin prices back up high, people are again variously hyping or disparaging cryptocurrency. I don’t often see moderate takes on the technology, probably because it’s extremism that gets attention, but I thought I’d share my take.
Should Bitcoin Be Valuable?
I agree with the many skeptics that Bitcoin cannot be a currency. The value has always fluctuated greatly and had long periods both inflation and deflation. Denominating prices or contracts in Bitcoin injects a lot of risk into a transaction due to this volatity. For now, this is a non-starter.
But, Bitcoin can replace gold as an asset. Yes, gold has industrial uses that Bitcoin mostly does not (setting aside timestamping value of the blockchain), but Bitcoin, assuming the protocol and code is secure, offers an asset that is definitely finite: there are at most 21 million Bitcoins. This provable scarcity alone has some value. Since Bitcoin is more convenient to hold and transfer than gold, it could take over much of the role gold and other metals play in investment. At the end of 2019 there was about 198k tonnes of gold mined, about 77k tonnes in investments and holdings, which could be valued at about 5 trillion USD. If Bitcoin gets 10% of this market, you would expect a Bitcoin to be worth about 24k USD (close to current values). …
Parsing is something that many programmers dread. Many prefer to cram all their use cases into existing formats, such as JSON or YAML, even when effectively building a DSL in those formats. If one must parse, many prefer to use parser generators such as ANTLR. But for those that are already familiar with functional programming, using a functional parser combinator library can be a very convenient and high performance alternative.
This post will cover two aspects of a parsing library that may be unfamiliar to some programmers. First I will describe a pattern to improve performance of functional libraries by safely using mutability internal to an implementation, yet opaque to users. …
I started using the Scala programming language in 2010. In 2011, I joined Twitter and worked there using Scala professionally for four and a half years. During that time I saw many comments and criticisms about the Scala community as my interest in Scala grew. I often wondered: did these criticisms apply to me and the people I worked with? I found myself insulted and defensive about them. But what is a programming language community anyway?
The criticisms I’ve seen leveled at the Scala community over the years are serious. In the early days of my awareness, it was about a culture of hostility towards new-comers, of insulting others, of constant intellectual pissing contests. Frankly, with my experience in undergraduate and graduate mathematics and physics, I didn’t find this very unusual, although it isn’t fun nor pleasant. A bunch of young men arguing about some topic, but perhaps mostly just socially jockeying to be considered the smartest, was not unusual while at university. …
In 1993 I was at Georgia Tech and first learned of a free version of Unix I could install on my PC. Linux, I had learned from a good friend, was free, if I could find a way to download it. I didn’t find a way, or the time, to install Linux until 3 years later in graduate school. For around 15 years after that point I used virtually exclusively Free Software.
I have always been a bit of a utopian type when it comes to the Internet and software. I protested at Diane Feinstein’s office in 2001 the arrest of Dmitry Sklyarov for violating the DMCA, a law I felt then, and still feel, has unconstitutional limits on freedoms of programmers as it criminalizes actions regardless to whether they are infringements to copyright. I remember finding a local showing of the film Revolution OS. …
In part 1 I discussed the main feature a build system should have: reproducibility. In this part I discuss how we get reproducibility with minimal duplicative work in a system like bazel.
In bazel we define build targets that have some inputs and produce some output. A target might produce some java jar which is the result of compiling several java files. Or a target might produce some static c++ .a library file. But what about targets that depend on other targets? …
When you write a bunch of code that may have complex internal dependencies using a language with a compiler, you need to build. Unfortunately, we have not really solved this problem. I’ve been thinking a lot about building software for the past 5 years or so, and I wanted to write some of the things I’ve been thinking in a few posts.
It’s hard to believe, but good version control (git, hg, svn) is a relatively recent development. In fact, I think the idea of using hash trees to track version history dates to 2003 in Monotone. I had the misfortune to actually use CVS fairly extensively prior to 2003–2007 period of explosion in distributed version control tools. …
Since the election, a lot of people have been talking about what they don’t like. I think it might be important to also talk about what we would like. Having such a list can help us focus on specific actions to increase the chances the future we would like comes about as soon as possible. What follows is a current list of things that seem like good ideas to me.
About