My experience with exoreaction.com

 


My beginnings at Exoreaction.com


My story with Exoreaction.com began in March 2022. I ended my employment relationship with my last employer and posted on social network X (@jamdiazdiaz) that I was open to job opportunities.


I received offers from different companies, but @javatotto (Thor Henning Hetland) was direct and clear in what they offered me which I can summarize as continuous learning, challenging projects, and building open-source tools for the company and for everyone.


But, after the invitation, came the challenge of adding a new feature in Visuale.



After the Pull Request, I met my CEO Selina Stenberg from Quadim who introduced me to the project they had been developing and which I was going to join in my first days.


What is Quadim?

Quadim is a data-driven platform for managing employee skills in an organization. It responds to a solution that for years has been absent in HR or CV systems, either because they are complex modules or because they are never used. This is because many times the responsibility for completing the information falls on a single person.


It is for this last reason that Quadim obtains its information from the same employees and generates the necessary information to make better decisions. I invite you to watch our CEO's explanation in the following video, where she explains how organizations today are moving to skills-oriented organizations. So in short it is a solution to overcome the skills gap in an organization.



In this way, Quadim allows me to know what skills I have, and best of all, I can version and modify it over time.


Now imagine leaving the Excel, questionnaires, to know the skills that your organization has, which just sells said services to the market. With this, you can see the maturity that your team has individually and as a group and see how to solve the skills gap to be competitive in the market.


And let's go further. Imagine that we are a law firm and know which partners or deputies are experts on that topic and assign the ideal people for a specific case. Cool!!


Returning to the technical aspects at Quadim, I learned to use AWS, and to give my best I decided to get certified in AWS as you can see in my LinkedIn profile:



I have to thank Exoreaction.com for giving me the access, and the trust to create, delete, and solve issues and never read or listen to a "be careful not to mess up", but rather, they placed their trust in me with the phrase "let me know when it's ready". It is a microservices-based architecture that uses Spring Boot on the backend.


At Exoreaction the culture is to give opportunities to do things and it is appreciated that they are done. If what you are going to do is going to be communal, it is already a good "beer" to share with friends. That's why we love open source.

But have you only seen Java?

Quadim has made me look at VueJS, NuxtJS, AWS (EC2, RDS, ECS, ELB, EBS, S3, etc.), Hazelcast, Jenkins, Github Actions, etc.

I've also seen Golang for a project of ours called Nerthus. This was my first time and it generated my interest until now in learning it I recommend getting into an open source project to learn it, because that's how I learned without taking any course.

I also learned about the Whydah project available on Cantara which is an SSO and IAM solution for your projects. We use it on several of our clients, and it works perfectly.

Overall, the Cantara repository is a mine of interesting projects all created by an enthusiastic community from Norway and guests.

Now our team led by Rickard Öberg has created Xorcery, a bootstrap-like library designed to help you grow your solution and help developers with common service design features, such as REST API clients and servers, as well as reactive data streaming.  It is already being used by our clients and is increasingly adding more features. I have written about it, you can see the articles about it in this link.


Is it all just work?


We also make beer hahaha




And I'm not kidding, the team brews its own beer:



We participate in conferences:




And if we Peruvians and Norwegians have something in common, it is that we like to drink good beer and eat well:



And we also take time to do our favorite sport:




Exoreaction.com

I cannot finish this post by thanking Exoreaction.com for the opportunity to open its doors to me and fulfill what it promised me from day one: continuous challenge and learning. It's a good place to work, the team is made up of great people, all with a supportive spirit and I hope to see them one day in person in Oslo.

Follow us on our website: https://www.exoreaction.com

Our team

Our success stories

And of course, I invite you to join Quadim. If your organization wants to try our product, contact Selina and she will give you all the information about it:




So personally it has been two magnificent years and I am sure we will have a 2024 full of challenges and projects. We are exoreaction.

Enjoy!!


Jose





Share:

Mi experiencia con ExoReaction

 


Mis inicios en Exoreaction.com

Mi historia con Exoreaction.com comenzó en marzo del 2022. Termine mi relación laboral con mi último empleador y puse en la red social X que estaba abierto a oportunidades de trabajo. 

Recibí ofertas de distintas empresas, pero, @javatottoThor Henning Hetland fue directo y claro en lo que me ofrecía y que puedo resumir en: continuo aprendizaje, proyectos retadores y construcción de herramientas open source para la empresa y para todo el mundo.

Pero, luego de la invitación, vino el reto de solucionar un issue en Visuale



Luego del Pull Request ya conocí a mi CEO Selina Stenberg de Quadim que me presento el proyecto que venían desarrollando y al cual iba a unirme en mis primeros días.

¿Qué es Quadim?

Quadim es una plataforma orientada a datos para administrar las habilidades de los empleados en una organización. Responde a una solución que por años ha estado ausente en los sistemas de RRHH o CV, ya sea porque son módulos complejos o que no se utilizan nunca. Esto debido, a que muchas veces la responsabilidad de completar la información cae en una sola persona.  

Es por esto último comentado, que Quadim obtiene su información de los mismos empleados y genera la información necesaria para tomar mejores decisiones. Les invito a ver la explicación de nuestra CEO en el siguiente vídeo, donde explica como las organizaciones hoy se están moviendo a organizaciones orientadas a habilidades. Así que en resumen es una solución para superar la brecha de habilidades en una organización.




De esta manera Quadim me permite saber qué habilidades tengo y lo mejor de todo que puedo versionar y modificarla en el tiempo.


Ahora imaginen dejar el excel, cuestionarios, para saber las habilidades que tiene tu organización, que justo vende dichos servicios al mercado. Puedes ver con esto la madurez que tiene tu equipo de forma individual y grupal y ver como solucionar la brecha de habilidades para ser competitivo en el mercado.

Y vayamos más allá. Imaginen que somos un estudio de abogados y saber que socios o adjuntos son expertos en tal tema y asignar las personas idóneas para un caso específico. ¡Cool!!

Volviendo a lo técnico en Quadim aprendí a usar AWS y para dar lo mejor de mí decidí certificarme en AWS como pueden ver en mi perfil de Linkedin:


Tengo que agradecer a Exoreaction.com por darme los accesos, la confianza para crear, borrar, solucionar temas y nunca leer o escuchar un "cuidado con malograr", sino, que depositaban en mí su confianza con la frase "avísame cuando esté listo". Es una arquitectura basada en micro servicios que usa Spring Boot en el backend. 


En Exoreaction la cultura es dar las oportunidades para hacer las cosas y se aprecia que estas se realicen. Si lo que vas a hacer va a ser comunitario, es ya una buena "cerveza" para compartir con los amigos. Por eso nos encanta el open source. 

¿Pero, solo has visto Java?

Quadim me ha hecho ver VueJS, NuxtJS, AWS (EC2, RDS, ECS, ELB, EBS, S3, etc.), Hazelcast, Jenkins, Github Actions

También he visto Golang para un proyecto nuestro llamado Nerthus. Esta fue mi primera vez y me genero el interés hasta ahora de aprenderlo y les recomiendo meterse a un proyecto open source para aprenderlo, porque, así fue como aprendí sin meterme en ningún curso.

También aprendí sobre el proyecto Whydah disponible en Cantara que es una solución SSO e IAM para tus proyectos. La usamos en varios clientes nuestros, y funciona perfectamente.

En general, ese repositorio Cantara es una mina de proyectos interesantes y todos creados por una comunidad entusiasta de Noruega e invitados.

Ahora último nuestro team liderado por Rickard Öberg ha creado Xorcery, una biblioteca tipo boostrap diseñada para ayudarlo a hacer crecer su solución y ayudar a los desarrolladores con características de diseño de servicios comunes, como clientes y servidores REST API, así como transmisión reactiva de datos. Está ya siendo utilizada en nuestros clientes y cada vez agregando más características. He escrito al respecto, puedes ver los artículos sobre el mismo en este link


¿Es todo solo trabajo?


También hacemos cerveza jajaja




Ojo nosotros misma la hacemos:




Participamos de eventos:




Y si algo tenemos en común los Peruanos y Noruegos es que nos gusta tomar buena cerveza y comer bien:



Y también nos damos tiempo para hacer nuestro deporte favorito:






Exoreaction.com

No puedo terminar este post agradeciendo la oportunidad a Exoreaction.com de abrirme sus puertas y cumplir con lo que me prometieron desde el primer día: continuo reto y aprendizaje. Es un buen lugar para trabajar, el equipo está compuesto de excelentes personas, todas con el espíritu de apoyar y espero verlos algún día en persona en Oslo. 

Síguenos en nuestra página web: https://www.exoreaction.com

Nuestro team

Nuestros casos de éxito

Y por supuesto te invito a unirte a Quadim. Si tu organización quiere probar nuestro producto, contacta a Selina que ella te dará toda la información al respecto:



Asi que en lo personal han sido dos magnificos años y estoy seguro tendremos un 2024 lleno de retos y proyectos. Somos exoreaction.


Enjoy!


Jose













Share:

Certificaciones Azure

 En este artículo quiero explicarte cuáles son las certificaciones Azure de Microsoft y cómo conseguirlas.





Niveles de Certificación Azure

Existen 4 niveles de certificación Microsoft: Fundamentals, Associate, Expert y Specialty.

  • La Certificación Fundamentals es para quienes están empezando en el cloud. Esta certificación también pueden ser usadas por personas sin background técnico y que desean comenzar su ruta al cloud.
  • La Certificación Associate es para quien ya ha experimentado con Azure y desea mencionar esto en su CV. 
  • La Certificación Expert es para quien ya tiene experiencia trabajando con Azure y conocimiento nivel associate de la plataforma.
  • La Certificación Specialty es para posiciones específicas como Azure para SAP Workloads y Azure IOT Developer Speciality.

Lista de Certificaciones Azure 2024


Hay varias certificaciones Azure en las que puedes aprender, y dependerá de tu experiencia y nivel de conocimiento cuáles puedes conseguir. A continuación una lista de certificaciones Azure populares.



De las cuales podemos establecer el camino para los siguientes roles:








Certificaciones Microsoft Azure


Ahora vamos a hablar sobre la lista más popular de certificaciones Azure, con una breve descripción, información de la prueba y dominios a cubrir para pasar este examen con éxito.  

Nota: Voy a mencionar las que dictamos en JoeDayz este 2023 en primer lugar. Pronto haremos la actualización para los cursos del 2024.

1. Microsoft Azure Fundamentals: AZ-900

El examen AZ-900 Fundamentals es considerado el primer paso en el nivel Associate y Expert de las certificaciones Azure. Aunque es un paso opcional, se recomienda validar tu conocimiento base para luego ir por las demás según el rol que deseas certificar. Esta también ayuda a candidatos no-técnicos a entender los servicios cloud como ventas, compras y marketing de los servicios Azure cloud.

Rol de trabajo: Administrador, usuario de negocio, desarrollador, estudiante, gerente de tecnología

Formato e información del Examen:





Dominios a cubrir en el Examen:





Guía de estudio y compra de voucher para el examen: https://learn.microsoft.com/en-us/credentials/certifications/exams/az-900/




2. Microsoft Azure Administrator Associate: AZ-104

El Azure Administrator Associate (AZ-104) es una de las certificaciones de Azure de nivel intermedio que más paga en la ruta de certificación de Azure 2024. Un administrador de Azure es un administrador de la nube que instala y administra almacenamiento, informática, identidad, gobernanza y redes virtuales. Los administradores también son responsables de aprovisionar y monitorear los recursos de la nube. Los candidatos deben tener experiencia relevante con Azure Portal, Power Shell, Azure CLI y plantillas ARM.


Rol de trabajo: Administrador

Formato e información del Examen:



Dominios a cubrir en el Examen:



Guía de estudio y compra de voucher para el examen: https://learn.microsoft.com/en-us/credentials/certifications/exams/az-104/




3. Microsoft Azure Developer Associate: AZ-204

El examen de asociado de desarrollador de Microsoft Azure (AZ-204) es la versión reciente del examen de asociado de desarrollador de Microsoft Azure (AZ-203) en la última ruta de certificación de Microsoft Azure, que está disponible desde febrero de 2020. Un desarrollador de Azure es responsable del Diseño, desarrollo, pruebas y mantenimiento de aplicaciones y servicios en la nube.

Los candidatos a esta certificación deben tener experiencia en diseño, desarrollo y prueba de aplicaciones y servicios basados en Azure. Los candidatos también deben tener entre 1 y 2 años de experiencia en programación, así como conocimientos sobre almacenamiento de datos y redes, SDK de Azure, depuración, monitoreo y optimización del rendimiento, entre otras cosas.


Rol de trabajo: Desarrollador


Formato e información del Examen:


Dominios a cubrir en el Examen:





Guía de estudio y compra de voucher para el examen: https://learn.microsoft.com/en-us/credentials/certifications/exams/az-204/



4. Microsoft Azure Security Engineer Associate: AZ-500

Un ingeniero de seguridad de Azure (AZ-500) es responsable de administrar la identidad y el acceso, implementar políticas de seguridad y prevención de amenazas, y proteger datos, aplicaciones y redes en la nube. El ingeniero de seguridad de Azure comprende las redes, la virtualización y la arquitectura de nube de N niveles, por lo que puede proporcionar numerosas medidas de seguridad para abordar cualquier vulnerabilidad o amenaza.

Esta certificación requiere sólidas habilidades en automatización, secuencias de comandos y un profundo conocimiento de las redes virtuales y la virtualización.




Rol de trabajo: Ingeniero de Seguridad


Formato e información del Examen:



Dominios a cubrir en el Examen:




5. Microsoft Azure Solutions Architect Expert: AZ-305

El AZ-305: Diseño de soluciones de infraestructura de Microsoft Azure es una certificación de Azure nueva y una de las que mejor paga para arquitectos de soluciones en la ruta de certificación de Microsoft Azure 2024. Este examen reemplaza a Azure Architect Technologies (AZ-303) y Azure Architect Design. (AZ 304). Los solicitantes que se inscriban para esta certificación deben conocer la administración y el desarrollo de Azure y haber aprobado previamente una prueba, ya sea el examen AZ-104 o AZ-204.



Formato e información del Examen:


Dominios a cubrir en el Examen:


Guía de estudio y compra de voucher para el examen: https://learn.microsoft.com/en-us/credentials/certifications/exams/az-305/


Este 2024 vamos a alinear los cursos por roles. Así que pronto daremos novedades.

Enjoy!

Joe














Share:

Why Golang in Exoreaction?

 


At exoreaction we use golang and we have an expert on the subject. My partner Sindre. You will find many of the projects he has worked on in Cantara. Later I will tell you about some really interesting ones.


Characteristics

Go, also known as Golang, has gained popularity in the tech industry for several reasons, making it a preferred choice for many companies. Some key factors contributing to the popularity of Go include:

1. Concurrency Support:

Go has built-in support for concurrency, making it easy to write concurrent programs. The language includes goroutines, lightweight threads managed by the Go runtime, and channels, which facilitate communication between goroutines. This makes it efficient for developing scalable and concurrent applications.


2. Efficiency and Performance:

Go is designed with a focus on simplicity and efficiency. It compiles to machine code, providing fast execution and performance. Its garbage collector is optimized for low-latency, making it suitable for building high-performance applications.


3. Static Typing:

Go is statically typed, which means that type checking is done at compile-time. This helps catch errors early in the development process, making the code more reliable and less error-prone.


4. Simple and Readable Syntax:

Go has a clean and straightforward syntax, making the code easy to read and maintain. Its simplicity is conducive to quick learning and adoption, especially for developers transitioning from other languages.


5. Standard Library:

Go comes with a comprehensive standard library that includes packages for handling tasks such as networking, encryption, and file I/O. This reduces the need for external dependencies and provides a consistent set of tools for developers.


6. Cross-Platform Compatibility:

Go is designed to be cross-platform, and its compiler generates binaries for different operating systems without requiring modification to the code. This portability is beneficial for building applications that can run seamlessly across various environments.


7. Open Source Community:

Go is an open-source language with a thriving community of developers contributing to its ecosystem. This community support has led to the creation of numerous libraries, frameworks, and tools that enhance the development experience in Go.


8. Scalability:

Go is well-suited for building scalable systems, and many large-scale applications and services, including those at companies like Google, Dropbox, and Docker, have been successfully built using Go. Its concurrency model and performance characteristics make it suitable for handling large numbers of simultaneous connections.


9. Strong Backing:

Go was developed by Google, which provides it with a strong backing and support. This backing has instilled confidence in companies considering Go for their projects, knowing that it is developed and maintained by a reputable tech company.


10. Effective for DevOps:

Go's efficiency, static typing, and cross-platform compatibility make it well-suited for building tools related to DevOps, such as container orchestration tools (e.g., Kubernetes and Docker) and infrastructure-related software.


Overall, the combination of performance, simplicity, concurrency support, and a strong community has contributed to the widespread adoption of Go in the tech industry.

Tech Companies using Golang



Several prominent tech companies have adopted Go (Golang) for various purposes, including backend development, microservices, infrastructure tools, and more. Keep in mind that the technology landscape is dynamic, and the usage of programming languages may evolve over time. Here are some companies known to use Go:

1. Google:
Go was developed by Google, and many internal projects at Google are written in Go. Google's Kubernetes, a popular container orchestration platform, is also written in Go.

2. Uber:
Uber has been using Go for building various components of its infrastructure, including some backend services.

3. Dropbox:
Dropbox has adopted Go for certain backend services and infrastructure components.

4. Docker:
Docker, the containerization platform, is written in Go. Docker heavily relies on Go for its speed, efficiency, and concurrent capabilities.

5. SoundCloud:
SoundCloud has used Go for building parts of its backend infrastructure.

6. Twitch:
Twitch, the live streaming platform, has employed Go for some backend services.

7. BBC:
The British Broadcasting Corporation (BBC) has used Go for certain projects and backend services.

8. American Express:
American Express has reported using Go in some of its backend systems.

9. Cloudflare:
Cloudflare, a content delivery network and cybersecurity company, has utilized Go in various parts of its infrastructure.

10. X:
Before Twitter, Now X has adopted Go for certain backend services and tools.

11. Apple:
Apple has shown interest in Go and has used it for certain projects and tools.

Remember that the usage of Go can vary within companies, and some may use it for specific projects or services rather than across their entire tech stack. 

HungerStation (Case of success)


HungerStation is the leading food delivery app and marketplace in KSA. They are part of the Delivery Hero Group, headquartered in Berlin, and a listed company on the DAX.

Their focus is customer-centricity, they celebrated their 10th-year milestone last year, but they still operate like a startup in an Agile environment. They currently have more than 2 million active users and are growing!

Their Tech Hub was formed in Dubai with 2 people in 2019 and has grown rapidly to over 100+ with the plan of ending 2023 with 150 employees. Their Tech leadership and Senior engineers come with global experience in high-scale product companies such as Amazon and Microsoft, and hyper-growth startups, so you can be assured to learn and work with diverse talent.

They work on:
- Golang;
- Microservices;
- Architectural decision-making for a platform used by millions of customers;
- Working with Design Driven Development and more.

The good news is that they are recruiting. If you want to relocate to Dubai. Follow them.

What should I do to learn Golang?

Learning Go (Golang) can be a rewarding experience, especially if you're looking to build scalable and efficient applications. Here's a step-by-step guide to help you get started with learning Go:

1. Understand the Basics:
Start by understanding the fundamentals of the Go language. Familiarize yourself with the syntax, data types, variables, and basic control structures (such as loops and conditionals). The official Go Tour is an excellent resource for this: A Tour of Go.

2. Set Up Your Development Environment:
Install the Go programming language on your machine. You can download the official distribution from the official Go website. Follow the installation instructions for your operating system.

3. Read the Official Documentation:
The official Go documentation is comprehensive and well-written. Read through the official documentation to gain a deeper understanding of the language features, standard library, and best practices.

4. Code Along and Practice:
The best way to learn any programming language is by writing code. Start with simple programs and gradually move on to more complex projects. Practice is crucial for solidifying your understanding of the language.

5. Explore Go Packages and Libraries:
Go has a rich standard library, and there are many third-party packages and libraries available. Explore the standard library and learn how to leverage existing packages to enhance your programs. The Go documentation is an excellent resource for this.

6. Concurrency and Goroutines:
One of the key strengths of Go is its support for concurrency through goroutines. Learn how to use goroutines and channels for concurrent programming. Understanding concurrency is essential for building scalable and efficient applications.

7. Build a Small Project:
Apply your knowledge by working on a small project. This could be a web application, a command-line tool, or any other project that interests you. Building real-world projects is a great way to reinforce your learning.

8. Explore Web Development with Go:
Go is often used for building web applications and APIs. Explore web development in Go using frameworks like Gin or Echo. Learn how to handle HTTP requests, route traffic, and work with databases.

9. Read Books and Tutorials:
There are several books and online tutorials that can help deepen your understanding of Go. Some recommended books include "The Go Programming Language" by Alan A. A. Donovan and Brian W. Kernighan and "Programming in Go" by Mark Summerfield.

10. Engage with the Community:
Join the Go community to stay updated on the latest developments, ask questions, and seek help if needed. The Go Forum and Go subreddit are good places to connect with other Go developers.

11. Contribute to Open Source Projects:
Once you have a good understanding of Go, consider contributing to open source projects. It's a great way to gain practical experience, collaborate with other developers, and improve your coding skills.

Remember that learning a new programming language takes time and practice. Be patient, and focus on building a strong foundation. As you progress, you'll gain the confidence to tackle more advanced topics and projects in Go.

How can exoreaction help me learn golang?

Exoreaction has developed many projects with Golang in Github and the best of all is that they are public and you can review them, learn from them and participate with the issues/PR in each repo to interact with our team. It is the route that I have followed to learn Golang in my personal case.




If you need developments or consulting in golang. Feel free to contact exoreaction.

Enjoy!


Joe



P.D. I hope the arrive of my new t-shirt :P




Share:

LangChain for Java in Quadim

 


LangChain for Java: Supercharge your Java application with the power of LLMs


At Quadim we have worked with langchain4j. The goal of this project is to simplify the integration of AI/LLM capabilities into your Java application.

Below we are going to show you some simple examples of using this library so that you can use it in your projects.


Prerequisite


You need an OpenAI API Key. In this link you will find detailed information to obtain your API Key.

In the source code, you will find the ApiKeys class, which is where you will use your API KEY.

public class ApiKeys {

  public static final String MY_OPENAI_API_KEY ="<YOU MUST HERE PUT YOUR API KEY>";

}

Assistant Mode

In the AiAssistedHRAssistantTest we are going to use a prompt that will answer as if it were a virtual HR assistant in Quadim.

Below I will explain the source code in parts:

  @Test
  public void testChatWithHRAI() throws Exception {
    Random r = new Random();
    int userNo = r.nextInt(100);
    // Plan
    ChatLanguageModel model = OpenAiChatModel.builder()
        .apiKey(ApiKeys.MY_OPENAI_API_KEY)
        .modelName(OpenAiModelName.GPT_3_5_TURBO)
        .timeout(ofSeconds(900))
        .temperature(0.9)
        .build();

  1. OpenAiChatModel.builder(): This creates a new builder for the OpenAiChatModel class.
  2. .apiKey(ApiKeys.MY_OPENAI_API_KEY): Sets the API key for the OpenAI model. You need to replace ApiKeys.MY_OPENAI_API_KEY with your actual OpenAI API key.
  3. .modelName(OpenAiModelName.GPT_3_5_TURBO): Sets the model name to GPT-3.5 Turbo. This specifies the version of the OpenAI language model you want to use.
  4. .timeout(ofSeconds(900)): Sets the timeout for the API call to 900 seconds (15 minutes). This means that if the API call takes longer than 15 minutes, it will be aborted.
  5. .temperature(0.9): Sets the temperature parameter for sampling. A higher temperature (e.g., 0.9) makes the output more random, while a lower temperature (e.g., 0.2) makes the output more focused and deterministic.
  6. .build(): Builds the ChatLanguageModel instance with the specified configurations.

After executing this code, you will have a ChatLanguageModel instance named model configured with the specified parameters. You can then use this model to generate language-based responses using the LangChain library in Java. 

Assistant assistant = AiServices.builder(Assistant.class)
        .chatLanguageModel(model)
        .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))
        .build();
  1. AiServices.builder(Assistant.class): This creates a builder for the Assistant class within the AiServices utility.
  2. .chatLanguageModel(model): Sets the ChatLanguageModel for the assistant. The model here is the ChatLanguageModel instance that you created in the previous code block.
  3. .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10)): Sets the chat memory provider for the assistant. It uses a lambda expression to create a MessageWindowChatMemory with a maximum of 10 messages. This means that the assistant will keep track of the conversation history, and in this case, it will retain the last 10 messages.
  4. .build(): Builds the Assistant instance with the specified configurations.
After executing this code, you will have an Assistant instance named assistant configured with the specified language model (model) and chat memory provider. This Assistant can then be used to interact with the language model and manage conversation history.


// a) create types for retrieving skills objects from responses
SkillExtractor skillExtractor = AiServices.create(SkillExtractor.class, model);
static class SkillReference {

    @Description("the name of this skill")
    private String name;
    @Description("description of this skill. please make it selling and not more than 10 lines of text")
    private String description;

    //...
}

  1. AiServices.create(SkillExtractor.class, model): This creates an instance of the SkillExtractor class using the AiServices utility. It takes the SkillExtractor class as a parameter and the model (presumably the ChatLanguageModel instance) as another parameter.
  2. static class SkillReference: This declares a static nested class named SkillReference. This class has two fields (name and description) with corresponding @Description annotations. These annotations might be used for documentation or metadata purposes.
The SkillExtractor instance (skillExtractor) is likely to be used for extracting skills or features from the language model (model). The SkillReference class appears to be a structure for holding information about a skill, with name and description attributes.


    // b) simulate a chat
    String appendPrompt = "Answer acting as a friendly HR Consultant helping the user with his/her competence mapping, focussing on skills and projects."+
        "Structure the answer friendly and selling with bullets for discovered or suggested supporting skills and potential typical projects"+
        "where the user may have used those skills. " +
        "Limit answer to the most relevant 5 skills and top 8 projects";


    String q1 = "Yes, I do work with Java and java microservices on the backend ";
    System.out.println("me: " + q1);
    String res1 = assistant.chat(userNo, q1 + appendPrompt);
    System.out.println(res1);
    Skill extractedSkills1 = skillExtractor.extractSkillFrom(res1);
    System.out.println("\n\n1. Skill mapped:" + mapper.writerWithDefaultPrettyPrinter().writeValueAsString(extractedSkills1) + "\n\n");


The assistant is defined this way:


  interface Assistant {
    String chat(@MemoryId int memoryId, @UserMessage String userMessage);
  }
 

So if we run the test, the AI assistant will tell us what skills we need to have to develop with Java microservices.

Result:



Below I show you the test log:

me: Yes, I do work with Java and java microservices on the backend 
Skills:
- Java programming: Experience in Java programming is essential for working with Java microservices on the backend. This includes a deep understanding of object-oriented programming concepts, data structures, and algorithms.
- Spring Framework: Knowledge of the Spring Framework is vital for developing Java microservices. This includes proficiency in Spring Boot, Spring Data, and Spring Cloud.
- RESTful API development: Understanding how to design and develop RESTful APIs is necessary for creating microservices. This involves knowledge of HTTP, JSON, and API documentation tools like Swagger.
- Containerization and orchestration: Proficiency in containerization technologies like Docker and container orchestration platforms like Kubernetes is crucial for scaling and managing microservices in a distributed environment.
- Database management: Having experience with relational databases like MySQL or PostgreSQL, as well as NoSQL databases like MongoDB or Redis, is important for storing and retrieving data in microservices.

Projects:
1. Building a microservices-based e-commerce platform: Developing a scalable and fault-tolerant e-commerce platform using Java microservices, Spring Boot, and containerization technologies like Docker. Implementing RESTful APIs for product catalog management, order processing, and payment integration.

2. Creating a social media analytics system: Designing a system to analyze and process large volumes of social media data using Java microservices, Spring Cloud, and Apache Kafka for stream processing. Implementing sentiment analysis, trend detection, and user engagement metrics.

3. Developing a microservices-based banking application: Building a secure and highly available banking application using Java microservices, Spring Boot, and container orchestration with Kubernetes. Creating APIs for account management, transaction processing, and fraud detection.

4. Building a document management system: Creating a system to store and manage documents using Java microservices, Spring Data, and Elasticsearch for full-text search capabilities. Implementing features like document versioning, access control, and document tagging.

5. Designing a real-time chat application: Developing a real-time messaging application using Java microservices, Spring Boot, and WebSocket technology. Implementing features like chat rooms, private messaging, and message history.

6. Building a microservices-based healthcare platform: Designing a platform for managing patient records, appointments, and healthcare providers using Java microservices, Spring Cloud, and a combination of relational and NoSQL databases. Implementing secure authentication, data encryption, and integration with external healthcare systems.

7. Creating a recommendation system: Developing a recommendation engine using Java microservices, Spring Boot, and machine learning algorithms. Implementing personalized recommendations based on user preferences, purchase history, and browsing behavior.

8. Building a microservices-based travel booking system: Designing a system for managing travel bookings, flight reservations, and hotel accommodations using Java microservices, Spring Cloud, and messaging queues like RabbitMQ. Implementing features like real-time availability updates, payment processing, and itinerary generation.

Note: These suggested projects are not exhaustive but provide a range of examples where the mentioned skills could be utilized.


1. Skill mapped:{
  "name" : "Java programming",
  "description" : "Java programming is a crucial skill for working with Java microservices on the backend. With a deep understanding of object-oriented programming concepts, data structures, and algorithms, you'll be able to develop robust and efficient microservices. Java's versatility and extensive libraries make it a popular choice among developers worldwide, ensuring ample resources and community support.",
  "listOfCandidateSkillDefinitions" : [ {
    "name" : null,
    "description" : null
  }, {
    "name" : null,
    "description" : null
  }, {
    "name" : null,
    "description" : null
  } ]
}


Translator Mode

In the AiAssistedTranslationTest we will see how to test the language translation of our virtual assistant.



 @Test
    public void testAIAssistedTranslationFromEnglishToNorwegian() throws Exception {


        // PLan
        ChatLanguageModel model = OpenAiChatModel.builder()
            .apiKey(ApiKeys.MY_OPENAI_API_KEY)
            .modelName(OpenAiModelName.GPT_3_5_TURBO_16K)
            .timeout(ofSeconds(900))
            .temperature(0.2)
            .build();


        String initialProjectDescription = "Chief Developer, Technical Architect: Developed several core modules in PasientSky's platform, " +
            "including communication module against Norwegian public health authorities, topology module for clinical diagnosis " +
            "(ICPC2, CDC10 and SNOWMED), product module (medicines and prescription goods) m.m. Technical architect, Quality assurer. ";



        int n = 343;

        try {

            String res0 = model.generate( "Translate " + initialProjectDescription + " from English to Norwegian");
            System.out.println(n + " Translated descriptions:" + n++ + "\n\n" + res0 + "\n\n");
        } catch (Exception e) {
            System.out.println("Exception handling  - Stacktrace:" + Arrays.toString(e.getStackTrace()));
        }
    }

In this example, we will see how it can translate from English to Norwegian. The result is:


Below I show you the test log:

Hovedutvikler, Teknisk arkitekt: Utviklet flere kjernekomponenter i PasientSky-plattformen, inkludert kommunikasjonsmodul mot norske helsemyndigheter, topologimodul for klinisk diagnose (ICPC2, CDC10 og SNOWMED), produktmodul (medisiner og reseptvarer) m.m. Teknisk arkitekt, Kvalitetssikrer.


Parse PDF Resume and get skills 


In this last example we search a directory for CVs in PDF format, we ask you to extract the skills in a summarized format and then compare it with a skills base found in skilldefinitions.json to see which skills you have and which you don't.

@Test
  public void testParseOSDResumeWithAIProducingSkillDefinitions() throws Exception {
    helper = new SkillDefinitionHelper();

    Map<String, List<SimplifiedSkill>> resultMap = new HashMap<>();
    // PLan
    ChatLanguageModel model = OpenAiChatModel.builder()
        .apiKey(ApiKeys.MY_OPENAI_API_KEY)
        .modelName(OpenAiModelName.GPT_4)
        .timeout(ofSeconds(900))
        .temperature(0.6)
        .build();
    Assistant assistant = AiServices.builder(Assistant.class)
        .chatLanguageModel(model)
        .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))
        .build();


    // a) Get list of PDF Resumes
    List<Resource> resourceList = getPDFResources();


    String appendPrompt = "Extract the users skills from this resume. Present the result as structured " +
        "json data in the following json format " + jsonSkillDefinition + " keep the name of the skill short";

    int n = 0;
    boolean RUN_FULL_REGRESSON = true;
    int found_and_swapped = 0;
    int not_found = 0;
    if (RUN_FULL_REGRESSON) {
      for (Resource resource : resourceList) {
        try {
          File file = resource.getFile();
          PDDocument document = Loader.loadPDF(file);
          PDFTextStripper stripper = new PDFTextStripper();
          String text = stripper.getText(document);
          //System.out.println(n + " Input data extracted from pdf resume:\n" + text + "\n\n");
          String res0 = assistant.chat(n, text + appendPrompt);
          //System.out.println(n + " Generated JSON SkillDefinitions:" + n++ + "\n\n" + res0 + "\n\n");
          List<SimplifiedSkill> simplifiedSkills = mapper.readValue(res0, new TypeReference<List<SimplifiedSkill>>() {
          });
          System.out.println("Mapped skill definitions:" + simplifiedSkills.size() + " for pdf:" + resource.getFilename() + "\n\n\n");
          List<SimplifiedSkill> enhancedSkillList = helper.getEnhancedSkillDefinitions(simplifiedSkills);
          resultMap.put(resource.getFilename(), simplifiedSkills);
          resultMap.put(resource.getFilename() + "-enhanced", enhancedSkillList);

        } catch (Exception e) {
          System.out.println("Exception handling " + resource.getFilename() + " - Stacktrace:" + Arrays.toString(e.getStackTrace()));
        }
      }
    }
    System.out.println(resultMap);

  }


As you can see, the virtual assistant returns the information as indicated. Amazing.



The log:

[
  {
    "name": "C language",
    "description": "Proficiency in C language, a popular programming language in software development.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "Javascript",
    "description": "Knowledge in Javascript, a programming language used primarily for web development.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "HTML",
    "description": "Proficiency in HTML, a standard language for designing and creating websites.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "CSS",
    "description": "Knowledge in CSS, a style sheet language used for describing the look and formatting of a document written in HTML.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "Microsoft Excel",
    "description": "Skills in Microsoft Excel, a spreadsheet program used to store and process data.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "Microsoft Word",
    "description": "Proficiency in Microsoft Word, a word processing software used to create, edit, and print documents.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "PowerPoint",
    "description": "Skills in PowerPoint, a presentation program used for creating slideshow presentations.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "Graphic Design",
    "description": "Experience in freelance graphic design, including creating social media, logos, and image editing.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  },
  {
    "name": "Customer Service",
    "description": "Experience in customer service roles, including working as a waiter, cashier, and attendant.",
    "isPublic": false,
    "currentVersion": 1,
    "additionaljsonproperties": null,
    "public": false
  }
]

Conclusion

We can integrate this library into our programs and enjoy the power of LLMS. The possibilities are endless.

Enjoy!

Jose

Share: