The document discusses design patterns and is a presentation by Amir Barylko about advanced design patterns. It introduces Amir and provides his contact information. It then asks the audience to think about patterns they use and votes on which advanced patterns to discuss. The rest of the presentation describes various design patterns like proxy, chain of responsibility, active record and others. It concludes by providing additional resources and announcing a Clojure training course.
The document is a presentation by Amir Barylko about design patterns. It introduces Amir and lists some patterns he will discuss, including Active Record, Repository, Event Aggregator, and Visitor. It encourages participants to share which patterns they use and votes on which patterns to discuss in more depth.
The document discusses techniques for agile requirements including writing user stories and acceptance criteria before implementation. It suggests using a common language like Gherkin to describe features and scenarios to facilitate automated testing and communication. Scenarios should be descriptive rather than imperative. Runnable scenarios can be implemented as acceptance, integration, or unit tests using various tools. Benefits include easier planning and discovering functionality while challenges include transitioning to the new approach and team effort.
Amir Barylko gave a presentation on agile planning. He introduced himself and provided his resources. He discussed why projects fail and the agile manifesto. He covered estimating stories, iterations, and using a burn down chart to manage scope over iterations. He concluded by taking questions and providing information on an upcoming software quality workshop.
Amir Barylko gave a presentation on agile planning to the Edmonton Agile User Group in June 2011. He began by introducing himself and providing his contact information. He then discussed why projects often fail when not using agile principles, describing the realities of changing requirements and limitations of time and resources. Barylko explained the agile manifesto and principles, and covered user stories, planning poker, and using iterations to estimate work and update plans over time based on team velocity. He emphasized quality, visual communication, and managing scope within time and budget constraints.
Amir Barylko gave a presentation to the Agile User Group in April 2011 about agile planning. He discussed why projects fail, the agile manifesto and principles, estimating work using story points and planning poker, and how to structure an agile project using iterations. He emphasized quality, visual communication, and metrics like burn down charts to manage projects agilely.
Amir Barylko gave a presentation on agile planning at Code Palousa in March 2012. He discussed why projects fail, introduced the agile manifesto and principles, and covered how to plan iteratively using user stories, estimating with planning poker, and tracking progress with burn down charts. He emphasized quality, continuous delivery, and managing scope within time and budget constraints.
The document discusses Amir Barylko's presentation on advanced design patterns and anti-patterns. It introduces Amir and provides information about his background and contact details. It then outlines some topics that will be covered, including definitions of patterns and anti-patterns, examples of patterns like MVVM and Chain of Responsibility, and how to identify anti-patterns.
The document is a presentation by Amir Barylko about design patterns. It introduces Amir and lists some patterns he will discuss, including Active Record, Repository, Event Aggregator, and Visitor. It encourages participants to share which patterns they use and votes on which patterns to discuss in more depth.
The document discusses techniques for agile requirements including writing user stories and acceptance criteria before implementation. It suggests using a common language like Gherkin to describe features and scenarios to facilitate automated testing and communication. Scenarios should be descriptive rather than imperative. Runnable scenarios can be implemented as acceptance, integration, or unit tests using various tools. Benefits include easier planning and discovering functionality while challenges include transitioning to the new approach and team effort.
Amir Barylko gave a presentation on agile planning. He introduced himself and provided his resources. He discussed why projects fail and the agile manifesto. He covered estimating stories, iterations, and using a burn down chart to manage scope over iterations. He concluded by taking questions and providing information on an upcoming software quality workshop.
Amir Barylko gave a presentation on agile planning to the Edmonton Agile User Group in June 2011. He began by introducing himself and providing his contact information. He then discussed why projects often fail when not using agile principles, describing the realities of changing requirements and limitations of time and resources. Barylko explained the agile manifesto and principles, and covered user stories, planning poker, and using iterations to estimate work and update plans over time based on team velocity. He emphasized quality, visual communication, and managing scope within time and budget constraints.
Amir Barylko gave a presentation to the Agile User Group in April 2011 about agile planning. He discussed why projects fail, the agile manifesto and principles, estimating work using story points and planning poker, and how to structure an agile project using iterations. He emphasized quality, visual communication, and metrics like burn down charts to manage projects agilely.
Amir Barylko gave a presentation on agile planning at Code Palousa in March 2012. He discussed why projects fail, introduced the agile manifesto and principles, and covered how to plan iteratively using user stories, estimating with planning poker, and tracking progress with burn down charts. He emphasized quality, continuous delivery, and managing scope within time and budget constraints.
The document discusses Amir Barylko's presentation on advanced design patterns and anti-patterns. It introduces Amir and provides information about his background and contact details. It then outlines some topics that will be covered, including definitions of patterns and anti-patterns, examples of patterns like MVVM and Chain of Responsibility, and how to identify anti-patterns.
The document discusses comparing Android and JavaFX Mobile (JME) technologies. It provides details about the author's experience developing the blueBill Mobile application using JME starting in 2009 and then porting it to Android in mid-April 2009. While Android uses Java-like syntax, it has its own virtual machine called Dalvik. The document outlines positives of Android like its excellent emulator and fast development cycle, but also notes missing classes and issues when trying to reuse existing Java code.
The document outlines the design process for two products - the iStand, a stand for iPods, and the iCharge, a charging station. It includes research on existing designs, development of design criteria and ideas, creation of prototypes, and final designs. Working drawings and marketing materials were also created to showcase the final products.
The document provides guidance on writing storyboards for app development projects. It discusses that storyboards are useful for organizing ideas, sharing ideas with others, and reducing mistakes during development. Traditional perceptions of storyboards being formal thick documents are challenged. Instead, the document promotes finding one's own way of writing storyboards, whether as an individual or as part of a team. Different tools that can be used for storyboarding are presented, including traditional PPT, hand drawings, mind maps, and wikis. The key aspects of writing storyboards like documenting ideas, requirements, drawings and flows are outlined. Two case studies of prior projects developed using storyboards are also summarized to showcase the benefits of storyboarding.
Sdec11 when user stories are not enoughTerry Bunio
This document discusses the concept of "active architecture" as a way to address potential shortcomings of user stories in agile development. It provides examples of how active architecture uses component conversations and technical tasks to help ensure design consistency and completeness across iterations. The document advocates for using active architecture to envision solutions at a high level through lightweight documentation and design diagrams in order to minimize rework and catch any missing requirements or design gaps earlier.
Deep Dive into Flex Mobile Item RenderersJason Hanson
The document discusses optimizing item renderers for mobile Flex applications. It introduces several new classes in the Flex SDK for building lightweight item renderers, including StyleableTextField, LabelItemRenderer, IconItemRenderer and BitmapImage. Custom item renderers can extend these classes or UIComponent. Using ContentCache and virtual layout can improve scrolling performance of large lists.
This document provides information about the course "AFT157-DESIGN PROCESS PROJECT-II" including the course coordinator, description, objectives, outcomes, content, and guidelines for practical project reports. The course is foundational and teaches methodologies for 2D compositions and presentations. It aims to develop creative concepts, analyze design processes strategically, and teach entrepreneurship skills. Students will learn about the design process in areas like graphic design, animation, and game design as well as project management concepts.
The document describes Startup Summer, a 10-week program where multiple startups work together in an incubator-like environment. It includes:
1) An entrepreneurship school to teach methodologies like Lean Startups and customer development.
2) Seed funds for basic expenses as startups develop minimum viable products and iterate based on customer feedback.
3) Weekly coaching sessions and internal demo days to practice presentations and get feedback.
4) A final demo day where startups present to external investors and experts.
Arbyte - A modular, flexible, scalable job queing and execution systemlokku
Arbyte is a job queuing and execution framework created by Alistair N. MacLeod as an alternative to existing systems like Gearman and TheSchwartz. It uses a modular architecture with components like a JobBuffer for storing jobs, a JobRunner for executing jobs, and JobExecutors that correspond to job types. The framework is implemented in Perl using homemade objects and supports distributed deployment on servers or clouds. Future work includes improving JobBuffer and JobRunner implementations and submitting Arbyte to CPAN.
The document summarizes Amir Barylko's presentation on advanced design patterns at the Winnipeg Codecamp in February 2012. It introduces Amir and lists some design patterns he will discuss, including Chain of Responsibility, Proxy, ActiveRecord, Repository, Event Aggregator, Event Sourcing, List Comprehension, Object Mother/Builder, Visitor, Null Object, Factory, and Strategy. Resources for contacting Amir and accessing presentation materials are also provided.
This document provides an overview of domain-driven design (DDD) patterns and principles including:
1. It discusses common DDD patterns such as entities, value objects, aggregates, factories, repositories and services.
2. It explains the differences between entities and value objects and how they are used in a domain model.
3. It covers key DDD concepts like modeling the domain, isolating the domain layer, object life cycles and working with aggregates.
SE2016 - Java EE revisits design patterns 2016Alex Theedom
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provides out-of-the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provides out-of-the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provide out of the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Codestrong 2012 breakout session how to develop your own modulesAxway Appcelerator
This document provides an introduction to module development for Android and iOS using Titanium Studio. It discusses creating basic modules that integrate third party libraries. For Android, it demonstrates integrating the Skyhook geolocation SDK. For iOS, it demonstrates integrating the Card.io credit card scanning SDK. The key steps shown include importing libraries, passing credentials to the module, setting up callbacks, making API calls from the module, and returning results. Code samples are provided for the completed Android and iOS modules.
Introduction to Module Development with Appcelerator TitaniumAaron Saunders
VIDEO: http://bit.ly/P1UlGr starts at 1:13
Overview of creating modules with Appcelerator Titanium. We integrate SkyhookWireless location SDK and Card.io mobile card sdk
Source:
Source code for ios cardio module presented at @codestrong http://bit.ly/PQlsW9
Source code for android skyhookwireless module presented at @codestrong http://bit.ly/z4zfdl
Amir Barylko gives an introduction to Capybara. Capybara is a tool used to simplify integration tests, inspired by Webrat. It supports different drivers like Selenium to test applications in browsers. It has a DSL for filling out forms, finding page elements, and making assertions. Capybara is commonly used to implement steps for Behavior Driven Development with Cucumber.
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provide out of the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Originally this was proposed as "88 Slides About 44 Modules" but it was scaled back to "44 Slides About 22 Modules". It was meant as a quick and dirty introduction to small niche / utility modules that people may not have been aware of (with a couple hardcore useful dev modules mixed in.)
Rich UI with Knockout.js & CoffeescriptAmir Barylko
This document outlines a presentation on building rich user interfaces using Knockout.js and CoffeeScript. It introduces the speaker, Amir Barylko, and provides an overview of the topics to be covered, including introductions to CoffeeScript, Knockout.js, MVVM pattern, bindings, observables and computed values. Expectations from the audience are requested and resources including contact details and additional materials are listed.
Alex Theedom Java ee revisits design patternsАліна Шепшелей
Enter "Django Channels": new way of desinging and thinking about your application. It separates transport and processing concerns in typical Django project using combination of ASGI (Asynchronous Server Gateway Interface) and worker processes, enabling your application to be "event-oriented" and implement new workflows for processing your data. How does it work? What do you need to start? Is it even useful? Learn for yourself with this introductory talk.
This document provides an overview of a presentation titled "The ROR Trilogy Part I: A New Dev Hope" given by Amir Barylko. The presentation introduces Ruby and Ruby on Rails (ROR), covering topics such as dynamic languages, Ruby features, classes and objects, mixins, ROR conventions like MVC and scaffolding. It also lists resources for learning Ruby and ROR and concludes with a demo of a movie library application.
The document discusses comparing Android and JavaFX Mobile (JME) technologies. It provides details about the author's experience developing the blueBill Mobile application using JME starting in 2009 and then porting it to Android in mid-April 2009. While Android uses Java-like syntax, it has its own virtual machine called Dalvik. The document outlines positives of Android like its excellent emulator and fast development cycle, but also notes missing classes and issues when trying to reuse existing Java code.
The document outlines the design process for two products - the iStand, a stand for iPods, and the iCharge, a charging station. It includes research on existing designs, development of design criteria and ideas, creation of prototypes, and final designs. Working drawings and marketing materials were also created to showcase the final products.
The document provides guidance on writing storyboards for app development projects. It discusses that storyboards are useful for organizing ideas, sharing ideas with others, and reducing mistakes during development. Traditional perceptions of storyboards being formal thick documents are challenged. Instead, the document promotes finding one's own way of writing storyboards, whether as an individual or as part of a team. Different tools that can be used for storyboarding are presented, including traditional PPT, hand drawings, mind maps, and wikis. The key aspects of writing storyboards like documenting ideas, requirements, drawings and flows are outlined. Two case studies of prior projects developed using storyboards are also summarized to showcase the benefits of storyboarding.
Sdec11 when user stories are not enoughTerry Bunio
This document discusses the concept of "active architecture" as a way to address potential shortcomings of user stories in agile development. It provides examples of how active architecture uses component conversations and technical tasks to help ensure design consistency and completeness across iterations. The document advocates for using active architecture to envision solutions at a high level through lightweight documentation and design diagrams in order to minimize rework and catch any missing requirements or design gaps earlier.
Deep Dive into Flex Mobile Item RenderersJason Hanson
The document discusses optimizing item renderers for mobile Flex applications. It introduces several new classes in the Flex SDK for building lightweight item renderers, including StyleableTextField, LabelItemRenderer, IconItemRenderer and BitmapImage. Custom item renderers can extend these classes or UIComponent. Using ContentCache and virtual layout can improve scrolling performance of large lists.
This document provides information about the course "AFT157-DESIGN PROCESS PROJECT-II" including the course coordinator, description, objectives, outcomes, content, and guidelines for practical project reports. The course is foundational and teaches methodologies for 2D compositions and presentations. It aims to develop creative concepts, analyze design processes strategically, and teach entrepreneurship skills. Students will learn about the design process in areas like graphic design, animation, and game design as well as project management concepts.
The document describes Startup Summer, a 10-week program where multiple startups work together in an incubator-like environment. It includes:
1) An entrepreneurship school to teach methodologies like Lean Startups and customer development.
2) Seed funds for basic expenses as startups develop minimum viable products and iterate based on customer feedback.
3) Weekly coaching sessions and internal demo days to practice presentations and get feedback.
4) A final demo day where startups present to external investors and experts.
Arbyte - A modular, flexible, scalable job queing and execution systemlokku
Arbyte is a job queuing and execution framework created by Alistair N. MacLeod as an alternative to existing systems like Gearman and TheSchwartz. It uses a modular architecture with components like a JobBuffer for storing jobs, a JobRunner for executing jobs, and JobExecutors that correspond to job types. The framework is implemented in Perl using homemade objects and supports distributed deployment on servers or clouds. Future work includes improving JobBuffer and JobRunner implementations and submitting Arbyte to CPAN.
The document summarizes Amir Barylko's presentation on advanced design patterns at the Winnipeg Codecamp in February 2012. It introduces Amir and lists some design patterns he will discuss, including Chain of Responsibility, Proxy, ActiveRecord, Repository, Event Aggregator, Event Sourcing, List Comprehension, Object Mother/Builder, Visitor, Null Object, Factory, and Strategy. Resources for contacting Amir and accessing presentation materials are also provided.
This document provides an overview of domain-driven design (DDD) patterns and principles including:
1. It discusses common DDD patterns such as entities, value objects, aggregates, factories, repositories and services.
2. It explains the differences between entities and value objects and how they are used in a domain model.
3. It covers key DDD concepts like modeling the domain, isolating the domain layer, object life cycles and working with aggregates.
SE2016 - Java EE revisits design patterns 2016Alex Theedom
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provides out-of-the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provides out-of-the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provide out of the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Codestrong 2012 breakout session how to develop your own modulesAxway Appcelerator
This document provides an introduction to module development for Android and iOS using Titanium Studio. It discusses creating basic modules that integrate third party libraries. For Android, it demonstrates integrating the Skyhook geolocation SDK. For iOS, it demonstrates integrating the Card.io credit card scanning SDK. The key steps shown include importing libraries, passing credentials to the module, setting up callbacks, making API calls from the module, and returning results. Code samples are provided for the completed Android and iOS modules.
Introduction to Module Development with Appcelerator TitaniumAaron Saunders
VIDEO: http://bit.ly/P1UlGr starts at 1:13
Overview of creating modules with Appcelerator Titanium. We integrate SkyhookWireless location SDK and Card.io mobile card sdk
Source:
Source code for ios cardio module presented at @codestrong http://bit.ly/PQlsW9
Source code for android skyhookwireless module presented at @codestrong http://bit.ly/z4zfdl
Amir Barylko gives an introduction to Capybara. Capybara is a tool used to simplify integration tests, inspired by Webrat. It supports different drivers like Selenium to test applications in browsers. It has a DSL for filling out forms, finding page elements, and making assertions. Capybara is commonly used to implement steps for Behavior Driven Development with Cucumber.
Design patterns are not only cool but represent the collective wisdom of many developers. Since the publication of Design Patterns: Elements of Reusable Object-Oriented Software by GoF many new concepts have extended the coverage of these design patterns, and now Java EE provide out of the box implementations of many of the most well known patterns. This talk will show how, by taking advantage of Java EE features such as CDI and the smart use of annotations, traditional design patterns can be implemented in a much cleaner and quicker way. Among the design patterns discuss there will be Singleton, Façade, Observer, Factory, Dependency Injection, Decorator and more.
Originally this was proposed as "88 Slides About 44 Modules" but it was scaled back to "44 Slides About 22 Modules". It was meant as a quick and dirty introduction to small niche / utility modules that people may not have been aware of (with a couple hardcore useful dev modules mixed in.)
Rich UI with Knockout.js & CoffeescriptAmir Barylko
This document outlines a presentation on building rich user interfaces using Knockout.js and CoffeeScript. It introduces the speaker, Amir Barylko, and provides an overview of the topics to be covered, including introductions to CoffeeScript, Knockout.js, MVVM pattern, bindings, observables and computed values. Expectations from the audience are requested and resources including contact details and additional materials are listed.
Alex Theedom Java ee revisits design patternsАліна Шепшелей
Enter "Django Channels": new way of desinging and thinking about your application. It separates transport and processing concerns in typical Django project using combination of ASGI (Asynchronous Server Gateway Interface) and worker processes, enabling your application to be "event-oriented" and implement new workflows for processing your data. How does it work? What do you need to start? Is it even useful? Learn for yourself with this introductory talk.
This document provides an overview of a presentation titled "The ROR Trilogy Part I: A New Dev Hope" given by Amir Barylko. The presentation introduces Ruby and Ruby on Rails (ROR), covering topics such as dynamic languages, Ruby features, classes and objects, mixins, ROR conventions like MVC and scaffolding. It also lists resources for learning Ruby and ROR and concludes with a demo of a movie library application.
Amir Barylko presented on the Ruby on Rails (RoR) framework. He began with an introduction to Ruby, covering its dynamic and object-oriented nature. He then discussed key RoR concepts like convention over configuration, MVC architecture, code generation, and its built-in automation. Barylko demoed generating a movie library application in RoR to showcase these features. He concluded by discussing additional RoR aspects like helpers, partials, Sass, and routing.
The document provides an overview of a presentation on Ruby on Rails by Amir Barylko. It introduces Ruby and Rails, discussing features like dynamic typing, object orientation, classes and mixins in Ruby. For Rails, it covers conventions over configuration, MVC architecture, code generation, and included testing. It also summarizes a demo of building a movie library application in Rails.
Lecture two,
An introduction to Design Pattern
History
Pattern Language,
Categorization according to GoF
MVC
Creational Design Patterm
Factory Method
Abstract Factory
Singleton
Builder
PLAT-20 Building Alfresco Prototypes in a Few HoursAlfresco Software
SIDE provides a set of tools that enable the developers to customize Alfresco very easily. From a single data model, we will show you forms, views and complex objects (automatically generated) that can be combined in a matter of minutes to build a fully functional prototype. We will show you direct dashboard customization by the user through the use of views and charts generated by SIDE from a single data model. SIDE is available in open source.
This document provides an overview of the Spring framework. It discusses key Spring concepts such as dependency injection, inversion of control, aspect-oriented programming, and transaction management. The document also summarizes Spring's main modules and how they can be used to build web applications that incorporate data access, web tiers, and other features.
The document provides an introduction to Typesafe Activator and the Play Framework. It discusses how Activator is a tool that helps developers get started with the Typesafe Reactive Platform and Play applications. It also covers some core features of Play like routing, templates, assets, data access with Slick and JSON, and concurrency with Futures, Actors, and WebSockets.
The document discusses converting code from object-oriented programming to functional programming, focusing on concepts like immutability, recursion, and composition. It highlights common functional programming techniques like mapping, filtering, reducing, and list comprehensions. The document also provides references for learning more about functional programming in Clojure, Haskell, F#, and other languages.
The document discusses the Elm programming language. It provides an overview of Elm including that it is functional, Haskell-inspired, compiles to JavaScript, and uses a simple architecture pattern. It also summarizes some key Elm features like types, functions, and packages for core functionality.
.NET Core is a cross-platform version of .NET that allows developers to build applications that run on Windows, Linux and Mac. It features a modular design that only includes necessary components, is lightweight and fast. It also introduces a new model for hosting applications, dependency injection, configuration and logging. ASP.NET Core unifies the web frameworks like MVC, Web API and Web Pages on a single shared framework.
Estimating software projects, features and tasks is not easy. This presentation shows a way to change the focus from "how long is going to take" to "what can I build in xx days"
Coderetreat hosting training slides for future hosts of coderetreat. It covers the basic components of hosting a coderetreat. From finding a location, to getting sponsors and what can go wrong.
For the video please go to https://youtu.be/QhDpq5hrRM8
There's no charge for (functional) awesomenessAmir Barylko
Presentation about adopting functional programming as a way of thinking and solving problems by embracing functional traits of languages like Haskell, F#, Scala and Clojure.
The document summarizes new features in C# 6 including string interpolation for embedding variables in strings, null conditional operators to avoid null reference exceptions, using static for calling static methods without qualifying the class, auto-property initializers to set property values in the constructor, expression-bodied methods and properties for more concise syntax, nameof expressions for compile-time checked names, exception filters for catching specific exceptions, index initializers for simplifying dictionary initialization, and await in catch/finally blocks for asynchronous exception handling. It also previews potential future features like primary constructors and indexed property operators.
Presentation done in Jan at the Winnipeg Agile User Group about how to make your team more productive and communicate better developers, managers and business analysts.
This document discusses various programming concepts and techniques including:
- Object oriented design and whether it makes programming more enjoyable
- Techniques for working with dates like DateTime parsing and date arithmetic
- Addressing anemic domain models by adding behavior to entities
- Different approaches to application architecture like repositories, services, and the unit of work pattern
- Best practices for testing like focusing tests on behavior rather than implementation details
- Principles like abstraction, the story of the code, and only coding what is needed
From coach to owner - What I learned from the other sideAmir Barylko
The document describes an Agile coach's experience transitioning to becoming a startup owner. It discusses building an experienced and self-sufficient remote team, managing requirements through user stories, planning releases using a story map to visualize work, delivering value through Kanban and retrospectives, and succeeding as a team through believing in the process. Lessons learned include searching for the best team takes time but pays off, keeping releases short and celebrating each one, and deploying from day one while balancing quality and releasing value.
Communication is the Key to Teamwork and productivityAmir Barylko
The document discusses the importance of communication and teamwork in lean project management. It emphasizes using visual tools to share expectations, plan as a team by avoiding status meetings and promoting visualizations, and work as a team by also avoiding status meetings and modeling the work process. The document recommends estimating using team velocity, having retrospective meetings, believing in the process, and helping each other rather than focusing on what is not ready.
Refactoring is a technique for restructuring existing code without changing its external behavior. It involves reorganizing code to improve factors like design, readability, and maintainability. Some reasons to refactor include removing duplication, improving design, reducing complexity, and decreasing technical debt. Refactoring should be done incrementally with unit tests to ensure changes don't introduce bugs. It involves techniques like extracting methods, simplifying conditionals, and improving names. Refactoring helps keep code healthy and manageable as a project evolves over time.
The document discusses roles and responsibilities in agile teams. It notes that roles may change in agile approaches compared to classic teams, with a focus on collaboration, delivering value, and shortening lead times. The most important factor is the attitude of working as a team to feel good about delivering value.
This document discusses refactoring code. It begins with a definition of refactoring as restructuring existing code without changing external behavior. It then provides reasons for refactoring such as removing duplication, improving design and readability. The document outlines different types of tests that can be used for refactoring like unit tests and integration tests. It provides examples of refactoring techniques for different programming languages like removing nested conditionals in C#. It emphasizes principles for refactoring like keeping the code clear and telling a story. It also discusses functional programming inspirations and the importance of the right tools.
- The document is a presentation by Amir Barylko about CoffeeScript and its benefits over JavaScript.
- CoffeeScript is a language that compiles to JavaScript, exposing the good parts of JavaScript in a simpler way. It adds features like string interpolation, implicit returns, destructuring assignment, and classes.
- While some argue JavaScript is enough or that the extra compilation step is difficult, CoffeeScript produces cleaner code and the benefits outweigh the costs according to Barylko. It can be tested and used with third party libraries as JavaScript.
This document discusses using Sass and Bootstrap to improve CSS development. It introduces Sass features like nesting, variables, operations and functions that help avoid repetition and make CSS more maintainable. Bootstrap is presented as a framework that provides pre-built CSS components, a grid system, and mixins to support responsive design. The benefits of both tools are rapid development and cross-browser compatibility, though Bootstrap has a learning curve and may not be fully flexible. Resources are provided to learn more.
SDEC12 Beautiful javascript with coffeescriptAmir Barylko
The document is a presentation by Amir Barylko about Coffeescript. It introduces Coffeescript and highlights some of its key features like string interpolation, functions, objects, arrays, conditionals, classes and inheritance. It also addresses some common complaints about Coffeescript and provides additional resources for learning more.
The document discusses a presentation by Amir Barylko about using CoffeeScript to write JavaScript code. CoffeeScript aims to expose the best parts of JavaScript in a simpler way by removing unnecessary characters like braces and semicolons. It features string interpolation, implicit returns, array and object literals, destructuring assignment, and classes with inheritance. While an extra compilation step is required, CoffeeScript can generate cleaner JavaScript code and helps avoid errors.
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This year’s report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
Sudheer Mechineni, Head of Application Frameworks, Standard Chartered Bank
Discover how Standard Chartered Bank harnessed the power of Neo4j to transform complex data access challenges into a dynamic, scalable graph database solution. This keynote will cover their journey from initial adoption to deploying a fully automated, enterprise-grade causal cluster, highlighting key strategies for modelling organisational changes and ensuring robust disaster recovery. Learn how these innovations have not only enhanced Standard Chartered Bank’s data infrastructure but also positioned them as pioneers in the banking sector’s adoption of graph technology.
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfMalak Abu Hammad
Discover how MongoDB Atlas and vector search technology can revolutionize your application's search capabilities. This comprehensive presentation covers:
* What is Vector Search?
* Importance and benefits of vector search
* Practical use cases across various industries
* Step-by-step implementation guide
* Live demos with code snippets
* Enhancing LLM capabilities with vector search
* Best practices and optimization strategies
Perfect for developers, AI enthusiasts, and tech leaders. Learn how to leverage MongoDB Atlas to deliver highly relevant, context-aware search results, transforming your data retrieval process. Stay ahead in tech innovation and maximize the potential of your applications.
#MongoDB #VectorSearch #AI #SemanticSearch #TechInnovation #DataScience #LLM #MachineLearning #SearchTechnology
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
A tale of scale & speed: How the US Navy is enabling software delivery from l...sonjaschweigert1
Rapid and secure feature delivery is a goal across every application team and every branch of the DoD. The Navy’s DevSecOps platform, Party Barge, has achieved:
- Reduction in onboarding time from 5 weeks to 1 day
- Improved developer experience and productivity through actionable findings and reduction of false positives
- Maintenance of superior security standards and inherent policy enforcement with Authorization to Operate (ATO)
Development teams can ship efficiently and ensure applications are cyber ready for Navy Authorizing Officials (AOs). In this webinar, Sigma Defense and Anchore will give attendees a look behind the scenes and demo secure pipeline automation and security artifacts that speed up application ATO and time to production.
We will cover:
- How to remove silos in DevSecOps
- How to build efficient development pipeline roles and component templates
- How to deliver security artifacts that matter for ATO’s (SBOMs, vulnerability reports, and policy evidence)
- How to streamline operations with automated policy checks on container images
Building RAG with self-deployed Milvus vector database and Snowpark Container...Zilliz
This talk will give hands-on advice on building RAG applications with an open-source Milvus database deployed as a docker container. We will also introduce the integration of Milvus with Snowpark Container Services.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
Large Language Model (LLM) and it’s Geospatial Applications
sdec11-Advanced-design-patterns
1. AMIR BARYLKO
ADVANCED
DESIGN PATTERNS
Amir Barylko Advanced Design Patterns
2. WHO AM I?
• Software quality expert
• Architect
• Developer
• Mentor
• Great cook
• The one who’s entertaining you for the next hour!
Amir Barylko Advanced Desing Patterns
4. PATTERNS
What are they?
What are anti-patterns?
Which patterns do you use?
Amir Barylko Advanced Design Patterns
5. WHAT ARE PATTERNS?
•Software design Recipe
•or Solution
•Should be reusable
•Should be general
•No particular language
Amir Barylko Advanced Design Patterns
6. ANTI-PATTERNS
• More patterns != better design
• No cookie cutter
• Anti Patterns : Patterns to identify failure
• God Classes
• High Coupling
• Breaking SOLID principles....
• (name some)
Amir Barylko Advanced Design Patterns
7. WHICH PATTERNS
DO YOU USE?
• Fill here with your patterns:
Amir Barylko Advanced Design Patterns
9. SOME PATTERNS...
• Chain of resp. • List • Composite
Comprehension
• Proxy • State
• Object Mother
• ActiveRecord • Strategy
• Visitor
• Repository • Iterator
• Null Object
• Event Aggregator • DTO
• Factory
• Event Sourcing • Page Object
• Command
Amir Barylko Advanced Desing Patterns
10. CHAIN OF RESPONSIBILITY
• More than one object may handle a request, and the handler
isn't known a priori.
• The handler should be ascertained automatically.
• You want to issue request to one of several objects without
specifying The receiver explicitly.
• The set of objects that can handle a request should be
specified dynamically
Amir Barylko Advanced Design Patterns
12. PROXY
• Avoid creating the object until needed
• Provides a placeholder for additional functionality
• Very useful for mocking
• Many implementations exist (IoC, Dynamic proxies, etc)
Amir Barylko Advanced Design Patterns
14. ACTIVERECORD
• Isa Domain Model where classes match very closely the
database structure
• Each table is mapped to class with methods for finding,
update, delete, etc.
• Each attribute is mapped to a column
• Associations are deduced from the classes
Amir Barylko Advanced Design Patterns
15. create_table "movies", :force => true do |t|
t.string "title"
t.string "description"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "reviews", :force => true do |t|
t.string "name"
t.integer "stars"
t.text "comment"
t.integer "movie_id"
t.datetime "created_at"
t.datetime "updated_at"
end
class Movie < ActiveRecord::Base
validates_presence_of :title, :description
has_many :reviews
end
class Review < ActiveRecord::Base
belongs_to :movie
end
Amir Barylko Advanced Design Patterns
16. REPOSITORY
• Mediator between domain and storage
• Acts like a collection of items
• Supports queries
• Abstraction of the storage
Amir Barylko Advanced Design Patterns
18. EVENT AGGREGATOR
• Manage events using a subscribe / publish mechanism
• Isolates subscribers from publishers
• Decouple events from actual models
• Events can be distributed
• Centralize event registration logic
• No need to track multiple objects
Amir Barylko Advanced Design Patterns
19. Channel events
from multiple
objects into a
single object to
s i m p l i f y
registration for
clients
Amir Barylko Advanced Design Patterns
21. EVENT SOURCING
• Register all changes in the application using events
• Event should be persisted
• Complete Rebuild
• Temporal Query
• Event Replay
Amir Barylko Advanced Design Patterns
24. LIST COMPREHENSION
• Syntax Construct in languages
• Describe properties for the list (sequence)
• Filter
• Mapping
• Same idea for Set or Dictionary comprehension
Amir Barylko Advanced Design Patterns
25. LANGUAGE COMPARISON
• Scala
for (x <- Stream.from(0); if x*x > 3) yield 2*x
• LINQ
var range = Enumerable.Range(0..20);
from num in range where num * num > 3 select num * 2;
• Clojure
(take 20 (for [x (iterate inc 0) :when (> (* x x) 3)] (* 2 x)))
• Ruby
(1..20).select { |x| x * x > 3 }.map { |x| x * 2 }
Amir Barylko Advanced Design Patterns
26. OBJECT MOTHER / BUILDER
• Creates an object for testing (or other) purposes
• Assumes defaults
• Easy to configure
• Fluid interface
• Usually has methods to to easily manipulate the domain
Amir Barylko Advanced Design Patterns
27. public class When_adding_a_an_invalid_extra_frame
{
[Test]
public void Should_throw_an_exception()
{
// arrange
10.Times(() => this.GameBuilder.AddFrame(5, 4));
var game = this.GameBuilder.Build();
// act & assert
new Action(() => game.Roll(8)).Should().Throw();
}
}
http://orthocoders.com/2011/09/05/the-bowling-game-kata-first-attempt/
Amir Barylko Advanced Design Patterns
29. VISITOR
• Ability to traverse (visit) a object structure
• Different visitors may produce different results
• Avoid littering the classes with particular operations
Amir Barylko Advanced Design Patterns
31. NULL OBJECT
• Represent “null” with an actual instance
• Provides default functionality
• Clear semantics of “null” for that domain
Amir Barylko Advanced Design Patterns
32. class animal {
public:
virtual void make_sound() = 0;
};
class dog : public animal {
void make_sound() { cout << "woof!" << endl; }
};
class null_animal : public animal {
void make_sound() { }
};
http://en.wikipedia.org/wiki/Null_Object_pattern
Amir Barylko Advanced Design Patterns
33. FACTORY
• Creates instances by request
• More flexible than Singleton
• Can be configured to create different families of objects
• IoC containers are closely related
• Can be implemented dynamic based on interfaces
• Can be used also to release “resource” when not needed
Amir Barylko Advanced Design Patterns
34. interface GUIFactory {
public Button createButton();
}
class WinFactory implements GUIFactory {
public Button createButton() {
return new WinButton();
}
}
class OSXFactory implements GUIFactory {
public Button createButton() {
return new OSXButton();
}
}
interface Button {
public void paint();
}
http://en.wikipedia.org/wiki/Abstract_factory_pattern
Amir Barylko Advanced Design Patterns
35. STRATEGY
• Abstracts the algorithm to solve a particular problem
• Can be configured dynamically
• Are interchangeable
Amir Barylko Advanced Design Patterns
37. DATA TRANSFER OBJECT
• Simplifies information transfer across services
• Can be optimized
• Easy to understand
Amir Barylko Advanced Design Patterns
39. PAGE OBJECT
• Abstract web pages functionality to be used usually in testing
• Each page can be reused
• Changes in the page impact only the implementation, not the
clients
Amir Barylko Advanced Design Patterns
40. public class LoginPage {
public HomePage loginAs(String username, String password) {
// ... clever magic happens here
}
public LoginPage loginWithError(String username, String
password) {
// ... failed login here, maybe because
// one or both of the username and password are wrong
}
public String getErrorMessage() {
// So we can verify that the correct error is shown
}
}
http://code.google.com/p/selenium/wiki/PageObjects
Amir Barylko Advanced Design Patterns
42. RESOURCES
• Email: amir@barylko.com, @abarylko
• Slides: http://www.orthocoders.com/presentations
• Patterns: Each pattern example has a link
Amir Barylko Advanced Design Patterns
45. CLOJURE TRAINING
• When: Nov 6, 7 & 8
• More info: http://www.maventhought.com
• Goal: LearnClojure and functional programming with real
hands on examples
Amir Barylko Advanced Desing Patterns