<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>John Justin's blog </title><description></description><managingEditor>noreply@blogger.com (Unknown)</managingEditor><pubDate>Fri, 9 Jan 2026 21:03:12 +0530</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">35</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>http://www.johnjustin.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle/><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>10 tools for a software developer</title><link>http://www.johnjustin.com/2023/03/10-tools-for-software-developer.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Fri, 3 Mar 2023 09:38:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-2199679616048199469</guid><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-1arAbp_ksveyYjBVGqeAdACxgWKTzf-vBaF33-NUojSBfgk_nLubOnz7a7uodv7v7yqtJHLtRNhjwNlhDzZH-Bk8Lt9FrX4A_YJNi6tUi-M0oojzRAC6xXkiDKhIlkuNJ1KkAZRvCyb8RyLP3YXG9ib6mpChgZ3PbguAPDF7sDH4usgc5g/s768/download%20(6).png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="512" data-original-width="768" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-1arAbp_ksveyYjBVGqeAdACxgWKTzf-vBaF33-NUojSBfgk_nLubOnz7a7uodv7v7yqtJHLtRNhjwNlhDzZH-Bk8Lt9FrX4A_YJNi6tUi-M0oojzRAC6xXkiDKhIlkuNJ1KkAZRvCyb8RyLP3YXG9ib6mpChgZ3PbguAPDF7sDH4usgc5g/s320/download%20(6).png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;1.Integrated Development Environments (IDEs) - An IDE is an essential tool for software engineers, providing a comprehensive environment for writing, testing, and debugging code. IDEs like Eclipse, Visual Studio Code, and IntelliJ IDEA provide features like code highlighting, auto-completion, and code navigation, making it easier for developers to write high-quality code efficiently.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2.Version Control Systems (VCS) - VCS tools like Git and SVN are crucial for managing code versions, enabling developers to track changes, collaborate on code, and revert to earlier versions if necessary. VCS tools also provide features like branching and merging, allowing developers to work on multiple versions of code simultaneously.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3.Debuggers - Debuggers like GDB and Visual Studio Debugger are essential tools for identifying and fixing errors in code. They allow developers to step through code, set breakpoints, and inspect variables, making it easier to pinpoint the source of a problem and fix it quickly.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4.Profilers - Profiling tools like JProfiler and VisualVM help developers identify performance issues in code, allowing them to optimize code for maximum efficiency. Profilers provide insights into memory usage, CPU time, and other performance metrics, making it easier to identify bottlenecks and improve code performance.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5.Build Tools - Build tools like Maven and Gradle automate the process of building, testing, and deploying software, making it easier for developers to manage complex projects with multiple dependencies. These tools provide features like dependency management, unit testing, and artifact generation, simplifying the build process and reducing the likelihood of errors.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;6.Continuous Integration (CI) and Continuous Deployment (CD) Tools - CI/CD tools like Jenkins and Travis CI automate the process of building, testing, and deploying code, ensuring that changes are tested and deployed quickly and efficiently. These tools provide features like automated testing, code analysis, and deployment pipelines, making it easier to maintain a high level of code quality and reliability.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;7.Code Editors - Code editors like Sublime Text and Atom provide a lightweight alternative to IDEs, providing basic features like code highlighting and auto-completion without the overhead of a full IDE. Code editors are useful for quick code changes or for working on small projects where a full IDE might be overkill.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;8.Package Managers - Package managers like npm and pip provide a convenient way to manage and install software packages and dependencies. They simplify the process of adding third-party libraries and modules to a project, reducing the amount of time and effort required to manage dependencies manually.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;9.Containerization Tools - Containerization tools like Docker and Kubernetes are essential for deploying and managing complex applications in a distributed environment. Containers provide a lightweight, portable way to package and deploy applications, making it easier to manage dependencies and scale applications as needed.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;10.Task Automation Tools - Task automation tools like Ansible and Chef automate routine tasks like server configuration and software installation, reducing the amount of time and effort required for routine maintenance tasks. These tools provide features like configuration management, infrastructure as code, and task scheduling, making it easier to manage complex environments and systems efficiently.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-1arAbp_ksveyYjBVGqeAdACxgWKTzf-vBaF33-NUojSBfgk_nLubOnz7a7uodv7v7yqtJHLtRNhjwNlhDzZH-Bk8Lt9FrX4A_YJNi6tUi-M0oojzRAC6xXkiDKhIlkuNJ1KkAZRvCyb8RyLP3YXG9ib6mpChgZ3PbguAPDF7sDH4usgc5g/s72-c/download%20(6).png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Pros and cons of apache camel</title><link>http://www.johnjustin.com/2023/03/pros-and-cons-of-apache-camel.html</link><category>apache camel</category><author>noreply@blogger.com (Unknown)</author><pubDate>Fri, 3 Mar 2023 09:15:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-7536959018236440436</guid><description>&lt;div class="separator" style="clear: both;"&gt;
  &lt;a
    href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHz1oMkKAHoQAoudkBYJ74gRNEoGDmbehtxHW054bnJOtiNDxvf2F0b1DR_zxUTcpWLnaU0cfy88sHW_GdHBmDWWGoELlr_7xBs6o40WfbEpi11ky3BNvd2KT_izt-jiKDAS87RBGSbFQ5WQelAR3GdCMAc-OhKDhsp1SOMknj8mb0c5iXkA/s576/download%20%285%29.png"
    style="display: block; padding: 1em 0px; text-align: center;"
    &gt;&lt;img
      alt=""
      border="0"
      data-original-height="576"
      data-original-width="512"
      height="320"
      src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHz1oMkKAHoQAoudkBYJ74gRNEoGDmbehtxHW054bnJOtiNDxvf2F0b1DR_zxUTcpWLnaU0cfy88sHW_GdHBmDWWGoELlr_7xBs6o40WfbEpi11ky3BNvd2KT_izt-jiKDAS87RBGSbFQ5WQelAR3GdCMAc-OhKDhsp1SOMknj8mb0c5iXkA/s320/download%20%285%29.png"
  /&gt;&lt;/a&gt;
&lt;/div&gt;
Apache Camel is a lightweight integration framework that allows developers to
easily integrate various systems and protocols using a set of predefined
patterns.&amp;nbsp;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;Here are some pros and cons of using Apache Camel&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;Pros:&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    Flexibility: Apache Camel supports a wide range of integration patterns and
    protocols, making it a flexible tool for integrating diverse systems and
    applications.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;pre&gt;&lt;code class="language-java hljs"&gt;
from("jms:queue:myQueue")
    .to("http://localhost:8080/myRestEndpoint");

&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;
    Ease of use: Apache Camel's DSL (Domain Specific Language) is designed to be
    intuitive and easy to use, allowing developers to quickly build and deploy
    integration solutions.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;pre&gt;&lt;code class="language-java hljs"&gt;
from("jms:queue:myQueue")
    .filter(header("status").isEqualTo("pending"))
    .to("jms:queue:pendingQueue");

&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;
    Extensibility: Apache Camel is highly extensible, allowing developers to
    easily add custom components and processors to support specific integration
    requirements.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;pre&gt;&lt;code class="language-java hljs"&gt;
public class MyProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        String body = exchange.getIn().getBody(String.class);
        String transformed = transform(body);
        exchange.getIn().setBody(transformed);
    }

    private String transform(String body) {
        // custom transformation logic here
    }
}

from("jms:queue:myQueue")
    .process(new MyProcessor())
    .to("jms:queue:transformedQueue");

&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;
    Testability: Apache Camel's test framework allows developers to easily test
    integration routes and patterns, improving the overall quality and
    reliability of integration solutions.
  &lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;pre&gt;&lt;code class="language-java hljs"&gt;
public class MyRouteTest extends CamelTestSupport {
    @Test
    public void testRoute() throws Exception {
        template.sendBody("jms:queue:myQueue", "Hello, world!");
        assertMockEndpointsSatisfied();
    }

    @Override
    protected RoutesBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() {
                from("jms:queue:myQueue")
                    .to("mock:result");
            }
        };
    }
}

&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;Cons:&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    Steep learning curve: While Apache Camel's DSL is designed to be easy to
    use, it can still take some time for developers to become proficient in
    using the various patterns and components available in Camel.
    Eg below for Implementing a complex routing scenario:
  &lt;/div&gt;
  &lt;pre&gt;&lt;code class="language-java hljs"&gt;
from("jms:queue:myQueue")
    .choice()
        .when(header("priority").isEqualTo("high"))
            .to("jms:queue:highPriority")
        .when(header("priority").isEqualTo("medium"))
            .to("jms:queue:mediumPriority")
        .otherwise()
            .to("jms:queue:lowPriority")
    .end();

&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;
    Debugging: Debugging Camel routes and patterns can be challenging,
    particularly when dealing with complex integration scenarios.
  &lt;/div&gt;
  &lt;pre&gt;&lt;code class="language-java hljs"&gt;
from("jms:queue:myQueue")
    .process(new MyProcessor())
    .to("jms:queue:transformedQueue")
    .to("http://localhost:8080/myRestEndpoint")
    .process(new AnotherProcessor())
    .to("file:/outputDirectory")
    .log("Message processed successfully!");

&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;
    Resource usage: Apache Camel can be resource-intensive, particularly when
    handling large volumes of data or when integrating with systems that require
    a lot of processing power or memory.
  &lt;/div&gt;Handling large volumes of data using Camel's splitter:
  &lt;pre&gt;&lt;code class="language-java hljs"&gt;
from("jms:queue:myQueue")
    .split(body().tokenize("\n"))
    .to("jms:queue:splitQueue");

&lt;/code&gt;&lt;/pre&gt;
  &lt;div&gt;Scenarios to use Apache Camel:&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;Integration between diverse systems and applications&lt;/div&gt;
  &lt;div&gt;Real-time data processing and streaming&lt;/div&gt;
  &lt;div&gt;Message-driven architecture and event-driven architecture&lt;/div&gt;
  &lt;div&gt;Batch processing and data orchestration&lt;/div&gt;
  &lt;div&gt;Protocol translation and mediation&lt;/div&gt;
  &lt;div&gt;Scenarios to avoid Apache Camel:&lt;/div&gt;
  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;
  &lt;div&gt;
    Simple integration scenarios that can be easily handled using simpler tools
    or libraries
  &lt;/div&gt;
  &lt;div&gt;
    Integration scenarios where performance is a critical concern and the
    overhead of using Apache Camel may be too high
  &lt;/div&gt;
  &lt;div&gt;
    Integration scenarios where the required protocols or systems are not
    supported by Apache Camel and implementing custom components would be too
    complex or time-consuming.
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHz1oMkKAHoQAoudkBYJ74gRNEoGDmbehtxHW054bnJOtiNDxvf2F0b1DR_zxUTcpWLnaU0cfy88sHW_GdHBmDWWGoELlr_7xBs6o40WfbEpi11ky3BNvd2KT_izt-jiKDAS87RBGSbFQ5WQelAR3GdCMAc-OhKDhsp1SOMknj8mb0c5iXkA/s72-c/download%20%285%29.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Apache Storm a real world use case and solution for the problem</title><link>http://www.johnjustin.com/2023/03/apache-storm-real-world-use-case-and.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Fri, 3 Mar 2023 09:05:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-8387434083095508951</guid><description>&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYnV_F38aDFGOqTNo15h5YueyehndBrj6yXEBkVquPj5lBqoPrAmvJc0DB5-HfK5S17AoEfF6V0atP01ZOUX-cBJQUTxxMeT7qKAWq6ENeUY3XKQk4hAaWNmglvNMniIy5YhvAhOfGQ5sOHsPbG2aeGcAYz2bPJ8ghLZREC_z-lKRG6eSkzQ/s512/download%20%284%29.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" width="320" data-original-height="512" data-original-width="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYnV_F38aDFGOqTNo15h5YueyehndBrj6yXEBkVquPj5lBqoPrAmvJc0DB5-HfK5S17AoEfF6V0atP01ZOUX-cBJQUTxxMeT7qKAWq6ENeUY3XKQk4hAaWNmglvNMniIy5YhvAhOfGQ5sOHsPbG2aeGcAYz2bPJ8ghLZREC_z-lKRG6eSkzQ/s320/download%20%284%29.png"/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;A common use case for Apache Storm is real-time stream processing of social media data. For example, a company may want to analyze Twitter data in real-time to monitor brand sentiment, track trending topics, or detect emerging issues. Apache Storm can be used to process this data as it is generated, allowing the company to quickly respond to changes in customer sentiment or market conditions.&amp;nbsp;&lt;/p&gt;&lt;p&gt;step-by-step design for a system that uses Apache Storm for real-time stream processing of social media data:&lt;/p&gt;&lt;p&gt;Data Ingestion:&lt;/p&gt;&lt;p&gt;The first step is to ingest data from Twitter's API. This can be done using a Python library like Tweepy. The data can be filtered by keywords, hashtags, and other criteria to ensure that only relevant data is processed.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-python hljs"&gt;

import tweepy

# Twitter API credentials
consumer_key = "YOUR_CONSUMER_KEY"
consumer_secret = "YOUR_CONSUMER_SECRET"
access_token = "YOUR_ACCESS_TOKEN"
access_secret = "YOUR_ACCESS_SECRET"

# Create a stream listener
class StreamListener(tweepy.StreamListener):
    def on_status(self, status):
        # Process the status here
        pass

# Authenticate and create the stream listener
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
listener = StreamListener()
stream = tweepy.Stream(auth=auth, listener=listener)

# Start the stream
stream.filter(track=["keyword1", "keyword2", ...])


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

Apache Storm Topology:
The Apache Storm topology will be responsible for processing the incoming social media data in real-time. This can be done using a combination of bolts and spouts. A spout can be used to read the data from the Twitter API and pass it to a bolt that performs sentiment analysis or topic modeling.

&lt;pre&gt;&lt;code class="language-python hljs"&gt;

from nltk.sentiment import SentimentIntensityAnalyzer
from storm import BasicBolt

# Initialize the sentiment analyzer
sia = SentimentIntensityAnalyzer()

# Define the bolt that performs sentiment analysis
class SentimentAnalysisBolt(BasicBolt):
    def process(self, tup):
        # Get the tweet text from the tuple
        tweet_text = tup.values[0]

        # Perform sentiment analysis on the tweet text
        sentiment = sia.polarity_scores(tweet_text)

        # Emit the sentiment score
        self.emit([sentiment["compound"]])

# Define the topology
from storm import TopologyBuilder

builder = TopologyBuilder()
builder.setSpout("twitter", TwitterSpout())
builder.setBolt("sentiment", SentimentAnalysisBolt()).shuffleGrouping("twitter")


&lt;/code&gt;&lt;/pre&gt;
Storage:
The processed data needs to be stored in a suitable data store for further analysis. In this case, we can use a MongoDB database to store the sentiment scores.

&lt;pre&gt;&lt;code class="language-python hljs"&gt;

from pymongo import MongoClient

# Connect to MongoDB
client = MongoClient("mongodb://localhost:27017/")

# Get the database and collection
db = client["mydatabase"]
collection = db["sentiment_scores"]

# Define the bolt that stores the sentiment scores
class MongoBolt(BasicBolt):
    def process(self, tup):
        # Get the sentiment score from the tuple
        sentiment_score = tup.values[0]

        # Insert the sentiment score into MongoDB
        collection.insert_one({"score": sentiment_score})


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

Visualization:
The processed data needs to be visualized in a meaningful way to the end-users. In this case, we can use a web application to display the sentiment scores in real-time.

&lt;pre&gt;&lt;code class="language-python hljs"&gt;

from flask import Flask, render_template
from pymongo import MongoClient

# Connect to MongoDB
client = MongoClient("mongodb://localhost:27017/")

# Get the database and collection
db = client["mydatabase"]
collection = db["sentiment_scores"]

# Define the web application
app = Flask(__name__)

@app.route("/")
def index():
    # Get the latest sentiment score from MongoDB
    sentiment_score = collection.find_one(sort=[("_id", -1)])["score"]

    # Render the sentiment score in a template
    return render_template


&lt;/code&gt;&lt;/pre&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYnV_F38aDFGOqTNo15h5YueyehndBrj6yXEBkVquPj5lBqoPrAmvJc0DB5-HfK5S17AoEfF6V0atP01ZOUX-cBJQUTxxMeT7qKAWq6ENeUY3XKQk4hAaWNmglvNMniIy5YhvAhOfGQ5sOHsPbG2aeGcAYz2bPJ8ghLZREC_z-lKRG6eSkzQ/s72-c/download%20%284%29.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>java code for magic square</title><link>http://www.johnjustin.com/2023/03/java-code.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Thu, 2 Mar 2023 10:19:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-567451604293180057</guid><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;"&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;The user is prompted to enter the size of the magic square. If the size is even, the program terminates because magic squares can only be generated for odd sizes.&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;An empty 2D array of the given size is created to hold the magic square.&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;The starting position for the first number is set to the last row and middle column of the square.&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;A loop runs from 1 to n^2, with each iteration placing the current number in the current row and column, and then moving the position diagonally down and right by one cell.&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;If the position goes beyond the edges of the square, it wraps around to the opposite edge.&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;If the position is already occupied, it moves up two rows and left one column instead.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br /&gt;
 &lt;/p&gt;&lt;pre&gt;&lt;code class="language-java hljs"&gt;
  
  import java.util.Scanner;

public class MagicSquare {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the size of the magic square: ");
        int n = sc.nextInt();

        if (n % 2 == 0) {
            System.out.println("The size must be odd.");
            return;
        }

        int[][] magicSquare = new int[n][n];
        int row = n-1;
        int col = n/2;

        for (int i = 1; i &amp;lt;= n*n; i++) {
            magicSquare[row][col] = i;
            row++;
            col++;

            if (row == n &amp;amp;&amp;amp; col == n) {
                row = 0;
                col = n-2;
            }
            else if (row == n) {
                row = 0;
            }
            else if (col == n) {
                col = 0;
            }
            else if (magicSquare[row][col] != 0) {
                row -= 2;
                col--;
            }
        }

        // Print the magic square
        System.out.println("The magic square is:");
        for (int i = 0; i &amp;lt; n; i++) {
            for (int j = 0; j &amp;lt; n; j++) {
                System.out.print(magicSquare[i][j] + " ");
            }
            System.out.println();
        }
    }
}

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

&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Design a software system for a smart city that can manage and optimize the city's transportation system.</title><link>http://www.johnjustin.com/2023/03/design-software-system-for-smart-city.html</link><category>design</category><author>noreply@blogger.com (Unknown)</author><pubDate>Thu, 2 Mar 2023 09:17:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-8037824623103192413</guid><description>&lt;div class="separator" style="clear: both;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-PHD-TkYrfcJyqPYjhDVwA3pZU9JLV1-Hllsmn7XdrV1uFxEzs2gvAbSIPA_NJ_DtsAUaVktJApmEDmmz6uE413oAyGo8UZ_hvdGv-E_0yw7pCrWuhi5YLvdj0exzCUIPYPT5AZSZdq6GiGB47KZPLO4tintiiGZ1QZO8J--duJKFQMBH4w/s576/843f1b62-64c5-4145-bb8b-1ea0b3cc3a1b-0.png" style="display: block; padding: 1em 0; text-align: center; "&gt;&lt;img alt="" border="0" height="320" data-original-height="576" data-original-width="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-PHD-TkYrfcJyqPYjhDVwA3pZU9JLV1-Hllsmn7XdrV1uFxEzs2gvAbSIPA_NJ_DtsAUaVktJApmEDmmz6uE413oAyGo8UZ_hvdGv-E_0yw7pCrWuhi5YLvdj0exzCUIPYPT5AZSZdq6GiGB47KZPLO4tintiiGZ1QZO8J--duJKFQMBH4w/s320/843f1b62-64c5-4145-bb8b-1ea0b3cc3a1b-0.png"/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Define the requirements: Determine the requirements of the transportation system, such as the number of vehicles, routes, and schedules, as well as the needs of the city's residents, such as accessibility and convenience.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Design the architecture: Select an appropriate architecture for the software system, such as a distributed system or a microservices architecture, to ensure scalability, reliability, and efficient communication between components.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Develop a data management system: Develop a data management system that can handle large volumes of real-time data from various sources, such as traffic sensors, public transit vehicles, and GPS devices, and store the data in a distributed database.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Implement machine learning algorithms: Develop machine learning algorithms that can analyze the data to identify patterns and optimize the transportation system, such as predicting traffic congestion, optimizing transit schedules, and dynamically adjusting traffic signals.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Develop a user interface: Design a user interface that allows city officials to monitor the transportation system in real-time, view analytics, and make data-driven decisions to improve the system's performance.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Implement security measures: Ensure that the system is secure by implementing measures such as data encryption, access controls, and secure APIs.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Optimize performance: Implement measures to optimize the system's performance, such as using caching mechanisms and load balancing techniques to distribute the load across servers.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Ensure compatibility: Test the system on a variety of platforms and devices to ensure compatibility and consistent performance.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Collaborate with developers: Coordinate with developers to ensure effective integration of code and smooth workflow processes.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Test and debug: Conduct thorough testing and debugging to ensure that the software system is free of bugs and errors.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;Functional Requirements:&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Real-time data collection from various sources (traffic sensors, public transit vehicles, GPS devices, etc.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Data storage and management in a distributed database&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Machine learning algorithms to analyze the data and optimize the transportation system&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;User interface to monitor and control the transportation system&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ability to adjust transit schedules, traffic signals, and other variables in real-time&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Integration with third-party systems, such as emergency response and public safety systems&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Generation of reports and analytics to evaluate the transportation system's performance&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;Non-functional Requirements:&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;High availability and reliability to ensure the system is always operational&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Scalability to handle increasing volumes of data and users&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Security measures to protect sensitive data and prevent unauthorized access&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fast response times to ensure real-time adjustments to the transportation system&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Compatibility with various platforms, devices, and operating systems&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;User-friendly and intuitive interface for city officials to manage and monitor the transportation system&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-PHD-TkYrfcJyqPYjhDVwA3pZU9JLV1-Hllsmn7XdrV1uFxEzs2gvAbSIPA_NJ_DtsAUaVktJApmEDmmz6uE413oAyGo8UZ_hvdGv-E_0yw7pCrWuhi5YLvdj0exzCUIPYPT5AZSZdq6GiGB47KZPLO4tintiiGZ1QZO8J--duJKFQMBH4w/s72-c/843f1b62-64c5-4145-bb8b-1ea0b3cc3a1b-0.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Benefits of using AI in day today business</title><link>http://www.johnjustin.com/2023/02/benefits-of-using-ai-in-day-today.html</link><category>AI</category><category>chatGPT</category><author>noreply@blogger.com (Unknown)</author><pubDate>Sun, 12 Feb 2023 01:02:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-881469660646702151</guid><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYyKpUMSNKgPs0HQ_3BnESiBVij3JnW7_2Qrt0ruYpTn4qF7XZPaBk6Myt2QCd8okv8MoorrtSPqcJ7eELRePL_ht-deigL7rQnOUCTT7NDNyeEcWNRtmJScf2aX3g6reMg9PuoSoUAD-kC541MC1Qj_Mm2vY2dag_mjQmt6Nth6Ct0fAoEA/s761/ai.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="572" data-original-width="761" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYyKpUMSNKgPs0HQ_3BnESiBVij3JnW7_2Qrt0ruYpTn4qF7XZPaBk6Myt2QCd8okv8MoorrtSPqcJ7eELRePL_ht-deigL7rQnOUCTT7NDNyeEcWNRtmJScf2aX3g6reMg9PuoSoUAD-kC541MC1Qj_Mm2vY2dag_mjQmt6Nth6Ct0fAoEA/w400-h301/ai.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;AI, or artificial intelligence, is the ability of computers to perform tasks that normally require human intelligence, such as visual perception and speech recognition.&lt;/p&gt;&lt;p&gt;It's the future of business. According to a recent survey from Harvard Business Review, 84% of companies are using AI in some form today.&lt;/p&gt;&lt;p&gt;You can find AI everywhere these days: in your car, on your TV and even in your fridge. It's also been used by businesses for years as a way to boost efficiency, reduce costs and improve decision-making processes.&lt;/p&gt;&lt;p&gt;AI is transforming the way we use technology in our day-to-day lives. It has become so popular that it’s hard to imagine not using it.&lt;/p&gt;&lt;p&gt;But how exactly does AI fit into your business?&lt;/p&gt;&lt;p&gt;Here are some benefits of using AI in your business:&lt;/p&gt;&lt;p&gt;1. Automated customer service and marketing campaigns&lt;/p&gt;&lt;p&gt;AI can help automate your customer service team and marketing campaigns, giving you more time for other important tasks such as developing new products or improving existing ones. This will give you an edge over competitors who may be spending more time on these tasks than yours.&lt;/p&gt;&lt;p&gt;2. Improved quality of data analysis&lt;/p&gt;&lt;p&gt;With the help of machine learning, AI can analyze large amounts of data much faster than humans can. This means that you won’t have to spend as much time analyzing data manually if you choose to use AI instead of humans for this purpose.&lt;/p&gt;&lt;p&gt;AI is the next wave of innovation, and it’s already shaping how you do business.&lt;/p&gt;&lt;p&gt;AI is a natural extension of humans’ innate drive to learn and make sense of the world. It can be used to identify patterns in data, predict outcomes, and improve customer experiences.&lt;/p&gt;&lt;p&gt;In the past year alone, we’ve seen AI creep into our lives in more ways than ever before. From ride-hailing services like Uber and Lyft, to Amazon’s Alexa, to Facebook Messenger bots and Google Home devices, AI is changing how we interact with technology on a daily basis.&lt;/p&gt;&lt;p&gt;AI can be used by businesses to help with a variety of different tasks. Some of the most common ways AI is used are:&lt;/p&gt;&lt;p&gt;1. AdWords: Google’s advertising system is built on machine learning, and the search giant uses it to track the behavior of its users. It can use this data to determine what kind of ads are most likely to be clicked on, thus improving ad revenue and increasing conversion rates.&lt;/p&gt;&lt;p&gt;2. Customer service: AI can help you manage your customer service agents more effectively by automating some of their tasks and increasing efficiency through automation. For example, you could use AI to automatically respond to emails or text messages in order to save time for your employees while also ensuring that customers receive their responses as quickly as possible.&lt;/p&gt;&lt;p&gt;3. Sales: By using AI tools like predictive analytics, you can improve sales cycles by predicting when customers will buy based on their previous behavior and making sure they don’t miss out on any opportunities that may arise during this time period.&lt;/p&gt;&lt;p&gt;4. Marketing: By analyzing customer data and using it to target specific audiences, marketers can create content that speaks directly to their audience’s interests and needs while also increasing conversions&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYyKpUMSNKgPs0HQ_3BnESiBVij3JnW7_2Qrt0ruYpTn4qF7XZPaBk6Myt2QCd8okv8MoorrtSPqcJ7eELRePL_ht-deigL7rQnOUCTT7NDNyeEcWNRtmJScf2aX3g6reMg9PuoSoUAD-kC541MC1Qj_Mm2vY2dag_mjQmt6Nth6Ct0fAoEA/s72-w400-h301-c/ai.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Spring's ApplicationContext.getBean considered bad?</title><link>http://www.johnjustin.com/2023/02/springs-applicationcontextgetbean.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sat, 4 Feb 2023 09:18:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-8422360284556479170</guid><description>&lt;p&gt;&amp;nbsp;ApplicationContext.getBean() is a method in Spring framework that allows you to retrieve a bean from the Spring application context. The method is considered to be an anti-pattern by some developers because it can lead to tight coupling between the calling code and the Spring context. This tight coupling can make it difficult to test the code in isolation and can also make it harder to change the implementation of the beans in the future.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here is an example of how ApplicationContext.getBean() can lead to tight coupling:&lt;/p&gt;&lt;p&gt;public class MyService {&lt;/p&gt;&lt;p&gt;&amp;nbsp; public void doSomething() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; MyDependency dependency = (MyDependency) ApplicationContext.getBean("myDependency");&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; dependency.performTask();&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;div&gt;&lt;div&gt;In the example above, the MyService class is tightly coupled to the Spring application context, as it directly accesses the ApplicationContext to retrieve a bean. If you want to test MyService, you will have to set up the entire Spring context, which can make the test more complex and harder to write.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A better approach is to use dependency injection to make the dependencies of MyService available. This way, you can easily provide mock implementations of the dependencies for testing, and you can also change the implementation of the dependencies in the future without having to modify the MyService code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is an example of how you can use dependency injection to achieve loose coupling:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;public class MyService {&lt;/div&gt;&lt;div&gt;&amp;nbsp; private MyDependency dependency;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; public MyService(MyDependency dependency) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; this.dependency = dependency;&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; public void doSomething() {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; dependency.performTask();&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div&gt;With the code above, you can easily provide a mock implementation of MyDependency for testing and you can change the implementation of MyDependency without having to modify the MyService code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>How do I test a class that has private methods, fields or inner classes ?</title><link>http://www.johnjustin.com/2023/02/how-do-i-test-class-that-has-private.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sat, 4 Feb 2023 09:06:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-2289326707355514132</guid><description>&lt;p&gt;&amp;nbsp;Testing private methods, fields, or inner classes can be challenging because they are not accessible from outside the class. There are a few approaches you can take to test these elements of your code.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Testing private methods, fields, and inner classes can be challenging because they are not meant to be accessed from outside of the class. However, there are some techniques you can use to test them:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Reflection: You can use the Java Reflection API to access private methods and fields. However, this is not a recommended practice as it can make your tests fragile and reduce the maintainability of your code.&lt;/p&gt;&lt;p&gt;// Example code for accessing private method using reflection in Java&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;import java.lang.reflect.Method;&lt;/p&gt;&lt;p&gt;public class PrivateMethodTester {&lt;/p&gt;&lt;p&gt;&amp;nbsp; public static void main(String[] args) throws Exception {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; MyClass obj = new MyClass();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; Class cls = obj.getClass();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; Method method = cls.getDeclaredMethod("myPrivateMethod", new Class[] { int.class });&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; method.setAccessible(true);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; int result = (int) method.invoke(obj, new Object[] { 42 });&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; System.out.println(result);&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;class MyClass {&lt;/p&gt;&lt;p&gt;&amp;nbsp; private int myPrivateMethod(int value) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; return value + 1;&lt;/p&gt;&lt;p&gt;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;div&gt;Make them package-private: You can change the visibility of the private methods and fields to package-private (no keyword), which makes them accessible from other classes in the same package. This way, you can write test classes in the same package and access the package-private methods and fields.&lt;/div&gt;&lt;p&gt;Use inner test classes: You can write test classes as inner classes of the class being tested and use them to access the private methods and fields. This way, the inner test classes can access the private methods and fields as if they were package-private.&lt;/p&gt;&lt;p&gt;Extract the private logic into a separate class: If the private methods or fields contain complex logic that needs to be tested, you can extract this logic into a separate, publicly accessible class and test it independently.&lt;/p&gt;&lt;p&gt;Use powermock or other similar testing frameworks: PowerMock is a testing framework that allows you to test private methods and fields, among other things. However, it's important to use these types of frameworks sparingly and only when necessary, as they can make your tests more complex and harder to maintain.&lt;/p&gt;&lt;p&gt;In general, it's best to test only the public interface of a class, and if the private methods or fields are complex enough to require testing, it might indicate that they should be refactored into their own class.&lt;/p&gt;&lt;ol start="2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;"&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;Wrapper class: Another option is to create a wrapper class that wraps the private elements you want to test. You can then write tests against the public methods of the wrapper class, which in turn exercise the private elements.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;// Example code for testing private method using wrapper class in Java&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;public class PrivateMethodTester {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; public static void main(String[] args) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; &amp;nbsp; MyWrapper wrapper = new MyWrapper(new MyClass());&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; &amp;nbsp; int result = wrapper.callPrivateMethod(42);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; &amp;nbsp; System.out.println(result);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;class MyWrapper {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; private MyClass obj;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; public MyWrapper(MyClass obj) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; &amp;nbsp; this.obj = obj;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; public int callPrivateMethod(int value) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; &amp;nbsp; return obj.myPrivateMethod(value);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;class MyClass {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; private int myPrivateMethod(int value) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; &amp;nbsp; return value + 1;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol start="3" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-reset: item 0; display: flex; flex-direction: column; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;"&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;PowerMock or similar frameworks: Another option is to use a testing framework that provides support for mocking and testing private elements, such as PowerMock. These frameworks allow you to override the behavior of private elements and test them in isolation, without the need for reflection or wrapper classes.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style="white-space: pre-wrap;"&gt;// Example code for testing private method using PowerMock in Java

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClass.class)
public class PrivateMethodTester {

  @Test
  public void testPrivateMethod() throws Exception {
    MyClass obj = PowerMockito.spy(new MyClass());
    PowerMockito.when(obj, "myPrivateMethod", 42).thenReturn&lt;/span&gt;
&lt;/div&gt;&lt;div style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>How to mock void methods with Mockito</title><link>http://www.johnjustin.com/2023/02/how-to-mock-void-methods-with-mockito.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sat, 4 Feb 2023 08:55:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-2193427967747280965</guid><description>&lt;p&gt;&amp;nbsp;In Mockito, you can mock void methods by using the "doAnswer()" method from the "org.mockito.stubbing.Answer" class. This method allows you to specify a custom implementation for a void method that will be executed when the method is called on a mock.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Here is an example of how to mock a void method using the "doAnswer()" method in Java:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;import static org.mockito.Mockito.*;&lt;/p&gt;&lt;p&gt;import org.mockito.stubbing.Answer;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;// Create a mock object&lt;/p&gt;&lt;p&gt;MyClass myClass = mock(MyClass.class);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;// Use doAnswer to specify a custom implementation for the void method&lt;/p&gt;&lt;p&gt;doAnswer(new Answer&amp;lt;Void&amp;gt;() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; public Void answer(InvocationOnMock invocation) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Object[] args = invocation.getArguments();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Perform custom logic here with the arguments passed to the method&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println("Method called with arguments: " + Arrays.toString(args));&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;}).when(myClass).myVoidMethod(anyInt(), anyString());&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;// Call the void method on the mock object&lt;/p&gt;&lt;p&gt;myClass.myVoidMethod(123, "hello");&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;// Verify that the void method was called on the mock object&lt;/p&gt;&lt;p&gt;verify(myClass).myVoidMethod(123, "hello");&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this example, we use the "doAnswer()" method to specify a custom implementation for the myVoidMethod() method of the MyClass mock object. The custom implementation simply prints the arguments passed to the method. Then, we call the myVoidMethod() method on the mock object and verify that it was called using the verify() method.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>What are the differences between a mock and stub?</title><link>http://www.johnjustin.com/2023/02/what-are-differences-between-mock-and.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sat, 4 Feb 2023 08:51:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-1920353770394802128</guid><description>&lt;p&gt;&amp;nbsp;"Mock" and "Stub" are two commonly used terms in software testing. They are used to simulate the behavior of real objects in order to test other parts of the system.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A "Stub" is a minimal implementation of an object that returns hardcoded responses to method calls. The main purpose of a stub is to provide controlled and consistent responses to method calls in a test environment. Stubs are typically used to replace the behavior of external dependencies, such as a database or a web service, in order to isolate the system under test.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A "Mock" is a more advanced version of a stub that can verify whether a method was called with the expected parameters, and whether it was called the expected number of times. Mocks also allow you to define the behavior of a method when it's called. In addition to returning hardcoded values, mocks can be used to assert that certain methods were called and verify their behavior.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In summary, the main difference between a stub and a mock is that a stub provides a simple, predefined response to a method call, while a mock can verify the behavior of the system under test and assert that certain methods were called with the expected parameters.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Why cant we mock static method in mockito ?</title><link>http://www.johnjustin.com/2023/02/why-cant-we-mock-static-method-in.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sat, 4 Feb 2023 08:49:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-2452998512162238002</guid><description>&lt;p&gt;&amp;nbsp;Mockito is a popular Java testing framework that is used for creating mock objects for testing purposes. However, by default, Mockito does not allow mocking of static methods.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The reason for this is that static methods are considered part of the class and not the instance, so mocking them would require changing the behavior of the entire class, not just a single instance. This can lead to unexpected behavior and can make testing more complicated.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Additionally, mocking static methods can lead to tight coupling between the test code and the production code, which can make the tests less flexible and harder to maintain.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;If you need to test code that calls a static method, it's generally better to refactor the code to make the static method callable on an instance. If that is not possible, you can use a technique such as PowerMock to mock static methods, but it's worth noting that using PowerMock can make your tests more complex and harder to maintain.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Differences between Listenablefuture vs Completablefuture in java</title><link>http://www.johnjustin.com/2023/02/differences-between-listenablefuture-vs.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sat, 4 Feb 2023 08:47:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-5439624975549410938</guid><description>&lt;div&gt;&amp;nbsp;"ListenableFuture" and "CompletableFuture" are both classes in the Java Concurrency API. They are used for asynchronous programming and handling parallelism in Java applications.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The key difference between the two is that "ListenableFuture" is a subclass of "Future" that provides a mechanism for registering callbacks to be notified when a computation is complete, while "CompletableFuture" extends "Future" and provides the ability to complete a computation from another thread.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In other words, "ListenableFuture" allows you to add a callback that will be executed when the future is complete, whereas "CompletableFuture" allows you to programmatically complete a future and provide a result.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's a brief summary of the main differences:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"ListenableFuture" is a subclass of "Future" that allows you to register a callback to be executed when the future is complete.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"CompletableFuture" is a subclass of "Future" that allows you to programmatically complete a future and provide a result.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"ListenableFuture" is a passive way of handling futures, while "CompletableFuture" is an active way of handling futures."CompletableFuture" provides a rich set of methods for composing, transforming, and combining Futures, whereas "ListenableFuture" is more focused on being notified when a future is complete.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>More AI powerful tools to explore</title><link>http://www.johnjustin.com/2023/02/more-ai-powerful-tools-to-explore.html</link><category>aiprompt</category><category>chatGPT</category><category>chatgptprompt</category><author>noreply@blogger.com (Unknown)</author><pubDate>Fri, 3 Feb 2023 11:08:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-5690304681901539615</guid><description>&lt;p&gt;&amp;nbsp;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp;This guide has more than 100+ AI Tools &amp;amp; Prompts to help you learn how to use ChatGPT to enhance your life.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;For programming&lt;/strong&gt;&lt;/p&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Tabnine:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.tabnine.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1gBNmcrR8tJ4CTlRYrEgSN" href="https://www.tabnine.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.tabnine.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1gBNmcrR8tJ4CTlRYrEgSN" href="https://www.tabnine.com/" style="color: #1155cc;" target="_blank"&gt;https://www.tabnine.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;OpenAI Codex:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://openai.com/blog/openai-codex/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw38HNTZXxAEUYmId59_fbny" href="https://openai.com/blog/openai-codex/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://openai.com/blog/openai-codex/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw38HNTZXxAEUYmId59_fbny" href="https://openai.com/blog/openai-codex/" style="color: #1155cc;" target="_blank"&gt;https://openai.com/&lt;wbr&gt;&lt;/wbr&gt;blog/openai-codex/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;GitHub Copilot:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://github.com/features/copilot&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw14TAYLJ-8zypBry0wAFdVL" href="https://github.com/features/copilot" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://github.com/features/copilot&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw14TAYLJ-8zypBry0wAFdVL" href="https://github.com/features/copilot" style="color: #1155cc;" target="_blank"&gt;https://github.com/&lt;wbr&gt;&lt;/wbr&gt;features/copilot&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;AI Commit:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://github.com/abi/autocommit&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw17d4ECN3XPlOD8Nf0fna4U" href="https://github.com/abi/autocommit" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://github.com/abi/autocommit&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw17d4ECN3XPlOD8Nf0fna4U" href="https://github.com/abi/autocommit" style="color: #1155cc;" target="_blank"&gt;https://github.com/&lt;wbr&gt;&lt;/wbr&gt;abi/autocommit&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;DeepCode:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.deepcode.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1qjg5Ns4GyeoxQNhaGw374" href="https://www.deepcode.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.deepcode.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1qjg5Ns4GyeoxQNhaGw374" href="https://www.deepcode.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;deepcode.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;AI2Sql:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.ai2sql.io/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3zpf32_XWibcCelXqFn9oe" href="https://www.ai2sql.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.ai2sql.io/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3zpf32_XWibcCelXqFn9oe" href="https://www.ai2sql.io/" style="color: #1155cc;" target="_blank"&gt;https://www.ai2sql.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Replit:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://replit.com/site/ghostwriter&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3nLLfE2ZkufndsKkEE_6u0" href="https://replit.com/site/ghostwriter" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://replit.com/site/ghostwriter&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3nLLfE2ZkufndsKkEE_6u0" href="https://replit.com/site/ghostwriter" style="color: #1155cc;" target="_blank"&gt;https://replit.com/&lt;wbr&gt;&lt;/wbr&gt;site/ghostwriter&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Akkio:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.akkio.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0JFXkxcRCRkrgSoPQVFKug" href="https://www.akkio.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.akkio.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0JFXkxcRCRkrgSoPQVFKug" href="https://www.akkio.com/" style="color: #1155cc;" target="_blank"&gt;https://www.akkio.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Httpie:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://httpie.io/blog/ai&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1Ru19Rb8u4m1wm0YjK7eim" href="https://httpie.io/blog/ai" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://httpie.io/blog/ai&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1Ru19Rb8u4m1wm0YjK7eim" href="https://httpie.io/blog/ai" style="color: #1155cc;" target="_blank"&gt;https://httpie.io/&lt;wbr&gt;&lt;/wbr&gt;blog/ai&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Mutable:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://mutable.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1zckE6AYQ63aQuocqK-bFm" href="https://mutable.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://mutable.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1zckE6AYQ63aQuocqK-bFm" href="https://mutable.ai/" style="color: #1155cc;" target="_blank"&gt;https://mutable.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Sheetplus:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://sheetplus.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2mw--fmQeH3SNzMOI1fXnd" href="https://sheetplus.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://sheetplus.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2mw--fmQeH3SNzMOI1fXnd" href="https://sheetplus.ai/" style="color: #1155cc;" target="_blank"&gt;https://sheetplus.&lt;wbr&gt;&lt;/wbr&gt;ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;ExcelFormulaBot:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://excelformulabot.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1rQflXx5wzysA0plOVA2MK" href="https://excelformulabot.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://excelformulabot.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1rQflXx5wzysA0plOVA2MK" href="https://excelformulabot.com/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;excelformulabot.com/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp;Marketing Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Frase:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.frase.io/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0AIQl8LJXkxvlAaFnCZwve" href="https://www.frase.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.frase.io/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0AIQl8LJXkxvlAaFnCZwve" href="https://www.frase.io/" style="color: #1155cc;" target="_blank"&gt;https://www.frase.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Bertha:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://chat.openai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3_Vc7l-m73NY7OY_BlIg3q" href="https://chat.openai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://bertha.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3bKKuqdnvTpnw8F84z8UiX" href="https://bertha.ai/" style="color: #1155cc;" target="_blank"&gt;https://bertha.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;ContentEdge:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.contentedge.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0gqzRr89W-mT_jyhVhKfZN" href="https://www.contentedge.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.contentedge.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0gqzRr89W-mT_jyhVhKfZN" href="https://www.contentedge.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;contentedge.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;ChatGPT3:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://chat.openai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3_Vc7l-m73NY7OY_BlIg3q" href="https://chat.openai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://chat.openai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3_Vc7l-m73NY7OY_BlIg3q" href="https://chat.openai.com/" style="color: #1155cc;" target="_blank"&gt;https://chat.openai.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Hemingwayapp:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://hemingwayapp.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1JEjtUBROTiE-hZAb1jbuQ" href="https://hemingwayapp.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://hemingwayapp.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1JEjtUBROTiE-hZAb1jbuQ" href="https://hemingwayapp.com/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;hemingwayapp.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Surfer SEO:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://surferseo.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3ymVjs6SzynzH775AC0TVU" href="https://surferseo.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://surferseo.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3ymVjs6SzynzH775AC0TVU" href="https://surferseo.com/" style="color: #1155cc;" target="_blank"&gt;https://surferseo.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Ponzu:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://surferseo.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3ymVjs6SzynzH775AC0TVU" href="https://surferseo.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.ponzu.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1bowxvdF2d2q86sphsRYyh" href="https://www.ponzu.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.ponzu.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Jasper:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.jasper.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1fCKFXZAuA_Lt2Ke7Gk5Jz" href="https://www.jasper.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.jasper.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1fCKFXZAuA_Lt2Ke7Gk5Jz" href="https://www.jasper.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.jasper.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Copy Smith:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://copysmith.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3McPl5EwZMvFM-BZKlo0XJ" href="https://copysmith.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://copysmith.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3McPl5EwZMvFM-BZKlo0XJ" href="https://copysmith.ai/" style="color: #1155cc;" target="_blank"&gt;https://copysmith.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;PepperType:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.peppertype.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2MGM9MD6gAgVuyYBAVpms9" href="https://www.peppertype.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://peppertype.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2lSi0BpG8a6ktgNq4j5VOD" href="https://peppertype.ai/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;peppertype.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Scalenut:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.scalenut.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0YqSJK8nk3bot93QaFRsVi" href="https://www.scalenut.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.scalenut.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0YqSJK8nk3bot93QaFRsVi" href="https://www.scalenut.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;scalenut.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Mutiny:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.smartly.io/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0KIqeF9aULCli-zD34WQ7M" href="https://www.smartly.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.mutinyhq.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2AhVlt_Melw2O9Y-htedoT" href="https://www.mutinyhq.com/" style="color: #1155cc;" target="_blank"&gt;https://www.mutinyhq.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Simplified :&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://simplified.com/ai-writer/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0S8tHXtxG3Rqc_Ic8ivBSm" href="https://simplified.com/ai-writer/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://simplified.com/ai-writer/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0S8tHXtxG3Rqc_Ic8ivBSm" href="https://simplified.com/ai-writer/" style="color: #1155cc;" target="_blank"&gt;https://simplified.com/ai-&lt;wbr&gt;&lt;/wbr&gt;writer/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;MoonBeam:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://chat.openai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3_Vc7l-m73NY7OY_BlIg3q" href="https://chat.openai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.gomoonbeam.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2QmuQIEXqk3Vf-92bqYSY5" href="https://www.gomoonbeam.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;gomoonbeam.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Smartly:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.smartly.io/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0KIqeF9aULCli-zD34WQ7M" href="https://www.smartly.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.smartly.io/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0KIqeF9aULCli-zD34WQ7M" href="https://www.smartly.io/" style="color: #1155cc;" target="_blank"&gt;https://www.smartly.&lt;wbr&gt;&lt;/wbr&gt;io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Seventh Sense:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.theseventhsense.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3TBXaPrqufXegs5CY5gq5E" href="https://www.theseventhsense.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.theseventhsense.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3TBXaPrqufXegs5CY5gq5E" href="https://www.theseventhsense.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;theseventhsense.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Copy AI :&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.copy.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1Ze0wDM1T5mULVYrPxpMQy" href="https://www.copy.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.copy.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1Ze0wDM1T5mULVYrPxpMQy" href="https://www.copy.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.copy.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;MarketMuse:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.marketmuse.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3YLWM4fZ9PllJn11CS9D1n" href="https://www.marketmuse.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.marketmuse.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3YLWM4fZ9PllJn11CS9D1n" href="https://www.marketmuse.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;marketmuse.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;WriteSonic:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://writesonic.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3tV9hj8pxx4LtsIZ4_153J" href="https://writesonic.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://writesonic.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3tV9hj8pxx4LtsIZ4_153J" href="https://writesonic.com/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;writesonic.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Phrasee:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://phrasee.co/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw15hUtU4cioHybCqsZa5S2e" href="https://phrasee.co/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://phrasee.co/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw15hUtU4cioHybCqsZa5S2e" href="https://phrasee.co/" style="color: #1155cc;" target="_blank"&gt;https://phrasee.co/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Sales Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Creatext:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.creatext.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3kaoASkUtoGVmBdYeQmOH_" href="https://www.creatext.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.creatext.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3kaoASkUtoGVmBdYeQmOH_" href="https://www.creatext.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;creatext.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Exceed:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://exceed.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3TTAgYdfEPNhWRNEclTvPv" href="https://exceed.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://exceed.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3TTAgYdfEPNhWRNEclTvPv" href="https://exceed.ai/" style="color: #1155cc;" target="_blank"&gt;https://exceed.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Creaitor:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.creaitor.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2pZMrWt6Tart_XOh0RVGtS" href="https://www.creaitor.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.creaitor.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2pZMrWt6Tart_XOh0RVGtS" href="https://www.creaitor.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;creaitor.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Twain:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.usetwain.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3FnOQO_gZS-eyMmE9XQ8Nk" href="https://www.usetwain.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.usetwain.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3FnOQO_gZS-eyMmE9XQ8Nk" href="https://www.usetwain.com/" style="color: #1155cc;" target="_blank"&gt;https://www.usetwain.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Lavender:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.lavender.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw24bKBAd_LId2sfuGpp0ACj" href="https://www.lavender.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.lavender.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw24bKBAd_LId2sfuGpp0ACj" href="https://www.lavender.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;lavender.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Regie:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.regie.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw14z4ikfNrGANfSqLtEbJ5T" href="https://www.regie.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.regie.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw14z4ikfNrGANfSqLtEbJ5T" href="https://www.regie.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.regie.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;People:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://people.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2IWDpkk9H1KPNKD9nP-FPR" href="http://people.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://people.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw2IWDpkk9H1KPNKD9nP-FPR" href="http://people.ai/" style="color: #1155cc;" target="_blank"&gt;http://people.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Smartwriter:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.smartwriter.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0g0EChhYW3obXqIdH4rX64" href="https://www.smartwriter.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.smartwriter.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0g0EChhYW3obXqIdH4rX64" href="https://www.smartwriter.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;smartwriter.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Octane:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.octaneai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1d88uUMDZcdOBGNdd_WPrA" href="https://www.octaneai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.octaneai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1d88uUMDZcdOBGNdd_WPrA" href="https://www.octaneai.com/" style="color: #1155cc;" target="_blank"&gt;https://www.octaneai.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Warmer:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://warmer.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3Sh1ok7MmhSDCK56ruEaT3" href="http://warmer.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://warmer.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3Sh1ok7MmhSDCK56ruEaT3" href="http://warmer.ai/" style="color: #1155cc;" target="_blank"&gt;http://warmer.ai/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Writing AI Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Copy AI :&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.copy.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1Ze0wDM1T5mULVYrPxpMQy" href="https://www.copy.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.copy.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1Ze0wDM1T5mULVYrPxpMQy" href="https://www.copy.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.copy.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Jasper:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.jasper.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1fCKFXZAuA_Lt2Ke7Gk5Jz" href="https://www.jasper.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.jasper.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw1fCKFXZAuA_Lt2Ke7Gk5Jz" href="https://www.jasper.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.jasper.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;WriteSonic:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://writesonic.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3tV9hj8pxx4LtsIZ4_153J" href="https://writesonic.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://writesonic.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3tV9hj8pxx4LtsIZ4_153J" href="https://writesonic.com/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;writesonic.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;ChatGPT3:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://chat.openai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3_Vc7l-m73NY7OY_BlIg3q" href="https://chat.openai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://chat.openai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw3_Vc7l-m73NY7OY_BlIg3q" href="https://chat.openai.com/" style="color: #1155cc;" target="_blank"&gt;https://chat.openai.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Headlime:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://headlime.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0OPtC9HUbUM7_tlSBZZTvV" href="https://headlime.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://headlime.com/&amp;amp;source=gmail&amp;amp;ust=1675488479831000&amp;amp;usg=AOvVaw0OPtC9HUbUM7_tlSBZZTvV" href="https://headlime.com/" style="color: #1155cc;" target="_blank"&gt;https://headlime.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;PepperType:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.peppertype.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3VuX00mugrnL6xlm2NWpNm" href="https://www.peppertype.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://peppertype.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0qYQfV2KF-mtujuyo--ZN8" href="https://peppertype.ai/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;peppertype.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;MarkCopy:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.markcopy.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1cfuXDoaHnWT9oLH1-jSlq" href="https://www.markcopy.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.markcopy.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1cfuXDoaHnWT9oLH1-jSlq" href="https://www.markcopy.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;markcopy.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Quillbot:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://quillbot.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1113-HbvMDGACiJSqUxPJr" href="https://quillbot.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://quillbot.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1113-HbvMDGACiJSqUxPJr" href="https://quillbot.com/" style="color: #1155cc;" target="_blank"&gt;https://quillbot.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Rytr:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://rytr.me/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2B58cXnMtJ4hlHL4QG7RYM" href="https://rytr.me/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://rytr.me/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2B58cXnMtJ4hlHL4QG7RYM" href="https://rytr.me/" style="color: #1155cc;" target="_blank"&gt;https://rytr.me/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;MoonBeam:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://chat.openai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2nydZiN1PROcFja1Nr-JxQ" href="https://chat.openai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.gomoonbeam.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2mF2xSee3gEyy3Uc02ZJ75" href="https://www.gomoonbeam.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;gomoonbeam.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Simplified :&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://simplified.com/ai-writer/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2GSijFJ8fYwFTBtXqWzO3G" href="https://simplified.com/ai-writer/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://simplified.com/ai-writer/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2GSijFJ8fYwFTBtXqWzO3G" href="https://simplified.com/ai-writer/" style="color: #1155cc;" target="_blank"&gt;https://simplified.com/ai-&lt;wbr&gt;&lt;/wbr&gt;writer/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Lex Page:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lex.page/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1GqtlpMbD8dcgheSDwONtF" href="https://lex.page/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lex.page/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1GqtlpMbD8dcgheSDwONtF" href="https://lex.page/" style="color: #1155cc;" target="_blank"&gt;https://lex.page/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Copy Smith:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://copysmith.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3I5v-JhML85iGcC5RX57yb" href="https://copysmith.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://copysmith.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3I5v-JhML85iGcC5RX57yb" href="https://copysmith.ai/" style="color: #1155cc;" target="_blank"&gt;https://copysmith.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Subtxt:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://subtxt.app/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1vVQfw7yQRIL_4ZTT-FOEs" href="https://subtxt.app/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://subtxt.app/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1vVQfw7yQRIL_4ZTT-FOEs" href="https://subtxt.app/" style="color: #1155cc;" target="_blank"&gt;https://subtxt.app/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Ellie Email Assistant:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tryellie.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1VDV4bjuQXr_ABQWioWbRs" href="https://tryellie.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tryellie.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1VDV4bjuQXr_ABQWioWbRs" href="https://tryellie.com/" style="color: #1155cc;" target="_blank"&gt;https://tryellie.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Wordtune:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.wordtune.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0UOf3rB02a_P1bgPX7IBtl" href="https://www.wordtune.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.wordtune.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0UOf3rB02a_P1bgPX7IBtl" href="https://www.wordtune.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;wordtune.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Sudowrite:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.sudowrite.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0p5VPju3NxBsqYkCWD2Cku" href="https://www.sudowrite.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.sudowrite.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0p5VPju3NxBsqYkCWD2Cku" href="https://www.sudowrite.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;sudowrite.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Novel:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://novelai.net/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2Nwd2VRrF5gliSbj2oowr5" href="https://novelai.net/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://novelai.net/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2Nwd2VRrF5gliSbj2oowr5" href="https://novelai.net/" style="color: #1155cc;" target="_blank"&gt;https://novelai.net/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Compose:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.compose.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3FcjsEeBvEchFCepPjz6jq" href="https://www.compose.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.compose.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3FcjsEeBvEchFCepPjz6jq" href="https://www.compose.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.compose.&lt;wbr&gt;&lt;/wbr&gt;ai/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Chatbots Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Landbot:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://landbot.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2TVyNahOvQ3iZ0m_1JBZZy" href="https://landbot.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://landbot.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2TVyNahOvQ3iZ0m_1JBZZy" href="https://landbot.io/" style="color: #1155cc;" target="_blank"&gt;https://landbot.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Cresta:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://cresta.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw276Foi1vuzt7_bM8SN7fz7" href="https://cresta.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://cresta.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw276Foi1vuzt7_bM8SN7fz7" href="https://cresta.com/" style="color: #1155cc;" target="_blank"&gt;https://cresta.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Kaizan:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://kaizan.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2qgSLKfg74eM55kvSdG6or" href="https://kaizan.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://kaizan.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2qgSLKfg74eM55kvSdG6or" href="https://kaizan.ai/" style="color: #1155cc;" target="_blank"&gt;https://kaizan.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;WotNot:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://wotnot.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1Pz6v8rN1WXQfEFhVV6p4o" href="https://wotnot.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://wotnot.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1Pz6v8rN1WXQfEFhVV6p4o" href="https://wotnot.io/" style="color: #1155cc;" target="_blank"&gt;https://wotnot.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Cohere:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://cohere.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2WeiE0wQAJ3oLUXmnbsjvo" href="https://cohere.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://cohere.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2WeiE0wQAJ3oLUXmnbsjvo" href="https://cohere.ai/" style="color: #1155cc;" target="_blank"&gt;https://cohere.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Tidio:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.tidio.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3-FnfmsPvUTstchQ2dF_DZ" href="https://www.tidio.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.tidio.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3-FnfmsPvUTstchQ2dF_DZ" href="https://www.tidio.com/" style="color: #1155cc;" target="_blank"&gt;https://www.tidio.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Typewise:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.typewise.app/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0zrjENHxNQFL_3rO5p_yt-" href="https://www.typewise.app/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.typewise.app/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0zrjENHxNQFL_3rO5p_yt-" href="https://www.typewise.app/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;typewise.app/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Quickchat:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.quickchat.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3GQ5z3srGTerCo71V7mhUb" href="https://www.quickchat.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.quickchat.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3GQ5z3srGTerCo71V7mhUb" href="https://www.quickchat.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;quickchat.ai/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp;Daily Workplace Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Notion AI:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.notion.so/product/ai&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0d6ZbsC-b6gf-Uud5Sb_S5" href="https://www.notion.so/product/ai" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.notion.so/product/ai&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0d6ZbsC-b6gf-Uud5Sb_S5" href="https://www.notion.so/product/ai" style="color: #1155cc;" target="_blank"&gt;https://www.notion.so/&lt;wbr&gt;&lt;/wbr&gt;product/ai&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Craft:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.craft.do/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw01TTQg8gnm8EOTIL9go1m5" href="https://www.craft.do/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.craft.do/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw01TTQg8gnm8EOTIL9go1m5" href="https://www.craft.do/" style="color: #1155cc;" target="_blank"&gt;https://www.craft.do/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Mem:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://mem.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3OeOOtfnlzg2V0RCm9g7hC" href="https://mem.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://mem.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3OeOOtfnlzg2V0RCm9g7hC" href="https://mem.ai/" style="color: #1155cc;" target="_blank"&gt;https://mem.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Taskade:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.taskade.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1ACaL2yAYXIQI095Gseicb" href="https://www.taskade.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.taskade.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1ACaL2yAYXIQI095Gseicb" href="https://www.taskade.com/" style="color: #1155cc;" target="_blank"&gt;https://www.taskade.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;You:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://you.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1Ff64PIT7Wsj7M9QvxFPAJ" href="https://you.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://you.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1Ff64PIT7Wsj7M9QvxFPAJ" href="https://you.com/" style="color: #1155cc;" target="_blank"&gt;https://you.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Todoist:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://todoist.com/integrations/apps/ai-assistant&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1jgNztjOnKi8W7-Cm5laV6" href="https://todoist.com/integrations/apps/ai-assistant" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://todoist.com/integrations/apps/ai-assistant&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1jgNztjOnKi8W7-Cm5laV6" href="https://todoist.com/integrations/apps/ai-assistant" style="color: #1155cc;" target="_blank"&gt;https://todoist.com/&lt;wbr&gt;&lt;/wbr&gt;integrations/apps/ai-assistant&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Design Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ul style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="margin-left: 15px;"&gt;Diagram:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://diagram.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3DBOfWMff8HJ1CuYwukOLE" href="https://diagram.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://diagram.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3DBOfWMff8HJ1CuYwukOLE" href="https://diagram.com/" style="color: #1155cc;" target="_blank"&gt;https://diagram.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Vizcom:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.vizcom.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2zOEca1ytdJD53PCUUkceS" href="https://www.vizcom.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.vizcom.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2zOEca1ytdJD53PCUUkceS" href="https://www.vizcom.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.vizcom.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Namelix:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://namelix.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw15dXzitbwQMeDRhQqHQidS" href="https://namelix.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://namelix.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw15dXzitbwQMeDRhQqHQidS" href="https://namelix.com/" style="color: #1155cc;" target="_blank"&gt;https://namelix.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Aragon:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.aragon.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw22DkgGyczWropgYz9GNkCh" href="https://www.aragon.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.aragon.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw22DkgGyczWropgYz9GNkCh" href="https://www.aragon.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.aragon.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Interior Design:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://interiorai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0RZoIi4wOMQF6MMhPj7wzf" href="https://interiorai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://interiorai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0RZoIi4wOMQF6MMhPj7wzf" href="https://interiorai.com/" style="color: #1155cc;" target="_blank"&gt;https://interiorai.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Visualize:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://visualise.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2HHe5xGujkaUkK0QYqxn_F" href="https://visualise.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://visualise.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2HHe5xGujkaUkK0QYqxn_F" href="https://visualise.ai/" style="color: #1155cc;" target="_blank"&gt;https://visualise.&lt;wbr&gt;&lt;/wbr&gt;ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Lexica:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lexica.art/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2-eQHawqfoiLn-i6pa8sZf" href="https://lexica.art/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lexica.art/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2-eQHawqfoiLn-i6pa8sZf" href="https://lexica.art/" style="color: #1155cc;" target="_blank"&gt;https://lexica.art/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Poly:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://poly.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3dSAqB1_4jk4z2BJFOgQzJ" href="https://poly.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://poly.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3dSAqB1_4jk4z2BJFOgQzJ" href="https://poly.ai/" style="color: #1155cc;" target="_blank"&gt;https://poly.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Looka:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://looka.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0jo2mZSXrx2LKYSuf-WGsg" href="https://looka.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://looka.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0jo2mZSXrx2LKYSuf-WGsg" href="https://looka.com/" style="color: #1155cc;" target="_blank"&gt;https://looka.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Stock AI:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://stockimg.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0qPmTd0TeupF8QoOlsmy4C" href="https://stockimg.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://stockimg.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0qPmTd0TeupF8QoOlsmy4C" href="https://stockimg.ai/" style="color: #1155cc;" target="_blank"&gt;https://stockimg.ai/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Speech Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Resemble:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.resemble.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1bPuDIeD2KwlXlNuKYtzD_" href="https://www.resemble.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.resemble.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1bPuDIeD2KwlXlNuKYtzD_" href="https://www.resemble.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;resemble.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Broadn:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.broadn.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3_nJzimkwtnzKQzWgmRXEJ" href="https://www.broadn.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.broadn.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3_nJzimkwtnzKQzWgmRXEJ" href="https://www.broadn.io/" style="color: #1155cc;" target="_blank"&gt;https://www.broadn.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Podcast:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://podcast.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2xQEKq8XkIFlf-Sho4Z3Mm" href="https://podcast.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://podcast.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2xQEKq8XkIFlf-Sho4Z3Mm" href="https://podcast.ai/" style="color: #1155cc;" target="_blank"&gt;https://podcast.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Fliki:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://fliki.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1WYj2ewxLv9iW2UZrIdQlt" href="https://fliki.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://fliki.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1WYj2ewxLv9iW2UZrIdQlt" href="https://fliki.ai/" style="color: #1155cc;" target="_blank"&gt;https://fliki.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Wellsaidlabs:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://wellsaidlabs.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3ilSbBkvbZz3W_6PuZaWRB" href="https://wellsaidlabs.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://wellsaidlabs.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3ilSbBkvbZz3W_6PuZaWRB" href="https://wellsaidlabs.com/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;wellsaidlabs.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Voicemod:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.voicemod.net/ai-voices/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1JEme2GZwCJEh0J04JcwXh" href="https://www.voicemod.net/ai-voices/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.voicemod.net/ai-voices/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1JEme2GZwCJEh0J04JcwXh" href="https://www.voicemod.net/ai-voices/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;voicemod.net/ai-voices/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Otter:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://otter.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1U2H1KNPn5CREEH2uRiRS2" href="https://otter.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://otter.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1U2H1KNPn5CREEH2uRiRS2" href="https://otter.ai/" style="color: #1155cc;" target="_blank"&gt;https://otter.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;TLDR This:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tldrthis.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw02dZdZvqlKOAfQluBq_4jh" href="https://tldrthis.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tldrthis.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw02dZdZvqlKOAfQluBq_4jh" href="https://tldrthis.com/" style="color: #1155cc;" target="_blank"&gt;https://tldrthis.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Glasp AI:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://glasp.co/ai-summary&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1RcGR_Mb2mjho2f0kAfzZl" href="https://glasp.co/ai-summary" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://glasp.co/ai-summary&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1RcGR_Mb2mjho2f0kAfzZl" href="https://glasp.co/ai-summary" style="color: #1155cc;" target="_blank"&gt;https://glasp.co/ai-&lt;wbr&gt;&lt;/wbr&gt;summary&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Sembly:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.sembly.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1mBivlQIIqGijQutfQruWe" href="https://www.sembly.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.sembly.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1mBivlQIIqGijQutfQruWe" href="https://www.sembly.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.sembly.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Summari:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.summari.com/products/chrome&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3xOQ4hW8je6JX1JQp89kTT" href="https://www.summari.com/products/chrome" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.summari.com/products/chrome&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3xOQ4hW8je6JX1JQp89kTT" href="https://www.summari.com/products/chrome" style="color: #1155cc;" target="_blank"&gt;https://www.summari.&lt;wbr&gt;&lt;/wbr&gt;com/products/chrome&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Coqui:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://coqui.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1mezx8IAmMFemFLxzY2kQO" href="https://coqui.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://coqui.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1mezx8IAmMFemFLxzY2kQO" href="https://coqui.ai/" style="color: #1155cc;" target="_blank"&gt;https://coqui.ai/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Leisure Time Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;HairStyle:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.hairstyleai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3PVoHkMT3DLifA0bztQrvR" href="https://www.hairstyleai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.hairstyleai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw3PVoHkMT3DLifA0bztQrvR" href="https://www.hairstyleai.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;hairstyleai.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;AI Detector:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://crossplag.com/detecting-if-a-text-is-ai-generated/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw374l8n4vZA9bkIeeG55vhI" href="https://crossplag.com/detecting-if-a-text-is-ai-generated/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://crossplag.com/detecting-if-a-text-is-ai-generated/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw374l8n4vZA9bkIeeG55vhI" href="https://crossplag.com/detecting-if-a-text-is-ai-generated/" style="color: #1155cc;" target="_blank"&gt;https://crossplag.&lt;wbr&gt;&lt;/wbr&gt;com/detecting-if-a-text-is-ai-&lt;wbr&gt;&lt;/wbr&gt;generated/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;AI Community:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://huggingface.co/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw23gntQLghNB0KH0PWYQa_F" href="https://huggingface.co/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://huggingface.co/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw23gntQLghNB0KH0PWYQa_F" href="https://huggingface.co/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;huggingface.co/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Talk to Books:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://books.google.com/talktobooks/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0qyWzuNBQ0gbLtSylHSEDS" href="https://books.google.com/talktobooks/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://books.google.com/talktobooks/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw0qyWzuNBQ0gbLtSylHSEDS" href="https://books.google.com/talktobooks/" style="color: #1155cc;" target="_blank"&gt;https://books.google.&lt;wbr&gt;&lt;/wbr&gt;com/talktobooks/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Workplace Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Designs:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://designs.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw16EuxYUo0I-3yS3sj4s34r" href="https://designs.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://designs.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw16EuxYUo0I-3yS3sj4s34r" href="https://designs.ai/" style="color: #1155cc;" target="_blank"&gt;https://designs.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Beautiful:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.beautiful.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1VVGsEpn1_Q-7gmzye9Adu" href="https://www.beautiful.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.beautiful.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw1VVGsEpn1_Q-7gmzye9Adu" href="https://www.beautiful.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;beautiful.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Slides:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.slidesai.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2BPlgWhToSnGtqFqykkj5_" href="https://www.slidesai.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.slidesai.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2BPlgWhToSnGtqFqykkj5_" href="https://www.slidesai.io/" style="color: #1155cc;" target="_blank"&gt;https://www.slidesai.&lt;wbr&gt;&lt;/wbr&gt;io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Synthesia:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.synthesia.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2IeOKiUozYWZ9xWhDshoiX" href="https://www.synthesia.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.synthesia.io/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2IeOKiUozYWZ9xWhDshoiX" href="https://www.synthesia.io/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;synthesia.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Pitch:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://pitch.com/&amp;amp;source=gmail&amp;amp;ust=1675488479832000&amp;amp;usg=AOvVaw2BIUNj5LPeBgxa8EzJz0ac" href="https://pitch.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://pitch.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0UHtXDbOjQwGAR8nrIn2bG" href="https://pitch.com/" style="color: #1155cc;" target="_blank"&gt;https://pitch.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Poised:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.poised.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3aB4GUCIgWrhJz8OeSm7iE" href="https://www.poised.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.poised.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3aB4GUCIgWrhJz8OeSm7iE" href="https://www.poised.com/" style="color: #1155cc;" target="_blank"&gt;https://www.poised.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Lalal:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.lalal.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0B3LeqQC5DRnQShxgRJrCu" href="https://www.lalal.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.lalal.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0B3LeqQC5DRnQShxgRJrCu" href="https://www.lalal.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.lalal.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Krisp:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://krisp.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2vJ-sR5VAM-tzcrsew3jay" href="https://krisp.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://krisp.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2vJ-sR5VAM-tzcrsew3jay" href="https://krisp.ai/" style="color: #1155cc;" target="_blank"&gt;https://krisp.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Murf:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://murf.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3ZJj7XvutK5jAfiDroUXiq" href="https://murf.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://murf.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3ZJj7XvutK5jAfiDroUXiq" href="https://murf.ai/" style="color: #1155cc;" target="_blank"&gt;https://murf.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Jukebox:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://openai.com/blog/jukebox/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0Jy9bSFk03FiCj7kRNbPRH" href="https://openai.com/blog/jukebox/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://openai.com/blog/jukebox/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0Jy9bSFk03FiCj7kRNbPRH" href="https://openai.com/blog/jukebox/" style="color: #1155cc;" target="_blank"&gt;https://openai.com/&lt;wbr&gt;&lt;/wbr&gt;blog/jukebox/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Narakeet:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.narakeet.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3m-ec5z3EaYF1SXloJDJyh" href="https://www.narakeet.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.narakeet.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3m-ec5z3EaYF1SXloJDJyh" href="https://www.narakeet.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;narakeet.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Big Speak AI:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://bigspeak.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw34MQbErUW5ey5YN6rsBBz9" href="https://bigspeak.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://bigspeak.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw34MQbErUW5ey5YN6rsBBz9" href="https://bigspeak.ai/" style="color: #1155cc;" target="_blank"&gt;https://bigspeak.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Descript:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.descript.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1Hj4Fs7uqatj7CWyCaIift" href="https://www.descript.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.descript.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1Hj4Fs7uqatj7CWyCaIift" href="https://www.descript.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;descript.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Assembly:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.assemblyai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2lhi8lTWWIpGY3RzV4w-bu" href="https://www.assemblyai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.assemblyai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2lhi8lTWWIpGY3RzV4w-bu" href="https://www.assemblyai.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;assemblyai.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Article Audio:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://article.audio/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3cYezWbai1zDF0bnx4CCQP" href="https://article.audio/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://article.audio/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3cYezWbai1zDF0bnx4CCQP" href="https://article.audio/" style="color: #1155cc;" target="_blank"&gt;https://article.audio/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;BeyondWords:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://beyondwords.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0Cz8r03PuCJT3NVi0w_n3F" href="https://beyondwords.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://beyondwords.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0Cz8r03PuCJT3NVi0w_n3F" href="https://beyondwords.io/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;beyondwords.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Lumen5:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lumen5.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw32_vwmL4YOx5kPcV4jfmx9" href="https://lumen5.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lumen5.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw32_vwmL4YOx5kPcV4jfmx9" href="https://lumen5.com/" style="color: #1155cc;" target="_blank"&gt;https://lumen5.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Supercreator:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://supercreator.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3DjcX_1pQ9uqgWFUc8dGbB" href="http://supercreator.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://supercreator.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3DjcX_1pQ9uqgWFUc8dGbB" href="http://supercreator.ai/" style="color: #1155cc;" target="_blank"&gt;http://&lt;wbr&gt;&lt;/wbr&gt;supercreator.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Movio:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.movio.la/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2k2qUuojRV8T17Jj1evN6a" href="https://www.movio.la/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.movio.la/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2k2qUuojRV8T17Jj1evN6a" href="https://www.movio.la/" style="color: #1155cc;" target="_blank"&gt;https://www.movio.la/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Zoomscape:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://zoomscape.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0_wuvrs9IAmEnOER-LP3jW" href="https://zoomscape.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://zoomscape.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0_wuvrs9IAmEnOER-LP3jW" href="https://zoomscape.ai/" style="color: #1155cc;" target="_blank"&gt;https://zoomscape.&lt;wbr&gt;&lt;/wbr&gt;ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Presentation:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://presentations.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0lOBD2BkXUjYd7R2AJkRpB" href="https://presentations.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://presentations.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0lOBD2BkXUjYd7R2AJkRpB" href="https://presentations.ai/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;presentations.ai/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Text to SQL Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;AI2sql:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.ai2sql.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2qgoqTRAriY6puM83JPflv" href="https://www.ai2sql.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.ai2sql.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2qgoqTRAriY6puM83JPflv" href="https://www.ai2sql.io/" style="color: #1155cc;" target="_blank"&gt;https://www.ai2sql.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Seek:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.seek.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw314EO_2KB9CZ1epLzraHiM" href="https://www.seek.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.seek.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw314EO_2KB9CZ1epLzraHiM" href="https://www.seek.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.seek.ai/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Image Generating &amp;amp; Processing Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Profile Picture:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.profilepicture.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2iYcT0insfa0jAMhZ43aiT" href="https://www.profilepicture.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.profilepicture.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2iYcT0insfa0jAMhZ43aiT" href="https://www.profilepicture.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;profilepicture.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Photosonic:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://photosonic.writesonic.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3tjBzk3CRlctyrw846gdCT" href="https://photosonic.writesonic.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://photosonic.writesonic.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3tjBzk3CRlctyrw846gdCT" href="https://photosonic.writesonic.com/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;photosonic.writesonic.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Remove BG:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.remove.bg/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0GPUeDnnhqIdgpANTw_Os6" href="https://www.remove.bg/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.remove.bg/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0GPUeDnnhqIdgpANTw_Os6" href="https://www.remove.bg/" style="color: #1155cc;" target="_blank"&gt;https://www.remove.bg/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Artbreeder:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.artbreeder.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw179rYitIk9948e2NkGbLnt" href="https://www.artbreeder.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.artbreeder.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw179rYitIk9948e2NkGbLnt" href="https://www.artbreeder.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;artbreeder.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Magiceraser:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://magicstudio.com/magiceraser&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2NapiPLom9-JxwrLvHd5EH" href="https://magicstudio.com/magiceraser" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://magicstudio.com/magiceraser&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2NapiPLom9-JxwrLvHd5EH" href="https://magicstudio.com/magiceraser" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;magicstudio.com/magiceraser&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Krea:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.krea.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3yno3aHphbN4VdSTabJJ0X" href="https://www.krea.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.krea.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3yno3aHphbN4VdSTabJJ0X" href="https://www.krea.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.krea.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Lexica:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lexica.art/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1hIhM7Xgi0Fs5AOxlxhqMs" href="https://lexica.art/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://lexica.art/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1hIhM7Xgi0Fs5AOxlxhqMs" href="https://lexica.art/" style="color: #1155cc;" target="_blank"&gt;https://lexica.art/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Removal:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://removal.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw34knGJS2ewyywLdrTql1p2" href="https://removal.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://removal.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw34knGJS2ewyywLdrTql1p2" href="https://removal.ai/" style="color: #1155cc;" target="_blank"&gt;https://removal.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Image Enlarger:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://imglarger.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2VymO1MSitZawprv1rTwPr" href="https://imglarger.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://imglarger.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2VymO1MSitZawprv1rTwPr" href="https://imglarger.com/" style="color: #1155cc;" target="_blank"&gt;https://imglarger.&lt;wbr&gt;&lt;/wbr&gt;com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Watermark Removal :&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.watermarkremover.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1Hn3_54QH_gTOgkIEs4Fkn" href="https://www.watermarkremover.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.watermarkremover.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1Hn3_54QH_gTOgkIEs4Fkn" href="https://www.watermarkremover.io/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;watermarkremover.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Rodebudai:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.rosebudai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0FTkFPdWA7PeQBILINTmyT" href="https://www.rosebudai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.rosebudai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0FTkFPdWA7PeQBILINTmyT" href="https://www.rosebudai.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;rosebudai.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Hypotenuse:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.hypotenuse.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2nPqeta-2r2p0Kc8WObIDn" href="https://www.hypotenuse.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.hypotenuse.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2nPqeta-2r2p0Kc8WObIDn" href="https://www.hypotenuse.ai/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;hypotenuse.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Nyx:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://nyx.gallery/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3jx_j3kAQBmDaSny24uKtC" href="https://nyx.gallery/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://nyx.gallery/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3jx_j3kAQBmDaSny24uKtC" href="https://nyx.gallery/" style="color: #1155cc;" target="_blank"&gt;https://nyx.gallery/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;AI Avatar:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://avatarai.me/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw36TjZS8kW4sWo-_TZDAbr-" href="https://avatarai.me/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://avatarai.me/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw36TjZS8kW4sWo-_TZDAbr-" href="https://avatarai.me/" style="color: #1155cc;" target="_blank"&gt;https://avatarai.me/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Cutout Pro:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.cutout.pro/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2X8yU60GRiR-mdfK3Pr7d0" href="https://www.cutout.pro/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.cutout.pro/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2X8yU60GRiR-mdfK3Pr7d0" href="https://www.cutout.pro/" style="color: #1155cc;" target="_blank"&gt;https://www.cutout.pro/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Passport Photo:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://passphoto.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0fl_gQZSw3Njd_ZBGL0IqW" href="https://passphoto.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://passphoto.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw0fl_gQZSw3Njd_ZBGL0IqW" href="https://passphoto.ai/" style="color: #1155cc;" target="_blank"&gt;https://passphoto.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Picso:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://picso.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2DBku2ZbNKlplsR-O8RDM5" href="https://picso.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://picso.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2DBku2ZbNKlplsR-O8RDM5" href="https://picso.ai/" style="color: #1155cc;" target="_blank"&gt;https://picso.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Playground:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.playgroundai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3hxadQlbIDmLc0BvfI7fi6" href="https://www.playgroundai.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.playgroundai.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw3hxadQlbIDmLc0BvfI7fi6" href="https://www.playgroundai.com/" style="color: #1155cc;" target="_blank"&gt;https://www.&lt;wbr&gt;&lt;/wbr&gt;playgroundai.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Runway:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://runwayml.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2gov8Ct9TGN77awTgx2IEJ" href="https://runwayml.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://runwayml.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2gov8Ct9TGN77awTgx2IEJ" href="https://runwayml.com/" style="color: #1155cc;" target="_blank"&gt;https://runwayml.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Profile Pic Maker:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://pfpmaker.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw37Xc778ys7XYuVOEvzw5px" href="https://pfpmaker.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://pfpmaker.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw37Xc778ys7XYuVOEvzw5px" href="https://pfpmaker.com/" style="color: #1155cc;" target="_blank"&gt;https://pfpmaker.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;HotPot:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://hotpot.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1zXohkfd5ib9bxn1GbfW9_" href="https://hotpot.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://hotpot.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1zXohkfd5ib9bxn1GbfW9_" href="https://hotpot.ai/" style="color: #1155cc;" target="_blank"&gt;https://hotpot.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Mage:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.mage.space/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1Yyg9wzimleNjsWz5hm1Dy" href="https://www.mage.space/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://www.mage.space/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1Yyg9wzimleNjsWz5hm1Dy" href="https://www.mage.space/" style="color: #1155cc;" target="_blank"&gt;https://www.mage.space/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;Twitter Tools.&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;strong style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;ol style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;Tribescaler:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tribescaler.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2uFmr5VYonV4zxnzv3_h1H" href="https://tribescaler.com/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tribescaler.com/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2uFmr5VYonV4zxnzv3_h1H" href="https://tribescaler.com/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;tribescaler.com/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;Postwise:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://postwise.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2RAiqRX2B0FehiIycuuFrb" href="http://postwise.ai/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=http://postwise.ai/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw2RAiqRX2B0FehiIycuuFrb" href="http://postwise.ai/" style="color: #1155cc;" target="_blank"&gt;http://postwise.ai/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;TweetHunter:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tweethunter.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1m9wFE2Zoa3SExpxuVE2T6" href="https://tweethunter.io/" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://tweethunter.io/&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1m9wFE2Zoa3SExpxuVE2T6" href="https://tweethunter.io/" style="color: #1155cc;" target="_blank"&gt;https://&lt;wbr&gt;&lt;/wbr&gt;tweethunter.io/&lt;/a&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;TweetGPT:&amp;nbsp;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://github.com/yaroslav-n/tweetGPT&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1PJalv1gLfOqyWYsaOgBJg" href="https://github.com/yaroslav-n/tweetGPT" style="color: #1155cc;" target="_blank"&gt;&lt;/a&gt;&lt;a data-saferedirecturl="https://www.google.com/url?q=https://github.com/yaroslav-n/tweetGPT&amp;amp;source=gmail&amp;amp;ust=1675488479833000&amp;amp;usg=AOvVaw1PJalv1gLfOqyWYsaOgBJg" href="https://github.com/yaroslav-n/tweetGPT" style="color: #1155cc;" target="_blank"&gt;https://github.com/&lt;wbr&gt;&lt;/wbr&gt;yaroslav-n/tweetGPT&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style="background-color: white; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;li style="margin-left: 15px;"&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;Blog Writing Prompts.&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will speak directly to my [ideal customer persona] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will establish trust and credibility with my [ideal customer persona] by highlighting the successes and testimonials of previous customers who have used my [product/service]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a [type of blog post] that will convince my [ideal customer persona] to purchase my [product/service] by highlighting its unique benefits and addressing any potential objections."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a [type of blog post] that will make my [ideal customer persona] feel [emotion] about my [product/service] and persuade them to take [desired action] with a sense of urgency."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a [type of blog post] that will overcome objections and concerns my [ideal customer persona] may have about my [product/service] and convince them to take [desired action]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will showcase the unique features and benefits of my [product/service] to [ideal customer persona] and persuade them to make a purchase."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will clearly explain the features and benefits of my [product/service] to [ideal customer persona] and persuade them to make a purchase with a strong call-to-action."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will draw in my [ideal customer persona] with a strong headline and hook, and then convince them to take [desired action] with persuasive language and compelling evidence."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a [type of blog post] that will address the pain points and needs of my [ideal customer persona] and show them how my [product/service] is the solution they've been searching for."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a [type of blog post] that will speak directly to the needs and pain points of my [ideal customer persona] and persuade them to take [desired action] with a sense of urgency and strong offer."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will showcase the value and benefits of my [product/service] to [ideal customer persona] and convince them to take [desired action] with social proof and credibility-building elements."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will educate my [ideal customer persona] on a specific [topic] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a [type of blog post] that will tell a story about my [product/service] and how it has helped [ideal customer persona] achieve their [goal] in a relatable and engaging way."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a [type of blog post] that will engage my [ideal customer persona] with a unique and compelling perspective on [subject] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a [type of blog post] that will provide valuable and relevant information to my [ideal customer persona] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;&lt;p&gt;&lt;strong&gt;YouTube Ad Scripts Prompts.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube ad script that will provide valuable and relevant information to my [ideal customer persona] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube ad script that will showcase the unique features and benefits of my [product/service] to my [ideal customer persona] and persuade them to make a purchase with social proof and credibility-building elements."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube ad script that will overcome objections and concerns my [ideal customer persona] may have about my [product/service] and convince them to take [desired action] with a sense of urgency."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will introduce my [product/service] to my [ideal customer persona] and persuade them to take [desired action] with a strong call-to-action and compelling visuals."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will showcase the value and benefits of my [product/service] to my [ideal customer persona] and persuade them to take [desired action] with a strong offer and clear call-to-action."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will clearly explain the features and benefits of my [product/service] to my [ideal customer persona] and persuade them to make a purchase with a sense of urgency."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube ad script that will tell a story about my [product/service] and how it has helped [ideal customer persona] achieve their [goal] in a relatable and engaging way."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will draw in my [ideal customer persona] with a strong headline and hook, and then convince them to take [desired action] with persuasive language and compelling evidence."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will speak directly to the needs and pain points of my [ideal customer persona] and persuade them to take [desired action] with a sense of urgency and strong offer."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube ad script that will address the pain points and needs of my [ideal customer persona] and show them how my [product/service] is the solution they've been searching for."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will establish trust and credibility with my [ideal customer persona] by highlighting the successes and testimonials of previous customers who have used my [product/service]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube ad script that will educate my [ideal customer persona] on a specific [topic] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube ad script that will showcase the unique selling points of my [product/service] and persuade my [ideal customer persona] to make a purchase with a sense of urgency and exclusive offers."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will draw in my [ideal customer persona] with a relatable and authentic message, and then persuade them to take [desired action] with a strong call-to action and compelling visuals."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube ad script that will engage my [ideal customer persona] with a unique and compelling perspective on [subject] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;YouTube Video Ideas Prompts.&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will both go viral and persuade my [ideal customer persona] to take [desired action] on my [website/product] with a strong call-to-action and compelling visuals."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube video idea that will tell a unique and relatable story about my [product/service] and how it has helped [ideal customer persona] achieve their [goal]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will showcase the unique features and benefits of my [product/service] in a fun and creative way, and persuade my [ideal customer persona] to make a purchase."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube video idea that will showcase the value and benefits of my [product/service] to my [ideal customer persona] and persuade them to take [desired action] with a strong offer and clear call-to-action."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube video idea that will provide valuable and relevant information to my[ideal customer persona] about [subject] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will overcome objections and concerns my [ideal customer persona] may have about my [product/service] and convince them to take [desired action] with a sense of urgency."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube video idea that will go viral and showcase my [product/service] to my [ideal customer persona] in a creative and entertaining way."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will showcase the success stories of previous customers who have used my [product/service] and persuade my [ideal customer persona] to make a purchase."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will engage my [ideal customer persona] with a unique and compelling perspective on [subject] and persuade them to take [desired action] on my [website/product]."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will provide a behind-the-scenes look at my [company/brand] and persuade my [ideal customer persona] to take [desired action] with a sense of authenticity and relatability."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube video idea that will provide a step-by-step guide on how to use my [product/service] and persuade my [ideal customer persona] to make a purchase with clear and compelling instructions."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube video idea that will draw in my [ideal customer persona] with a relatable and authentic message, and then persuade them to take [desired action] with a strong call-to-action and compelling visuals."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I'm looking for a YouTube video idea that will showcase the unique selling points of my [product/service] and persuade my [ideal customer persona] to make a purchase with a sense of urgency and exclusive offers."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will demonstrate how my [product/service] can solve the specific pain points and needs of my [ideal customer persona] in a relatable and engaging way."&lt;/li&gt;&lt;li style="margin-left: 15px;"&gt;"I need a YouTube video idea that will compare my [product/service] to similar options on the market and persuade my [ideal customer persona] to choose us with clear and compelling evidence."&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title> java threadpool executor with kafka consumer</title><link>http://www.johnjustin.com/2023/02/java-threadpool-executor-with-kafka.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Fri, 3 Feb 2023 10:56:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-707591550787746966</guid><description>&lt;p&gt;&amp;nbsp;&lt;span style="color: #343541; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; white-space: pre-wrap;"&gt;using java program with spring I need to create a java threadpool executor and this threadpool executor in application level. I  have multiple kafka consumers reading records as batches from kafka topic. These consumers should run inside the threadpool executor and we need to shutdown the executor while application stops&lt;/span&gt;&lt;/p&gt;&lt;ol style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;"&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;First, create a configuration class with the thread pool executor configuration:&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="color: #343541; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"&gt;&lt;span style="white-space: pre-wrap;"&gt;@Configuration
public class ExecutorConfig {

  @Bean
  public Executor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(20);
    executor.setQueueCapacity(50);
    executor.setThreadNamePrefix("ConsumerThread-");
    executor.initialize();
    return executor;
  }
}
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;ol start="2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;"&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;In your main class, create the kafka consumers and run them inside the thread pool executor:&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="color: #343541; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"&gt;&lt;span style="white-space: pre-wrap;"&gt;@SpringBootApplication
public class Application {

  private final Logger logger = LoggerFactory.getLogger(Application.class);

  @Autowired
  private Executor taskExecutor;

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

  @PostConstruct
  public void runConsumers() {
    for (int i = 0; i &amp;lt; 5; i++) {
      taskExecutor.execute(new KafkaConsumer("topic" + i));
    }
  }

  class KafkaConsumer implements Runnable {

    private final Logger logger = LoggerFactory.getLogger(KafkaConsumer.class);
    private final String topic;

    KafkaConsumer(String topic) {
      this.topic = topic;
    }

    @Override
    public void run() {
      logger.info("Running Consumer for topic: " + topic);
      //Code to run the kafka consumer for the topic
    }
  }
}
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style="color: #343541; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol start="3" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-reset: item 0; display: flex; flex-direction: column; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem;"&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; margin: 0px; padding-left: 0.375em; white-space: pre-wrap;"&gt;To shutdown the thread pool executor while application stops, we can add a shutdown hook in the main class:&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; margin: 0px; padding-left: 0.375em; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; margin: 0px; padding-left: 0.375em; white-space: pre-wrap;"&gt;@SpringBootApplication&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;&lt;span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"&gt;&lt;span style="white-space: pre-wrap;"&gt;public class Application {

  private final Logger logger = LoggerFactory.getLogger(Application.class);

  @Autowired
  private Executor taskExecutor;

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

  @PostConstruct
  public void runConsumers() {
    for (int i = 0; i &amp;lt; 5; i++) {
      taskExecutor.execute(new KafkaConsumer("topic" + i));
    }
  }

  @PreDestroy
  public void shutDownExecutor() {
    if (taskExecutor instanceof ThreadPoolTaskExecutor) {
      ((ThreadPoolTaskExecutor) taskExecutor).shutdown();
    }
  }

  class KafkaConsumer implements Runnable {

    private final Logger logger = LoggerFactory.getLogger(KafkaConsumer.class);
    private final String topic;

    KafkaConsumer(String topic) {
      this.topic = topic;
    }

    @Override
    public void run() {
      logger.info("Running Consumer for topic: " + topic);
      //Code to run the kafka consumer for the topic
    }
  }
}&lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;&lt;span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"&gt;&lt;span style="white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;To shutdown the thread pool executor while application stops, we can add a shutdown hook in the main class:&lt;/li&gt;&lt;li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"&gt;&lt;span style="white-space: pre-wrap;"&gt;@SpringBootApplication
public class Application {

  private final Logger logger = LoggerFactory.getLogger(Application.class);

  @Autowired
  private Executor taskExecutor;

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

  @PostConstruct
  public void runConsumers() {
    for (int i = 0; i &amp;lt; 5; i++) {
      taskExecutor.execute(new KafkaConsumer("topic" + i));
    }
  }

  @PreDestroy
  public void shutDownExecutor() {
    if (taskExecutor instanceof ThreadPoolTaskExecutor) {
      ((ThreadPoolTaskExecutor) taskExecutor).shutdown();
    }
  }

  class KafkaConsumer implements Runnable {

    private final Logger logger = LoggerFactory.getLogger(KafkaConsumer.class);
    private final String topic;

    KafkaConsumer(String topic) {
      this.topic = topic;
    }

    @Override
    public void run() {
      logger.info("Running Consumer for topic: " + topic);
      //Code to run the kafka consumer for the topic
    }
  }
}&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; white-space: pre-wrap;"&gt;
&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Java program for finding the smallest element in an arraylist</title><link>http://www.johnjustin.com/2023/01/java-program-for-finding-smallest.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sun, 15 Jan 2023 09:03:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-407364931570174809</guid><description>&lt;p&gt;&amp;nbsp;This program also creates an ArrayList called "numbers" and adds some integers to it.&lt;/p&gt;&lt;p&gt;&amp;nbsp;It then uses a for loop to iterate through the ArrayList, and compares each element to&lt;/p&gt;&lt;p&gt;&amp;nbsp;the current smallest element. If a smaller element is found, it&lt;/p&gt;&lt;p&gt;&amp;nbsp;is assigned to the variable "smallest". Finally, the smallest element is printed to the console.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;import java.util.ArrayList;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;public class SmallestElementArrayList {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; public static void main(String[] args) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ArrayList&amp;lt;Integer&amp;gt; numbers = new ArrayList&amp;lt;&amp;gt;();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; numbers.add(3);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; numbers.add(2);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; numbers.add(5);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; numbers.add(1);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; numbers.add(4);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int smallest = numbers.get(0);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 1; i &amp;lt; numbers.size(); i++) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (numbers.get(i) &amp;lt; smallest) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; smallest = numbers.get(i);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println("Smallest element in the ArrayList is: " + smallest);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Apache kafka consumer in java simple example</title><link>http://www.johnjustin.com/2023/01/apache-kafka-consumer-in-java-simple.html</link><category>kafka consumer java</category><author>noreply@blogger.com (Unknown)</author><pubDate>Sun, 15 Jan 2023 08:54:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-5149819040733889922</guid><description>Here is a &lt;b&gt;simple java program for apache kafka consumer&lt;/b&gt;. This java program is ready to use in your code base or project.&lt;div&gt;&amp;nbsp;import java.util.Collections;&amp;nbsp;&lt;/div&gt;&lt;div&gt;import java.util.Properties;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;import org.apache.kafka.clients.consumer.ConsumerConfig;&amp;nbsp;&lt;/div&gt;&lt;div&gt;import org.apache.kafka.clients.consumer.ConsumerRecord;&lt;/div&gt;&lt;div&gt;&amp;nbsp;import org.apache.kafka.clients.consumer.ConsumerRecords;&lt;/div&gt;&lt;div&gt;&amp;nbsp;import org.apache.kafka.clients.consumer.KafkaConsumer;&lt;/div&gt;&lt;div&gt;&amp;nbsp;public class KafkaConsumerExample {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;public static void main(String[] args) {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;Properties props = new Properties();&lt;/div&gt;&lt;div&gt;&amp;nbsp;props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "myGroupId");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, 
                  "org.apache.kafka.common.serialization.StringDeserializer");
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, 
                  "org.apache.kafka.common.serialization.StringDeserializer");&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;KafkaConsumer&lt;string string=""&gt; consumer = new KafkaConsumer&amp;lt;&amp;gt;(props);&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&amp;nbsp;consumer.subscribe(Collections.singletonList("myTopic"));&amp;nbsp;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;br /&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&amp;nbsp;while (true) {&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&amp;nbsp;ConsumerRecords&lt;string string=""&gt; records = consumer.poll(100);&amp;nbsp;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&amp;nbsp;for (ConsumerRecord&lt;string string=""&gt; record :&amp;nbsp;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;records) {&amp;nbsp;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&amp;nbsp;System.out.println(record.value());&amp;nbsp;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&amp;nbsp;}&amp;nbsp;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&amp;nbsp;}&amp;nbsp;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&amp;nbsp;}&amp;nbsp;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;}
&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;br /&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;string string=""&gt;&lt;div&gt;This example assumes that Kafka is running on the local machine at port 9092,&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;continuously poll for new messages on the topic and print the value of each message it receives.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note that for production use, you should consider adding error&lt;/div&gt;&lt;div&gt;&amp;nbsp;handling and offset committing logic to the consumer code.&lt;/div&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>How to remove unnecessary characters  or imports automatically while saving in eclipse</title><link>http://www.johnjustin.com/2016/09/how-to-remove-unnecessary-characters-or.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Wed, 28 Sep 2016 01:22:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-8840281634515022760</guid><description>Its very easy to remove unnecessary imports and characters while saving a file in eclipse.This will help to avoid sonar issues in our code base.&lt;br /&gt;
&lt;br /&gt;
go to eclipse-&amp;gt; preferences-&amp;gt;Java -&amp;gt; Editor-&amp;gt;Save Actions and give the below checkbox options as looks in picture below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwfTFv7BL5l2V4Nd0BsEOZmCXEUaqS-dv_KsyGQcusyND4IUAPxqAmmJptCQXQ0lK4sC-1LeediK0-MnUNQCAn15BXoZ9Vu3hxp991k0JfNwMVivTbpWZA-T14xICZxQAfxsPI/s1600/eclipse.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwfTFv7BL5l2V4Nd0BsEOZmCXEUaqS-dv_KsyGQcusyND4IUAPxqAmmJptCQXQ0lK4sC-1LeediK0-MnUNQCAn15BXoZ9Vu3hxp991k0JfNwMVivTbpWZA-T14xICZxQAfxsPI/s1600/eclipse.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
also do the advanced level setting by clicking configure button&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFjTzTPOUAfKLft_Phe8yKTL6cJxqNGAUUgyYr3uu94MLBFZImiMtNeJC3bNytRl89Oz_2PorqcDS7024UPMfMxh2BaUFiObGFNETuACkY6TeIQ8CrLjqQfX-3z_NSTSfIzKO6/s1600/eclipse2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFjTzTPOUAfKLft_Phe8yKTL6cJxqNGAUUgyYr3uu94MLBFZImiMtNeJC3bNytRl89Oz_2PorqcDS7024UPMfMxh2BaUFiObGFNETuACkY6TeIQ8CrLjqQfX-3z_NSTSfIzKO6/s1600/eclipse2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7KxWx0MHQ8bjSPrcEPcpgNuPvasRI9y15PMypwfVZ90IL82sQbj8Y-cX7zDAtEZLPzIurKizADq1oR6Ml1XN7UZ7Alv4v7UBtPG0NZfM8dOn5Bv3KpFbiSc3W8QjOJm-Jlvay/s1600/eclipse3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7KxWx0MHQ8bjSPrcEPcpgNuPvasRI9y15PMypwfVZ90IL82sQbj8Y-cX7zDAtEZLPzIurKizADq1oR6Ml1XN7UZ7Alv4v7UBtPG0NZfM8dOn5Bv3KpFbiSc3W8QjOJm-Jlvay/s1600/eclipse3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPqArSEmbRElnWM1NOkU2RUuJRSTfxWlKPvcowbGWZGC4DibrkEd6-IDTNlIKEXnvTLkj7rR3ImY2wcuegSlvmFeHc0ISl8GYO7i1LYxeRrbyUFqEdbmRdMlA7zmyfgahr-eaF/s1600/eclipse4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPqArSEmbRElnWM1NOkU2RUuJRSTfxWlKPvcowbGWZGC4DibrkEd6-IDTNlIKEXnvTLkj7rR3ImY2wcuegSlvmFeHc0ISl8GYO7i1LYxeRrbyUFqEdbmRdMlA7zmyfgahr-eaF/s1600/eclipse4.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQAhtLM3mL74BabRuaxTK5YwrYpYTdmbzp0DfFuE2Vstev6ASMrSp9b0utEqj_nVhKIVNA6-oNzX7Rx2DEAsFB7qIeAv0-xt2xORVg9HeTra3iHXALoR6McRojUKDxeLKjPbFn/s1600/eclipse5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQAhtLM3mL74BabRuaxTK5YwrYpYTdmbzp0DfFuE2Vstev6ASMrSp9b0utEqj_nVhKIVNA6-oNzX7Rx2DEAsFB7qIeAv0-xt2xORVg9HeTra3iHXALoR6McRojUKDxeLKjPbFn/s1600/eclipse5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwfTFv7BL5l2V4Nd0BsEOZmCXEUaqS-dv_KsyGQcusyND4IUAPxqAmmJptCQXQ0lK4sC-1LeediK0-MnUNQCAn15BXoZ9Vu3hxp991k0JfNwMVivTbpWZA-T14xICZxQAfxsPI/s72-c/eclipse.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>What is DI in java ? Benefits and usage ( Dependency Injection in Java)</title><link>http://www.johnjustin.com/2016/08/what-is-di-in-java-benefits-and-usage.html</link><category>Dependency Injection</category><category>Design Pattern</category><author>noreply@blogger.com (Unknown)</author><pubDate>Mon, 22 Aug 2016 06:48:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-3014761769830386026</guid><description>&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitXndUXOjFbrqruKxS_44HTQVw9lU_duU2BrYP1pCr6UUpikHKiHdmWf3oGY1xbghZLvHbiD4oXEAe_7T6GRqFUmZ59y6kjWSY0f1Fb8cNjEHB-e3hiF8_Z8UdOJkAzNZyQVFy/s1600/DI.jpg" imageanchor="1"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitXndUXOjFbrqruKxS_44HTQVw9lU_duU2BrYP1pCr6UUpikHKiHdmWf3oGY1xbghZLvHbiD4oXEAe_7T6GRqFUmZ59y6kjWSY0f1Fb8cNjEHB-e3hiF8_Z8UdOJkAzNZyQVFy/s1600/DI.jpg" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;div&gt;
Lets assume we want to go to a trip to Paris.What we will do ? You have to plan everything&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1) Book your flights&lt;/div&gt;
&lt;div&gt;
2)Book your hotels to stay&lt;/div&gt;
&lt;div&gt;
3)Book your car rental for travelling in Paris&lt;/div&gt;
&lt;div&gt;
4)Book your amenity pass for visiting different places&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
assume that you have done all the booking advance and there is an email from flight authority that the flight scheduled is cancelled and it is rescheduled to next day. What you will do?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
you have to reschedule all the above bookings to next day and to communicate all the different agencies(hotel/car rental/amenity pass center). This is a pain for you by this unexpected channges happened right? &amp;nbsp;Now think about a situation that your booking is done by a travel agency including&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
all the booking and because of flight delay they rescheduled everything by themself without charging&lt;/div&gt;
&lt;div&gt;
any extra dollar from you and you will be able to travel on the same day without any delay !!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
How it will feel ? nice right. You dont bother about the rescheduling and re booking of all your tickets, travel agency will take care of everything. Would that be better than booking tickets by ourselves? If yes, then welcome to &lt;b&gt;dependency injection&lt;/b&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The whole example is easily clonable or&amp;nbsp;&lt;a href="https://github.com/johnjustinsblog/dependency-injection-example"&gt;&lt;span style="color: red;"&gt;download&lt;/span&gt;&amp;nbsp;&lt;/a&gt;from GitHub repository&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Dependency injection is a framework that takes care of creating objects 
for us without having to worry about providing the right &lt;i&gt;tickets&amp;nbsp;&lt;/i&gt;so to say.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Explanation&lt;/h3&gt;
&lt;div&gt;
Consider we have a class &lt;b&gt;Student &lt;/b&gt;and this class need to write a test need help on another class &lt;b&gt;WriteTest&lt;/b&gt;() which will help us to write a test for a student.&lt;/div&gt;
&lt;pre class="brush:java"&gt;   package com.johnjustin;

public class AttendExam {
 
 public void writeTest(final String ExamName, final String subject) {
     System.out.printf("writeTest : %s, %s%n", ExamName, subject);
   }

}

&lt;/pre&gt;
&lt;pre class="brush:java"&gt;package com.johnjustin;

public class Student {
  private AttendExam attendExam = new AttendExam();

  public void writeTest(){
    attendExam.writeTest("Engineering", "Mathematics");
  }
}


&lt;/pre&gt;
This is the simplest way to fulfill the requirement but we know that this has some limitations 
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1)There is a tight dependency on AttendExam class on Student class.&lt;br /&gt;
2) if there is a design change planned on writeTest() method with different parameters and there might be changes happened for different types of exams like online exam and offline written exam&lt;br /&gt;
we should go to all the places wherever this AttendExam written will be changed.&lt;br /&gt;
3)After sometimes there is new requirement came and we have to implement 2 types of tests.Online assessment and offline written test at this scenario it will be difficult for us to maintain same AttendExam class.&lt;br /&gt;
These limitations can be improved by changing the way we think and refactor our code in a modular way.We can avoid these limitations by implementing &lt;b&gt;dependency injection&lt;/b&gt; by modular way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1)Create Interface&lt;br /&gt;
2)Implement Interface&lt;br /&gt;
3)integrate DI using any(Spring/Guice) framework&lt;br /&gt;
&lt;br /&gt;
these three steps will help to decouple the tight dependencies between classes and it will be easy to migrate newer version of changes and updation of existing features without changing the current codes.&lt;br /&gt;
&lt;h4&gt;
Create Interface&lt;/h4&gt;
We will create an interface AssessmentService  where we define a common method writeTest with parameters.So there must be different
types of test either online test or written test both classes will inherit this AssessmentService  and implement writeTest for their own exam implementation.&lt;br /&gt;
&lt;pre class="brush:java"&gt;package com.johnjustin;

public interface AssessmentService {
 
 void writeTest(String subject, String testName);

}
&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;b&gt;Implement Interfaces&lt;/b&gt;&lt;/h3&gt;
We have listed some limitations above and there is requirement to implement 2 types of tests online assessment and offline written tests. We have created 2 different classes &lt;b&gt;OnlineExamService &lt;/b&gt;and &lt;b&gt;WrittenExamService &lt;/b&gt;for these tests and it will inherit the feature of AssessmentService interface's writeTest method.&lt;br /&gt;
&lt;pre class="brush:java"&gt;    package com.johnjustin;

/**
 * @author John Justin
 *
 */
public class WrittenExamService implements AssessmentService{
 
 public void writeTest(final String ExamName, final String subject) {
     System.out.printf("Written Exam for : %s, %s%n", ExamName, subject);
   }


}
&lt;/pre&gt;
&lt;pre class="brush:java"&gt;    package com.johnjustin;

/**
 * @author John Justin
 *
 */
public class OnlineExamService implements AssessmentService{
 
 public void writeTest(final String ExamName, final String subject) {
     System.out.printf("Online Exam for : %s, %s%n", ExamName, subject);
   }

}
&lt;/pre&gt;
Use interfaces to reduce loosely couple the classes. We have to use this AssessmentService in our Student class and implement required type of assessment(Online/Written) according to the need.This is a key element in the design. It improves modularity, extendibility.

&lt;br /&gt;
&lt;pre class="brush:java"&gt;  
     package com.johnjustin;
import com.johnjustin.AssessmentService;
import com.google.inject.Inject;

/**
 * @author John Justin
 *
 */
public class Student {

 private final AssessmentService assessmentService;
 
 @Inject
 private Student(AssessmentService assessmentService){
  
  this.assessmentService = assessmentService;
 } 
 
 public void attendExam() {
   assessmentService.writeTest("Engineering", "Mathematics");
    }
  
 
}

 &lt;/pre&gt;
The Student class is not dependent on any implementation, but on a service defined by an interface. This means that we can use the Student class without having to worry about the underlying implementation of the assessment service. Furthermore, different Student instances can be instantiated using different assessment services.&lt;br /&gt;
&lt;h3&gt;
Integrate DI using any(Spring/Guice) framework
&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
dependency injection can help us initializing objects and provide these objects all the necessary resources . For example, the&amp;nbsp;Student&amp;nbsp;class requires an instance of&amp;nbsp;AssessmentService. The dependency injection framework( Guice here) will provide that for us. So to create an instance of&amp;nbsp;Student&amp;nbsp;class.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The dependency injection framework(Guice) will create an instance of the&amp;nbsp;Student&amp;nbsp;class and provide an instance of the&amp;nbsp;AssessmentServiceto the&amp;nbsp;Student&amp;nbsp;object.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
How to integrate google Guice dependency frame work in our programe?&lt;/div&gt;
&lt;div&gt;
how does the dependency injection framework knows how to initialise the&amp;nbsp;AssessmentService?&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Usage of Dependency Injection requires that the software we write to declare the dependencies, and lets the framework or the container work out the complexities of service instantiation, initialization, sequencing and supplies the service references to the clients as required. To decouple Java components from other Java components the dependency
               to a certain other class should get injected into them rather that the
               class itself creates / finds this object. &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The general concept between dependency injection is called
               &lt;b&gt;Inversion of Control&lt;/b&gt;. A class should not configure itself but should
               be configured from outside.
            &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;We need to tell the dependency injection framework how to create an instance of&amp;nbsp;AssessmentService. With Guice we do that by creating a module (a class that extends &lt;code&gt;AbstractModule&lt;/code&gt; class) as illustrated below.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
We should tell the Guice dependency framework to how to create an instance of AssessmentService class.We should add an annotation in Student class in order to allow the dependency injection framework to inject the necessary parameters.
&lt;br /&gt;
&lt;pre class="brush:java"&gt; 
     package com.johnjustin;

import com.google.inject.AbstractModule;

/**
 * @author John Justin
 *
 */
public class ProjectModule extends AbstractModule {
 
 @Override
   protected void configure() {
     bind(AssessmentService.class).to(OnlineExamService.class);
   }

}
&lt;/pre&gt;
&lt;pre class="brush:java"&gt;        package com.johnjustin;
import com.johnjustin.AssessmentService;
import com.google.inject.Inject;

/**
 * @author John Justin
 *
 */
public class Student {

 private final AssessmentService assessmentService;
 
 &lt;i&gt;&lt;b&gt;@Inject&lt;/b&gt;&lt;/i&gt;
 private Student(AssessmentService assessmentService){
  
  this.assessmentService = assessmentService;
 } 
 
 public void attendExam() {
   assessmentService.writeTest("Engineering", "Mathematics");
    }
  
 
}
&lt;/pre&gt;
Now we can create the main class and create its injection in it.

&lt;br /&gt;
&lt;pre class="brush:java"&gt;package com.johnjustin;

import com.google.inject.Guice;
import com.google.inject.Injector;

/**
 * @author  John Justin
 *
 */
public class Main {
 
 
  public static void main(final String[] args) {
      final Injector injector = Guice.createInjector(new ProjectModule());
      final Student student = injector.getInstance(Student.class);
      student.attendExam();
    }

}
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
Advantages of DI&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Dependency injection is a pattern used to create instances of classes 
that other classes rely on without knowing at compile time which 
implementation will be used to provide that functionality.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Easily changing the the exam type from online exam service to written exam service.We only need to change the &lt;code&gt;ProjectModule&lt;/code&gt; class to map the AssessmentService class to the&amp;nbsp;&lt;span style="font-family: monospace;"&gt;WrittenExamService&amp;nbsp;&lt;/span&gt;class as highlighted below.This one change will affect all classes initialised with the dependency injection framework without having to change any of these classes.&lt;/div&gt;
&lt;pre class="brush:java"&gt;package com.johnjustin;

import com.google.inject.AbstractModule;

/**
 * @author John Justin
 *
 */
public class ProjectModule extends AbstractModule {
 
 @Override
   protected void configure() {
     bind(AssessmentService.class).to(WrittenExamService.class);
   }

}

&lt;/pre&gt;
The whole example is easily clonable or &lt;a href="https://github.com/johnjustinsblog/dependency-injection-example"&gt;&lt;span style="color: red;"&gt;download&lt;/span&gt; &lt;/a&gt;from GitHub repository.Enjoy !!!!!&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
References:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://stackoverflow.com/questions/3334578/what-is-dependency-injection" target="_blank"&gt;Stack overflow discussion&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://en.wikipedia.org/wiki/Dependency_injection" target="_blank"&gt;Wikipedia&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://martinfowler.com/articles/injection.html" target="_blank"&gt;Martinfowler definition&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.javacreed.com/why-should-we-use-dependency-injection/" target="_blank"&gt;nice blog from Javacreed&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitXndUXOjFbrqruKxS_44HTQVw9lU_duU2BrYP1pCr6UUpikHKiHdmWf3oGY1xbghZLvHbiD4oXEAe_7T6GRqFUmZ59y6kjWSY0f1Fb8cNjEHB-e3hiF8_Z8UdOJkAzNZyQVFy/s72-c/DI.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>How Set in java collection maintaining uniqueness - how HashSet in java implement unique values </title><link>http://www.johnjustin.com/2016/07/how-set-in-java-collection-maintaining.html</link><category>HashSet with HashMap</category><author>noreply@blogger.com (Unknown)</author><pubDate>Thu, 21 Jul 2016 06:27:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-8666059071525263042</guid><description>&lt;b&gt;In your collection implementation how you will make sure the unique values without implementing set/hashSet interface? otherway how you implement set interface in your java collection data?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;For example&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;pre style="border: 0px; font-family: inherit; font-size: 18px; font-stretch: inherit; line-height: 22.5px; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: #351c75;"&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;public&lt;/span&gt; &lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="color: #bb0066;"&gt;&lt;b&gt;Test&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
    
   &lt;/span&gt;&lt;span style="color: #134f5c;"&gt; &lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;public&lt;/span&gt; &lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; color: #333399; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;void&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; color: #0066bb; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;main&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;String&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;[]&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; args&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
    &lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
       &lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
        HashSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;Object&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: red;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; HashSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;Object&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;();&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
        &lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;add&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: #0000dd;"&gt;&lt;b&gt;100&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;
&lt;span style="color: #2f2e2e;"&gt;        &lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;add&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="background-color: #fff0f0; border: 0px; color: #2f2e2e; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;"hello"&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;
&lt;span style="color: #2f2e2e;"&gt;        &lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;System&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;out&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;println&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="background-color: #fff0f0; border: 0px; color: #2f2e2e; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;"Result "&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;+&lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="color: #333333; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit;"&gt;);&lt;/span&gt;
&lt;span style="color: #2f2e2e;"&gt;    &lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;The result will be :&amp;nbsp;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;Result [100, hello ]&lt;/span&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;Now we will add some duplicate elements in the same collection list&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;pre style="border: 0px; font-family: inherit; font-size: 18px; font-stretch: inherit; line-height: 22.5px; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: #351c75;"&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;public&lt;/span&gt; &lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="color: #bb0066;"&gt;&lt;b&gt;Test&lt;/b&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
    
   &lt;/span&gt;&lt;span style="color: #134f5c;"&gt; &lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;public&lt;/span&gt; &lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; color: #333399; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;void&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; color: #0066bb; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;main&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;String&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;[]&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; args&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;)&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
    &lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;{&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
       &lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
        HashSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;Object&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;=&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; &lt;/span&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: bold; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: red;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt; HashSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;Object&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;gt;();&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
        &lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;add&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: #0000dd;"&gt;&lt;b&gt;100&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;
&lt;span style="color: #2f2e2e;"&gt;        &lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;add&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="background-color: #fff0f0; border: 0px; color: #2f2e2e; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;"hello"&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border: 0px; font-family: inherit; font-size: 18px; font-stretch: inherit; line-height: 22.5px; padding: 0px; vertical-align: baseline;"&gt;&lt;pre style="border: 0px; font-family: inherit; font-stretch: inherit; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: #2f2e2e;"&gt;        &lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;add&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="color: #0000dd;"&gt;&lt;b&gt;100&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border: 0px; font-family: inherit; font-stretch: inherit; padding: 0px; vertical-align: baseline;"&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;        &lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;add&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="background-color: #fff0f0; border: 0px; color: #2f2e2e; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;"hello"&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;span style="color: #2f2e2e;"&gt;        &lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;System&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;out&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;span style="border: 0px; color: #0000cc; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;println&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;(&lt;/span&gt;&lt;span style="background-color: #fff0f0; border: 0px; color: #2f2e2e; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;"Result "&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;+&lt;/span&gt;&lt;span style="color: #2f2e2e; font-family: inherit;"&gt;testSet&lt;/span&gt;&lt;span style="color: #333333; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit;"&gt;);&lt;/span&gt;
&lt;span style="color: #2f2e2e;"&gt;    &lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;span style="color: #2f2e2e;"&gt;
&lt;/span&gt;&lt;span style="border: 0px; color: #333333; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;}&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;The result will be :&amp;nbsp;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;Result [100, hello ]&lt;/span&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;Eventhough when we add duplicate element in this collection set with add method why the duplicated data not inserted? because add method returs false when we try to add duplicate elements. How the add method returns false?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;The HashSet implementation of the add() method in java is internally implemented by HashMap implementation.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;Whenever we tries to create an object of HashSet , it internally create an object of HashMap&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="background-color: #fff0f0; color: #2f2e2e; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; line-height: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;public class HashSet&lt;e&gt;&lt;/e&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;extends AbstractSet&lt;e&gt;&lt;/e&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;implements Set&lt;e&gt;, Cloneable, java.io.Serializable&lt;/e&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;{&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; private transient HashMap&lt;e bject=""&gt; map;&lt;/e&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; private static final Object PRESENT = new Object();&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public HashSet() {&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; map = new HashMap&amp;lt;&amp;gt;();&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public boolean add(E e) {&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return map.put(e, PRESENT)==null;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b style="color: #2f2e2e;"&gt;&amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;&lt;span style="background-color: #fff0f0;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The key is unique in hashmap , when we are calling add(Element E) this element E will be added as key in HashMap and the value for key will be added by the java developer api by using the variable PRESENT , it will create ( new Object() ) which is a dummy value referred by Object reference PRESENT&lt;br /&gt;
&lt;br /&gt;
when you are adding a line in HashSet like &amp;nbsp;hashset.add(100) &amp;nbsp; what java does internally is that it will put that element E here 100 as a key in the HashMap(created during HashSet object creation) and some dummy value that is Object's object is passed as a value to the key .&lt;br /&gt;
&lt;br /&gt;
The main point to notice in above code is that put (key,value) will return&lt;br /&gt;
&lt;br /&gt;
1. &amp;nbsp;null , if key is unique and added to the map&lt;br /&gt;
2. &amp;nbsp;Old Value of the key , if key is duplicate&lt;br /&gt;
&lt;br /&gt;
So , in HashSet add() method , &amp;nbsp;we check the return value of map.put(key,value) method with null value&lt;br /&gt;
i.e.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;public boolean add(E e) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return map.put(e, PRESENT)==null;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
So , if map.put(key,value) returns null ,then&lt;br /&gt;
map.put(e, PRESENT)==null &amp;nbsp; &amp;nbsp; &amp;nbsp;will return true and element is added to the HashSet.&lt;br /&gt;
&lt;br /&gt;
So , if map.put(key,value) returns old value of the key ,then&lt;br /&gt;
map.put(e, PRESENT)==null &amp;nbsp; &amp;nbsp; &amp;nbsp;will return false and element is &amp;nbsp;not added to the HashSet .&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Java Collection framework tips</title><link>http://www.johnjustin.com/2016/07/java-collection-framework-tips.html</link><category>collection framework</category><author>noreply@blogger.com (Unknown)</author><pubDate>Thu, 14 Jul 2016 05:37:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-9219770934443507503</guid><description>&lt;b&gt;&lt;span style="font-size: x-large;"&gt;What is a Collection?&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
• An object that groups multiple elements into a single
unit.&lt;br /&gt;
&amp;nbsp;• Sometimes called a container&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBCexB3AgG2P5LzopbG21bIJYdSPUekD3C12wU-AFgK5eiVgZDuyp3ohb43Fvvl6VYhuxBjR-NKc4UykKxKEJ5I4dNWloQdyjDZREE9qw_4zNqf5GkxklG6FBDQ4IHEa9-vME/s1600/interfaces.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBCexB3AgG2P5LzopbG21bIJYdSPUekD3C12wU-AFgK5eiVgZDuyp3ohb43Fvvl6VYhuxBjR-NKc4UykKxKEJ5I4dNWloQdyjDZREE9qw_4zNqf5GkxklG6FBDQ4IHEa9-vME/s1600/interfaces.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_3R0fDlYqqSaReL8jJyYg6gyu887SNBJcA68arTQikG4JMZnlwMjde_wS-aq6-YhgZk4nzLrjykWY5Fq5PSXGWFs43m0AZEuEqEusydHDTFIQunakEPCgSCfqDzT0T0mBpe2E/s1600/collection.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_3R0fDlYqqSaReL8jJyYg6gyu887SNBJcA68arTQikG4JMZnlwMjde_wS-aq6-YhgZk4nzLrjykWY5Fq5PSXGWFs43m0AZEuEqEusydHDTFIQunakEPCgSCfqDzT0T0mBpe2E/s1600/collection.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj4mryksBeN-rr5uW1Gqdj-b_h0gIAtwNQrhqL_h7__FA7apeJG3AZK2VRKSEEcGrx_rnp7w-G1LF9Aw9N-taKMSbJTsy50OBCoa2H4aNAYBZ2at3OfXqqFyWeNdHBaP3inZGI/s1600/interface2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj4mryksBeN-rr5uW1Gqdj-b_h0gIAtwNQrhqL_h7__FA7apeJG3AZK2VRKSEEcGrx_rnp7w-G1LF9Aw9N-taKMSbJTsy50OBCoa2H4aNAYBZ2at3OfXqqFyWeNdHBaP3inZGI/s1600/interface2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="font-size: x-small;"&gt;&amp;nbsp;img courtesy -&amp;nbsp;http://javahungry.blogspot.com/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
There are two ways to traverse collections:&lt;br /&gt;
1) using Iterators.&lt;br /&gt;
2) with the (enhanced) for-each construct&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
&lt;u&gt;Iterators&amp;nbsp;&lt;/u&gt;&lt;/h2&gt;
• An Iterator is an object that enables you to traverse through a collection
and to remove elements from the collection selectively, if desired.&lt;br /&gt;
&lt;br /&gt;
• You get an Iterator for a collection by calling its iterator method.&lt;br /&gt;
&lt;br /&gt;
• Suppose collection is an instance of a Collection. Then to print out
each element on a separate line:&lt;br /&gt;
&lt;span style="color: purple;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="color: purple;"&gt;&lt;b&gt;Iterator&lt;e&gt; it = collection.iterator();&amp;nbsp;&lt;/e&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;e&gt;&lt;span style="color: purple;"&gt;&lt;b&gt;while (it.hasNext())&lt;/b&gt;&lt;/span&gt;&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&lt;span style="color: purple;"&gt;&lt;b&gt;&amp;nbsp;System.out.println(it.next());&lt;/b&gt;&lt;/span&gt;&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&lt;br /&gt;&lt;/e&gt;
&lt;e&gt;&amp;nbsp;• Note that next() does two things:&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1. Returns the current element (initially the first element)&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2. Steps to the next element and makes it the current element.&amp;nbsp;&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&lt;br /&gt;&lt;/e&gt;
&lt;e&gt;&lt;br /&gt;&lt;/e&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; Levels of Abstraction&amp;nbsp;&lt;/e&gt;&lt;/h3&gt;
&lt;e&gt;• Recall that Java supports three levels of abstraction:
–&lt;/e&gt;&lt;br /&gt;
&lt;h4&gt;
&lt;e style="font-weight: normal;"&gt;&amp;nbsp;- Interface&amp;nbsp;&lt;/e&gt;&lt;/h4&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;• Java expression of an ADT&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;• Includes method declarations with arguments of specified types, but
with empty bodies&lt;/e&gt;&lt;br /&gt;
&lt;h4&gt;
&lt;e style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/e&gt;&lt;/h4&gt;
&lt;h4&gt;
&lt;e style="font-weight: normal;"&gt;&amp;nbsp;– Abstract Class&amp;nbsp;&lt;/e&gt;&lt;/h4&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;• Implements only a subset of an interface.&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;• Cannot be used to instantiate an object.&amp;nbsp;&lt;/e&gt;&lt;br /&gt;
&lt;h4&gt;
&lt;e style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/e&gt;&lt;/h4&gt;
&lt;h4&gt;
&lt;e style="font-weight: normal;"&gt;– (Concrete) Classes&amp;nbsp;&lt;/e&gt;&lt;/h4&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; • May extend one or more abstract classes&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; • Must fully implement any interface it implements&amp;nbsp;&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; • Can be used to instantiate objects.&amp;nbsp;&lt;/e&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;e&gt;&lt;br /&gt;&lt;/e&gt;&lt;e&gt;Iterating Over a Map&amp;nbsp;&lt;/e&gt;&lt;/h3&gt;
&lt;e&gt;• Because Map does not extend Iterable,
but Collection (hence Set) does
extend Iterable, you can (only) iterate
over a Map using one of its three views:&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;– Keys: Set&lt;k&gt; keySet()&amp;nbsp;&lt;/k&gt;&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&lt;k&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;– Values: Collection&lt;v&gt; values()&amp;nbsp;&lt;/v&gt;&lt;/k&gt;&lt;/e&gt;&lt;br /&gt;
&lt;e&gt;&lt;k&gt;&lt;v&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;– Pairs: Set&lt;map .entry="" k="" v=""&gt;&amp;gt; entrySet()&lt;/map&gt;&lt;/v&gt;&lt;/k&gt;&lt;/e&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b style="background-color: white; font-family: Arial, Tahoma, Verdana; font-size: 18px; line-height: 22px;"&gt;&lt;span style="border: 0px; color: #38761d; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;What is the root interface in collection hierarchy ?&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br style="background-color: white; color: #2f2e2e; font-family: Arial, Tahoma, Verdana; font-size: 18px; line-height: 22px;" /&gt;
&lt;span style="background-color: white; color: #2f2e2e; font-family: &amp;quot;arial&amp;quot; , &amp;quot;tahoma&amp;quot; , &amp;quot;verdana&amp;quot;; font-size: 18px; line-height: 22px;"&gt;Root interface in collection hierarchy is&amp;nbsp;&lt;/span&gt;&lt;b style="background-color: white; color: #2f2e2e; font-family: Arial, Tahoma, Verdana; font-size: 18px; line-height: 22px;"&gt;Collection interface .&amp;nbsp;&lt;/b&gt;&lt;span style="background-color: white; color: #2f2e2e; font-family: &amp;quot;arial&amp;quot; , &amp;quot;tahoma&amp;quot; , &amp;quot;verdana&amp;quot;; font-size: 18px; line-height: 22px;"&gt;Few interviewer may argue that&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;a href="https://www.blogger.com/null" name="more" style="background-color: white; border: 0px; color: #a41600; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-stretch: inherit; line-height: 22px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;/a&gt;&lt;span style="background-color: white; color: #2f2e2e; font-family: &amp;quot;arial&amp;quot; , &amp;quot;tahoma&amp;quot; , &amp;quot;verdana&amp;quot;; font-size: 18px; line-height: 22px;"&gt;Collection interface extends&amp;nbsp;&lt;/span&gt;&lt;b style="background-color: white; color: #2f2e2e; font-family: Arial, Tahoma, Verdana; font-size: 18px; line-height: 22px;"&gt;Iterable interface&lt;/b&gt;&lt;span style="background-color: white; color: #2f2e2e; font-family: &amp;quot;arial&amp;quot; , &amp;quot;tahoma&amp;quot; , &amp;quot;verdana&amp;quot;; font-size: 18px; line-height: 22px;"&gt;. So iterable should be the root interface. But you should reply iterable interface present in java.lang package not in java.util package .It is clearly mentioned in&amp;nbsp;&lt;/span&gt;&lt;a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html" rel="nofollow" style="background-color: white; border: 0px; color: #a41600; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-stretch: inherit; line-height: 22px; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;" target="_blank"&gt;Oracle Collection &amp;nbsp;docs&lt;/a&gt;&lt;span style="background-color: white; color: #2f2e2e; font-family: &amp;quot;arial&amp;quot; , &amp;quot;tahoma&amp;quot; , &amp;quot;verdana&amp;quot;; font-size: 18px; line-height: 22px;"&gt;&amp;nbsp;, that Collection interface is a member of the Java Collections framework. &amp;nbsp;For&amp;nbsp;&lt;/span&gt;&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html" rel="nofollow" style="background-color: white; border: 0px; color: #a41600; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-stretch: inherit; line-height: 22px; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;" target="_blank"&gt;Iterable interface Oracle doc&lt;/a&gt;&lt;span style="background-color: white; color: #2f2e2e; font-family: &amp;quot;arial&amp;quot; , &amp;quot;tahoma&amp;quot; , &amp;quot;verdana&amp;quot;; font-size: 18px; line-height: 22px;"&gt;&amp;nbsp;, iterable interface is not mentioned as a part of the Java Collections framework .So if the question includes &amp;nbsp;collection hierarchy , then you should answer the question as Collection interface (which is found in java.util package).&lt;/span&gt;&lt;br /&gt;
&lt;b style="background-color: white; color: #2f2e2e; font-family: Arial, Tahoma, Verdana; font-size: 18px; line-height: 22px;"&gt;&lt;span style="border: 0px; color: #38761d; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;b style="background-color: white; font-family: Arial, Tahoma, Verdana; font-size: 18px; line-height: 22px;"&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;nbsp;What is the difference between Collection and Collections ?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br style="background-color: white; color: #2f2e2e; font-family: Arial, Tahoma, Verdana; font-size: 18px; line-height: 22px;" /&gt;
&lt;span style="background-color: white; color: #2f2e2e; font-family: &amp;quot;arial&amp;quot; , &amp;quot;tahoma&amp;quot; , &amp;quot;verdana&amp;quot;; font-size: 18px; line-height: 22px;"&gt;Collection is &amp;nbsp;an interface while Collections is a java class , both are present in java.util package and &amp;nbsp;part of java collections framework.&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: white; border: 0px; color: #2f2e2e; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-stretch: inherit; line-height: 22px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="background-color: white; border: 0px; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-stretch: inherit; line-height: 22px; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;
&lt;b&gt;&lt;span style="border: 0px; font-family: inherit; font-size: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline;"&gt;&amp;nbsp;Which collection classes are synchronized or thread-safe ?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #2f2e2e;"&gt;Stack, Properties , Vector and Hashtable can be used in multi threaded environment because they are synchronized classes (or thread-safe).&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBCexB3AgG2P5LzopbG21bIJYdSPUekD3C12wU-AFgK5eiVgZDuyp3ohb43Fvvl6VYhuxBjR-NKc4UykKxKEJ5I4dNWloQdyjDZREE9qw_4zNqf5GkxklG6FBDQ4IHEa9-vME/s72-c/interfaces.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Apache Camel some tips and tricks</title><link>http://www.johnjustin.com/2016/07/apache-camel-some-tips-and-tricks.html</link><category>apache camel</category><category>camel</category><author>noreply@blogger.com (Unknown)</author><pubDate>Tue, 12 Jul 2016 06:10:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-7998275503978508427</guid><description>&lt;a href="http://camel.apache.org/book-in-one-page.html"&gt;&lt;span style="color: red;"&gt;Camel Book in one page&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style="color: red;"&gt;&lt;b&gt;&amp;nbsp;
&lt;a href="http://camel.apache.org/books.html"&gt;Camel books&lt;/a&gt;

&lt;a href="https://www.manning.com/books/camel-in-action#downloads"&gt;Camel in action&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw6YVAe8TBpTAzfurhdDalcmnrtXsnBp8i-2Xo0vSlmkY1D3VyBodcp98Im6H9qb80qaEUBAGiU39xTE68RkT9gLoJojVRJxJZa00ZZu4znV9rMumc4V-JZpazOgjKmaLY1vh1/s1600/architecture.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw6YVAe8TBpTAzfurhdDalcmnrtXsnBp8i-2Xo0vSlmkY1D3VyBodcp98Im6H9qb80qaEUBAGiU39xTE68RkT9gLoJojVRJxJZa00ZZu4znV9rMumc4V-JZpazOgjKmaLY1vh1/s320/architecture.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;span style="background-color: white; color: #333333; font-family: &amp;quot;tahoma&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;verdana&amp;quot; , sans-serif; font-size: 15px; line-height: 22.5px; text-align: left;"&gt;&amp;nbsp;It enables easy integration of different applications which use several protocols and technologies.&lt;/span&gt;&lt;span style="background-color: white; color: #333333; font-family: &amp;quot;tahoma&amp;quot; , &amp;quot;arial&amp;quot; , &amp;quot;verdana&amp;quot; , sans-serif; font-size: 15px; line-height: 22.5px;"&gt;Synchronous remote procedure calls or asynchronous messaging is used to communicate via several technologies such as RMI, SOAP Web Services, REST or JMS. A lot of software silos exists. Nevertheless, all applications and products of these decades have to communicate with each other to work together perfectly.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="background-color: white; border: 0px none; color: #333333; font-family: Tahoma, Arial, Verdana, sans-serif; font-size: 15px; line-height: 22.5px; list-style: none; outline: none; padding: 0px 0px 1em;"&gt;
&lt;strong style="border: 0px none; list-style: none; margin: 0px; outline: none; padding: 0px;"&gt;What is Apache Camel?&lt;/strong&gt;&lt;/div&gt;
&lt;div style="background-color: white; border: 0px none; color: #333333; font-family: Tahoma, Arial, Verdana, sans-serif; font-size: 15px; line-height: 22.5px; list-style: none; outline: none; padding: 0px 0px 1em;"&gt;
Apache Camel is a lightweight integration framework which implements all EIPs. Thus, you can easily integrate different applications using the required patterns. You can use Java, Spring XML, Scala or Groovy. Almost every technology you can imagine is available, for example HTTP, FTP, JMS, EJB, JPA, RMI, JMS, JMX, LDAP, Netty, and many, many more (of course most ESBs also offer support for them). Besides, own custom components can be created very easily.&lt;/div&gt;
&lt;div style="background-color: white; border: 0px none; color: #333333; font-family: Tahoma, Arial, Verdana, sans-serif; font-size: 15px; line-height: 22.5px; list-style: none; outline: none; padding: 0px 0px 1em;"&gt;
You can deploy Apache Camel as standalone application, in a web container (e.g. Tomcat or Jetty), in a JEE application Server (e.g. JBoss AS or WebSphere AS), in an OSGi environment or in combination with a Spring container.&lt;/div&gt;
&lt;div style="background-color: white; border: 0px none; color: #333333; font-family: Tahoma, Arial, Verdana, sans-serif; font-size: 15px; line-height: 22.5px; list-style: none; outline: none; padding: 0px 0px 1em;"&gt;
If you need more information about Apache Camel, please go to its web site as starting point:&amp;nbsp;&lt;em style="border: 0px none; list-style: none; margin: 0px; outline: none; padding: 0px;"&gt;&lt;a href="http://camel.apache.org/" style="border: 0px none; color: #326693; list-style: none; margin: 0px; outline: none; padding: 0px; text-decoration: none; transition: all 0.2s ease-in-out;"&gt;http://camel.apache.org&lt;/a&gt;&lt;/em&gt;. This article is no technical introduction J&lt;/div&gt;
&lt;div style="background-color: white; border: 0px none; color: #333333; font-family: Tahoma, Arial, Verdana, sans-serif; font-size: 15px; line-height: 22.5px; list-style: none; outline: none; padding: 0px 0px 1em;"&gt;
&lt;strong style="border: 0px none; list-style: none; margin: 0px; outline: none; padding: 0px;"&gt;When to use Apache Camel?&lt;/strong&gt;&lt;/div&gt;
&lt;div style="background-color: white; border: 0px none; color: #333333; font-family: Tahoma, Arial, Verdana, sans-serif; font-size: 15px; line-height: 22.5px; list-style: none; outline: none; padding: 0px 0px 1em;"&gt;
Apache Camel is awesome if you want to integrate several applications with different protocols and technologies. Why? There is one feature (besides supporting so many technologies and besides supporting different programming languages) &amp;nbsp;&lt;strong style="border: 0px none; list-style: none; margin: 0px; outline: none; padding: 0px;"&gt;Every integration uses the same concepts!&amp;nbsp;&lt;/strong&gt;No matter which protocol you use. No matter which technology you use. No matter which domain specific language (DSL) you use – it can be Java, Scala, Groovy or Spring XML. You do it the same way. Always! There is a producer, there is a consumer, there are endpoints, there are EIPs, there are custom processors / beans (e.g. for custom transformation) and there are parameters (e.g. for credentials).&lt;/div&gt;
&lt;div style="background-color: white; border: 0px none; font-family: tahoma, arial, verdana, sans-serif; font-size: 15px; line-height: 22.5px; list-style: none; outline: none; padding: 0px 0px 1em;"&gt;
&lt;a href="https://vrtoonjava.wordpress.com/2013/10/20/apache-camel-developing-application-from-the-scratch-part-1-2/" target="_blank"&gt;&lt;span style="color: red;"&gt;sample working example here&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp;What is the difference between enrich() and pollEnrich()?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;


&lt;span style="color: red;"&gt;&lt;a href="http://camel.apache.org/content-enricher.html"&gt;Content enricher here&lt;/a&gt;&amp;nbsp; ( &lt;a href="http://www.enterpriseintegrationpatterns.com/patterns/messaging/DataEnricher.html"&gt;Link&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Content enrichment using the enrich DSL element

Camel comes with two flavors of content enricher in the DSL

enrich
pollEnrich
enrich uses a Producer to obtain the additional data. It is usually used for Request Reply messaging, for instance to invoke an external web service. pollEnrich on the other hand uses a Polling Consumer to obtain the additional data. It is usually used for Event Message messaging, for instance to read a file or download a FTP file.

&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="background-color: white; border: 0px; color: #242729; font-family: Arial, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, sans-serif; font-size: 15px; line-height: 19.5px; margin: 0px 0px 1em 30px; padding: 0px;"&gt;
&lt;li style="border: 0px; margin: 0px 0px 0.5em; padding: 0px; word-wrap: break-word;"&gt;&lt;div style="border: 0px; clear: both; padding: 0px;"&gt;
&lt;code style="background-color: #eff0f1; border: 0px; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; font-size: 13px; margin: 0px; padding: 1px 5px; white-space: pre-wrap;"&gt;enrich&lt;/code&gt;&amp;nbsp;assumes you want to use an incoming Exchange as a parameter to an another service request. for example, your incoming Exchange could be a userID, but you really need the entire User object, so you could&amp;nbsp;&lt;code style="background-color: #eff0f1; border: 0px; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; font-size: 13px; margin: 0px; padding: 1px 5px; white-space: pre-wrap;"&gt;enrich&lt;/code&gt;&amp;nbsp;it by passing the userID to a REST service that returns the User object which becomes the Exchange, etc.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="border: 0px; margin: 0px; padding: 0px; word-wrap: break-word;"&gt;&lt;div style="border: 0px; clear: both; padding: 0px;"&gt;
&lt;code style="background-color: #eff0f1; border: 0px; font-family: Consolas, Menlo, Monaco, &amp;quot;Lucida Console&amp;quot;, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;DejaVu Sans Mono&amp;quot;, &amp;quot;Bitstream Vera Sans Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace, sans-serif; font-size: 13px; margin: 0px; padding: 1px 5px; white-space: pre-wrap;"&gt;pollEnrich&lt;/code&gt;&amp;nbsp;assumes the incoming Exchange is a simple trigger that tell a PollingConsumer to look for data and create an Exchange (ignoring the contents of the incoming Exchange). For example, you could have a timer or other business process event that requires picking up a file for processing, etc. that said, the incoming Exchange data is NOT used to dynamically configure the PollingConsumer...only the URI is used for this.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style="color: #292929; font-family: &amp;quot;Open Sans&amp;quot;, arial, sans-serif; font-size: 14px; line-height: 24px; padding: 0px 0px 12px; text-align: justify;"&gt;
&lt;strong style="margin: 0px; padding: 0px;"&gt;What are different message exchange patterns in Camel, which one of these is synchronous?&lt;/strong&gt;&lt;br /&gt;
&lt;strong style="margin: 0px; padding: 0px;"&gt;A:&lt;/strong&gt;&amp;nbsp;There are two types of message exchange patterns in Camel:&lt;/div&gt;
&lt;ul style="color: #292929; font-family: &amp;quot;Open Sans&amp;quot;, arial, sans-serif; font-size: 14px; line-height: 24px; margin: 10px 0px; padding: 0px 0px 4px 30px; text-align: justify;"&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;In Only: In this exchange pattern, consumer creates a exchange which only contains an In message.&lt;/li&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;In Out: In this exchange pattern, consumer creates a exchange which also contains reply message for the caller.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="color: #292929; font-family: &amp;quot;Open Sans&amp;quot;, arial, sans-serif; font-size: 14px; line-height: 24px; padding: 0px 0px 12px; text-align: justify;"&gt;
Out of above two, InOut pattern is synchronous because caller expects for an acknowledgement or reply for each exchange sent.&lt;br /&gt;
&lt;br style="margin: 0px; padding: 0px;" /&gt;
&lt;strong style="margin: 0px; padding: 0px;"&gt;What is camel exchange? Explain its structure?&lt;/strong&gt;&lt;br /&gt;
&lt;strong style="margin: 0px; padding: 0px;"&gt;A:&lt;/strong&gt;&amp;nbsp;A Camel Exchange can be called as an holder for holding message during routing. A exchange supports various message exchange patterns, like InOnly and InOut.&lt;br /&gt;
Following are the contents of camel exchange:&lt;/div&gt;
&lt;ul style="color: #292929; font-family: &amp;quot;Open Sans&amp;quot;, arial, sans-serif; font-size: 14px; line-height: 24px; margin: 10px 0px; padding: 0px 0px 4px 30px; text-align: justify;"&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;&lt;strong style="margin: 0px; padding: 0px;"&gt;ExchangeId:&amp;nbsp;&lt;/strong&gt;A unique identifier for each exchange&lt;/li&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;&lt;strong style="margin: 0px; padding: 0px;"&gt;Message Exchange Pattern:&lt;/strong&gt;&amp;nbsp;This field denotes whether you are using InOnly or InOut exchange pattern.&lt;/li&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;&lt;strong style="margin: 0px; padding: 0px;"&gt;Exception:&lt;/strong&gt;&amp;nbsp;If any exception occurs during routing, it will be available in this field.&lt;/li&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;&lt;strong style="margin: 0px; padding: 0px;"&gt;Properties:&lt;/strong&gt;&amp;nbsp;These are the properties that are available for entire duration of exchange.&lt;/li&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;&lt;strong style="margin: 0px; padding: 0px;"&gt;In Message:&lt;/strong&gt;&amp;nbsp;This is mandatory field which contains the input message.&lt;/li&gt;
&lt;li style="list-style: disc; margin: 4px 0px; padding: 0px 0px 0px 5px !important;"&gt;&lt;strong style="margin: 0px; padding: 0px;"&gt;Out Message:&lt;/strong&gt;&amp;nbsp;This is optional message which exists only if MEP is InOut.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="color: #292929; font-family: &amp;quot;open sans&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif;"&gt;&lt;span style="color: red; font-size: 14px; line-height: 24px;"&gt;&lt;a href="http://stackoverflow.com/questions/8845186/what-exactly-is-apache-camel" target="_blank"&gt;&lt;b&gt;nice discussion from stack overflow&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw6YVAe8TBpTAzfurhdDalcmnrtXsnBp8i-2Xo0vSlmkY1D3VyBodcp98Im6H9qb80qaEUBAGiU39xTE68RkT9gLoJojVRJxJZa00ZZu4znV9rMumc4V-JZpazOgjKmaLY1vh1/s72-c/architecture.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>perl script to get interwoven teamsite dcr path</title><link>http://www.johnjustin.com/2012/11/perl-script-to-get-interwoven-teamsite.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sun, 25 Nov 2012 13:35:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-5597463193558318622</guid><description>&lt;span style="font-size: large;"&gt;&lt;b&gt;function to get dcrpath in perl for interwoven teamsite&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
sub getDcrPath{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug("getDCRPATH CALLED");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $currentDcrName=shift;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug("dcr path: $currentDcrName");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $currentDcrName=~ s/(.*WORKAREA\/)(.*?\/)/$1$2/;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $workareaName=$2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $workareaName=~s/\///g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #my $dcrPath="$iwmount/default/main/$branchName/$subBranchName/WORKAREA/$workareaName/templatedata/content/Fragments/data/";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug("WORKAREA ".$workareaName."==".$currentDcrName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $workareaName;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>how to read a datacapture template in interwoven teamsite using perl</title><link>http://www.johnjustin.com/2012/11/how-to-read-datacapture-template-in.html</link><category>interwoven datacapture</category><category>read datacapture</category><category>teamsite</category><author>noreply@blogger.com (Unknown)</author><pubDate>Sun, 25 Nov 2012 13:26:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-6049379344809600278</guid><description>&lt;b&gt;&lt;span style="font-size: large;"&gt;hi friends here iam sharing a subroutine for reading a datacapture template in interwoven teamsite using perl script. hope this subroutine will help your requirement.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sub readDatacapture&lt;br /&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug("ENTERING READ DATACAPTURE FUNCTION");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $dctFile = shift;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; open INPUT, "&amp;lt;$dctFile";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my @output_string = &lt;input /&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; close INPUT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #debug("\n\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach my $line(@output_string) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ( $line =~ /.*command.*/ ) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #grab just the command itself&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; my @fields2 = split /=/, $line;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; my $inlineCmd = @fields2[$#fields2] ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $inlineCmd =~ s/\/\&amp;gt;//; #strip off trailing tag&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $inlineCmd =~ s/\"//g; #strip off quotes&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #print "XXX" . $inlineCmd . "XXX\n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; my @Results = `$inlineCmd 2&amp;gt;&amp;amp;1`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; my $Result = join ('', @Results);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; chomp ($Result);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #remove the double substitution tags, since it maybe a normal inline that has substitution on it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $Result =~ s/\&lt;substitution&gt;//;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $Result =~ s/\&amp;lt;\/substitution\&amp;gt;//;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #remove xml declaration that would normally come across an inline &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $Result =~ s/\&amp;lt;\?xml.*\&amp;gt;?//;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #Now substitute result for inline command&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print $Result;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #debug("The result of $inlineCmd ");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #debug("$Result");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #print " IN ELSE ========== &amp;gt; $line\n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print $line;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #debug("$line");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #debug("\n\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug("EXITING READ DATACAPTURE FUNCTIONNNNNNN");&lt;br /&gt;}&lt;/substitution&gt;&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>interwoven teamsite cms</title><link>http://www.johnjustin.com/2012/05/interwoven-teamsite-cms.html</link><author>noreply@blogger.com (Unknown)</author><pubDate>Sun, 20 May 2012 12:59:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-717560548612529304</guid><description>in interwowen teamsite we can able to integrate java applications with content.Teamsite content management system is more efficient than other different cms available now.Today i will explain how we can create html pages with content and how we are storing that content in cms and how we integrating that pages with java applications.&lt;br /&gt;
&lt;br /&gt;
in teamsite , for creating a html we need that html data(data contains any information together with page contents and html tags).first we need to capture this data/content in an xml format.For capturing data in teamsite we are using some templates ,called datacapture template.&lt;br /&gt;
With the help of datacapture template we are storing our content in xml format.&lt;br /&gt;
&lt;br /&gt;
The points to be remebered before starting page generation in teamsite.&lt;br /&gt;
&lt;br /&gt;
1)create entry in templating.cfg for the new datacap&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>JESUS YOUTH JUBILEE INTERNATIONAL CONFERENCE</title><link>http://www.johnjustin.com/2011/01/jesus-youth-jubilee-international.html</link><category>jesusyouth jubilee photos</category><author>noreply@blogger.com (Unknown)</author><pubDate>Sat, 8 Jan 2011 21:32:00 +0530</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-31940329.post-4432111556157298926</guid><description>hai friends here iam sharing some pictures which i take during the  Jesus Youth International Jubilee conference 2010.&lt;br /&gt;&lt;br /&gt;JESUS YOUTH JUBILEE CONFERENCE 2010 PHOTOS &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgamQYx-nR0-qOtLIg9Kp7B-a7SNiVTEk2C5MnFBsQFY7XgBWhshMqc2ITjJpq9Pi9S7YogIegwhqEy0qLC8tjyR9-WYbu61H-12pzgPKDcJMXQEGT4kefho14xslgHzn_SWSoa/s1600/Photo0551.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgamQYx-nR0-qOtLIg9Kp7B-a7SNiVTEk2C5MnFBsQFY7XgBWhshMqc2ITjJpq9Pi9S7YogIegwhqEy0qLC8tjyR9-WYbu61H-12pzgPKDcJMXQEGT4kefho14xslgHzn_SWSoa/s400/Photo0551.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5559853082401919266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EkwrMSek4HtN8PGdmQZjoavbD7JXM2bnn1cvowmG61S2PklX0CTv4kXFVbynkS4zak4nGDkP9jCZugzRbprGMJiobpw9KfFxYuYxheliWAPrMDp-MC8UZlZz7nDBtR6iX2jb/s1600/27122010.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EkwrMSek4HtN8PGdmQZjoavbD7JXM2bnn1cvowmG61S2PklX0CTv4kXFVbynkS4zak4nGDkP9jCZugzRbprGMJiobpw9KfFxYuYxheliWAPrMDp-MC8UZlZz7nDBtR6iX2jb/s400/27122010.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5559851969153036562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGrf7PFpvjLb8CAV3KY0bcbZU0QbGHSbDcbaDskh6xMyMh892WuP720013i8c7JJyzxYrZqv91GSi1CjAGxgBerV9b4ygtSEU6EIVqDtmoKfvmVye6d1OCzpOTtILsFu4FqHiY/s1600/Photo0546.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGrf7PFpvjLb8CAV3KY0bcbZU0QbGHSbDcbaDskh6xMyMh892WuP720013i8c7JJyzxYrZqv91GSi1CjAGxgBerV9b4ygtSEU6EIVqDtmoKfvmVye6d1OCzpOTtILsFu4FqHiY/s400/Photo0546.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5559851532650829010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzZyN0VJpk6Wy8h4jCMfTqVSXVcmpDQ9nhFhOlYsUvQ6Q-V_OsIohCTr6OmgabYFVy1mhNwEYKUw49fAq3jN6BDxVPvLIATWVYPlPuSbwD4a7AztI7fWnaxid3chkgMQsDkqwx/s1600/Photo0505.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzZyN0VJpk6Wy8h4jCMfTqVSXVcmpDQ9nhFhOlYsUvQ6Q-V_OsIohCTr6OmgabYFVy1mhNwEYKUw49fAq3jN6BDxVPvLIATWVYPlPuSbwD4a7AztI7fWnaxid3chkgMQsDkqwx/s400/Photo0505.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5559850978697363218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmoMvSpNeeJM1DhZry9Uur5Dlef0PsLBIMjpR_9RcA6dkcCZyFpxyE5iA1PkLeAqVvqI_0M4J-PVSD1WUdEbXNWJBmTSh7-YAbd43nVJXcORc2zdG_xsXnrnuMFiAs6BUfLtV/s1600/Photo0516.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmoMvSpNeeJM1DhZry9Uur5Dlef0PsLBIMjpR_9RcA6dkcCZyFpxyE5iA1PkLeAqVvqI_0M4J-PVSD1WUdEbXNWJBmTSh7-YAbd43nVJXcORc2zdG_xsXnrnuMFiAs6BUfLtV/s400/Photo0516.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5559850572515568290" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Nf_0zARu5AB5YwrSA8qKcYBhuuEJO4VRi8jHGAxmvt18a_fiZv4YovGuq85gLz-2M7nIAm5XM62r7bBLXmYqKrEuFJnG9adLrgDf-5tpGBWczcNWeEJJWAQRTWvTOhf7WdGU/s1600/Photo0485.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Nf_0zARu5AB5YwrSA8qKcYBhuuEJO4VRi8jHGAxmvt18a_fiZv4YovGuq85gLz-2M7nIAm5XM62r7bBLXmYqKrEuFJnG9adLrgDf-5tpGBWczcNWeEJJWAQRTWvTOhf7WdGU/s400/Photo0485.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5559850383193006434" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7dabuoaKTq5NeS7C9R3nR_pQWmqFrhLzm1TeZW5jg3Zq0ghrdRPOSx7TEUkFeCIP8DOO__m0eVuCB8PGpRy1RSjI4OWdsB2gd77eGNNA6levTPZOtsErtULXA8x2IT1qDbZ9p/s1600/Photo0448.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7dabuoaKTq5NeS7C9R3nR_pQWmqFrhLzm1TeZW5jg3Zq0ghrdRPOSx7TEUkFeCIP8DOO__m0eVuCB8PGpRy1RSjI4OWdsB2gd77eGNNA6levTPZOtsErtULXA8x2IT1qDbZ9p/s400/Photo0448.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5559850003090649682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1uuBEhuNLXo4UNPbjGPre9kaJSvN9f1YxrknKXIsQ0y8BvdAgrsQeLVkIzLORe-9QaLOr3kRzI-OsOB3qQ1_v3-izYjlO2niesC-mJT2OmsmRRKdIXnPIV4Z05dcHUD7gcdF3/s1600/Photo0461.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1uuBEhuNLXo4UNPbjGPre9kaJSvN9f1YxrknKXIsQ0y8BvdAgrsQeLVkIzLORe-9QaLOr3kRzI-OsOB3qQ1_v3-izYjlO2niesC-mJT2OmsmRRKdIXnPIV4Z05dcHUD7gcdF3/s400/Photo0461.jpg" alt="" id="BLOGGER_PHOTO_ID_5559849671213405842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;jesus youth jubilee conference photos&lt;div class="blogger-post-footer"&gt;&lt;p&gt;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;&lt;img src="http://www.feedburner.com/fb/images/pub/feed-icon32x32.png" alt="" style="vertical-align:middle;border:0"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://feeds.feedburner.com/feedburner/SYjK" rel="alternate" type="application/rss+xml"&gt;Subscribe in a reader&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgamQYx-nR0-qOtLIg9Kp7B-a7SNiVTEk2C5MnFBsQFY7XgBWhshMqc2ITjJpq9Pi9S7YogIegwhqEy0qLC8tjyR9-WYbu61H-12pzgPKDcJMXQEGT4kefho14xslgHzn_SWSoa/s72-c/Photo0551.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item></channel></rss>