Upload
sarah-allen
View
1.524
Download
2
Embed Size (px)
Citation preview
COMMUNICATION IS A TECHNICAL SKILL
Sarah Allen@ultrasaurus
MAKING SOFTWARE FUN
MAKING SOFTWARE FUN
EXAMPLESSOCIAL CHANGE BUSINESS OPEN SOURCE
COMMUNICATION PATTERNS
1. BIG VISION 2. CONCRETE STEP 3. THE PATH
SOCIAL CHANGEBRIDGE FOUNDRY
Bridge Foundry Workshops
DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
DIVERSE TEAM CHILDCARE FOOD INSTALLFEST DAY OF CODING Bridge Foundry Workshops
MOVING THE NEEDLE: HOW SF RUBY GOT TO 18% — SARAH MEI
BUSINESSFIREBASE
"HELP DEVELOPERS BUILD BETTER APPS AND GROW SUCCESSFUL BUSINESSES"James Tamplin
FIFTEEN MINUTESDEVELOPER PRODUCTIVITY
YOUR PRODUCT IS NOT JUST YOUR CODE
DOCUMENTATION, WEBSITE, BLOG GITHUB STACK OVERFLOW SOCIAL MEDIA CONFERENCE TALKS, MEETUPS, HACKATHONS,
MAKE PEOPLE FEEL POWERFUL
Judy Tuan presenting Firebase app: Mobile Graffiti
OPEN SOURCERACK
CHRISTIAN NEUKIRCHEN
HTTP://CHNEUKIRCHEN.ORG/BLOG/ARCHIVE/2007/02/INTRODUCING-RACK.HTML
8 minutes on
Rackbased on a presentation byDan Webb ([email protected])@danwronghttp://slidesha.re/dan_on_rack
A Convention
If you have a Ruby object...
that has a call method which takes one argument...
app.call(env)
and that method returns an array with 3 elements...
[200, { 'Content-Type' => 'text/plain' }, 'Hello World!']
then you can connect it to any web server that supports Rack
require 'thin' Rack::Handler::Thin.run(app, :Port => 4000)
and you've got yourself a web application
That's it.
For Example...
app = Proc.new do |env| [200, { 'Content-Type' => 'text/plain' }, 'Hello World!'] end
require 'rubygems' require 'thin'Rack::Handler::Thin.run(app, :Port => 4000)
class HelloWorld def initialize(name) @name = name end
def call(env) [200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"] end end
require 'rubygems' require 'rack'Rack::Handler::Mongrel.run(HelloWorld.new("Dan"), :Port => 4000)
def call(env)
{ "SERVER_NAME"=>"localhost", "HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en- GB; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4", "PATH_INFO"=>"/", "SCRIPT_NAME"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "HTTP_ACCEPT_LANGUAGE"=>"en-gb,en;q=0.5", "HTTP_HOST"=>"localhost:4000", "REMOTE_ADDR"=>"127.0.0.1", "HTTP_KEEP_ALIVE"=>"300", "REQUEST_PATH"=>"/", "SERVER_SOFTWARE"=>"thin 0.8.2 codename Double Margarita", "HTTP_ACCEPT_CHARSET"=>"ISO-8859-1,utf-8;q=0.7,*;q=0.7", "HTTP_VERSION"=>"HTTP/1.1", "REQUEST_URI"=>"/", "SERVER_PORT"=>"4000", "QUERY_STRING"=>"", "GATEWAY_INTERFACE"=>"CGI/1.2", "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "HTTP_CONNECTION"=>"keep-alive", "REQUEST_METHOD"=>"GET"}
[200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"]
Status Code
[200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"]
HTTP Headers
[200, { 'Content-Type' => 'text/plain' }, "Hello #{@name}!"]
Response Body
Response body can be any object that respond_to?(:each)
file = File.new('myfile.xml') [200, { 'Content-Type' => 'application/xml' }, file]
For Example...
class StreamingFile def initialize(file) @file = file end
def length File.size(@file) end
def last_modified File.mtime(@file).rfc822 end
def each File.open(@file, "rb") do |file| while part = file.read(8192) yield part end File.delete(@file) end end
[200, { 'Content-Type' => 'audio/mp3', 'Content-Length' => file.length.to_s}, file]
Common interface
• Passenger
• Mongrel
• CGI
• SCGI
• FastCGI
• Thin
• Ebb
• Fuzed
• Webrick
• Litespeed
Write once, serve however...
Michael Basial: Light Bulbhttps://www.flickr.com/photos/basial/3010044632/
WHAT WE DOCOMMUNICATION
ADOPTION OF LANGUAGES WITH NEW POWERS
ERLANG CLOJURE SCALA GO RUST SWIFT ELIXIR ELM
FUNCTIONAL
ELIXIR ERLANG VM (2012) ELM JAVASCRIPT (2012) SCALA JAVA VM (2003)
CLOJURE JAVAVM (2007)
SWIFT iOS/Mac/Linux (2014)
HASKELL - 1990 ERLANG - 1986 ML - 1973 LISP - 1958
C - 1972 COBOL - 1959 FORTRAN - 1956
GO (2009)
JAVA - 1995 C++ - 1983OBJECTIVE C - 1984
SMALLTALK - 1972
JAVASCRIPT - 1995 RUBY - 1995
IMPERATIVEOBJECT-ORIENTED
RUST (2010)
LEARN A NEW LANGUAGE
LEARN A NEW LANGUAGE
MAKE A NEW LANGUAGE
CODE IS COMMUNICATION
WHAT WILL YOU SAY?
PHOTO CREDITS
▸ 13) Isaiah van Hunen: Face (original 1)https://www.flickr.com/photos/isaiah115/7301506118 https://creativecommons.org/licenses/by-sa/2.0/
▸ 14) photo by Lee Lundrigan
▸ 32) https://firebase.googleblog.com/2013/05/firebase-at-angelhack-sf-2013.html
▸ 64) Michael Basial: Light Bulb https://www.flickr.com/photos/basial/3010044632/
▸ 66) Wizard: http://mortal-affairs.wikia.com/wiki/Wizards