Friday, October 4, 2019

How to merge multiple PDFs into a single PDF

Having multiple PDF files you can merge them into a single PDF file using pdfunite command.


pdfunite 1.pdf 2.pdf 3.pdf result.pdf

The command is included in poppler-utils package and is available in Fedora out of the box. If missed, can be installed as follows:

sudo dnf install poppler-utils

Friday, February 8, 2019

Book review: Clean Architecture

This was a startup. We worked 70 to 80 hours per week. We had the vision. We had the motivation. We had the will. We had the energy. We had the expertise. We had equity. We had dreams of being millionaires. We were full of shit.
Uncle Bob

This is an amazing book! It leads you through all the aspects of software structure and design. The book starts with a definition of an architecture and basic blocks it is built on. It jumps into design principles and describes them in a very detailed way using valuable examples all along the pages. The book promotes a plugin architecture; explains different boundaries you have to consider before starting the actual development; advises you to protect your business rules from the details like frameworks, databases, web; talks about the dependency rule, and much more. The chapter about clean embedded architecture will definitely give embedded system engineers food for thought. The last autobiographical chapter is especially awesome, Uncle Bob shares with his story which started in the late 1960s ...

I was impressed by the simplicity with which the whole book is written. The author's experience amazes. I thought I knew SOLID principles but after reading the corresponding chapter I was surprised how wrong has been I.

You must definitely read this book if you are either experienced developer, or just curious about software design, or you are at the start of your career as a software engineer.

Time spent on the book: ~15 hours

Tuesday, February 5, 2019

Book review: Kafka The Definitive Guide

The book describes different aspects of Kafka. It shows how to install Kafka and the stuff you need to start it. Chapters 3-5 give you the general picture of how Kafka works, parts it consists of, overview of producers and consumers and how they can be used in Java code. The chapter 5 (Kafka internals) is really nice and written in a clear and understandable way. It explains basic blocks and approaches Kafka is built on. I should also highlight the last chapter which is about stream processing. It presents common design patterns and explains few examples where Kafka streams are really good. Everything else is about Kafka configuration and monitoring. You will definitely feel overwhelmed while going through that information.

I should admit that I've never worked with Kafka and expected to get needed knowledge to start using it after reading the book. But only few chapters, mentioned above, gave me the needed understanding and were valuable for me at this stage. Kafka is not that simple as it may look. There are a lot of configuration properties and trade-offs you should consider when using it. One of the conclusions I ended up after reading this book is that it is incredibly easy to shoot yourself in the foot while configuring Kafka.

I would recommend chapters 3-5, 11 if you are new to Kafka world. Other chapters can be used as references during the actual work with Kafka. The book provides a lot of problems you might encounter and explains how to deal with them. So, you may review the trade-offs behind those problems in detail when you really face with them.

Time spent on the book: ~20 hours

Monday, January 21, 2019

Book review: Java Persistence With Hibernate (Second Edition)

A really nice book about Hibernate and its internals. It starts with the ORM concept, problems this concept tries to solve and main trade-offs. Authors introduce a simple auction application and explain how to design domain models and their relationships using Hibernate and this application all around the book. There are many approaches to solve the same problem and this book shows them and explains the pros and cons behind the solutions you can apply. A few chapters go even beyond the Hibernate itself by giving overview of the fundamental knowledge of database transactions, ACID attributes, locks, isolation levels and caching.

This is my first book in Hibernate and I had had rough knowledge before I read it. It helped me to structure my knowledge, helped me to look under the hood and see how things actually work. I finally understood those occasional exceptions we got at my previous project and parts which were designed in a wrong way. However, there is one thing I would like to see better explained - a second-level cache. It would be nice to see it earlier in the book and get more examples and details about its applications and trade-offs.

I would definitely recommend this book to all levels of engineers. It is also a good source to refresh your Hibernate knowledge or to come back later if you need some clarifications.

Time spent on the book: ~39 hours