Pride and Prejudice


resolutions

Introduction

2018 was a very busy year for me. I learned a lot of new things this year, was a part of one big project and wrote a couple of smaller libraries. In this post, I’ll highlight my accomplishments of 2018 along with disappointments.

This year’s results

Learning Rust

The end of the previous year and the beginning of this year I was learning Rust:

Mana - Ethereum client

Mana is an open-source Ethereum client written in Elixir. I started contributing to the Mana project in the spring of 2017 but this year I started spending much more time on the project. We made a great progress:

  • At the beginning of the year, Mana wasn’t passing any blockchain tests. Now, it passes all blockchain tests from all hardforks starting from Frontier and ending with the most recent hardfork - Constantinople.
  • We fully synced ropsten test network.
  • Mainnet sync is in-progress.
  • Work on P2P layer is in-progress
  • Work on JSON RPC is in-progress.
  • In the process of writing an Ethereum client, I learned how it works under the hood and a lot of things directly related to the blockchain technology. Some of these things are:
    • ZkSnarks that are used for Zero-knowledge proofs
    • Ethereum uses BN128 elliptic curve for ZkSnarks. So I implemented it in Elixir and published as a separate library. It’s used in the Mana project.
    • Node discovery based on Kademlia algorithm

I’m happy with the progress we made this year. We almost finished our Ethereum client and I hope we’ll release an alpha version soon.

Emacs/Emacs Lisp

I’ve been using Emacs for more than 2 years. But in the summer of this year I decided to dive into it and level up my Emacs skills:

Blog posts

You’re reading this post from my blog Kraken of Thought. I created it to share my thoughts and feelings about things that are interesting to me. This year I tried to be consistent and write posts every once in a while. I’m pretty proud of сontent of these post because they capture my feelings and concerns directly related to the work I was doing at a specific period of time. Here’s a full list of posts:

Disappointments

Gamedev frameworks in Rust

I have a couple of ideas for video games. And I started learning Rust mainly for Game development. But all game engines in Rust turn out to have big downsides:

  • they all are in an unfinished state.
  • they lack good documentation.

So the current state of Rust game dev tools is not suitable for making complex games.

Inconveniences for developers in Ethereum

As described in the first section of this post I was involved in the development of Ethereum client this year. I encountered a couple of inconveniences in Ethereum dev community. Below are excerpts for my post Things to consider for Ethereum dev community:

  • Ethereum has common tests that protocol level developers should use when implementing the protocol itself. The problem with these tests is that they’re not documented at all and it’s very hard to understand what exactly any particular test is testing.
  • Most Ethereum clients are backward compatible with older versions of hard forks. A developer should keep all hard fork changes in the head, and in most of the clients, these changes look like dirty hacks with many conditional clauses.
  • Some aspects of Ethereum are poorly documented. One of these is DEVp2p - a protocol used for peer-to-peer node communication

Unfinished projects

I feel sad because some projects that I started this year weren’t finished.

  • I started learning Emacs Lisp to write plugins for my favourite text editor. I have a couple of ideas for plugins but I didn’t have time to implement them.
  • I started working on web application this year. It isn’t open source yet and I think it has some interesting ideas. I’m planning to use it myself first.

I hope to return to them when I have some free time.

Conclusion

This year was a very productive year for me. I hope next year will be as productive as this year and I will finish projects that weren’t finished this year.