AI & Tech

Is Prompt Engineering the Future of Technology

What is Artificial Intelligence?

Artificial Intelligence (AI) refers to the development of computer systems that can perform tasks that normally require human intelligence, such as learning, problem-solving, decision making, and language understanding. AI is a rapidly advancing field that has seen significant progress in recent years, driven by advancements in deep learning, natural language processing, and robotics. AI is already being used in a variety of applications, from self-driving cars to virtual assistants and medical diagnosis. With the ongoing development of AI technologies, we can expect to see further advancements in areas such as healthcare, education, and finance, among others. However, as with any powerful technology, there are also concerns about ethical and societal implications that need to be addressed.

What is Prompt Engineering ?

Prompt engineering is a process that involves designing and constructing effective prompts for machine learning models or natural language processing systems. These prompts serve as a starting point for models to generate a response or complete a task. As the use of AI-powered solutions continues to rise, the demand for prompt engineering services has also increased. Prompt engineering is crucial for developing language models that can accurately and efficiently perform specific tasks, such as text summarization, language translation, and sentiment analysis. The growth of the AI industry has created significant opportunities for prompt engineering professionals and is likely to continue in the future.

Prompt Engineering is going to be the new career opportunity to look out for ?

As AI technology continues to advance, the need for skilled prompt engineers is likely to grow. Effective prompts can greatly influence the performance and behavior of AI models, and organizations are increasingly recognizing the importance of fine-tuning prompts to achieve specific outcomes. Prompt engineering requires a combination of expertise in AI, natural language processing (NLP), and problem-solving to design prompts that yield accurate and desired responses.

Demand for Prompt Engineering

The demand for prompt engineering is likely to be driven by several factors. Below are few to definitely look out for :

  1. As AI models become more powerful and widely adopted across industries, there is a growing need for tailored and precise prompts to maximize their utility.
  2. Prompt engineering can help mitigate biases and ethical concerns in AI systems by carefully designing prompts that promote fairness and inclusivity.
  3. Prompt engineering plays a crucial role in applications such as chatbots, virtual assistants, and automated customer.

AI is already being used in a variety of applications, from self-driving cars to virtual assistants and medical diagnosis. With the ongoing development of AI technologies, we can expect to see further advancements in areas such as healthcare, education, and finance, among others. However, as with any powerful technology, there are also concerns about ethical and societal implications that need to be addressed.


AI & Tech

AWS free training for everyone

AWS stands for Amazon web services and it is widely used within the technology industry.

AWS offers a lot of services where it helps organizations to move their applications to a cloud environment.

Most of the big corporates have already explored cloud technologies and have successfully implemented them.

In order to upscale the developer community and also spread awareness, Amazon has started a training program.

Within this program, they are offering educational materials and courses about cloud technologies.

To avail AWS free training on cloud technologies, one has to sign up using the below link.

In the past, it was called

Avail this benefit and start preparing for your next big break

free AWS training

AWS training certification

AWS learning path

AWS training cost

AWS training account

AWS Sign up account

AI & Tech

How to configure SSL on your application

If you have not already configured your Tomcat instance then you can follow the instructions here.

How to setup SSL on Tomcat in less than 5 minutes

By following the above article, you will be fulfilling all the prerequisites and you will be able to proceed to the next step. To enforce your application to work with SSL, the following is the additional step that needs to be done. You will need to add the following code snippet into your application’s web.xml file.

        <web-resource-name>YOUR SECURED WEBAPP NAME</web-resource-name>

Observe the following things from this setting that you’ll be putting in your web.xml file:

  1. The url-pattern tag above is set to /* so that any page or resource of your web application needs to be accessed via HTTPS only.
  2. The transport-guarantee tag above is set to CONFIDENTIAL, to ensure that your application is accessible via HTTPS only.
  3. For these changes to take effect, save the web.xml file, and restart your TOMCAT / TomEE service.
  4. In case you want to turn off the SSL settings, you don’t really have to remove this whole setting but mark the transport-guarantee tag to NONE instead of CONFIDENTIAL and restart your TOMCAT / TomEE instance.
AI & Tech

How to setup SSL on Tomcat in less than 5 Minutes

This article is going to show you how you can configure SSL on your Tomcat / TomEE instance in less than 5minutes, I challenge you that!

For this, the basic pre-requisites are the following (these are obvious, but making a point that this article is self-explanatory to all kinds):

  • Java SDK (JDK 11.0.2 used for this article)
  • Tomcat / TomEE (Tomcat 9 used for this article)

There are basically two important steps to make this configuration work, which is as follows:

  • To create a Keystore file using Java
  • To configure your Tomcat / TomEE instance to use this Keystore file that was generated in the earlier step.

Let us now look at these steps which are outlined above

Create a Keystore file using Java:

For this, open a command prompt for Windows or a terminal for your Linux / macOS:

cd %JAVA_HOME%/bin -> For Windows

cd $JAVA_HOME/bin -> For Linux / macOS

By the above step, you would change directory to JAVA_HOME/bin where you will find a handy tool key tool that takes the responsibility of creating a Keystore file. On that prompt/terminal, key in the following command:

keytool –genkey –alias tomcat –keyalg RSA

After the execution of the above command, you would be posed with the following questions where you can provide answers accordingly:

You would first be prompted for a password, provide it and make sure that you remember or make a note of it correctly.

For the First and Last name, it should be the name of the system where this certificate must be deployed. Eg: HOSTNAME of your TOMCAT instance.

The rest of the questions are straight forward, examples of those are provided in the screenshot below.

At the end of this questionnaire comes a confirmation, for which you need to explicitly say Y / YES after reviewing the details that you’ve provided here.

Once the above command is executed, this would create a .keystore file under the following folder locations based on your choice of OS where you would have attempted this.

WINDOWS -> C:\Users\<USER_NAME>\.keystore

LINUX -> /home/<USER_NAME>/.keystore

MacOS -> /Users/<USER_NAME>/.keystore

Configure Tomcat with a generated Keystore file

Open your Tomcat / TomEE installation directory for which you want to configure SSL, open the conf folder -> server.xml file in Administrator mode (so that the modifications that you make can be saved on exit).

Search for the following XML element:

Uncomment and make the changes to match the following

  1. Make a note of the changes made, here we should add these parameters without fail – Keystore file, keystorePass, and the protocol.

This brings us to the end of the necessary configurations that are required to setup SSL for your TOMCAT / TomEE instances. Restart your TOMCAT / TomEE instances for the changes to take effect.

You could now try and test accessing the following URLs to confirm that the TOMCAT / TomEE instances are available on both HTTP and HTTPS. These should both land to your TOMCAT / TomEE home page respectively.

  1. http://localhost (Considering that you are running your TOMCAT / TomEE instances on the default port 80).
  2. http://localhost:8443

How do I start Tomcat in https mode?

What is SSL in Tomcat

Does Tomcat Use OpenSSL?
How do I configure SSL?

Tomcat 8.5 SSL configuration

How to install SSL certificate in apache tomcat Linux


Tomcat self-signed certificate

Setting up SSL on tomcat in 5 minutes

How to configure SSL in Tomcat 7

AI & Tech

How to collect thread dump from Tomcat using JStack utility tool?

Java 1.6 onwards, “jstack.exe”, a utility tool comes along with the JDK installation and can be found in the folder %JAVA_HOME%\bin. If you aren’t able to find it along with your JDK installation, even then you should be able to download this utility without any issues at all. This utility just requires the PID of the Java process that you are interested to collect the thread dump. In this article, you will be able to understand and know how to collect thread dump from Tomcat using Jstack utility tool.

Just FYI, the utility that comes along with the JDK installation isn’t complete and lacks the following features, if you are trying to figure out why these aren’t working on your Production systems.

The process of collecting thread dumps using Jstack utility tool:
  • Option “–m”: This option is used to generate the thread dump in MIXED MODE, which means that you will be able to print native stack traces in addition to the Java stack.
  • Option “-F”: This option is used to generate the thread dump FORCIBLY.

If you are on a UNIX based operating system then you will be able to find the PID of the java process using the following command:

ps –ef | grep java


$JAVA_HOME/bin/jps –v

If you are on a Windows-based operating system then you have to follow the steps below:

  • Press Ctrl + Alt + Del and click on “Task Manager” button
  • Click on the “Processes” tab
  • From the menu, click on “View” -> “Select Columns” and check the PID (Process Identifier) check box as well
  • Now you can see the PID of your “java.exe” in the “Processes” tab.

Fire a command prompt window (CMD) and traverse to %JAVA_HOME%\bin directory, and then run the following command with the PID that you’ve obtained in the above step.

Jstack –l %PID% > ThreadDump.log

Since the process is not responding, you could try generating the thread dump using –F option.

By issuing the command above– you will be able to find your thread dump on %JAVA_HOME%\bin with the name as given on the command prompt.

AI & Tech

5 Best Programming Languages to Learn in 2018

I see this is one of the hottest topics among the budding software engineers across the globe. To quench the thirst of many who will ask the same. This should be a convincing article to go through.

So here are the 5 Best Programming Languages to learn in 2018

To start with, Python:

Python is an awesome object-oriented language that closely resembles the English language.  This is one of the reasons why it is classified as one of the best languages for beginners and seasoned professionals. It is a general purpose programming language and emphasizes on code readability, developer productivity.  It is a well-designed language. The syntax is simple but yet very effective.

To continue with, Javascript:

Javascript is mainly a client-side, dynamic scripting language used in front-end development and is compatible with all the browsers available today.  Javascript in conjunction with jQuery makes it easy to integrate different plugins to your code that can save you lot of time. It is quicker to add a new feature into your code with this duo. There are a lot of variants, flavors of javascript that are available – you will be spoilt for choice.

To carry the momentum, Java:

Java has by far become one of the most successful, compelling languages over that last 15 odd years. It won’t be an exaggeration but no list (5 Best Programming Languages to learn in 2017) will be complete without Java. I am personally in love with it, there is remotely anything impossible that can be achieved with Java. It is used in over 15 BILLION (let me repeat, 15 BILLION) devices and over 10 MILLION developers using it worldwide. That in itself speaks loads and loads about this technology. The later versions of Java have provided ways and means to write clean code with Java Streams and Lambdas.

To understand the data, SQL:

Structured Query Language (SQL) is used to communicate with and to manipulate databases. It is one of the most common skills that would be required of any developer. It started with very few variants earlier, but with NoSQL in the picture, it has grown leaps and bounds. Lately, Microsoft has released their SQL Server 2016 which proved to be surprisingly popular, providing integration with R (popular data analysis programming language) and a Linux version.

To be unique and in demand, C:

If you are a seasoned professional but don’t know least “C" well enough to read/understand it, you will probably feel a sense of shame about it. Java / C# will help you understand the object oriented way, but pointer arithmatic and manual `memory management` are the key things that one should know. C++ is a good language but never can take the place of C.

You need lower memory consumption and high performance but still, don’t want to learn/write,C then Go or Rust should help you do that. It is a definite recommendation to have either of these skills to meet the demand.

Summing it up:

The need of the day is for a FULL STACK developer. For this I’d recommend learning the basics of HTML, CSS, Bootstrap and once you advance in this pick any two backend languages (preferably Java, Python) to cement your place as a FULL Stack developer. Having said that, SQL is still a requirement but this can take a back seat for a while but not always. There is this myth in the programming world that if you know more languages, you’ll be successful. This is not entirely true and refrains from doing something like that. Pick a skill set that you feel comfortable with and master those for your own good. Playing around with the latest technologies is suggested but not at the cost of your core skills.

Now it’s over to you guys, we’ve taken our time to introduce the 5 Best Programming Languages to learn in 2018. Choose wisely, take our advice or not, be fair with your learning always.

Happy Learning, guys!

AI & Tech

Gang of Four (GoF) Java Design Patterns

What is a Design Pattern?

Basically, a design pattern represents the best practices used by the most experienced object-oriented software developers, as these are the solutions to the most general problems that any Software developer might have faced during the process of software development.

A group of 4 authors named Erich Gamma, John Vlissides, Ralph Johnson and Richard Helm published a book titled “Design Patterns – Elements of Reusable Objected Oriented Software” in the year 1994. This has been the initiation of the concept of Design patterns in the Software development.

These authors are commonly known to be as the infamous “Gang of Four” then onwards and hence the name – “Gang of Four” Java Design Patterns. The two important points that most of the design patterns talk about are:

  • Program to an interface but not to an implementation
  • Favor Object Composition as against Inheritance

With the discussion above giving us the background of the Design Patterns as a whole and the most commonly used phrase “Gang of Four” demystified, we will go to the next section of the topic – the types of design patterns available.

 Types of Design Patterns:

As per the references given in the book Design Patterns – Elements of Reusable Object-Oriented Software, there are 23 design patterns that can be broadly divided into 3 categories.

Creational Pattern:

These kinds of patterns generally provide ways and means of creating Objects in the best possible way, instead of using the traditional new operator. These patterns give the flexibility in making the decision to create what objects based on the given use case.

Structural Pattern:

These design patterns generally talk about the Class and the Object compositions. Inheritance as a concept is used to compose the interfaces and also to define ways to compose objects to obtain newer functionalities.

Behavioral Pattern:

These design patterns are generally used for identifying the best possible way of communication within the objects.

There is also relatively a newer set of patterns discussed as the J2EE patterns identified by the Sun Java Center. These are specifically concerned with the Presentation layer.

23 GoF Design Patterns, their definitions:

The points above should provide you the basic knowledge about the concept of Design patterns and also the kinds of patterns that are available for your consumption directly. Now with these details, we shall directly dive into the details and specifications of these design patterns individually.

1. Mediator design pattern:

Use Mediator pattern to “Define an object that encapsulates how a set of objects interact. Mediator design pattern promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.”

2. Adapter design pattern:

Adapter design pattern lets you “Convert the interface of a class into another interface the client expects. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.”

3. Proxy design pattern:

Use Proxy design pattern to “Provide a surrogate or placeholder for another object to control access to it. Ex: Usage of Proxy design pattern can be seen in RMI (Remote Method Invocation) APIs.

4. Observer design pattern:

Observer design pattern should “Define a one-to-many dependency between objects in that when one object changes state, all its dependents are notified and updated automatically.”

5. Strategy design pattern:

Strategy design pattern should “Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.”

6. Decorator design pattern:

Decorator design pattern should “Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to sub-classing for extending functionality.”

7. Factory design pattern:

Factory design pattern should “Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to subclasses.”

8. Chain of Responsibility design pattern:

Chain of Responsibility design pattern should “Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along with the chain until an object handles it.”

9. Singleton design pattern:

Singleton design pattern must “Ensure a class only has one instance, and provide a global point of access to it.”

10. Flyweight design pattern:

Flyweight design pattern should “Use sharing to support large numbers of fine-grained objects efficiently. A Flyweight is a shared object that can be used in multiple contexts simultaneously. The Flyweight acts as an independent object in each context – it’s indistinguishable from an instance of the object that’s not shared.”

11. Façade design pattern:

Façade design pattern should “Provide a unified interface to a set of interfaces in a system. Façade defines a higher-level interface that makes the subsystem easier to use.”

12. Template Method design pattern:

Template Method design pattern will “Define the skeleton of an algorithm in an operation, differing some steps to subclasses. Template method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.”

13. Builder design pattern:

Builder design pattern lets you “Separate the construction of a complex object from its representation so that the same construction process can create different representations.”

14. Iterator design pattern:

You can use the Iterator design pattern to “Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.”

15. Composite design pattern:

Use Composite design pattern to “Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.”

16. State design pattern:

State design pattern will “Allow an object to alter its behavior when its internal state is changed. The object will appear to change its class.”

17. Command design pattern:

Use Command design pattern to “Encapsulate a request as an object, thereby letting you parameterize clients without different request, queue or log requests, and support undoable operations.”

18. Abstract Factory design pattern:

Abstract Factory design pattern should “Provide an interface for creating families of related or dependent objects without specifying their concrete classes.”

19. Prototype design pattern:

Prototype design pattern should “Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.”

20. Interpreter design pattern:

Interpreter design pattern should “Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.”

21. Memento design pattern:

Memento design pattern is designed to “Without violating encapsulation, capture and externalize an object’s internal state so that the object can be restored to this state later.”

22. Visitor design pattern:

Visitor design pattern should “Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.”

23. Bridge design pattern:

Bridge design pattern should “Decouple an abstraction from its implementation so that the two can vary independently.”

Source: “Design Patterns – Elements of Reusable Objected Oriented Software. For more information on these topics, we would suggest going through the above book to get familiarized with the topics.

AI & Tech

How to edit more than 200 Rows in SQL Server Management 2014- Quick Fix

In this article, we will go through the process of changing modifying the number of rows while displaying for a particular table. As a standard within SQL Server Management Studio 2014, for a particular table user will be able to edit only Top 200 Rows.

The complete SQL Bootcamp will help you master your SQL skills very easily.

But one can change this setting and we will go through the process of modifying in this article.

Grab your free  Java Coding Interview questions pocket book

Step 1:
  • Open up SQL server management studio 2014
  • Go into the Database and specific table where you want to modify the value.
  • Right click on the table, it will show you the standard option of edit top 200 rows
Step 2: 
  • Go into Tools (it is available in header section of SSMS 2014)
  • Sub menu will appear
  • Click on “Options” to continue

Step 3:
  • More options are displayed on the screen.
  • One has to click on “SQL Server Object Explorer”
  • On right-hand side look for Table and View options
  • Enter desired value that you want to Edit for a table and click on Save.

For this article, we have keyed in 2000, see below screen shot

Step 4:

Go back to the table name and right click and see the modified value.

Hope this helps, please comment below if this article has helped you.

AI & Tech

How to add a JAR as a shared resource for more than one application on Tomcat?

This article will help you understand

How to add a JAR as a shared resource for more than one application on Tomcat

There is a huge change in the architecture of Tomcat itself during the evolution of Tomcat 6.0 / 7.0 releases after the Tomcat 5.5 and hence a change in the folder structure as well. This change has more to do with the default configuration of the class loaders from Tomcat 5.5 to Tomcat 6.0/7.0.

The Tomcat 5.5 instance used to have folders named “shared”, “common” and “server” which are now condensed to just one folder called “lib” starting from Tomcat 6.0. The main purpose of these 3 folders was to hold jars and class files that were made available to the “shared”, “common” and the “server” class loaders. Since the aforementioned folders are all condensed to a single folder, “lib” folder dictates the jars / class files available for all the 3 class loaders (namely shared, common and server).

Depending on the situations that we work on, it is an advantage to have a separate “shared” folder under %CATALINA_HOME% (as previously was available in Tomcat 5.5. If not download Tomcat 5.5).

  • Create the following folders in your CATALINA_HOME directory
    • shared
      • classes
      • lib
  • Modify the conf/ to dictate Tomcat 6.0/7.0 to use the shared directories instead of the lib directory which is by default. Take a backup of your configuration file, as ALWAYS!
    • Locate shared.loader= property and change it to shared.loader=”shared/classes,shared/lib/*.jar”
  • Save conf/ and then start the Tomcat server.

With these steps, the shared class-loader should be configured to load classes from the shared folder.

I hope the article has helped you.

Read more on:

How to collect thread dump from Tomcat using Jstack utility tool

5 Best programming language to learn in 2018

If you thing any information is missing, please do comment below so that the rest of the viewers can benefit out of it.


AI & Tech

Best Practices while Using Tomcat

Best Practices while Using Tomcat


Below article will help you understand the  Top best practices that are in use while utilizing Tomcat

Best Practice 1:

  • Installation of Tomcat is pretty straight-forward but a point to note is to use a suitable path (the %CATALINA_HOME% that we set on the environment variables) which do not contain white spaces.
  • Reason to honor this practice is that it might cause issues when you try starting Tomcat as a Web Server.

Best Practice 2:

  • Tomcat should never be run as a PRIVILEGED user on any operating system (root on UNIX/LINUX, or Local System on Windows), it should be run as a low privilege user ONLY.
  • Ideally, it should be run as a user created only for the purpose of running only one application.

Best Practice 3:

  • It is a considered a good practice not to load any libraries/packages other than the standard ones that are distributed along with Tomcat using the Commons loader.
  •  Can cause loads of compatibility issues on a longer run.
  • If there is a need that you need to share a single jar/library amongst several other applications, it is a good idea to create a “shared/lib” or a “shared/classes” directory and configure under the SHARED Loader in the properties.

Best Practice 4:

  • Place your JDBC drivers as a shared library.
  • These should be directly placed under the %CATALINA_HOME%/lib folder only.

Best Practice 5:

  • If you’re finding yourself configuring CLASSPATH rather frequently, then we suggest you rethink your development process.
  • It is suggested to use Tomcat, which is recommended by Apache.

I hope this article has helped you in terms of refreshing your knowledge.  Please subscribe to our newsletter to stay up to date with the technology trends.

Read more on:


Exit mobile version