Schmutz im Code behindert mittel- und langfristig effiziente Software-Entwicklung. Seine Ursachen sind vielfältig. Clean Code zeigt, wie wir effizienter arbeiten und gleichzeitig höhere Komplexität handhaben können. Ein spezieller Clean-Code-Prozess hilft, Clean-Code-Maßnahmen im Projektalltag lebendig werden zu lassen. Muss wartbarer Code höher bewertet werden als funktionierender Code?
Weitere Vorträge, die wir auch gern in Ihrem Unternehmen halten, finden Sie unter: https://www.iks-gmbh.com/impulsvortraege
OCA Java SE 8 Exam Chapter 1 Java Building Blocksİbrahim Kürce
The document discusses key concepts in Java including classes, objects, fields, methods, variables, primitive types, reference types, and memory management. It explains that classes are the basic building blocks in Java programs and contain fields and methods. Objects are instances of classes that exist in memory. The document also covers variable scope, default initialization, and garbage collection in Java.
This document discusses principles and best practices for writing clean code. It defines clean code as code that works, is easy to read, understand and extend. It emphasizes writing code for other developers who will maintain it. Some key points include writing small, focused methods with meaningful names; avoiding duplicated code; using exceptions appropriately; formatting code consistently; and writing thorough automated tests. The overall goal is to communicate intent in the code as clearly as possible through these practices.
Unit testing with JUnit focuses on testing individual units of source code using JUnit. Key aspects covered include:
- Unit testing tests the smallest testable parts of code, while integration testing tests groups of code modules and system testing tests complete integrated systems.
- Tests in JUnit are implemented as public void testX() methods that call methods under test and assert expected outcomes.
- A test suite assembles individual test methods using reflection and executes the suite to automatically run all tests.
- Best practices include writing tests before code, testing all code that could break, and running tests frequently for rapid feedback.
The document discusses principles and best practices for writing clean code, including using meaningful names, separating commands and queries, avoiding repetition, using exceptions instead of return codes, and following object-oriented principles like polymorphism instead of switch statements on objects. It provides examples of good and bad code for concepts like single responsibility, primitive obsession, and refused bequest. The overall goal is to write code that is readable, maintainable, and extendable.
Polymorphism is the ability of an object to take on many forms. The most common use of polymorphism in OOP occurs when a parent class reference is used to refer to a child class object. Any Java object that can pass more than one IS-A test is considered to be polymorphic.
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGZenika
Découvrez les annotations Java comme vous ne les avez jamais vues ! Olivier Croisier, expert Java, anime une conférence de deux heures sur les Annotations, à destination des développeurs et des architectes. Elle couvre leur utilisation, développement, et manipulation au compile-time et au run-time grâce aux Annotation Processors et à la Réflexion.
* Présentation : Historique, cas d'utilisations et limitations
* Tour d'horizon des annotation disponibles
* Utilisation des annotations
* Développer une annotation personnalisée : structure, propriétés et méta-annotations
* Outillage compile-time : les pluggable annotation processors
* Outillage runtime : Réflexion
* Injection d'annotations
* Conclusion
This document provides a summary of a presentation on object-oriented programming (OOP) and clean code given at IPB Computer Science on March 28, 2017. It introduces the speaker, Ifnu Bima, and his background working at Deutsche Bank and blibli.com. The presentation covers topics like code quality metrics, meaningful naming conventions, high-quality functions, comments, and unit testing. It emphasizes writing code that is easy to maintain and modify over time to prevent issues like bugs and technical debt.
OCA Java SE 8 Exam Chapter 1 Java Building Blocksİbrahim Kürce
The document discusses key concepts in Java including classes, objects, fields, methods, variables, primitive types, reference types, and memory management. It explains that classes are the basic building blocks in Java programs and contain fields and methods. Objects are instances of classes that exist in memory. The document also covers variable scope, default initialization, and garbage collection in Java.
This document discusses principles and best practices for writing clean code. It defines clean code as code that works, is easy to read, understand and extend. It emphasizes writing code for other developers who will maintain it. Some key points include writing small, focused methods with meaningful names; avoiding duplicated code; using exceptions appropriately; formatting code consistently; and writing thorough automated tests. The overall goal is to communicate intent in the code as clearly as possible through these practices.
Unit testing with JUnit focuses on testing individual units of source code using JUnit. Key aspects covered include:
- Unit testing tests the smallest testable parts of code, while integration testing tests groups of code modules and system testing tests complete integrated systems.
- Tests in JUnit are implemented as public void testX() methods that call methods under test and assert expected outcomes.
- A test suite assembles individual test methods using reflection and executes the suite to automatically run all tests.
- Best practices include writing tests before code, testing all code that could break, and running tests frequently for rapid feedback.
The document discusses principles and best practices for writing clean code, including using meaningful names, separating commands and queries, avoiding repetition, using exceptions instead of return codes, and following object-oriented principles like polymorphism instead of switch statements on objects. It provides examples of good and bad code for concepts like single responsibility, primitive obsession, and refused bequest. The overall goal is to write code that is readable, maintainable, and extendable.
Polymorphism is the ability of an object to take on many forms. The most common use of polymorphism in OOP occurs when a parent class reference is used to refer to a child class object. Any Java object that can pass more than one IS-A test is considered to be polymorphic.
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGZenika
Découvrez les annotations Java comme vous ne les avez jamais vues ! Olivier Croisier, expert Java, anime une conférence de deux heures sur les Annotations, à destination des développeurs et des architectes. Elle couvre leur utilisation, développement, et manipulation au compile-time et au run-time grâce aux Annotation Processors et à la Réflexion.
* Présentation : Historique, cas d'utilisations et limitations
* Tour d'horizon des annotation disponibles
* Utilisation des annotations
* Développer une annotation personnalisée : structure, propriétés et méta-annotations
* Outillage compile-time : les pluggable annotation processors
* Outillage runtime : Réflexion
* Injection d'annotations
* Conclusion
This document provides a summary of a presentation on object-oriented programming (OOP) and clean code given at IPB Computer Science on March 28, 2017. It introduces the speaker, Ifnu Bima, and his background working at Deutsche Bank and blibli.com. The presentation covers topics like code quality metrics, meaningful naming conventions, high-quality functions, comments, and unit testing. It emphasizes writing code that is easy to maintain and modify over time to prevent issues like bugs and technical debt.
In this core java training session, you will learn Collections – Lists, Sets. Topics covered in this session are:
• List – ArrayList, LinkedList
• Set – HashSet, LinkedHashSet, TreeSet
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
The document discusses polymorphism in object-oriented programming. It defines polymorphism as the ability for objects of different classes related by inheritance to respond differently to the same function call. Polymorphism can be achieved through virtual functions and allows late/dynamic binding at runtime based on the actual object type. The document also discusses early/static binding at compile time, pure virtual functions that define abstract base classes, and concrete derived classes that implement pure virtual functions from the base class.
Rule 1: Follow a consistent coding standard
Rule 2: Name things properly, long variable and function names are allowed
Rule 3: Be expressive, write code as you speak and be optimally verbose
Rule 4: Max indent per method should be 2, in case of exceptions 3
Rule 5: Avoid creating god object and long methods
Rule 6: Keep the method in one place, inject the class and call it, DRY
Rule 7: Avoid in-line comments (comment with code), put comments in the method doc
Este capítulo apresenta os fundamentos da modelagem de software orientada a objetos, introduzindo conceitos como classes, objetos, abstração, encapsulamento, herança, polimorfismo e diagrama UML. Também discute a diferença entre arquitetura física e lógica.
Interfaces in Java declare methods but do not provide method implementations. A class can implement multiple interfaces but extend only one class. Interfaces are used to define common behaviors for unrelated classes and allow classes to assume multiple roles. Nested interfaces group related interfaces and must be accessed through the outer interface or class.
The document discusses principles of clean code, beginning with definitions of clean code from various authors. It outlines key principles like the single responsibility principle and open/closed principle. It then covers sections on meaningful naming, functions, and classes. For functions, it recommends they be small, do one thing, avoid flag arguments, and have no side effects. For classes, it advocates for small size, encapsulation, high cohesion and low coupling following the single responsibility principle.
The document discusses various refactoring techniques organized into categories including composing methods, moving features between objects, organizing data, simplifying conditional expressions, simplifying method calls, and dealing with generalization. Some specific techniques mentioned are extract method, move method, encapsulate field, replace nested conditional with guard clauses, add parameter, and form template method. The goal of refactoring is to improve the design of existing code through techniques like extracting duplicate code or conditional logic, simplifying interfaces, and managing dependencies between code elements.
This document discusses interfaces in Java. It defines an interface as a collection of public abstract methods and public static final variables that defines a protocol for classes to implement but cannot be instantiated itself. Interfaces allow for multiple inheritance and reveal functionality without implementation details. The document explains how to define an interface with the interface keyword and how classes implement interfaces by matching method signatures. It also covers key properties of interfaces like default access modifiers and differences between interfaces and abstract classes. Benefits of interfaces include allowing standard method sets across hierarchies and resilience to class changes.
OCA Java SE 8 Exam Chapter 3 Core Java APIsİbrahim Kürce
This document provides an overview of core Java APIs covered on the OCA exam, including Strings, StringBuilder, arrays, sorting, and searching. It discusses that Strings are immutable sequences of characters with useful methods like length(), charAt(), indexOf(), and substring(). StringBuilder is mutable and more efficient for string manipulation than concatenating Strings. Arrays are objects that hold primitives or references in indexed memory locations. The document covers creating, accessing, and searching arrays, as well as the Arrays utility class methods like sort().
Serverless orchestration and automation with Cloud WorkflowsMárton Kodok
Join this session to understand how Cloud Workflows resolves challenges in connecting services, HTTP based service orchestration and automation. We are going to dive deep how serverless HTTP service automation works to automate step engines. Based on practical examples we will demonstrate the built-in decision and conditional executions, subworkflows, support for external built-in API calls, and integration with any Google Cloud product without worrying about authentication. We are going to cover Marketing, Retail, Industrial and Developer possibilities, such as event driven marketing workflow execution, or inventory chain operations, generating and automatic state machines, or orchestrate DevOps workflows and automating the Cloud.
An interface in Java is a blueprint of a class that defines static constants and abstract methods. Interfaces are used to achieve abstraction and multiple inheritance in Java. A class implements an interface by providing method bodies for the abstract methods defined in the interface.
React uses Virtual DOM exists which is like a lightweight copy of the actual DOM(a virtual representation of the DOM). So for every object that exists in the original DOM, there is an object for that in React Virtual DOM. It is exactly the same, but it does not have the power to directly change the layout of the document. Manipulating DOM is slow, but manipulating Virtual DOM is fast as nothing gets drawn on the screen. So each time there is a change in the state of our application, the virtual DOM gets updated first instead of the real DOM
OCA Java SE 8 Exam Chapter 2 Operators & Statementsİbrahim Kürce
Operators in Java include unary, binary, and ternary operators that perform operations on operands. Binary operators like arithmetic, relational, and logical operators follow an order of precedence unless overridden by parentheses. Statements in Java include if-then, if-then-else, switch, while, do-while, for, and more to control program flow. The if-then statement and if-then-else statement evaluate conditions and execute code blocks conditionally. The switch statement compares a value to multiple case labels and executes the corresponding code block.
An interface in Java is a blueprint of a class that defines static constants and abstract methods. Interfaces are implemented by classes where they inherit the properties and must define the body of the abstract methods. Key points are:
- Interfaces can only contain abstract methods and static constants, not method bodies.
- Classes implement interfaces to inherit the properties and must define the abstract method bodies.
- An interface can extend other interfaces and a class can implement multiple interfaces.
All 3 Clean Code presentations provide great value by themselves, but taken together are designed to offer a holistic approach to successful software creation. This first session creates the foundation for the 2nd and 3rd Clean Code presentation on Dependency Injection, as it explains expected base knowledge. Why writing Clean Code makes us more efficient Over the lifetime of a product, maintaining the product is actually one - if not the most - expensive area(s) of the overall product costs.
Writing clean code can significantly lower these costs. However, writing clean code also makes you more efficient during the initial development time and results in more stable code. You will be presented design patterns and best practices which will make you write better and more easily maintainable code, seeing code in a holistic way.
You will learn how to apply them by using an existing implementation as the starting point of the presentation. Finally, patterns & practices benefits are explained. This presentation is based on C# and Visual Studio 2012. However, the demonstrated patterns and practice can be applied to every other programming language too.
Note: Moving forwards this presentation will be updated with the latest version of the slides for the last event I did the presentation instead of creating new separate slide decks here on SlideShare.
Presentation dates and locations:
2015-10-03 Silicon Valley Code Camp, San Jose, CA
2015-06-27 SoCal Code Camp - San Diego, CA
2014-11-14 SoCal Code Camp - Los Angeles, CA
2014-10-18 Desert Code Camp - Chandler, AZ
2014-10-11 Silicon Valley Code Camp, Los Altos Hills, CA
Polymorphism allows objects of different types to be treated as objects of a general type. There are two main types: static polymorphism achieved through function overloading and operator overloading at compile time, and dynamic polymorphism achieved through virtual functions and overridden functions at runtime. Virtual functions allow late binding where the function called depends on the object type. Pure virtual functions must be defined in derived classes.
This document provides an overview of writing clean code, focusing on readability, code style, naming conventions, code comments, control structures, functions/methods, classes, and modules. Key points include formatting code for readability, using explicit and descriptive naming, minimizing comments by ensuring code is self-explanatory, limiting nested control structures and side effects, following single responsibility and encapsulation principles, and leveraging software patterns.
This document provides information on user defined methods in Java. It defines what a method is, which is a sequence of statements grouped together and given a name that can be called to perform a specific task. Methods are used to simplify program complexity, hide details, enable code reuse, and simplify maintenance. The document discusses method declaration, which includes the header and body. The header specifies the return type, method name, and parameters. Methods can be called by passing arguments. The document contrasts call by value versus call by reference and discusses recursive methods and method overloading.
This document discusses Java wrapper classes. It explains that wrapper classes allow primitive types to be used as objects. Each primitive type has a corresponding wrapper class (e.g. Integer for int). Wrapper classes provide methods to convert between primitive types and their object equivalents. They allow primitives to be used in contexts that require objects, like collections, and provide additional functionality like constants and parsing/formatting methods.
The document discusses the principles of clean code as outlined in the book "Clean Code" by Robert C. Martin. It covers topics like meaningful names, comments, functions, objects and data structures, error handling, and unit tests. The goal of clean code is to produce readable, maintainable code through practices like breaking code into small, single-purpose functions and hiding implementation details in objects.
In this core java training session, you will learn Collections – Lists, Sets. Topics covered in this session are:
• List – ArrayList, LinkedList
• Set – HashSet, LinkedHashSet, TreeSet
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
The document discusses polymorphism in object-oriented programming. It defines polymorphism as the ability for objects of different classes related by inheritance to respond differently to the same function call. Polymorphism can be achieved through virtual functions and allows late/dynamic binding at runtime based on the actual object type. The document also discusses early/static binding at compile time, pure virtual functions that define abstract base classes, and concrete derived classes that implement pure virtual functions from the base class.
Rule 1: Follow a consistent coding standard
Rule 2: Name things properly, long variable and function names are allowed
Rule 3: Be expressive, write code as you speak and be optimally verbose
Rule 4: Max indent per method should be 2, in case of exceptions 3
Rule 5: Avoid creating god object and long methods
Rule 6: Keep the method in one place, inject the class and call it, DRY
Rule 7: Avoid in-line comments (comment with code), put comments in the method doc
Este capítulo apresenta os fundamentos da modelagem de software orientada a objetos, introduzindo conceitos como classes, objetos, abstração, encapsulamento, herança, polimorfismo e diagrama UML. Também discute a diferença entre arquitetura física e lógica.
Interfaces in Java declare methods but do not provide method implementations. A class can implement multiple interfaces but extend only one class. Interfaces are used to define common behaviors for unrelated classes and allow classes to assume multiple roles. Nested interfaces group related interfaces and must be accessed through the outer interface or class.
The document discusses principles of clean code, beginning with definitions of clean code from various authors. It outlines key principles like the single responsibility principle and open/closed principle. It then covers sections on meaningful naming, functions, and classes. For functions, it recommends they be small, do one thing, avoid flag arguments, and have no side effects. For classes, it advocates for small size, encapsulation, high cohesion and low coupling following the single responsibility principle.
The document discusses various refactoring techniques organized into categories including composing methods, moving features between objects, organizing data, simplifying conditional expressions, simplifying method calls, and dealing with generalization. Some specific techniques mentioned are extract method, move method, encapsulate field, replace nested conditional with guard clauses, add parameter, and form template method. The goal of refactoring is to improve the design of existing code through techniques like extracting duplicate code or conditional logic, simplifying interfaces, and managing dependencies between code elements.
This document discusses interfaces in Java. It defines an interface as a collection of public abstract methods and public static final variables that defines a protocol for classes to implement but cannot be instantiated itself. Interfaces allow for multiple inheritance and reveal functionality without implementation details. The document explains how to define an interface with the interface keyword and how classes implement interfaces by matching method signatures. It also covers key properties of interfaces like default access modifiers and differences between interfaces and abstract classes. Benefits of interfaces include allowing standard method sets across hierarchies and resilience to class changes.
OCA Java SE 8 Exam Chapter 3 Core Java APIsİbrahim Kürce
This document provides an overview of core Java APIs covered on the OCA exam, including Strings, StringBuilder, arrays, sorting, and searching. It discusses that Strings are immutable sequences of characters with useful methods like length(), charAt(), indexOf(), and substring(). StringBuilder is mutable and more efficient for string manipulation than concatenating Strings. Arrays are objects that hold primitives or references in indexed memory locations. The document covers creating, accessing, and searching arrays, as well as the Arrays utility class methods like sort().
Serverless orchestration and automation with Cloud WorkflowsMárton Kodok
Join this session to understand how Cloud Workflows resolves challenges in connecting services, HTTP based service orchestration and automation. We are going to dive deep how serverless HTTP service automation works to automate step engines. Based on practical examples we will demonstrate the built-in decision and conditional executions, subworkflows, support for external built-in API calls, and integration with any Google Cloud product without worrying about authentication. We are going to cover Marketing, Retail, Industrial and Developer possibilities, such as event driven marketing workflow execution, or inventory chain operations, generating and automatic state machines, or orchestrate DevOps workflows and automating the Cloud.
An interface in Java is a blueprint of a class that defines static constants and abstract methods. Interfaces are used to achieve abstraction and multiple inheritance in Java. A class implements an interface by providing method bodies for the abstract methods defined in the interface.
React uses Virtual DOM exists which is like a lightweight copy of the actual DOM(a virtual representation of the DOM). So for every object that exists in the original DOM, there is an object for that in React Virtual DOM. It is exactly the same, but it does not have the power to directly change the layout of the document. Manipulating DOM is slow, but manipulating Virtual DOM is fast as nothing gets drawn on the screen. So each time there is a change in the state of our application, the virtual DOM gets updated first instead of the real DOM
OCA Java SE 8 Exam Chapter 2 Operators & Statementsİbrahim Kürce
Operators in Java include unary, binary, and ternary operators that perform operations on operands. Binary operators like arithmetic, relational, and logical operators follow an order of precedence unless overridden by parentheses. Statements in Java include if-then, if-then-else, switch, while, do-while, for, and more to control program flow. The if-then statement and if-then-else statement evaluate conditions and execute code blocks conditionally. The switch statement compares a value to multiple case labels and executes the corresponding code block.
An interface in Java is a blueprint of a class that defines static constants and abstract methods. Interfaces are implemented by classes where they inherit the properties and must define the body of the abstract methods. Key points are:
- Interfaces can only contain abstract methods and static constants, not method bodies.
- Classes implement interfaces to inherit the properties and must define the abstract method bodies.
- An interface can extend other interfaces and a class can implement multiple interfaces.
All 3 Clean Code presentations provide great value by themselves, but taken together are designed to offer a holistic approach to successful software creation. This first session creates the foundation for the 2nd and 3rd Clean Code presentation on Dependency Injection, as it explains expected base knowledge. Why writing Clean Code makes us more efficient Over the lifetime of a product, maintaining the product is actually one - if not the most - expensive area(s) of the overall product costs.
Writing clean code can significantly lower these costs. However, writing clean code also makes you more efficient during the initial development time and results in more stable code. You will be presented design patterns and best practices which will make you write better and more easily maintainable code, seeing code in a holistic way.
You will learn how to apply them by using an existing implementation as the starting point of the presentation. Finally, patterns & practices benefits are explained. This presentation is based on C# and Visual Studio 2012. However, the demonstrated patterns and practice can be applied to every other programming language too.
Note: Moving forwards this presentation will be updated with the latest version of the slides for the last event I did the presentation instead of creating new separate slide decks here on SlideShare.
Presentation dates and locations:
2015-10-03 Silicon Valley Code Camp, San Jose, CA
2015-06-27 SoCal Code Camp - San Diego, CA
2014-11-14 SoCal Code Camp - Los Angeles, CA
2014-10-18 Desert Code Camp - Chandler, AZ
2014-10-11 Silicon Valley Code Camp, Los Altos Hills, CA
Polymorphism allows objects of different types to be treated as objects of a general type. There are two main types: static polymorphism achieved through function overloading and operator overloading at compile time, and dynamic polymorphism achieved through virtual functions and overridden functions at runtime. Virtual functions allow late binding where the function called depends on the object type. Pure virtual functions must be defined in derived classes.
This document provides an overview of writing clean code, focusing on readability, code style, naming conventions, code comments, control structures, functions/methods, classes, and modules. Key points include formatting code for readability, using explicit and descriptive naming, minimizing comments by ensuring code is self-explanatory, limiting nested control structures and side effects, following single responsibility and encapsulation principles, and leveraging software patterns.
This document provides information on user defined methods in Java. It defines what a method is, which is a sequence of statements grouped together and given a name that can be called to perform a specific task. Methods are used to simplify program complexity, hide details, enable code reuse, and simplify maintenance. The document discusses method declaration, which includes the header and body. The header specifies the return type, method name, and parameters. Methods can be called by passing arguments. The document contrasts call by value versus call by reference and discusses recursive methods and method overloading.
This document discusses Java wrapper classes. It explains that wrapper classes allow primitive types to be used as objects. Each primitive type has a corresponding wrapper class (e.g. Integer for int). Wrapper classes provide methods to convert between primitive types and their object equivalents. They allow primitives to be used in contexts that require objects, like collections, and provide additional functionality like constants and parsing/formatting methods.
The document discusses the principles of clean code as outlined in the book "Clean Code" by Robert C. Martin. It covers topics like meaningful names, comments, functions, objects and data structures, error handling, and unit tests. The goal of clean code is to produce readable, maintainable code through practices like breaking code into small, single-purpose functions and hiding implementation details in objects.
The document discusses clean coding practices for Java developers. It covers topics such as choosing meaningful names for variables, methods, and classes; writing code that is easy for others to understand; breaking methods down into single logical steps; and using fluent APIs to make code more readable. The presentation provides examples of clean code and ways to refactor code to follow best practices.
Wozu brauche ich Clean Code, was kostet Clean Code, was ist Clean Code und wenn ich's haben will, wie führe ich Clean Code ein?
Slides des Tech Talk vom 13.01.2014 bei Leanovate von Lorenz Hahn
Kurzbeschreibung
Softwareentwicklung braucht Profis. Wie aber definiert man einen "professionellen" Software-Entwickler ? Clean Code Development ist eine der ersten "Versuche", um diese Frage möglichst umfassend, technologieunabhängig und über die Bedürfnisse des Kunden hinaus zu beantworten.
Inhalt
Was ist ein professioneller Software-Entwickler
Professionlität
Qualität
Das CCD Werte-System
Prinzipien und Praktiken
Das Grad-System
1. The document discusses running ASP.NET 5 applications on a Raspberry Pi 2 and using Docker.
2. It provides steps for installing .NET Core, ASP.NET 5, and other prerequisites on the Raspberry Pi, and includes examples of building and running a simple ASP.NET app.
3. It also covers using Docker to build an image for an ASP.NET app, including defining a Dockerfile and building/running the image to host the app in a container.
This document outlines how to set up ASP.NET 5 on a Raspberry Pi 2. It discusses downloading and installing the operating system, Mono, Git, Node.js and other tools. It also covers configuring the GPIO pins to connect sensors and control outputs. Several example IoT projects are proposed that use the Pi to control devices like a plant watering system or mobile robot.
We want code that is easy to understand, re-usable, and flexible. But we are always up against deadlines, so we rush, and end up with code that is messy, buggy, hard to maintain, and makes us go slower even though we’re trying to go faster.
What is clean code? In this talk I’ll provide some answers to this question, and introduce you to 10 good habits that will help keep your code clean, such as the use of meaningful names for your variables and functions, and following the “Boy Scout Rule” (leave the code cleaner than you found it). I will even try to persuade you that using a lot of code comments is a sign that there are problems with your code.
Continuous Integration and the Data Warehouse - PASS SQL Saturday SloveniaDr. John Tunnicliffe
Continuous integration is not normally associate with data warehouse projects due to the perceived complexity of implementation. John shows how modern tools make it simple to apply CI to the data warehouse. The session covers:
* The benefits of the SQL Server Data Tools declarative model
* Using PowerShell and psake to automate your build and deployments
* Implementing the TeamCity build server
* Integration and regression testing
* Auto-code generation within SSDT using T4 templates and DacFx
Clean Code soll die Arbeit der Entwickler erleichtern, indem es hohe Qualitätsmaßstäbe, wie zum Beispiel Les- und Testbarkeit, an den Quellcode anlegt und so die Wartbarkeit sowie Stabilität sichert. Auch wenn nicht alle Kriterien sofort umgesetzt, sondern schrittweise eingeführt werden, kann dies eine große Umstellung für die Arbeitsweise der Entwickler bedeuten. Soll Clean Code im laufenden Betrieb eingeführt werden ohne dabei die Produktivität massiv zu gefährden, sind einige Fragestellungen zu beachten:
Wie nehme ich Entwickler mit auf dem Weg zum Clean Code? Wie schaffe ich Verständnis und baue Widerstände ab? Wie können die Entwickler bei dem Wandel technisch unterstützt werden? Wie streng können die Kriterien des Clean Codes umgesetzt werden? Wie kann ein unternehmensweiter einheitlicher Qualitätsstandard erreicht werden? Welche spezifischen Herausforderungen stellen sich dabei in Greenfield-Projekten und Projekten mit Legacy Code?
Anhand eines Erfahrungsberichts der letzten 2 Jahre werden mögliche Herangehensweisen und Lösungen für diese Fragestellungen aufgezeigt.
Over the last year there has been a lot of buzz about Clean Architecture in the Android community, but what is Clean Architecture? How does it work? And should I be using it? Recently at Badoo we decided to rewrite our messenger component.
Over the years this core piece of functionality in our app has become large and unwieldy. We wanted to take a fresh approach to try and prevent this from happening again. We choose to use Clean Architecture to achieve our goal. This talk intends to share our journey from theory to implementation in an application with over 100 million downloads. By the end, you should not only understand what Clean Architecture is, but how to implement it, and whether you should.
Lean Startup und agile Methodiken – Hype oder Fortschritt ?Heico Koch
Seit Jahren sind Themen wie Scrum oder Kanban in vieler Munde und teilweise lange Realität in der Softwareentwicklung. Weiterhin tauchen immer neue agile Konzepte und Methodiken, wie Lean Startup oder Management 3.0 auf. Für viele stellt sich die Frage, ob es hier um sinnvolle neue Ansätze oder um Modeerscheinungen geht. In diesem Termin wollen wir uns mit der Frage beschäftigen, was die Grundlagen für einen sinnvollen Einsatz von agil sind, wie sich Themen wie Scrum und Lean Startup in unsere Business-Welt eingliedern und was die Erfolgsfaktoren sind.
There's another talk about Clean Architecture, SOLID, and our approach at InfoJobs. If you need the slides, don't hesitate to fork https://github.com/schibsted-android-training/workshop-5
Presentation I held before my colleagues about the book Clean Code (http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882).
It contains the highlights of several chapters and hint/guidelines a developer should know.
Im letzten Jahr entstand für einen großen Kunden ein Mobile Game für iOS, das serverseitig auf Windows Azure basiert. Zum Einsatz kommen dabei Computer-Instanzen, Backup, Table Storage, SQL Database. Die Spiel-Logik wurde serverseitig mit CQRS umgesetzt, das für Azure ideal einsetzbar ist. Der Vortrag gibt einen Einblick in die Architektur und zeigt den Einsatz der gewählten Azure-Komponenten.
Die Qualitätsanforderungen an Individualsoftware sind hoch. Sie soll funktional, zuverlässig, benutzerfreundlich und wartbar sein. Nicht zuletzt muss die Kosten-Nutzen-Relation stimmen.
Weitere Vorträge, die wir auch gern in Ihrem Unternehmen halten, finden Sie unter: https://www.iks-gmbh.com/impulsvortraege
Die Qualitätsanforderungen an Individualsoftware sind hoch. Sie soll funktional, zuverlässig, benutzerfreundlich und wartbar sein. Nicht zuletzt muss die Kosten-Nutzen-Relation stimmen.
Weitere Vorträge, die wir auch gern in Ihrem Unternehmen halten, finden Sie unter: https://www.iks-gmbh.com/impulsvortraege
Was macht Clean Code aus? Wie kann man seinen Code verbessern? Welche Regeln helfen einem Programmierer, um zu sauberen Code zu gelangen? Welche Tipps und Tricks gibt es, mit denen man sich noch verbessern kann? Gibt es Patterns bzw. Muster, die zum Erfolg führen? Oder ist Clean Code nur Zeitverschwendung in Projekten unter Zeitdruck?
Wer das legendäre Buch 'Clean Code' noch nicht gelesen hat, oder eine Auffrischung gebrauchen kann, ist zu diesem Live-Stream gerne willkommen. Um es praxisnah zu halten, werden viele Code-Schnipsel gezeigt, die wir zusammen analysieren und verbessern.
Clean Code - A Handbook of Agile Software Craftsmanship: Englische Ausgabe
https://amzn.to/3pXpCOS
Clean Code - Refactoring, Patterns, Testen und Techniken für sauberen Code: Deutsche Ausgabe
https://amzn.to/3cNO55B
Diese Videobeschreibung enthält Amazon Affiliate Links, mit denen ihr mich beim Kauf unterstützen könnt, ich erhalte eine kleine Provision während ihr nichts extra zahlt für euren Amazon-Einkauf!
Die Qualitätsanforderungen an Individualsoftware sind hoch. Sie soll funktional, zuverlässig, benutzerfreundlich und wartbar sein. Nicht zuletzt muss die Kosten-Nutzen-Relation stimmen.
Weitere Vorträge, die wir auch gern in Ihrem Unternehmen halten, finden Sie unter: https://www.iks-gmbh.com/impulsvortraege
http://www.opitz-consulting.com/go/3-4-894
Die Literatur sagt, dass „Broken Builds“ auf jeden Fall zu vermeiden sind, weil andere Entwickler sich durch die fehlerhaften Änderungen ihren Entwicklungsbereich kaputt machen und dann nicht arbeiten können.
Die Solution Architects unserer IT-Beratung, Stefan Scheidt und Richard Attermeyer, zeigten in ihrem Vortrag am 10.Oktober 2013 bei der gearconf 2013 in Düsseldorf, dass „broken Builds“ nicht das Problem sind. Im Rahmen der Präsentation zeigten die Referenten, wie man durch geeignete Branching- und CI-Strategien stets eine stabilen Branch sicherstellen kann.
Veranschaulicht wurde das Ganze durch eine konkrete Umsetzung mittels Git / GitLab und Jenkins.
--
Über uns:
Als führender Projektspezialist für ganzheitliche IT-Lösungen tragen wir zur Wertsteigerung der Organisationen unserer Kunden bei und bringen IT und Business in Einklang. Mit OPITZ CONSULTING als zuverlässigem Partner können sich unsere Kunden auf ihr Kerngeschäft konzentrieren und ihre Wettbewerbsvorteile nachhaltig absichern und ausbauen.
Über unsere IT-Beratung: http://www.opitz-consulting.com/go/3-8-10
Unser Leistungsangebot: http://www.opitz-consulting.com/go/3-8-874
Karriere bei OPITZ CONSULTING: http://www.opitz-consulting.com/go/3-8-5
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenOdilo Oehmichen
Slides zum Vortrag von Patrick Baumgartner & Odilo Oehmichen am Java Forum Stuttgart.
Die gleichen Slides sind auch im Account von Patrick Baumgartner verfügbar.
Mit den passenden Algorithmen lassen sich aus Daten Erkenntnisse, Muster und Schlüsse gewinnen. Data Scientists steigen tief in die Welt der Daten und Algorithmen ein und entwerfen die zum Anwendungsfall passende Lösung.
Auch Führungskräfte sollten ein Grundwissen über die wichtigsten Begriffe und Zusammenhänge der Welt der Data Science haben.
Unser Vortrag gibt einen Überblick über Möglichkeiten von Big Data und Machine Learning und zeigt, wie mit agilen Mitteln und den richtigen Skills der Einstig in die neue Welt gelingt
Der Vortrag zeigt die Grenzen bisheriger Lösungen und gibt einen Überblick über neue Lösungen.
Er zeigt, wie Systemlandschaften weltweit tätiger (Internet-)Konzerne aussehen und leitet daraus herunterskalierte, praktikable Lösungen auch für kleinere Unternehmen mit weit weniger Datenvorkommen ab.
Unser Vortrag gibt einen Überblick über Möglichkeiten von Big Data und Machine Learning und zeigt, wie mit agilen Mitteln und den richtigen Skills der Einstig in die neue Welt gelingt.
Unser Vortrag gibt einen Überblick über Möglichkeiten von Big Data und Machine Learning und zeigt, wie mit agilen Mitteln und den richtigen Skills der Einstig in die neue Welt gelingt
Der Vortrag zeigt die Grenzen bisheriger Lösungen und gibt einen Überblick über neue Lösungen.
Er zeigt, wie Systemlandschaften weltweit tätiger (Internet-)Konzerne aussehen und leitet daraus herunterskalierte, praktikable Lösungen auch für kleinere Unternehmen mit weit weniger Datenvorkommen ab.
Mit den passenden Algorithmen lassen sich aus Daten Erkenntnisse, Muster und Schlüsse gewinnen. Data Scientists steigen tief in die Welt der Daten und Algorithmen ein und entwerfen die zum Anwendungsfall passende Lösung.
Auch Führungskräfte sollten ein Grundwissen über die wichtigsten Begriffe und Zusammenhänge der Welt der Data Science haben.
Unser Vortrag gibt einen Überblick über Möglichkeiten von Big Data und Machine Learning und zeigt, wie mit agilen Mitteln und den richtigen Skills der Einstig in die neue Welt gelingt.
Mit den passenden Algorithmen lassen sich aus Daten Erkenntnisse, Muster und Schlüsse gewinnen. Data Scientists steigen tief in die Welt der Daten und Algorithmen ein und entwerfen die zum Anwendungsfall passende Lösung.
Auch Führungskräfte sollten ein Grundwissen über die wichtigsten Begriffe und Zusammenhänge der Welt der Data Science haben.
Der Vortrag zeigt die Grenzen bisheriger Lösungen und gibt einen Überblick über neue Lösungen.
Er zeigt, wie Systemlandschaften weltweit tätiger (Internet-)Konzerne aussehen und leitet daraus herunterskalierte, praktikable Lösungen auch für kleinere Unternehmen mit weit weniger Datenvorkommen ab.
Mehr von IKS Gesellschaft für Informations- und Kommunikationssysteme mbH (20)
10. Unvollständige Umsetzung
Projektleiter: „Wie sieht‘s aus? Kann man denn schon etwas zeigen?“
Entwickler: „Ja, aber erst mal nur ein Schnellschuss, das kann nicht
so bleiben…“
Kunde & Projektleiter: „…sieht doch gut aus! Mehr brauchen wir doch
gar nicht!“
Welcher Entwickler hat da den Mut, sich durchzusetzen?
11. Unvollständige Umsetzung
Projektleiter A: „Stell‘ mir mal deinen aktuellen Stand zur Verfügung,
Projektleiter B braucht den, damit sein Team weiter-
arbeiten kann!“
Stimmt nicht (mehr), denn es gibt Mocks!
Interface Segregation Principle (ISP)
Dependency Inversion Principle (DIP)
Inversion of Control Container (ICC)
Test First (TF)
12. Unvollständige Umsetzung
„Lass gut sein, das ziehen wir später gerade. Hauptsache, es läuft!“
Die Erfahrung zeigt:
Nachträgliches Refactoring funktioniert nur sehr selten, weil
…es zu mühsam ist (erneutes Hineindenken)
…das Risiko ist groß ist, Fehler einzubauen
…größere Maßnahmen zeitlich kaum abschätzbar sind
…es (deswegen) Widerstand bei der Projektleitung gibt
14. Ein Fall läuft
Die guten Fälle laufen
Definition of Done
Fehlerfälle wurden untersucht
„Alle“ Fehlerfälle wurden berücksichtigt
Unit-Tests
Integrationstests
Systemtests
Metriken (statistische Code-Analysen)
Verständlichkeit (menschliche Code-Analyse)
16. Mangelnde Motivation: Broken Window
Entwickler: „Ich hab damit nichts zu tun, das ist nicht von mir!“
„Darauf kommt es jetzt auch nicht mehr an!“
„Warum soll ich anfangen, hier sauber zu implementieren?“
17. Mangelnde Motivation: Die x-te Änderung
Entwickler: „Das war so gar nicht spezifiziert!“
„Wie oft muss ich da noch ran?“
25. Termine
Dilemma:
- Termine wird es immer geben,
- Anzahl von Issues/Tickets direkt messbar,
Qualität aber nicht.
- Entwickler sind gehemmt,
die Wahrheit zu sagen.
26. Ursachen für Dirty Code
Unvollständige Umsetzung
Mangelnde Motivation
Unlogische Realisierung
Schlechte Rahmenbedingungen
Termine
Moment mal !!!
Sind wir etwa faul, feige und unfähig???
Nein! Aber wir können besser werden!
27. Agenda
Einleitung
Ursachen von Dirty Code
Die Clean Code Developer Bewegung
Das Team Clean Coding
Meinungen zu Clean-Code
28. Was heißt clean?
Def. 1: Clean ist alles, was intuitiv verständlich ist, also
(Quellcode-) Dokumente, Datenstrukturen,
Konzepte, Regeln, Verfahren....
Def. 2: Intuitiv verständlich ist, was mit wenig Spezialwissen
in kurzer Zeit richtig verstanden wird.
Def. 3: Clean ist alles, was effizient ist, also Verfahren, die
die Softwareentwicklung beschleunigen.
29.
30. Kernaussagen der
Clean-Code-Developer-Bewegung
Disziplin Ständige Selbstkontrolle („Bewusstsein“) durch
(„Professionalität“) konsequente Anwendung des
inneren Wertesystems („Prinzipien“)
Wertesystem Das Buch „Clean Code“ ist wert,
als allgemeingültiges Wertesystem
anerkannt zu werden.
Programmieralltag Das CCD-Grade-System hilft, das innere
Wertesystem aktiv einzusetzen und die
mentale CCD-Einstellung zu verinnerlichen.
www.clean-code-developer.de
31. Die Clean Code Grade:
Schwarz
Schwarz Rot Orange Gelb Grün Blau Weiss
Don´t Repeat Single Level of Interface Open Closed Entwurf und
Yourself (DRY), Abstraction Segregation Principle Implementation
Keep it simple, (SLA) Principle Tell, don´t ask überlappen nicht
stupid (KISS) Single Dependency Law of Demeter Implementa-
Responsibility Inversion Principle tion spiegelt
Prinzipien
Vorsicht vor
Optimierungen Principle (SRP) Liskov Entwurf
Separation of Substitution You Ain´t
(VvO) Principle
Favour Concerns (SoC) Gonna Need It
Principle of (YAGNI)
Composition over Source Code Least
Inheritance (FCoI) Konventionen Astonishment
Information
Hiding Principle
Die Pfadfinderregel Issue Tracking Automatisierte Continuous Continuous
beachten Automatisierte Unit Tests Integration I Integration II
Root Cause Integrationstests Mockups Statische Iterative
Praktiken
Analysis Lesen, Lesen, (Testattrappen) Codeanalyse Entwicklung
Ein Versionskon- Lesen (LLL) Code Coverage (Metriken) Komponenten-
trollsystem einsetzen Reviews Analyse Inversion of orientierung
Einfache Refakto- Teilnahme an Control Container Test first
risierungsmuster an- Fachveranstal- Erfahrung
wenden (ER) tungen weitergeben
Täglich reflektieren Komplexe Re- Messen von
faktorisierungen Fehlern
32. Was heißt Clean Code noch?
Def. 4: Clean Code ist ein Buch mit
einem umfassenden Regelwerk,
das als Sprachen über-
greifendes Wertesystem (Best
Practices) gelten kann.
Def. 5: Clean Code ist die mentale Einstellung, das
gemeinsame Wertesystem im Programmier-
alltag bewusst anzuwenden (der „Geist“ der
Clean-Code-Developer-Bewegung).
33. Was bewirkt Clean Code?
Code Entwicklung
Leicht verständlich
flexibel
Einfach änderbar
wartbar
Gut testbar
effektiv
34. Agenda
Einleitung
Ursachen von Dirty Code
Die Clean Code Developer Bewegung
Das Team Clean Coding
Meinungen zu Clean Code und zum Team Clean Coding
35.
36. Das Team Clean Coding
Warum?
Gute Vorsätze schwinden schnell Verrottung
Unterschiedliche Meinungen Wildwuchs
Mittel gegen die „Durchsetzungsstarken“ (die Stillen sind oft besser)
Motivation durch Anerkennung, Kontrolle auf Augenhöhe
37. Das Team Clean Coding
Basis-Konsens
§1 ALLE Teammitglieder (inkl. Projektleitung) verpflichten sich,
Prozesse anzuerkennen, die für ALLE gleichermaßen bindend sind.
§2 Diese Prozesse können bei Bedarf jederzeit angepasst werden.
§3 Als erstes muss ein effizientes Verfahren zur Entscheidungsfindung
etabliert werden.
38. Das Team Clean Coding
Methoden zur Entscheidungsfindung
Vorgabe des Projektleiters
Mehrheitsbeschluss
Minimierung des durchschn. Widerstands
– Vetoabfrage
– Konsensrunde
– Thumb-Voting
„Konsens bedeutet die Übereinstimmung von Menschen hinsichtlich einer
Thematik ohne verdeckten oder offenen Widerspruch.“ - Wikipedia
39. Das Team Clean Coding (Legislative)
Was muß entschieden werden?
Was bedeutet für uns die
Definition of Done?
Wie gehen wir mit unfertigem Code um?
Code Tagging: Umgang mit „fremdem Eigentum“?
Wie ist unser
Was ist für uns clean? REFACTORE_MEs:
FIXMEs, TODOs und
FIXME jvo von rob 20.02.2011: Fall kunde == null fehlt
DONE FIXMEs raus, TODOs raus oder in den Issue-Tracker
40. Das Team Clean Coding
Wege zur Einigung im Team
Daily Standups (Scrum-ähnlich)
Regelmäßige Team-Reviews
Retrospektiven
Coding-Notes kommunizieren (z.B. E-Mail an Team-Verteiler)
Pair-Programming von Erfahrenen und Unerfahrenen
4 -Reviews
41. Das Team Clean Coding
4 -Review
Am Ende der Entwicklung eines Software-Teils sucht der Autor nach
einem Teammitglied, das als Reviewer dient. Dieser prüft:
Funktionelle Korrektheit
Ausreichende Testabdeckung
FIXME- / TODO-Einträge
Einhaltung der im Team abgestimmten Clean-Code-Maßnahmen
Erst nach dem OK des Reviewers gilt der Teil als DONE!
42. Das Team Clean Coding(Judikative)
Die 1€-Regel
Ein Euro wird eingezogen bei Vergehen gegen zuvor abgestimmte Regeln.
Beispiele:
Build brechen und nach Hause gehen,
Tests brechen und sich nicht um deren Behebung bemühen,
Backend-Änderungen ohne Client-Anpassung,
Domain-Änderungen ohne DB-Skript-Anpassung,
etc.
43. Was hilft wann?
Dirty Code Ursachen Clean Code Dev. Team Clean Coding
Unklare DOD DOD definieren
Hauptsache, es läuft! Test first DOD anwenden, 4iReviews
Gasfabrik KISS, YAGNI, VvO Team-Reviews, 4iReviews
X-te Änderung Code Tagging
Broken Windows Pfadfinderregel Code Tagging
Konformitätsbrüche Reviews, ER, SCC 4iReviews
Fortbildung LLL, TAF Team-Reviews, Pairprogramming
Kommunikation Erfahrung weitergeben Wege zur Einigung im Team
Organisation Rollen & Prozesse definieren
Motivation Bewusstsein Anerkennung, 1€-Regel
Termine Mentale Einstellung DOD anwenden
44. Agenda
Einleitung
Ursachen von Dirty Code
Die Clean Code Developer Bewegung
Das Team Clean Coding
Meinungen zu Clean Code und zum Team Clean Coding
45. Clean-Code ist ist gut, man kann es – eher etwas für Ästheten!
Clean-Code gut, aber praxisfern aber leicht übertreiben!
47. Wichtig sind Funktionsfähigkeit, Stabilität, Wartbarkeit und Erweiterbarkeit.
Clean-Code ist was für Spießer – wichtig ist nur, dass es läuft!
Dazu braucht man kein Clean Code!
48. Sauberer Code - Hohe Testabdeckung
Produktionscode
Testabdeckung
Testcode
Schmutz im Code stellt eine reale Gefahr dar!
49. Clean Code kostet zusätzliche Zeit Clean Code spart Zeit
in der Entwicklung! in der Wartung!
51. Wofür steht ?
&
Software- Effektive
qualität Softwareentwicklung
52. Nicht-funktionale
Qualitätsmerkmale von Software
Das Produkt korrekt, skalierbar, performant,
(finales Ziel mit stabil, effizient, sicher (Security),
Selbstzweck) zuverlässig, gesetzeskonform,
gut bedienbar
Der Entwicklungs- wirtschaftlich, testbar, erweiterbar,
prozess veränderbar, analysierbar, wartbar
(Zwischenziel, nur
Mittel zum Zweck)
56. Weiterführende Literatur
Effective Java (2nd Edition), Joshua Bloch, Addison-Wesley, 2008
Der Weg zum Java-Profi, dpunkt-Verlag, 2011
Bug-Patterns in Java, Eric Allen, Apress, 2002
More Java Pitfalls, Wiley, 2003
57. Weiterführende Literatur
Clean Code, Robert C. Martin, Prentice Hall, 2008
The Clean Coder, Robert C. Martin, Prentice Hall, 2011
Clean Coder: Verhaltensregeln für professionelle Programmierer,
Robert C. Martin, Addison-Wesley, 2011
The Pragmatic Programmer, Addison-Wesley, 1999
Soft Skills für Softwareentwickler, dpunkt-Verlag, 2010
http://www.clean-code-developer.de
http://de.wikipedia.org/wiki/Clean_Code
http://www.clean-code.info
58. Diskussion
Worin siehst Du Probleme in der Anwendung?
Welche Art von Unterstützung brauchst Du im Programmier-Alltag?
Ist diese Selbstkontrolle so schwer, dass man ein Team Clean
Codingbenötigt?
59. Bildernachweise
Die in diesem Vortrag verwendeten Bilder stammen von folgenden Quellen:
Folie 6: http://www.flickr.com/photos/pringels/3139474250/sizes/l/in/photostream/
Folie 7: http://www.flickr.com/photos/23313526@N07/4948442428/sizes/l/in/photostream/
http://www.flickr.com/photos/29747502@N03/2784238062/sizes/l/in/photostream/
Folie 8: http://www.flickr.com/photos/buridansesel/6163446452/sizes/l/in/photostream/
Folie 9: http://office.microsoft.com/en-us/images
http://officeimg.vo.msecnd.net/en-us/images/MB900443111.jpg
http://officeimg.vo.msecnd.net/en-us/images/MB900443251.jpg
Folie 10: http://office.microsoft.com/en-us/images
Folie 11: http://photos.signonsandiego.com/album55/mud02
Folie 13: http://www.sxc.hu/browse.phtml?f=download&id=1099152
Folie 14: http://upload.wikimedia.org/wikipedia/commons/9/91/22_West_-_view_from_window.jpg
64. Continuous Build / Integration
1. Diese Tools ermöglichen einen automatischen Build der
eingecheckten Sourcen
2. Getriggert: Zeitgesteuert, per Hand, Einchecken
3. ANT / Maven / Skript-Integration
4. Automatisches Deploy-
ment möglich
TeamCity
– Ab einer Größe
kostenpflichtig
Hudson, Jenkins
– Open Source
65. Qualitätssicherung
Sonar
– Open Source
– Zusätzliches Tool zum Continuous Build
– Berechnet zahlreiche Code-Metriken
– Erzeugt schöne Grafiken
– (Eigene) Plugins möglich
66. t.addCell (new Phrase(formatDateString(
sd.date == null || "".equals (sd.date) ?
sh.date.substring (0, 4) : sd.date), f));
Date datum = strukturDaten.date;
if (datum == null) {
datum = strukturHelper.date;
}
String datumFormatiert = formatDate(datum);
Phrase phrase = new Phrase(datumFormatiert, format);
table.addCell(phrase);