Subscribe to get my posts before anyone else!

AI Doesn’t Make Me the Same Coffee

And it doesn't understand wine either

../img/posts/2024/2024-02-13/manual-coffee-making-process-cover.jpg
I started to consume and appreciate coffee after I moved to Sweden in 2018. Coffee is a key part of the Swedish culture of fika, and it’s used as a way to combat the dark winter days months. For years, I’ve been considering the idea of buying a fancy coffee...

Continue reading...

Surviving the AI Revolution as a Software Engineer

Is there still any hope?

../img/posts/2023/2023-09-17/head-down-teddy_cover.jpg
Dear software engineer, as you may already know, AI is here to stay. It’s inevitable, and it changes everything. If you are worried about what OpenAI’s ChatGPT can do, hold on because it’s just the beginning. The next wave of extremely powerful and specialized AI models is coming faster than...

Continue reading...

A Prime on Public Key Infrastructure

How do we trust each other in the digital era?

../img/posts/2023/2023-08-13/dark_well-cover.jpg
The whole internet is secured by the power of symmetric and asymmetric cryptography. Each time you visit a website, a cryptographic handshake occurs between your browser and a web server located somewhere on Earth. The authenticity of this connection is verified by a technology known as Public Key Infrastructure (PKI)....

Continue reading...

My PhD as a Comic

The time when I became a superhero

../img/posts/2023/2023-07-10/comic-cover.jpg
Doing good science is hard. Communicating science is even harder because it requires a larger doses of creativity. I learned during my 5 years as a PhD student that art visuals and stories are excellent ways to communicate scientific ideas and results. But using art as a form of expression...

Continue reading...

How to Give a Great Technical Presentation

Here's what I've learned

../img/posts/2023/2023-06-22/circus-cover.jpg
Public speaking has never been my forte. As a child, I often preferred blending into the crowd rather than standing out.1 However, I’ve since realized that in the pursuit of professional excellence, there is no way to avoid the public eye. Talent and hard work doesn’t really matter if I...

Continue reading...

Prompting is All We Need

Is this the end of software engineering as we know it?

../img/posts/2023/2023-05-27/pino_pizza-cover.jpg
I’m a software engineer at heart. Consequently, a big chunk of my time revolves around writing code to solve problems. Lately, though, I’ve found myself putting aside the code-writing labor and everything else in text format. Still, I consider writing one of the most gratifying activities (especially once it is...

Continue reading...

Let's Face It: Paper Figures Are Always Subject to Change

The story of a single figure

../img/posts/2023/2023-03-10/initial_whiteboarding_cover.jpg
There is one painful truth about the process of writing research papers that I haven’t heard anyone talking about during my years as a PhD student: Figures keep changing until the very last moment! It seems that the journey of figures (and other kinds of visualizations) in research papers is...

Continue reading...

Securing a Permanent Job in Sweden Before Completing My PhD

My personal experiences and tips

../img/posts/2023/2023-03-10/subway_in_red_cover.jpg
For better or worse, a PhD is a time constrained endeavour. For me, this represented almost 5 years of full-time research in Computer Science at KTH. When approaching completion, the decision of whether to pursue a career in academia or explore other paths lay before me. After some key considerations,...

Continue reading...

Data Serialization/Deserialization in Java With Apache Avro

Getting started

../img/posts/2023/2023-01-20/sparrow-cover.jpg
When working with data processing in Java, choosing the right file format for storing and transmitting the data is crucial. Each format (such as CSV, JSON, or Parquet) has its particular advantages and disadvantages, as they are specifically designed to cater to different use cases. In this article, I’ll focus...

Continue reading...

How to Write a Good Cover Letter for a Research Paper

Quick an easy

../img/posts/2022/knowledge_cover.jpg
Submitting a research paper is probably one of the most happy moments in the working life career of PhD students. You’ve been dealing with a research paper for months, maybe years. And you know, clicking that “submit” button represents such a moment of relief. You just want it to be...

Continue reading...

The True Value of Attending Academic Conferences

It's not only about the technical content

../img/posts/2022/fse_cover.jpg
I recently attended the 29th edition of ESEC/FSE 2022 in Singapore. ESEC/FSE is one of the most prestigious conferences in the Software Engineering field.1 This was my first time participating in an academic conference (in person). I went there to present two papers. But let me admit it, I had...

Continue reading...

The Execution Lifecycle of a Java Application

Or... what happens when you run a Java program?

../img/posts/2022/statue_cover.jpg
If you are reading this post it’s likely that you already know how to write Java code. That’s very good for you, I think everyone should know how to code these days (in the same way everyone should know about basic math operations such as +, -, *, and /...

Continue reading...

Why Debloating Third-Party Software?

The case of the Log4j vulnerability

../img/posts/2022/2022-06-15/satyr-cover.jpg
Most software applications today are built using third-party libraries and frameworks that together constitute the application’s software supply chain. These libraries are often large and complex pieces of engineering, with many features and functionalities to support a wide range of use cases. Consequently, most applications only use a small subset...

Continue reading...

My Ultimate Terminal Customizations for macOS

A guide

../img/posts/2022/cheers_ascii_cover.jpg
There is a common belief that top-class software developers can do their job without ever abandoning the terminal. I think this is true to some extent. It is almost impossible to become an outstanding software developer without knowing how to get the most out of the terminal. Personally, I treat...

Continue reading...

No One Cares About Your Research!

A comfortable truth

../img/posts/2022/park_paint_cover.jpg
That’s the truth. No one cares about what you’re doing in your PhD, no one, no one!1 But don’t be sad, because this is actually a very comfortable truth. I only came to this realization after a while. Once you get it, then you will start looking at your PhD...

Continue reading...

The Dynamic Features of Java

A long-standing challenge for static analyzers

../img/posts/2022/untamed_horse_cover.jpg
The existence of dynamic features built-in within the language allows Java developers to dynamically transform their program executions at runtime. For example, using the Java Reflection API, one can inspect and interact with otherwise static language constructs such as classes, fields, and methods, e.g., to instantiate objects, set fields and...

Continue reading...

Inversion of Control and Dependency Injection in Java

The holy grails of modern enterprise Java frameworks

../img/posts/2022/universitetet_cover.png
Inversion of Control (IoC) is a programming principle. The idea of IoC is delegating the control of parts of our application to a framework that initializes some specific task for us. Dependency injection (DI) is a popular design pattern that applies the IoC principle. This pattern was made popular by...

Continue reading...

AOT vs. JIT Compilation in Java

Which one is better?

../img/posts/2022/curves_cover.jpg
There are two ways of compiling a Java application: using Just in Time Compilation (JIT) or Ahead of Time Compilation (AOT). The first is the default mode, and it is used by the Java Hotspot Virtual Machine to translate bytecode into machine code at runtime. The latter is supported by...

Continue reading...

How to Write a Good Revision Letter For an Academic Paper

My system to address major revisions and get my papers accepted

../img/posts/2022/ring_cover.jpg
I just finished a major revision for one of my research papers.1 It was a lot of work, as usual. Writing a response letter for the editor and reviewers is always a challenging process. After receiving the editor’s decision, I had to put aside what I’m working on at the...

Continue reading...

Staying in Academia: How PhD Profiles are Evaluated?

An overview

../img/posts/2022/red_paint_cover.jpg
Let’s say that you just finished your PhD and have decided to stay in academia.1 Typically, the next move is applying for a temporally position as PostDoc at some good university. To get a good PostDoc, at the end of the PhD your profile will be rigorously evaluated. At this...

Continue reading...

Bus Factor: A Human-Centered Risk Metric in the Software Supply Chain

Public transportation may become hellish

../img/posts/2022/plane_paint_cover.jpg
What if some members of a software project are suddenly hit by a bus? What would happen to the project in such an unfortunate scenario? According to Wikipedia, this question was first pointed out in 1994 when someone publicly asked about what would happen to Python if Guido van Rossum...

Continue reading...

How to Write a Good Paper Rebuttal

A practical guide

../img/posts/2022/maxwell_cover.jpg
The rejection of a research paper is always a tough spot in the life of researchers. Today, many top conferences allow the authors of a rejected paper to submit a so-called “paper rebuttal.” This is a last chance for the authors to defend their work in case the reviewers made...

Continue reading...

How to Track the Progress of a Research Project

My methodology based on the weekly delivery of verifiable artifacts

../img/posts/2022/globe_cover.jpg
Academic research is a very intense and mentally demanding activity subject to constant change and evolution. At the beginning of a research project, there is often no clear path to follow. Consequently, researchers have to figure out a good plan to take in order to achieve their objectives. But a...

Continue reading...

Encoding, Encryption, Hashing, and Obfuscation in Java

From concepts to code

../img/posts/2021/paint_on_wall_cover.jpg
The concepts of encoding, encryption, hashing, and obfuscation are at the core of many critical software technologies. For example, encryption and hashing are the backbones of the blockchain technology that fuels cryptocurrencies, whereas encoding and obfuscation unify and secure the web, respectively. Unfortunately, these concepts are often mistakenly confused or...

Continue reading...

SIGBOVIK: The Ig Nobel for Academics and Computer Science Researchers

The most wanted proceedings for fruitful procrastination

../img/posts/2021/splatter_cover.png
The SIGBOVIK’s flagship conference is a satiric and incredibly interesting Computer Science venue sponsored by the self-called “Association for Computational Heresy (ACH).” The event has been celebrated annually since 2007 in honor of Harry Quantifiability Bovik, an unconventional professor from Carnegie Mellon University. SIGBOVIK is the cradle of the funniest...

Continue reading...

How to Set Up A Blockchain Network With Hyperledger Besu

Look mom, I'm running my own blockchain!

../img/posts/2021/floor_art_cover.jpg
If you are a Java developer interested in cryptocurrencies and blockchain-related technologies, you should probably have heard about Hyperledger Besu. Besu is the official Java client of the Ethereum blockchain. As an enterprise-grade client for public and private networks, Besu is able to connect to the blockchain and verify all...

Continue reading...

How I Overcome Writer's Block When Preparing a Research Paper

My bulletproof approach

../img/posts/2021/stalking_monster.jpg
Every time I start writing a new research paper, the same freezing feeling seems to emerge when I look at the blank page. This problem is known as writer’s block, and most academics suffer from it in one way or the other. I’ve dealt with this invisible monster on many...

Continue reading...

Seven Reasons to Go For a PhD In Computer Science

The good and the ugly

../img/posts/2021/rabbit_cover.jpg
Pursuing a PhD is a unique and personal experience. Admittedly, it is a journey mostly driven by personal ambitions and pride. The decision to begin this journey (i.e., becoming a PhD student) is a very serious because a PhD can literally change your life. It is not something to be...

Continue reading...

The Software Supply Chain

A quick look at the modern software production landscape

../img/posts/2021/crane_cover.png
The software supply chain comprises all the technology involved in shipping a piece of code from development to its deployment in a production environment. Several actors and different technologies participate in this complex process, e.g., developers, IDEs, compilers, package managers, a so on. The success or failure of a software...

Continue reading...

Design For Microservices!

An easy way to boost the popularity of your open-source projects

../img/posts/2021/clouds_cover.png
The microservice architecture style consists of small and independently deployable services that run all together around a business domain. These small services act like living cells in an organism, each providing unique functionalities to protect the health of the whole system. Microservices have transitioned from a mere buzzword ten years...

Continue reading...

Configuring Remote Connections in Unix-Based Systems Using SSH

A noob's guide

../img/posts/2021/metro_station_cover.jpg
When working as a software engineer, you will need to connect to a remote computer hosted on a remote server.1 This is a common task for developers, sysadmins, and researchers. This post will show you how to configure a remote connection in Unix-based systems. You will learn how to create...

Continue reading...

What Does It Take to Become a Software Architect?

A matter of responsibilities

../img/posts/2021/metro_in_stadium_cover.jpg
Programmers and software engineers are in high demand today. In particular, those programmers who adapt to the new technological challenges and evolve their skills are more likely to grow professionally. A natural career path for experienced engineers to push forward their lifework is transitioning towards a software architect role. In...

Continue reading...

Hermit Programmers are Dead

Don't call yourself a programmer anymore

../img/posts/2021/ladybug_cover.jpg
It’s 2021, and the job market has crashed due to a ghastly global pandemic. At the same time, one particular job has taken over an idealized professional place: the computer programmer. They are perceived to be experts who know how to build, fix, and deploy software artifacts. Most of them...

Continue reading...

Replace the Disqus Commenting System on Your Blog

GitHub-based open-source alternatives are better

../img/posts/2021/angry-emoji.jpg
I started using Disqus in 2018. At that time, it was arguably the leading commenting management system for both small and large websites. Its popularity was well deserved: ubiquitous integration, easy to set up, friendly admin panel, clean comment widget design, excellent spam filters, great content engaging features, etc. Three...

Continue reading...

Book Review: The PhD Grind

A tale of perseverance and learning from failure

../img/posts/2021/phd_grind_cover.png
I recently read the amazing short book titled “The PhD Grind” by Prof. Philip Guo. The book (~100 pages) is a compendium of his memories, written right after finishing his PhD in 2012. I felt ecstatic with such a brilliant masterpiece that I could barely put it down once I...

Continue reading...

The Fork/Join Java framework

Boosting performance through parallelization

../img/posts/2021/night_tree_cover.jpg
The Fork/Join framework makes it easy for Java developers to take advantage of the parallel execution supported by multicore processors. This API was added to the java.util.concurrent package since JDK 7, and it has been improved in subsequent versions of the JDK. It allows the developer to forget about the...

Continue reading...

Use Custom LaTeX Macros to Boost Your Writing Productivity

Forget about these annoying numerical glitches in your LaTeX document

../img/posts/2021/snail_cover.jpg
If you ever use LaTeX to write your research papers or technical reports, then you should know how useful and powerful this tool is. Let me just mention three well-known benefits of using LaTeX: 1) beautiful typeset output (especially when dealing with mathematical notations); 2) consistent handling of references and...

Continue reading...

Enhance Your Readme With Asciinema

How to create beautiful terminal recordings that your users will love

../img/posts/2021/asciinema_cover.jpg
Asciinema is an excellent tool for recording and sharing terminal sessions. The project is open-source and available on GitHub. A key feature of asciinema is that it allows the viewer to copy-paste the text from the player itself directly. The result of a terminal recording is an editable text file...

Continue reading...

Clean Commit Messages

The way I like to write them

../img/posts/2021/2021-01-12/station_signs_cover.jpg
It doesn’t matter what kind of software you’re building; you will inevitably use Git these days. I think Git is one of those skills for which it takes a little amount of time to learn the basics, but a lifetime to master. But this article is not about the Git...

Continue reading...

Dynamic Programming by Example

A handful of representative problems solved in Java

../img/posts/2020/circular_effect_cover.jpg
Dynamic programming (DP) is one of the most basic and, at the same time, challenging programming paradigms. Some of the best algorithms that I know, such as the Levenshtein distance and DTW are implemented using this paradigm. It consists of simplifying a complicated problem by breaking it down into simpler...

Continue reading...

Shortening the Distance Between Academia and Industry

An imperative need of researchers

../img/posts/2020/skates_cover.jpg
Research is about solving relevant problems for the best of humanity. However, the relevance of certain problems is a highly subjective matter. Is it relevant to send a human being to Mars? Maybe it is, or maybe not. One thing is for sure: research is expensive. As far as I...

Continue reading...

Empirical Software Engineering Research Is Harder Than You Think

Trust me

../img/posts/2020/children_gardening_cover.png
You are a very talented researcher. Perhaps you come from a popular field such as machine learning (ML) and have a ton of papers. But now, you have decided to expand your horizons and solve software engineering (SE) research problems. Hence, you will collect and analyze empirical data about software...

Continue reading...

How to Deploy a Simple Spring Boot Application in GCP

Getting started with Google Cloud Platform

../img/posts/2020/2020-07-02/heroes-cover.jpg
After having my Java Spring Boot web app ready, the next step is to show it to the world. This means deploying it on the internet.1 I landed on Google Cloud Platform (GCP) for this task. Why? Well, GCP in 2020 gives a nice starting credit of $100, and after...

Continue reading...

The Producer-Consumer Pattern in Java Made Easy

An example using the BlockingQueue Java interface

../img/posts/2020/java_design_patterns_cover.jpg
I see the usage of a recurring handy pattern for doing data collection and analysis in software engineering: the producer-consumer pattern. This pattern simplifies the data acquisition (handled by the Producer), and the data post-processing (handled by the Consumer). The Producer collects the data items one at the time and...

Continue reading...

Diversity-Driven Software Debloat

Leveraging the wisdom of multiple coverage tools

../img/posts/2020/crowd_cover.jpg
For months, I have worked on dynamic debloat of Java artifacts with JDBL. To do so, I need to compile and execute software applications to determine what parts of the compiled application are used when executing it using some workloads. Then, with the collected usage information, I debloat the unused...

Continue reading...

Unix Cmd Hacks

Boosting automation from the shell

../img/posts/2020/unix_course_cover.jpg
I want to share my personal notes of the edX course Unix Tools: Data, Software and Production Engineering, by Prof. Diomidis Spinellis. I attended this course from March to June, 2020. It was my first MOOC experience. I have to say that I learned a lot in this course, and...

Continue reading...

Recipes for Effective Academic Emailing

A template-based approach

../img/posts/2020/word_cloud_cover.jpg
You cannot be a good researchers without being a good communicator. If you are good enough at both, they you may qualify for becoming a supervisor. Being a good academic supervisor is a matter of practice, discipline, and the development of leading skills. Handling tons of emails is the everyday...

Continue reading...

Deploying to Maven Central

A three-steps guide

../img/posts/2020/maven_journey_cover.png
Maven Central is the de-facto repository for hosting software artifacts that compile to the JVM. It is one of the world’s largest and oldest archives of software libraries. In this post, I’ll describe the process of releasing a new artifact in Maven Central following a step-by-step approach. © Excerpt of...

Continue reading...

The Cuban Revolution

My personal vision

../img/posts/2019/cuban_flag_cover.jpg
Recently, a friend of mine kindly requested me for information about Cuba and how the Revolution affected the people. He wanted to educate his child about socialism, from the voice of someone who lived it. The information is intended to be given to middle school kids. These are the five...

Continue reading...

The Zip Slip Vulnerability Exploitation

Zip slip attacks

../img/posts/2019/zipper_cover.jpg
In today’s ever expanding-open source communities, developers rely heavily on third-party libraries and copy-pasted code from community websites like StackOverflow to accelerate productivity. Such code reuse tendency helps to decrease development time and effort, but also means that vulnerability in shared code (i.e., libraries) gets spread dramatically faster, as occurs...

Continue reading...

The Practice of Teaching

The ultimate skill to learn

../img/posts/2019/people_cover.png
Nobody can deny that teaching is hard. I strongly believe that teaching is one of the most essential skills to learn in this century. Whether you are a junior software developer or a renowned member of a firm, your ability to communicate your knowledge effectively will determine your future success....

Continue reading...

Unnecessary Code

Clarifying the concept

../img/posts/2018/codecode_cover.png
After reading the paper “Is Static Analysis Able to Identify Unnecessary Source Code?” about the negative impact of unnecessary code in the software industry, I felt stuck with the many different (but very related) concepts around this topic. One can think that unnecessary code is all code that is not...

Continue reading...

A Starting Guide to Programming Contests

Is it worth it?

../img/posts/2017/competitive_programming_brain.png
I discovered the world of competitive programming challenges during my first year at university. At that time, I knew very little about computer algorithms or even mind sports. However, the idea of learning how to code by myself, just using an online judge, attracted my attention from the first moment....

Continue reading...

Git Fundamentals

The must-know git commands for software developers

../img/posts/2017/git_logo_cover.png
“Git proved I could be more than a one-hit wonder.” ― Linux Torvalds Git is the standard version-control system for software development. Git was created by Linus Torvalds in 2005 to support the development of the Linux kernel. Since then, Git has become an essential tool for both junior and...

Continue reading...

How I Beat the IELTS Academic With Just a Month of Self-Training

My personal comments and suggestions

../img/posts/2017/IELTS.jpg
The International English Language Testing System (IELTS) is one of the major English language tests for higher education and immigration in the world. It is jointly managed by the British Council, IELTS Australia, and Cambridge English Language Assessment. IELTS is accepted by most Australian, British, Canadian, and New Zealand academic...

Continue reading...