Subscribe now to get my posts before anyone else!
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...
My PhD as a Comic
The time when I became a superhero
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...
How to Give a Great Technical Presentation
Here's what I've learned
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...
Let's Face It: Paper Figures Are Always Subject to Change
The story of a single figure
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...
Securing a Permanent Job in Sweden Before Completing My PhD
My personal experiences and tips
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,...
Data Serialization/Deserialization in Java With Apache Avro
Getting started
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...
How to Write a Good Cover Letter for a Research Paper
Quick an easy
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...
The True Value of Attending Academic Conferences
It's not only about the technical content
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...
The Execution Lifecycle of a Java Application
Or... what happens when you run a Java program?
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 /...
On the Parkinson's Law of Triviality for Computer Science Researchers
It must stop!
The Parkinson’s Law of Triviality is a real thing (more on this later). And for Computer Science researchers, it is part of everyday life. As we know, research is a very time-consuming activity. There are uncertain tasks that typically take a lot of time to complete. This state of things...
Why Debloating Third-Party Software?
The case of the Log4j vulnerability
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...
My Ultimate Terminal Customizations for macOS
A guide
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...
No One Cares About Your Research!
A comfortable truth
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...
The Dynamic Features of Java
A long-standing challenge for static analyzers
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...
Inversion of Control and Dependency Injection in Java
The holy grails of modern enterprise Java frameworks
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...
AOT vs. JIT Compilation in Java
Which one is better?
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...
How to Write a Good Revision Letter
My system to address major revisions and get my papers accepted
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...
Staying in Academia: How PhD Profiles are Evaluated?
An overview
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...
Bus Factor: A Human-Centered Risk Metric in the Software Supply Chain
Public transportation may become hellish
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...
How to Write a Good Paper Rebuttal
A practical guide
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...
How to Track the Progress of a Research Project
My methodology based on the weekly delivery of verifiable artifacts
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...
Encoding, Encryption, Hashing, and Obfuscation in Java
From concepts to code
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...
SIGBOVIK: The Ig Nobel for Academics and Computer Science Researchers
The most wanted proceedings for fruitful procrastination
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...
How to Set Up A Blockchain Network With Hyperledger Besu
Look mom, I'm running my own blockchain!
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...
How I Overcome Writer's Block When Preparing a Research Paper
My bulletproof approach
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...
Seven Reasons to Go For a PhD In Computer Science
The good and the ugly
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...
The Software Supply Chain
A quick look at the modern software production landscape
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...
Design For Microservices!
An easy way to boost the popularity of your open-source projects
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...
Configuring Remote Connections in Unix-Based Systems Using SSH
A noob's guide
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...
What Does It Take to Become a Software Architect?
A matter of responsibilities
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...
Hermit Programmers are Dead
Don't call yourself a programmer anymore
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...
Replace the Disqus Commenting System on your Blog
GitHub-based open-source alternatives are better
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...
Book Review: The PhD Grind
A tale of perseverance and learning from failure
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...
The Fork/Join Java framework
Boosting performance through parallelization
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...
Use Custom LaTeX Macros to Boost Your Writing Productivity
Forget about these annoying numerical glitches in your LaTeX document
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...
Enhance Your Readme With Asciinema
How to create beautiful terminal recordings that your users will love
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...
Dynamic Programming
A handful of representative problems solved
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...
Shortening the Distance Between Academia and Industry
An imperative need of researchers
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...
Empirical Software Engineering Research Is Harder Than You Think
Trust me
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...
How to Deploy a Simple Spring Boot Application in GCP
Getting started with Google Cloud Platform
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...
The Producer-Consumer Pattern in Java Made Easy
An example using the BlockingQueue Java interface
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...
Diversity-Driven Software Debloat
Leveraging the wisdom of multiple coverage tools
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...
Unix Cmd Hacks
Boosting automation from the shell
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...
Recipes for Effective Academic Emailing
A template-based approach
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...
Deploying to Maven Central
A three-steps guide
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...
The Cuban Revolution
My personal vision
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...
The Zip Slip Vulnerability Exploitation
Zip slip attacks
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...
The Practice of Teaching
The ultimate skill to learn
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....
Unnecessary Code
Clarifying the concept
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...
A Starting Guide to Become a Good Competitive Programmer
Learning is More Important than Competing
I discovered the world of competitive programming challenges during my first year at university. At that time, I didn’t know much 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 since the first moment....
Git Fundamentals
The must-know git commands for software developers
Git is the standard version-control system for software development. Git was created by Linux Torvals in 2005 to support the development of the Linux kernel. Since then, Git has become an essential tool for both junior and senior developers. It allows to have a complete history and full version-tracking of...
How I Beat the IELTS Academic With Just a Month of Self-Training
My personal comments and suggestions
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...