Browse Source

Merge branch 'draft/com-licenca' into previews

master
Julio Biason 4 years ago
parent
commit
222e4b5f50
  1. 1
      .gitignore
  2. BIN
      _images/40-years-processor-trend.png
  3. 328
      _images/ActivityPub-logo.svg
  4. BIN
      _images/ActivityPub-tutorial-image.png
  5. 9
      _images/MIT_logo.svg
  6. BIN
      _images/Sorry-bout-that.gif
  7. BIN
      _images/activitypub-logo.png
  8. BIN
      _images/agpl-logo.png
  9. BIN
      _images/all-eggs-broken.jpeg
  10. BIN
      _images/all-eggs.jpeg
  11. BIN
      _images/apache-license-2.0.png
  12. BIN
      _images/apache-license.png
  13. BIN
      _images/back-to-the-future.jpeg
  14. BIN
      _images/bar.png
  15. BIN
      _images/bsd.png
  16. BIN
      _images/builds-character.png
  17. BIN
      _images/chrysalis.jpeg
  18. BIN
      _images/community.jpg
  19. BIN
      _images/consuela.jpeg
  20. BIN
      _images/copyright.jpeg
  21. BIN
      _images/datastream.png
  22. BIN
      _images/download-apple-google.png
  23. BIN
      _images/email.png
  24. BIN
      _images/fear.jpeg
  25. BIN
      _images/federation.png
  26. BIN
      _images/flink-cluster1.png
  27. BIN
      _images/flink-cluster2.png
  28. BIN
      _images/flink-cluster3.png
  29. BIN
      _images/flink1.png
  30. BIN
      _images/flink2.png
  31. BIN
      _images/flink3.png
  32. BIN
      _images/github-lgpl.png
  33. BIN
      _images/gpl-logo.png
  34. BIN
      _images/guido-no-bdfl.png
  35. BIN
      _images/hacktoberfest.png
  36. BIN
      _images/internet.jpeg
  37. BIN
      _images/iplenix.png
  38. BIN
      _images/ipython-notebook.png
  39. BIN
      _images/ipython.png
  40. BIN
      _images/isso-nao-prova-nada.png
  41. BIN
      _images/jobmanager-1.png
  42. BIN
      _images/jupyter.jpeg
  43. BIN
      _images/lgpl-logo.png
  44. BIN
      _images/motorbike.jpg
  45. BIN
      _images/nope.gif
  46. BIN
      _images/oogway.jpeg
  47. BIN
      _images/past.jpg
  48. BIN
      _images/patrick-license.jpeg
  49. BIN
      _images/plan_visualizer.png
  50. BIN
      _images/potato-farming-300x225.jpg
  51. BIN
      _images/present.jpg
  52. BIN
      _images/processor-speed.png
  53. BIN
      _images/public-domain.png
  54. BIN
      _images/pycaxias.png
  55. BIN
      _images/python-datascience.png
  56. BIN
      _images/python-usage.png
  57. BIN
      _images/python15.png
  58. BIN
      _images/python27-clock.png
  59. BIN
      _images/rewind.png
  60. BIN
      _images/rust-energy.png
  61. BIN
      _images/rust-ferris.png
  62. BIN
      _images/rust-issues.png
  63. BIN
      _images/rust-memory.png
  64. BIN
      _images/rust-reference.png
  65. BIN
      _images/rust.png
  66. BIN
      _images/rustlatam-asmjs.jpg
  67. BIN
      _images/rustlatam-async1.jpg
  68. BIN
      _images/rustlatam-async2.jpg
  69. BIN
      _images/rustlatam-defensive.png
  70. BIN
      _images/rustlatam-openingkeynote1.png
  71. BIN
      _images/rustlatam-openingkeynote2.png
  72. BIN
      _images/rustlatam-openingkeynote3.png
  73. BIN
      _images/rustlatam-openingkeynote4.png
  74. BIN
      _images/rustlatam-travel.png
  75. BIN
      _images/rustlatam.png
  76. BIN
      _images/scikit.jpeg
  77. BIN
      _images/senta-que-la-vem-historia.gif
  78. BIN
      _images/several-song-filled-hours-later.jpg
  79. BIN
      _images/silo.jpeg
  80. BIN
      _images/socializing.jpeg
  81. BIN
      _images/streamprocessing-read-ready.jpg
  82. BIN
      _images/tchelinux-2019.png
  83. BIN
      _images/tchelinux-first.png
  84. BIN
      _images/tchelinux-poa2019.jpg
  85. BIN
      _images/tchelinux.png
  86. BIN
      _images/the-next-day.jpg
  87. BIN
      _images/the-witch-is-dead.png
  88. BIN
      _images/tilefile.jpg
  89. BIN
      _images/tweet-python2020.png
  90. BIN
      _images/xmpp.png
  91. 489
      activitypub.html
  92. 62
      after-dark.css
  93. 103
      base.html
  94. 4
      cargo-cult.html
  95. 2
      cleancodemeetup.html
  96. 788
      com-licenca.html
  97. 126
      filosofando-testes.html
  98. 2
      flask-40mins.html
  99. 285
      flink.html
  100. BIN
      fonts/hack-bold-subset.woff
  101. Some files were not shown because too many files have changed in this diff Show More

1
.gitignore vendored

@ -1,6 +1,5 @@
*.sw?
.DS_Store
index.json
*.pyc
*.xml
report.html

BIN
_images/40-years-processor-trend.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

328
_images/ActivityPub-logo.svg

@ -0,0 +1,328 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="500"
height="130"
viewBox="0 0 132.29166 34.395832"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="ActivityPub-logo.svg">
<title
id="title4590">ActivityPub logo</title>
<defs
id="defs2">
<linearGradient
id="AP-4-0"
osb:paint="solid">
<stop
style="stop-color:#5e5e5e;stop-opacity:1;"
offset="0"
id="stop5660" />
</linearGradient>
<linearGradient
id="linearGradient5640"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5638" />
</linearGradient>
<linearGradient
id="linearGradient5634"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5632" />
</linearGradient>
<linearGradient
id="linearGradient5628"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5626" />
</linearGradient>
<linearGradient
id="AP-3-7"
osb:paint="solid">
<stop
style="stop-color:#c678c5;stop-opacity:1;"
offset="0"
id="stop5498" />
</linearGradient>
<linearGradient
id="AP-2-3"
osb:paint="solid">
<stop
style="stop-color:#6d6d6d;stop-opacity:1;"
offset="0"
id="stop5230" />
</linearGradient>
<linearGradient
id="AP1-5"
osb:paint="solid">
<stop
style="stop-color:#f1007e;stop-opacity:1;"
offset="0"
id="stop5212" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#AP-3-7"
id="linearGradient5749"
gradientUnits="userSpaceOnUse"
x1="3319.292"
y1="-1291.2802"
x2="3344.3645"
y2="-1291.2802" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP1-5"
id="linearGradient7297-7"
gradientUnits="userSpaceOnUse"
x1="3241.6836"
y1="-1355.4329"
x2="3254.9529"
y2="-1355.4329" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP-2-3"
id="linearGradient7303-7"
gradientUnits="userSpaceOnUse"
x1="3225.7603"
y1="-1355.4329"
x2="3239.0295"
y2="-1355.4329" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP1-5"
id="linearGradient8308"
gradientUnits="userSpaceOnUse"
x1="3241.6836"
y1="-1355.4329"
x2="3254.9529"
y2="-1355.4329" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP1-5"
id="linearGradient8310"
gradientUnits="userSpaceOnUse"
x1="3241.6836"
y1="-1355.4329"
x2="3254.9529"
y2="-1355.4329" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP1-5"
id="linearGradient8312"
gradientUnits="userSpaceOnUse"
x1="3241.6836"
y1="-1355.4329"
x2="3254.9529"
y2="-1355.4329" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP-2-3"
id="linearGradient8314"
gradientUnits="userSpaceOnUse"
x1="3225.7603"
y1="-1355.4329"
x2="3239.0295"
y2="-1355.4329"
gradientTransform="matrix(3.7000834,0,0,3.7000834,-11935.582,4544.6634)" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP-2-3"
id="linearGradient5188"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.42732603,0,0,0.42732603,-1363.3009,454.91899)"
x1="3269.126"
y1="-1354.6217"
x2="3322.1943"
y2="-1354.6217" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP-2-3"
id="linearGradient4523"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.5811973,0,0,3.5811973,-11532.084,4918.1922)"
x1="3269.126"
y1="-1354.6217"
x2="3322.1943"
y2="-1354.6217" />
<linearGradient
inkscape:collect="always"
xlink:href="#AP1-5"
id="linearGradient4526"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(3.5811973,0,0,3.5811973,-11528.758,4918.1922)"
x1="3323.9951"
y1="-1356.5363"
x2="3349.0676"
y2="-1356.5363" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="0.14509804"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.5"
inkscape:cx="395.506"
inkscape:cy="-201.19903"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:snap-global="true"
showguides="false"
inkscape:guide-bbox="true"
showborder="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false"
borderlayer="false"
units="px">
<inkscape:grid
type="xygrid"
id="grid4572"
enabled="false"
originx="7.1437514"
originy="-404.28382" />
<inkscape:grid
type="axonomgrid"
id="grid4574"
units="mm"
empspacing="12"
originx="7.1437514"
originy="-404.28382"
enabled="false" />
<sodipodi:guide
position="3278.981,1256.5057"
orientation="0,1"
id="guide5059"
inkscape:locked="false" />
<sodipodi:guide
position="3278.981,1238.2495"
orientation="0,1"
id="guide5061"
inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>ActivityPub logo</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:date>2017-04-15</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Robert Martinez</dc:title>
</cc:Agent>
</dc:creator>
<dc:subject>
<rdf:Bag>
<rdf:li>ActivityPub</rdf:li>
</rdf:Bag>
</dc:subject>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
style="opacity:1"
transform="translate(7.1437516,141.67967)">
<path
style="fill:#000000;stroke-width:0.26458335"
d=""
id="path5497"
inkscape:connector-curvature="0" />
<g
id="g5197"
transform="translate(1.3229166)">
<g
id="g5132-90"
style="fill:url(#linearGradient7297-7);fill-opacity:1"
transform="matrix(0.9789804,0,0,0.9789804,-3157.9561,1202.4422)">
<g
transform="matrix(0.2553682,0,0,0.2553682,2615.9213,-1125.3113)"
id="g5080-78"
style="fill:url(#linearGradient8312);fill-opacity:1">
<path
inkscape:connector-curvature="0"
id="path5404-0-0"
d="m 2450.431,-937.13662 51.9615,30 v 12 l -51.9615,30 v -12 l 41.5693,-24 -41.5692,-24 z"
style="fill:url(#linearGradient8308);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cccccccc" />
<path
sodipodi:nodetypes="cccc"
style="fill:url(#linearGradient8310);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2450.431,-913.13662 20.7847,12 -20.7847,12 z"
id="path5406-6-3"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g5127-1"
style="fill:url(#linearGradient7303-7);fill-opacity:1"
transform="matrix(0.9789804,0,0,0.9789804,-3157.9561,1202.4422)">
<path
id="path5467-2-0"
transform="matrix(0.27026418,0,0,0.27026418,3225.7603,-1228.2597)"
d="M 49.097656,-504.56641 0,-476.2207 v 11.33789 l 39.277344,-22.67578 v 45.35351 l 9.820312,5.66992 z m -19.638672,34.01563 -19.6406246,11.33789 19.6406246,11.33789 z"
style="fill:url(#linearGradient8314);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25000042px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g5203"
transform="matrix(2.2173353,0,0,2.2173353,-35.445741,150.88402)">
<g
id="g4523">
<path
sodipodi:nodetypes="scscscscsscscscscscccccccccccccccscsccccscscccccccccccscsccccscsccccccccccccscscccsccccscscsccccscccccccccccccccccccccccccccccscssccccccccc"
inkscape:connector-curvature="0"
id="text5037-6"
transform="matrix(0.1193249,0,0,0.1193249,12.763965,-131.94382)"
d="m 263.22656,34.349609 c -1.66644,0 -2.95278,0.477436 -3.85742,1.429688 -0.90464,0.904639 -1.35742,2.069669 -1.35742,3.498047 0,1.428378 0.45278,2.59536 1.35742,3.5 0.90464,0.857027 2.19098,1.285156 3.85742,1.285156 1.66644,0 2.99818,-0.428129 3.99805,-1.285156 0.99986,-0.857027 1.5,-2.024009 1.5,-3.5 0,-1.475991 -0.50014,-2.665673 -1.5,-3.570313 -0.99987,-0.904639 -2.33161,-1.357422 -3.99805,-1.357422 z m 43.95117,0 c -1.66644,0 -2.95082,0.477436 -3.85546,1.429688 -0.90464,0.904639 -1.35743,2.069669 -1.35743,3.498047 0,1.428378 0.45279,2.59536 1.35743,3.5 0.90464,0.857027 2.18902,1.285156 3.85546,1.285156 1.66645,0 3.00014,-0.428129 4,-1.285156 0.99987,-0.857027 1.5,-2.024009 1.5,-3.5 0,-1.475991 -0.50013,-2.665673 -1.5,-3.570313 -0.99986,-0.904639 -2.33355,-1.357422 -4,-1.357422 z m -118.46166,0.357422 -14.49805,50.351563 h 8.92774 l 2.92773,-11.285156 h 11.78516 l 3.07031,11.285156 h 9.42773 L 195.78638,34.707031 Z m 58.71166,5.285157 -8.49804,2.642578 v 6.71289 h -3.92774 v 7.570313 h 3.92774 v 18.71289 c 0,3.713784 0.66684,6.356519 2,7.927735 1.38076,1.571216 3.42866,2.355468 6.14258,2.355468 1.5236,0 2.9747,-0.189411 4.35546,-0.570312 1.38077,-0.333288 2.59511,-0.761418 3.64258,-1.285156 L 254,77.273438 c -0.66658,0.285675 -1.28607,0.49974 -1.85742,0.642578 -0.57135,0.142837 -1.2155,0.214843 -1.92969,0.214843 -1.04748,0 -1.78438,-0.430082 -2.21289,-1.287109 -0.3809,-0.857027 -0.57227,-2.308127 -0.57227,-4.355469 V 56.917969 h 6.92774 v -7.570313 h -6.92774 z m 80.23243,0 -8.49805,2.642578 v 6.71289 h -3.92969 v 7.570313 h 3.92969 v 18.71289 c 0,3.713784 0.66489,6.356519 1.99805,7.927735 1.38076,1.571216 3.42866,2.355468 6.14257,2.355468 1.52361,0 2.97666,-0.189411 4.35743,-0.570312 1.38076,-0.333288 2.5951,-0.761418 3.64257,-1.285156 l -1.07226,-6.785156 c -0.66658,0.285675 -1.28607,0.49974 -1.85742,0.642578 -0.57135,0.142837 -1.21355,0.214843 -1.92774,0.214843 -1.04747,0 -1.78437,-0.430082 -2.21289,-1.287109 -0.3809,-0.857027 -0.57226,-2.308127 -0.57226,-4.355469 V 56.917969 h 6.92773 v -7.570313 h -6.92773 z m -135.65894,6.855468 h 0.28516 l 1.14453,7.857422 2.85547,11.640625 h -8.2832 l 2.78515,-11.570312 z m 31.94605,1.572266 c -4.33275,0 -7.61963,1.570458 -9.85743,4.71289 -2.23779,3.142433 -3.35546,7.833061 -3.35546,14.070313 0,2.856756 0.21406,5.452139 0.64257,7.785156 0.47613,2.285405 1.23768,4.261293 2.28516,5.927735 1.04748,1.618828 2.38117,2.880516 4,3.785156 1.66644,0.857027 3.71238,1.285156 6.14062,1.285156 1.66645,0 3.33356,-0.238718 5,-0.714844 1.66645,-0.476126 3.09485,-1.190326 4.28516,-2.142578 l -1.78516,-6.570312 c -0.71418,0.476126 -1.50039,0.881555 -2.35742,1.214844 -0.80941,0.285675 -1.80968,0.427734 -3,0.427734 -2.23779,0 -3.88025,-1.022971 -4.92773,-3.070313 -0.99987,-2.047342 -1.5,-4.690077 -1.5,-7.927734 0,-3.856621 0.50013,-6.641415 1.5,-8.355469 0.99986,-1.761666 2.50027,-2.642578 4.5,-2.642578 1.09509,0 2.02335,0.117406 2.78515,0.355469 0.80942,0.19045 1.64298,0.501174 2.5,0.929687 l 2,-7.070312 c -1.04747,-0.571351 -2.26181,-1.048787 -3.64257,-1.429688 -1.33316,-0.3809 -3.07033,-0.570312 -5.21289,-0.570312 z m 35.06445,0.927734 v 35.710938 h 8.5 V 49.347656 Z m 11.05469,0 12.64257,36.066406 h 5.7129 l 11.99804,-36.066406 h -9.14062 l -4.42774,18.570313 -0.78711,5.71289 h -0.28515 l -0.85742,-5.642578 -4.92774,-18.640625 z m 32.89843,0 v 35.710938 h 8.49805 V 49.347656 Z m 33.53125,0 12.42774,35.710938 c -0.28568,1.571216 -0.64375,2.832904 -1.07227,3.785156 -0.42851,0.952252 -0.92865,1.641799 -1.5,2.070312 -0.52374,0.476127 -1.11858,0.714844 -1.78515,0.714844 -0.61897,0.04761 -1.23846,-0.04905 -1.85743,-0.287109 l -1.42773,7.285156 c 0.66658,0.380901 1.45278,0.642319 2.35742,0.785156 0.95225,0.190451 1.92787,0.28711 2.92774,0.28711 1.42837,0 2.64271,-0.430083 3.64257,-1.28711 1.04748,-0.809414 1.97575,-1.999096 2.78516,-3.570312 0.80941,-1.571216 1.57097,-3.475098 2.28516,-5.712891 0.71419,-2.237792 1.47574,-4.761168 2.28515,-7.570312 l 8.92774,-32.210938 h -8.71289 l -4.14258,19.998047 -0.64258,5.642578 h -0.35742 l -0.92774,-5.572265 -5,-20.06836 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:8.52205467px;line-height:2.53632545px;font-family:'PT Sans Narrow';-inkscape-font-specification:'PT Sans Narrow Bold Condensed';letter-spacing:0.22319667px;word-spacing:2.60024095px;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:url(#linearGradient4523);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27365798px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
id="text5065-3"
transform="matrix(0.1193249,0,0,0.1193249,12.763965,-131.94382)"
d="m 386.9082,34.349609 c -2.04734,0 -4.09523,0.119359 -6.14258,0.357422 -2.04734,0.190451 -3.92657,0.476521 -5.64062,0.857422 v 49.494141 h 8.99805 V 67.845703 c 0.19045,0.04761 0.49922,0.09497 0.92773,0.142578 l 1.42969,0.142578 h 1.35742 0.92773 c 2.04735,0 4.02324,-0.30877 5.92774,-0.927734 1.95212,-0.618964 3.66659,-1.619234 5.14258,-3 1.47599,-1.380766 2.64102,-3.165289 3.49804,-5.355469 0.90464,-2.19018 1.35743,-4.857568 1.35743,-8 0,-3.47572 -0.52284,-6.285167 -1.57032,-8.427734 -1.04747,-2.19018 -2.40582,-3.879997 -4.07226,-5.070313 -1.66644,-1.190315 -3.57033,-1.976521 -5.71289,-2.357421 -2.09496,-0.428514 -4.23756,-0.642579 -6.42774,-0.642579 z m 51.72461,0.714844 v 48.564453 c 1.14271,0.571352 2.76052,1.09614 4.85547,1.572266 2.14257,0.476126 4.47653,0.71289 7,0.71289 4.61842,0 8.25948,-1.570458 10.92578,-4.71289 2.66631,-3.190045 4,-8.164791 4,-14.925781 0,-6.237252 -0.95292,-10.761169 -2.85742,-13.570313 -1.85689,-2.809144 -4.47497,-4.214844 -7.85547,-4.214844 -3.19004,0 -5.64141,1.047624 -7.35547,3.142578 h -0.21484 V 35.064453 Z m -50.86719,7.285156 c 0.99987,0 1.95279,0.142059 2.85743,0.427735 0.90464,0.285675 1.68889,0.761158 2.35547,1.427734 0.71418,0.618964 1.26167,1.477176 1.64257,2.572266 0.42852,1.09509 0.64258,2.428784 0.64258,4 0,1.856891 -0.21406,3.402697 -0.64258,4.640625 -0.42851,1.190315 -1.02335,2.143233 -1.78515,2.857422 -0.71419,0.666576 -1.54775,1.142058 -2.5,1.427734 -0.95225,0.285676 -1.95057,0.429687 -2.99805,0.429687 -0.28568,10e-7 -0.83316,-0.02465 -1.64258,-0.07227 -0.7618,-0.09522 -1.28659,-0.189931 -1.57226,-0.285156 v -17.06836 c 0.95225,-0.238063 2.16658,-0.357422 3.64257,-0.357422 z m 20.31836,6.998047 v 23.210938 c 0,2.666306 0.21407,4.880911 0.64258,6.642578 0.42852,1.714054 1.04606,3.070448 1.85547,4.070312 0.80942,0.999865 1.78699,1.691365 2.92969,2.072266 1.1427,0.428513 2.45174,0.642578 3.92773,0.642578 2.28541,0 4.18929,-0.547488 5.71289,-1.642578 1.57122,-1.09509 2.81021,-2.476137 3.71485,-4.142578 h 0.21289 l 1.5,4.857422 h 6.42773 c -0.3809,-1.523604 -0.64232,-3.215374 -0.78515,-5.072266 -0.14284,-1.904504 -0.21485,-3.833039 -0.21485,-5.785156 V 49.347656 h -8.49804 v 23.853516 c -0.38091,1.380765 -1.02505,2.572401 -1.92969,3.572266 -0.90464,0.952252 -2.02232,1.427734 -3.35547,1.427734 -1.38077,0 -2.33368,-0.547488 -2.85742,-1.642578 -0.52374,-1.09509 -0.78516,-3.046325 -0.78516,-5.855469 V 49.347656 Z m 43.83204,6.927735 c 1.61882,0 2.80851,0.858211 3.57031,2.572265 0.7618,1.666441 1.14258,4.307223 1.14258,7.925782 0,4.094684 -0.47549,7.023489 -1.42774,8.785156 -0.95225,1.714054 -2.3333,2.572265 -4.14258,2.572265 -1.61882,0 -2.92787,-0.26337 -3.92773,-0.787109 V 59.990234 c 0.80941,-2.475855 2.40453,-3.714843 4.78516,-3.714843 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:condensed;font-size:8.52205467px;line-height:2.53632545px;font-family:'PT Sans Narrow';-inkscape-font-specification:'PT Sans Narrow Bold Condensed';letter-spacing:0.22319667px;word-spacing:2.60024095px;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:url(#linearGradient4526);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.24196777px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

BIN
_images/ActivityPub-tutorial-image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

9
_images/MIT_logo.svg

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--zaz-->
<svg xmlns="http://www.w3.org/2000/svg" height="166" width="321">
<g stroke-width="35" stroke="#A31F34">
<path d="m17.5,0v166m57-166v113m57-113v166m57-166v33m58,20v113"/>
<path d="m188.5,53v113" stroke="#8A8B8C"/>
<path d="m229,16.5h92" stroke-width="33"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 318 B

BIN
_images/Sorry-bout-that.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
_images/activitypub-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
_images/agpl-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

BIN
_images/all-eggs-broken.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
_images/all-eggs.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

BIN
_images/apache-license-2.0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 KiB

BIN
_images/apache-license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
_images/back-to-the-future.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
_images/bar.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
_images/bsd.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
_images/builds-character.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
_images/chrysalis.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
_images/community.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
_images/consuela.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
_images/copyright.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
_images/datastream.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
_images/download-apple-google.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
_images/email.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
_images/fear.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
_images/federation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
_images/flink-cluster1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
_images/flink-cluster2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
_images/flink-cluster3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
_images/flink1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
_images/flink2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
_images/flink3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
_images/github-lgpl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
_images/gpl-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
_images/guido-no-bdfl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
_images/hacktoberfest.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

BIN
_images/internet.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

BIN
_images/iplenix.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
_images/ipython-notebook.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

BIN
_images/ipython.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
_images/isso-nao-prova-nada.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
_images/jobmanager-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
_images/jupyter.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
_images/lgpl-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

BIN
_images/motorbike.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
_images/nope.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

BIN
_images/oogway.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
_images/past.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
_images/patrick-license.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
_images/plan_visualizer.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

BIN
_images/potato-farming-300x225.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
_images/present.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

BIN
_images/processor-speed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

BIN
_images/public-domain.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
_images/pycaxias.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
_images/python-datascience.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

BIN
_images/python-usage.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
_images/python15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
_images/python27-clock.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
_images/rewind.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
_images/rust-energy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
_images/rust-ferris.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
_images/rust-issues.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
_images/rust-memory.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
_images/rust-reference.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
_images/rust.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
_images/rustlatam-asmjs.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

BIN
_images/rustlatam-async1.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

BIN
_images/rustlatam-async2.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

BIN
_images/rustlatam-defensive.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
_images/rustlatam-openingkeynote1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
_images/rustlatam-openingkeynote2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
_images/rustlatam-openingkeynote3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
_images/rustlatam-openingkeynote4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
_images/rustlatam-travel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
_images/rustlatam.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
_images/scikit.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
_images/senta-que-la-vem-historia.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
_images/several-song-filled-hours-later.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

BIN
_images/silo.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

BIN
_images/socializing.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

BIN
_images/streamprocessing-read-ready.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
_images/tchelinux-2019.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
_images/tchelinux-first.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 KiB

BIN
_images/tchelinux-poa2019.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
_images/tchelinux.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
_images/the-next-day.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

BIN
_images/the-witch-is-dead.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

BIN
_images/tilefile.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
_images/tweet-python2020.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
_images/xmpp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

489
activitypub.html

@ -0,0 +1,489 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ActivityPub</title>
<meta name="description" content="Por que você deveria aprender Rust">
<meta name="author" content="Julio Biason">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="reveal.js/css/reveal.css">
<link rel="stylesheet" href="reveal.js/css/theme/night.css" id="theme">
<!-- Code syntax highlighting -->
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
<style type="text/css" media="screen">
.happy {
color: yellow;
}
.reveal section img {
border: none;
}
.reveal ul.empty {
list-style: none inside;
}
.revel ul.empty li {
display: block;
}
.cursor {
background-color: #666;
color: white;
}
img {
max-height: 90%;
}
td.seen {
font-style: italic;
font-weight: bold;
}
.semi-opaque {
background-color: rgba(0, 0, 0, 0.7);
}
.white {
background-color: white !important;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-background="_images/activitypub-logo.png" data-header>
<h2 class="semi-opaque">ActivityPub</h2>
</section>
<section>
<img src="_images/avatar-20170726.png" alt="Me" style="float:left;width:200px;" class="no-border">
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li>
<li><a href="http://presentations.juliobiason.me">http://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>
<section data-transition="slide">
<img class="stretch" src="_images/internet.jpeg" alt="">
<aside class="notes">
Para entender ActivityPub -- e porque ele existe --
precisamos dar um passo atrás e entender a internet.
A internet foi criada para ser "anarquica", no
sentido que não haveria um ponto central; se algum
ponto da rede fosse destruído por uma bomba nuclear
(porque assim eram os anos 60), outros pontos
continuariam funcionando.
</aside>
</section>
<section>
<img class="stretch" src="_images/federation.png" title="(do latim: foederatio, de foedus: “liga, tratado, aliança”) ou Estado Federal é um Estado composto por diversas entidades territoriais autônomas dotadas de governo próprio.">
<aside class="notes">
De certa forma, as coisas funcionavam de forma
"federada", cuja definição do dicionário para
"federação" é: "(do latim: foederatio, de foedus:
“liga, tratado, aliança”) ou Estado Federal é um
Estado composto por diversas entidades territoriais
autônomas dotadas de governo próprio."
(E como eu sou fã de Jornada nas Estrelas, eu
sempre lembro da "Federação dos Planetas Unidos",
que tinha o mesmo significado: vários planetas,
cada um com suas políticas, mas cada um funcionando
da forma que quisesse.)
</aside>
</section>
<section>
<img class="stretch" src="_images/email.png" alt="">
<aside class="notes">
Um dos exemplos mais básicos de federação ainda em
uso é o email: Existem vários servidores/serviços
de email por aí, cada um tem suas definições do que
é spam (ou como um email é definido como "spam"),
quotas de espaço, aliases -- enfim, uma série de
políticas -- mas os serviços conversam entre si
para garantir que todos possam receber emails,
mesmo estando em serviços (com políticas)
diferentes.
</aside>
</section>
<section>
<img class="white stretch" src="_images/xmpp.png" alt="">
<aside class="notes">
Outro exemplo de federação é o XMPP, um protocolo
criado para comunicação instantânea que era
utilizado pelo Hangouts a muito tempo (hoje não é
mais, é um protocolo fechado).
</aside>
</section>
<section data-transition="slide">
<img class="stretch" src="_images/socializing.jpeg" alt="">
<aside class="notes">
Apesar dos pesares, humanos são seres sociais e,
apesar dos pesares, a internet é uma forma de
socialização.
</aside>
</section>
<section>
<img class="stretch" src="_images/silo.jpeg" alt="">
<aside class="notes">
Infelizmente, a pouco tempo (em termos de tempo
de vida de internet), o modelo começou a mudar
para um modelo de "Silos", onde tudo fica no mesmo
lugar (mesmo que o "mesmo lugar" sejam vários
computadores em vários lugares).
A ideia de coisas com "políticas diferentes que
trabalham em forma de aliança" foi esquecida e
agora boa parte das coisas que nós queremos
compartilhar acaba ficando sob uma única política.
</aside>
</section>
<section>
<img class="stretch" src="_images/all-eggs.jpeg" alt="">
<aside class="notes">
Basicamente estamos colocando todos os ovos no
mesmo sesto.
</aside>
</section>
<section>
<img class="stretch" src="_images/all-eggs-broken.jpeg" alt="">
<aside class="notes">
Basta lembrar o que acontece toda vez que algum
juiz diz que é para bloquear o WhatsApp.
(O resultado é que explodem os cadastros no
Telegram, que sofre do mesmo problema.)
</aside>
</section>
<section data-transition="slide">
<img class="stretch white" src="_images/ActivityPub-logo.svg" alt="">
<aside class="notes">
E assim como temos o XMPP para conversas
instantâneas, temos o ActivityPub para ações
"sociais" -- no sentido de "coisas que fazemos com
nossas vidas".
</aside>
</section>
<section>
<h4>Mas O Que é ActivityPub</h4>
<ul>
<li class="fragment">Protocolo certificado pela W3C.</li>
<li class="fragment">Baseado em HTTP e JSON.</li>
<li class="fragment">Tem vários conceitos iguais ao email.</li>
<li class="fragment">Composto de outros protolocos: WebFinger, ActivityStreams, ActivityVocabulary e JSON-LD.</li>
</ul>
<aside class="notes">
1. O protocolo é certificado (e padronizado) pela
W3C, o que deixa o protocolo aberto para
qualquer um implementar a sua própria versão (e
existem várias implementações, que eu vou falar
mais pra frente).
2. Apesar d'eu ter comentado o email, que usa um
protocolo específico, ActivityPub usa HTTP e JSON.
3. E apesar de ser HTTP e JSON, ainda aproveita
alguns conceitos do email -- e sim, eu estou
andando em circulos, mas peraí.
4. ActivityPub não é apenas um protocolo, mas é um
protocolo construido sobre outros protocolos,
como WebFinger para descoberta de informações de
usuários, ActivityStreams que descreve o formato
das atividades, ActivityVocabulary que inidica
quais ações existentes e os tipos de objetos
existentes e JSON-LD que define os formato dos
objetos em JSON.
</aside>
</section>
<section>
<h4>O Que é ActivityPub</h4>
<h3>Activity Vocabulary</h3>
<ul>
<li class="fragment">Actors <span class="fragment">(Person, Bot, Service)</span></li>
<li class="fragment">Notes</li>
<li class="fragment">Images</li>
<li class="fragment">Links</li>
<li class="fragment">...</li>
</ul>
<aside class="notes">
Existem atores que aplicam as ações (person, bot,
company/service), e as atividades tem coisas como o
compartilhamento de notas (texto), imagens, links e
outras coisas. Praticamente tudo que possa ser
pensando em compartilhar.
</aside>
</section>
<section>
<h4>ActivityPub</h4>
<h3>WebFinger</h3>
<pre><code class="hljs json" data-trim>
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"id": "https://social.example/alyssa/",
"name": "Alyssa P. Hacker",
"preferredUsername": "alyssa",
"summary": "Lisp enthusiast hailing from MIT",
"inbox": "https://social.example/alyssa/inbox/",
"outbox": "https://social.example/alyssa/outbox/",
"followers": "https://social.example/alyssa/followers/",
"following": "https://social.example/alyssa/following/",
"liked": "https://social.example/alyssa/liked/"}
</code></pre>
<aside class="notes">
Essa é a estrutura de um ator. Existem algumas
opções importantes/interessantes aqui.
</aside>
</section>
<section>
<h4>ActivityPub</h4>
<pre><code class="hljs json" data-trim data-line-numbers="7">
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"id": "https://social.example/alyssa/",
"name": "Alyssa P. Hacker",
"preferredUsername": "alyssa",
"summary": "Lisp enthusiast hailing from MIT",
"inbox": "https://social.example/alyssa/inbox/",
"outbox": "https://social.example/alyssa/outbox/",
"followers": "https://social.example/alyssa/followers/",
"following": "https://social.example/alyssa/following/",
"liked": "https://social.example/alyssa/liked/"}
</code></pre>
<aside class="notes">
Essa informação sobre o ator (que eu estou
mostrando do originador da mensagem) tem alguns
valores que são importantes.
Por exemplo, the "inbox" tem as mensagens que
chegaram para esse usuário.
Obviamente, não necessáriamente qualquer um pode
acessar o inbox, mas a informação pertence ao ator.
</aside>
</section>
<section>
<h4>ActivityPub</h4>
<pre><code class="hljs json" data-trim data-line-numbers="8">
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"id": "https://social.example/alyssa/",
"name": "Alyssa P. Hacker",
"preferredUsername": "alyssa",
"summary": "Lisp enthusiast hailing from MIT",
"inbox": "https://social.example/alyssa/inbox/",
"outbox": "https://social.example/alyssa/outbox/",
"followers": "https://social.example/alyssa/followers/",
"following": "https://social.example/alyssa/following/",
"liked": "https://social.example/alyssa/liked/"}
</code></pre>
<aside class="notes">
Assim como o "inbox", existe o "outbox" que é tudo
que o ator enviou. Basicamente, essa é a lista de
todas as atividades do usuário específico.
</aside>
</section>
<section>
<h4>ActivityPub</h4>
<h3>Activity Stream</h3>
<pre><code class="hljs json" data-trim>
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "https://social.example/alyssa/posts/a29a6843",
"to": ["https://chatty.example/ben/"],
"actor": "https://social.example/alyssa/",
"object": {"type": "Note",
"id": "https://social.example/alyssa/posts/49e2d03d",
"attributedTo": "https://social.example/alyssa/",
"to": ["https://chatty.example/ben/"],
"content": "Did you finish reading that book?"}}
</code></pre>
<aside class="notes">
E uma atividade -- por exemplo, nosso ator acima
enviando um texto para outro ator.
</aside>
</section>
<section>
<h4>ActivityPub</h4>
<img class="white stretch" src="_images/ActivityPub-tutorial-image.png" alt="">
</section>
<section>
<h4>ActivityPub</h4>
<h3>Client to Server Activities</h3>
<p class="fragment">
create, update, delete, follow, add, remove, like,
block, undo
</p>
</section>
<section>
<h4>ActivityPub</h4>
<h3>Server to Server Activity</h3>
<p class="fragment">
create, update, delete, follow, accept (follow),
reject (to follow), add, remove, like, announce
(reposting/boosting), undo
</p>
</section>
<section>
<h4>ActivityPub</h4>
<h3>Public</h3>
<p class="fragment">https://www.w3.org/ns/activitystreams#Public</p>
</section>
<section>
<h4>Suporte ao ActivityPub</h4>
<ul>
<li class="fragment">ForgeFed (Código, Github)</li>
<li class="fragment">PixelFed (Fotos, Instagram)</li>
<li class="fragment">PeerTube (Videos, YouTube)</li>
<li class="fragment">HubZilla/Plume/WordPress ActivityPub Plugin (Blogging, WordPress)</li>
<li class="fragment">DistBin (Snippets, Pastebin/Gist)</li>
<li class="fragment">Diaspora (Social, Facebook)</li>
<li class="fragment">Microblog/Honk/Plemora/Mastodon (Micro-blogging, Twitter)</li>
</ul>
</section>
<section>
<h4>Suporte ao ActivityPub</h4>
<h3>Mastodon</h3>
<ul>
<li class="fragment">2.629 instâncias</li>
<li class="fragment">10.877.412 de contas criadas</li>
<li class="fragment">157.437 usuários ativos (última semana de novembro)</li>
<li class="fragment">1.562.887.737.129.765 toots</li>
</ul>
</section>
<section>
<h4>Suporte ao ActivityPub</h4>
<p>
<a href="https://fediverse.party">Fediverse</a>
</p>
</section>
<section>
<h4>Informações Técnicas</h4>
<ul>
<li><a href="https://www.w3.org/TR/activitypub/">ActivityPub, W3C Recommendation 23 January 2018</a></li>
<li><a href="https://nextcloud.com/blog/activitypub-the-new-standard-for-decentralized-networks/">NextCloud: ActivityPub: the new standard for decentralized networks</a></li>
<li><a href="https://hacks.mozilla.org/2018/11/decentralizing-social-interactions-with-activitypub/">Mozilla Hacks: Decentralizing Social Interactions with ActivityPub</a></li>
<li><a href="https://activitypub.rocks/">ActivityPub Rocks!</a></li>
<li><a href="https://flak.tedunangst.com/post/ActivityPub-as-it-has-been-understood">Honk: ActivityPub as it has been understood</a></li>
</ul>
</section>
<section data-background='_images/thats-all-folks.jpg' data-transition="slide">
<div class="semi-opaque">
<ul class="empty">
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li>
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>
</div>
</div>
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
// showNotes: true,
transition: 'fade', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{ src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
{ src: 'reveal.js/plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

62
after-dark.css

@ -0,0 +1,62 @@
* {
font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
font-size: 1em;
font-style: normal;
}
body {
max-width: 50rem;
padding: 20px 10px;
background: #000;
color: #ccc;
line-height: 1rem;
margin: 0 auto;
}
h1 {
display: block;
position: relative;
padding: 20px 0 10px;
margin 0;
overflow: hidden;
float: none;
line-height: 1.3rem;
}
h1:after {
content: "====================================================================================================";
position: absolute;
bottom: -7px;
left: 0;
}
h2 {
position: relative;
margin-top: 1rem;
margin-bottom: 10px;
}
h2:before {
content: "## ";
display: inline;
}
a, a:visited {
color: #ccc;
cursor: pointer;
border-bottom: 1px solid #ff2e88;
text-decoration: none;
}
a:after {
content: " " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E");
}
div.muted {
color: rgba(255,255,255,0.5);
}
div.hide {
display: none;
}

103
base.html

@ -1,80 +1,35 @@
<!doctype html>
<html lang="en">
<html>
<head>
<meta charset="utf-8">
<title>reveal.js – The HTML Presentation Framework</title>
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
<meta name="author" content="Hakim El Hattab">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="reveal.js/css/reveal.css">
<link rel="stylesheet" href="reveal.js/css/theme/black.css" id="theme">
<!-- Code syntax highlighting -->
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
<meta charset="utf-8" />
<link rel="stylesheet" href="htmlslides.css" title="" type="">
<link rel="stylesheet" href="terminimal.css" title="" type="">
<script src="htmlslides.js" charset="utf-8"></script>
<title>
PRESENTATION TITLE
</title>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<h1>Reveal.js</h1>
<h3>The HTML Presentation Framework</h3>
<p>
<small>Created by <a href="http://hakim.se">Hakim El Hattab</a> / <a href="http://twitter.com/hakimel">@hakimel</a></small>
</p>
</section>
</div>
</div>
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/zoom-js/zoom.js', async: true },
{ src: 'plugin/notes/notes.js', async: true }
]
});
</script>
<header>
<h1>
PRESENTATION TITLE
</h1>
</header>
<section id="introduction">
<h1>
ONE TITLE
</h1>
<p>
content
</p>
</section>
<section id="image">
<h1>This one have an image</h1>
<img src="_images/cargo-cult-smokey.jpg" alt="" class="center">
</section>
</body>
</html>

4
cargo-cult.html

@ -62,6 +62,10 @@
font-style: italic;
font-weight: bold;
}
.semi-opaque {
background-color: rgba(0, 0, 0, 0.7);
}
</style>
</head>

2
cleancodemeetup.html

@ -85,7 +85,7 @@
<li>Júlio Biason</li>
<li>@juliobiason</li>
<li>julio.biason@gmail.com</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>

788
com-licenca.html

@ -0,0 +1,788 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Com Licença!</title>
<meta name="description" content="Por que você deveria aprender Rust">
<meta name="author" content="Julio Biason">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="reveal.js/css/reveal.css">
<link rel="stylesheet" href="reveal.js/css/theme/night.css" id="theme">
<!-- Code syntax highlighting -->
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
<style type="text/css" media="screen">
.happy {
color: yellow;
}
.reveal section img {
border: none;
}
.reveal ul.empty {
list-style: none inside;
padding: 1px;
}
.revel ul.empty li {
display: block;
}
.cursor {
background-color: #666;
color: white;
}
img {
max-height: 90%;
}
td.seen {
font-style: italic;
font-weight: bold;
}
.semi-opaque {
background-color: rgba(0, 0, 0, 0.7);
padding: 20px;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<section data-background="_images/patrick-license.jpeg" data-header>
<h2 class="semi-opaque">Com Licença!</h2>
</section>
</section>
<section data-background="_images/avatar-20170726.png">
<div class="semi-opaque">
<img src="_images/avatar-20170726.png" alt="Me" style="float:left;width:200px;" class="no-border">
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li>
</ul>
</div>
</div>
</section>
<section data-background="_images/avatar-20170726.png">
<div class="semi-opaque">
<ul>
<li>Coordenador do meetup <strong>Rust in POA</strong></li>
<li>Co-coordenador do meetup <strong>PyTche</strong></li>
<li>Co-coordenador do meetup <strong>Design de Código</strong></li>
<li>Palestrante do <strong>Tchelinux</strong></li>
</ul>
</div>
</section>
<section data-background="_images/avatar-20170726.png">
<div class="semi-opaque">
<h3>JulioBiason.me</h3>
<ul>
<li><a href="https://blog.juliobiason.me/">Blog</a></li>
<li><a href="https://presentations.juliobiason.me/">Presentations</a></li>
<li><a href="https://git.juliobiason.me/">Git</a></li>
<li><a href="https://resume.juliobiason.me/">CV/Resumé</a></li>
<li><a href="https://books.juliobiason.me/">Books</a></li>
</ul>
</div>
</section>
<section>
<img class="stretch" src="_images/copyright.jpeg" alt="">
</section>
<section data-background="_images/copyright.jpeg">
<div class="semi-opaque">
<p>
Copyright é "Direito autoral ou direito de autor é um conjunto de prerrogativas
conferidas por lei à pessoa física ou jurídica criadora da obra intelectual,
para que ela possa usufruir de quaisquer benefícios morais e patrimoniais
resultantes da exploração de suas criações."
</p>
<p>
<a href="https://pt.wikipedia.org/wiki/Direito_autoral">Wikipedia</a>
</p>
</div>
</section>
<section data-background="_images/copyright.jpeg">
<div class="semi-opaque">
<p>
Tirando casos específicos, as licenças se baseam na
<strong>distribuição</strong> do conteúdo.
</p>
</div>
</section>
<section data-background="_images/copyright.jpeg">
<div class="semi-opaque">
<p>
<strong>AVISO!</strong>
</p>
<p>
Eu não sou advogado, partes legais não são o meu
forte.
</p>
</div>
</section>
<section>
<img class="stretch" src="_images/gpl-logo.png" alt="">
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<ul>
<li>GPL v2</li>
<li>GPL v3</li>
<li>LGPL (v2/v3)</li>
<li>AGPL (Affero General Public License ou GNU Affero General Public License)</li>
</ul>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<h2>GPL v2</h2>
<ol>
<li>Executar a aplicação para qualquer fim;</li>
<li>Estudar como a aplicação funciona e modificar (código derivado);</li>
<li>Distribuir cópias livremente;</li>
<li>Distribuir cópias das modificações.</li>
</ol>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<h2>GPL v3</h2>
<ol start="5">
<li>Se houver criptografia, a chave deve ser publicada (tivolization)</li>
</ol>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<p>
Se eu estou fazendo um software específico para
uma empresa, posso licenciar como GPL?
</p>
<p class="fragment">
<strong>Sim.</strong>
</p>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<p>
Se eu estou fazendo um software específico para uma
empresa, e licenciar pela GPL, posso cobrar por
isso?
</p>
<p class="fragment">
<strong>Sim.</strong>
<span class="fragment">
Apenas entregue os fontes junto.
</span>
</p>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<p>
Posso pegar um software GPL, fazer alterações
e cobrar por isso?
</p>
<p class="fragment">
<strong>Sim.</strong>
<span class="fragment">
Apenas entregue os fontes junto.
</span>
</p>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<p>
Posso pegar um software GPL, mudar o nome,
colocar meu nome nos Copyrights e distribuir?
</p>
<p class="fragment">
Sim, passando a ser considerado "código derivado".
</p>
<p class="fragment">
<strong>
Você não pode retirar o copyright atual.
</strong>
</p>
<p class="fragment">
Você precisa entregar os fontes junto.
</p>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<p>
Se eu fizer um serviço web qualquer e licenciar
como GPL, eu tenho que distribuir os fontes para
todo mundo que acessar o site?
</p>
<p class="fragment">
<strong>Não.</strong>
<span class="fragment">GPLv2/v3 cobrem apenas distribuição.</span>
</p>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<p>
Posso gerar uma aplicação mobile GPL e colocar no store?
</p>
<p class="fragment">Não.</p>
<p class="fragment">
<em>
O problema é que quem está distribuindo o
aplicativo (Apple/Google) não tem uma área
para distribuição dos fontes e não querem
se envolver com isso.
</em>
</p>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<p>
Se eu usar uma biblioteca/framework qualquer
que está licenciado sob a GPL, o que acontece?
</p>
<p class="fragment">
Seu código passa a ser distribuído pela GPL.
</p>
<p class="fragment">
<em>
É considerado código derivado.
</em>
</p>
</div>
</section>
<section>
<img class="stretch" src="_images/lgpl-logo.png" alt="">
</section>
<section data-background="_images/lgpl-logo.png">
<div class="semi-opaque">
<h2>LGPL</h2>
<p>GNU Lesser General Public License</p>
</div>
</section>
<section data-background="_images/lgpl-logo.png">
<div class="semi-opaque">
<p>Igual a GPL, mas remove a cláusula de código derivado.</p>
</div>
</section>
<section data-background="_images/lgpl-logo.png">
<div class="semi-opaque">
<p>
Se eu usar uma biblioteca/framework qualquer
que está licenciado sob a LGPL, o que acontece?
</p>
<p class="fragment">
Nada. Você usa a biblioteca/framework.
</p>
</div>
</section>
<section data-background="_images/lgpl-logo.png">
<div class="semi-opaque">
<p>
Se eu fizer um serviço web qualquer que use uma
biblioteca LGPL, eu tenho que distribuir os fontes
para todo mundo que acessar o site?
</p>
<p class="fragment">
<strong>Não.</strong>
<span class="fragment">LGPLv2/v3 cobrem apenas distribuição.</span>
</p>
</div>
</section>
<section>
<img class="stretch" src="_images/agpl-logo.png" alt="">
</section>
<section data-background="_images/agpl-logo.png">
<div class="semi-opaque">
<ol start="6">
<li>Fontes devem ser fornecidos junto com o acesso.</li>
</ol>
</div>
</section>
<section data-background="_images/agpl-logo.png">
<div class="semi-opaque">
<p>
Se eu fizer um serviço web qualquer e licenciar
como AGPL, eu tenho que distribuir os fontes para
todo mundo que acessar o site?
</p>
<p class="fragment">
Sim.
</p>
</div>
</section>
<section data-background="_images/agpl-logo.png">
<div class="semi-opaque">
<p>Se eu pegar um servidor web qualquer licenciado
sob a AGPL, eu tenho que distribuir os fontes para
todo mundo que acessar o site?</p>
<p class="fragment">
Sim.
</p>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<h2>Quem usa GPL?</h2>
<ul>
<li>Linux¹</li>
<li>MySQL</li>
<li>BusyBox</li>
<li>VLC</li>
<li>JVM</li>
<li>OpenJDK</li>
</ul>
</div>
</section>
<section data-background="_images/gpl-logo.png">
<div class="semi-opaque">
<h2>Linux</h2>
<p>
"This program is free software; you can redistribute
it and/or modify it under the terms of the GNU
General Public License as published by the Free
Software Foundation;
<span class="fragment fade-out">either </span>version 2
of the License<span class="fragment fade-out">,
or (at your option) any later version.</span>"
</p>
</div>
</section>
<section data-background="_images/lgpl-logo.png">
<div class="semi-opaque">
<h2>Quem usa LGPL?</h2>
<img class="stretch" src="_images/github-lgpl.png" alt="">
</div>
</section>
<section data-background="_images/lgpl-logo.png">
<div class="semi-opaque">
<h2>Quem usa LGPL?</h2>
<ul>
<li>Qt</li>
<li>Cedega</li>
<li>LibVLC</li>
<li>Lazarus</li>
</ul>
</div>
</section>
<section data-background="_images/agpl-logo.png">
<div class="semi-opaque">
<h2>Quem usa AGPL?</h2>
<ul>
<li>Gitorious</li>
<li>Mastodon</li>
<li>Nextcloud</li>
<li>ScyllaDB</li>
<li>Launchpad</li>
</ul>
</div>
</section>
<section>
<img class="stretch" src="_images/bsd.png" alt="">
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<h2>BSD 0-Clause</h2>
<p>
Permission to use, copy, modify, and/or distribute
this software for any purpose with or without fee
is hereby granted.
</p>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<h2>BSD 2-Clause</h2>
<p>
Redistribution and use in
<span class="fragment highlight-blue">source and binary
forms</span>, with or without modification, are
permitted provided that the following conditions are
met:
</p>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<h2>BSD 2-Clause</h2>
<ol>
<li>
Redistributions of source code must retain the
above copyright notice, this list of conditions
and the following disclaimer.
</li>
<li>
Redistributions in binary form must reproduce
the above copyright notice, this list of
conditions and the following disclaimer in the
documentation and/or other materials provided
with the distribution.
</li>
</ol>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<h2>BSD 3-Clause</h2>
<ol start="3">
<li>
Neither the name of the &lt;organization&gt; nor the
names of its contributors may be used to
endorse or promote products derived from this
software without specific prior written
permission.
</li>
</ol>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<h2>BSD 4-Clause</h2>
<ol start="4">
<li>
All advertising materials mentioning features
or use of this software must display the
following acknowledgement: This product
includes software developed by the
&lt;organization&gt;.
</li>
</ol>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<p>
Se eu estou fazendo um software específico para
uma empresa, posso licenciar como BSD?
</p>
<p class="fragment">
<strong>Sim.</strong>
</p>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<p>
Posso pegar um software BSD, mudar o nome,
colocar meu nome nos Copyrights e distribuir?
</p>
<p class="fragment">
Sim.
</p>
<p class="fragment">
<strong>
Você não pode retirar o copyright atual.
</strong>
</p>
<p class="fragment">
<strong>
Você não precisa entregar os fontes.
</strong>
</p>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<p>
Posso gerar uma aplicação mobile BSD e colocar no store?
</p>
<p class="fragment">Sim.</p>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<p>
Se eu fizer um serviço web qualquer que use uma
biblioteca BSD, eu tenho que distribuir os fontes
para todo mundo que acessar o site?
</p>
<p class="fragment">
Não.
</p>
</div>
</section>
<section data-background="_images/bsd.png">
<div class="semi-opaque">
<h2>Quem usa BSD?</h2>
<ul>
<li>FreeBSD (2-clause)</li>
<li>NetBSD (2-clause)</li>
<li>OpenBSD (0-clause, ISC)</li>
<li>Anaconda (3-clause)</li>
<li>Django (3-clause)</li>
<li>Flask (0-clause)</li>
<li>go (3-clause)</li>
<li>Memcached (3-clause)</li>
<li>PHPUnit (3-clause)</li>
</ul>
</div>
</section>
<section>
<img class="stretch" src="_images/MIT_logo.svg" alt="">
</section>
<section data-background="_images/MIT_logo.svg">
<div class="semi-opaque">
<h2>MIT</h2>
<p>
The above copyright notice and this permission
notice shall be included in all copies or
substantial portions of the Software.
</p>
</div>
</section>
<section data-background="_images/MIT_logo.svg">
<div class="semi-opaque">
<h2>Quem usa MIT?</h2>
<ul>
<li>.NET core</li>
<li>AngularJS</li>
<li>React²</li>
<li>Babel</li>
<li>Godot</li>
<li>Lua</li>
<li>Pilhas de *.js</li>
</ul>
</div>
</section>
<section data-background="_images/MIT_logo.svg">
<div class="semi-opaque">
<h2>React</h2>
<p>
Em 2017, o Facebook mudou a licença do React para
que, caso a empresa seja processada <em>por
qualquer motivo</em>, o litigiante perde o direito
de uso do produto.
</p>
</div>
</section>
<section>
<img class="stretch" src="_images/apache-license.png" alt="">
</section>
<section data-background="_images/apache-license.png">
<div class="semi-opaque">
<h2>Apache 2.0</h2>
<img src="_images/apache-license-2.0.png" alt="" style="max-height:5%">
</div>
</section>
<section data-background="_images/apache-license.png">
<div class="semi-opaque">
<h2>Apache 2.0</h2>
<p>
Subject to the terms and conditions of this
License, each Contributor hereby grants to You a
perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable copyright license to
reproduce, prepare Derivative Works of, publicly
display, publicly perform, sublicense, and
distribute the Work and such Derivative Works in
Source or Object form.
</p>
</div>
</section>
<section data-background="_images/apache-license.png">
<div class="semi-opaque">
<h2>Quem usa Apache?</h2>
<ul>
<li>Android</li>
<li>Apache *</li>
<li>Elixir</li>
<li>IntelliJ IDEA</li>
<li>Kotlin</li>
</ul>
</div>
</section>
<section>
<h2>E se eu não colocar nenhuma licença?</h2>
</section>
<section>
<img class="stretch" src="_images/public-domain.png" alt="">
</section>
<section data-background="_images/public-domain.png">
<div class="semi-opaque">
<h2>Public domain</h2>
<p>
The public domain consists of all the creative work
to which no exclusive intellectual property rights
apply. Those rights may have expired, been
forfeited, expressly waived, or may be
inapplicable.
</p>
</div>
</section>
<section data-background='_images/thats-all-folks.jpg'>
<div class="semi-opaque">
<ul class="empty">
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li>
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>
</div>
</div>
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
// showNotes: true,
transition: 'fade', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{ src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
{ src: 'reveal.js/plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

126
filosofando-testes.html

@ -48,6 +48,10 @@
li {
display: block;
}
.semi-opaque {
background-color: rgba(0, 0, 0, 0.7);
}
</style>
</head>
@ -67,10 +71,10 @@
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li>@juliobiason</li>
<li>https://functional.cafe/@juliobiason</li>
<li>julio.biason@gmail.com</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
<li>julio.biason@pm.me</li>
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>
@ -85,10 +89,6 @@
</aside>
</section>
<section>
<img src="_images/mini-hitler.jpg" alt="Me chamaram de Mini Hitler"/>
</section>
<section>
<img src="_images/filho-do-capeta.jpg" alt="... mas hoje eu vim botar os filho dos outro no go horse." class='stretch'/>
@ -103,6 +103,14 @@
<img src="_images/patriarch.jpg" alt="... e eu sou meio não-ortodoxo sobre testes."/>
</section>
<aside class="notes">
Um aviso: muitas das coisas que eu vou discutir aqui,
não são as coisas que normalmente são discutidas quando
se fala sobre testes.
Fiquem avisados que muitas pessoas não concordam comigo.
</aside>
</section>
<section>
@ -111,7 +119,7 @@
<ul>
<li>TDD Kent Beck Style.</li>
<li>Fast Test, Slow Tests.</li>
<li>Explosão de testes.</li>
<li>Explosão de testes lentos.</li>
<li>Coverage.</li>
</ul>
</section>
@ -120,6 +128,14 @@
<section>
<img src="_images/tdd-where-it-went-wrong.png" alt="TDD: Where it went wrong" class="stretch"/>
<p>Ian Cooper: <a href="https://vimeo.com/68375232">"TDD, where did it all go wrong"</a></p>
<aside class="notes">
Boa parte das coisas que eu vou discutir aqui foram
influenciadas por esse video do Ian Cooper, em que
ele discute coisas sobre TDD no estilo discutido
por Kent Beck, que foi quem escreveu o livro que
trouxe o termo "TDD" para as massas.
</aside>
</section>
<section>
@ -131,13 +147,44 @@
<li>"Run in isolation", nothing more, nothing less.</li>
<li>"Avoid testing implementation details, test behaviours"</li>
</ul>
<aside class="notes">
No seu livro, Kent Beck diz que "unit tests"
significam "rodam de forma isolada, nada mais, nada
menos". Esse é o _único_ significado de "unit
test"; "testes unitários" e não "testes de
unidade", na tradução correta.
Outra coisa que Kent Beck fala no seu livro é que
devem ser testados comportamentos, não
implementação. Pensem um pouco sobre isso: Se
estamos testando comportamento ao invés de
implementações, como é que podemos escrever um
teste de um objeto ou uma função? O que sabemos é
que uma aplicação tem um protocolo de entrada de
dados (terminal, web, GUI) e um protocolo de saída
(provavelmente o mesmo que o de entrada, no sentido
contrário) e como essa aplicação tem que se
comportar com relação à entrada.
</aside>
</section>
<section>
<h2>TDD</h2>
<p>Discussões como "qual a unidade a ser testada" é que geraram
coisas como BDD e ATDD (Acceptance Test-Driven Development).</p>
<p>
Discussões como "qual a unidade a ser testada" é
que geraram coisas como BDD e ATDD (Acceptance
Test-Driven Development).
</p>
<aside class="notes">
Se vocês pensarem, essa questão de como uma
aplicação deve se comportar é exatamente que fez
com o BDD (behaviour driven development) e ATDD
surgiram -- e eles não são diferentes do que o que
Kent Beck quis dizer com o TDD.
</aside>
</section>
<section>
@ -145,9 +192,31 @@
<p>Reddit: <a href="https://www.reddit.com/r/django/comments/5bearg/should_i_write_unit_tests_for_djangos_built_in/" target="_blank">Devo escrever testes para a validação interna do Django?</a></p>
<aside class="notes">
Uma boa pergunta uma vez surgiu no Reddit do Django
foi "Devo eu criar um teste para um campo inteiro
quando o Django já verifica que um campo inteiro
não possa ter caracteres?"
</aside>
<h1 class="fragment">SIM!</h1>
<p class="fragment">... bom, talvez sim.</p>
<aside class="notes">
A questão do teste não é relacionado com o tipo de
campo, mas o _significado_ do campo.
Exemplo, se o campo for "ano de nascimento",
obviamente "AAAA" não é um ano válido, e o Django
vai barrar isso se eu definir o campo como inteiro.
Mas eu poderia usar um campo caracter (por um
motivo qualquer) e eu teria que testar por ser um
inteiro.
Mas porque eu usaria um caracter ao invés de um
inteiro?
"Teste comportamento, não implementação".
</aside>
</section>
<section>
@ -156,7 +225,8 @@
<p>Nossos testes End-to-End.</p>
<aside class="notes">
Explicação do que aconteceu com os testes do gerenciador de alertas.
Explicação do que aconteceu com os testes do
gerenciador de alertas.
</aside>
</section>
</section>
@ -267,7 +337,7 @@
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code class="python">
<pre><code class="python" data-trim>
class Client:
def __init__(self, name):
self.name = name
@ -286,7 +356,7 @@ class Client:
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code class="python">
<pre><code class="python" data-trim>
def _multiple_names(name):
split_names = name.split(' ')
return len(split_names) > 1
@ -306,7 +376,7 @@ class Client:
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code class="python">
<pre><code class="python" data-trim>
import pytest
def test_single_name():
@ -321,7 +391,7 @@ def test_multiple_name():
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code class="python">
<pre><code class="python" data-trim>
def test_valid_name():
_validate_name('Julio Biason')
@ -335,7 +405,7 @@ def test_invalid_name():
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code class="python">
<pre><code class="python" data-trim>
def test_client_error():
with pytest.raises(Exception):
Client(name='Cher')
@ -349,7 +419,7 @@ def test_client():
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code>
<pre><code data-trim>
$ pytest client.py
==== test session starts ====
rootdir: /home/jbiason/unitt, inifile:
@ -365,7 +435,7 @@ client.py ......
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code>
<pre><code data-trim>
$ pytest --cov=client client.py
==== test session starts ====
plugins: cov-2.4.0
@ -393,7 +463,7 @@ client.py 25 0 100%
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code class="python">
<pre><code class="python" data-trim>
class Client:
def __init__(self, name):
self.name = name
@ -404,7 +474,7 @@ class Client:
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code>
<pre><code data-trim>
==== FAILURES ====
____ test_client_error ____
@ -422,7 +492,7 @@ client.py:37: Failed
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code>
<pre><code data-trim>
$ pytest client.py
==== test session starts ====
rootdir: /home/jbiason/unitt, inifile:
@ -439,7 +509,7 @@ client.py ......
<h2>Coverage</h2>
<h3>Exemplo</h3>
<pre><code>
<pre><code data-trim>
$ pytest --cov=client client.py
==== test session starts ====
rootdir: /home/jbiason/unitt, inifile:
@ -481,10 +551,10 @@ client.py 24 0 100%
<div class="fragment semi-opaque">
<ul>
<li>@juliobiason</li>
<li>https://functional.cafe/@juliobiason</li>
<li>julio.biason@gmail.com</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</li>
<li>julio.biason@pm.me</li>
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>

2
flask-40mins.html

@ -78,7 +78,7 @@
<li>Júlio Biason</li>
<li>@juliobiason</li>
<li>julio.biason@gmail.com</li>
<li><a href="http://presentations.juliobiason.net">http://presentations.juliobiason.net</a></li>
<li><a href="https://presentations.juliobiason.net">https://presentations.juliobiason.me</a></li>
</ul>
</div>
</section>

285
flink.html

@ -0,0 +1,285 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Flink</title>
<meta name="description" content="Por que você deveria aprender Rust">
<meta name="author" content="Julio Biason">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="reveal.js/css/reveal.css">
<link rel="stylesheet" href="reveal.js/css/theme/night.css" id="theme">
<!-- Code syntax highlighting -->
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
<style type="text/css" media="screen">
.happy {
color: yellow;
}
.reveal section img {
border: none;
}
.reveal ul.empty {
list-style: none inside;
}
.revel ul.empty li {
display: block;
}
.cursor {
background-color: #666;
color: white;
}
img {
max-height: 90%;
}
td.seen {
font-style: italic;
font-weight: bold;
}
.semi-opaque {
background-color: rgba(0, 0, 0, 0.7);
}
img.padding {
padding: 10px;
background-color: #fff !important;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>
<section data-background="_images/streamprocessing-flink.png" data-header>
<h2 class="semi-opaque">Flink</h2>
</section>
</section>
<section>
<section>
<pre><code>
cat log.log | grep ERROR | cut -f2 -d: &gt; errors.txt
</code></pre>
</section>
<section>
<h4>Entrada</h4>
<h2><pre><code>cat log.log</code></pre></h2>
</section>
<section>
<h4>Processamento</h4>
<h2><pre><code>grep ERROR</code></pre></h2>
<h2>
<pre><code>cut -f2 -d:</code></pre>
</h2>
</section>
<section>
<h4>Saída</h4>
<h2>
<pre><code>&gt; errors.txt</code></pre>
</h2>
</section>
</section>
<section>
<section>
<h4>cat</h4>
<h3>Tem começo e fim</h3>
<h2 class="fragment">"bounded"</h2>
</section>
<section>
<h4>Dados "infinitos"</h4>
<h2 class="fragment">"unbounded"</h2>
</section>
</section>
<section>
<section>
<img src="_images/flink1.png" alt="" class="stretch">
</section>
<section>
<img src="_images/flink2.png" alt="" class="stretch">
</section>
<section>
<img src="_images/flink3.png" alt="" class="stretch">
</section>
<section>
<img class="stretch" src="_images/datastream.png" alt="">
</section>
<section>
<h4>Operators</h4>
<ul>
<li><code>map</code></li>
<li><code>flatMap</code></li>
<li><code>filter</code></li>
<li><code>reduce</code></li>
<li class="fragment"><code>split/select</code></li>
<li class="fragment"><code>join</code></li>
<li class="fragment"><code>keyBy</code></li>
<li class="fragment"><code>window</code></li>
</ul>
</section>
</section>
<section>
<section>
<img src="_images/unclephil-time.jpg" alt="" class="stretch">
</section>
<section>
<img src="_images/unclephil-step0.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step1.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step2.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step3.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step4.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step5.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step6.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step7.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step8.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step9.png" alt="" class="stretch padding">
</section>
<section>
<img src="_images/unclephil-step10.png" alt="" class="stretch padding">
</section>
</section>
<section>
<section>
<img src="_images/dunno.jpg" alt="" class="stretch">
</section>
<section>
<img src="_images/flink-cluster1.png" alt="" class="stretch">
</section>
<section>
<img class="stretch" src="_images/flink-cluster2.png" alt="">
</section>
<section>
<img class="stretch" src="_images/flink-cluster3.png" alt="">
</section>
</section>
<section>
<section>
<img class="stretch" src="_images/unclephil-flinkpipelinereal.png" alt="">
</section>
</section>
<section>
<section>
<img class="stretch" src="_images/jobmanager-1.png" alt="">
</section>
<section>
<img class="stretch" src="_images/plan_visualizer.png" alt="">
</section>
</section>
<section data-background='_images/thats-all-folks.jpg'>
<section></section>
</section>
</div>
</div>
<script src="reveal.js/lib/js/head.min.js"></script>
<script src="reveal.js/js/reveal.js"></script>
<script>
// Full list of configuration options available at:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
// showNotes: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{ src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
{ src: 'reveal.js/plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>

BIN
fonts/hack-bold-subset.woff

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save