Slide 1

Slide 1 text

from floor to ruby From floor to ruby making

Slide 2

Slide 2 text

kieran graham @kierangraham github.com/kierangraham Tuesday, 31 January 12

Slide 3

Slide 3 text

I work at airpos we

Slide 4

Slide 4 text

WHY HAS IT WORKED? Why has it worked FOr us? http://www.flickr.com/photos/squirr3l/6049132262/sizes/l/in/photostream/ Tuesday, 31 January 12

Slide 5

Slide 5 text

PHP in

Slide 6

Slide 6 text

We just didn’t want to waste time anymore. Tuesday, 31 January 12

Slide 7

Slide 7 text

We wasted time fixing other code. deploying. testing. migrating data. building basic tools. Tuesday, 31 January 12

Slide 8

Slide 8 text

Some PHP projects have virtually zero concept of these basic ideas. Tuesday, 31 January 12

Slide 9

Slide 9 text

PHP isn’t so much a language as a random collection of arbitrary stuff. -

Slide 10

Slide 10 text

4,916 global functions in the PHP core Tuesday, 31 January 12

Slide 11

Slide 11 text

abs() acos() acosh() addcslashes() addslashes() aggregate() aggregate_info() aggregate_methods() aggregate_methods_by_list() aggregate_methods_by_regexp() aggregate_properties() aggregate_properties_by_list() aggregate_properties_by_regexp() aggregation_info() apache_child_terminate() apache_get_modules() apache_get_version() apache_getenv() apache_lookup_uri() apache_note() apache_request_headers() apache_reset_timeout() apache_response_headers() apache_setenv() apc_add() apc_cache_info() apc_clear_cache() apc_compile_file() apc_define_constants() apc_delete() apc_fetch() apc_load_constants() apc_sma_info() apc_store() apd_breakpoint() apd_callstack() apd_clunk() apd_continue() apd_croak() apd_dump_function_table() apd_dump_persistent_resources() apd_dump_regular_resources() apd_echo() apd_get_active_symbols() apd_set_pprof_trace() apd_set_session() apd_set_session_trace() apd_set_socket_session_trace() array() array_change_key_case() array_chunk() array_combine() array_count_values() array_diff() array_diff_assoc() array_diff_key() array_diff_uassoc() array_diff_ukey() array_fill() array_fill_keys() array_filter() array_flip() array_intersect() array_intersect_assoc() array_intersect_key() array_intersect_uassoc() array_intersect_ukey() array_key_exists() array_keys() array_map() array_merge() array_merge_recursive() array_multisort() array_pad() array_pop() array_product() array_push() array_rand() array_reduce() array_reverse() array_search() array_shift() array_slice() array_splice() array_sum() array_udiff() array_udiff_assoc() array_udiff_uassoc() array_uintersect() array_uintersect_assoc() array_uintersect_uassoc() array_unique() array_unshift() array_values() array_walk() array_walk_recursive() ArrayIterator::current() ArrayIterator::key() ArrayIterator::next() Tuesday, 31 January 12

Slide 12

Slide 12 text

abs() acos() acosh() addcslashes() addslashes() aggregate() aggregate_info() aggregate_methods() aggregate_methods_by_list() aggregate_methods_by_regexp() aggregate_properties() aggregate_properties_by_list() aggregate_properties_by_regexp() aggregation_info() apache_child_terminate() apache_get_modules() apache_get_version() apache_getenv() apache_lookup_uri() apache_note() apache_request_headers() apache_reset_timeout() apache_response_headers() apache_setenv() apc_add() apc_cache_info() apc_clear_cache() apc_compile_file() apc_define_constants() apc_delete() apc_fetch() apc_load_constants() apc_sma_info() apc_store() apd_breakpoint() apd_callstack() apd_clunk() apd_continue() apd_croak() apd_dump_function_table() apd_dump_persistent_resources() apd_dump_regular_resources() apd_echo() apd_get_active_symbols() apd_set_pprof_trace() apd_set_session() apd_set_session_trace() apd_set_socket_session_trace() array() array_change_key_case() array_chunk() array_combine() array_count_values() array_diff() array_diff_assoc() array_diff_key() array_diff_uassoc() array_diff_ukey() array_fill() array_fill_keys() array_filter() array_flip() array_intersect() array_intersect_assoc() array_intersect_key() array_intersect_uassoc() array_intersect_ukey() array_key_exists() array_keys() array_map() array_merge() array_merge_recursive() array_multisort() array_pad() array_pop() array_product() array_push() array_rand() array_reduce() array_reverse() array_search() array_shift() array_slice() array_splice() array_sum() array_udiff() array_udiff_assoc() array_udiff_uassoc() array_uintersect() array_uintersect_assoc() array_uintersect_uassoc() array_unique() array_unshift() array_values() array_walk() array_walk_recursive() ArrayIterator::current() ArrayIterator::key() ArrayIterator::next() $wtf; Tuesday, 31 January 12

Slide 13

Slide 13 text

PHP is very confused. Tuesday, 31 January 12

Slide 14

Slide 14 text

if (true == “false”){ echo “true is false”; } // If you run this you will actually see // “true is false”. I swear to god... // Tested on PHP 5.3.6 For Example Tuesday, 31 January 12

Slide 15

Slide 15 text

pear and pecl are simply bullshit. Tuesday, 31 January 12

Slide 16

Slide 16 text

Secretly... Some of our best PHP tools were written in Ruby. Tuesday, 31 January 12

Slide 17

Slide 17 text

ruby and

Slide 18

Slide 18 text

Ruby is well designed. Born from a labour of love. Tuesday, 31 January 12

Slide 19

Slide 19 text

Ruby was designed specifically for programmer happiness. Smile.

Slide 20

Slide 20 text

Happy coders are productive coders. Tuesday, 31 January 12

Slide 21

Slide 21 text

We could better structure our app by not worrying about our tools. Tuesday, 31 January 12

Slide 22

Slide 22 text

Our app became lean and focused as a result. Tuesday, 31 January 12

Slide 23

Slide 23 text

gem  “rails” gem  “airpos” Let’s talk about gems. Tuesday, 31 January 12

Slide 24

Slide 24 text

So is the hype justified? 0 25 50 75 100 2009 2010 2011 2012 Tuesday, 31 January 12

Slide 25

Slide 25 text

http://www.weebls-stuff.com/songs/magical+trevor/ Tuesday, 31 January 12

Slide 26

Slide 26 text

RAILS? rails? http://www.flickr.com/photos/library_of_congress/2179203080/sizes/o/in/photostream/ Tuesday, 31 January 12

Slide 27

Slide 27 text

it’s not what you might think Tuesday, 31 January 12

Slide 28

Slide 28 text

There’s a Ruby way to do things http://www.flickr.com/photos/gsfc/6760135001/sizes/l/in/photostream/ Tuesday, 31 January 12

Slide 29

Slide 29 text

Quality Tuesday, 31 January 12

Slide 30

Slide 30 text

Quality reusability Tuesday, 31 January 12

Slide 31

Slide 31 text

Testing Quality reusability Tuesday, 31 January 12

Slide 32

Slide 32 text

Community Testing Quality reusability Tuesday, 31 January 12

Slide 33

Slide 33 text

giving a shit Tuesday, 31 January 12

Slide 34

Slide 34 text

is a deal BIG giving a shit Tuesday, 31 January 12

Slide 35

Slide 35 text

Wait, caring? http://www.flickr.com/photos/andynor/3582120797/sizes/o/in/photostream/ Tuesday, 31 January 12

Slide 36

Slide 36 text

you guys care lol,

Slide 37

Slide 37 text

Love what you do ruby

Slide 38

Slide 38 text

want to switch? and

Slide 39

Slide 39 text

we can help we’ve

Slide 40

Slide 40 text

we’re hiring come

Slide 41

Slide 41 text

one small example then

Slide 42

Slide 42 text

Example time class Kieran def self.drink!(what, how_many) # implementation... :) end end Kieran.drink! :beer, :all_of_them Tuesday, 31 January 12

Slide 43

Slide 43 text

thanks :) Tuesday, 31 January 12