SlideShare a Scribd company logo
Photos by

The Art of in 2015
Matt Raible • http://raibledesigns.com
Blogger on raibledesigns.com
Founder of AppFuse
Father, Skier, Mountain
Biker, Whitewater Rafter
Web Framework Connoisseur
Who is Matt Raible?
Bus Lover
How to Become an Artist
Part 1 of 3: Learn the Basics on Your Own

Take some time and try various mediums of art

Recognize your strengths

Do your research and learn the basics

Get the supplies you will need

Observe the world around you

Make time for your art every day

Seek out the opinions of others

Develop your own style
http://www.wikihow.com/Become-an-Artist
Jobs on Dice.com
September 2015
0
500
1,000
1,500
2,000
Backbone
Angular
Em
ber
Knockout
React
Job Growth
0
500
1000
1500
2000
February 2014 January 2015 September 2015
Ember.js AngularJS Backbone Knockout React
LinkedIn Skills
September 2015
0
50,000
100,000
150,000
200,000
Backbone
Angular
Knockout
Em
ber
React
LinkedIn Skills
September 2015
0
15,000
30,000
45,000
60,000
Backbone
Knockout
Em
ber
React
Skills Growth
0
50000
100000
150000
200000
February 2014 January 2015 September 2015
Ember.js AngularJS Backbone Knockout React
Google Trends
Indeed Job Trends
Absolute
Relative
Stack Overflow
http://stackoverflow.com/research/developer-survey-2015
The Art of AngularJS in 2015 - Angular Summit 2015
Who wants to learn ?
The History of AngularJS
Started by Miško Hevery in 2009

GWT = 3 developers, 6 months

AngularJS = 1 developer, 3 weeks

Learn more:

https://www.youtube.com/watch?v=X0VsStcCCM8
The History of AngularJS
0
4500
9000
13500
18000
Lines of Code
17,000
1,000
AngularJS GWT
The Art of AngularJS in 2015 - Angular Summit 2015
Hello World
<!doctype html>
<html ng-app>
<head>
<title>Hello World</title>
</head>
<body>
<div>
<label>Name:</label>
<input type="text" ng-model="name" placeholder="Enter a name here">
<hr>
<h1>Hello {{name}}!</h1>
</div>
<script src="http://code.angularjs.org/1.4.6/angular.min.js"></script>
</body>
</html>
Architecture Principles
Structure
Testability
Boilerplate
D.R.Y.
Getting Started
Start with Angular Seed

git clone https://github.com/angular/angular-seed.git
App Definition
var app = angular.module('myApp', []);
<!DOCTYPE html>
<html ng-app="myApp">
Model View Controller
Data Binding
friend.js

friend.html

$scope.friend = {
name: "Fernand"
};
{{friend.name}} // 1-way
<input ng-model="friend.name"> // 2-way
Solving FOUC
This will work just fine — if it’s not on the first page:

Use ng-cloak or ng-bind attribute:

<p>{{friend.name}}</p>
<p ng-cloak>{{friend.name}}</p>
<p ng-bind="friend.name"></p>
Directives
<div ng-repeat="entry in news.entries">
<span ng-bind="entry.title"></span>
<button ng-click="delete($index)">
Delete
</button>
</div>
Directives with valid HTML5
<div data-ng-repeat="entry in news.entries">
<span data-ng-bind="entry.title"></span>
<button data-ng-click="delete($index)">
Delete
</button>
</div>
<div data-ng:repeat="entry in news.entries">
<span data-ng:bind="entry.title"></span>
<button data-ng:click="delete($index)">
Delete
</button>
</div>
Custom Directives
$scope.customer = {
name: 'Franklin',
address: '1830 Blake'
};
<div ng-controller="MyController">
<my-customer></my-customer>
</div>
.directive('myCustomer', function() {
return {
template: 'Name: {{customer.name}} 
Address: {{customer.address}}'
};
});
Built-In Directives
ng-href

ng-src

ng-disabled

ng-checked

ng-readonly

ng-selected

ng-class

ng-style
Services
var services = angular.module('myApp.services', ['ngResource']);
services.factory('LoginService', function($resource) {
return $resource(':action', {}, {
authenticate: {
method: 'POST',
params: {'action': 'authenticate'},
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}
}
);
});
services.factory('NewsService', function($resource) {
return $resource('news/:id', {id: '@id'});
});
$http
$http({method: 'GET', url: '/news'}).
success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
$http.get('/news').success(successCallback);
$http.post('/news', data).success(successCallback);
$q
myApp.factory('HelloWorld', function($q, $timeout) {
var getMessages = function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve(['Hello', 'world!']);
}, 2000);
return deferred.promise;
};
return {
getMessages: getMessages
};
});
$q
myApp.controller('HelloCtrl', function($scope, HelloWorld) {
HelloWorld.getMessages().then(function(messages) {
$scope.messages = messages;
});
});
Dependency Injection
.controller('LoginController', function($scope, $rootScope, $location,
$http, $cookieStore, LoginService) {
$scope.login = function () {
LoginService.authenticate($.param({username: $scope.username, 

password: $scope.password}),
function (user) {
$rootScope.user = user;
$http.defaults.headers.common[xAuthTokenHeaderName] = user.token;
$cookieStore.put('user', user);
$location.path("/");
});
};
})
Dependency Injection
.controller('LoginController', function($scope, $rootScope, $location,
$http, $cookieStore, LoginService) {
$scope.login = function () {
LoginService.authenticate($.param({username: $scope.username, 

password: $scope.password}),
function (user) {
$rootScope.user = user;
$http.defaults.headers.common[xAuthTokenHeaderName] = user.token;
$cookieStore.put('user', user);
$location.path("/");
});
};
})
Filters
also: lowercase, limitTo, orderBy
{{ name | uppercase }}
<!-- Displays: 123.46 -->
{{ 123.456789 | number:2 }}
<!-- In en-US locale, '$1000.00' will be shown -->
{{ 1000 | currency }}
<!-- all of the words with e in them ["Lerner","Likes","Eat"] -->
{{ ['Ari', 'Lerner', 'Likes', 'To', 'Eat', 'Pizza'] | filter:'e' }}
Routes
.config(['$routeProvider', '$locationProvider', '$httpProvider',
function ($routeProvider, $locationProvider, $httpProvider) {
$routeProvider.when('/create', {
templateUrl: 'partials/create.html', controller: 'CreateController'
});
$routeProvider.when('/edit/:id', {
templateUrl: 'partials/edit.html', controller: 'EditController'
});
$routeProvider.when('/login', {
templateUrl: 'partials/login.html', controller: 'LoginController'
});
$routeProvider.otherwise({
templateUrl: 'partials/index.html', controller: 'IndexController'
});
$locationProvider.hashPrefix('!');
}]
)
Routing: Navigation
$rootScope.logout = function () {
delete $rootScope.user;
delete $http.defaults.headers.common[xAuthTokenHeaderName];
$cookieStore.remove('user');
$location.path("/login");
};
Routing: Navigation
$rootScope.logout = function () {
delete $rootScope.user;
delete $http.defaults.headers.common[xAuthTokenHeaderName];
$cookieStore.remove('user');
$location.path("/login");
};
UI-Router
angular.module('myApp.search', ['ui.router'])
.config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('search', {
url: '/search',
templateUrl: 'search/index.html',
controller: 'SearchController'
})
.state('edit', {
url: '/edit/:id',
templateUrl: 'search/edit.html',
controller: 'EditController'
})
.state('search-auto', {
url: '/search/:term',
templateUrl: 'search/index.html',
controller: 'SearchController'
})
}])
ngRoute
angular.module('myApp.search', ['ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/search', {
templateUrl: 'search/index.html',
controller: 'SearchController'
})
.when('/edit/:id', {
templateUrl: 'search/edit.html',
controller: 'EditController'
})
.when('/search/:term', {
templateUrl: 'search/index.html',
controller: 'SearchController'
})
}])
The Art of AngularJS in 2015 - Angular Summit 2015
Testing
Karma - test runner, framework agnostic

Jasmine - unit tests, framework agnostic

Protractor - integration tests, Angular-specific

Lineman - productivity, framework agnostic
Testing: Controllers
describe("controller: LoginController", function() {
beforeEach(function() {
module("app");
});
beforeEach(inject(function($controller, $rootScope, $location,
AuthenticationService, $httpBackend) {
this.$location = $location;
this.$httpBackend = $httpBackend;
this.scope = $rootScope.$new();
this.redirect = spyOn($location, 'path');
$controller('LoginController', {
$scope: this.scope,
$location: $location,
AuthenticationService: AuthenticationService
});
}));
Testing: Controllers
afterEach(function() {
this.$httpBackend.verifyNoOutstandingRequest();
this.$httpBackend.verifyNoOutstandingExpectation();
});
describe("successfully logging in", function() {
it("should redirect you to /home", function() {
this.$httpBackend.expectPOST('/login',
this.scope.credentials).respond(200);
this.scope.login();
this.$httpBackend.flush();
expect(this.redirect).toHaveBeenCalledWith('/home');
});
});
});
Testing: Directives
beforeEach(inject(function($rootScope, $compile) {
this.directiveMessage = 'ralph was here';
this.html = "<div shows-message-when-hovered message='"
+ this.directiveMessage + "'></div>";
this.scope = $rootScope.$new();
this.scope.message = this.originalMessage = 'things are looking grim';
this.elem = $compile(this.html)(this.scope);
}));
describe("when a user mouses over the element", function() {
it("sets the message on the scope to the message attribute", function() {
this.elem.triggerHandler('mouseenter');
expect(this.scope.message).toBe(this.directiveMessage);
});
});
Testing: Directives with CoffeeScript
describe "directive: shows-message-when-hovered (coffeescript)", ->
Given -> module("app")
Given inject ($rootScope, $compile) ->
@directiveMessage = 'ralph was here'
@html = "<div shows-message-when-hovered
message='#{@directiveMessage}'></div>"
@scope = $rootScope.$new()
@scope.message = @originalMessage = 'things are looking grim'
@elem = $compile(@html)(@scope)
describe "when a user mouses over the element", ->
When -> @elem.triggerHandler('mouseenter')
Then "the message on the scope is set to the message attribute", ->
@scope.message == @directiveMessage
Testing: End-to-End
protractor = require("protractor")
require "protractor/jasminewd"
require 'jasmine-given'
describe "my angular app", ->
ptor = protractor.getInstance()
describe "visiting the login page", ->
Given -> ptor.get "/"
describe "when a user logs in", ->
Given -> ptor.findElement(protractor.By.input("credentials.username")).sendKeys "Ralph"
Given -> ptor.findElement(protractor.By.input("credentials.password")).sendKeys "Wiggum"
When -> ptor.findElement(protractor.By.id("log-in")).click()
Then -> ptor.findElement(protractor.By.binding("{{ message }}")).getText().then (text) ->
expect(text).toEqual "Mouse Over these images to see a directive at work"
Testing: End-to-End
browser.get('/');
expect(element.all(by.css('.img-responsive')).first().getAttribute("alt")).
toMatch(/StyleSelect/);
element(by.model('user.email')).sendKeys(email);
element(by.model('user.password')).sendKeys(password);
element(by.css('button[type=submit]')).click();
browser.driver.wait(protractor.until.elementIsVisible($('.app-content')));
var greeting = $('#greeting').getText();
var expectedGreeting = new RegExp('Welcome ' + firstName);
expect(greeting).toMatch(expectedGreeting);
Building with Grunt
sudo npm install
sudo npm install -g grunt-cli
vi package.json
"grunt": "0.4.5",
"grunt-contrib-concat": "0.5.1",
"grunt-contrib-uglify": "0.9.2",
"grunt-contrib-cssmin": "0.14.0",
"grunt-usemin": "3.1.1",
"grunt-contrib-copy": "0.8.1",
"grunt-rev": "~0.1.0",
"grunt-contrib-clean": "~0.6.0",
"matchdep": "~0.3.0"
Gruntfile.js
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
clean: ["dist", '.tmp'],
copy: {
main: {
expand: true,
cwd: 'app/',
src: ['**', '!js/**', '!lib/**', '!**/*.css'],
dest: 'dist/'
}
},
rev: {
files: {
src: ['dist/**/*.{js,css}', '!dist/js/shims/**']
}
},
Gruntfile.js
useminPrepare: {
html: 'app/index.html'
},
usemin: {
html: ['dist/index.html']
},
uglify: {
options: {
report: 'min',
mangle: false
}
}
});
// Tell Grunt what to do when we type "grunt" into the terminal
grunt.registerTask('default', [
'copy', 'useminPrepare', 'concat', 'uglify', 'cssmin', 'rev', 'usemin'
]);
};
index.html comments
<head>
<title>My AngularJS App</title>
<!-- build:css css/seed.min.css -->
<link rel="stylesheet" href="css/app.css"/>
<link rel="stylesheet" href="css/app2.css"/>
<!-- endbuild -->
</head>
<body>
<!-- build:js js/seed.min.js -->
<script src="lib/angular/angular.js"></script>
<script src="lib/angular/angular-route.js"></script>
<script src="js/app.js"></script>
<script src="js/services.js"></script>
<script src="js/controllers.js"></script>
<script src="js/filters.js"></script>
<script src="js/directives.js"></script>
<!-- endbuild -->
</body>
dist/index.html
<head>
<title>My AngularJS App</title>
<link rel="stylesheet" href="css/f050d0dc.seed.min.css"/>
</head>
<body>
<script src="js/8973cf0f.seed.min.js"></script>
</body>
After Grunt
http://raibledesigns.com/rd/entry/using_grunt_with_angularjs_for
You shouldn’t have to worry about FEO
http://raibledesigns.com/rd/entry/you_shouldn_t_have_to
HTTP/2 Performance Anti-Patterns?
Split dominant content domains

Reduce requests

	 Merging

	 Sprites

	 DataURIs
http://www.slideshare.net/andydavies
UI Bootstrap http://angular-ui.github.io/bootstrap
<script src="lib/angular/ui-bootstrap-0.13.4.min.js"></script>
<script src="lib/angular/ui-bootstrap-tpls-0.13.4.min.js"></script>
angular.module('myApp', ['ui.bootstrap']);
UI Bootstrap: Carousel
UI Bootstrap: Carousel
<div ng-controller="CarouselDemoCtrl">
<div style="height: 305px">
<carousel interval="myInterval">
<slide ng-repeat="slide in slides" active="slide.active">
<img ng-src="{{slide.image}}" style="margin:auto;">
<div class="carousel-caption">
<h4>Slide {{$index}}</h4>
<p>{{slide.text}}</p>
</div>
</slide>
</carousel>
</div>
</div>
Foundation for Apps http://foundation.zurb.com/apps
Foundation
Native AngularJS directives based on
Foundation's markup and CSS

No dependency on jQuery or
Foundation's JavaScript is required
Angular Foundation http://pineconellc.github.io/angular-foundation/
<script src="bower_components/angular-foundation/mm-foundation.min.js"></script>
<script src="bower_components/angular_foundation/mm-foundation-tpls.min.js"></script>
angular.module('myApp', ['mm.foundation']);
Ionic Framework http://ionicframework.com
#dv13javaweb$
My Ionic Experience
http://raibledesigns.com/rd/entry/developing_an_ios_native_app
JHipster http://jhipster.github.io/
JHipster
Spring Boot

Spring Security

AngularJS

Bootstrap

Bower

Metrics

Java 7 or Java 8

Maven or Gradle

Authentication Type: cookie-based or
OAuth2

Type of Database: SQL or NoSQL

Caching: EhCache or Hazelcast

Grunt or Gulp.js
http://jhipster.github.io/
Foundational Frameworks Project Options
JHipster
JHipster: Metrics
JHipster: Code Generation
JHipster: Code Generation
AngularJS Batarang
Angular 2.0
<input type="text" [value]="firstName">
<button (click)="addPerson()">Add</button>
<input type="checkbox" [checked]="someProperty">
Concepts Eliminated in 2.0
Controllers

Directive Definition Object

$scope

angular.module

jqLite
The Bad News
No migration path from Angular 1.x to 2.0

Angular 1.3 will be supported for 1.5 - 2 years

Will only support Evergreen Browsers (e.g. IE10+)

Learn more on

http://www.infoq.com/news/2014/10/angular-2-atscript
The Art of AngularJS in 2015 - Angular Summit 2015
Good News!
Angular 1 and Angular 2 can be mixed in the same application

You can mix Angular 1 and Angular 2 components in the same view

Angular 1 and Angular 2 can inject services across frameworks

Data binding works across frameworks

http://angularjs.blogspot.com/2015/08/angular-1-and-angular-2-coexistence.html
Angular 1 to 2 Example
How to Become an Artist
Part 1 of 3: Learn the Basics on Your Own

Take some time and try various mediums of art

Recognize your strengths

Do your research and learn the basics

Get the supplies you will need

Observe the world around you

Make time for your art every day

Seek out the opinions of others

Develop your own style
http://www.wikihow.com/Become-an-Artist
Shortcut to becoming an Angular Artist
JUST DO IT.
Contact Me!

http://raibledesigns.com

@mraible

Presentations

http://slideshare.net/mraible

Code

http://github.com/mraible
Questions?
Who to follow on Twitter
AngularJS Team at Google

	 Miško Hevery - @mhevery

	 Igor Minar - @IgorMinar

	 Brian Ford - @briantford

Web Performance

	 Ilya Grigorik - @igrigorik

	 Andy Davis - @andydavies

	 Steve Souders - @Souders
My Experience in 2013
Developing with AngularJS Series

Part I: The Basics

Part II: Dialogs and Data

Part III: Services

Part IV: Making it Pop

#dv13javaweb$
My Experience in 2013
http://vimeo.com/mraible/angularjs-deep-dive
2015 AngularJS Tutorials
Getting Started with AngularJS

http://raibledesigns.com/rd/entry/getting_started_with_angularjs 

Testing AngularJS Applications

http://raibledesigns.com/rd/entry/testing_angularjs_applications
Spring and AngularJS http://spring.io/blog
http://spring.io/blog/2015/01/12/spring-and-angular-js-a-secure-single-page-application

More Related Content

What's hot (20)

PDF
Play Framework vs Grails Smackdown - JavaOne 2013
Matt Raible
 
PDF
jQuery in the [Aol.] Enterprise
Dave Artz
 
PDF
The Art of Angular in 2016 - Devoxx UK 2016
Matt Raible
 
PDF
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Jeado Ko
 
PDF
Testing Angular 2 Applications - HTML5 Denver 2016
Matt Raible
 
PDF
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
Matt Raible
 
PDF
The Art of Angular in 2016 - vJUG24
Matt Raible
 
PDF
Enjoy the vue.js
TechExeter
 
PDF
The Point of Vue - Intro to Vue.js
Holly Schinsky
 
PDF
Real World Web components
Jarrod Overson
 
PDF
Thinking in Components
FITC
 
PDF
Bootstrap과 UI-Bootstrap
WebFrameworks
 
PDF
The Modern Java Web Developer Bootcamp - Devoxx 2013
Matt Raible
 
PPTX
How to Build SPA with Vue Router 2.0
Takuya Tejima
 
PDF
The Complementarity of React and Web Components
Andrew Rota
 
PDF
Modern frontend development with VueJs
Tudor Barbu
 
PDF
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Matt Raible
 
PDF
Laravel 8 export data as excel file with example
Katy Slemon
 
PDF
An introduction to Vue.js
Javier Lafora Rey
 
PDF
Angular JS blog tutorial
Claude Tech
 
Play Framework vs Grails Smackdown - JavaOne 2013
Matt Raible
 
jQuery in the [Aol.] Enterprise
Dave Artz
 
The Art of Angular in 2016 - Devoxx UK 2016
Matt Raible
 
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Jeado Ko
 
Testing Angular 2 Applications - HTML5 Denver 2016
Matt Raible
 
Get Hip with JHipster: Spring Boot + AngularJS + Bootstrap - Angular Summit 2015
Matt Raible
 
The Art of Angular in 2016 - vJUG24
Matt Raible
 
Enjoy the vue.js
TechExeter
 
The Point of Vue - Intro to Vue.js
Holly Schinsky
 
Real World Web components
Jarrod Overson
 
Thinking in Components
FITC
 
Bootstrap과 UI-Bootstrap
WebFrameworks
 
The Modern Java Web Developer Bootcamp - Devoxx 2013
Matt Raible
 
How to Build SPA with Vue Router 2.0
Takuya Tejima
 
The Complementarity of React and Web Components
Andrew Rota
 
Modern frontend development with VueJs
Tudor Barbu
 
Get Hip with JHipster - Colorado Springs OSS Meetup April 2016
Matt Raible
 
Laravel 8 export data as excel file with example
Katy Slemon
 
An introduction to Vue.js
Javier Lafora Rey
 
Angular JS blog tutorial
Claude Tech
 

Similar to The Art of AngularJS in 2015 - Angular Summit 2015 (20)

PPT
AngularJS and SPA
Lorenzo Dematté
 
PPTX
AngularJS in 60ish Minutes
Dan Wahlin
 
PDF
Angularjs
Ynon Perek
 
PDF
Building Better Web Apps with Angular.js (SXSW 2014)
kbekessy
 
PPTX
01 startoff angularjs
Erhwen Kuo
 
PPTX
Introduction to Angular JS
Santhosh Kumar Srinivasan
 
PDF
AngularJS in 60ish Minutes - Dan Wahlin | FalafelCON 2014
FalafelSoftware
 
PPTX
Getting Started with Angular JS
Akshay Mathur
 
PPT
Introduction to AngularJS
Anass90
 
PPTX
Valentine with AngularJS
Vidyasagar Machupalli
 
PPTX
Learning AngularJS - Complete coverage of AngularJS features and concepts
Suresh Patidar
 
PPTX
Angular js slides
Amr Abd El Latief
 
PPTX
AngularJS Introduction (Talk given on Aug 5 2013)
Abhishek Anand
 
PDF
AngularJS best-practices
Henry Tao
 
PPTX
Angular Tutorial Freshers and Experienced
rajkamaltibacademy
 
PPTX
Intro to AngularJs
SolTech, Inc.
 
PPTX
Angular js
Mauro Servienti
 
PPTX
Basics of AngularJS
Filip Janevski
 
PDF
Angularjs architecture
Michael He
 
KEY
Javascript Frameworks for Well Architected, Immersive Web Apps
dnelson-cs
 
AngularJS and SPA
Lorenzo Dematté
 
AngularJS in 60ish Minutes
Dan Wahlin
 
Angularjs
Ynon Perek
 
Building Better Web Apps with Angular.js (SXSW 2014)
kbekessy
 
01 startoff angularjs
Erhwen Kuo
 
Introduction to Angular JS
Santhosh Kumar Srinivasan
 
AngularJS in 60ish Minutes - Dan Wahlin | FalafelCON 2014
FalafelSoftware
 
Getting Started with Angular JS
Akshay Mathur
 
Introduction to AngularJS
Anass90
 
Valentine with AngularJS
Vidyasagar Machupalli
 
Learning AngularJS - Complete coverage of AngularJS features and concepts
Suresh Patidar
 
Angular js slides
Amr Abd El Latief
 
AngularJS Introduction (Talk given on Aug 5 2013)
Abhishek Anand
 
AngularJS best-practices
Henry Tao
 
Angular Tutorial Freshers and Experienced
rajkamaltibacademy
 
Intro to AngularJs
SolTech, Inc.
 
Angular js
Mauro Servienti
 
Basics of AngularJS
Filip Janevski
 
Angularjs architecture
Michael He
 
Javascript Frameworks for Well Architected, Immersive Web Apps
dnelson-cs
 
Ad

More from Matt Raible (20)

PDF
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Matt Raible
 
PDF
Micro Frontends for Java Microservices - Belfast JUG 2022
Matt Raible
 
PDF
Micro Frontends for Java Microservices - Dublin JUG 2022
Matt Raible
 
PDF
Micro Frontends for Java Microservices - Cork JUG 2022
Matt Raible
 
PDF
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Matt Raible
 
PDF
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Matt Raible
 
PDF
Comparing Native Java REST API Frameworks - Devoxx France 2022
Matt Raible
 
PDF
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Matt Raible
 
PDF
Native Java with Spring Boot and JHipster - Garden State JUG 2021
Matt Raible
 
PDF
Java REST API Framework Comparison - PWX 2021
Matt Raible
 
PDF
Web App Security for Java Developers - PWX 2021
Matt Raible
 
PDF
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Matt Raible
 
PDF
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Matt Raible
 
PDF
Web App Security for Java Developers - UberConf 2021
Matt Raible
 
PDF
Java REST API Framework Comparison - UberConf 2021
Matt Raible
 
PDF
Native Java with Spring Boot and JHipster - SF JUG 2021
Matt Raible
 
PDF
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Matt Raible
 
PDF
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Matt Raible
 
PDF
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Matt Raible
 
PDF
JHipster and Okta - JHipster Virtual Meetup December 2020
Matt Raible
 
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Matt Raible
 
Micro Frontends for Java Microservices - Belfast JUG 2022
Matt Raible
 
Micro Frontends for Java Microservices - Dublin JUG 2022
Matt Raible
 
Micro Frontends for Java Microservices - Cork JUG 2022
Matt Raible
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Matt Raible
 
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Matt Raible
 
Comparing Native Java REST API Frameworks - Devoxx France 2022
Matt Raible
 
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Matt Raible
 
Native Java with Spring Boot and JHipster - Garden State JUG 2021
Matt Raible
 
Java REST API Framework Comparison - PWX 2021
Matt Raible
 
Web App Security for Java Developers - PWX 2021
Matt Raible
 
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Matt Raible
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Matt Raible
 
Web App Security for Java Developers - UberConf 2021
Matt Raible
 
Java REST API Framework Comparison - UberConf 2021
Matt Raible
 
Native Java with Spring Boot and JHipster - SF JUG 2021
Matt Raible
 
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Matt Raible
 
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Matt Raible
 
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
Matt Raible
 
JHipster and Okta - JHipster Virtual Meetup December 2020
Matt Raible
 
Ad

Recently uploaded (20)

PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PPTX
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
Future Tech Innovations 2025 – A TechLists Insight
TechLists
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
The 2025 InfraRed Report - Redpoint Ventures
Razin Mustafiz
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 

The Art of AngularJS in 2015 - Angular Summit 2015