Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Social Coding Contract

The Social Coding Contract

Justin Searls

November 19, 2014
Tweet

More Decks by Justin Searls

Other Decks in Programming

Transcript

  1. $%

  2. &'(

  3. !)

  4. ,'(

  5. -

  6. ideology, n. \ ˌˌ i-dē- ˈ ä-lƧ-jē\ "They do not

    know it, but they are doing it" - Karl Marx
  7. Open source fans are a bunch of hippies so I

    figured I'd start with a Marx quote
  8. Build a small, but non-trivial, Rails app. An empty app

    has ~50 gem dependencies; yours will have 75-100. Go away for six months. Come back and update all of your dependencies. Your app no longer works.
  9. It's easy to start a Jekyll blog, though. Easy to

    install sass. Easy to generate a Rails app. Always easy right now, never in a year.
  10. We never say "and Rails depends on thor >= 0.18.1,

    < 2.0" We don't even notice that!
  11. Bundler could not find compatible versions for gem "thor": In

    Gemfile: ajax-cat (= 2.1.0) ruby depends on thor (~> 0.15.2) ruby rails (= 4.1.4) ruby depends on railties (= 4.1.4) ruby depends on thor (0.18.1) Even though 272 gems can no longer be installed!
  12. What if Bundler told us more? ... Using unicorn 4.8.3

    Using zurb-foundation 4.3.2 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
  13. What if Bundler told us more? ... Using unicorn 4.8.3

    Using zurb-foundation 4.3.2 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. Your bundle has 10 direct dependencies and 43 transitive dependencies.
  14. What if Bundler told us more? ... Using unicorn 4.8.3

    Using zurb-foundation 4.3.2 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. Your bundle has 10 direct dependencies and 43 transitive dependencies. Your gems' version specifiers preclude the installation of 1300 gems.
  15. What if Bundler told us more? ... Using unicorn 4.8.3

    Using zurb-foundation 4.3.2 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. Your bundle has 10 direct dependencies and 43 transitive dependencies. Your gems' version specifiers preclude the installation of 1300 gems. `bundle update` would be unable to update 5 gems to the latest version.
  16. C

  17. C B

  18. Global variables everywhere extern int posixly_correct; extern int line_number, line_number_base;

    extern int subshell_environment, indirection_level; extern int build_version, patch_level; extern int expanding_redir; extern int last_command_exit_value; extern char *dist_version, *release_status; extern char *shell_name; extern char *primary_prompt, *secondary_prompt; extern char *current_host_name; extern sh_builtin_func_t *this_shell_builtin; extern SHELL_VAR *this_shell_function; extern char *the_printed_command_except_trap; extern char *this_command_name; extern char *command_execution_string; extern time_t shell_start_time; extern int assigning_in_environment; extern int executing_builtin; extern int funcnest_max;
  19. The vulnerable function for (string_index = 0; string = env[string_index++];

    ) { char_index = 0; name = string; while ((c = *string++) && c != '=') ; if (string[-1] == '=') char_index = string - name - 1; /* If there are weird things in the environment, like `=xxx' or a string without an `=', just skip them. */ if (char_index == 0) continue; /* ASSERT(name[char_index] == '=') */ name[char_index] = '\0'; /* Now, name = env variable name, string = env variable value, and char_index == strlen (name) */ temp_var = (SHELL_VAR *)NULL; /* If exported function, define it now. Don't import functions from the environment in privileged mode. */ if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string, 4)) {
  20. "The solution is not...proprietary software—the solution is to put energy

    and resources into auditing and improving free programs." - Free Software Foundation
  21. We are no more than: a user @name an avatar

    some emoji 78 text on a screen
  22. DEPTH OF UNDERSTANDING High level web app Low level plane

    control Needs to know how browsers work
  23. DEPTH OF UNDERSTANDING High level web app Low level plane

    control Needs to know how browsers work Needs to know how planes work
  24. DEPTH OF UNDERSTANDING High level web app Low level plane

    control Needs to know how browsers work Needs to know how planes work
  25. DEPTH OF UNDERSTANDING High level web app Low level plane

    control Needs to know how browsers work Needs to know how planes work
  26. DEPTH OF UNDERSTANDING High level web app Low level plane

    control Needs to know how browsers work Needs to know how planes work ⚠️
  27. DEPTH OF UNDERSTANDING High level web app Low level plane

    control Needs to know how browsers work Needs to know how planes work
  28. !:;

  29. !<=

  30. %>

  31. &'(

  32. Attribution: Lock designed by Sam Smith from the thenounproject.com Shower

    Curtain designed by Rohan Gupta from the thenounproject.com Campfire designed by VALÈRE DAYAN from the thenounproject.com Stand designed by Evan Travelstead from the thenounproject.com Shopping Cart designed by Renee Ramsey-Passmore from the thenounproject.com Milk designed by Jeff Seevers from the thenounproject.com Milk designed by NAS from the thenounproject.com Breakfast designed by Konrad Michalik from the thenounproject.com Tablet designed by Pham Thi Dieu Linh from the thenounproject.com Can designed by Blaise Sewell from the thenounproject.com Door designed by Olaus Linn from the thenounproject.com Door designed by Sebastian Langer from the thenounproject.com Box designed by David Waschbüsch from the thenounproject.com Tomato designed by Nana Faisal from the thenounproject.com Keyboard designed by misirlou from the thenounproject.com Computer designed by Edward Boatman from the thenounproject.com Hammer designed by John Caserta from the thenounproject.com Star designed by Edward Boatman from the thenounproject.com Puzzle Piece designed by Roberto Chiaveri from the thenounproject.com Mail designed by Anas Ramadan from the thenounproject.com Text designed by Christopher Holm-Hansen from the thenounproject.com Phone designed by Tom Walsh from the thenounproject.com Video designed by useiconic.com from the thenounproject.com Cocktail designed by Okan Benn from the thenounproject.com Laptop designed by Olivier Guin from the thenounproject.com Laptop designed by Michael Loupos from the thenounproject.com Airplane designed by Andrew Fortnum from the thenounproject.com Coupon designed by Scott Lewis from the thenounproject.com Database designed by Shmidt Sergey from the thenounproject.com Microchip designed by Martin Vanco from the thenounproject.com Speedometer designed by Olly Banham from the thenounproject.com