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...

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

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...

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...

Seven Reasons to Go For a Ph.D. In Computer Science

The good and the ugly

../img/posts/2021/rabbit_cover.jpg
Pursuing a Ph.D. 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 Ph.D. student) is a very serious because a Ph.D. 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 Ph.D. 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 Ph.D. Grind” by Prof. Philip Guo. The book (~100 pages) is a compendium of his memories, written right after finishing his Ph.D. 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...

Dynamic Programming

A handful of representative problems solved

../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...

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 Become a Good Competitive Programmer

Learning is More Important than Competing

../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 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....

Continue reading...

Git Fundamentals

The must-know git commands for software developers

../img/posts/2017/git_logo_cover.png
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...

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...