SlideShare ist ein Scribd-Unternehmen logo
1 von 68
Downloaden Sie, um offline zu lesen
ARCHITECTING WELL-STRUCTURED JAVA
APPLICATIONS
Eduards Sizovs
@eduardsi
MOST APPS BEGIN LIFE SMALL AND NEAT.
TIME GOES BY...
HELLO. I AM YOUR ROTTING ENTERPRISE APP.
- RIGIDITY
- FRAGILITY
- IMMOBILITY
- VISCOSITY
- OPACITY
- NEEDLESS COMPLEXITY
- NEEDLESS REPITITION
SMELLING SYMPTOMS ->
HIBERNATE CORE V4.3.8.FINAL
JDK V1.7.0_51
A JDK CODE BASE IS DEEPLY INTERCONNECTED AT BOTH THE API AND THE
IMPLEMENTATION LEVELS, HAVING BEEN BUILT OVER MANY YEARS
PRIMARILY IN THE STYLE OF A MONOLITHIC SOFTWARE SYSTEM. WE’VE
SPENT CONSIDERABLE EFFORT ELIMINATING OR AT LEAST SIMPLIFYING AS
MANY API AND IMPLEMENTATION DEPENDENCES AS POSSIBLE, SO THAT
BOTH THE PLATFORM AND ITS IMPLEMENTATIONS CAN BE PRESENTED AS A
COHERENT SET OF INTERDEPENDENT MODULES, BUT SOME PARTICULARLY
THORNY CASES REMAIN.
(C) MARK REINHOLDS, CHIEF ARCHITECT OF THE JAVA PLATFORM
SPRING V4.1.6
PRINCIPLES.
PACKAGE IS THE FIRST-CLASS CITIZEN AND
KEY ELEMENT OF LOGICAL DESIGN.
TREAT PACKAGES AS A HIERARCHY EVEN IF
THEY’RE REPRESENTED FLAT.
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline
 
io.shwitter.user (part of)
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline
 
io.shwitter.user
io.shwitter.user.registration (part of)
io.shwitter.user.profile
io.shwitter.timeline
 
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile (part of)
io.shwitter.timeline
 
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline (part of)
 
USE PACKAGES TO GROUP FUNCTIONALLY-
RELATED ARTIFACTS. DO NOT GROUP
ARTIFACTS THAT DO THE SAME THING, BUT
ARE DIFFERENT BY NATURE.
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
io.shwitter.controller
io.shwitter.dao
io.shwitter.domain
io.shwitter.services
io.shwitter.exceptions
io.shwitter.user
io.shwitter.user.registration
io.shwitter.user.profile
io.shwitter.timeline
 
- ABILITY TO DISTRIBUTE YOUR LAYERS OVER MULTIPLE PHYSICAL TIERS (HA-HA)
- ABILITY TO DISTRIBUTE YOUR LAYERS OVER MULTIPLE PHYSICAL TIERS (HA-HA)
- DECOUPLING / ABSTRACTING FOR EXHANGEABILITY (HA-HA)
- ABILITY TO DISTRIBUTE YOUR LAYERS OVER MULTIPLE PHYSICAL TIERS (HA-HA)
- DECOUPLING / ABSTRACTING FOR EXHANGEABILITY (HA-HA)
- DECOUPLING / ABSTRACTING FOR INDEPENDENT EVOLUTION (HA-HA)
- ABILITY TO DISTRIBUTE YOUR LAYERS OVER MULTIPLE PHYSICAL TIERS (HA-HA)
- DECOUPLING / ABSTRACTING FOR EXHANGEABILITY (HA-HA)
- DECOUPLING / ABSTRACTING FOR INDEPENDENT EVOLUTION (HA-HA)
- DECOUPLING FOR REUSE (HA-HA)
- ABILITY TO DISTRIBUTE YOUR LAYERS OVER MULTIPLE PHYSICAL TIERS (HA-HA)
- DECOUPLING / ABSTRACTING FOR EXHANGEABILITY (HA-HA)
- DECOUPLING / ABSTRACTING FOR INDEPENDENT EVOLUTION (HA-HA)
- DECOUPLING FOR REUSE (HA-HA)
- SEPARATION OF CONCERNS (IS PARTICULAR LAYER OUR CONCERN?)
- ABILITY TO DISTRIBUTE YOUR LAYERS OVER MULTIPLE PHYSICAL TIERS (HA-HA)
- DECOUPLING / ABSTRACTING FOR EXHANGEABILITY (HA-HA)
- DECOUPLING / ABSTRACTING FOR INDEPENDENT EVOLUTION (HA-HA)
- DECOUPLING FOR REUSE (HA-HA)
- SEPARATION OF CONCERNS (IS PARTICULAR LAYER OUR CONCERN?)
- RELATED STUFF CO-LOCATION (ARE DAOS REALLY RELATED?)
- ABILITY TO DISTRIBUTE YOUR LAYERS OVER MULTIPLE PHYSICAL TIERS (HA-HA)
- DECOUPLING / ABSTRACTING FOR EXHANGEABILITY (HA-HA)
- DECOUPLING / ABSTRACTING FOR INDEPENDENT EVOLUTION (HA-HA)
- DECOUPLING FOR REUSE (HA-HA)
- SEPARATION OF CONCERNS (IS PARTICULAR LAYER OUR CONCERN?)
- RELATED STUFF CO-LOCATION (ARE DAOS REALLY RELATED?)
- CONSTRAINT ENFORCEMENT (IS THERE A BETTER WAY?)
APPLY SERVICE-ORIENTED MINDSET TO
SOFTWARE STRUCTURE.
LAYERING IS YOUR SERVICE'S DETAIL AND IS
INTERNAL TO THE SERVICE.
GROUP TIGHTLY COUPLED CLASSES
TOGETHER. IF CLASSES THAT CHANGE
TOGETHER ARE IN THE SAME PACKAGE, THEN
THE IMPACT OF CHANGE IS LOCALIZED.
- THE COMMON CLOSURE PRINCIPLE
MAKE PACKAGES HIGHLY COHESIVE BY
FOLLOWING SINGLE RESPONSIBILITY
PRINCIPLE.
io.shwitter.user.registration
io.shwitter.user.notifications
io.shwitter.user.profile
io.shwitter.user.profile.blocking
io.shwitter.user.registration
io.shwitter.user.notifications
io.shwitter.user.profile
io.shwitter.user.profile.blocking
io.shwitter.user :(
 
KEEP PACKAGES LOOSELY COUPLED, IDEALLY
– COMPLETELY INDEPENDENT. REFLECTION
DOESN’T COUNT.
package io.shwitter.user
@Entity
class User {
// name, password etc.
}
package io.shwitter.timeline
@Entity
class Timeline {
@OneToOne User user;
}
package io.shwitter.user
@Embeddable
class UserId {
Long value;
}
package io.shwitter.timeline
@Entity
class Timeline {
@Embedded UserId userId;
}
PROVIDE SLIM PACKAGE INTERFACE AND HIDE
IMPLEMENTATION DETAILS.
AVOID DEPENDENCY MAGNETS. SOMETIMES
DUPLICATION IS NOT THAT EVIL.
MANAGE RELATIONSHIPS. EVERY
DEPENDENCY ARROW HAS A REASON.
FINDBUGS V1.0 - A GREAT START
FINDBUGS V1.1 – IMPERFECTION CREEPS IN
FINDBUGS V1.2 – IMPERFECTION TAKES HOLD
FINDBUGS V1.3 – CHAOS BEGINS
FINDBUGS V1.4 – EXPLOSION
THE DEPENDENCIES BETWEEN PACKAGES
MUST NOT FORM CYCLES. BURN BI-
DIRECTIONAL DEPENDENCES IN FIRE.
HOW?
MERGING
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier {
void notify(User user) {}
}
MERGING - REPACKAGING
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
class RegistrationNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION - REFACTORING STEP 1
package io.shwitter.user
class User {
void register(RegistrationNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier implements UserNotifier {
void notify(User user) {}
}
interface UserNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION - REFACTORING STEP 2
package io.shwitter.user
class User {
void register(UserNotifier notifier) {}
}
package io.shwitter.user.notify
class RegistrationNotifier implements UserNotifier {
void notify(User user) {}
}
interface UserNotifier {
void notify(User user) {}
}
DEPENDENCY INVERSION - REFACTORING STEP 3
package io.shwitter.user
class User {
void register(UserNotifier notifier) {}
}
interface UserNotifier {
void notify(User user) {}
}
package io.shwitter.user.notify
class RegistrationNotifier implements UserNotifier {
void notify(User user) {}
}
ESCALATION
package io.shwitter.user
class User {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
ESCALATION - REFACTORING STEP 1
package io.shwitter.user
class User {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
package io.shwitter.user.registration
class Registrator {
void register(User user, Notifier n) {}
ESCALATION - REFACTORING STEP 2
package io.shwitter.user
class User {
void register() { }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
package io.shwitter.user.registration
class Registrator {
void register(User user, Notifier n) { n.notify(user); }
ESCALATION - REFACTORING STEP 3
package io.shwitter.user
class User {
void register() { }
}
package io.shwitter.user.notify
class Notifier {
void notify(String emailAddress) { sendEmailTo(emailAddress); }
}
package io.shwitter.user.registration
class Registrator {
void register(User user, Notifier n) { n.notify(user.email()); }
DEMOTION
package io.shwitter.user
class User {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
DEMOTION - REFACTORING STEP 1
package io.shwitter.user
class User implements EmailHolder {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(User user) { sendEmailTo(user.email()); }
}
package io.shwitter.emailer
interface EmailHolder {
String email();
DEMOTION - REFACTORING STEP 2
package io.shwitter.user
class User implements EmailHolder {
void register(Notifier n) { n.notify(this); }
}
package io.shwitter.user.notify
class Notifier {
void notify(EmailHolder emailHolder) { sendEmailTo(emailHolder.email()
}
package io.shwitter.emailer
interface EmailHolder {
String email();
TOOLS
OO Design Principles & Metrics, Jason Gorman http://goo.gl/RTW9GT
The Economics of Software Design, J.B. Rainsberger http://goo.gl/ra7Q8Q
SOLID Principles, Eduards Sizovs http://goo.gl/Rpxavd
Designing Object-Oriented Software, Jouni Smed http://goo.gl/iyE1R2
Grand Unified Theory Of Software Design, Jim Weirich http://goo.gl/ASqyAs
Fun With Modules, Kirk Knoernschild http://goo.gl/i8jx8Y
Patterns of Modular Architecture http://goo.gl/yFqmZO
Let’s turn packages into a module system! http://goo.gl/Mzco8F
MORE
EITHER YOU WORK TO CREATE A
SOFTWARE STRUCTURE OR YOU DON'T.
EITHER WAY A STRUCTURE WILL EMERGE.
@EDUARDSI
THANK YOU
Architecting Well-Structured Java Applications

Weitere ähnliche Inhalte

Ähnlich wie Architecting Well-Structured Java Applications

Install openstack
Install openstackInstall openstack
Install openstack어형 이
 
Os gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamOs gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamThuy_Dang
 
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
 SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUESVMware Tanzu
 
Reactive Polyglot Microservices with OpenShift and Vert.x
Reactive Polyglot Microservices with OpenShift and Vert.xReactive Polyglot Microservices with OpenShift and Vert.x
Reactive Polyglot Microservices with OpenShift and Vert.xReactivesummit
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
 
Realtime webapp with node.js
Realtime webapp with node.jsRealtime webapp with node.js
Realtime webapp with node.jsrobin_sy
 
Object Design - Part 1
Object Design - Part 1Object Design - Part 1
Object Design - Part 1Dhaval Dalal
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Oliver Gierke
 
From ci to cd - LavaJug 2012
From ci to cd  - LavaJug 2012From ci to cd  - LavaJug 2012
From ci to cd - LavaJug 2012Henri Gomez
 
How to Build & Develop Responsive Open Learning Environments with the ROLE SDK
How to Build & Develop Responsive Open Learning Environments with the ROLE SDKHow to Build & Develop Responsive Open Learning Environments with the ROLE SDK
How to Build & Develop Responsive Open Learning Environments with the ROLE SDKDominik Renzel
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wikiyaranusa
 
Storytelling techniques for product documentation
Storytelling techniques for product documentationStorytelling techniques for product documentation
Storytelling techniques for product documentationLesia Zasadna
 
SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...
SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...
SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...South Tyrol Free Software Conference
 
KKBOX WWDC17 Notification and Autolayout - Jefferey
KKBOX WWDC17 Notification and Autolayout - JeffereyKKBOX WWDC17 Notification and Autolayout - Jefferey
KKBOX WWDC17 Notification and Autolayout - JeffereyLiyao Chen
 

Ähnlich wie Architecting Well-Structured Java Applications (20)

JavaCro'15 - Architecting well-structured Java applications - Eduards Sizovs
JavaCro'15 - Architecting well-structured Java applications - Eduards SizovsJavaCro'15 - Architecting well-structured Java applications - Eduards Sizovs
JavaCro'15 - Architecting well-structured Java applications - Eduards Sizovs
 
Install openstack
Install openstackInstall openstack
Install openstack
 
Introduction to CDI
Introduction to CDIIntroduction to CDI
Introduction to CDI
 
Os gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamOs gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC team
 
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
 SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
SPRING BOOT DANS UN CONTAINER OUTILS ET PRATIQUES
 
Reactive Polyglot Microservices with OpenShift and Vert.x
Reactive Polyglot Microservices with OpenShift and Vert.xReactive Polyglot Microservices with OpenShift and Vert.x
Reactive Polyglot Microservices with OpenShift and Vert.x
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
 
Programming by imitation
Programming by imitationProgramming by imitation
Programming by imitation
 
Realtime webapp with node.js
Realtime webapp with node.jsRealtime webapp with node.js
Realtime webapp with node.js
 
Weapons for Boilerplate Destruction
Weapons for Boilerplate DestructionWeapons for Boilerplate Destruction
Weapons for Boilerplate Destruction
 
Don't screw it up! How to build durable API
Don't screw it up! How to build durable API Don't screw it up! How to build durable API
Don't screw it up! How to build durable API
 
Object Design - Part 1
Object Design - Part 1Object Design - Part 1
Object Design - Part 1
 
Whoops! Where did my architecture go?
Whoops! Where did my architecture go?Whoops! Where did my architecture go?
Whoops! Where did my architecture go?
 
From ci to cd - LavaJug 2012
From ci to cd  - LavaJug 2012From ci to cd  - LavaJug 2012
From ci to cd - LavaJug 2012
 
How to Build & Develop Responsive Open Learning Environments with the ROLE SDK
How to Build & Develop Responsive Open Learning Environments with the ROLE SDKHow to Build & Develop Responsive Open Learning Environments with the ROLE SDK
How to Build & Develop Responsive Open Learning Environments with the ROLE SDK
 
Erp 2.50 openbravo environment installation openbravo-wiki
Erp 2.50 openbravo environment installation   openbravo-wikiErp 2.50 openbravo environment installation   openbravo-wiki
Erp 2.50 openbravo environment installation openbravo-wiki
 
Storytelling techniques for product documentation
Storytelling techniques for product documentationStorytelling techniques for product documentation
Storytelling techniques for product documentation
 
Android - Anatomy of android elements & layouts
Android - Anatomy of android elements & layoutsAndroid - Anatomy of android elements & layouts
Android - Anatomy of android elements & layouts
 
SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...
SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...
SFScon21 - Carlo Piana - Alberto Pianon - Aliens4friends: make yourself an al...
 
KKBOX WWDC17 Notification and Autolayout - Jefferey
KKBOX WWDC17 Notification and Autolayout - JeffereyKKBOX WWDC17 Notification and Autolayout - Jefferey
KKBOX WWDC17 Notification and Autolayout - Jefferey
 

Mehr von Eduards Sizovs

Continuous Delivery (The newest)
Continuous Delivery (The newest)Continuous Delivery (The newest)
Continuous Delivery (The newest)Eduards Sizovs
 
Software Craftsmanship Essentials
Software Craftsmanship EssentialsSoftware Craftsmanship Essentials
Software Craftsmanship EssentialsEduards Sizovs
 
Micro Service Architecture
Micro Service ArchitectureMicro Service Architecture
Micro Service ArchitectureEduards Sizovs
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural AnalysisEduards Sizovs
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural AnalysisEduards Sizovs
 

Mehr von Eduards Sizovs (8)

Continuous Delivery (The newest)
Continuous Delivery (The newest)Continuous Delivery (The newest)
Continuous Delivery (The newest)
 
Software Craftsmanship Essentials
Software Craftsmanship EssentialsSoftware Craftsmanship Essentials
Software Craftsmanship Essentials
 
Micro Service Architecture
Micro Service ArchitectureMicro Service Architecture
Micro Service Architecture
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural Analysis
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
SOLID
SOLIDSOLID
SOLID
 
Introduction to DDD
Introduction to DDDIntroduction to DDD
Introduction to DDD
 
Code Structural Analysis
Code Structural AnalysisCode Structural Analysis
Code Structural Analysis
 

Kürzlich hochgeladen

Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....ShaimaaMohamedGalal
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 

Kürzlich hochgeladen (20)

Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Clustering techniques data mining book ....
Clustering techniques data mining book ....Clustering techniques data mining book ....
Clustering techniques data mining book ....
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 

Architecting Well-Structured Java Applications