<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marisa Pinheiro</title>
    <description>The latest articles on DEV Community by Marisa Pinheiro (@marisa-pinheiro).</description>
    <link>https://dev.to/marisa-pinheiro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1211477%2F244cbbc9-4462-47db-a69c-1b908073e73b.jpeg</url>
      <title>DEV Community: Marisa Pinheiro</title>
      <link>https://dev.to/marisa-pinheiro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marisa-pinheiro"/>
    <language>en</language>
    <item>
      <title>The learning curve of publishing your React Native CLI App to Google Play Store</title>
      <dc:creator>Marisa Pinheiro</dc:creator>
      <pubDate>Fri, 23 Feb 2024 14:07:47 +0000</pubDate>
      <link>https://dev.to/marisa-pinheiro/the-learning-curve-of-publishing-your-react-native-cli-app-to-google-play-store-2mpj</link>
      <guid>https://dev.to/marisa-pinheiro/the-learning-curve-of-publishing-your-react-native-cli-app-to-google-play-store-2mpj</guid>
      <description>&lt;p&gt;Hello everyone, this week I had the possibility to explore React Native CLI and the process of publishing it to Google Play Store. &lt;/p&gt;

&lt;p&gt;Has someone who, when given the chance, goes for the most "bare" route to learn how to do something, let's just say this week was ...entertaining. &lt;/p&gt;

&lt;p&gt;I've encountered a few roadblocks, and there are still a few to manage, but here are my mistakes so you won't have to deal will them. &lt;/p&gt;

&lt;p&gt;Quick note: I've published the app only for internal testing, with no intention to release it for now since it's just a simple To Do app using React state management.&lt;/p&gt;

&lt;h2&gt;
  
  
  REACT NATIVE : Surprisingly easy to make an app in 10 minutes
&lt;/h2&gt;

&lt;p&gt;If you have some experience with JavaScript/TypeScript and React, it's very easy to translate your knowledge to React Native. Not a lot to comment here, the documentation speaks for itself. &lt;/p&gt;

&lt;p&gt;However,...&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up the development environment: A completely different story
&lt;/h2&gt;

&lt;p&gt;If you love dark humour, I must say we should have coded along this week. Let's start with the basics: the documentation is not up to date (and it's not that explicit either, although it looks like it).&lt;/p&gt;

&lt;p&gt;The real problem: Android SDK version and it's connection to your project.&lt;/p&gt;

&lt;p&gt;If you're like me and you like to do things by the book when starting out, you will also install Android Studio. Above all, I just felt that my 2015 Android would not be able to deal with all of the week's shenanigans.&lt;/p&gt;

&lt;p&gt;Forget the documentation and go straight to Android 14.0 ("UpsideDownCake), which is the Android SDK 34. Now the important part: if you want your react-native project to read the Android SDK, after you created your ANDROID_HOME environment variable, you'll go &lt;strong&gt;BACK&lt;/strong&gt; to Android Studio &amp;gt; SDK Manager &amp;gt; SDK Tools. Please, but really, &lt;strong&gt;please&lt;/strong&gt;, install the Android SDK Command-line Tools. Then, don't open your whole project, but only your android or your app folder. &lt;/p&gt;

&lt;p&gt;After all of this, do yourself a favour and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx react-native doctor  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing is more beautiful than seeing all of the green check marks. &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating your keys and adding them to build.gradle
&lt;/h2&gt;

&lt;p&gt;Remember when I said that I was still dealing with some problems? Well here they are:&lt;/p&gt;

&lt;p&gt;Generating a keyStore: Android Studio was really not that helpful, giving me always a vary bare error message. No information, no description, just a beautiful red exclamation mark followed by "Error". Well, thanks ( I guess). &lt;/p&gt;

&lt;p&gt;Therefore I went with the command route because, honestly, it is always so much better. To create your xxx.keystore file you can either store it in your java_home, an approach that multiple seemed to use (thank you doctor Google), or you can generate it in your project. Either way, remember to add it to your /android/app directory. &lt;/p&gt;

&lt;p&gt;Since I don't gatekeep, and you're already reading this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;keytool -genkeypair -v -keystore my-release-key.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quick note: first time I tried it, Google Play Console shrieked at me that the longevity of the key was too short. Second time worked like a charm. &lt;/p&gt;

&lt;p&gt;But hey, now you need this variables to be added in android/gradle.properties or ~/.gradle/gradle.properties:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MYAPP_UPLOAD_STORE_FILE=xxx.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add them to your android/app/build.gradle file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                storeFile file(MYAPP_UPLOAD_STORE_FILE)
                storePassword MYAPP_UPLOAD_STORE_PASSWORD
                keyAlias MYAPP_UPLOAD_KEY_ALIAS
                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And SURPRISE! Here is my problem without a solution. I've seen multiple devs stating this works, multiple videos of successful builds and bundles  after this configuration, but there is not a gradle.properties or a .env that seem able to save my life. &lt;/p&gt;

&lt;p&gt;I've tried importing the properties files, partially importing the environment variables, etc. However the only thing that really works for me is to directly add them (I'm crying in a week of missed commits). &lt;/p&gt;

&lt;p&gt;(If you have any suggestion, I'm all ears).&lt;/p&gt;

&lt;h2&gt;
  
  
  The finish line:
&lt;/h2&gt;

&lt;p&gt;If you were able bundle your app you'll be rewarded with the identity verification and the questionnaire before you can release your app for internal testing. If I can be of any help, just use &lt;a href="https://app.privacypolicies.com/"&gt;Privacy Policies&lt;/a&gt; to save yourself some time. &lt;/p&gt;

&lt;p&gt;All frustrations and jokes aside, this week of trying to understand the ins-and-outs of deployment to Google Play Console has given me so much knowledge about new tools (Android Studio, I kinda love you), bash commands and SDK management that yes, it's not shown on my GitHub profile, but it will be very difficult to forget.&lt;/p&gt;

&lt;p&gt;Note to self: Next time just use boilerplate code or EXPO.&lt;/p&gt;

&lt;h4&gt;
  
  
  Documentation for installations:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://developer.android.com/studio/publish/app-signing"&gt;https://developer.android.com/studio/publish/app-signing&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactnative.dev/docs/environment-setup"&gt;https://reactnative.dev/docs/environment-setup&lt;/a&gt;&lt;/p&gt;

</description>
      <category>microlearning</category>
    </item>
    <item>
      <title>Logging and Exception Handling in Java</title>
      <dc:creator>Marisa Pinheiro</dc:creator>
      <pubDate>Fri, 17 Nov 2023 08:45:52 +0000</pubDate>
      <link>https://dev.to/marisa-pinheiro/logging-and-exception-handling-in-java-4a74</link>
      <guid>https://dev.to/marisa-pinheiro/logging-and-exception-handling-in-java-4a74</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;In Java, an exception is an event that disrupts the normal flow of a program, thrown at runtime. Logging, on the other hand, is a crucial aid for understanding and debugging a program's runtime behaviour. It involves capturing and persisting important data for analysis, critical for debugging and auditing purposes. Java offers a built-in logging framework in java.util.logging and various third-party frameworks like Log4j, Logback, and tinylog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logging in Java
&lt;/h2&gt;

&lt;p&gt;Effective logging requires systematic recording of important details in an easy-to-process format. While print statements are rudimentary, they have limitations such as transient output and lack of customization. The default Java logging framework comprises loggers, handlers, and formatters. Loggers capture events, handlers determine log destinations, and formatters define log entry formats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Components:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loggers:&lt;/strong&gt; Capture log events and redirect them to handlers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handlers:&lt;/strong&gt; Define log destinations, such as the console or files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formatter:&lt;/strong&gt; Specify the format of log entries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Mistakes and Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Common Mistakes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Not Logging in catch Statement:&lt;/strong&gt; Failing to log anything in a catch statement hinders the understanding of errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logging Only Developer's Message:&lt;/strong&gt; Logging only a developer's message without additional context can be insufficient for understanding exceptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Logging Only Exception Message:&lt;/strong&gt; If an exception, like NullPointerException, has a null message, logging just the message might not provide enough information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4c3q2fllskp1npcybr3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4c3q2fllskp1npcybr3u.png" alt="Non descriptive error message"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;

&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/{a}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;testLog&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathVariable&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;//Incorrect way of handling exceptions.&lt;/span&gt;
            &lt;span class="c1"&gt;//By returning "error" no information &lt;/span&gt;
            &lt;span class="c1"&gt;//is given to the client.&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;badRequest&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"error"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ok"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Best Practices
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Log the Exception Object:&lt;/strong&gt; Log both the developer's message and the entire exception object. This provides a comprehensive view of the exception, including the invoked methods and the stack trace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Include Exception Type in Log:&lt;/strong&gt; Including the type of exception in the log helps in identifying the nature of the issue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lzhemr5uz5y2ylrychs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lzhemr5uz5y2ylrychs.png" alt="More descriptive error message"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;

&lt;span class="nd"&gt;@GetMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/alternative/{a}"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;testLogUpdated&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@PathVariable&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 
            &lt;span class="s"&gt;"Impossible to parse a non-numeric 
            value to integer."&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;log&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Level&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SEVERE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;badRequest&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                   &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;br/&amp;gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;ResponseEntity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ok&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftakfzj1tocq2xam2iwdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftakfzj1tocq2xam2iwdk.png" alt="Error stack trace"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, effective logging and exception handling are essential for robust Java applications. By avoiding common mistakes and following best practices, developers can enhance the readability and usefulness of logs. The choice of logging frameworks, such as Java's built-in logging or third-party options, should align with project requirements. Remembering to log complete information, including exception objects and types, contributes to a clearer understanding of runtime issues. Striking a balance between logging sufficiency and performance considerations ensures a streamlined and effective logging strategy for Java applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://medium.com/w-logs/how-to-log-exception-properly-6aa80b62ff8a" rel="noopener noreferrer"&gt;https://medium.com/w-logs/how-to-log-exception-properly-6aa80b62ff8a&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.loggly.com/ultimate-guide/java-logging-basics/" rel="noopener noreferrer"&gt;https://www.loggly.com/ultimate-guide/java-logging-basics/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.baeldung.com/java-logging-intro" rel="noopener noreferrer"&gt;https://www.baeldung.com/java-logging-intro&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.crowdstrike.com/guides/java-logging/" rel="noopener noreferrer"&gt;https://www.crowdstrike.com/guides/java-logging/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributors
&lt;/h2&gt;

&lt;p&gt;Marisa Pinheiro&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/marisa-pinheiro-833a12113/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;a href="https://github.com/Marisa-Pinheiro" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Colin Nordmark&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/colinnordmark/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;  &lt;a href="https://github.com/colinnordmark" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more information, check our &lt;a href="https://github.com/colinnordmark/myFirstLogger" rel="noopener noreferrer"&gt;repo&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>logging</category>
      <category>errors</category>
      <category>java</category>
    </item>
  </channel>
</rss>
