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

El diablo está en los detalles

El diablo está en los detalles

Sergio Arbeo

October 19, 2013
Tweet

More Decks by Sergio Arbeo

Other Decks in Programming

Transcript

  1. @serabe - CodeCantor
    Sergio Arbeo
    El diablo está en los detalles

    View Slide

  2. @serabe - CodeCantor
    Sergio Arbeo
    No soy Jean Valjean

    View Slide

  3. @serabe - CodeCantor
    Sergio Arbeo
    Para Javier Ramírez
    ¡Me cago en los muertos
    de Lisp, Modula-2 y
    Smalltalk!*
    *Y en el API de teowaki

    View Slide

  4. Programadores
    @serabe - CodeCantor
    Sergio Arbeo
    ¿Qué somos?

    View Slide

  5. @serabe - CodeCantor
    Sergio Arbeo
    Lenguaje natural

    View Slide

  6. @serabe - CodeCantor
    Sergio Arbeo
    Pensamiento programador

    View Slide

  7. @serabe - CodeCantor
    Sergio Arbeo
    Consecuencias de errores de diseño

    View Slide

  8. @serabe - CodeCantor
    Sergio Arbeo
    El pasado te persigue
    Peras
    Manzanas

    View Slide

  9. @serabe - CodeCantor
    Sergio Arbeo
    CoffeeScript
    Regexing cup of
    CoffeeScript

    View Slide

  10. @serabe - CodeCantor
    Sergio Arbeo
    El código original

    View Slide

  11. @serabe - CodeCantor
    Sergio Arbeo
    En JavaScript
    Chrome 32
    Firefox 24
    Safari 6.0.5
    Opera 12.16

    View Slide

  12. @serabe - CodeCantor
    Sergio Arbeo
    En JavaScript (NodeJS)

    View Slide

  13. @serabe - CodeCantor
    Sergio Arbeo
    En CoffeeScript

    View Slide

  14. @serabe - CodeCantor
    Sergio Arbeo
    En CoffeeScript

    View Slide

  15. @serabe - CodeCantor
    Sergio Arbeo
    CoffeeScript
    src/lexer.coffee

    View Slide

  16. La oveja negra de
    jQuery
    @serabe - CodeCantor
    Sergio Arbeo
    jQuery

    View Slide

  17. 1. $.each
    2. .each
    @serabe - CodeCantor
    Sergio Arbeo
    each y map
    1. $.map
    2. .map

    View Slide

  18. 1. $.each
    2. .each
    @serabe - CodeCantor
    Sergio Arbeo
    each y map
    1. $.map
    2. .map

    View Slide

  19. 1. $.each
    2. .each
    @serabe - CodeCantor
    Sergio Arbeo
    each y map
    1. $.map
    2. .map

    View Slide

  20. @serabe - CodeCantor
    Sergio Arbeo
    each

    View Slide

  21. @serabe - CodeCantor
    Sergio Arbeo
    each: primer argumento

    View Slide

  22. @serabe - CodeCantor
    Sergio Arbeo
    each: segundo argumento

    View Slide

  23. @serabe - CodeCantor
    Sergio Arbeo
    each: segundo argumento
    More importantly, the callback
    is fired in the context of the
    current DOM element, so the
    keyword this refers to the
    element.

    View Slide

  24. @serabe - CodeCantor
    Sergio Arbeo
    each: segundo argumento

    View Slide

  25. @serabe - CodeCantor
    Sergio Arbeo
    map

    View Slide

  26. @serabe - CodeCantor
    Sergio Arbeo
    map: primer argumento

    View Slide

  27. @serabe - CodeCantor
    Sergio Arbeo
    map: segundo argumento

    View Slide

  28. @serabe - CodeCantor
    Sergio Arbeo
    map

    View Slide

  29. @serabe - CodeCantor
    Sergio Arbeo
    map: primer argumento

    View Slide

  30. @serabe - CodeCantor
    Sergio Arbeo
    map: segundo argumento

    View Slide

  31. @serabe - CodeCantor
    Sergio Arbeo
    this en .map
    Within the callback function,
    this refers to the current
    DOM element for each
    iteration.

    View Slide

  32. @serabe - CodeCantor
    Sergio Arbeo
    this en $.map
    Within the function, this
    refers to the global (window)
    object.

    View Slide

  33. @serabe - CodeCantor
    Sergio Arbeo
    .each Vs. .map

    View Slide

  34. @serabe - CodeCantor
    Sergio Arbeo
    .each Vs. .map

    View Slide

  35. Horrible descubrimiento
    @serabe - CodeCantor
    Sergio Arbeo
    OMG

    View Slide

  36. @serabe - CodeCantor
    Sergio Arbeo
    Horrible descubrimiento
    1 byte = 8 bits
    1 kilobyte = 1024 bytes
    1 megabyte = 1024 kilobytes
    1 gigabyte = 1024 megabytes
    1 terabyte = 1024 gigabytes
    1 petabyte = 1024 terabytes

    View Slide

  37. @serabe - CodeCantor
    Sergio Arbeo
    Horrible descubrimiento
    1 byte = 8 bits
    1 kilobyte = 1000 bytes
    1 megabyte = 1000 kilobytes
    1 gigabyte = 1000 megabytes
    1 terabyte = 1000 gigabytes
    1 petabyte = 1000 terabytes

    View Slide

  38. @serabe - CodeCantor
    Sergio Arbeo
    Horrible descubrimiento
    1 byte = 8 bits
    1 kibibyte = 1024 bytes
    1 mebibyte = 1024 kibibytes
    1 gibibyte = 1024 mebibytes
    1 tebibyte = 1024 gibibytes
    1 pebibyte = 1024 tebibytes
    Desde 1998

    View Slide

  39. Ruby es muy
    suyo
    @serabe - CodeCantor
    Sergio Arbeo
    Ruby

    View Slide

  40. @serabe - CodeCantor
    Sergio Arbeo
    Una clase cualquiera

    View Slide

  41. @serabe - CodeCantor
    Sergio Arbeo
    Una comparación cualquiera
    false

    View Slide

  42. @serabe - CodeCantor
    Sergio Arbeo
    Otra comparación cualquiera
    false

    View Slide

  43. @serabe - CodeCantor
    Sergio Arbeo
    Una comparación no tan cualquiera
    true

    View Slide

  44. @serabe - CodeCantor
    Sergio Arbeo
    Una comparación no tan cualquiera
    true
    ¿ ?

    View Slide

  45. @serabe - CodeCantor
    Sergio Arbeo
    Una comparación no tan cualquiera
    true
    ¿ ?
    ¿ ?

    View Slide

  46. @serabe - CodeCantor
    Sergio Arbeo
    Array#==

    View Slide

  47. @serabe - CodeCantor
    Sergio Arbeo
    Array#==

    View Slide

  48. @serabe - CodeCantor
    Sergio Arbeo
    Funciona
    true
    false

    View Slide

  49. @serabe - CodeCantor
    Sergio Arbeo
    Array#==

    View Slide

  50. @serabe - CodeCantor
    Sergio Arbeo
    Array#==

    View Slide

  51. @serabe - CodeCantor
    Sergio Arbeo
    arr_eq2 funciona como Array#==
    Ambos true

    View Slide

  52. Aunque el funcionamiento viola el
    Principio de la Mínima Sorpresa, la
    documentación es correcta.
    @serabe - CodeCantor
    Sergio Arbeo
    Misterio resuelto

    View Slide

  53. Aunque el funcionamiento viola el
    Principio de la Mínima Sorpresa, la
    documentación es correcta.
    @serabe - CodeCantor
    Sergio Arbeo
    Misterio resuelto
    O no.

    View Slide

  54. @serabe - CodeCantor
    Sergio Arbeo
    Otra clase

    View Slide

  55. @serabe - CodeCantor
    Sergio Arbeo
    Otra comparación
    false

    View Slide

  56. @serabe - CodeCantor
    Sergio Arbeo
    Comprobando
    false
    true

    View Slide

  57. @serabe - CodeCantor
    Sergio Arbeo
    ¿Qué mierdas pasa?

    View Slide

  58. @serabe - CodeCantor
    Sergio Arbeo
    ¿Qué mierdas pasa?
    P*to sinsentido

    View Slide

  59. @serabe - CodeCantor
    Sergio Arbeo
    Rubinius Array#== (I)
    kernel/common/array.rb

    View Slide

  60. @serabe - CodeCantor
    Sergio Arbeo
    Rubinius Array#== (II)
    kernel/common/array.rb

    View Slide

  61. @serabe - CodeCantor
    Sergio Arbeo
    Rubinius Array#== (III)
    kernel/common/array.rb

    View Slide

  62. @serabe - CodeCantor
    Sergio Arbeo
    Rubinius Array#== (III)
    kernel/common/array.rb

    View Slide

  63. A pesar de estos detalles*,
    @serabe - CodeCantor
    Sergio Arbeo
    Pero me gusta
    Me encanta Ruby
    *Y no me mentes Enumerator::Lazy

    View Slide

  64. @serabe - CodeCantor
    Sergio Arbeo
    Pero me gusta
    Me gusta jQuery

    View Slide

  65. @serabe - CodeCantor
    Sergio Arbeo
    Pero me gusta
    No puedo vivir
    sin CoffeeScript

    View Slide

  66. Gracias
    @serabe - CodeCantor
    Sergio Arbeo
    Snape mata a Dumbledore
    @serabe
    /Serabe

    View Slide