Vlad Mihalcea

Code review best practices

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

Code review is a great software instrument and you should definitely use it to improve the quality of your code. But like any other tool, it may be misused sometimes. That’s why I came up with a list of best practices to guide you when reviewing your peers’ code.

  1. Code review is not testing: Code review is a developer-to-developer business and it doesn’t involve any testing. Code review should check if the task requirements are met in the cleanest possible way.
  2. You don’t tell what to code review: The same way you don’t tell a tester what to test, you should never tell your peer what to review. The magic of peer review comes from your peer own perspective on the current task design and implementation. Two minds are always better than one.
  3. You should always check all changes: Bugs may be hidden anywhere and you should search for them diligently. To have the whole picture you need to go through all changes.
  4. Requirements first: Requirements are the most important driving force. After all, that’s what the customer is paying for. If the current changes are suboptimal you need to reopen the issue. If you happen to spot other code sections that need to be refactored you should create new issues instead of reopening the current one. The “single responsibility principle” applies to tasks as well as to coding.
  5. One-to-many activity: If you can’t make sure you grasp the code change intention it’s safer to ask somebody else to review it further.
  6. A way of learning: Code review is a great learning technique especially on large projects. Ideally, you should become familiar with every aspect of your project, but if the project is too large you can at least specialize in multiple modules.

Happy code reviewing!

Transactions and Concurrency Control eBook

How to detect the Hibernate N+1 query problem during testing

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

Introduction

In this article, you are going to learn how to automatically detect the N+1 query problem when using JPA and Hibernate using the db-util open-source project.

With Hibernate, you manage entity state transitions which are then translated to SQL statements. The number of generated SQL statements is affected by the current fetching strategy, Criteria queries or Collection mappings and you might not always get what you expected. Ignoring SQL statements is risky and it may eventually put a heavy toll on the overall application performance.

I’m a strong advocate of peer review, but that’s not “sine qua non” for detecting bad Hibernate usage. Subtle changes may affect the SQL statement count and pass unnoticed through the reviewing process. Not in the least, when it comes to “guessing” the JPA SQL statements, I feel like I can use any extra help. I’m for as much automation as possible, and that’s why I came up with a mechanism for enforcing the SQL statement count expectations.

Read More

JSON pattern matching with sed, perl and regular expressions

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

Why VIM?

Sooner or later there comes the day when your easy-to-use IDE becomes useless for handling huge files. There aren’t many editors capable of working with very large files, like production logs for instance.

I’ve recently had to analyze a 100 MB one-line JSON file and once more VIM saved the day. VIM, like many other Unix utilities, is both tough and brilliant.

Git interactive rebase uses VIM by default, so it’s worth knowing VIM.

Read More

MongoDB and the fine art of data modeling

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

Introduction

This is the third part of our MongoDB time series tutorial, and this post will emphasize the importance of data modeling. You might want to check the first part of this series, to get familiar with our virtual project requirements and the second part talking about common optimization techniques.

When you first start using MongoDB, you’ll immediately notice it’s schema-less data model. But schema-less doesn’t mean skipping proper data modeling (satisfying your application business and performance requirements). As opposed to a SQL database, a NoSQL document model is more focused towards querying than to data normalization. That’s why your design won’t be finished unless it addresses your data querying patterns.

Read More

A beginner’s guide to MongoDB performance turbocharging

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

Introduction

This is the second part of our MongoDB time series tutorial, and this post will be dedicated to performance tuning. In my previous post, I introduced you into our virtual project requirements.

In short, we have 50M time events, spanning from the 1st of January 2012 to the 1st of January 2013, with the following structure:

{
    "_id" : ObjectId("52cb898bed4bd6c24ae06a9e"),
    "created_on" : ISODate("2012-11-02T01:23:54.010Z")
    "value" : 0.19186609564349055
}

We’d like to aggregate the minimum, the maximum, and the average value as well as the entries count for the following discrete time samples:

  1. all seconds in a minute
  2. all minutes in an hour
  3. all hours in a day

Read More

MongoDB time series: Introducing the aggregation framework

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

In my previous posts I talked about batch importing and the out-of-the-box MongoDB performance. Meanwhile, MongoDB was awarded DBMS of the year 2013, so I therefore decided to offer a more thorough analyze of its real-life usage.

Because a theory is better understood in a pragmatic context, I will first present you our virtual project requirements.

Introduction

Our virtual project has the following requirements:

  1. it must store valued time events represented as v=f(t)
  2. it must aggregate the minimum, maximum, average and count records by:
    • seconds in a minute
    • minutes in an hour
    • hours in a day
    • days in a year
  3. the seconds in a minute aggregation is calculated in real-time (so it must be really fast)
  4. all other aggregations are calculated by a batch processor (so they must be relatively fast)

Read More

A beginner’s guide to ACID and database transactions

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

Introduction

Transactions are omnipresent in today’s enterprise systems, providing data integrity even in highly concurrent environments. So let’s get started by first defining the term and the context where you might usually employ it.

A transaction is a collection of read/write operations succeeding only if all contained operations succeed.

Transaction workflow

Inherently a transaction is characterized by four properties (commonly referred as ACID):

  1. Atomicity
  2. Consistency
  3. Isolation
  4. Durability

Read More

Asciidoctor for collaborative book writing

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

I’ve been searching for the most suitable tools I’d use for my book writing process and I’ve settled for Asciidoctor.

In the first place, I decided to use a markup text language that’s implicitly supported by GitHub, and after reviewing Markdown and Asciidoc, I opted for the latter for it offers a richer syntax.

Read More

An open Java Transaction book

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

We live in a world of both commercial and open-source software, each one having strengths and weaknesses. But when it comes to books, there hasn’t been any noticeable revolution towards embracing new writing methodologies. The current book market shares the same philosophy with commercial software business model. There is a fee for obtaining a book copy, evolution is rather slow and usually, there is a single person carrying all the weight of writing. It’s worth noticing that this model offers only the author’s point of view on a particular subject.

Yet, there is nothing wrong with the classic book writing process, but that doesn’t mean it has to be the only way of conceiving a book.

Why not embrace the open-source philosophy for writing books too? There are advantages to such an endeavor:

  • the writing effort could be split among multiple domain connoisseurs
  • there is no dead-line pressure, meaning you can write as much as your spare time allows you to
  • we can constantly improve the book, in a similar way with software releases: 1.0.0, 1.1.0, 2.0.0
  • the book is available from day one, and it can constantly be reviewed and enhanced using the Agile methodologies

I am taking this idea very seriously and therefore I decided to write my first open book, entitled “Unfolding Java Transactions”. I will use GitHub to manage the writing version management.

Read More

Good vs Bad Leader

If you are trading Stocks and Crypto using Revolut, then you are going to love RevoGain!

Software is more about people than technology. When I graduated from college, I thought I only had to master technical skills to be a great developer, thinking that people skills are the appanage of managers solely. But experience taught me a good lesson on this one. Whenever I hear that people skills can’t be acquired, and you have to be a born with them, I just beg to differ.

Nobody is born with any given skill, we learn through observation and by copying others (our role-models). You might get some valuable info from reading books on this subject, but I remember an old saying, scribbled on the cover of a book I read in my teens: “Life is not learned from books, but by living it.”

If you feel you’re having troubles dealing with people, then you only have to watch and learn. It’s as simple as that. Even if you are not currently leading anyone, it pays off learning how to handle people, especially in our people-centric industry.

While meeting great leaders has always been a wonderful experience, it is the bad ones that really enforce the true values of a leadership. I’ve been lucky in this sense, as I got the chance to meet some of the worst leaders you can possibly imagine. Let’s see how a good leader compares to a bad one.

Read More