SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Este.js
The End of the Great Schism
daniel@steigerwald.cz
Why full stack development is so hard?
1. huge js fragmentation - 40% of a developers time is spent in
learning
2. permanent client/server languages/tools/libraries schizophrenia
- developer has to learn/write/change things twice!
3. endless fight against app state a structure; class model and
inheritance - 40% of a developers time is spent in debugging and
refactoring
Let's face it: We are hardly productive 10 % of our time.
For next several years at least.
Este.js to the Rescue.
Huge JavaScript fragmentation
Angular, Backbone, jQuery, Meteor, MarionetteJS, Dart, KnockoutJS,
mustache.js, Ampersand.js, Grunt, CoffeeScript, broccolijs, and
more…
Solution: Be modular, minimize vendor locks and bus
factors. Choose only well supported stuff unless you
have pretty good reason to not.
Mail I got recently...
"Daniel, I went away for a few weeks and when I came back my
engineers had changed us from Angular to React!
I thought you'd find this funny - as in you told me to use React
instead of Angular almost two years ago. Oh, wait, does this put us
back into the running for possibly consultancy with you?"
medium.com/este-js-framework/whats-wrong-with-angular-js-
97b0a787f903
● Facebook library for building user interfaces
● Laser focused with minimal API
● Huge adoption
● Facebook is open sourcing only dog fooded stuff
There are many awesome features, but the most important is the
fact, that React replaces imperative mutated API with the
declarative API. Yes, for iOS and Android as well.
React
Client MVC hell
In MVC, a Model can be read by multiple Views, and can be updated by
multiple Controllers. In a large application, this results in highly
complex interactions where a single update to a Model can cause
Views to notify their Controllers, which may trigger even more Model
updates.
= hard to reason about and debug cascading changes
Flux
● CQS - Command Query Separation
● actions, stores, dispatcher
● unidirectional data flow
● = keeps things predictable
In Este.js, Flux is pure - no framework, no state.
nulogy.com/articles/what-the-flux
medium.com/brigade-engineering/what-is-the-flux-application-architecture-b57ebca85b9e
Flux Action - it's basically command design pattern.
Cimrman's sidestep: blog.confluent.io/2015/01/29/making-sense-of-stream-processing
Flux Store - reduce/sort/filter app state
Awesome combo with github.com/facebook/immutable-js. Forget about Underscore.
Flux Dispatcher - pub/sub
Flux
ES6/7/whatever
● JavaScript as language rocks - babeljs.io
○ Ich bin ein BabelScripter! ES6 + ES7 + JSX + Flowtypes
● npm is the largest module repository
● no dependency hell
● writing functional and async code is much easier
No more client/server schizophrenia
● Everybody wants server side rendering, even Angular
2 is planning it. Ember has demo already.
● Meteor is not solution. Closed ecosystems suck.
● With good design it's pretty easy.
Solution: Use one language and isomorphic approach
Endless fight against app state a structure
● en.wikipedia.org/wiki/Elephant_in_the_room
● state is evil, state-less actions, state-less stores, CQS
○ github.com/facebook/immutable-js
● global app state with cursors
○ In Este.js, press ctrl-save-s, then console.log(_appState)
● composition over inheritace
"Inheritance locks you into the first shitty design you
come up with." Dan Abramov
Endless fight against app state a structure
● App model built ad hoc, just like with TDD, but without TDD.
● DI container is workaround for distributed state in many classes
● Function > Class
● Class is piece of mutable state, and state is root of all evil.
Class and inheritance is the wrong pattern most of the
time, but the first thing people try.
Endless fight against app state a structure
● live checking code syntax for JS/HTML/CSS/whatver
● eslint
● webpack React hot reload
● pendings actions
● sync/async validations
● localizations
● jest testing with automocking
● LESS, SASS, Stylus, or plain CSS with autoprefixer.
● … and much more
What else Este.js provides?
● Relay - gist.github.com/wincent/598fa75e22bdfa44cf47
● js-csp - CSP channels for Javascript (like Clojurescript's core.
async, or Go)
● Leverage Webpack loaders for Clojure or PureScript or whatever.
○ twitter.com/swannodette/status/574986800466370560
● React Native and A Dynamic, Crazy, Native Mobile Future
Future
● I don't see any reason to start a new project in PHP/Ruby/Whatever. Sure you can use
Clojure, Elm, or even PHP, but you must be aware of aforementioned issues.
● Don't create classes messed with state unless you have pretty good reasons to do
that. Immutability and functional programming is a thing you have to learn right now.
It's easy with Este.js
● Maybe Ember can compete, but there is huge legacy stuff.
● Este.js is now only about patterns and practices. Frameworks are dead.
● Static pages or dynamic app? False dichotomy. Now Este.js is just fine for coders as
well. Part of your app will always be static, and you can add interactivity anytime later.
No need to change stack or learn new one.
Final thoughts
http://javascript-skoleni.cz
I'm hiring.
twitter.com/steida

Contenu connexe

Tendances

WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
Hyun-woo Park
 

Tendances (20)

Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Front-end development automation with Grunt
Front-end development automation with GruntFront-end development automation with Grunt
Front-end development automation with Grunt
 
Webpack: from 0 to 2
Webpack: from 0 to 2Webpack: from 0 to 2
Webpack: from 0 to 2
 
Grunt to automate JS build
Grunt to automate JS buildGrunt to automate JS build
Grunt to automate JS build
 
Automate your WordPress Workflow with Grunt.js
Automate your WordPress Workflow with Grunt.jsAutomate your WordPress Workflow with Grunt.js
Automate your WordPress Workflow with Grunt.js
 
Preprocessor Workflow with Grunt
Preprocessor Workflow with GruntPreprocessor Workflow with Grunt
Preprocessor Workflow with Grunt
 
Groovy and noteworthy
Groovy and noteworthyGroovy and noteworthy
Groovy and noteworthy
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScript
 
Blogging for hackers (english)
Blogging for hackers (english)Blogging for hackers (english)
Blogging for hackers (english)
 
Webpack
Webpack Webpack
Webpack
 
Grunt and Bower
Grunt and BowerGrunt and Bower
Grunt and Bower
 
Introduction to rails
Introduction to railsIntroduction to rails
Introduction to rails
 
Front-end tools in java webapps
Front-end tools in java webappsFront-end tools in java webapps
Front-end tools in java webapps
 
Grunt JS - Getting Started With Grunt
Grunt JS - Getting Started With GruntGrunt JS - Getting Started With Grunt
Grunt JS - Getting Started With Grunt
 
Why don't you Groovy?
Why don't you Groovy?Why don't you Groovy?
Why don't you Groovy?
 
Web pack and friends
Web pack and friendsWeb pack and friends
Web pack and friends
 
Advanced front-end automation with npm scripts
Advanced front-end automation with npm scriptsAdvanced front-end automation with npm scripts
Advanced front-end automation with npm scripts
 
Javascript fullstasck
Javascript fullstasckJavascript fullstasck
Javascript fullstasck
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
 
Softshake 2013 - Let's take this offline
Softshake 2013 - Let's take this offlineSoftshake 2013 - Let's take this offline
Softshake 2013 - Let's take this offline
 

Similaire à Daniel Steigerwald - Este.js - konec velkého Schizma

Flu3nt highlights
Flu3nt highlightsFlu3nt highlights
Flu3nt highlights
dswork
 
Maintainable Javascript carsonified
Maintainable Javascript carsonifiedMaintainable Javascript carsonified
Maintainable Javascript carsonified
Christian Heilmann
 
Front-End Modernization for Mortals
Front-End Modernization for MortalsFront-End Modernization for Mortals
Front-End Modernization for Mortals
cgack
 
Gatling - Bordeaux JUG
Gatling - Bordeaux JUGGatling - Bordeaux JUG
Gatling - Bordeaux JUG
slandelle
 

Similaire à Daniel Steigerwald - Este.js - konec velkého Schizma (20)

Flu3nt highlights
Flu3nt highlightsFlu3nt highlights
Flu3nt highlights
 
Rethinking Best Practices
Rethinking Best PracticesRethinking Best Practices
Rethinking Best Practices
 
Rx Swift
Rx SwiftRx Swift
Rx Swift
 
7 Redux challenges
7 Redux challenges7 Redux challenges
7 Redux challenges
 
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017   ember.js - escape the javascript fatigueNode.js meetup 17.05.2017   ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
 
Introduction to Functional Reactive Web with Clojurescript
Introduction to Functional Reactive Web with ClojurescriptIntroduction to Functional Reactive Web with Clojurescript
Introduction to Functional Reactive Web with Clojurescript
 
Maintainable Javascript carsonified
Maintainable Javascript carsonifiedMaintainable Javascript carsonified
Maintainable Javascript carsonified
 
Sexy React Stack
Sexy React StackSexy React Stack
Sexy React Stack
 
The Java alternative to Javascript
The Java alternative to JavascriptThe Java alternative to Javascript
The Java alternative to Javascript
 
Real World Single Page App - A Knockout Case Study
Real World Single Page App - A Knockout Case StudyReal World Single Page App - A Knockout Case Study
Real World Single Page App - A Knockout Case Study
 
Front-End Modernization for Mortals
Front-End Modernization for MortalsFront-End Modernization for Mortals
Front-End Modernization for Mortals
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernization
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernization
 
Get Started with JavaScript Frameworks
Get Started with JavaScript FrameworksGet Started with JavaScript Frameworks
Get Started with JavaScript Frameworks
 
Why Concurrency is hard ?
Why Concurrency is hard ?Why Concurrency is hard ?
Why Concurrency is hard ?
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
Gatling - Bordeaux JUG
Gatling - Bordeaux JUGGatling - Bordeaux JUG
Gatling - Bordeaux JUG
 
Workshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewWorkshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General Overview
 
Concurrency - Why it's hard ?
Concurrency - Why it's hard ?Concurrency - Why it's hard ?
Concurrency - Why it's hard ?
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
 

Plus de Develcz

Martin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftMartin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of Warcraft
Develcz
 

Plus de Develcz (20)

Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)
 
Ondřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featuryOndřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featury
 
Martin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftMartin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of Warcraft
 
Ondřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužebOndřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužeb
 
Marcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódyMarcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódy
 
Michal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadloMichal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadlo
 
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojůOndřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
 
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
 
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslŠtěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
 
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLTomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
 
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíTomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
 
Jakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostJakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnost
 
Roman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonRoman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To Reason
 
Michal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloMichal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadlo
 
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
 
David Majda: Autoformátování kódu
David Majda: Autoformátování kóduDavid Majda: Autoformátování kódu
David Majda: Autoformátování kódu
 
David Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDavid Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the Ugly
 
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
 
Adam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalAdam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/Drupal
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
 

Dernier

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 

Dernier (20)

%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 

Daniel Steigerwald - Este.js - konec velkého Schizma

  • 1. Este.js The End of the Great Schism daniel@steigerwald.cz
  • 2. Why full stack development is so hard? 1. huge js fragmentation - 40% of a developers time is spent in learning 2. permanent client/server languages/tools/libraries schizophrenia - developer has to learn/write/change things twice! 3. endless fight against app state a structure; class model and inheritance - 40% of a developers time is spent in debugging and refactoring Let's face it: We are hardly productive 10 % of our time.
  • 3. For next several years at least. Este.js to the Rescue.
  • 4. Huge JavaScript fragmentation Angular, Backbone, jQuery, Meteor, MarionetteJS, Dart, KnockoutJS, mustache.js, Ampersand.js, Grunt, CoffeeScript, broccolijs, and more… Solution: Be modular, minimize vendor locks and bus factors. Choose only well supported stuff unless you have pretty good reason to not.
  • 5. Mail I got recently... "Daniel, I went away for a few weeks and when I came back my engineers had changed us from Angular to React! I thought you'd find this funny - as in you told me to use React instead of Angular almost two years ago. Oh, wait, does this put us back into the running for possibly consultancy with you?" medium.com/este-js-framework/whats-wrong-with-angular-js- 97b0a787f903
  • 6. ● Facebook library for building user interfaces ● Laser focused with minimal API ● Huge adoption ● Facebook is open sourcing only dog fooded stuff There are many awesome features, but the most important is the fact, that React replaces imperative mutated API with the declarative API. Yes, for iOS and Android as well. React
  • 7. Client MVC hell In MVC, a Model can be read by multiple Views, and can be updated by multiple Controllers. In a large application, this results in highly complex interactions where a single update to a Model can cause Views to notify their Controllers, which may trigger even more Model updates. = hard to reason about and debug cascading changes
  • 8. Flux ● CQS - Command Query Separation ● actions, stores, dispatcher ● unidirectional data flow ● = keeps things predictable In Este.js, Flux is pure - no framework, no state. nulogy.com/articles/what-the-flux medium.com/brigade-engineering/what-is-the-flux-application-architecture-b57ebca85b9e
  • 9. Flux Action - it's basically command design pattern. Cimrman's sidestep: blog.confluent.io/2015/01/29/making-sense-of-stream-processing Flux Store - reduce/sort/filter app state Awesome combo with github.com/facebook/immutable-js. Forget about Underscore. Flux Dispatcher - pub/sub Flux
  • 10. ES6/7/whatever ● JavaScript as language rocks - babeljs.io ○ Ich bin ein BabelScripter! ES6 + ES7 + JSX + Flowtypes ● npm is the largest module repository ● no dependency hell ● writing functional and async code is much easier
  • 11. No more client/server schizophrenia ● Everybody wants server side rendering, even Angular 2 is planning it. Ember has demo already. ● Meteor is not solution. Closed ecosystems suck. ● With good design it's pretty easy. Solution: Use one language and isomorphic approach
  • 12. Endless fight against app state a structure
  • 13. ● en.wikipedia.org/wiki/Elephant_in_the_room ● state is evil, state-less actions, state-less stores, CQS ○ github.com/facebook/immutable-js ● global app state with cursors ○ In Este.js, press ctrl-save-s, then console.log(_appState) ● composition over inheritace "Inheritance locks you into the first shitty design you come up with." Dan Abramov Endless fight against app state a structure
  • 14. ● App model built ad hoc, just like with TDD, but without TDD. ● DI container is workaround for distributed state in many classes ● Function > Class ● Class is piece of mutable state, and state is root of all evil. Class and inheritance is the wrong pattern most of the time, but the first thing people try. Endless fight against app state a structure
  • 15. ● live checking code syntax for JS/HTML/CSS/whatver ● eslint ● webpack React hot reload ● pendings actions ● sync/async validations ● localizations ● jest testing with automocking ● LESS, SASS, Stylus, or plain CSS with autoprefixer. ● … and much more What else Este.js provides?
  • 16. ● Relay - gist.github.com/wincent/598fa75e22bdfa44cf47 ● js-csp - CSP channels for Javascript (like Clojurescript's core. async, or Go) ● Leverage Webpack loaders for Clojure or PureScript or whatever. ○ twitter.com/swannodette/status/574986800466370560 ● React Native and A Dynamic, Crazy, Native Mobile Future Future
  • 17. ● I don't see any reason to start a new project in PHP/Ruby/Whatever. Sure you can use Clojure, Elm, or even PHP, but you must be aware of aforementioned issues. ● Don't create classes messed with state unless you have pretty good reasons to do that. Immutability and functional programming is a thing you have to learn right now. It's easy with Este.js ● Maybe Ember can compete, but there is huge legacy stuff. ● Este.js is now only about patterns and practices. Frameworks are dead. ● Static pages or dynamic app? False dichotomy. Now Este.js is just fine for coders as well. Part of your app will always be static, and you can add interactivity anytime later. No need to change stack or learn new one. Final thoughts