$30 off During Our Annual Pro Sale. View Details »

Modernizing Winston for node@4

Modernizing Winston for node@4

An Exercise in Open Source, streams, ES6, and keeping code alive. Presented at Node.js Interactive 2015 in Portland, OR.

Charlie Robbins

December 08, 2015
Tweet

More Decks by Charlie Robbins

Other Decks in Programming

Transcript

  1. WINSTON
    FOR NODE@4
    MODERNIZING
    An EXercise in Open source, STREAMS, ES6, And
    KEEPING CODE ALIVE.

    View Slide

  2. WHY, HELLO THERE

    View Slide

  3. @INDEXZERO
    WELCOME TO OPEN SOURCE. I WILL BE YOUR GUIDE

    View Slide

  4. @INDEXZERO GITHUB TWITTER
    WELCOME TO OPEN SOURCE. I WILL BE YOUR GUIDE
    DIR. UX PLATFORM @
    GODADDY

    View Slide

  5. View Slide

  6. Now. LET ME TELL YOU
    A STORY...

    View Slide

  7. View Slide


  8. A Long Time AGo In A GalaXy Far
    Far Away...

    View Slide


  9. A Long Time AGo In A GalaXy Far
    Far Away...

    View Slide


  10. A Long Time AGo In A GalaXy Far
    Far Away...
    OPEN SOURCE
    IT’S A STORY
    Actually
    ABOUT

    View Slide

  11. View Slide

  12. MID 2010
    NODEJITSU
    STARTED In
    NODE.JS WAS LIKE
    AND BACK THEN

    View Slide

  13. View Slide

  14. THE
    WILD WEST

    View Slide

  15. THE
    WILD WEST

    BUT REALLY...

    View Slide

  16. THE
    MODULES
    WE NEEDED Were like...

    View Slide


  17. 404 not found

    View Slide


  18. 404 not found

    SO, like many others
    WE WROTE THEM
    OURSELVES

    View Slide

  19. THE BEST FEELINGS
    Ever. For Serious.
    CERTAINLY ONE OF

    View Slide

  20. View Slide

  21. BUT
    BACK TO OUR STORY...

    REMEMBER THAT

    View Slide

  22. THIS IS 2010

    View Slide

  23. THIS IS 2010
    ACTUALLY
    JANUARY, 17
    2011

    View Slide

  24. BEFORE THE FIRST ONE OF THESE

    View Slide

  25. NO STREAMS API

    View Slide

  26. ES5 IS STILL NEW

    View Slide

  27. LIMITED CODE COVERAGE

    View Slide

  28. BUT IT WAS STILL
    A PRETTY GOOD API

    View Slide

  29. View Slide

  30. ABOUT
    2.6 MILLION
    MONTHLY DOWNLOADS
    BUNYAN: ~0.56M

    View Slide

  31. WINSTON
    ECOSYSTEM
    700 PACKAGES
    OVER
    IN THE

    View Slide

  32. View Slide

  33. THERE WERE
    SOME
    DARK TIMES

    View Slide

  34. OVER 200+ Open ISSUES

    View Slide

  35. OVER 200+ Open ISSUES
    USER NEGATIVITY

    View Slide

  36. OVER 200+ Open ISSUES
    USER NEGATIVITY

    IS THIS
    PROJECT
    ABANDONDED?

    View Slide

  37. View Slide

  38. FROM YOUR USERS
    TOTALLY SUCKS
    TAKING ABUSE
    “ ”
    It turns out
    JUST

    View Slide

  39. YOUR MODULE'S BAD
    AND YOU SHOULD FEEL BAD

    View Slide

  40. YOUR MODULE'S BAD
    AND YOU SHOULD FEEL BAD

    TRUST ME ....
    … I DID

    View Slide

  41. 40#&'6$,*/(/*$&
    Please: BE
    #$%@ing
    NICE

    View Slide

  42. CULTIVATE PERSONAL INTERACTION

    View Slide

  43. CULTIVATE PERSONAL INTERACTION
    WHEN IN DOUBT, FOLLow-up Privately
    THINK OF IT AS DISCRETION.
    ... Or Having some Class.

    View Slide

  44. View Slide

  45. ONCE AGAIN
    BACK TO OUR STORY...

    AFTER CAREFUL THOUGHT, MEDITATION,
    AND THE IOJS RELEASE I DECIDED...

    View Slide


  46. OPEN SOURCE
    IT CAN BE DONE!

    View Slide

  47. You Are Probably Thinking
    BUT HOW?

    View Slide

  48. SCIENCE CAT SAYS
    “ ”
    GOOD QUESTION

    View Slide

  49. View Slide

  50. WRITING CODE
    IS
    THE FIRST ANSWER
    ABSOLUTELY NOT

    View Slide

  51. DO HAVE
    A LONG TERM
    PROJECT GOAL

    View Slide

  52. WILLING TO HELP
    FIND ANYONE
    WHO IS
    WEEKLY MEETINGS
    AND START

    View Slide


  53. YES! WE WANT YOU!
    TO JOIN WINSTON

    View Slide


  54. TRIAGE ALL THE THINGS!

    View Slide


  55. ISSUES, FIRST.

    THEN PULL REQUESTS.

    TRIAGE ALL THE THINGS!

    View Slide

  56. View Slide

  57. HIGH LEVEL PROBLEMS
    FIND
    THE
    TRIAGE INTO BUCKETS
    AND

    View Slide

  58. HIGH LEVEL PROBLEMS
    FIND
    THE
    TRIAGE INTO BUCKETS
    AND
    NEXT-MINOR
    NEXT-MAJOR
    NEXT-PATCH

    View Slide


  59. REVERSED LEVELS

    View Slide

  60. COMMON.LOG

    View Slide

  61. COMMON.LOG

    View Slide

  62. COMMON.LOG

    View Slide

  63. COMMON.LOG

    View Slide

  64. View Slide

  65. HERE BE
    DRAGONS

    View Slide

  66. View Slide

  67. THEN YOU
    CAN LAND YOUR PRS

    View Slide

  68. THEN YOU
    CAN LAND YOUR PRS

    DO NOT REFACTOR THE THINGS YOU HATE
    YET. For SeRIOUS.

    View Slide

  69. View Slide

  70. BUT I HATE THE THINGS
    I HATE ABOUT
    my Code!

    View Slide

  71. PATIENCE

    View Slide

  72. LANDING OLD PRS IS HARD
    IT GETS EVEN HARDER AS
    MORE OF THE CODE CHANGES

    View Slide

  73. View Slide

  74. JUST ASK THEM TO RESUBMIT

    View Slide

  75. THERE IS USUALLY
    ONLY ONE CHANCE PER PR.
    DEVELOPERS VERY RARELY COMMIT

    View Slide

  76. #&'6$,*/($0/4*45&/5

    View Slide

  77. #&'6$,*/($0/4*45&/5
    THIS PERSON
    DO NOT BE
    PLEASE

    View Slide

  78. IT IS EASIER TO MERGE
    RATHER THAN REFACTOR
    THEN REFACTOR
    THEN MERGE

    View Slide

  79. View Slide

  80. NOW YOU CAN
    FOCUS
    PROJECT GOAL
    ON THAT LONG TERM

    View Slide

  81. [email protected]
    SMALL BREAKS

    View Slide

  82. [email protected]
    BIGGER BREAKS

    View Slide

  83. [email protected]

    BREAK TO NEW APIS

    View Slide

  84. STREAMS
    ALL THE THINGS

    View Slide

  85. MOCHA
    ALL THE TESTS

    View Slide

  86. INTRODUCE
    FORMATS

    View Slide

  87. INTRODUCE
    FORMATS

    View Slide

  88. INTRODUCE
    FORMATS

    View Slide

  89. INTRODUCE
    FORMATS

    View Slide

  90. INTRODUCE
    FORMATS

    View Slide

  91. INTRODUCE
    FORMATS

    View Slide

  92. View Slide

  93. FORMATS
    YOUR OWN
    DEFINE

    View Slide

  94. SHARED
    FUNCTIONALITY

    View Slide

  95. SHARED
    FUNCTIONALITY

    require(‘winston-transport’);

    View Slide

  96. SHARED
    FUNCTIONALITY

    require(‘winston-transport’);

    require(‘abstract-winston-transport’);

    View Slide

  97. BACKWARDS
    COMPATABILITY

    View Slide

  98. BACKWARDS
    COMPATABILITY

    require(‘winston-compat’);

    View Slide

  99. BACKWARDS
    COMPATABILITY

    require(‘winston-compat’);
    common.log

    View Slide

  100. BACKWARDS
    COMPATABILITY

    require(‘winston-compat’);
    common.log
    winston.transports.Transport

    View Slide

  101. BACKWARDS
    COMPATABILITY

    require(‘winston-compat’);
    common.log
    winston.transports.Transport
    Old vows-based test macros

    View Slide

  102. require(‘logmark’)

    View Slide

  103. require(‘logmark’)
    30% FASTER
    THAN WINSTON@2

    View Slide

  104. require(‘logmark’)
    30% FASTER
    THAN WINSTON@2
    50% FASTER THAN BUNYAN

    View Slide

  105. IN BETA THIS WEEK
    {github, twitter}.com/indexzero
    MAY THE SOURCE BE WITH YOU

    View Slide


  106. YES! WE WANT YOU!
    TO JOIN WINSTON
    SPECIAL THANKS TO

    Alberto Pose & Jarrett Cruger

    View Slide