In the past few days, the market has crashed hard on basically everything, including Bitcoin. Financial losses naturally come with negative emotions and various theories of justification. Is coronavirus really the culprit? Is it the oil war? Or are they just excuses for something more fundamental? Perhaps nobody really knows since it might require a certain amount of higher dimensional insights which most of us frankly do not possess. Surprisingly, I wasn’t that much affected emotionally by the price this time like the roller coaster feeling I got from 2017 to 2018. Perhaps it has to do with the fact that my growing appreciation to the crypto space (primarily Bitcoin) over the years makes it much more than just a financial investment. As a technologist, it not only fascinates me on the technical side, but also serves as a forcing function for me to learn a bit more about other disciplines such as politics, economics, finance and philosophy, etc. In retrospect, I feel this learning experience is very rewarding and a journey well worth taking. In this post, I will try to explain why.
Trilemmas can be found across many disiplines throughout history. One of the definition is that out of three favourable options only two can be chosen at the same time. Normally it is visualized as a triangle where the available options are represented by vertices and choices represented by edges. For example, the famous impossible trinity in the world of international economics, as illustrated below, states that among three possible policy positions: “free capical flow”, “fixed exchange rate” and “sovereign monetary policy”, a country can only take two at the same time.
Recently I added a feature in nioctib.tech to display bitcoin transactions in their hexadecimal format, with internal structure illustrated by different colors and tooltips describing what those numbers actually represent. The hope is that this could offer a direct visual impression about how serialized transactions look like and can potentially be used as a debugging tool as well.
If we were to build a specie that would survive and prosper within a dynamic enironment of arbitrary complexity, one of the design choices we have to make is whether we should build a finite number of powerful enough individuals who can last “forever” or start with a dynamic set of significantly weaker individuals who can constantly adapt to the environment through the mechanisms of micro-adjustment and iterations.
If you are one of those guys who do not use a debugger and felt that the more efficient way to navigate a complex codebase is still through “careful thought, coupled with judiciously placed print statements”, then here is a nifty macro that I wrote to make it hopefully slightly easier in Scala.
TL;DR, Scriptless Script was initially invented to solve the problem of encoding smart contracts in Mimblewimble where signatures are the only way to express ownership. A key observation is that the aggregation and substraction of the schnorr signatures can be used to capture the semantics of a class of offchain protocols, leaving blockchain as an engine for verification as opposed to computation. This not only enables the smart contract capabilities for systems like Mimblewimble, but can also be used to improve the efficiency, fungibility and privacy of other blockchains such as Bitcoin.
One of the fundamental aspects of the lighting network protocol is how payment channels are established and utilized to transfer funds. Just like TCP connection, payment channel is virtual in the sense that it is achieved by carefully designed smart contracts which gives user the illusion that there exists a channel. In this post, the smart contracts expressed in Bitcoin script in different types of transactions within the lightning payment channel are discussed in details, with graphs illustrating their potential behaviors under different scenarios.
TL;DR, Bitcoin has never been anonymous since its inception. Making it more private becomes one of the most vibrant research areas in the space. While some proposals have made (or are making) their way into the Bitcoin’s reference implementation, others were either implemented in altcoins or get abandoned altogether. In this post, the following privacy enhancing technologies are categorized and surveyed based on the information they are trying to hide.
TL;DR, Even though wages have risen a lot for engineers in fast growing economies like China or India. From my perspective as a Chinese who’s been working here for many years, Sweden might still be a very attractive place to work and settle depending on who you are, primarily for the following reasons:
Recently I launched nioctib.tech, a Bitcoin education site which currently supports searching and displaying Bitcoin transactions as well as interpreting the locking and unlocking script associated with those transactions.
Yesterday I gave a talk in the Gothenburg Scala meetup titled Blockchain with Scala. A few things were covered in the presentation and I really enjoyed the discussion.
The legendary scientist Ralph Merkle talked about his paper DAO democracy in a Epicenter podcast around 2 years ago, and the episode was re-posted this summer when all the Epicenter hosts were travelling at the same time. As the result, I listened to this episode three times and really enjoyed it.
1) As much as people’s initial hope of how decentralized internet should be when it was first invented, we see very centralized services over the years for various reasons (convenience, efficiency, human nature, need for trust) at the same time when it flattens the world as humanity has never seen before.
One of the nice things about living in Sweden is the “pappaledighet” (parental leave). In the last two months I took that and had a lot of fun spending time with my lovely son Filip. But when he is asleep, I worked on a small Bitcoin library to help myself understand the intricacies of this amazing technology. After diving deeper into the blockchain space since March this year, I am gradually convinced of its potential to advance our societies because of one thing it enabled which was never possible before: dicentralised trust.
My colleague Marcus Lönnberg and myself gave a talk at the Scala Meetup
Scala, the startup way. We structured the talk with the idea from the exellent presentation
On the spectrum of abstractions given by Cheng Lou a few months ago,
to reason about making technical decisions such as asynchrous programming models, dependency injection, data types,
CRUD vs Event sourcing, kubectl vs our in house testing environment tools, etc. It was an inspiring night with a lot
of insightful discussions with all the Scalaentusiaster.
As many people out there, I have strong and bitter feelings towards Brexit and the Trump victory. I thought it represents a major setback from the globalisation which have brought so much cultual and economical prosperity into this world. It points to a gloomy future where people are futhur devided by their race, nationality, religious belief, sexuality, economic status… and there doesn’t seem to be any immediate solution for it.
Being an Erlang developer for few years, Akka gives me very homey feelings. It takes direct inspiration from the Erlang/OTP and Riak Core, and grows into a great library for building concurrent, distrbuted and fault tolerant applications. On top of its core, modules such as Akka streams is developed to serve as a better abstraction for a class of problems over raw actors; Akka HTTP is written to help build Rest APIs, Akka Persistence is added to facilitate writing CQRS systems, among other things.
Yesterday I gave a talk at the Scala Meetup in Gothenburg. It was a lot of fun to discuss functional programming and object oriented programming with all the Scala geats and how Scala manage to support both programming paradigms but still manage to keep everything in a consistent way.
I remember the horror when I first came across implicit in scala, it sounded like a recipe for incomprehensible code. After a while I started to realize that there are a number of use cases where it could be very useful. An important example is method injection as it is discussed in the learning scalaz tutorial.
About 3.5 years ago when I just started at Klarna, I was wondering if its business model could be replicated in China. The following is a little note that I had at the time about my naive perception of Chinese E-commerce in general and online payment in particular, and the reason why it might be hard.
E-commerce is taking over the world. There is no better evidence than the astonishing number put out by the e-commerce juggernaut Tmall today: In just about 38 minutes after it kicked start the double 11 shopping carnival, the Chinese equivalent of Black Friday, it has already handled its first 10 billion RMB (1.63 billion USD) worth of transactions, setting a new world record with huge margin.
It is a good idea to prefix the git commit message with story id for better traceability. For the same reason, it is also nice to prefix the branch name with story id as well, even though git branch is more short lived than commit messages.
Yesterday, a burglar sneaked into our office and stole one of my colleague’s Macbook while all of us were having a meeting in a conference room.
I love Ansible and Docker, they are great two pieces of software that work pretty nicely together. While there is ansible module to manage docker containers, docker images themselves can be built using ansbile as well. We just need a base images that’s ansible enabled to start with: