Future of Ruby on the Web

Post on 08-May-2015

220 views 1 download

description

Aaron Patterson's talk from Future Insights Live 2014 in Las Vegas: "The Web is constantly changing, and technology is constantly evolving. With these ideas in mind, let's look at what Ruby and Rails not only can do, but must do in order to push technology forward on the web." Miss his talk? Join us at a future show: www.futureofwebapps.com. Sign up for our newsletter at futureinsights.com and get 15% off your next conference.

transcript

Spoiler Alert!

Dumbledore Dies!

Welcome to Future Insights Live!!!

Las Vegas

"The Vegas"

I am not always right.

Future Insights Live

Future Insights Live

Future!Insights Live

Future!Insights Live

Future!Insights!Live

Hopefully?

Future ofRubyRailsWeb

I am not a Fortune Teller

Agile Web Developer

Progress Is a Line

Start At The Beginning

Aaron Patterson

@tenderlove

Ruby Core Team

Rails Core Team

OMG!

INTERNET!

POINTS

FULL STACK ENGINEER

AT&T, AT&T logo and all AT&T related marks are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies.

☑AdequateEverything. Adequately.

Two Cats

Gorbachev!Puff Puff!

Thunderhorse

Sea-Tac!Facebook!YouTube

Extremely Shy

Constant Failyour

WWFMD?

Language Background

School: C / C++

First OSS in 2002

Lingua::EN::NameCase

SomethingFactoryFactoryFactoryBuilder

SomethingFactoryFactoryFactoryBuilder

No OSS in Java.

I’ve never written Java for fun.

My Birthday, in 2003

Lesson: Use someone else’s credit card

I was hooked.

High Productivity

Startup World

OSS Increased

Corporate World

AT&T, AT&T logo and all AT&T related marks are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies.

High Productivity

Employment as OSS Developer

Expense Reporting

Expense Report Infinite Loop

ConcurPDF

"5 pages sent to …"

PDF

Concur

Fax

Email

PDF

High Productivity?

I love my job.

People Seek High Productivity

Back to Future Predictions…

Future of Programming Languages

Machine Code

[ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimal 000000 00001 00010 00110 00000 100000 binary

Assembly Language .arch msp430g2553 .cpu 430 .mpy none ! .section .init9,"ax",@progbits .p2align 1,0 .global main .type main,@function /*********************** * Function `main' ***********************/ main: mov.b #0, &__P1OUT mov.b &__CALBC1_1MHZ, &__BCSCTL1 mov.b &__CALDCO_1MHZ, &__DCOCTL bis.b #1, &__P1DIR bis.b #1, &__P1OUT mov #1, r15 .Lfe1: .size main,.Lfe1-main ;; End of function

Freed us from binary

Cvoid loop(void) { green(); dht * fridge = malloc(sizeof(dht)); read = dhtRead(fridge); ! if(DHT_OK == read) { WRITE_TEMP(fridge->rhIntegral, fridge->rhDecimal, fridge->tIntegral, fridge->tDecimal); } else { red(); WRITE_TEMP(99, 99, 99, 99); } delaySeconds(2); }

Freed us from the instructions

Javapublic IRubyObject start_document(ThreadContext context, IRubyObject version, IRubyObject tags, IRubyObject implicit) { boolean implicitBool = implicit.isTrue(); Map<String, String> tagsMap = null; ! RubyArray tagsAry = tags.convertToArray(); if (tagsAry.size() > 0) { tagsMap = new HashMap<String, String>(tagsAry.size()); for (int i = 0; i < tagsAry.size(); i++) { RubyArray tagsTuple = tagsAry.eltInternal(i).convertToArray(); if (tagsTuple.size() != 2) { throw context.runtime.newRuntimeError("tags tuple must be of length 2"); } IRubyObject key = tagsTuple.eltInternal(0); IRubyObject value = tagsTuple.eltInternal(1); tagsMap.put(key.asJavaString(), value.asJavaString()); } } ! return this; }

Freed us from memory management.

Rubydef start_document(context, version, tags, implicit) tagsMap = nil; ! tagsAry = Array(tags) if (tagsAry.size > 0) tagsMap = {} tagsAry.size.times do |i| tagsTuple = tagsAry.eltInternal(i) if (tagsTuple.size != 2) raise RuntimeError, "tags tuple must be of length 2" end key = tagsTuple.eltInternal(0); value = tagsTuple.eltInternal(1); tagsMap[key] = value end end end

Freed us from Types

We’ve eliminated

• Specific machine code • Particular CPU instructions • Memory management • Object Types

What’s next?

Concurrency

CPUs aren’t getting faster

We’re getting more cores

Today

lock.synchronize { # Manipulate some data }

Today

pool = ThreadPool.new NUMBER_OF_CPU

Thinking about this is a waste of time!

Dealing with concurrency is CODE NOISE

The computer should solve these problems FOR US!

Distributed Systems

Concurrency tomorrow will be like memory management today

Future of Ruby

Ruby will ADAPT.

By STEALING

Clojure, Haskell, Go

GC was invented in 1959.

GC was invented in 1959.

1959!!!!!

Java’s First Release: 1995

WTF?

We can do better than 36 years!

Ruby Will Adapt Ruby Will Change

Future of Rails

Freedom of Rails

Where does a model go?

How does it talk to the controller?

What are our table names?

What is the primary key name?

Convention over Configuration

High Productivity

The Web is Changing

Computations are changing

Ember.js / AngularJS

btw, Ember.js is way better

I have no idea what I’m talking about.

The pendulum is done.

Why is multi-core different than distributed computing?

Why is distributed computing different than client/server?

Practical Terms

Better API support

High Productivity

Future of Web

World’s Most Advanced Animated Gif Delivery System

Future of the Web IS HERE!

Future Favors High Productivity

Higher Productivity for Languages

Higher Productivity for Frameworks

Higher Productivity for The Web

Thank You!!💛💙💜💚❤️💗💛💙💜💚❤️💗