Today I started to study shell scripting, I start to write basic scripts and learning the Bash language. Write shell scripts is like a write C code, in the past sometimes I needed to write some scripts copying instructions from the internet without deep dive in the details. I believe if a learn how to create application with scripts and learn low level concepts my Software Engineer career receives an upgrade with this new knowledge.
The last days I have been studying the Linux command book and making an AI course. I learned different commands/tools to process text like uniq, sort, diff, etc. Also commands to show standard output like nl, fold, fmt, etc. The Linux command line is amazing the book suggest knowing some arcane commands to process files that maybe you will not have a use case with the arrives of text editors like Word and Pages. Markdown is a great markup language to create good text files.
Today I learned how to perform basic operations with the sed Linux tool. The sed tool is amazing, offers a stream editor on the CLI, you can edit files without open the file and manipulate manually, with this tool is faster the simple edition of files like change a version number.
Today I learned the patch, tr and sed Linux commands/tools. I make some investigation related with the transliteration process, I remember in my first days learning programming I learned about the ROT13 cipher algorithm to encrypt your messages moving the character 13 letters in the alphabet, it's amazing how you start to study about X topic and you finish learning amazing new things.
During the weekend, I dedicated my time to studying cybersecurity, AI security, and communication protocols such as TLS and HTTPS. I chose these topics because I didn't have any specific study plans and came across a blog post that sparked my interest in good code practices. However, I realized the need to better manage my study resources and schedule to ensure completion of my ongoing studies.
- https://datatracker.ietf.org/doc/html/rfc5246
- https://aws.amazon.com/compare/the-difference-between-ssl-and-tls/#:~:text=HTTPS%20is%20the%20practice%20of,to%20the%20current%20security%20standards.
- https://en.wikipedia.org/wiki/Transport_Layer_Security
These days I have been remembering how to write Javascript code. I needed to refresh my JS knowledge because I started to work on a JS project, I have a problem remembering how works the async code with async/await, I needed to review again the javascript.info async/await tutorial, also remember how to write JS unit tests with jest, on the weekend I have the plan to create an JS application to continue practice.
Today I continue reading the Linux book and making some exercises with linux command and Python code. I take the output of some Linux command like cat, sort and uniq, and analyze the output with python, and transform this text plain into CSV file to apply filtering operations.
On the weekend I completed the Building Kubernetes Application Red Hat course. This course has a 32 hours duration, I spend around three months to complete the course, because the course has multiple labs and exercises. I learned a lot of things in the course specially Containers and OpenShift.
These day I have been working in the Building Kubernetes Application course, I am doing the last part of the course, my goal is finish this big and challenge course on the weekend to continue with a site project (a data analytics python application). One of my goals on this year is study Python, Data Engineering and learn a new programming language maybe Go or Rust.
Today, I attempted to create a Spark application to perform some data cleaning activities on CSV files. However, I encountered an issue where my application, which uses Java 17, was incompatible with Spark due to errors. After trying different solutions to resolve this problem, I ultimately decided to switch to using Python and Pandas for working with CSV files. I find this approach to be more suitable and efficient. Please don't use a hammer for everything, use the right tool for the work.
Today, I have been testing my database application and encountered some errors. It's interesting how even small and obvious errors can go unnoticed until we thoroughly test our code. This experience reminds me of the Agile spirit, where we deliver the Minimum Viable Product (MVP) and continuously improve through iterations. Building a JSON database is not as fast as I initially believed, but it's a valuable learning experience.
I am currently facing an issue with Java regarding file path management within the JVM filesystem. Specifically, I am encountering an error when attempting to read files from the root folder in a Java JAR application. While my code works fine in Visual Studio Code and when generating the JAR archive on my local machine, it fails when I move the JAR to a different folder. Tomorrow, I will continue investigating and resolving this error.
I am facing with a problem when try to read all the documents from X collection. The problem is I am trying to read file by file, deserialize the each file into a Map
, add the map to a List
to finally serialize the List<Map>
into a Json, I don't know why I cannot do this due to some Java errors, maybe I need a rest to recover my batteries, well on the weekend I will have some free time to solve this problem.
These days I have been working in my database project, I could implement the Read and Delete operations. I am happy with my current job completed, my project was created following a TDD methodology for this reason I can change/add features in my code fast.
Today I created the basic functionalities for serialization and deserialization in my database implementation, I had some problems when deserialize the content of a file JSON file into a Java String, I am looking for a way to deserialize the Java String into a Java record, the problem is create the code generic to be reused to convert a JSON into X Java record/object.
Today, I continued working on my own database project. I encountered difficulties when attempting to save records/json into a single file. Initially, I planned to store all the records in a single file, with each table represented as a JSON file. However, this approach proved to be complex and caused issues when inserting multiple records. To address this, I have been researching how MongoDB manages these challenges and exploring the document-based approach.
Today, I embarked on a Java project to enhance my programming skills. The objective of this project is to create a basic database that supports CRUD functionalities. I have decided to store the data in JSON files, which will be generated in the project's source directory within a dedicated folder. Throughout this project, I am following the Test-Driven Development (TDD) methodology, allowing me to enjoy the process of coding for a personal project after a long time.
I encountered a challenge today while attempting to create unit tests for a Java class. My goal was to add a new feature to the application, and I wanted to establish unit tests to ensure its quality and maintainability. However, I faced difficulties due to the inherent complexities of testing legacy code, particularly those arising from code dependencies.
While I firmly believe that unit testing is the most effective approach to understanding and validating code behavior, I was unable to fully implement tests within the required timeframe due to the feature's urgency.
Today, I learned why my VSC editor shows LF as the end-of-line sequence value. It was fascinating to discover that Windows uses CRLF (\r\n) and Linux uses LF (\n) for this purpose. The different approaches have historical roots, dating back to the early days of computing. While the reasons may seem outdated today, understanding this legacy adds depth to our appreciation of computer science.
These days I have been reading the Linux command line book. I am reading the book and making excersises in my computer at the same time, it is amazing how the terminal is very powerfull and useful when you lose the fear. Today I had a unconfort situation in my work due to my English skill, I know English is very important in the Software Engineering industry, please if you are reading this, learn English and learn good, talk with people in discord, watch TV in English but the most important thing is practice this skill everyday.
Today I was working in a issue related with a race condition in two Microservices that need to interact between them in the correct order, I saw this problem other times and I performed some exercises in the past to avoid issues using Events to communicate rather than synchronous code and waiting always that the process X finish it is execution before process W starts. Microservice are amazing I love how a simple Microservice design can be converted into a complicated scenario.
Today I started to learn about the grep in Linux. I practice performing some grep commands using different Metacharacters like anchors and brackets. Also I discovered that Linux distributions have a dictionary, and yes this is amazing look in the /usr/share/dict/words path. On my work I read the pandas documentation about the to_dict because I need to work with this functionality.
Today I was working in a task that needs to be performed fast, I choice Python to create and execute the task duw to the Python simplicity and their useful libraries to work with files, I have a lot of desire to learn how to apply TDD for this simple task working with Python, my testing skills in Python are little.
On the weekend I have been learning about the jwebserver, a Java tool to crate a HTTP server for testing purposes. This tool is amazing sometimes we only need a HTTP server to put some information that work as an external API, and another service use this information to perform their work. Also I learned how to create a Java HTTP server for testing purposes mounting a directory hierarchy and some files in the server in memory without save the information in disk, this exercise was amazing.
Today I learned more about Maven, I studying which plugins are required to create Java applications packaged into a jar file, how I can create a jar artifact with all the required dependencies to run. Also I continued studying Linux, now is the time to study some tools to find files and directories.
Today I learned how to create applications in OpenShift with the S2I Strategy builder, was interesting how OpenShift with only a git repository with a app.py file can create and deploy an application fast. Working in creating the previous application I noticed that I don't know how to create a Java application from scratch without use a tool like maven or gradle, my plan is learn how to create a maven project without using the mvn command because in the host that I use I don't have maven installed, tomorrow I will review how to achieve this.
Today, I engaged in several data analytics tasks. I am of the opinion that, in the future, AI tools like ChatGPT, which facilitate effortless data analytics, will diminish the significance of this aspect of software engineering. Consequently, I am hesitant to further develop this skill, although it was necessary for my current tasks. Moving forward, I am contemplating aligning my job responsibilities more closely with my long-term goals and steering clear of studying subjects that do not contribute to these objectives.