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 full-size slide

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

    View full-size 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 full-size slide

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

    View full-size slide

  5. @serabe - CodeCantor
    Sergio Arbeo
    Lenguaje natural

    View full-size slide

  6. @serabe - CodeCantor
    Sergio Arbeo
    Pensamiento programador

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  13. @serabe - CodeCantor
    Sergio Arbeo
    En CoffeeScript

    View full-size slide

  14. @serabe - CodeCantor
    Sergio Arbeo
    En CoffeeScript

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  20. @serabe - CodeCantor
    Sergio Arbeo
    each

    View full-size slide

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

    View full-size slide

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

    View full-size 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 full-size slide

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

    View full-size slide

  25. @serabe - CodeCantor
    Sergio Arbeo
    map

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  28. @serabe - CodeCantor
    Sergio Arbeo
    map

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  35. Horrible descubrimiento
    @serabe - CodeCantor
    Sergio Arbeo
    OMG

    View full-size 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 full-size 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 full-size 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 full-size slide

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

    View full-size slide

  40. @serabe - CodeCantor
    Sergio Arbeo
    Una clase cualquiera

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  48. @serabe - CodeCantor
    Sergio Arbeo
    Funciona
    true
    false

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size 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 full-size 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 full-size slide

  54. @serabe - CodeCantor
    Sergio Arbeo
    Otra clase

    View full-size slide

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

    View full-size slide

  56. @serabe - CodeCantor
    Sergio Arbeo
    Comprobando
    false
    true

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide