jQuery is a JavaScript library which allows you to develop solutions with less code, in less time. You can build interactive prototypes for your prospective clients, or take an existing solution and add new dynamic behaviour with little effort.
We will see how jQuery can be used to quickly and concisely apply JavaScript behaviour to your web app. It will cover selectors, Ajax, DOM manipulation and more. The aim: to produce lean unobtrusive JavaScript with jQuery.
Presented on 8/14/2012 at BostonRb. This talk provides a nice intro and overview of what RubyMotion is and whether or not it's worth incorporating into your development toolkit.
Workshop Isomorphic Web Apps with ReactJS:
- Universal web apps - Isomorphic
- Server Side Rendering (SSR) with ReactJS
- Server Side Rendering with Redux
- Server Side Rendering with React Router
- Server Side Rendering: server.js - Main Entry Point
- Server Side Rendering: server.js - HTML Template
- Client main entry point: client.js
- Webpack bundles
- Avoiding FOUC - Webpack ExtractTextPlugin
- Webpack code splitting
- React Router - Configuration with Plain Routes
- React Router - Dynamic Routing & WebPack
- Dynamic Routing with new Reducers
- Combining new Reducers - ReducerRegistry
- Data fetching before rendering
- React Router + Redux + Redial: Server Side
- React Router + Redux + Redial: provideHooks
- React Router + Redux + Redial: Client Side
- SEO friendly universal web apps - React-Helmet
- React-Helmet - Server Side Rendering
Presentado por ingeniero: Marc Torrent
Creating GUI Component APIs in Angular and Web ComponentsRachael L Moore
So you’ve embraced architecting your Angular application with reusable components – cheers to you! But you have UI components that need to communicate with each other or expose public methods, and you’re wondering about your options. In this talk, we’ll cover how new web component standards, like Custom Elements, handle this. Next, we’ll walk through how to accomplish it today in Angular 1.x – and bring it all together into what a solution will look like in upcoming Angular 2. Afterwards, you'll know how to design and implement the public HTML and JavaScript interfaces of GUI components.
Talk presented at Angular Connect in October 2015.
Slides from my talk at the Angular Community Days 2017 in Barcelona. In this keynote I talked about the JS single threaded nature, the problem WebWorkers solve, their basics, and the fancy Angular approach in order to bootstrap your whole app inside a WebWorker so the UI does not freeze when running CPU consuming tasks in your code.
An introduction to the complex single page web application framework known as AngularJs. An attempt to overview the high-level aspects of the framework, and to supply references for further exploration.
Writing code as an individual and writing code as part of the team are two very different things. Learn the tips and tricks for writing JavaScript code as part of the team so that your code will continue to work for years to come.
Creating GUI container components in Angular and Web ComponentsRachael L Moore
So you've embraced architecting your Angular application with reusable components--cheers to you! But you have UI components that need multiple entry points for user markup, and regular ng-transclude left you hanging. In this talk, we'll cover how new web component standards, like the Shadow DOM, handle this. Next, we'll walk through how to accomplish it today in Angular 1.3 -- and also give you a brief glimpse into what a solution will look like in upcoming Angular 2. Afterwards, you'll know how to make layout scaffold components with custom elements that serve as containers for arbitrary user-provided HTML content.
Talk presented at ng-conf in March 2015.
jQuery is a JavaScript library which allows you to develop solutions with less code, in less time. You can build interactive prototypes for your prospective clients, or take an existing solution and add new dynamic behaviour with little effort.
We will see how jQuery can be used to quickly and concisely apply JavaScript behaviour to your web app. It will cover selectors, Ajax, DOM manipulation and more. The aim: to produce lean unobtrusive JavaScript with jQuery.
Presented on 8/14/2012 at BostonRb. This talk provides a nice intro and overview of what RubyMotion is and whether or not it's worth incorporating into your development toolkit.
Workshop Isomorphic Web Apps with ReactJS:
- Universal web apps - Isomorphic
- Server Side Rendering (SSR) with ReactJS
- Server Side Rendering with Redux
- Server Side Rendering with React Router
- Server Side Rendering: server.js - Main Entry Point
- Server Side Rendering: server.js - HTML Template
- Client main entry point: client.js
- Webpack bundles
- Avoiding FOUC - Webpack ExtractTextPlugin
- Webpack code splitting
- React Router - Configuration with Plain Routes
- React Router - Dynamic Routing & WebPack
- Dynamic Routing with new Reducers
- Combining new Reducers - ReducerRegistry
- Data fetching before rendering
- React Router + Redux + Redial: Server Side
- React Router + Redux + Redial: provideHooks
- React Router + Redux + Redial: Client Side
- SEO friendly universal web apps - React-Helmet
- React-Helmet - Server Side Rendering
Presentado por ingeniero: Marc Torrent
Creating GUI Component APIs in Angular and Web ComponentsRachael L Moore
So you’ve embraced architecting your Angular application with reusable components – cheers to you! But you have UI components that need to communicate with each other or expose public methods, and you’re wondering about your options. In this talk, we’ll cover how new web component standards, like Custom Elements, handle this. Next, we’ll walk through how to accomplish it today in Angular 1.x – and bring it all together into what a solution will look like in upcoming Angular 2. Afterwards, you'll know how to design and implement the public HTML and JavaScript interfaces of GUI components.
Talk presented at Angular Connect in October 2015.
Slides from my talk at the Angular Community Days 2017 in Barcelona. In this keynote I talked about the JS single threaded nature, the problem WebWorkers solve, their basics, and the fancy Angular approach in order to bootstrap your whole app inside a WebWorker so the UI does not freeze when running CPU consuming tasks in your code.
An introduction to the complex single page web application framework known as AngularJs. An attempt to overview the high-level aspects of the framework, and to supply references for further exploration.
Writing code as an individual and writing code as part of the team are two very different things. Learn the tips and tricks for writing JavaScript code as part of the team so that your code will continue to work for years to come.
Creating GUI container components in Angular and Web ComponentsRachael L Moore
So you've embraced architecting your Angular application with reusable components--cheers to you! But you have UI components that need multiple entry points for user markup, and regular ng-transclude left you hanging. In this talk, we'll cover how new web component standards, like the Shadow DOM, handle this. Next, we'll walk through how to accomplish it today in Angular 1.3 -- and also give you a brief glimpse into what a solution will look like in upcoming Angular 2. Afterwards, you'll know how to make layout scaffold components with custom elements that serve as containers for arbitrary user-provided HTML content.
Talk presented at ng-conf in March 2015.
Backbone.js — Introduction to client-side JavaScript MVCpootsbook
Using Backbone.js to move state to the client-side and the benefits of using a JavaScript MVC framework.
Delivered at SuperMondays, Newcastle upon Tyne, on 26th September 2011.
As present at FluentConf 2014 on March 11th, 2014.
AngularJS is one of the most popular, and powerful, JavaScript frameworks for building rich client-side applications. AngularJS is both simultaneously both simple to use and extremely full featured. With AngularJS a little goes a long way, but to make the most of it, you need to know what you’re doing.
In this workshop we will build a complex application to help exercise all of the salient points of the AngularJS framework.
Topics covered include, ngResource, directives, fitlers, routing, templates, controllers, testing, and more.
Code can be found at: https://github.com/markbates/fluent-2014
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019Matt Raible
You might’ve heard of Angular Schematics, but do you know what they do? Learn how you can use this powerful tool to develop workflows and simplify configurations for your Angular projects.
In this session, you'll learn how to create a schematic, how to test it, and how you can use them with non-Angular projects.
* YouTube video: https://youtu.be/bLLJqagO_dg
* Blog post: https://developer.okta.com/blog/2019/02/13/angular-schematics
* GitHub repo: https://github.com/oktadeveloper/schematics
Learn all the essentials of building Angular 2 applications right here.
https://www.udemy.com/angular-2-training/?couponCode=UANGULAR2
This is a beginner level course aimed at those new to Angular 2 and Typescript. No previous knowledge of either is required before starting this course.
This course combines slides, projects and quizzes in a clear, concise and engaging way to guide you through the core concepts of Angular 2 and Typescript.
You will gain a solid foundation for building real-world applications following best practices and the Angular 2 style guide. This includes how to build components, create shared services, navigate between views, manage data, and managing user and system events.
A Gentle Introduction to Angular Schematics - Angular SF 2019Matt Raible
You might’ve heard of Angular Schematics, but do you know what they do? Learn how you can use this powerful tool to develop workflows and simplify configurations for your Angular projects.
Blog post: https://developer.okta.com/blog/2019/02/13/angular-schematics
Source code: https://github.com/oktadeveloper/okta-angular-schematics-example
Screencast: https://youtu.be/ANwZIt3Ni2s
Use Angular Schematics to Simplify Your Life - Develop Denver 2019Matt Raible
Angular Schematics give developers a way to manipulate projects with code. Not just Angular projects, but any project that has a package.json file! Learn how to use them in this talk.
Blog post: https://developer.okta.com/blog/2019/02/13/angular-schematics
GitHub repo: https://github.com/oktadeveloper/schematics
Javascript and first-class citizenry: require.js & node.js
Javascript on web pages is ubiquitous and its problems are legendary. Javascript, seen as a second-class code citizen, is usually hacked together even by seasoned developers. New libraries (jQuery, prototype, backbone, knockout, underscore) and runtime tools (firebug, jasmine) look like they solve many problems - and they do. But they still leave poorly written code as just that. One key problem is that all javascript code lives globally and this results in poorly managed, tested and delivered code.
In this session, I will illustrate that we can treat javascript as a first-class citizen using with require.js and node.js: it can be modular, encapsulated and easily unit tested and added to continuous integration cycle. The dependencies between javascript modules can also be managed and packaged just like in C# and Java. In the end, we can resolve many javascript difficulties at compile time rather than waiting until runtime.
Lessons from helping developers integrate 1,000 APIs with ZapierFokke Zandbergen
Talk at a Nordic APIs webcast (LiveCast) on API Usability & Developer Experience
https://nordicapis.com/sessions/lessons-helping-developers-integrate-1000-apis-zapier/
Cross-platform Native App ontwikkeling met AppceleratorFokke Zandbergen
Lezing voor de SIG Apps en de Regio Den Haag van Ngi-NGN op De Haagse Hogeschool over cross-platform native app ontwikkeling met Appcelerator Titanium en Alloy.
An introduction the big picture of the Appcelerator Platform and the architecture and principles behind Titanium and Alloy to get you started. Created and presented by myself and Pierre van de Velde at meetup.com/TitaniumNL.
Introduction Cross-Platform Native App development with JavaScript using Appcelerator Titanium and Alloy for an internal developer forum of a European multinational.
Presentation on August 19 for Hamburg Titanium (DE) about Appcelerator's Open Source Software and Platform. The difference, how to start and why consider switching.
I gave this talk at Connect.JS in Atlanta, October 17-18 20014
See: http://fokkezb.nl/tag/ticonnect
Though Studio has improved a lot, the CLI has as well - allowing you to use your own favourite editor instead and even increase your productivity by using some community-developed tools like TiShadow, gitTio, Grunt, TiCons, Ti-Inspector, STSS and many more.
A short presentation I have at the TitaniumNL.org meetup on October 1st, 2014. It goes through what you need to get your development environment and apps ready for iOS 8 and iPhone 6 and 6 Plus.
Overview of the Alloy MVC framework for Appcelerator's Titanium platform, delivered at the Dutch Mobile Conference 2013 in Amsterdam from June 6 - 8th.
14. Titanium Studio Shortcuts
Be lazy
⇧⌘C New controller + view + style
⇧⌘Y New widget
⇧⌘M New model
⇧⌘I New migration
More: http://go.fokkezb.nl/ttshortcuts
15. Installing Alloy from Github
Living on the edge
sudo npm install -g git://github.com/appcelerator/alloy.git
Rollback to stable
sudo npm uninstall -g alloy
sudo npm install -g alloy
*Drop "sudo" on Windows
16. Hacking Alloy
Have the last word
/app/assets/alloy.js
/app/assets/alloy/backbone.js
/app/assets/alloy/underscore.js
/app/assets/alloy/sync/sql.js
/app/themes/myTheme/assets/alloy/CFG.js
• The SQLite sync adapter is not compatible with Backbone.js 1.x
• Make sure you sync config.json changes to your CFG.js files
Alloy.isTablet = function() {
return (Ti.Platform.displayCaps.platformWidth > 800);
}
app/alloy.js
.. or go wild and overwrite
Extend via app.js
17. WPATH
Which Path | | Widget Path
function WPATH(s) {
var index = s.lastIndexOf("/");
var path = -1 === index
? "myWidget/" + s
: s.substring(0, index) + "/myWidget/" + s.substring(index + 1);
return path;
}
app/widgets/myWidget/assets/foo.png
Resources/myWidget/foo.png
app/widgets/myWidget/assets/one/two/three.png
Resources/one/two/MyWidget/three.png
Examples
• Assets and libs the same
• Place stuff in platform specific iphone, android folders
• Place stuff in the images folder
18. Custom sync adapters
.. for widget models
/app/widgets/my.widget/assets/alloy/sync/myAdapter.js
Drop your sync adapter in:
exports.definition = {
config: {
adapter: {
type: 'my.widget/myAdapter'
}
}
};
Use in widget models:
/Resources/alloy/sync/my.widget/myAdapter.js
It will end up in:
/app/widgets/my.widget/models/myModel.js
19. All-in-one widget
Know the 'name'
Bundle a group of widgets as one
<Widget src="myMenus" /><!-- default: widget(.js) -->
<Widget src="myMenus" name="slide" />
<Widget src="myMenus" name="drawer" />
*Available since Alloy 1.1
Specific controller per context
<Widget src="myList" /><!-- default: widget(.js) -->
<Widget src="myList" name="tab" />
<Widget src="myList" name="window" />
<Widget src="myList" name="view" />
Alloy.createWidget("nl.fokkezb.tweetsView", "widget", {
id: "myWidget",
foo: "bar"
});
20. Styleable & Themable widgets
The . and # game
Set ID and class of view components to same, globally unique value
<Alloy>
! <Label id="myWidgetLabel" class="myWidgetLabel" />
</Alloy>
Apply defaults styles using classes
".myWidgetLabel": {
! color: 'red'
}
"#myWidgetLabel": {
! color: 'blue'
}
Instruct developers using your widget to override using IDs
More: http://go.fokkezb.nl/alloytssprio (widgets missing)
26. Reset your app.tss
Clean slate
'Label[platform=android]': { // Instead of platform-dependent
color: '#000' }
'Window': { // More common-sense default vs 'transparent'
backgroundColor: '#fff' }
'Window[platform=android]': { // Never lightweight (deprecated)
modal: false }
'TextField': { // More common-sense default vs un-styled
borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED }
'ImageView[platform=ios]': { // Never show ugly temporary image
preventDefaultImage: true }
}
Discussion: http://go.fokkezb.nl/alloyreset
27. @import TSS
Or the power of alloy.jmk
@import "reset.tss";
"Window": {
! backgroundColor: 'black'
}
Source: http://go.fokkezb.nl/alloyimport
task("pre:compile", function(event, logger) {
! explodeImport(event, logger);
});
task("post:compile", function(event, logger) {
! implodeImport(event, logger);
});
app/alloy.jmk
28. Jade 2 XML
Be lazy like David Bankier
<Alloy>
<Window class="container">
<Label id="label" onClick="doClick">Hello, World</Label>
</Window>
</Alloy>
Blog: http://go.fokkezb.nl/alloyjade
Alloy
Window.container
Label#label(onClick="doClick") Hello, World
app/views/index.jade
• No need for closing tags
• Advanced templating
• Advanced conditions
29. XML 2 TSS
Be lazy like David Bankier
<Alloy>
<Window class="container">
<Label id="label" onClick="doClick">Hello, World</Label>
</Window>
</Alloy>
Source: https://github.com/dbankier/xml2tss
".container": {}
".#label": {}
xml2tss index.xml ../styles/index.tss
• Will update existing TSS
• Integrated in Alloy 1.2
30. Less TSS
Be lazy like David Bankier
@primColor: "blue";
.bg (@color) {
backgroundColor: $color
}
".container" : {
.bg($primColor);
}
Source: https://github.com/dbankier/ltss
".container" : {
backgroundColor: "blue"
}
ltss index.ltss index.tss
31. Detecting Alloy
Using Alloy libs without Alloy
var isAlloy = (typeof ENV_TEST === 'boolean');
• Alloy constants like OS_IOS don't exist at run-time
• They are replaced by TRUE|FALSE during compile
• Code blocks that will never execute are removed
• In Vanilla Titanium they will be undefined
var Alloy = require('alloy');
Alloy.infect && Alloy.infect(this);
myLib.js or app.js (3.1+)
Source: http://go.fokkezb.nl/alloydetect
32. Wrapping Ti.UI.* components
.. using widgets or CommonJS modules
<ImageView image="http://my.im/age.png" />
Before
<Widget src="ImageView" image="http://my.im/age.png" />
After:
<ImageView module="My.UI" image="http://my.im/age.png" />
Coming in Alloy 1.2:
• Pass on or intercept common parameters, functions and events
/app/widgets/ImageView/controllers/widget.js
require('My.UI').createImageView()
<ImageView ns="require('My.UI')" image="http://my.im/age.png" />
Simple, durable workaround:
33. Wrapping Ti.UI.* components
Passing arguments
exports.setText = function (text) { $.myVew.text = text.toUpperCase(); }
_.each(['text', 'color'], function (pr) {
var cam = pr[0].toUpperCase() + pr.substring(1);
var get = exports['get' + cam] || ($['get' + cam] = function () { retur $.myVew[pr]; });
var set = exports['set' + cam] || ($['set' + cam] = function (val) { $.myVew[pr] = val; });
Object.defineProperty($, pr, {
get: get,
set: set
});
});
exports.applyProperties = function(properties) {
properties = _.omit(properties, 'id', '__parentSymbol', '__itemTemplate', '$model');
var apply = {};
_.each(properties, function (val, pr) {
! var fn = 'set' + pr[0].toUpperCase() + pr.substring(1);
! exports[fn] ? exports[fn](val) : (apply[pr] = val);
});
_.isEmpty(apply) || $.myVew.applyProperties(apply);
}
exports.applyProperties(arguments[0]);
• Looping _.keys($.myVew) would only give set properties
• Add set/get on $ as so applyProperties can't find them
• Define properties on $ as that's the final object
• Filter Alloy properties as (__parentSymbol would give memory leak)
34. Wrapping Ti.UI.* components
Passing functions
_.each(['resume', 'pause', 'hide'], function (fn) {
if (!exports[fn]) {
! exports[fn] = $.myVew[fn];
}
});
• Remember we already did setters and getters for properties