{"product_id":"138810","title":"Effective Software Design ","description":"\u003ccenter\u003e\u003cdiv style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/tmgdisk01.cafe24.com\/images\/vs\/4172\/sv\/3jXPeMLSzyvDkvJtL1YwvVvUltmMTX.png?v=1765068714\" style=\"max-width:100%;max-height:10px\"\u003e\u003c\/div\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\n\n\u003cdiv style=\"width:95%\"\u003e\n\n\u003cdiv style=\"text-align:center;font-size:30px;font-weight:bolder;line-height:1.6em\"\u003e Effective Software Design \u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"border-bottom:1px;border-bottom-style:dotted;border-color:;padding-bottom:20px\"\u003e\u003ccenter\u003e\u003ctable align=\"center\" width=\"100%\"\u003e\u003ctbody style=\"border:0px\"\u003e\n\n\u003ctr\u003e\u003ctd align=\"center\" style=\"line-height:1.2em;text-align:center;font-size:18px;color:black;font-weight:bold;padding-bottom:20px;\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\u003ctr\u003e\u003ctd style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/image.yes24.com\/goods\/142955749\/XL\" style=\"max-width:100%;height:auto\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/center\u003e\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;{split_style6}padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e Description \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;word-break:break-all;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eBook Introduction\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\u003cdiv\u003e \u003cb\u003eFinding solutions to the challenges of software development from a trade-off perspective!\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Effective Software Design teaches you how to make better decisions about application design, planning, and implementation. \u003cbr\u003eAnalyze real-world scenarios where poor trade-off decisions were made and explain how decisions could have been made differently.\u003cbr\u003e This book presents the pros and cons of various approaches and explores patterns that are always valid in software design.\u003cbr\u003e\u003cbr\u003e You'll understand how code duplication affects the coupling and evolution speed of your system, and how seemingly simple requirements can harbor hidden nuances around date and time information.\u003cbr\u003e Let's explore how to efficiently narrow the optimization scope and ensure consistency in a distributed system, following the 80\/20 Pareto principle.\u003cbr\u003e By applying the author's hard-won experience to your own projects, you can avoid mistakes and adopt a more prudent approach to decision-making.\u003cbr\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv\u003e\u003cul\u003e\u003cli\u003e You can preview some of the book's contents.\u003cbr\u003e \u003cspan\u003ePreview\u003c\/span\u003e\n\n\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\n\u003c\/div\u003e \",\"\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eindex\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e \u003cb\u003e▣ Chapter 1: Introduction\u003c\/b\u003e\u003cbr\u003e \u003cbr\u003e1.1 The consequences of all decisions and patterns\u003cbr\u003e __1.1.1 Unit Test Decisions\u003cbr\u003e __1.1.2 Ratio of unit tests and integration tests\u003cbr\u003e 1.2 Code Design Patterns and Why They Don't Always Work\u003cbr\u003e __1.2.1 Measuring the code\u003cbr\u003e 1.3 Why Architectural Design Patterns Don't Always Work\u003cbr\u003e __1.3.1 Scalability and Resilience\u003cbr\u003e __1.3.2 Development Speed\u003cbr\u003e __1.3.3 Complexity of Microservices\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 2: Code Duplication vs. Flexibility - Code Duplication Isn't Always Bad\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 2.1 Common code and duplication between codebases\u003cbr\u003e __2.1.1 Adding a new business requirement that requires code duplication\u003cbr\u003e __2.1.2 Implementing new business requirements\u003cbr\u003e __2.1.3 Results Evaluation\u003cbr\u003e 2.2 Sharing code between libraries and codebases\u003cbr\u003e __2.2.1 Evaluating the Tradeoffs and Drawbacks of Shared Libraries\u003cbr\u003e __2.2.2 Creating a shared library\u003cbr\u003e 2.3 Extracting code into independent microservices  \u003cbr\u003e__2.3.1 Examining the Tradeoffs and Drawbacks of Independent Services\u003cbr\u003e __2.3.2 Conclusions on Independent Services\u003cbr\u003e 2.4 Improving Loose Coupling with Code Duplication\u003cbr\u003e 2.5 API design using inheritance to reduce duplication\u003cbr\u003e __2.5.1 Extracting the Basic Request Handler\u003cbr\u003e __2.5.2 Examining inheritance and strong coupling\u003cbr\u003e __2.5.3 Examining the Tradeoffs Between Inheritance and Composition\u003cbr\u003e __2.5.4 Examining Inherent and Accidental Duplication\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 3: Exceptions and Error Handling Patterns to Consider in Your Code\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 3.1 Hierarchy of Exceptions\u003cbr\u003e __3.1.1 Catching all exceptions vs. more granular error handling\u003cbr\u003e 3.2 Best practices for handling exceptions in your own code\u003cbr\u003e __3.2.1 Handling Checked Exceptions in Public APIs\u003cbr\u003e __3.2.2 Handling Unchecked Exceptions in Public APIs\u003cbr\u003e 3.3 Anti-patterns to watch out for in exception handling\u003cbr\u003e __3.3.1 Closing resources when an error occurs  \u003cbr\u003e__3.3.2 Anti-patterns for using exceptions to control application flow\u003cbr\u003e 3.4 Exceptions from third-party libraries\u003cbr\u003e 3.5 Exceptions to watch out for in multithreaded environments\u003cbr\u003e __3.5.1 Exception Handling in Asynchronous Workflows Using the Promise API\u003cbr\u003e 3.6 A functional approach to error handling with Try\u003cbr\u003e __3.6.1 Using Try in Actual Production Service Code\u003cbr\u003e __3.6.2 Mixing Try with code that throws exceptions\u003cbr\u003e 3.7 Performance comparison of exception handling code\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 4: Balancing Flexibility and Complexity\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 4.1 Robust but not scalable API\u003cbr\u003e __4.1.1 New component design\u003cbr\u003e __4.1.2 Starting with the most intuitive code\u003cbr\u003e 4.2 Allowing clients to provide their own metrics frameworks\u003cbr\u003e 4.3 Providing API extensibility through hooks\u003cbr\u003e __4.3.1 Preventing unexpected use of the hook API\u003cbr\u003e __4.3.2 Performance Impact of the Hook API\u003cbr\u003e 4.4 Providing API extensibility through listeners\u003cbr\u003e __4.4.1 Using Listeners vs. Hooks  \u003cbr\u003e__4.4.2 Design Invariance\u003cbr\u003e 4.5 Flexible Analysis vs. Maintenance Costs of APIs\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 5: Premature Optimization vs. Optimizing Hot Code Paths - Decisions That Affect Code Performance\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 5.1 When Premature Optimization Is Bad\u003cbr\u003e __5.1.1 Creating an Account Processing Pipeline\u003cbr\u003e __5.1.2 Processing Optimization Based on Incorrect Assumptions\u003cbr\u003e __5.1.3 Performance Optimization Benchmarks\u003cbr\u003e 5.2 Hot Code Paths\u003cbr\u003e __5.2.1 Understanding the Pareto Principle in the Context of Software Systems\u003cbr\u003e __5.2.2 Configuring the number of concurrent users (threads) for a given SLA\u003cbr\u003e 5.3 Word services with potential hot code paths\u003cbr\u003e __5.3.1 Get the word of the day\u003cbr\u003e __5.3.2 Verifying if a word exists\u003cbr\u003e __5.3.3 Exposing WordsService to the Public Using an HTTP Service\u003cbr\u003e 5.4 Hot Code Path Detection\u003cbr\u003e __5.4.1 Creating API Performance Tests Using Gatling\u003cbr\u003e __5.4.2 Measuring Code Paths Using MetricRegistry\u003cbr\u003e 5.5 Performance improvements for hot code paths  \u003cbr\u003e__5.5.1 Generating JMH Microbenchmarks for Existing Solutions\u003cbr\u003e __5.5.2 Optimizing word-exists using a cache\u003cbr\u003e __5.5.3 Changed performance test to accept more input words\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 6: Cost vs. Simplicity of API Maintenance\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 6.1 Basic Libraries Used by Other Tools\u003cbr\u003e __6.1.1 Creating a Cloud Service Client\u003cbr\u003e __6.1.2 Exploring Authentication Strategies\u003cbr\u003e __6.1.3 Understanding the Configuration Mechanism\u003cbr\u003e 6.2 Exposing the settings of dependent libraries directly to the outside world\u003cbr\u003e __6.2.1 Configuring the Deployment Tool\u003cbr\u003e 6.3 Tools to abstract the configuration of dependency libraries\u003cbr\u003e __6.3.1 Configuring streaming tools\u003cbr\u003e 6.4 Adding new settings for the cloud client library\u003cbr\u003e __6.4.1 Adding a new setting to the deployment tool\u003cbr\u003e __6.4.2 Adding new settings to the streaming tool\u003cbr\u003e __6.4.3 Comparing the two solutions in terms of UX friendliness and maintainability  \u003cbr\u003e6.5 Deciding to deprecate or remove a setting from the Cloud Client Library\u003cbr\u003e __6.5.1 Removing Settings from the Deployment Tool\u003cbr\u003e __6.5.2 Removing settings from streaming tools\u003cbr\u003e __6.5.3 Comparing the two solutions in terms of UX friendliness and maintainability\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 7: Working Efficiently with Date and Time Data\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 7.1 Concepts of date and time information\u003cbr\u003e __7.1.1 Computer Time: Instants, Epochs, and Time Intervals\u003cbr\u003e __7.1.2 Commercial Time: Calendar System, Date, Time, Date Interval\u003cbr\u003e __7.1.3 Time Zones, UTC, and UTC Offset\u003cbr\u003e __7.1.4 Head-scratching date and time concepts\u003cbr\u003e 7.2 Preparing to work with date and time information\u003cbr\u003e __7.2.1 Limiting the scope\u003cbr\u003e __7.2.2 Make date and time requirements clear\u003cbr\u003e __7.2.3 Using the correct library or package\u003cbr\u003e 7.3 Implementing Date and Time Codes\u003cbr\u003e __7.3.1 Applying the Concept Consistently  \u003cbr\u003e__7.3.2 Improving testability by avoiding defaults\u003cbr\u003e __7.3.3 Representing Date and Time Values ​​in Text\u003cbr\u003e __7.3.4 Explaining code with comments\u003cbr\u003e 7.4 Special cases that must be specified and tested\u003cbr\u003e __7.4.1 Calendar Arithmetic Operations\u003cbr\u003e __7.4.2 Time zone conversion at midnight\u003cbr\u003e __7.4.3 Handling Ambiguous or Skipped Times\u003cbr\u003e __7.4.4 Working with Evolving Timeline Data\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 8: Leveraging Data Locality and Memory on Computers\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 8.1 What is data locality?\u003cbr\u003e __8.1.1 Moving calculations to data\u003cbr\u003e __8.1.2 Scaling processing scale using data locality\u003cbr\u003e 8.2 Data Partitioning and Data Dividing\u003cbr\u003e __8.2.1 Offline Big Data Partitioning\u003cbr\u003e __8.2.2 Partitioning vs. Sharding\u003cbr\u003e __8.2.3 Partitioning Algorithm\u003cbr\u003e 8.3 Joining Big Data Sets from Multiple Partitions\u003cbr\u003e __8.3.1 Joining data within the same physical computer\u003cbr\u003e __8.3.2 Join operations that require data movement  \u003cbr\u003e__8.3.3 Join Optimization Using Broadcasting\u003cbr\u003e 8.4 Data Processing: Memory vs. Disk\u003cbr\u003e __8.4.1 Disk-based processing\u003cbr\u003e __8.4.2 Why MapReduce is Needed\u003cbr\u003e __8.4.3 Calculating Access Time\u003cbr\u003e __8.4.4 RAM-based processing\u003cbr\u003e 8.5 Implementing Joins Using Apache Spark\u003cbr\u003e __8.5.1 Implementing Joins Without Broadcast\u003cbr\u003e __8.5.2 Implementing Joins with Broadcast\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 9: External Libraries - The libraries you use will soon become your code.\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 9.1 Importing Libraries and Taking Full Responsibility for Configuration: Beware of Defaults\u003cbr\u003e 9.2 Concurrency Model and Scalability\u003cbr\u003e __9.2.1 Using Asynchronous and Synchronous APIs\u003cbr\u003e __9.2.2 Distributed Scalability\u003cbr\u003e 9.3 Testability\u003cbr\u003e __9.3.1 Test Library\u003cbr\u003e __9.3.2 Testing with fake objects (test doubles) and mock objects\u003cbr\u003e __9.3.3 Test Toolkit Integration\u003cbr\u003e 9.4 Dependencies on Third-Party Libraries\u003cbr\u003e Avoiding version conflicts with __9.4.1\u003cbr\u003e __9.4.2 Too many dependencies  \u003cbr\u003e9.5 Selecting and Maintaining External Dependencies\u003cbr\u003e __9.5.1 First impression\u003cbr\u003e __9.5.2 Different Approaches to Code Reuse\u003cbr\u003e __9.5.3 Vendor Dependency\u003cbr\u003e __9.5.4 License\u003cbr\u003e __9.5.5 Libraries vs. Frameworks\u003cbr\u003e __9.5.6 Security and Updates\u003cbr\u003e __9.5.7 Checklist for Decision Making\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 10: Consistency and Atomicity in Distributed Systems\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 10.1 Send data source at least once\u003cbr\u003e __10.1.1 Traffic between single-node services\u003cbr\u003e __10.1.2 Retrying application calls\u003cbr\u003e __10.1.3 Data Creation and Idempotency\u003cbr\u003e __10.1.4 Understanding CQRS (Command Query Responsibility Segregation)\u003cbr\u003e 10.2 Simple implementation of the deduplication library\u003cbr\u003e 10.3 Common Mistakes When Implementing Deduplication in Distributed Systems\u003cbr\u003e __10.3.1 Context with only one node\u003cbr\u003e __10.3.2 Multi-node context\u003cbr\u003e 10.4 Make logic atomic to avoid race conditions\u003cbr\u003e summation\u003cbr\u003e \u003cbr\u003e\u003cb\u003e▣ Chapter 11: Delivery Semantics in Distributed Systems\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 11.1 Architecture of Event-Driven Applications\u003cbr\u003e 11.2 Producer and Consumer Applications Based on Apache Kafka\u003cbr\u003e __11.2.1 A Look at Kafka's Consumer Side\u003cbr\u003e __11.2.2 Understanding Kafka Broker Settings\u003cbr\u003e 11.3 Producer Logic\u003cbr\u003e __11.3.1 Choosing Consistency vs. Availability for Producers\u003cbr\u003e 11.4 Consumer Codes and Various Delivery Semantics\u003cbr\u003e __11.4.1 Manually committing consumers\u003cbr\u003e __11.4.2 Restart from the earliest or most recent offset\u003cbr\u003e __11.4.3 (virtually) exactly once semantics\u003cbr\u003e 11.5 Leveraging Shipping Semantics to Provide Fault Tolerance\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 12: Managing Versions and Compatibility\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 12.1 Version Control in the Abstract\u003cbr\u003e __Properties of version 12.1.1\u003cbr\u003e __12.1.2 Backward and Forward Compatibility\u003cbr\u003e __12.1.3 Semantic Versioning\u003cbr\u003e __12.1.4 Marketing Version\u003cbr\u003e 12.2 Versioning for Libraries  \u003cbr\u003e__12.2.1 Source Code, Binaries, and Semantic Compatibility\u003cbr\u003e __12.2.2 Dependency Graph and Diamond Dependency\u003cbr\u003e __12.2.3 Techniques for Handling Compatibility-Breaking Changes\u003cbr\u003e __12.2.4 Managing internal-only libraries\u003cbr\u003e 12.3 Versioning for Network APIs\u003cbr\u003e __12.3.1 Context of a network API call\u003cbr\u003e __12.3.2 Customer-Friendly Clarity\u003cbr\u003e __12.3.3 General versioning strategy\u003cbr\u003e __12.3.4 Additional Versioning Considerations\u003cbr\u003e 12.4 Versioning for Data Repositories\u003cbr\u003e __12.4.1 A Brief Introduction to Protocol Buffers\u003cbr\u003e __12.4.2 What changes break compatibility?\u003cbr\u003e __12.4.3 Migrating data within a repository\u003cbr\u003e __12.4.4 Anticipating the Unexpected\u003cbr\u003e __12.4.5 Separating API and Repository Representation\u003cbr\u003e __12.4.6 Evaluating the Repository Format\u003cbr\u003e summation\u003cbr\u003e\u003cbr\u003e \u003cb\u003e▣ Chapter 13: Following the Latest Trends vs. Reducing Code Maintenance Costs\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 13.1 When to Use a Dependency Injection Framework?  \u003cbr\u003e__13.1.1 DIY (Do-it-yourself) Dependency Injection\u003cbr\u003e __13.1.2 Using a Dependency Injection Framework\u003cbr\u003e 13.2 When using reactive programming\u003cbr\u003e __13.2.1 Creating a single-threaded, blocking process\u003cbr\u003e __13.2.2 Using CompletableFuture\u003cbr\u003e __13.2.3 Implementing a Reactive Solution\u003cbr\u003e 13.3 When using functional programming\u003cbr\u003e __13.3.1 Generating Functional Code from Non-Functional Languages\u003cbr\u003e __13.3.2 Tail Recursion Optimization\u003cbr\u003e __13.3.3 Leveraging Immutability\u003cbr\u003e 13.4 Lazy vs. Eager Evaluation\u003cbr\u003e summation\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e \",\"\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eDetailed image\u003c\/b\u003e \u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\u003cdiv\u003e\u003cimg src=\"https:\/\/image.yes24.com\/momo\/TopCate5163\/MidCate4\/516238335.jpg\" border=\"0\" alt=\"Detailed Image 1\"\u003e\u003c\/div\u003e\u003c\/div\u003e \",\"\u003cdiv\u003e\u003ch5\u003e \u003cb\u003ePublisher's Review\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e \u003cb\u003e★ What this book covers ★\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e ◎ Reason about the system to make intuitive and better design decisions\u003cbr\u003e ◎ Understand how to balance trade-offs and the trends of trade-offs\u003cbr\u003e ◎ Choosing the right library for the problem\u003cbr\u003e ◎ Thoroughly analyze the entire dependency of the service \u003cbr\u003e◎ Understand transmission semantics and their impact on distributed architectures.\u003cbr\u003e ◎ Design and perform performance tests to detect hot code paths and verify system SLAs.\u003cbr\u003e ◎ Detect and optimize hot code paths to focus optimization on the root cause.\u003cbr\u003e ◎ Determine the appropriate data model for date\/time processing to avoid common (but subtle) mistakes.\u003cbr\u003e ◎ Infer compatibility and version control to prevent unexpected problems with API clients.\u003cbr\u003e ◎ Understand the concepts of tight coupling and loose coupling and how these concepts affect coordination of work between teams.\u003cbr\u003e ◎ Make requirements clear until they are accurate, easy to implement, and easy to test.\u003cbr\u003e ◎ Optimizing APIs for a friendly user experience\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e \"]\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e GOODS SPECIFICS \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eDate of issue:\u003c\/strong\u003e March 12, 2025\u003c\/div\u003e\n\n \u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e- \u003cstrong\u003ePage count, weight, size:\u003c\/strong\u003e 472 pages | 188*240*19mm\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eISBN13:\u003c\/strong\u003e 9791158395643 \u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cspan\u003e\u003c\/span\u003e\n\n\u003c\/center\u003e\n\n\n\u003c\/center\u003e","brand":"LIBRAIRIE COREENNE","offers":[{"title":"Default Title","offer_id":43893321760810,"sku":"138810","price":41.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0683\/2750\/5962\/files\/97964dec3181ae6da26754ee6e3ea272.jpg?v=1765395824","url":"https:\/\/librairie.coreenne.fr\/en\/products\/138810","provider":"LIBRAIRIE COREENNE","version":"1.0","type":"link"}