This document discusses Scala.js, which allows developers to write Scala code and compile it to JavaScript. Some key points:
- Scala.js provides the full Scala language experience and full interoperability with JavaScript. The generated JavaScript code is as fast as handwritten JS.
- It demonstrates Scala code that performs a Twitter API request and parses the response - but this is actually compiled to JavaScript, not run natively on the JVM.
- Compared to other languages that compile to JS like TypeScript, ClojureScript and Dart, Scala.js offers strong static types, powerful functional programming capabilities, and good tooling support in IDEs like Eclipse and IntelliJ
KSUG
ScalaJS: Yet another what… ?
It’s tempting to write your whole web application in one and only programming language, especially when this is yours language-of-choice. That’s the reason why Node.js got so much traction in the last years - JavaScript is the part of the web stack which will stay there, whether we like it or not. In the world of languages compiled/transpiled to it, there is ScalaJS that is trying to keep its head above water and gain some popularity. Let’s take a look and try to evaluate if it’s worth our time to try it.
London Cassandra Meetup 10/23: Apache Cassandra at British Gas Connected Home...DataStax Academy
Speakers
Jim Anning - Head of Data & Analytics, BGCH
Josep Casals - Lead Data Engineer, BGCH
This presentation will be a mix of strategic overview of platform + technical detail as to how this has been achieved.
Jim will cover off Connected Homes, what they do and where the data platform fits in.
Josep will cover the more technical aspects.
Modernizing Infrastructures for Fast Data with Spark, Kafka, Cassandra, React...Lightbend
The Big Data industry emerged in response to the unprecedented sizes of data sets collected by Internet companies and the particular needs they had to store and use that data.
Today, the need to process that data more quickly is morphing Big Data architectures into Fast Data architectures. This session discusses the forces driving this trend and the most popular tools that have emerged to address particular design challenges:
Spark - For sophisticated processing of data streams, as well as traditional batch-mode processing.
Kafka - For durable and scalable ingestion and distribution of data streams.
Cassandra - For scalable, flexible persistence.
Reactive Platform: Lagom, Akka, and Play - For integration of other components and building microservices.
Mesos - For cluster resource management.
---
About the presenter:
Dean Wampler, Ph.D. is the Architect for Big Data Products and Services and a member of the office of the CTO at Lightbend. He is designing the product strategy and technical architecture for Lightbend's Spark on Mesos products and emerging streaming tools built around Spark and Lightbend’s ConductR and Akka products. Dean has written books on Scala, Functional Programming, and Hive for O'Reilly. He speaks at and co-organizes many industry conferences. He also organizes several Chicago-area user groups and contributes to many open-source projects, including Apache Spark. Dean has a Ph.D. in Physics from the University of Washington.
KSUG
ScalaJS: Yet another what… ?
It’s tempting to write your whole web application in one and only programming language, especially when this is yours language-of-choice. That’s the reason why Node.js got so much traction in the last years - JavaScript is the part of the web stack which will stay there, whether we like it or not. In the world of languages compiled/transpiled to it, there is ScalaJS that is trying to keep its head above water and gain some popularity. Let’s take a look and try to evaluate if it’s worth our time to try it.
London Cassandra Meetup 10/23: Apache Cassandra at British Gas Connected Home...DataStax Academy
Speakers
Jim Anning - Head of Data & Analytics, BGCH
Josep Casals - Lead Data Engineer, BGCH
This presentation will be a mix of strategic overview of platform + technical detail as to how this has been achieved.
Jim will cover off Connected Homes, what they do and where the data platform fits in.
Josep will cover the more technical aspects.
Modernizing Infrastructures for Fast Data with Spark, Kafka, Cassandra, React...Lightbend
The Big Data industry emerged in response to the unprecedented sizes of data sets collected by Internet companies and the particular needs they had to store and use that data.
Today, the need to process that data more quickly is morphing Big Data architectures into Fast Data architectures. This session discusses the forces driving this trend and the most popular tools that have emerged to address particular design challenges:
Spark - For sophisticated processing of data streams, as well as traditional batch-mode processing.
Kafka - For durable and scalable ingestion and distribution of data streams.
Cassandra - For scalable, flexible persistence.
Reactive Platform: Lagom, Akka, and Play - For integration of other components and building microservices.
Mesos - For cluster resource management.
---
About the presenter:
Dean Wampler, Ph.D. is the Architect for Big Data Products and Services and a member of the office of the CTO at Lightbend. He is designing the product strategy and technical architecture for Lightbend's Spark on Mesos products and emerging streaming tools built around Spark and Lightbend’s ConductR and Akka products. Dean has written books on Scala, Functional Programming, and Hive for O'Reilly. He speaks at and co-organizes many industry conferences. He also organizes several Chicago-area user groups and contributes to many open-source projects, including Apache Spark. Dean has a Ph.D. in Physics from the University of Washington.
Short lightning talk about the HBase plugin for Akka Persistence and how it's how key design was specifically tuned for increasing numeric sequential idenfitiers, so that the cluster can be utilised properly.
https://github.com/ktoso/akka-persistence-hbase
Apache Spark is already a proven leader as a heavy-weight distributed processing framework. But how does one migrate an 8-years-old, single-server, MySQL-based legacy system to such new shiny frameworks? How do you accurately preserve the behavior of a system consuming Terabytes of data every day, hiding numerous undocumented implicit gotchas and changing constantly, while shifting to brand new development paradigms? In this talk we present Kenshoo’s attempt at this challenge, where we migrated a legacy aggregation system to Spark. Our solutions include heavy usage of metrics and graphite for analyzing production data; “local-mode” client enabling reuse of legacy tests suits; data validations using side-by-side execution; and maximum reuse of code through refactoring and composition. Some of these solutions use Spark-specific characteristics and features.
Akka persistence == event sourcing in 30 minutesKonrad Malawski
Akka 2.3 introduces akka-persistence, a wonderful way of implementing event-sourced applications. Let's give it a shot and see how DDD and Akka are a match made in heaven :-)
Oracle Application Express (APEX) is shipped with several JavaScript libraries, jQuery being the best known one of them. And on top of these libraries the APEX Development Team created their own. You probably used a couple of these API's already, like $s, $v etc.
But there are way more and some of them are extremely useful. But first you have to be aware they exists. And secondly you have to know how to use the properly.
This session will cover the most valuable JavaScript API's with some real world examples.
Most developers stick to the standard $s and $v functions - even without knowing there is also a $v2 and $s can have more parameters.
The focus will be on the namespaced apex API's, like apex.server.process and apex.event.trigger.
Akka Streams (0.7) talk for the Tokyo Scala User Group, hosted by Dwango.
Akka streams are an reactive streams implementation which allows for asynchronous back-pressured processing of data in complext pipelines. This talk aims to highlight the details about how reactive streams work as well as some of the ideas behind akka streams.
Short lightning talk about the HBase plugin for Akka Persistence and how it's how key design was specifically tuned for increasing numeric sequential idenfitiers, so that the cluster can be utilised properly.
https://github.com/ktoso/akka-persistence-hbase
Apache Spark is already a proven leader as a heavy-weight distributed processing framework. But how does one migrate an 8-years-old, single-server, MySQL-based legacy system to such new shiny frameworks? How do you accurately preserve the behavior of a system consuming Terabytes of data every day, hiding numerous undocumented implicit gotchas and changing constantly, while shifting to brand new development paradigms? In this talk we present Kenshoo’s attempt at this challenge, where we migrated a legacy aggregation system to Spark. Our solutions include heavy usage of metrics and graphite for analyzing production data; “local-mode” client enabling reuse of legacy tests suits; data validations using side-by-side execution; and maximum reuse of code through refactoring and composition. Some of these solutions use Spark-specific characteristics and features.
Akka persistence == event sourcing in 30 minutesKonrad Malawski
Akka 2.3 introduces akka-persistence, a wonderful way of implementing event-sourced applications. Let's give it a shot and see how DDD and Akka are a match made in heaven :-)
Oracle Application Express (APEX) is shipped with several JavaScript libraries, jQuery being the best known one of them. And on top of these libraries the APEX Development Team created their own. You probably used a couple of these API's already, like $s, $v etc.
But there are way more and some of them are extremely useful. But first you have to be aware they exists. And secondly you have to know how to use the properly.
This session will cover the most valuable JavaScript API's with some real world examples.
Most developers stick to the standard $s and $v functions - even without knowing there is also a $v2 and $s can have more parameters.
The focus will be on the namespaced apex API's, like apex.server.process and apex.event.trigger.
Akka Streams (0.7) talk for the Tokyo Scala User Group, hosted by Dwango.
Akka streams are an reactive streams implementation which allows for asynchronous back-pressured processing of data in complext pipelines. This talk aims to highlight the details about how reactive streams work as well as some of the ideas behind akka streams.
Sample JavaScript Code Laurence Svekis
JavaScript Closure
A closure in JavaScript is a function that has access to the variables in its parent scope, even after the parent function has completed execution. This allows for data to be “closed over” or remembered by the inner function, even after the outer function has returned.
Here, the makeCounter function returns an inner function that has access to the count variable declared in its parent scope, and can “remember” the current count value even after the makeCounter function has completed execution. Each time the inner function is called, it returns the current value of count and increments it by 1.
JavaScript Closure Advanced
In this example, the makeAdder function takes in a single argument x and returns an inner function that takes in a second argument y. The inner function has access to the x variable declared in the parent scope and uses it to add x and y together and return the result.
We can see here that the outer function makeAdder has been executed twice and it returns two different inner functions which are assigned to different variables add5 and add10 and these inner functions are able to remember their respective parent scope values of x.
This presentation covers how I wrote a little 39 line Node program and adapted it into an 88 line Go program. Serves as a "show me the code" example of getting started with Go.
Code is available at: https://github.com/agileleague/httpwebsockettest
The Node server in this project is hosted on Heroku at: http://httpwebsocketspeedtest.herokuapp.com/
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
Introduction to Hadoop Map Reduce, Pig, Hive and Ambari technologies.
Workshop deck prepared and presented on September 5th 2015 by Radosław Stankiewicz.
During that the day participants had also the possibility to go through prepared tutorials and test their analysis on real cluster.
Short (45 min) version of my 'Pragmatic Real-World Scala' talk. Discussing patterns and idioms discovered during 1.5 years of building a production system for finance; portfolio management and simulation.
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
Navigating the Metaverse: A Journey into Virtual Evolution"Donna Lenk
Join us for an exploration of the Metaverse's evolution, where innovation meets imagination. Discover new dimensions of virtual events, engage with thought-provoking discussions, and witness the transformative power of digital realms."
How to Position Your Globus Data Portal for Success Ten Good PracticesGlobus
Science gateways allow science and engineering communities to access shared data, software, computing services, and instruments. Science gateways have gained a lot of traction in the last twenty years, as evidenced by projects such as the Science Gateways Community Institute (SGCI) and the Center of Excellence on Science Gateways (SGX3) in the US, The Australian Research Data Commons (ARDC) and its platforms in Australia, and the projects around Virtual Research Environments in Europe. A few mature frameworks have evolved with their different strengths and foci and have been taken up by a larger community such as the Globus Data Portal, Hubzero, Tapis, and Galaxy. However, even when gateways are built on successful frameworks, they continue to face the challenges of ongoing maintenance costs and how to meet the ever-expanding needs of the community they serve with enhanced features. It is not uncommon that gateways with compelling use cases are nonetheless unable to get past the prototype phase and become a full production service, or if they do, they don't survive more than a couple of years. While there is no guaranteed pathway to success, it seems likely that for any gateway there is a need for a strong community and/or solid funding streams to create and sustain its success. With over twenty years of examples to draw from, this presentation goes into detail for ten factors common to successful and enduring gateways that effectively serve as best practices for any new or developing gateway.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
Globus Connect Server Deep Dive - GlobusWorld 2024Globus
We explore the Globus Connect Server (GCS) architecture and experiment with advanced configuration options and use cases. This content is targeted at system administrators who are familiar with GCS and currently operate—or are planning to operate—broader deployments at their institution.
Enterprise Resource Planning System includes various modules that reduce any business's workload. Additionally, it organizes the workflows, which drives towards enhancing productivity. Here are a detailed explanation of the ERP modules. Going through the points will help you understand how the software is changing the work dynamics.
To know more details here: https://blogs.nyggs.com/nyggs/enterprise-resource-planning-erp-system-modules/
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
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!
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
Scala.js: Next generation front end development in Scala
1. Scala.js
Next-gen front end development in Scala
by Otto Chrons, 2015-11-04 @ HelsinkiJS
@ochrons - otto@chrons.me
2. What does this JavaScript do?
var xhr = new XMLHttpRequest()
xhr.open("GET",
"https://api.twitter.com/1.1/search/" +
"tweets.json?q=%23scalajs"
)
xhr.onload = (e: Event) => {
if (xhr.status == 200) {
var r = JSON.parse(xhr.responseText)
$("#tweets").html(parseTweets(r))
}
}
xhr.send()
3. Is it actually JavaScript? Look again!
var xhr = new XMLHttpRequest()
xhr.open("GET",
"https://api.twitter.com/1.1/search/" +
"tweets.json?q=%23scalajs"
)
xhr.onload = (e: Event) => {
if (xhr.status == 200) {
var r = JSON.parse(xhr.responseText)
$("#tweets").html(parseTweets(r))
}
}
xhr.send()
It's strongly
typed Scala,
really!
4. What is Scala.js?
Write Scala, compile to JavaScript, run in browser
Full support of Scala language
Full JavaScript interoperability
As fast code as hand-written JavaScript
Generated JS code is "small enough"
Fast edit-compile-run cycle
7. Everyone wants a better JavaScript
Safer
More modular, expressive, reusable code
One language across client/server
More tool-able & better IDE support
Fewer warts
8. Why Scala.js?
Safety Expressive Interoperability Toolable
ES6/7 Still un-typed Some new
syntax
Native Still JavaScript
TypeScript Types! Some new
syntax
Native Visual Studio
IntelliJ
ClojureScript Still un-typed Very powerful
language
Complicated Similar to
JavaScript
Dart Types! 50% JS,
50% Java
Complicated Eclipse
IntelliJ
Scala.js Very strong
types!
Very powerful
language
Very good Eclipse
IntelliJ
9. Why now?
Front end evolution
Stone age
aka
JQuery era
Server-rendered HTML pages
Simple JS animations
Ajax calls to server
Direct DOM manipulation
Medieval times
Rise of the Single Page App
HTML template driven
REST APIs
Angular, Backbone, Ember, ...
Renaissance
JS centric complex apps
DOM is code-generated
GraphQL, Falcor
Rise of transpilers: TS, Babel
React, Angular 2, ...
10. Next generation
Modern times
Rise of new languages: Scala, Clojure, Dart, TS
Complex client-server systems with shared code
JS reduced to a compile target and platform
Cross-platform: mobile and web
12. What do JS developers get from Scala.js?
Everything in ES6/7 (=>, destructuring, string-interpolation, ...)
Everything in TypeScript (types, generics, ...)
Everything in Immutable.js (immutable collections)
+
Great language, extensive standard library, functional
programming, access to all JS libs and peace of mind 😌
13. How to get started?
www.scala-js.org
new website at
http://tiny.cc/sjs-new
Gitter room
https://gitter.im/scala-js/scala-js
Editor's Notes
Hello everyone, my name is Otto and I'm going to talk about how to build next gen front end applications in Scala using Scala.js
I'm a cofounder and CTO at Microtask and we've been using Scala on the server side for about 3 years and Scala.js on the front end for a little over half a year. Before that we had both GWT (java) and Angular JS apps.
Let's start by taking a short poll. How many of you use JavaScript at work, hands up! Ok, and how many know Scala or have done something with Scala? How about using Scala at a work project? Ok, not so many.
To get your brains activated, please look at the following JS code and tell me what it does. Should be quite familiar to any experienced JS developer :)
Got it yet? Yes, it fetches some data from Twitter and uses JQuery to render the parsed tweets in an element identified by "tweets".
Did you notice something strange about it? Maybe take another look. There seems to be a type definition on the function parameter, so maybe this is actually TypeScript? Well, it actually could be, but in reality it's just normal strongly typed Scala code. I bet most of you could read Scala.js code quite easily!
Now, what is Scala.js?
It's a Scala to JavaScript compiler that allows you to write normal Scala code, compile it to JS and run in a browser (or in Node.js if you want)
It supports the full range of Scala language features, which is no small feat since Scala is quite an extensive multi-paradigm language.
It also gives you full interoperability with all existing JavaScript code base, so you can use libraries like React and JQuery from your Scala code very easily.
The compiler produces highly optimized Javascript, comparable in performance to hand-written JS, sometimes even a bit faster!
Scala.js runs the produced code through Google Closure Compiler further doing DCE and minifaction, resulting in reasonably small JS file. Typically a few hundred kilobytes, including all the Scala libraries you use.
Seeing the effects of your changes is fast, not quite as fast as with some JS transpilers, but fast enough to not be annoying. we're talking about 2-5 seconds here. And you don't need to do this so often as IDE and the compiler help so much
Let's do a quick live demo to see what working with Scala.js is really like!
....
As you saw, the code is nice and readable with great support from the IDE.
There are literally hundreds of X to JavaScript compilers and transpilers out there because JavaScript is such a great platform for running code on all kinds of devices. But why do things like CoffeeScript, Dart and TypeScript exist?
As great as JavaScript is as a platform, it lacks severly as a programming language.
We all want better safety, to protect us from our own mistakes.
Having Modularity is great and a highly experssive language gets more things done in a shorter time.
Having one language across client and server, being able to reuse code and developers, which is a great benefit.
When applications get more complex, the tooling and IDE support has to be there so you don't spend half your time googling around.
And of course fewer warts that bite you when you least expect them.
So, why Scala.js? Even though ES6 brought a lot of improvements to the JS language, it's still very unsafe and lacks in the tooling department. The IDEs try their best, but they simply cannot do much when it comes to vanilla JS code.
TypeScript is addressing many issues in JS and has now support from the big players including of course Microsoft, but also Google in Angular2. But it's still Javascript :)
ClojureScript is based on Clojure, a functional language much like Lisp, making it very powerful. But as it lacks static typing, it's also hard for IDEs. Interoperability with existing Javascript is quite complicated.
Dart from Google is a new language inspired by JavaScript and Java (whether that's good or bad) and has a good type system. But its interoperability is not so great.
Scala.js being Scala of course has very strong type system and has superb IDE support as we saw in the live demo. Core focus of Scala.js has been interoperability with JS which is where it really shines compared to many alternatives. Even though the Scala language is sometimes seen as complicated, it's really easy to get started and then move on to more complex things as you get familiar with the language.
To understand why we are seeing such a boom in JS alternatives right now, we have to take a look at the evolution of front end development.
It all starts in the stone age where JQuery is the king-of-the-hill when it comes to JS programming. Web pages are rendered server side and JS is really only used for simple animations and for making UX more bearable. More advanced sites are using Ajax to make live updates by doing direct DOM manipulation.
At some point the applications started becoming more complex, so smart guys started thinking other ways of doing web apps and the Single Page App was born. Here we see a lot more JS being used, driven by HTML templates. REST APIs become the norm for communication and we get a lot of frameworks like Backbone, Ember and Angular.
But as application complixity keeps growing, devs start seeing the problems with the HTML template driven approach so a new breed of architectures like React emerge. This time JavaScript is on the center stage, doing all the work from DOM generation to server communication. The REST model gives way to more flexible communication methods like GraphQL and Falcor. Alternatives to vanilla JS start to gain traction and the whole transpiler industry is born with the likes of TypeScript and Babel etc.
But we don't want to get stuck with renaissance, what about the next generation?
As complexity and application size grows, managing and refactoring large JS projects becomes quite challenging. New languages like Scala and Clojure enter the world of front end development. I would actually say that none of you in the audience is coding vanilla JS in five years time. With nodejs the front end language got traction on the server side, but now solid server side languages are moving on the front end to facilitate sharing code in complex applications.
Over time Javascript is reduced to a compiler target, much like x86 assembly language, but continues to provide a great platform for applications.
We're now seeing the first attempts at doing real cross-platform development on mobile and web, not just by running a browser view in a mobile app, but using native controls. You can actually now write your code in Scala, compile it to Javascript and run it natively under iOS or Android using React Native.
Let's quickly look at a bit more realistic example of doing client-server in Scala.js and React
So, you've been a happy puppy with JavaScript, why would you consider learning a new language and using Scala.js?
First of all you get literally every language feature in ES6 and ES7, including the fat arrow, destructuring, string-interpolation, async/await etc.
You also get everything in TypeScript like decent types, generics, etc.
Not to mention stuff like Immutable.js, which is an immutable collection library for JavaScript. Guess what those collection algorithms are based on? Scala and Clojure collection libraries!
So, you get everything JS has to offer, plus a great language, with which programming is really fun, a truly extensive standard library, access to real functional programming and associated FP libraries and but you still can use all the JS libs you know and love. Finally you get a peace of mind; when you make that critical edit at 2am to fix a bug in production, it's just going to work ok, not blow up as an Uncaught typeerror: undefined is not a function.
If you got interested, head to the links shown on the slide and start learning. We are about to launch a new version of the Scala.js site, so please check out the lower link as well that will direct you to the beta site.
Any questions?