2017 draws to a close, it is time to recap what I did in this year. The “work” here is divided into
2 parts: daily and part-time.
(1) Cryptography and security.
I joined in current company in December
2017 is literally my fresh year. Our team focuses on cryptography, and this area has a high requirement on maths, such as Number Theory, Linear Algebra, etc, so it is a really challenge for me since I have left campus for nearly
10 years, and my past work experience involved much on engineering. Honestly, I have made some progress in maths compared to one year ago, but there is still a large distance to the expert in cryptography field. If you want to dive into this discipline, this tutorial is a good rudimentary material.
In this December, I went to London to attend Black Hat meeting (The trip report is here). The security is definitely becoming more and more important, and one of my deep feeling is many sub-fields of security don’t require much maths background like cryptography, but they require you are versed in the whole computer system. Maybe security becomes next big business opportunity.
(2) High performance computing.
Since cryptography introduces a lot of computation, reducing time is an important task.
GPU is heavily used in
HPC area now, so I learned
CUDA/GPU programming and implemented some algorithms in
GPU. One by-product is lscuda, a command mimics
OpenMP to paralleling code in
CPU is my another task in the past year.
Because most Open Source code in cryptography is written in
C++, one big harvest is I got the chance to refresh and use
C++ in my daily life, and it really improved my coding skill. E.g., a generic log implemented in
d) Performance tuning.
Finding the hot-spot of program is an eternal topic in tuning high performance computing. I dived into
Flamegraph tools shipped on
Linux, and these weapons indeed helped me to find the culprits.
Rust programming language.
Every year I will try to get my hands dirty on one new programming language. After watching this video, I decided to learn
Rust this year. STREAM and RustTCPFramework are
2 small exercises.
perf, I knew
eBPF is a new powerful tool on
Linux, so I also spent a lot of time in bcc project. The by-product of this procedure is using
(4) Recommended books:
The following are books I read this year and think they are worthy for recommendation:
a) Code: The Hidden Language of Computer Hardware and Software.
This book introduces the basic composition of the computer. For implementing some cryptography algorithms, I need to build the circuit logic. This book gives a good reference.
b) Multicore Application Programming: for Windows, Linux, and Oracle Solaris (Developer’s Library).
This book was published in
2010, but it is still a comprehensive handbook for learning parallel programming.
c) Grokking Algorithms: An illustrated guide for programmers and other curious people.
This book just covers the basic knowledge of algorithm, not too deep. It is suitable for reviewing algorithm before interview.
For the next year, now I plan to do the following tasks:
(1) Continue to learn security and cryptography;
(2) Study one functional programming language.
Let me keep going!