SlideShare a Scribd company logo
1 of 74
Download to read offline
@lukaszchrusciel
Is
Is SOLID
SOLID
dead?
dead?
Let's discuss reusable
Let's discuss reusable
software design
software design
@lukaszchrusciel
@lukaszchrusciel
Context
Context is a King
is a King
@lukaszchrusciel
Story
Story
@lukaszchrusciel
S
Single
ingle
Responsibility
Responsibility
Principle
Principle
@lukaszchrusciel
public function __invoke(string $orderNumber, int $unitId, int $amount,
RefundTypeInterface $refundType): void
{
/** @var OrderInterface|null $order */
$order = $this->orderRepository->findOneByNumber($orderNumber);
Assert::notNull($order);
$remainingTotal = $this->remainingTotalProvider->getTotalLeftToRefund($unitId,
$refundType);
if ($remainingTotal === 0) {
throw UnitAlreadyRefunded::withIdAndOrderNumber($unitId, $orderNumber);
}
$refund = $this->refundFactory->createWithData($order, $unitId, $amount,
$refundType);
$this->refundManager->persist($refund);
$this->refundManager->flush();
}
@lukaszchrusciel
Types of classes
Types of classes
@lukaszchrusciel
Types of classes
Types of classes
Data structures
Data structures
@lukaszchrusciel
Data structures
Data structures
ValueObjects
–
@lukaszchrusciel
Data structures
Data structures
ValueObjects
–
DataTransferObjects
–
@lukaszchrusciel
Data structures
Data structures
ValueObjects
–
DataTransferObjects
–
Models
–
@lukaszchrusciel
Data structures
Data structures
ValueObjects
–
DataTransferObjects
–
Models
–
Entities
–
@lukaszchrusciel
Data structures
Data structures
readonly class BlameCart
{
public function __construct(
public string $shopUserEmail,
public string $orderTokenValue
) {
}
}
@lukaszchrusciel
Types of classes
Types of classes
Data structures
Data structures
Calculations
Calculations
@lukaszchrusciel
Calculations
Calculations
F(X) →
F(X) → Y
Y
@lukaszchrusciel
Calculations (pure functions)
Calculations (pure functions)
final class PerUnitRateCalculator implements CalculatorInterface
{
public function calculate(ShipmentInterface $subject, array
$configuration): int
{
return (int) ($configuration['amount'] * $subject-
>getShippingUnitCount());
}
public function getType(): string
{
return 'per_unit_rate';
}
}
@lukaszchrusciel
Calculations (impure functions)
Calculations (impure functions)
final class PromotionApplicator implements PromotionApplicatorInterface
{
public function __construct(private ServiceRegistryInterface $registry)
{
}
public function apply(PromotionSubjectInterface $subject, PromotionInterface $promotion): void
{
$applyPromotion = false;
foreach ($promotion->getActions() as $action) {
$result = $this->registry->get($action->getType())->execute($subject, $action-
>getConfiguration(), $promotion);
$applyPromotion = $applyPromotion || $result;
}
if ($applyPromotion) {
$subject->addPromotion($promotion);
}
}
}
@lukaszchrusciel
Calculations (impure functions)
Calculations (impure functions)
final class PromotionApplicator implements PromotionApplicatorInterface
{
public function __construct(private ServiceRegistryInterface $registry)
{
}
public function apply(PromotionSubjectInterface $subject, PromotionInterface $promotion): void
{
$applyPromotion = false;
foreach ($promotion->getActions() as $action) {
$result = $this->registry->get($action->getType())->execute($subject, $action-
>getConfiguration(), $promotion);
$applyPromotion = $applyPromotion || $result;
}
if ($applyPromotion) {
$subject->addPromotion($promotion);
}
}
}
@lukaszchrusciel
Types of classes
Types of classes
Data structures
Data structures
Calculations
Calculations
Side effects
Side effects
@lukaszchrusciel
Communication outside of the local
Communication outside of the local
scope
scope
Mailing
–
@lukaszchrusciel
Communication outside of the local
Communication outside of the local
scope
scope
Mailing
–
Transaction committing
–
@lukaszchrusciel
Communication outside of the local
Communication outside of the local
scope
scope
Mailing
–
Transaction committing
–
Making request
–
@lukaszchrusciel
public function __invoke(string $orderNumber, int $unitId, int $amount,
RefundTypeInterface $refundType): void
{
/** @var OrderInterface|null $order */
$order = $this->orderRepository->findOneByNumber($orderNumber);
Assert::notNull($order);
$remainingTotal = $this->remainingTotalProvider->getTotalLeftToRefund($unitId,
$refundType);
if ($remainingTotal === 0) {
throw UnitAlreadyRefunded::withIdAndOrderNumber($unitId, $orderNumber);
}
$refund = $this->refundFactory->createWithData($order, $unitId, $amount,
$refundType);
$this->refundManager->persist($refund);
$this->refundManager->flush();
}
@lukaszchrusciel
Communication outside of the local scope
Communication outside of the local scope
public function __invoke(string $orderNumber, int $unitId, int $amount, RefundTypeInterface
$refundType): void
{
$order = $this->orderRepository->findOneByNumber($orderNumber);
$remainingTotal = $this->remainingTotalProvider->getTotalLeftToRefund($unitId, $refundType);
if ($remainingTotal === 0) {
throw UnitAlreadyRefunded::withIdAndOrderNumber($unitId, $orderNumber);
}
$refund = $this->refundFactory->createWithData(
$order,
$unitId,
$amount,
$refundType
);
$this->refundManager->persist($refund);
$this->refundManager->flush();
}
@lukaszchrusciel
Communication outside of the local scope
Communication outside of the local scope
public function __invoke(string $orderNumber, int $unitId, int $amount, RefundTypeInterface
$refundType): void
{
$order = $this->orderRepository->findOneByNumber($orderNumber);
$remainingTotal = $this->remainingTotalProvider->getTotalLeftToRefund($unitId, $refundType);
if ($remainingTotal === 0) {
throw UnitAlreadyRefunded::withIdAndOrderNumber($unitId, $orderNumber);
}
$refund = $this->refundFactory->createWithData(
$order,
$unitId,
$amount,
$refundType
);
return $refund;
}
@lukaszchrusciel
@lukaszchrusciel
O
Open-Close
pen-Close
Principle
Principle
@lukaszchrusciel
private function getRefundUnitTotal(
int $id,
RefundTypeInterface $refundType
): int
@lukaszchrusciel
private function getRefundUnitTotal(int $id,
RefundTypeInterface $refundType): int
{
if ($refundType->getValue() ===
RefundTypeInterface::ORDER_ITEM_UNIT) {
// calculation
return $value;
}
// calculation
return $otherValue;
}
@lukaszchrusciel
private function getRefundUnitTotal(int
$id, RefundTypeInterface $refundType): int
{
$refundUnitTotalProvider = $this-
>totalProviderRegistry->get($refundType-
>getValue());
return $refundUnitTotalProvider-
>getRefundUnitTotal($id);
}
@lukaszchrusciel
protected function configureOptionsNode(ArrayNodeDefinition
$optionsNode): void
{
$optionsNode
->children()
->integerNode('amount')->isRequired()->min(0)->end()
->scalarNode('channel')->cannotBeEmpty()->end()
->scalarNode('customer')->cannotBeEmpty()->end()
->scalarNode('country')->cannotBeEmpty()->end()
->booleanNode('fulfilled')->defaultValue(false)-
>end()
->end()
;
}
@lukaszchrusciel
@lukaszchrusciel
@lukaszchrusciel
@lukaszchrusciel
protected function configureOptionsNode(ArrayNodeDefinition
$optionsNode): void
{
$optionsNode
->children()
->integerNode('amount')->isRequired()->min(0)->end()
->scalarNode('channel')->cannotBeEmpty()->end()
->scalarNode('customer')->cannotBeEmpty()->end()
->scalarNode('country')->cannotBeEmpty()->end()
->booleanNode('fulfilled')->defaultValue(false)-
>end()
->end()
;
}
@lukaszchrusciel
L
Liskov
iskov
Substitution
Substitution
Principle
Principle
@lukaszchrusciel
Behavioural
Behavioural
sub-typing
sub-typing
@lukaszchrusciel
Covariance
Covariance
abstract class Animal
{
}
class Cat extends Animal
{
}
interface AnimalShelter
{
public function adopt(): Animal;
}
class CatShelter implements AnimalShelter
{
public function adopt(): Cat // instead of returning class type Animal, it can return class type Cat
{
return new Cat();
}
}
@lukaszchrusciel
abstract class Animal
{
}
class Cat extends Animal
{
}
interface CatShelter
{
public function adopt(Cat $cat);
}
class AnimalShelter implements CatShelter
{
public function adopt(Animal $animal) // instead of accepting class type Cat, it can
accept any Animal
{
return new Cat();
}
}
@lukaszchrusciel
abstract class Animal
{
}
class Cat extends Animal
{
}
interface CatShelter
{
public function adopt(Animal $cat);
}
class AnimalShelter implements CatShelter
{
public function adopt(Cat $animal) // instead of accepting class type Cat, it can accept any Animal
{
return new Cat();
}
}
Fatal error: Declaration of AnimalShelter::adopt(Cat $animal) must be compatible with
CatShelter::adopt(Animal $cat) in /tmp/preview on line 19
@lukaszchrusciel
interface CalculatorInterface
{
public function
calculate(ShipmentInterface $subject,
array $configuration): int;
public function getType(): string;
}
@lukaszchrusciel
final class PerUnitRateCalculator implements CalculatorInterface
{
public function calculate(ShipmentInterface $subject, array
$configuration): int
{
return (int) ($configuration['amount'] * $subject-
>getShippingUnitCount());
}
public function getType(): string
{
return 'per_unit_rate';
}
}
@lukaszchrusciel
{
/**
* @param array{'amount': int}
$configuration
*/
public function calculate(ShipmentInterface
$subject, array $configuration): int;
public function getType(): string;
}
@lukaszchrusciel
interface CalculatorInterface
{
/**
* @throws
InvalidCalculatorConfigurationException
*/
public function calculate(ShipmentInterface
$subject, array $configuration): int;
public function getType(): string;
}
@lukaszchrusciel
public function configureOptions(OptionsResolver $resolver)
{
parent::configureOptions($resolver);
// some logic
$resolver->setDefined([
'data',
]);
$resolver->setDefaults([
'data_class' => $dataClass,
'empty_data' => $emptyData,
'...' =>
]);
@lukaszchrusciel
interface CalculatorInterface
{
/**
* @throws
InvalidCalculatorConfigurationException
*/
public function calculate(Configuration
$configuration): int;
public function getType(): string;
}
@lukaszchrusciel
$resources = $this->resourcesResolver-
>getResources($requestConfiguration, $repository);
$paginationLimits = [];
if ($resources instanceof ResourceGridView) {
$paginator = $resources->getData();
$paginationLimits = $resources-
>getDefinition()->getLimits();
} else {
$paginator = $resources;
}
@lukaszchrusciel
I
Interface
nterface
Segregation
Segregation
Principle
Principle
@lukaszchrusciel
interface OrderRepositoryInterface extends BaseOrderRepositoryInterface
{
public function createListQueryBuilder(): QueryBuilder;
public function createSearchListQueryBuilder(): QueryBuilder;
public function createByCustomerIdQueryBuilder($customerId): QueryBuilder;
public function createByCustomerAndChannelIdQueryBuilder($customerId, $channelId): QueryBuilder;
public function countByCustomerAndCoupon(CustomerInterface $customer, PromotionCouponInterface $coupon): int;
public function countByCustomer(CustomerInterface $customer): int;
public function findOrderById($id): ?OrderInterface;
public function findByCustomer(CustomerInterface $customer): array;
public function findForCustomerStatistics(CustomerInterface $customer): array;
public function findOneForPayment($id): ?OrderInterface;
public function findOneByNumberAndCustomer(string $number, CustomerInterface $customer): ?OrderInterface;
public function findCartByChannel($id, ChannelInterface $channel): ?OrderInterface;
public function findLatestCartByChannelAndCustomer(ChannelInterface $channel, CustomerInterface $customer): ?OrderInterface;
public function findLatestNotEmptyCartByChannelAndCustomer(ChannelInterface $channel, CustomerInterface $customer): ?OrderInterface;
public function getTotalSalesForChannel(ChannelInterface $channel): int;
public function getTotalPaidSalesForChannel(ChannelInterface $channel): int;
public function getTotalPaidSalesForChannelInPeriod(ChannelInterface $channel, DateTimeInterface $startDate, DateTimeInterface $endDate): int;
public function countFulfilledByChannel(ChannelInterface $channel): int;
public function countPaidByChannel(ChannelInterface $channel): int;
public function countPaidForChannelInPeriod(ChannelInterface $channel, DateTimeInterface $startDate, DateTimeInterface $endDate): int;
public function findLatestInChannel(int $count, ChannelInterface $channel): array;
public function findOrdersUnpaidSince(DateTimeInterface $terminalDate, ?int $limit = null): array;
public function findCartForSummary($id): ?OrderInterface;
public function findCartForAddressing($id): ?OrderInterface;
public function findCartForSelectingShipping($id): ?OrderInterface;
public function findCartForSelectingPayment($id): ?OrderInterface;
public function findCartByTokenValue(string $tokenValue): ?BaseOrderInterface;
public function findCartByTokenValueAndChannel(string $tokenValue, ChannelInterface $channel): ?BaseOrderInterface;
}
@lukaszchrusciel
OrderRepositoryInterface extends
BaseOrderRepositoryInterface
@lukaszchrusciel
D
Dependency
ependency
Inversion
Inversion
Principle
Principle
@lukaszchrusciel
public function __invoke(VerifyCustomerAccount $command): JsonResponse
{
/** @var UserInterface|null $user */
$user = $this->shopUserRepository->findOneBy(['emailVerificationToken' =>
$command->token]);
if (null === $user) {
throw new InvalidArgumentException(
sprintf('There is no shop user with %s email verification token',
$command->token),
);
}
$user->setVerifiedAt(new DateTime());
$user->setEmailVerificationToken(null);
$user->enable();
return new JsonResponse([]);
}
@lukaszchrusciel
public function __construct(
private RepositoryInterface $shopUserRepository,
private DateTimeProviderInterface $calendar,
) {
}
public function __invoke(VerifyCustomerAccount $command): JsonResponse
{
/** @var UserInterface|null $user */
$user = $this->shopUserRepository->findOneBy(['emailVerificationToken' => $command->token]);
if (null === $user) {
throw new InvalidArgumentException(
sprintf('There is no shop user with %s email verification token', $command->token),
);
}
$user->setVerifiedAt($this->calendar->now());
$user->setEmailVerificationToken(null);
$user->enable();
return new JsonResponse([]);
}
@lukaszchrusciel
Sylius/Calendar
–
PSR-20 Clock interface +
Symfony/Clock
–
@lukaszchrusciel
@lukaszchrusciel
@lukaszchrusciel
@lukaszchrusciel
FINAL
FINAL
@lukaszchrusciel
What the horse is, everyone can see
1
ks. Benedykta Chmielowskiego
1.
@lukaszchrusciel
What the address is, everyone can
see 1
Łukasz Chruściel
1.
@lukaszchrusciel
Łukasz Chruściel
Wólczańska 125
90-521 Łódź
Poland
@lukaszchrusciel
Name Surename
Street StreetNumber (?Flat)
PostCode City
Country
@lukaszchrusciel
Antigua and Barbuda
–
Aruba
–
Ascension island
–
Bahamas
–
Belize
–
Benin
–
Botswana
–
Bolivia
–
Bonaire, Sint Eustatius and Saba
–
Burkina Faso
–
Burundi
–
Cameroon
–
Central African Republic
–
Comoros
–
Congo
–
Congo the Democratic Republic of the
–
Cook Islands
–
Cote d’Ivoire
–
Curaçao
–
Djibouti
–
Dominica
–
East Timor
–
Equatorial Guinea
–
Eritrea
–
Fiji
–
French Southern Territories
–
Gambia
–
Gamon
–
Ghana
–
Grenada
–
Guyana
–
Heard and McDonald Islands
–
Hong Kong
–
Kiribati
–
Libya
–
Macau
–
Malawi
–
Mali
–
Mauritania
–
Nauru
–
Netherlands Antilles
–
Niue
–
North Korea
–
Qatar
–
Rwanda
–
Saint Kitts and Nevis
–
Sao Tome and Principe
–
Seychelles
–
Sierra Leone
–
Solomon Islands
–
Suriname
–
Syria
–
Timor-Leste
–
Togo
–
Tokelau
–
Tonga
–
Tuvalu
–
Uganda
–
United Arab Emirates
–
Vanuatu
–
Yemen
–
Zimbabwe
–
@lukaszchrusciel
Antigua and Barbuda
–
Aruba
–
Ascension island
–
Bahamas
–
Belize
–
Benin
–
Botswana
–
Bolivia
–
Bonaire, Sint Eustatius and Saba
–
Burkina Faso
–
Burundi
–
Cameroon
–
Central African Republic
–
Comoros
–
Congo
–
Congo the Democratic Republic of the
–
Cook Islands
–
Cote d’Ivoire
–
Curaçao
–
Djibouti
–
Dominica
–
East Timor
–
Equatorial Guinea
–
Eritrea
–
Fiji
–
French Southern Territories
–
Gambia
–
Gamon
–
Ghana
–
Grenada
–
Guyana
–
Heard and McDonald Islands
–
Hong Kong
Hong Kong
–
Kiribati
–
Libya
–
Macau
Macau
–
Malawi
–
Mali
–
Mauritania
–
Nauru
–
Netherlands Antilles
–
Niue
–
North Korea
–
Qatar
Qatar
–
Rwanda
–
Saint Kitts and Nevis
–
Sao Tome and Principe
–
Seychelles
–
Sierra Leone
–
Solomon Islands
–
Suriname
–
Syria
–
Timor-Leste
–
Togo
–
Tokelau
–
Tonga
–
Tuvalu
–
Uganda
–
United Arab Emirates
United Arab Emirates
–
Vanuatu
–
Yemen
–
Zimbabwe
–
@lukaszchrusciel
Name Surename
Street StreetNumber (?Flat)
PostCode City
Country
@lukaszchrusciel
Outro
Outro
@lukaszchrusciel
SOLID works perfectly
SOLID works perfectly in
in
the context of reusable
the context of reusable
software
software
@lukaszchrusciel
SOLID gives useful
SOLID gives useful
directions how to design
directions how to design
any code
any code
@lukaszchrusciel
Benefits of these
Benefits of these
approaches
approaches
@lukaszchrusciel
Is there anything
Is there anything
more in
more in CUPID
CUPID?
?
@lukaszchrusciel
Resources
Resources
https://symfonycasts.com/screencast/solid/
https://symfonycasts.com/screencast/solid/
https://stackoverflow.blog/2021/11/01/why-solid-principles-are-still-the-foundation-for-modern-
software-architecture/
–
https://dannorth.net/2022/02/10/cupid-for-joyful-coding/
–
https://speakerdeck.com/tastapod/why-every-element-of-solid-is-wrong
–
https://www.reddit.com/r/programming/comments/5qto27/why_every_element_of_solid_is_wrong/
–
https://solid-is-not-solid.com/
–
Norbert Wójtowicz (@pithyless) - Functional Programming
–
https://www.youtube.com/watch?v=-Z-17h3jG0A
–
@lukaszchrusciel
Takeaways
Takeaways If you see clickbait title with
If you see clickbait title with
question in it
question in it
Then the answer is always no
no
Functional programming may
Functional programming may
help us
help us
Deliver better ObjectOriented code
SOLID is a solid fundament for
SOLID is a solid fundament for
packages that will be reused by
packages that will be reused by
other devs
other devs
But end applications may benefit from it as well
Doing eCommerce? Give a
Doing eCommerce? Give a
Sylius try ;)
Sylius try ;)
Don't be discouraged by this presentation
@lukaszchrusciel
@lukaszchrusciel
Thank you!
Thank you!

More Related Content

What's hot

JavaScript
JavaScriptJavaScript
JavaScriptSunil OS
 
Chap2: lescollections
Chap2: lescollections Chap2: lescollections
Chap2: lescollections Sana REFAI
 
Kotlin - scope functions and collections
Kotlin - scope functions and collectionsKotlin - scope functions and collections
Kotlin - scope functions and collectionsWei-Shen Lu
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLMark Wong
 
インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by 丹田 賢
インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by  丹田 賢インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by  丹田 賢
インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by 丹田 賢CODE BLUE
 
MySQL Database Architectures - 2020-10
MySQL Database Architectures -  2020-10MySQL Database Architectures -  2020-10
MySQL Database Architectures - 2020-10Kenny Gryp
 
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingJohn De Goes
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerMydbops
 
Cn os-lp lab manual k.roshan
Cn os-lp lab manual k.roshanCn os-lp lab manual k.roshan
Cn os-lp lab manual k.roshanriturajj
 
Hibernate
Hibernate Hibernate
Hibernate Sunil OS
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]MongoDB
 
Implementing the IO Monad in Scala
Implementing the IO Monad in ScalaImplementing the IO Monad in Scala
Implementing the IO Monad in ScalaHermann Hueck
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkCaserta
 
Creating Beautiful Dashboards with Grafana and ClickHouse
Creating Beautiful Dashboards with Grafana and ClickHouseCreating Beautiful Dashboards with Grafana and ClickHouse
Creating Beautiful Dashboards with Grafana and ClickHouseAltinity Ltd
 
Java 8 lambda expressions
Java 8 lambda expressionsJava 8 lambda expressions
Java 8 lambda expressionsLogan Chien
 
MongoDB Tick Data Presentation
MongoDB Tick Data PresentationMongoDB Tick Data Presentation
MongoDB Tick Data PresentationMongoDB
 

What's hot (20)

JavaScript
JavaScriptJavaScript
JavaScript
 
Chap2: lescollections
Chap2: lescollections Chap2: lescollections
Chap2: lescollections
 
JUnit 4
JUnit 4JUnit 4
JUnit 4
 
Kotlin - scope functions and collections
Kotlin - scope functions and collectionsKotlin - scope functions and collections
Kotlin - scope functions and collections
 
Optional in Java 8
Optional in Java 8Optional in Java 8
Optional in Java 8
 
pg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQLpg_proctab: Accessing System Stats in PostgreSQL
pg_proctab: Accessing System Stats in PostgreSQL
 
インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by 丹田 賢
インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by  丹田 賢インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by  丹田 賢
インサイドShell:.NETハッキング技術を応用したPowerShell可視性の向上 by 丹田 賢
 
MySQL Database Architectures - 2020-10
MySQL Database Architectures -  2020-10MySQL Database Architectures -  2020-10
MySQL Database Architectures - 2020-10
 
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional ProgrammingZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
ZIO Schedule: Conquering Flakiness & Recurrence with Pure Functional Programming
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizer
 
Cn os-lp lab manual k.roshan
Cn os-lp lab manual k.roshanCn os-lp lab manual k.roshan
Cn os-lp lab manual k.roshan
 
7.1. procedimientos almacenados
7.1.  procedimientos almacenados7.1.  procedimientos almacenados
7.1. procedimientos almacenados
 
Hibernate
Hibernate Hibernate
Hibernate
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
Implementing the IO Monad in Scala
Implementing the IO Monad in ScalaImplementing the IO Monad in Scala
Implementing the IO Monad in Scala
 
Gestion comptes bancaires Spring boot
Gestion comptes bancaires Spring bootGestion comptes bancaires Spring boot
Gestion comptes bancaires Spring boot
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
Creating Beautiful Dashboards with Grafana and ClickHouse
Creating Beautiful Dashboards with Grafana and ClickHouseCreating Beautiful Dashboards with Grafana and ClickHouse
Creating Beautiful Dashboards with Grafana and ClickHouse
 
Java 8 lambda expressions
Java 8 lambda expressionsJava 8 lambda expressions
Java 8 lambda expressions
 
MongoDB Tick Data Presentation
MongoDB Tick Data PresentationMongoDB Tick Data Presentation
MongoDB Tick Data Presentation
 

Similar to SymfonyLive Online 2023 - Is SOLID dead? .pdf

You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix itRafael Dohms
 
Your code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnConYour code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnConRafael Dohms
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design PatternsHugo Hamon
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolveXSolve
 
Command Bus To Awesome Town
Command Bus To Awesome TownCommand Bus To Awesome Town
Command Bus To Awesome TownRoss Tuck
 
The Art of Transduction
The Art of TransductionThe Art of Transduction
The Art of TransductionDavid Stockton
 
Oneal perl-code-to-extract-from-voyager
Oneal perl-code-to-extract-from-voyagerOneal perl-code-to-extract-from-voyager
Oneal perl-code-to-extract-from-voyagerENUG
 
Writing Sensible Code
Writing Sensible CodeWriting Sensible Code
Writing Sensible CodeAnis Ahmad
 
Why async and functional programming in PHP7 suck and how to get overr it?
Why async and functional programming in PHP7 suck and how to get overr it?Why async and functional programming in PHP7 suck and how to get overr it?
Why async and functional programming in PHP7 suck and how to get overr it?Lucas Witold Adamus
 
PHP for Python Developers
PHP for Python DevelopersPHP for Python Developers
PHP for Python DevelopersCarlos Vences
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mockingKonstantin Kudryashov
 
Introduction to DI(C)
Introduction to DI(C)Introduction to DI(C)
Introduction to DI(C)Radek Benkel
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Leonardo Proietti
 
Desymfony2013.gonzalo123
Desymfony2013.gonzalo123Desymfony2013.gonzalo123
Desymfony2013.gonzalo123Gonzalo Ayuso
 
Command-Oriented Architecture
Command-Oriented ArchitectureCommand-Oriented Architecture
Command-Oriented ArchitectureLuiz Messias
 
Symfony2 - extending the console component
Symfony2 - extending the console componentSymfony2 - extending the console component
Symfony2 - extending the console componentHugo Hamon
 
Your code sucks, let's fix it - PHP Master Series 2012
Your code sucks, let's fix it - PHP Master Series 2012Your code sucks, let's fix it - PHP Master Series 2012
Your code sucks, let's fix it - PHP Master Series 2012Rafael Dohms
 

Similar to SymfonyLive Online 2023 - Is SOLID dead? .pdf (20)

You code sucks, let's fix it
You code sucks, let's fix itYou code sucks, let's fix it
You code sucks, let's fix it
 
Your code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnConYour code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnCon
 
Database Design Patterns
Database Design PatternsDatabase Design Patterns
Database Design Patterns
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolve
 
Command Bus To Awesome Town
Command Bus To Awesome TownCommand Bus To Awesome Town
Command Bus To Awesome Town
 
The Art of Transduction
The Art of TransductionThe Art of Transduction
The Art of Transduction
 
Oneal perl-code-to-extract-from-voyager
Oneal perl-code-to-extract-from-voyagerOneal perl-code-to-extract-from-voyager
Oneal perl-code-to-extract-from-voyager
 
linieaire regressie
linieaire regressielinieaire regressie
linieaire regressie
 
Writing Sensible Code
Writing Sensible CodeWriting Sensible Code
Writing Sensible Code
 
Why async and functional programming in PHP7 suck and how to get overr it?
Why async and functional programming in PHP7 suck and how to get overr it?Why async and functional programming in PHP7 suck and how to get overr it?
Why async and functional programming in PHP7 suck and how to get overr it?
 
PHP for Python Developers
PHP for Python DevelopersPHP for Python Developers
PHP for Python Developers
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
 
Introduction to DI(C)
Introduction to DI(C)Introduction to DI(C)
Introduction to DI(C)
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5
 
Desymfony2013.gonzalo123
Desymfony2013.gonzalo123Desymfony2013.gonzalo123
Desymfony2013.gonzalo123
 
Command-Oriented Architecture
Command-Oriented ArchitectureCommand-Oriented Architecture
Command-Oriented Architecture
 
Symfony2 - extending the console component
Symfony2 - extending the console componentSymfony2 - extending the console component
Symfony2 - extending the console component
 
Functional php
Functional phpFunctional php
Functional php
 
Oops in php
Oops in phpOops in php
Oops in php
 
Your code sucks, let's fix it - PHP Master Series 2012
Your code sucks, let's fix it - PHP Master Series 2012Your code sucks, let's fix it - PHP Master Series 2012
Your code sucks, let's fix it - PHP Master Series 2012
 

More from Łukasz Chruściel

Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024  - Need for Speed: Removing speed bumps in API ProjectsConFoo 2024  - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024 - Need for Speed: Removing speed bumps in API ProjectsŁukasz Chruściel
 
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionŁukasz Chruściel
 
SyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfSyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfŁukasz Chruściel
 
Need for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsNeed for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsŁukasz Chruściel
 
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Łukasz Chruściel
 
4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdfŁukasz Chruściel
 
4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdfŁukasz Chruściel
 
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaBoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaŁukasz Chruściel
 
What we've learned designing new Sylius API
What we've learned designing new Sylius APIWhat we've learned designing new Sylius API
What we've learned designing new Sylius APIŁukasz Chruściel
 
How to optimize background processes.pdf
How to optimize background processes.pdfHow to optimize background processes.pdf
How to optimize background processes.pdfŁukasz Chruściel
 
SymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfSymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfŁukasz Chruściel
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationŁukasz Chruściel
 
Dutch php a short tale about state machine
Dutch php   a short tale about state machineDutch php   a short tale about state machine
Dutch php a short tale about state machineŁukasz Chruściel
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machineŁukasz Chruściel
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machineŁukasz Chruściel
 
BDD in practice based on an open source project
BDD in practice based on an open source projectBDD in practice based on an open source project
BDD in practice based on an open source projectŁukasz Chruściel
 
Diversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectDiversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectŁukasz Chruściel
 

More from Łukasz Chruściel (19)

Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024  - Need for Speed: Removing speed bumps in API ProjectsConFoo 2024  - Need for Speed: Removing speed bumps in API Projects
ConFoo 2024 - Need for Speed: Removing speed bumps in API Projects
 
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solutionConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
ConFoo 2024 - Sylius 2.0, top-notch eCommerce for customizable solution
 
SyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdfSyliusCon - Typical pitfalls of Sylius development.pdf
SyliusCon - Typical pitfalls of Sylius development.pdf
 
Need for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API ProjectsNeed for Speed: Removing speed bumps in API Projects
Need for Speed: Removing speed bumps in API Projects
 
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
Worldwide Software Architecture Summit'23 - BDD and why most of us do it wron...
 
4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf4Developers - Rozterki i decyzje.pdf
4Developers - Rozterki i decyzje.pdf
 
4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf4Developers - Sylius CRUD generation revisited.pdf
4Developers - Sylius CRUD generation revisited.pdf
 
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API SyliusaBoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
BoilingFrogs - Rozterki i decyzje. Czego się nauczyliśmy projektując API Syliusa
 
What we've learned designing new Sylius API
What we've learned designing new Sylius APIWhat we've learned designing new Sylius API
What we've learned designing new Sylius API
 
How to optimize background processes.pdf
How to optimize background processes.pdfHow to optimize background processes.pdf
How to optimize background processes.pdf
 
SymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdfSymfonyCon - Dilemmas and decisions..pdf
SymfonyCon - Dilemmas and decisions..pdf
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integration
 
Dutch php a short tale about state machine
Dutch php   a short tale about state machineDutch php   a short tale about state machine
Dutch php a short tale about state machine
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
 
A short tale about state machine
A short tale about state machineA short tale about state machine
A short tale about state machine
 
BDD in practice based on an open source project
BDD in practice based on an open source projectBDD in practice based on an open source project
BDD in practice based on an open source project
 
Diversified application testing based on a Sylius project
Diversified application testing based on a Sylius projectDiversified application testing based on a Sylius project
Diversified application testing based on a Sylius project
 
Why do I love and hate php?
Why do I love and hate php?Why do I love and hate php?
Why do I love and hate php?
 

Recently uploaded

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
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
 
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.
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
(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
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
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.
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
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
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
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
 

Recently uploaded (20)

Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
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...
 
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...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
(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...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
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 ...
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
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
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
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
 

SymfonyLive Online 2023 - Is SOLID dead? .pdf