# Week 7 ## Recap This week I began working on the actual implementation of the Besu Portal Client. I began by finalizing a high level breakdown of how I intend to organize the client and design it. From there I started to work on and learn general client functionality design. I focused primarily on learning Besu's command line interface design so I could implement the Portal Client interactions in a similar fashion. I additionally looked into how Besu logs itself and different logging implementations. I learned about the use of Gradle for project organization and a standard compilation method. I looked into different libraries that Besu uses and how they are configured in the related Gradle build file. I spent a fair amount of time learning about the use of custom annotations in Java, especially in regards to Java libraries. I hope to use this information to get a better understanding of how Dagger is used in projects and to learn about Dagger itself in the coming week. After setting up the Gradle environment I started on the command line interface for the client. My short term goal is to configure a few features such as logging to make the design and debugging process easier. ## Learning A large portion of the learning material that I went over this week came from the Besu codebase again. This was mainly to get an understanding of how the Besu team chose to implement certain basic features so that I could emulate those features in its accompanying Portal Client. Outside of that I looked into different documentation resources and some guides to learn about both Java as well as the use of Gradle for larger projects. ### Concepts #### Besu Codebase When looking at the Besu codebase this week there were three main concepts I was hoping to get a better understanding of. The first was how Besu uses Gradle to compile and organize the repository. One of the primary things I was looking to learn from this was how Gradle is used to organize different libraries and incorporate them into the code. Additionally I was curious about how Gradle was used to run the Besu client and how the client itself functions on start-up. Which then led me to looking into the second concept, how Besu processes commands when it is started in addition to the various runtime options that it supports. I mainly intended to get an idea of the way that users interact with Besu so I could standardize it to the Portal Client. Finally, I looked into how Besu does logging at start-up. I will likely still continue looking at this functionality as I work on designing a logging standard for the Portal Client. ##### Resources 1. https://github.com/hyperledger/besu #### Java Development In terms of Java development learning my effort was mainly spent on understanding how Gradle is used. Because it is such an important aspect of project organization I really wanted to make sure I had a solid understanding. In this way I would also be able to take advantage of the many optimizations that is provides throughout the client development process. Outside of learning about Gradle I looked into Java annotations. Although I have used annotations in the past, I was not familiar with the use of custom annotations or annotation libraries. Because Dagger is essentially an annotation library I decided it would be best to have a solid understanding on the use of custom annotations before I began learning about its use in implementation. This way I could also design annotations of my own or use other external libraries to aid in the development process. ##### Resources 1. https://docs.oracle.com/en/java/javase/22/docs/api/index.html 2. https://docs.gradle.org/current/userguide/userguide.html ## Tasks In terms of implementation this week, my main focus was to set-up a proper project environment with Gradle and to start setting up a barebones application to begin implementing the Portal Network inside of. I was able to set up the Gradle environment and configure it to suit the clients needs. Afterwards I began working on the design of the clients command line interface. I don't expect to have to many runtime options currently and would imagine that I will likely add them as they are needed. ## Week 8 Plan My focus for Week 8 is to continue working on creating the necessary client functionality to be able to test later implementations. This would include completing the command line interface, properly configuring dagger and designing an appropriate logging solution for the clients development. I will also have to learn more about dagger before I can begin to incorporate its use in the client.