This document discusses design pattern automation and the use of pattern-aware compilers. It provides a history of programming languages and patterns, defines design pattern automation as using tools to optimize productivity in implementing software based on patterns. It discusses how pattern-oriented software development involves implementing patterns at multiple levels of abstraction. It also addresses myths around why patterns cannot be automated and argues that emerging design and agile methodologies allow patterns to naturally emerge from iterative design processes. An example of applying automation to the Reader-Writer pattern through code generation and verification is also provided.
Annotations are more than PHPDoc comments, they’re a fully-featured way of including additional information alongside your code. We might have rejected an RFC to add support into the PHP core, but the community has embraced this tool anyway!
This session shows you who is doing what with annotations, and will give you some ideas on how to use the existing tools in your own projects to keep life simple. Developers, architects and anyone responsible for the technical direction of an application should attend this session.
(4) c sharp introduction_object_orientation_part_i
This document provides an introduction to object-oriented programming concepts in C#, including:
- Simulating reality through modeling real-world entities as classes with data fields and behavior methods.
- Relationships between classes like aggregation ("has-a") and generalization ("is-a") hierarchies.
- Defining classes with fields to represent an object's state, and methods to represent its behavior.
- Inheritance and specialization, where derived classes extend base classes while maintaining the substitution principle.
- Other concepts like encapsulation, properties, and class diagrams using UML notation.
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
This document discusses model-driven engineering and metaprogramming. It begins by explaining why learning model-driven engineering from code is useful. It then discusses the relationships between models and code, including code generation from models and reverse engineering models from code. The document introduces concepts like metaprogramming and reflection. It also discusses aspect-oriented programming and how it relates to manipulating classes and objects. Finally, it provides an example of implementing the observer design pattern in Java and aspect-oriented programming.
Paul Nathan gave a presentation on practical functional programming. He began by introducing himself and explaining why functional programming is an important paradigm to learn. He then defined key concepts in functional programming like first class functions, differences from object oriented programming, avoiding side effects, and advanced type systems. The presentation included examples in Haskell and Common Lisp to demonstrate how functional programming is implemented in different languages.
This document discusses using examples and executable specifications to communicate how to use a new domain-specific language. It describes three roles in language development - the language designer, domain expert, and language users. Four important use cases are outlined: specifying the language, developing an IDE, acceptance testing, and teaching the language. Xpect is introduced as a tool that allows writing executable specifications and tests using examples as test data.
The Ring programming language version 1.6 book - Part 181 of 189
The document provides documentation on the Ring programming language, including details on various Ring classes and their methods. It describes classes like QCoreApplication, QTextBrowser, and QRegion that are part of the Qt framework. It also includes frequently asked questions about Ring and comparisons to other programming languages.
This document discusses various code quality tools such as FindBugs, PMD, and Checkstyle. It provides information on what each tool is used for, how to install plugins for them in Eclipse, and how to configure them for use with Ant builds. FindBugs looks for potential bugs in Java bytecode. PMD scans source code for coding mistakes, dead code, complicated expressions, and duplicate code. Checkstyle checks that code complies with coding style rules. The document explains how to download and configure each tool so it can be run from Eclipse or as part of an Ant build.
This document discusses LINQ (Language Integrated Query) features in C#, including introducing LINQ to Objects, basic query expressions for projection and selection, and anonymous types. It provides examples of how LINQ to Objects maps to extension methods, functional and declarative expressibility using LINQ, details about the LINQ translation process from query expressions to method calls, and examples of using anonymous types.
This document provides an introduction to object-oriented programming (OOP) concepts. It discusses the history and advantages of OOP, including enabling code reuse through inheritance and encapsulation. Key OOP concepts covered include classes, objects, encapsulation, abstraction, inheritance, polymorphism, and the differences between abstraction and encapsulation. Examples are provided to illustrate classes, objects, encapsulation, and the differences between structured and object-oriented programming.
Functional Leap of Faith (Keynote at JDay Lviv 2014)
Keynote talk given at JDay Lviv 2014 in Ukraine (http://www.jday.com.ua/). Video coming soon.
Abstract:
Some say that there's nothing new under the sun. However, looking back on five to six decades of computing, it's easy to see that things progress at their own leisurly pace. Structured programming, originating in the '60s, did not gain mainstream adoption until the '80s; object-oriented programming was hotly debated in the '70s and '80s but only gained widespread acceptance in the '90s. Every couple of decades sees an engineering leap that radically improves the software engineering discipline across the board. I believe we are now at such an inflection point, with functional programming concepts slowly sifting into the mainstream. After this talk, I hope you will too.
This document provides an overview of computer languages and the programming process. It discusses machine language as the lowest-level language understood by computers. Higher-level languages like assembly and programming languages make programming easier for humans. It also describes the programming process, which involves defining problems, planning solutions, coding, testing, and documenting programs. Finally, it discusses different types of program translators like assemblers, compilers, and interpreters that translate human-readable code into machine-readable code.
The presentation was about Maglev, an object server that provides automatically persisted objects without using an ORM or SQL. It allows objects to be transactional and multi-VM. The goals of Maglev include having no object to RDB mapping, no SQL queries, no save or update methods, separation of transactional code from model code, and no coupling between models and web frameworks. Examples showed using Maglev to develop investment portfolio applications with accounts, portfolios, and transactions just as objects without persistence concerns. Conclusions were that Maglev allows simpler, easier, and cheaper development just with objects.
This document discusses the history of computing and programming languages. It notes that many revolutionary ideas from the past are not yet common, such as treating code as objects and dynamic programs that can change as they run. The document advocates learning from the past by reading seminal works and learning languages like Lisp, Smalltalk, and Self to challenge current assumptions. Understanding our history can help us avoid reinventing solutions and using better approaches.
The document discusses design patterns in Ruby compared to Java. Some key points:
- Ruby classes are objects while Java uses classes and objects. Ruby uses message passing while Java uses method calls.
- Ruby has built-in support for common patterns like Singleton, Observer, Iterator through mixins. These are implemented differently in Java.
- Other patterns like Factory Method, Command are easily implemented in Ruby thanks to features like mixins and blocks/procs.
- The document provides an overview of several design patterns and how they translate from Java to Ruby.
Programming languages have evolved significantly since the earliest examples in the 18th century. The document then lists over 100 programming languages in chronological order from 1949 to 1991, showing how each new language was influenced by its predecessors and developed new capabilities. Major languages included FORTRAN, COBOL, ALGOL, LISP, Pascal, C, Ada, Smalltalk, and Haskell.
Gael Fraiteur argues that multithreaded programming needs to be addressed at the right level of abstraction, with design patterns like Actor, Immutable, Freezable, Thread Affine, Reader-Writer-Synchronized. Design patterns form a language and serve as a model against which code can be expressed. Compilers must support design patterns to allow code to be deterministically validated against the model, and of course to generate the low-level instructions that would be otherwise written manually.
Part of an introductory series given to new hires and interns, this talk is a crash course in design patterns and engineering best practices for new-grads with mostly academic computer science experience. Focuses on the things they don't teach you: naming things, working on a team, optimizing for maintainability.
This document discusses various JavaScript design patterns and best practices including:
- Common design patterns like singleton, factory, decorator, and observer.
- Minimizing global variables by declaring variables with a single var statement.
- Hoisting and how it provides access to function and variable declarations.
- Classical inheritance patterns like using the prototype, renting a constructor, and sharing the prototype.
- Defining functions as expressions vs declarations and how hoisting works.
- Using immediate functions to provide scope and execute initialization code.
- Callbacks and how they are used in asynchronous code.
The document discusses several object-oriented design patterns including Iterator, Decorator, Strategy, and Observer providing an overview and examples of each pattern describing how they address common programming problems and their benefits for reusable and flexible code. It also discusses how design patterns were documented in influential books and how they provide solutions to problems that occur frequently in software design through interfaces and classes that can be implemented in many different ways.
This document discusses using Groovy to create domain-specific languages (DSLs). It explains that DSLs use specialized syntax and grammar to interact with a specific domain. Groovy is well-suited for building DSLs through features like builders, categories, meta-object protocol (MOP), and abstract syntax tree (AST) transformations. Builders allow hierarchical structures to be defined concisely. Categories extend functionality without inheritance. MOP allows dynamic methods and properties. AST transformations hook into the compilation process. The document provides examples of each technique and describes a case study of a Groovy DSL called Grint for integration patterns.
Chapter 02 of the lecture Style & Design Principles taught at SAE Institute Hamburg.
Introduction to advanced concepts of object-oriented design, such as delegation, polymorphism, cohesion and coupling, and to behavioral, creational and structural design patterns.
В рамках C/C++/Embedded місяця у GlobalLogic нещодавно відбувся Online TechTalk "Patterns in Embedded SW Design"
Спікер розібрав паттерни на кісточки: від поняття до практичного використання з прикладом проєктного коду.
У доповіді спеціаліст розглянув:
- Поняття патернів у програмному забезпеченні з акцентом на Embedded розробку.
- Основні переваги використання патернів.
- Класифікацію патернів для Embedded напрямку, деякі з них було розглянуто.
- Було наведено приклад використання на прикладі проєктного коду.
Деталі та відео заходу: https://bit.ly/3DaKx7t
This document summarizes 10 ways to improve code based on a presentation by Neal Ford. The techniques discussed include composing methods to perform single tasks, test-driven development to design through tests, using static analysis tools to find bugs, avoiding singletons, applying the YAGNI principle to only build what is needed, questioning conventions, embracing polyglot programming, learning Java nuances, enforcing the single level of abstraction principle, and considering "anti-objects" that go against object-oriented design. Questions from the audience are then addressed.
[1] Design patterns provide flexible and reusable solutions to common software design problems. They improve code quality by avoiding reinventing solutions and allowing knowledge sharing.
[2] The Strategy pattern allows algorithms to be changed independently of clients that use them. This decouples classes from specific implementations so one class can support multiple behaviors.
[3] Tightly coupled patterns have high dependency between common classes, while loosely coupled patterns connect classes loosely to improve maintainability and reusability. The Abstract Factory and Visitor patterns can be loosely coupled to benefit software quality.
More information, visit: http://www.godatadriven.com/accelerator.html
Data scientists aren’t a nice-to-have anymore, they are a must-have. Businesses of all sizes are scooping up this new breed of engineering professional. But how do you find the right one for your business?
The Data Science Accelerator Program is a one year program, delivered in Amsterdam by world-class industry practitioners. It provides your aspiring data scientists with intensive on- and off-site instruction, access to an extensive network of speakers and mentors and coaching.
The Data Science Accelerator Program helps you assess and radically develop the skills of your data science staff or recruits.
Our goal is to deliver you excellent data scientists that help you become a data driven enterprise.
The right tools
We teach your organisation the proven data science tools.
The right hands
We are trusted by many industry leading partners.
The right experience
We've done big data and data science at many clients, we know what the real world is like.
The right experts
We have a world class selection of lecturers that you will be working with.
Vincent D. Warmerdam
Jonathan Samoocha
Ivo Everts
Rogier van der Geer
Ron van Weverwijk
Giovanni Lanzani
The right curriculum
We meet twice a month. Once for a lecture, once for a hackathon.
Lectures
The RStudio stack.
The art of simulation.
The iPython stack.
Linear modelling.
Operations research.
Nonlinear modelling.
Clustering & ensemble methods.
Natural language processing.
Time series.
Visualisation.
Scaling to big data.
Advanced topics.
Hackathons
Scrape and mine the internet.
Solving multiarmed bandit problems.
Webdev with flask and pandas as a backend.
Build an automation script for linear models.
Build a heuristic tsp solver.
Code review your automation for nonlinear models.
Build a method that outperforms random forests.
Build a markov chain to generate song lyrics.
Predict an optimal portfolio for the stock market.
Create an interactive d3 app with backend.
Start up a spark cluster with large s3 data.
You pick!
Interested?
Ping us here. signal@godatadriven.com
This document discusses design patterns and provides an example of applying the Observer pattern. It begins with an introduction to design patterns and issues in software development. It then explains the Observer pattern, how it is implemented in Java using the Observable and Observer classes, and provides a code example to demonstrate how the pattern can be used with a ConcreteSubject, NameObserver, and PriceObserver classes. The example shows how the observers are notified of changes to the subject.
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
I never wrote it; everybody else did! How many times have you waded through an ageing, decaying, tangled forrest of code and wished it would just die? How many times have you heard someone say that what really needs to happen is a complete rewrite? I have heard this many times, and, have uttered that fatal sentence myself. But shouldn’t we love our legacy code? Doesn’t it represent our investment and the hard work of ourselves and our predecessors? Throwing it away is dangerous, because, before we do, we’ll need to work out exactly what it does, and we’ll need to tweeze out that critical business logic nestled in a deeply entangled knot of IF statements. It could take us years to do, and we’ll have to maintain two systems whilst we do it, inevitably adding new features to them both. Yes we get to reimplement using the latest, coolest programming language, instead of an old behemoth, but how long will our new cool language be around, and who will maintain that code, when it itself inevitably turns to legacy? We can throw our arms in the air, complaining and grumbling about how we didn’t write the code, how we would never have written it the way it is, how those that wrote it were lesser programmers, possibly lesser humans themselves, but the code still remains, staring us in the face and hanging around for longer that we could possibly imagine. We can sort it out, we can improve it, we can make it testable, and we can learn to love our legacy code.
https://www.youtube.com/watch?v=qRP45l5UugE
This document discusses software design patterns. It defines a design pattern as a general reusable solution to common problems in software design. It describes the Gang of Four (GOF) design patterns book, which introduced and popularized design patterns. The GOF patterns are divided into creational, structural, and behavioral categories. Creational patterns deal with object creation. Structural patterns concern class and object composition. Behavioral patterns address communication between objects. Examples are provided for some of the most common patterns.
This document discusses 10 ways to improve programming code through practices like composing methods, test-driven development, static analysis, and questioning assumptions. It encourages techniques like short single-purpose methods, writing tests before code, using tools like FindBugs, avoiding unnecessary complexity, and continually learning language nuances. Examples show refactoring code to follow these practices. Resources are provided on related topics like pair programming and anti-object-oriented design.
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
Structured exception handling and defensive programming are the two pillars of robust software.
Both pillars fail however when it comes to handling internal faults, those that normally originate in software defects rather than in any external factors.
In this webinar, Zoran Horvat demonstrates advanced defensive coding techniques that can bring the quality of your code to an entirely new level.
Watch the webinar and learn:
When throwing an exception is the right thing to do
Why exceptions and defensive coding cannot be applied to recover from defects
How to handle situations when internal software defect is causing the fault
How to treat fault detection as an orthogonal concern to normal operation
The webinar recording can be found here:
http://www.postsharp.net/blog/post/webinar-recording-defensive-programming
Applying Object Composition to Build Rich Domain Models
Modern business applications rely heavily on rich domain classes, which in turn rely heavily on polymorphic execution, code reuse and similar concepts.
How can we extend rich domain classes to support complex requirements?
In this presentation, Zoran Horvat will show why an object composition approach is favored over class inheritance when it comes to code reuse and polymorphism.
The presentation covers:
How class inheritance can lead to combinatorial explosion of classes
What the limitations of object composition are
What design patterns help consume composed objects
Techniques for creating rich features on composed objects
Watch the webinar recording here: http://www.postsharp.net/blog/post/webinar-recording-object-composition
Starting with the premise that "Performance is a Feature", Matt Warren will show you how to measure, what to measure and how to get the best performance from your .NET code.
We will look at real-world examples from the Roslyn code-base and StackOverflow (the product), including how the .NET Garbage Collector needs to be tamed!
The presentation covers:
Why we should care about performance
Pitfalls to avoid when measuring performance
How the .NET Garbage Collector can hurt performance
Real-world performance lessons from open-source code
The webinar recording can be found here: http://www.postsharp.net/blog/post/webinar-recording-performance-is-a-feature
Building Better Architecture with UX-Driven Design
How do you avoid the dreaded "this is not what we asked for" and ensure customer satisfaction when building a new system?
In this webinar, Dino Esposito demonstrates a top-down methodology, sometimes mistaken for plain common sense and often boldly ignored, called UX-Driven Design (UXDD).
UXDD means coming to a visual agreement with customers by using wireframing tools to iterate on sketches of the new system before building it. Then, rather than building the system from the data model, you proceed in a top-down fashion instead. The resulting system may be slow or even inefficient but it will never be the “wrong” system! In addition, UXDD leads to clarity on a few of today’s most popular patterns that are sometimes difficult to understand like CQRS and Event Sourcing.
The presentation covers:
An introduction to Wireframing tools
Proven ways to save on post-first deployment costs
Insights into better customer relationships
Better focus on development without 'analysis paralysis'
You can watch the webinar recording here:
http://www.postsharp.net/blog/post/webinar-recording-ux-driven-design
Solving Localization Challenges with Design Pattern Automation
Localization is crucial for reaching out to a global audience, however, it’s often an afterthought for most developers and non-trivial to implement. Traditionally, game developers have outsourced this task due to its time consuming nature.
But it doesn’t have to be this way.
Yan Cui will show you a simple technique his team used at GameSys which allowed them to localize an entire story-driven, episodic MMORPG (with over 5000 items and 1500 quests) in under an hour of work and 50 lines of code, with the help of PostSharp.
Applying a Methodical Approach to Website Performance
When addressing website performance issues, developers typically jump to conclusions, focusing on the perceived causes rather than uncovering the real causes through research.
Mitchel Sellers will show you how to approach website performance issues with a level of consistency that ensures they're properly identified and resolved so you'll avoid jumping to conclusions in the future.
You can watch the webinar recording here:
https://www.postsharp.net/documentation/video?id=190066128
10 Reasons You MUST Consider Pattern-Aware Programming
Developers spend up to 20% of their time writing repetitive code that machines could generate more reliably. This presentation explores the problem of duplicated source code that stems from manual implementation of patterns and reveals how to automate the boring side of programming and get a 19x ROI.
The presentation provides insight into:
- the problem of manual implementation of patterns, resulting in boilerplate code
- the cost of boilerplate for companies
- existing technologies for pattern automation
- the key reasons to consider pattern-aware compiler extensions
The white paper was written for CTOs, software architects and senior developers in software-driven organizations—specifically in financial, insurance, healthcare, energy and IT industries that typically write a lot of repetitive code.
Everybody knows the lock keyword, but how does it implemented? What are its performance characteristics. Gael Fraiteur scratches the surface of multithreaded programming in .NET and goes deep through the Windows Kernel down to CPU microarchitecture.
Produce Cleaner Code with Aspect-Oriented Programming
This document introduces aspect-oriented programming (AOP) and how it can be used to separate cross-cutting concerns from core business logic. It discusses how AOP frameworks like PostSharp allow aspects to modularize features like logging, transactions, and security. The document provides an example of how a rental booking method grows over time to include these concerns. It compares different AOP frameworks and concludes that PostSharp allows building aspects with strong robustness while minimizing code invasiveness.
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
Six months into 2024, and it is clear the privacy ecosystem takes no days off!! Regulators continue to implement and enforce new regulations, businesses strive to meet requirements, and technology advances like AI have privacy professionals scratching their heads about managing risk.
What can we learn about the first six months of data privacy trends and events in 2024? How should this inform your privacy program management for the rest of the year?
Join TrustArc, Goodwin, and Snyk privacy experts as they discuss the changes we’ve seen in the first half of 2024 and gain insight into the concrete, actionable steps you can take to up-level your privacy program in the second half of the year.
This webinar will review:
- Key changes to privacy regulations in 2024
- Key themes in privacy and data governance in 2024
- How to maximize your privacy program in the second half of 2024
Measuring the Impact of Network Latency at Twitter
Widya Salim and Victor Ma will outline the causal impact analysis, framework, and key learnings used to quantify the impact of reducing Twitter's network latency.
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
Your comprehensive guide to RPA in healthcare for 2024. Explore the benefits, use cases, and emerging trends of robotic process automation. Understand the challenges and prepare for the future of healthcare automation
Annotations are more than phpdoc comments, they're a fully-featured way of including additional information alongside your code. We might have rejected an RFC to add support into the PHP core, but the community has embraced this tool anyway! This session shows you who is doing what with annotations, and will give you some ideas on how to use the existing tools in your own projects to keep life simple. Developers, architects and anyone responsible for the technical direction of an application should attend this session.
The document discusses F# and the Dynamic Language Runtime (DLR). It provides an overview of F# as a functional-first multi-paradigm language for .NET that allows for imperative and object-oriented programming. It also describes the DLR and how it enables dynamic languages like Python and Ruby to run on .NET and interoperate with existing .NET code. The DLR architecture is explained along with use cases like test-driven development, web development, and embedding dynamic languages in applications.
This document compares and contrasts the Scala and F# programming languages. Both languages are functional-first but allow imperative programming. Some key similarities include static typing, type inference, and functional libraries. Differences include Scala embracing both object-oriented and functional paradigms while F# is functional-first, and F# having a simpler syntax focused on consistency while Scala has a more flexible syntax. Code examples demonstrate differences in syntax for concepts like functions, pattern matching, and collections between the two languages.
PHP Annotations: They exist! - JetBrains WebinarRafael Dohms
Annotations are more than PHPDoc comments, they’re a fully-featured way of including additional information alongside your code. We might have rejected an RFC to add support into the PHP core, but the community has embraced this tool anyway!
This session shows you who is doing what with annotations, and will give you some ideas on how to use the existing tools in your own projects to keep life simple. Developers, architects and anyone responsible for the technical direction of an application should attend this session.
(4) c sharp introduction_object_orientation_part_iNico Ludwig
This document provides an introduction to object-oriented programming concepts in C#, including:
- Simulating reality through modeling real-world entities as classes with data fields and behavior methods.
- Relationships between classes like aggregation ("has-a") and generalization ("is-a") hierarchies.
- Defining classes with fields to represent an object's state, and methods to represent its behavior.
- Inheritance and specialization, where derived classes extend base classes while maintaining the substitution principle.
- Other concepts like encapsulation, properties, and class diagrams using UML notation.
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...Jean-Michel Bruel
This document discusses model-driven engineering and metaprogramming. It begins by explaining why learning model-driven engineering from code is useful. It then discusses the relationships between models and code, including code generation from models and reverse engineering models from code. The document introduces concepts like metaprogramming and reflection. It also discusses aspect-oriented programming and how it relates to manipulating classes and objects. Finally, it provides an example of implementing the observer design pattern in Java and aspect-oriented programming.
Paul Nathan gave a presentation on practical functional programming. He began by introducing himself and explaining why functional programming is an important paradigm to learn. He then defined key concepts in functional programming like first class functions, differences from object oriented programming, avoiding side effects, and advanced type systems. The presentation included examples in Haskell and Common Lisp to demonstrate how functional programming is implemented in different languages.
This document discusses using examples and executable specifications to communicate how to use a new domain-specific language. It describes three roles in language development - the language designer, domain expert, and language users. Four important use cases are outlined: specifying the language, developing an IDE, acceptance testing, and teaching the language. Xpect is introduced as a tool that allows writing executable specifications and tests using examples as test data.
The Ring programming language version 1.6 book - Part 181 of 189Mahmoud Samir Fayed
The document provides documentation on the Ring programming language, including details on various Ring classes and their methods. It describes classes like QCoreApplication, QTextBrowser, and QRegion that are part of the Qt framework. It also includes frequently asked questions about Ring and comparisons to other programming languages.
This document discusses various code quality tools such as FindBugs, PMD, and Checkstyle. It provides information on what each tool is used for, how to install plugins for them in Eclipse, and how to configure them for use with Ant builds. FindBugs looks for potential bugs in Java bytecode. PMD scans source code for coding mistakes, dead code, complicated expressions, and duplicate code. Checkstyle checks that code complies with coding style rules. The document explains how to download and configure each tool so it can be run from Eclipse or as part of an Ant build.
This document discusses LINQ (Language Integrated Query) features in C#, including introducing LINQ to Objects, basic query expressions for projection and selection, and anonymous types. It provides examples of how LINQ to Objects maps to extension methods, functional and declarative expressibility using LINQ, details about the LINQ translation process from query expressions to method calls, and examples of using anonymous types.
This document provides an introduction to object-oriented programming (OOP) concepts. It discusses the history and advantages of OOP, including enabling code reuse through inheritance and encapsulation. Key OOP concepts covered include classes, objects, encapsulation, abstraction, inheritance, polymorphism, and the differences between abstraction and encapsulation. Examples are provided to illustrate classes, objects, encapsulation, and the differences between structured and object-oriented programming.
Functional Leap of Faith (Keynote at JDay Lviv 2014)Tomer Gabel
Keynote talk given at JDay Lviv 2014 in Ukraine (http://www.jday.com.ua/). Video coming soon.
Abstract:
Some say that there's nothing new under the sun. However, looking back on five to six decades of computing, it's easy to see that things progress at their own leisurly pace. Structured programming, originating in the '60s, did not gain mainstream adoption until the '80s; object-oriented programming was hotly debated in the '70s and '80s but only gained widespread acceptance in the '90s. Every couple of decades sees an engineering leap that radically improves the software engineering discipline across the board. I believe we are now at such an inflection point, with functional programming concepts slowly sifting into the mainstream. After this talk, I hope you will too.
This document provides an overview of computer languages and the programming process. It discusses machine language as the lowest-level language understood by computers. Higher-level languages like assembly and programming languages make programming easier for humans. It also describes the programming process, which involves defining problems, planning solutions, coding, testing, and documenting programs. Finally, it discusses different types of program translators like assemblers, compilers, and interpreters that translate human-readable code into machine-readable code.
The presentation was about Maglev, an object server that provides automatically persisted objects without using an ORM or SQL. It allows objects to be transactional and multi-VM. The goals of Maglev include having no object to RDB mapping, no SQL queries, no save or update methods, separation of transactional code from model code, and no coupling between models and web frameworks. Examples showed using Maglev to develop investment portfolio applications with accounts, portfolios, and transactions just as objects without persistence concerns. Conclusions were that Maglev allows simpler, easier, and cheaper development just with objects.
This document discusses the history of computing and programming languages. It notes that many revolutionary ideas from the past are not yet common, such as treating code as objects and dynamic programs that can change as they run. The document advocates learning from the past by reading seminal works and learning languages like Lisp, Smalltalk, and Self to challenge current assumptions. Understanding our history can help us avoid reinventing solutions and using better approaches.
The document discusses design patterns in Ruby compared to Java. Some key points:
- Ruby classes are objects while Java uses classes and objects. Ruby uses message passing while Java uses method calls.
- Ruby has built-in support for common patterns like Singleton, Observer, Iterator through mixins. These are implemented differently in Java.
- Other patterns like Factory Method, Command are easily implemented in Ruby thanks to features like mixins and blocks/procs.
- The document provides an overview of several design patterns and how they translate from Java to Ruby.
Programming languages have evolved significantly since the earliest examples in the 18th century. The document then lists over 100 programming languages in chronological order from 1949 to 1991, showing how each new language was influenced by its predecessors and developed new capabilities. Major languages included FORTRAN, COBOL, ALGOL, LISP, Pascal, C, Ada, Smalltalk, and Haskell.
Gael Fraiteur argues that multithreaded programming needs to be addressed at the right level of abstraction, with design patterns like Actor, Immutable, Freezable, Thread Affine, Reader-Writer-Synchronized. Design patterns form a language and serve as a model against which code can be expressed. Compilers must support design patterns to allow code to be deterministically validated against the model, and of course to generate the low-level instructions that would be otherwise written manually.
Software Engineering Best Practices @ NylasBen Gotow
Part of an introductory series given to new hires and interns, this talk is a crash course in design patterns and engineering best practices for new-grads with mostly academic computer science experience. Focuses on the things they don't teach you: naming things, working on a team, optimizing for maintainability.
This document discusses various JavaScript design patterns and best practices including:
- Common design patterns like singleton, factory, decorator, and observer.
- Minimizing global variables by declaring variables with a single var statement.
- Hoisting and how it provides access to function and variable declarations.
- Classical inheritance patterns like using the prototype, renting a constructor, and sharing the prototype.
- Defining functions as expressions vs declarations and how hoisting works.
- Using immediate functions to provide scope and execute initialization code.
- Callbacks and how they are used in asynchronous code.
The document discusses several object-oriented design patterns including Iterator, Decorator, Strategy, and Observer providing an overview and examples of each pattern describing how they address common programming problems and their benefits for reusable and flexible code. It also discusses how design patterns were documented in influential books and how they provide solutions to problems that occur frequently in software design through interfaces and classes that can be implemented in many different ways.
This document discusses using Groovy to create domain-specific languages (DSLs). It explains that DSLs use specialized syntax and grammar to interact with a specific domain. Groovy is well-suited for building DSLs through features like builders, categories, meta-object protocol (MOP), and abstract syntax tree (AST) transformations. Builders allow hierarchical structures to be defined concisely. Categories extend functionality without inheritance. MOP allows dynamic methods and properties. AST transformations hook into the compilation process. The document provides examples of each technique and describes a case study of a Groovy DSL called Grint for integration patterns.
Chapter 02 of the lecture Style & Design Principles taught at SAE Institute Hamburg.
Introduction to advanced concepts of object-oriented design, such as delegation, polymorphism, cohesion and coupling, and to behavioral, creational and structural design patterns.
В рамках C/C++/Embedded місяця у GlobalLogic нещодавно відбувся Online TechTalk "Patterns in Embedded SW Design"
Спікер розібрав паттерни на кісточки: від поняття до практичного використання з прикладом проєктного коду.
У доповіді спеціаліст розглянув:
- Поняття патернів у програмному забезпеченні з акцентом на Embedded розробку.
- Основні переваги використання патернів.
- Класифікацію патернів для Embedded напрямку, деякі з них було розглянуто.
- Було наведено приклад використання на прикладі проєктного коду.
Деталі та відео заходу: https://bit.ly/3DaKx7t
This document summarizes 10 ways to improve code based on a presentation by Neal Ford. The techniques discussed include composing methods to perform single tasks, test-driven development to design through tests, using static analysis tools to find bugs, avoiding singletons, applying the YAGNI principle to only build what is needed, questioning conventions, embracing polyglot programming, learning Java nuances, enforcing the single level of abstraction principle, and considering "anti-objects" that go against object-oriented design. Questions from the audience are then addressed.
[1] Design patterns provide flexible and reusable solutions to common software design problems. They improve code quality by avoiding reinventing solutions and allowing knowledge sharing.
[2] The Strategy pattern allows algorithms to be changed independently of clients that use them. This decouples classes from specific implementations so one class can support multiple behaviors.
[3] Tightly coupled patterns have high dependency between common classes, while loosely coupled patterns connect classes loosely to improve maintainability and reusability. The Abstract Factory and Visitor patterns can be loosely coupled to benefit software quality.
More information, visit: http://www.godatadriven.com/accelerator.html
Data scientists aren’t a nice-to-have anymore, they are a must-have. Businesses of all sizes are scooping up this new breed of engineering professional. But how do you find the right one for your business?
The Data Science Accelerator Program is a one year program, delivered in Amsterdam by world-class industry practitioners. It provides your aspiring data scientists with intensive on- and off-site instruction, access to an extensive network of speakers and mentors and coaching.
The Data Science Accelerator Program helps you assess and radically develop the skills of your data science staff or recruits.
Our goal is to deliver you excellent data scientists that help you become a data driven enterprise.
The right tools
We teach your organisation the proven data science tools.
The right hands
We are trusted by many industry leading partners.
The right experience
We've done big data and data science at many clients, we know what the real world is like.
The right experts
We have a world class selection of lecturers that you will be working with.
Vincent D. Warmerdam
Jonathan Samoocha
Ivo Everts
Rogier van der Geer
Ron van Weverwijk
Giovanni Lanzani
The right curriculum
We meet twice a month. Once for a lecture, once for a hackathon.
Lectures
The RStudio stack.
The art of simulation.
The iPython stack.
Linear modelling.
Operations research.
Nonlinear modelling.
Clustering & ensemble methods.
Natural language processing.
Time series.
Visualisation.
Scaling to big data.
Advanced topics.
Hackathons
Scrape and mine the internet.
Solving multiarmed bandit problems.
Webdev with flask and pandas as a backend.
Build an automation script for linear models.
Build a heuristic tsp solver.
Code review your automation for nonlinear models.
Build a method that outperforms random forests.
Build a markov chain to generate song lyrics.
Predict an optimal portfolio for the stock market.
Create an interactive d3 app with backend.
Start up a spark cluster with large s3 data.
You pick!
Interested?
Ping us here. signal@godatadriven.com
This document discusses design patterns and provides an example of applying the Observer pattern. It begins with an introduction to design patterns and issues in software development. It then explains the Observer pattern, how it is implemented in Java using the Observable and Observer classes, and provides a code example to demonstrate how the pattern can be used with a ConcreteSubject, NameObserver, and PriceObserver classes. The example shows how the observers are notified of changes to the subject.
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018Mike Harris
I never wrote it; everybody else did! How many times have you waded through an ageing, decaying, tangled forrest of code and wished it would just die? How many times have you heard someone say that what really needs to happen is a complete rewrite? I have heard this many times, and, have uttered that fatal sentence myself. But shouldn’t we love our legacy code? Doesn’t it represent our investment and the hard work of ourselves and our predecessors? Throwing it away is dangerous, because, before we do, we’ll need to work out exactly what it does, and we’ll need to tweeze out that critical business logic nestled in a deeply entangled knot of IF statements. It could take us years to do, and we’ll have to maintain two systems whilst we do it, inevitably adding new features to them both. Yes we get to reimplement using the latest, coolest programming language, instead of an old behemoth, but how long will our new cool language be around, and who will maintain that code, when it itself inevitably turns to legacy? We can throw our arms in the air, complaining and grumbling about how we didn’t write the code, how we would never have written it the way it is, how those that wrote it were lesser programmers, possibly lesser humans themselves, but the code still remains, staring us in the face and hanging around for longer that we could possibly imagine. We can sort it out, we can improve it, we can make it testable, and we can learn to love our legacy code.
https://www.youtube.com/watch?v=qRP45l5UugE
This document discusses software design patterns. It defines a design pattern as a general reusable solution to common problems in software design. It describes the Gang of Four (GOF) design patterns book, which introduced and popularized design patterns. The GOF patterns are divided into creational, structural, and behavioral categories. Creational patterns deal with object creation. Structural patterns concern class and object composition. Behavioral patterns address communication between objects. Examples are provided for some of the most common patterns.
This document discusses 10 ways to improve programming code through practices like composing methods, test-driven development, static analysis, and questioning assumptions. It encourages techniques like short single-purpose methods, writing tests before code, using tools like FindBugs, avoiding unnecessary complexity, and continually learning language nuances. Examples show refactoring code to follow these practices. Resources are provided on related topics like pair programming and anti-object-oriented design.
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)PostSharp Technologies
Structured exception handling and defensive programming are the two pillars of robust software.
Both pillars fail however when it comes to handling internal faults, those that normally originate in software defects rather than in any external factors.
In this webinar, Zoran Horvat demonstrates advanced defensive coding techniques that can bring the quality of your code to an entirely new level.
Watch the webinar and learn:
When throwing an exception is the right thing to do
Why exceptions and defensive coding cannot be applied to recover from defects
How to handle situations when internal software defect is causing the fault
How to treat fault detection as an orthogonal concern to normal operation
The webinar recording can be found here:
http://www.postsharp.net/blog/post/webinar-recording-defensive-programming
Modern business applications rely heavily on rich domain classes, which in turn rely heavily on polymorphic execution, code reuse and similar concepts.
How can we extend rich domain classes to support complex requirements?
In this presentation, Zoran Horvat will show why an object composition approach is favored over class inheritance when it comes to code reuse and polymorphism.
The presentation covers:
How class inheritance can lead to combinatorial explosion of classes
What the limitations of object composition are
What design patterns help consume composed objects
Techniques for creating rich features on composed objects
Watch the webinar recording here: http://www.postsharp.net/blog/post/webinar-recording-object-composition
Starting with the premise that "Performance is a Feature", Matt Warren will show you how to measure, what to measure and how to get the best performance from your .NET code.
We will look at real-world examples from the Roslyn code-base and StackOverflow (the product), including how the .NET Garbage Collector needs to be tamed!
The presentation covers:
Why we should care about performance
Pitfalls to avoid when measuring performance
How the .NET Garbage Collector can hurt performance
Real-world performance lessons from open-source code
The webinar recording can be found here: http://www.postsharp.net/blog/post/webinar-recording-performance-is-a-feature
How do you avoid the dreaded "this is not what we asked for" and ensure customer satisfaction when building a new system?
In this webinar, Dino Esposito demonstrates a top-down methodology, sometimes mistaken for plain common sense and often boldly ignored, called UX-Driven Design (UXDD).
UXDD means coming to a visual agreement with customers by using wireframing tools to iterate on sketches of the new system before building it. Then, rather than building the system from the data model, you proceed in a top-down fashion instead. The resulting system may be slow or even inefficient but it will never be the “wrong” system! In addition, UXDD leads to clarity on a few of today’s most popular patterns that are sometimes difficult to understand like CQRS and Event Sourcing.
The presentation covers:
An introduction to Wireframing tools
Proven ways to save on post-first deployment costs
Insights into better customer relationships
Better focus on development without 'analysis paralysis'
You can watch the webinar recording here:
http://www.postsharp.net/blog/post/webinar-recording-ux-driven-design
Localization is crucial for reaching out to a global audience, however, it’s often an afterthought for most developers and non-trivial to implement. Traditionally, game developers have outsourced this task due to its time consuming nature.
But it doesn’t have to be this way.
Yan Cui will show you a simple technique his team used at GameSys which allowed them to localize an entire story-driven, episodic MMORPG (with over 5000 items and 1500 quests) in under an hour of work and 50 lines of code, with the help of PostSharp.
When addressing website performance issues, developers typically jump to conclusions, focusing on the perceived causes rather than uncovering the real causes through research.
Mitchel Sellers will show you how to approach website performance issues with a level of consistency that ensures they're properly identified and resolved so you'll avoid jumping to conclusions in the future.
You can watch the webinar recording here:
https://www.postsharp.net/documentation/video?id=190066128
Developers spend up to 20% of their time writing repetitive code that machines could generate more reliably. This presentation explores the problem of duplicated source code that stems from manual implementation of patterns and reveals how to automate the boring side of programming and get a 19x ROI.
The presentation provides insight into:
- the problem of manual implementation of patterns, resulting in boilerplate code
- the cost of boilerplate for companies
- existing technologies for pattern automation
- the key reasons to consider pattern-aware compiler extensions
The white paper was written for CTOs, software architects and senior developers in software-driven organizations—specifically in financial, insurance, healthcare, energy and IT industries that typically write a lot of repetitive code.
Everybody knows the lock keyword, but how does it implemented? What are its performance characteristics. Gael Fraiteur scratches the surface of multithreaded programming in .NET and goes deep through the Windows Kernel down to CPU microarchitecture.
This document introduces aspect-oriented programming (AOP) and how it can be used to separate cross-cutting concerns from core business logic. It discusses how AOP frameworks like PostSharp allow aspects to modularize features like logging, transactions, and security. The document provides an example of how a rental booking method grows over time to include these concerns. It compares different AOP frameworks and concludes that PostSharp allows building aspects with strong robustness while minimizing code invasiveness.
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc
Six months into 2024, and it is clear the privacy ecosystem takes no days off!! Regulators continue to implement and enforce new regulations, businesses strive to meet requirements, and technology advances like AI have privacy professionals scratching their heads about managing risk.
What can we learn about the first six months of data privacy trends and events in 2024? How should this inform your privacy program management for the rest of the year?
Join TrustArc, Goodwin, and Snyk privacy experts as they discuss the changes we’ve seen in the first half of 2024 and gain insight into the concrete, actionable steps you can take to up-level your privacy program in the second half of the year.
This webinar will review:
- Key changes to privacy regulations in 2024
- Key themes in privacy and data governance in 2024
- How to maximize your privacy program in the second half of 2024
Measuring the Impact of Network Latency at TwitterScyllaDB
Widya Salim and Victor Ma will outline the causal impact analysis, framework, and key learnings used to quantify the impact of reducing Twitter's network latency.
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxSynapseIndia
Your comprehensive guide to RPA in healthcare for 2024. Explore the benefits, use cases, and emerging trends of robotic process automation. Understand the challenges and prepare for the future of healthcare automation
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsMydbops
This presentation, delivered at the Postgres Bangalore (PGBLR) Meetup-2 on June 29th, 2024, dives deep into connection pooling for PostgreSQL databases. Aakash M, a PostgreSQL Tech Lead at Mydbops, explores the challenges of managing numerous connections and explains how connection pooling optimizes performance and resource utilization.
Key Takeaways:
* Understand why connection pooling is essential for high-traffic applications
* Explore various connection poolers available for PostgreSQL, including pgbouncer
* Learn the configuration options and functionalities of pgbouncer
* Discover best practices for monitoring and troubleshooting connection pooling setups
* Gain insights into real-world use cases and considerations for production environments
This presentation is ideal for:
* Database administrators (DBAs)
* Developers working with PostgreSQL
* DevOps engineers
* Anyone interested in optimizing PostgreSQL performance
Contact info@mydbops.com for PostgreSQL Managed, Consulting and Remote DBA Services
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfjackson110191
These fighter aircraft have uses outside of traditional combat situations. They are essential in defending India's territorial integrity, averting dangers, and delivering aid to those in need during natural calamities. Additionally, the IAF improves its interoperability and fortifies international military alliances by working together and conducting joint exercises with other air forces.
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Erasmo Purificato
Slide of the tutorial entitled "Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Emerging Trends" held at UMAP'24: 32nd ACM Conference on User Modeling, Adaptation and Personalization (July 1, 2024 | Cagliari, Italy)
Are you interested in dipping your toes in the cloud native observability waters, but as an engineer you are not sure where to get started with tracing problems through your microservices and application landscapes on Kubernetes? Then this is the session for you, where we take you on your first steps in an active open-source project that offers a buffet of languages, challenges, and opportunities for getting started with telemetry data.
The project is called openTelemetry, but before diving into the specifics, we’ll start with de-mystifying key concepts and terms such as observability, telemetry, instrumentation, cardinality, percentile to lay a foundation. After understanding the nuts and bolts of observability and distributed traces, we’ll explore the openTelemetry community; its Special Interest Groups (SIGs), repositories, and how to become not only an end-user, but possibly a contributor.We will wrap up with an overview of the components in this project, such as the Collector, the OpenTelemetry protocol (OTLP), its APIs, and its SDKs.
Attendees will leave with an understanding of key observability concepts, become grounded in distributed tracing terminology, be aware of the components of openTelemetry, and know how to take their first steps to an open-source contribution!
Key Takeaways: Open source, vendor neutral instrumentation is an exciting new reality as the industry standardizes on openTelemetry for observability. OpenTelemetry is on a mission to enable effective observability by making high-quality, portable telemetry ubiquitous. The world of observability and monitoring today has a steep learning curve and in order to achieve ubiquity, the project would benefit from growing our contributor community.
UiPath Community Day Kraków: Devs4Devs ConferenceUiPathCommunity
We are honored to launch and host this event for our UiPath Polish Community, with the help of our partners - Proservartner!
We certainly hope we have managed to spike your interest in the subjects to be presented and the incredible networking opportunities at hand, too!
Check out our proposed agenda below 👇👇
08:30 ☕ Welcome coffee (30')
09:00 Opening note/ Intro to UiPath Community (10')
Cristina Vidu, Global Manager, Marketing Community @UiPath
Dawid Kot, Digital Transformation Lead @Proservartner
09:10 Cloud migration - Proservartner & DOVISTA case study (30')
Marcin Drozdowski, Automation CoE Manager @DOVISTA
Pawel Kamiński, RPA developer @DOVISTA
Mikolaj Zielinski, UiPath MVP, Senior Solutions Engineer @Proservartner
09:40 From bottlenecks to breakthroughs: Citizen Development in action (25')
Pawel Poplawski, Director, Improvement and Automation @McCormick & Company
Michał Cieślak, Senior Manager, Automation Programs @McCormick & Company
10:05 Next-level bots: API integration in UiPath Studio (30')
Mikolaj Zielinski, UiPath MVP, Senior Solutions Engineer @Proservartner
10:35 ☕ Coffee Break (15')
10:50 Document Understanding with my RPA Companion (45')
Ewa Gruszka, Enterprise Sales Specialist, AI & ML @UiPath
11:35 Power up your Robots: GenAI and GPT in REFramework (45')
Krzysztof Karaszewski, Global RPA Product Manager
12:20 🍕 Lunch Break (1hr)
13:20 From Concept to Quality: UiPath Test Suite for AI-powered Knowledge Bots (30')
Kamil Miśko, UiPath MVP, Senior RPA Developer @Zurich Insurance
13:50 Communications Mining - focus on AI capabilities (30')
Thomasz Wierzbicki, Business Analyst @Office Samurai
14:20 Polish MVP panel: Insights on MVP award achievements and career profiling
Quality Patents: Patents That Stand the Test of TimeAurora Consulting
Is your patent a vanity piece of paper for your office wall? Or is it a reliable, defendable, assertable, property right? The difference is often quality.
Is your patent simply a transactional cost and a large pile of legal bills for your startup? Or is it a leverageable asset worthy of attracting precious investment dollars, worth its cost in multiples of valuation? The difference is often quality.
Is your patent application only good enough to get through the examination process? Or has it been crafted to stand the tests of time and varied audiences if you later need to assert that document against an infringer, find yourself litigating with it in an Article 3 Court at the hands of a judge and jury, God forbid, end up having to defend its validity at the PTAB, or even needing to use it to block pirated imports at the International Trade Commission? The difference is often quality.
Quality will be our focus for a good chunk of the remainder of this season. What goes into a quality patent, and where possible, how do you get it without breaking the bank?
** Episode Overview **
In this first episode of our quality series, Kristen Hansen and the panel discuss:
⦿ What do we mean when we say patent quality?
⦿ Why is patent quality important?
⦿ How to balance quality and budget
⦿ The importance of searching, continuations, and draftsperson domain expertise
⦿ Very practical tips, tricks, examples, and Kristen’s Musts for drafting quality applications
https://www.aurorapatents.com/patently-strategic-podcast.html
The Rise of Supernetwork Data Intensive ComputingLarry Smarr
Invited Remote Lecture to SC21
The International Conference for High Performance Computing, Networking, Storage, and Analysis
St. Louis, Missouri
November 18, 2021
Support en anglais diffusé lors de l'événement 100% IA organisé dans les locaux parisiens d'Iguane Solutions, le mardi 2 juillet 2024 :
- Présentation de notre plateforme IA plug and play : ses fonctionnalités avancées, telles que son interface utilisateur intuitive, son copilot puissant et des outils de monitoring performants.
- REX client : Cyril Janssens, CTO d’ easybourse, partage son expérience d’utilisation de notre plateforme IA plug & play.
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfNeo4j
Presented at Gartner Data & Analytics, London Maty 2024. BT Group has used the Neo4j Graph Database to enable impressive digital transformation programs over the last 6 years. By re-imagining their operational support systems to adopt self-serve and data lead principles they have substantially reduced the number of applications and complexity of their operations. The result has been a substantial reduction in risk and costs while improving time to value, innovation, and process automation. Join this session to hear their story, the lessons they learned along the way and how their future innovation plans include the exploration of uses of EKG + Generative AI.
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionBert Blevins
Cybersecurity is a major concern in today's connected digital world. Threats to organizations are constantly evolving and have the potential to compromise sensitive information, disrupt operations, and lead to significant financial losses. Traditional cybersecurity techniques often fall short against modern attackers. Therefore, advanced techniques for cyber security analysis and anomaly detection are essential for protecting digital assets. This blog explores these cutting-edge methods, providing a comprehensive overview of their application and importance.
7 Most Powerful Solar Storms in the History of Earth.pdfEnterprise Wired
Solar Storms (Geo Magnetic Storms) are the motion of accelerated charged particles in the solar environment with high velocities due to the coronal mass ejection (CME).
6. @gfraiteur
1. A history of programming
languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
11. @gfraiteur
Simula (1967)
• Classes as
abstraction mechanism
• Virtual procedures
• Object references
• Coroutines
Begin
Class Glyph;
Virtual: Procedure print Is Procedure print;
Begin
End;
Glyph Class Char (c);
Character c;
Begin
Procedure print;
OutChar(c);
End;
Glyph Class Line (elements);
Ref (Glyph) Array elements;
Begin
Procedure print;
Begin
Integer i;
For i:= 1 Step 1 Until UpperBound (elements, 1) Do
elements (i).print;
OutImage;
End;
End;
Ref (Glyph) rg;
Ref (Glyph) Array rgs (1 : 4);
! Main program;
rgs (1):- New Char ('A');
rgs (2):- New Char ('b');
rgs (3):- New Char ('b');
rgs (4):- New Char ('a');
rg:- New Line (rgs);
rg.print;
End;
13. @gfraiteurHolašovice, Czech Republic
How is it possible that any simple farmer could make a
house, a thousand times more beautiful than all the
struggling architects of the last fifty years could do?
Christopher Alexander
in The Timeless Way of Building, 1977
Pattern Thinking (1977)
18. @gfraiteur
Patterns as
WISDOM
in canonical form
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Structure and Dynamics
• Implementation
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Structure and Dynamics
• Implementation
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Structure and Dynamics
• Implementation
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Description
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
22. @gfraiteur
Cost of low abstraction
• Boilerplate code
• More bugs
• Code review
• Changing the pattern implementation
23. @gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern
Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
24. @gfraiteur
Pattern Automation
Automation
is the use of
machines, control systems
and information technologies
to optimize productivity in
the production of goods and
delivery of services.
Wikipedia
Design Pattern Automation
is the use of tools to optimize
productivity in the
implementation of software
based on patterns.
34. @gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3.Pattern-Oriented Software
Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
35. @gfraiteur
they are way too complex general abstract
You can’t automate patterns because…
MYTH 4
36. @gfraiteur
a normal part of any engineering process
Making abstract things concrete is
TRUTH 4
ConcreteAbstract
Automatable
Non-
Automatable
37. @gfraiteur
Pattern-Oriented
Implementation Process
Architecture
Pattern
• Defines Subsystems
Design Pattern
• Define Components
• General problem
• Language-
independent
Implementation
Pattern
• Defines source
artefacts
• Language-specific
• Framework-specific
• Application-specific
• Implementation
guidelines
Source code
• Executable
High Abstraction Zero Abstraction
40. @gfraiteur
• Analyze property-field
dependencies
• Modify all non-const
methods
• Whenever a relevant
field has changed
• When invariants are
valid (after all changes
in the object have been
done)
Example: Observer Pattern
When? How?
3. Application-Specific Pattern (C#)
43. @gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4.Tools for Design Pattern
Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
52. @gfraiteur
Example:
Poorman’s Singleton
• Static validation rules:
• Static private readonly field named
‘singleton’, whose type is the current type.
• Static public method GetInstance() whose return
type is the current type, returns field ‘singleton’.
• Class constructors are private.
54. @gfraiteur
• Limitations
• Inadequate UI and
error reporting
• Limited reflection
API
• Alternatives
• FxCop
• PostSharp
Architecture
Framework
Architecture Unit Tests
55. @gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies
and Patterns
6. A last example
7. Q&A
8. Summary
Section
64. @gfraiteur
Example of application-specific pattern:
Business Rule Pattern
• For any class derived from BusinessRule:
• Name ends with “BusinessRule”
• No public constructor
• Has nested class named “Factory”
• Has parameterless public constructor
• Annotated with
[Export(typeof(IBusinessRuleFactory))]
65. @gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
66. @gfraiteur
Example:
Reader-Writer Synchronized Object
• Code Generation
• Introduce interface IReaderWriterSynchronized
• [ReaderLock], [WriterLock] executes the method with
the right locking level
• Code Verification
• All fields must be private
• Cannot access field without proper lock
First I would like to thank you all for being present here today. I appreciate the time you are spending here. Imagine the total opportunity cost of this couple of hours we will be spending here together – if we all billed our standard rate. Obviously, I would like to serve you during that time. And I don’t only want to serve you, but the larger community too. Today, I would like to serve by planting a seed. An idea that can grow or perish, depending on you. But if we allow the seed to grow, together, we are going to improve the software development industry. We are going to make it easier to build good software. Make it easier to build good software. This idea is to change the way we think about design patterns.
Good morning! My name is Gael Fraiteur. You may think I have a weird accent and even think I am French, but actually I was grown in Belgium and have lived in Czech Republic for the last 12 years.(it’s wonderful being here in the US. Appreciate you take time outside of working hours to improve your skills and the profession. Not everybody does that and there’re many(?) here in the US. I’ll like to thank you guys for being what you are and doing what you do).When I was 15, that was 20 years ago, my English teacher came to me and asked whether I would be skilled enough to manage students’ test results and generate school reports. I said yes, although today I know I was not, and spent the largest part of the summer coding a client-server application in PowerBuilder – an amazing development environment. I have been coding for 4 years at that time, several hours per day, but my previous programs were mere “hacking”. So from a technical point of view, I was prepared. What was really new for me was to build a technology for real users, not for IT specialists. My first version was basically a set of table editors based on the relational database model. With time, I understood that the user interface of a technology should be as close as possible to the way users think and work, and not close to the platform it is built on (a relational database).Nine years ago I started another project: PostSharp. It was a small aspect-oriented framework for Microsoft .NET. It was not the first AOP framework, but I was very fortunate that the community let the seed grow and it became the most popular. The reason of this success, I think, is that I applied the lesson learned years before: the user interface of a technology should be as close as possible to the way users think and work. But this time, the user interface was PostSharp’s public API.The same principle applies to the design of programming languages. And I believe that today, if we want to get programming languages closer to the way human think, we need to look in the direction of patterns. I would like to communicate this vision to you in this talk.
Three years ago, PostSharp outgrew my capacity to maintain it as a free open-source project and, out of necessity, became a commercial product. In an industry dominated by open source and big platform vendors, to make a living from development tools is extraordinarily difficult. We at PostSharp Technologies have been fortunate enough to succeed in this endeavor. We are grateful for the trust we receive from our customers – from the one-man shop to the largest corporations.This remark should also serve as a disclaimer that this talk shall undoubted be biased by my very source of revenues.However, my commitment to you in this talk is to share the vision which motivates us day after day. This vision is much larger than our product itself, and you can implement it with other tools, perhaps less appropriate – and, hopefully we will be able to spark an idea that will influence the design of future language and compilers.
Programming for the UNIVAC FAC-TRONIC system, 1935 by Remington Rand inchttp://bitsavers.informatik.uni-stuttgart.de/pdf/univac/univac1/UNIVAC_Programming_Jan53.pdf
http://www.flickr.com/photos/62405357@N03/8519808328To bridge the gap between the way human think and how machine work.Both humans and machines have limitations.At the beginning there was assembly language and punch cards, then symbolic memory and procedural languages.
In his book “the timeless way of building”, Christopher Alexander asks the question:How is it possible that any simple farmer could make a house, a thousand times more beautiful than all the struggling architects of the last fifty years could do?Answer:Shared knowledge, and the knowledge was in the languageIncremental process, centuries of experienceVernacular architecture (folk architecture)http://whc.unesco.org/en/list/861http://www.holasovice.eu/fotogalerie-1/holasovice/
What is a pattern?RepetitionResolution of forcesSelf-sustainingCommonality / variability -> All humans are equal but some are more equal than othershttp://www.flickr.com/photos/docman/1516309490http://en.wikipedia.org/wiki/Pando_(tree)Pando (Latin for "I spread"), also known as The Trembling Giant,[1][2] is a clonal colony of a single male quaking aspen (Populustremuloides) determined to be a single living organism by identical genetic markers[3] and one massive underground root system. The plant is estimated to weigh collectively 6,000,000 kg (6,600 short tons),[4] making it the heaviest known organism.[5] The root system of Pando, at an estimated 80,000 years old, is among the oldest known living organisms.[6]Pando is located in the Fishlake National Forest, near Fish Lake at the western edge of the Colorado Plateau in South-central Utah.
http://www.basiccarpentrytechniques.com/Carpentry%20for%20Boys/Carpentry%20For%20Boys1.htmlCARPENTRY FOR BOYSWITH 250 ORIGINAL ILLUSTRATIONSBy J. S. ZERBE, M.E.Copyright, 1914, byTHE NEW YORK BOOK COMPANY
There are still some patterns in objects that we are not able to represent in a programming language
Before as after the industrial revolution, talent is the rare commodity. We want talented people to have a maximal output.The industrial revolution is not just about technology, this is also a revolution in social organization, through division of labor, specialization of professions, specialized schools, … There are no fewer skills involved in industrial shoes production – there are actually much more. But the production process makes better use of these skills.
Better technology triggers better output per worker.Our parentsWhat is going to be the contribution of our generation to the software industry? How is it going to become more of an industry and less of an art, to achieve the same productivity enhancements that are required to meet increasing demand?'Increase the speed of agricultural mechanisation, to struggle for the modernization of agriculture. Printno. 8027.6288.
http://www.flickr.com/photos/abstractstv/4358678510Abstract means much variability and little commonality
http://en.wikipedia.org/wiki/Observer_pattern
http://www.flickr.com/photos/liz/8712469709Caïn by Henri Vidal, Tuileries Garden, Paris, 1896
As a result of the iterative development process, you are already creating reusable designs = design patterns
In his book “the timeless way of building”, Christopher Alexander asks the question:Why was an 19th century farmer, without formal education, able to build a house a thousand times more beautiful that anything that was build in the 20th century by formally-educated architects? Where people lived happier?Answer:Shared knowledge, and the knowledge was in the languageIncremental process, centuries of experienceVernacular architecture (folk architecture)TODO: Add a quote from Alexanderhttp://whc.unesco.org/en/list/861http://www.holasovice.eu/fotogalerie-1/holasovice/
I believe that it should become fundamentally easier to write good software.Look at the way we work today. We are working at a ridiculously low level of abstraction. We are implementing change notification and change tracking manually, are struggling with locks to cope with multithreading, relying on code reviews to ensure design compliance. Programming is so complex that companies can’t find enough qualified people to make it. Underqualified people write crap and there seems nothing to do about that.Our society runs on software. Our daily life is ruled by hundreds of millions of lines of code, from our mobile devices to transportation to tax collection. How do we build increasingly complex systems if the technology itself does not make it increasingly simpler? I believe that programming languages should make it fundamentally easier to write good software.And I think we should look in the direction of patterns. Patterns are fundamental to the way humans think. We learn pattern recognition is the first months of our existence. Patterns are intrinsic to the very way we perceive the nature. Regularity and variety only make sense if we have this notion of patterns. Patterns, concepts, objects, are same thing. Object orientation was a first step to make programming language closer to the structure of human cognition. But why stopping there? We need programming languages that are able to represent more complex patterns than what we now say “objects”.There are two principal ideas in this talk. The first idea is that the implementation of design patterns can be automated, and actually is already being automated, if we look at some features of the C# language. Working with design patterns means that the source code is built against a model that is of higher abstraction than the machine on which it runs. Smarter compilers can validate the source code against this model and generate instructions to map higher abstraction to lower abstraction. The second idea is that design patterns don’t live in books but in software, and that discovering and designing good patterns is a natural part of an agile development process -- because to learn is to identify patterns. So, there is a great chain of being, where the industry benefits individual projects and projects contribute back to the industry.With PostSharp, we are proud to contribute to this effort.Thank you.