Browse Source

Merge branch 'master' of git.juliobiason.me:presentations

master
Julio Biason 4 years ago
parent
commit
d388574ebb
  1. 1
      .gitignore
  2. 328
      _images/ActivityPub-logo.svg
  3. BIN
      _images/ActivityPub-tutorial-image.png
  4. BIN
      _images/activitypub-logo.png
  5. BIN
      _images/all-eggs-broken.jpeg
  6. BIN
      _images/all-eggs.jpeg
  7. BIN
      _images/email.png
  8. BIN
      _images/federation.png
  9. BIN
      _images/internet.jpeg
  10. BIN
      _images/processor-speed.png
  11. BIN
      _images/rewind.png
  12. BIN
      _images/silo.jpeg
  13. BIN
      _images/socializing.jpeg
  14. BIN
      _images/xmpp.png
  15. 503
      activitypub.html
  16. 62
      after-dark.css
  17. 3
      filosofando-testes.html
  18. 7
      fugindo-com-python-2.html
  19. 104
      index.html
  20. 1
      index.json
  21. 89
      intro-stream-processing.html
  22. 6
      porque-como-opensource.html
  23. 393
      porque-rust.html
  24. 670
      terminimal.css

1
.gitignore vendored

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

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

BIN
_images/activitypub-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 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/email.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
_images/federation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
_images/internet.jpeg

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

BIN
_images/processor-speed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

BIN
_images/rewind.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 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/xmpp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

503
activitypub.html

@ -0,0 +1,503 @@
<!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>
<section data-background="_images/activitypub-logo.png" data-header>
<h2 class="semi-opaque">ActivityPub</h2>
</section>
</section>
<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.net">http://presentations.juliobiason.net</a></li>
</ul>
</div>
</section>
</section>
<section>
<section>
<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="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>
<section>
<section>
<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>
<section>
<section>
<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>
<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>
<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>
<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="http://presentations.juliobiason.net">http://presentations.juliobiason.net</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: '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>

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;
}

3
filosofando-testes.html

@ -71,7 +71,8 @@
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>

7
fugindo-com-python-2.html

@ -86,7 +86,8 @@
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>
@ -1075,8 +1076,8 @@ pares = (num
<section>
<div class="semi-opaque">
<ul class="empty">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>

104
index.html

@ -3,85 +3,43 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Presentations</title>
<title>Presentations.JulioBiason.Me 4.1</title>
<style>
* {
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;
}
</style>
<link rel="stylesheet" href="terminimal.css" title="" type="">
</head>
<body>
<h1>Presentations</h1>
<div id='presentations'></div>
<script src="_external/jquery.js"></script>
<div id='record' class='hide'>
<h2 class="title"><a href='#'>Title</a></h2>
<div class="muted">Updated: <span class="updated">never</span></div>
<div class="container">
<header class="header">
<div class="header__iner">
<div class="header__logo">
<a href="https://presentations.juliobiason.me" style="text-decoration: none;">
<div class="logo">
Presentations.JulioBiason.Me 4.1
</div>
</a>
</div>
</div>
</header>
<div class="content">
<div class="posts">
<div id='presentations'>
</div>
</div>
</div>
<div id='record' class='hide post on-list'>
<h1 class="post-title"><a href='#'>Title</a></h1>
<div class="post-meta-inline">
<span class="post-date">
<span class="updated"></span>
</span>
</div>
</div>
</div>
<script src="_external/jquery.js"></script>
<script type="text/javascript">
$(function() {
$.ajax({

1
index.json

@ -0,0 +1 @@
[{"image": "_images/tdd-kentbeck-book.jpg", "changed": "2019-02-13 10:10:13", "presentation": "unit-in-unittests-2.html", "title": "\"Unit\" em \"Unit Tests\""}, {"image": "_images/vim.png", "changed": "2019-02-13 10:10:13", "presentation": "gramatica-vim.html", "title": "A Gram\u00e1tica do VIM"}, {"image": "_images/ajax-sosp-cors-csrf.png", "changed": "2019-02-13 10:10:13", "presentation": "ajax-sosp-cors-csrf.html", "title": "AJAX / SOSP / CORS / CSRF"}, {"image": "_images/activitypub-logo.png", "changed": "2019-12-05 12:43:37", "presentation": "activitypub.html", "title": "ActivityPub"}, {"image": "_images/cargo-cult.jpg", "changed": "2019-02-15 09:45:46", "presentation": "cargo-cult.html", "title": "Cargo Cult"}, {"image": "_images/django-allauth.png", "changed": "2019-02-13 10:10:13", "presentation": "django-full.html", "title": "Django"}, {"image": "_images/django-allauth.png", "changed": "2019-02-13 10:10:13", "presentation": "django.html", "title": "Entendendo Django"}, {"image": "_images/django-rest.png", "changed": "2019-02-13 10:10:13", "presentation": "django-rest.html", "title": "Entendendo Django REST Framework"}, {"image": "_images/tdd-kentbeck-book.jpg", "changed": "2019-11-14 11:27:47", "presentation": "filosofando-testes.html", "title": "Filosofando sobre Testes"}, {"image": "_images/flask.png", "changed": "2019-02-13 10:10:13", "presentation": "flask-40mins.html", "title": "Flask em 40 Minutos ou Menos"}, {"image": "_images/streamprocessing-flink.png", "changed": "2019-09-12 14:52:26", "presentation": "flink.html", "title": "Flink"}, {"image": "_images/python.jpg", "changed": "2019-11-14 11:27:47", "presentation": "fugindo-com-python-2.html", "title": "Fugindo para as Colinas Com Python"}, {"image": "_images/Sketch27014711.png", "changed": "2019-02-13 10:10:13", "presentation": "gitsvn.html", "title": "GIT + GIT-SVN"}, {"image": "_images/git-workflow-gitflow.png", "changed": "2019-02-13 10:10:13", "presentation": "gitflow.html", "title": "GIT Flow"}, {"image": "_images/rust.png", "changed": "2019-02-15 09:45:46", "presentation": "rust-legal.html", "title": "O Que Rust Tem de Legal"}, {"image": "_images/tchelinux.png", "changed": "2019-10-16 11:02:29", "presentation": "tchelinux.html", "title": "O Que \u00c9 o Tchelinux?"}, {"image": "_images/osi_keyhole_300X300_90ppi_0.png", "changed": "2019-11-14 11:27:47", "presentation": "porque-como-opensource.html", "title": "Por que e Como Participar de Projetos Open Source"}, {"image": "_images/rust-ferris.png", "changed": "2019-11-14 11:27:47", "presentation": "porque-rust.html", "title": "Porque Voc\u00ea Deveria Aprender Rust"}, {"image": "_images/poa.jpg", "changed": "2019-02-13 10:10:13", "presentation": "pypoa.html", "title": "PyPoa 2014"}, {"image": "_images/snake-six.jpg", "changed": "2019-02-13 10:10:13", "presentation": "python23six.html", "title": "Python 2 + 3 = Six"}, {"image": "_images/python.jpg", "changed": "2019-02-13 10:10:13", "presentation": "python36.html", "title": "Python 3.6"}, {"image": "_images/Seascapeshd.png", "changed": "2019-02-13 10:10:13", "presentation": "rest.html", "title": "ReST"}, {"image": "_images/rustlatam.png", "changed": "2019-04-16 18:16:30", "presentation": "rustlatam-2019.html", "title": "Rust Latam 2019"}, {"image": "_images/rust-ferris.png", "changed": "2019-07-03 09:56:18", "presentation": "quick-rust.html", "title": "R\u00e1pida Introdu\u00e7\u00e3o ao Rust"}, {"image": "_images/Eau_Rouge_1997.jpg", "changed": "2019-02-13 10:10:13", "presentation": "spa.html", "title": "SPA"}, {"image": "_images/streamprocessing.jpg", "changed": "2019-11-14 11:27:47", "presentation": "intro-stream-processing.html", "title": "Uma N\u00e3o-Gentil Introdu\u00e7\u00e3o ao Stream Processing"}]

89
intro-stream-processing.html

@ -54,10 +54,6 @@
color: white;
}
img {
max-height: 90%;
}
td.seen {
font-style: italic;
font-weight: bold;
@ -72,6 +68,11 @@
.reveal h1 {
font-size: 3em !important;
}
.plain {
background-color: white !important;
padding: 10px !important;
}
</style>
</head>
@ -91,7 +92,8 @@
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>
@ -117,45 +119,18 @@
<img class="stretch" src="_images/streamprocessing-aws.png" alt="Lista de pontos de presença da CDN da Amazon" />
<aside class="notes">
</aside>
</section>
<section>
<h3>O que é uma CDN</h3>
</section>
<section>
<img class="stretch plain" src="_images/streamprocessing-connection.png" alt="" />
<aside class="notes">
Numa conexão "normal", o seu computador conecta no
modem, que se conecta em um servidor do seu
provedor, que se conecta em outro servidor, que se
conecta em outro, que se conecta em outro até que,
finalmente, ele chega ao servidor que você
realmente quer.
</aside>
</section>
<section>
<img class="stretch plain" src="_images/streamprocessing-cdn.png" alt="" />
<aside class="notes">
Com uma CDN, ao invés do servidor do provedor
atravessar toda a internet até chegar ao servidor
de destino, o servidor da CDN verifica se ele tem o
arquivo requisitado e, se tiver, responde
imediatamente.
Quem sai ganhando com uma CDN?
- O usuário, já que a resposta vem mais rápida.
- O cliente da CDN, pois ele não vai precisar ter
um servidor ou uma banda larga para poder responder
todos os usuários, já que alguns vão ficar somente
na CDN.
- O provedor, já que ele tem que pagar qualquer
tráfego que saia da sua rede.
Essa não é uma apresentação sobre CDN, mas como a
apresentação requer algo que gere dados de forma
contínua, eu vou usar CDN como exemplo, até porque
trabalhei com isso.
CDN nada mais é que um cache distribuído; ao invés
de todo mundo ir até o servidor de origem, os dados
são entregues por um servidor mais próximo do cliente.
Assim temos um sistema distribuído (vários servidores)
que não tem pausa (porque os vários servidores estão
o tempo todo entregando dados).
</aside>
</section>
@ -195,6 +170,8 @@
</section>
<section>
<h2>"Read Ready"</h2>
<img class="stretch" src="_images/streamprocessing-read-ready.jpg" alt="">
</section>
@ -324,6 +301,14 @@
</ul>
</section>
<section>
<ul>
<li><strong>E</strong><span class="fragment">xtract</span></li>
<li><strong>T</strong><span class="fragment">ransform</span></li>
<li><strong>L</strong><span class="fragment">oad</span></li>
</ul>
</section>
<section>
<p>Batch processing seria o caso de processar os dados de um dia.</p>
@ -466,9 +451,9 @@ light.switch()</code></pre>
<section>
<ul>
<li><code>(map lambda iterator)</code></li>
<li><code>(fold lambda iterator start)</code></li>
<li><code>(filter lambda iterator start)</code></li>
<li><code>(map lambda iterable)</code></li>
<li><code>(fold lambda iterable start)</code></li>
<li><code>(filter lambda iterable)</code></li>
</ul>
</section>
@ -525,15 +510,15 @@ light.switch()</code></pre>
</section>
<section>
<img class="stretch" src="_images/streamprocessing-streamprocessing.png" alt=""/>
<img class="plain stretch" src="_images/streamprocessing-streamprocessing.png" alt=""/>
</section>
<section>
<img class="stretch" src="_images/streamprocessing-pipeline.png" alt="" />
<img class="plain stretch" src="_images/streamprocessing-pipeline.png" alt="" />
</section>
<section>
<img class="stretch" src="_images/unclephil-flinkpipelinereal.png" alt="" />
<img class="plain stretch" src="_images/unclephil-flinkpipelinereal.png" alt="" />
</section>
<section>
@ -625,8 +610,8 @@ light.switch()</code></pre>
<section data-background='_images/thats-all-folks.jpg'>
<ul class="empty fragment semi-opaque">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>

6
porque-como-opensource.html

@ -71,7 +71,8 @@
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>
@ -586,7 +587,8 @@
<div class="fragment semi-opaque">
<ul>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>

393
porque-rust.html

@ -81,11 +81,11 @@
<h2 class="semi-opaque">Porque Você DEVE Aprender Rust</h2>
</section>
<aside class="notes">
Eu ia falar do porque o pessoal deveria aprender Rust,
mas acho que faz mais sentido dizer que o pessoal TEM
QUE aprender Rust.
</aside>
<aside class="notes">
Eu ia falar do porque o pessoal deveria aprender Rust,
mas acho que faz mais sentido dizer que o pessoal TEM
QUE aprender Rust.
</aside>
</section>
<section>
@ -95,7 +95,8 @@
<div>
<ul class="empty">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>
@ -103,64 +104,64 @@
</section>
</section>
<section>
<section>
<h2>História</h2>
<ul>
<li>Criada em 2006 por Graydon Hoare.</li>
<li>Patrocinada pela Mozilla em 2009.</li>
<li>Versão 1.0 em 2015.</li>
<li>Versão atual: 1.37</li>
</ul>
</section>
<aside class="notes">
Parte burocrática da apresentação.
PS: Pode ser que, quando você essa apresentação, 1.37
não seja mais a versão atual; a cada 6 semanas, sai uma
nova versão do compilador.
</aside>
</section>
<section>
<section>
<h2>
História
<img src="_images/AYV1X0yv.png" alt="" style="width:100px;margin:0">
</h2>
<p>
Basic (com números e estruturado), dBase III Plus,
Clipper, Pascal, Cobol, Delphi (ObjectPascal),
C, C++, ActionScript (Flash), PHP, JavaScript,
Python, Objective-C, Clojure, Java, Scala
<strong>, Rust.</strong>
</p>
<aside class="notes">
Um porque de história sobre esse que lhes apresenta
a linguagem:
Eu já trabalhei com todas essas linguagens. Fora
essas, eu ainda sei ler
- Perl
- Ruby
- Haskell
- Swift
</aside>
</section>
<section>
<img src="_images/my_opinion.jpg" alt="">
<aside class="notes">
Alerta: Tudo aqui é a minha opinião sobre Rust e o
contexto geral de linguagens de programação.
</aside>
</section>
<section>
<section>
<h2>História</h2>
<ul>
<li>Criada em 2006 por Graydon Hoare.</li>
<li>Patrocinada pela Mozilla em 2009.</li>
<li>Versão 1.0 em 2015.</li>
<li>Versão atual: 1.38</li>
</ul>
</section>
<aside class="notes">
Parte burocrática da apresentação.
PS: Pode ser que, quando você essa apresentação, 1.38
não seja mais a versão atual; a cada 6 semanas, sai uma
nova versão do compilador.
</aside>
</section>
<section>
<section>
<h2>
História
<img src="_images/AYV1X0yv.png" alt="" style="width:100px;margin:0">
</h2>
<p>
Basic (com números e estruturado), dBase III Plus,
Clipper, Pascal, Cobol, Delphi (ObjectPascal),
C, C++, ActionScript (Flash), PHP, JavaScript,
Python, Objective-C, Clojure, Java, Scala
<strong>, Rust.</strong>
</p>
<aside class="notes">
Um porque de história sobre esse que lhes apresenta
a linguagem:
Eu já trabalhei com todas essas linguagens. Fora
essas, eu ainda sei ler
- Perl
- Ruby
- Haskell
- Swift
</aside>
</section>
<section>
<img src="_images/my_opinion.jpg" alt="">
<aside class="notes">
Alerta: Tudo aqui é a minha opinião sobre Rust e o
contexto geral de linguagens de programação.
</aside>
</section>
<section>
<div>
@ -172,23 +173,23 @@
-- Alan Perlis, "ALGOL"
</div>
<aside class="notes">
Apesar de ter todas essas linguagens, eu ainda
preciso passar essa frase do Perlis, porque
realmente Rust mudou a forma como eu penso em
outras linguagens.
Apesar do forte do Rust ser a proteção de memória,
eu posso oficialmente dizer que agora eu entendo
generics muito melhor por causa da forma como o
Rust trabalha.
</aside>
<aside class="notes">
Apesar de ter todas essas linguagens, eu ainda
preciso passar essa frase do Perlis, porque
realmente Rust mudou a forma como eu penso em
outras linguagens.
Apesar do forte do Rust ser a proteção de memória,
eu posso oficialmente dizer que agora eu entendo
generics muito melhor por causa da forma como o
Rust trabalha.
</aside>
</section>
</section>
</section>
<section>
<section>
<h2>1. A Linguagem Mais Amada</h2>
<h2>1. A Linguagem Mais Amada</h2>
<p>
<a href="https://insights.stackoverflow.com/survey/2019">
A linguagem mais amada segundo o StackOverflow
@ -247,18 +248,18 @@
de alto nível que estamos acostumados com outras
linguagens.
Honestamente, se surgir uma nova linguagem que
tenha mais proteções de memória, com performance
ainda melhor que C mas eu tiver que escrever uma
lista encadeada mais uma vez, eu destruo todas as
coisas tecnológicas ao meu redor...
Honestamente, se surgir uma nova linguagem que
tenha mais proteções de memória, com performance
ainda melhor que C mas eu tiver que escrever uma
lista encadeada mais uma vez, eu destruo todas as
coisas tecnológicas ao meu redor...
E vou plantar batata.
E vou plantar batata.
... porque aprendemos absolutamente NADA sobre
desenvolvimento.
</aside>
</section>
... porque aprendemos absolutamente NADA sobre
desenvolvimento.
</aside>
</section>
</section>
<section>
@ -268,29 +269,29 @@
<section>
<pre><code class="hljs rust" data-trim>
fn main() -&lt; int{
fn main() -&gt; int{
let a = 2;
a = 3;
println!("{}", a);
0
0
}
</code></pre>
<aside class="notes">
Primeiro contato com Rust: assim como C, tem uma
função `main`, que pode retornar um inteiro; para
atribuir variáveis, usa-se `let`.
<aside class="notes">
Primeiro contato com Rust: assim como C, tem uma
função `main`, que pode retornar um inteiro; para
atribuir variáveis, usa-se `let`.
Uma coisa: Rust é "strong and statically typed", o
que sigifnica que a linguagem tem tipos, mas por
padrão o compilador tenta inferir o tipo.
Uma coisa: Rust é "strong and statically typed", o
que sigifnica que a linguagem tem tipos, mas por
padrão o compilador tenta inferir o tipo.
Uma outra forma de escrever o let seria:
Uma outra forma de escrever o let seria:
```
let a: u8 = 2;
```
</aside>
```
let a: u8 = 2;
```
</aside>
</section>
<section>
@ -321,11 +322,11 @@ fn main() -&lt; int{
| ^^^^^ cannot assign twice to immutable variable
</code></pre>
<aside class="notes">
... mas se tu olhar com calma, tu vai ver que não só o
compilador disse, claramente, o que era o problema...
</aside>
</section>
<aside class="notes">
... mas se tu olhar com calma, tu vai ver que não só o
compilador disse, claramente, o que era o problema...
</aside>
</section>
<section data-transition="fade">
<pre><code class="hljs" data-trim data-line-numbers="5">
@ -338,20 +339,20 @@ fn main() -&lt; int{
| ^^^^^ cannot assign twice to immutable variable
</code></pre>
<aside class="notes">
... como também vai dizer como resolver o problema.
</aside>
</section>
<aside class="notes">
... como também vai dizer como resolver o problema.
</aside>
</section>
<section>
<img class="stretch" src="_images/Sorry-bout-that.gif" alt="">
<aside class="notes">
Ou seja, o compilador não só vai lá e diz: ERRADO!
<aside class="notes">
Ou seja, o compilador não só vai lá e diz: ERRADO!
... ele ainda dá uma dica de como resolver esse
problema.
</aside>
... ele ainda dá uma dica de como resolver esse
problema.
</aside>
</section>
</section>
@ -506,6 +507,14 @@ fn main() {
</aside>
</section>
<section>
<h4>Drop</h4>
<pre><code class="hljs rust fragment">
pub fn drop&lt;T&gt;(_x: T) { }
</code></pre>
</section>
<section>
<h3>Regras do Borrow Checker</h3>
@ -547,36 +556,8 @@ fn main() {
</aside>
</section>
<section data-transition="fade">
<pre><code class="hljs go" data-trim>presente := Presente { ... }
canal &lt;- presente
&nbsp;</code></pre>
<aside class="notes">
Num exemplo em Go, criamos uma estrutura e passamos
essa estrutura para outra thread através de um
canal.
</aside>
</section>
<section data-transition="fade">
<pre><code class="hljs go" data-trim>presente := Presente { ... }
canal &lt;- presente
presente.abrir()</code></pre>
<aside class="notes">
... e depois de passar o presente pra outra pessoa,
nós abrimos o presente.
Mas se estamos entregando um presente pra alguém,
como é que estamos abrindo o presente?
O borrow checker não permite esse tipo de coisa:
Ele irá barrar a função atual de continuar
utilizando a variável porque, afinal de contas,
agora a região de memória pertence à outra função
(uma função que está rodando em outra thread).
</aside>
<section>
<img class="stretch" src="_images/processor-speed.png" alt="">
</section>
<section>
@ -598,8 +579,8 @@ presente.abrir()</code></pre>
<img class="stretch" src="_images/senta-que-la-vem-historia.gif" alt="">
<p class="fragment"><code>localtime</code></p>
<p class="fragment"><code>SimpleDateFormatter</code></p>
<p class="fragment"><code>localtime</code></p>
<p class="fragment"><code>SimpleDateFormatter</code></p>
<aside class="notes">
A muito tempo atrás, eu estava ajudando uma colega
@ -779,11 +760,11 @@ OK(())
<section>
<section>
<h2>7. Generics/Traits</h2>
</section>
<h2>7. Generics/Traits</h2>
</section>
<section>
<h3>Structs</h3>
<section>
<h3>Structs</h3>
<pre><code class="hljs rust" data-trim>
struct Gift {
@ -797,34 +778,34 @@ struct Gift {
</aside>
</section>
<section>
<h3>Structs</h3>
<section>
<h3>Structs</h3>
<pre><code class="hljs rust" data-trim>
<pre><code class="hljs rust" data-trim>
let presente = Gift { package_color: "red", content: "A GIFT!" };
</code></pre>
</section>
</code></pre>
</section>
<section>
<h3>Structs Genéricas</h3>
<section>
<h3>Structs Genéricas</h3>
<pre><code class="hljs rust" data-trim>
struct Point&lt;T&gt; {
x: T,
y: T
}
</code></pre>
</section>
</section>
<section>
<h3>Structs Genéricas</h3>
<section>
<h3>Structs Genéricas</h3>
<pre><code class="hljs rust" data-trim>
<pre><code class="hljs rust" data-trim>
let my_point = Point&lt;f32&gt;(x: 1.0, y: 2.0);
</code></pre>
</section>
</code></pre>
</section>
<section>
<h3>Enums Generics</h3>
<h3>Enums Generics</h3>
<pre><code class="hljs rust" data-trim>
enum Result&lt;T, E&gt; {
@ -835,7 +816,7 @@ enum Result&lt;T, E&gt; {
</section>
<section>
<h3>Traits</h3>
<h3>Traits</h3>
<pre><code class="hljs rust" data-trim>
trait Summary {
@ -872,38 +853,38 @@ fn get_summary&lt;T&gt;(summarizable: T) -&gt; String
</section>
</section>
<section>
<section>
<h2>
<a href="https://doc.rust-lang.org/cargo/">
8. Cargo
</a>
</h2>
<p>"Cargo is the Rust package manager"</p>
<p>
"Cargo downloads your Rust package’s dependencies,
compiles your packages, makes distributable
packages, and uploads them to crates.io, the Rust
community’s package registry."
</p>
</section>
</section>
<section>
<section>
<h2>9. Tests</h2>
<pre><code class="hljs rust" data-trim>
<section>
<section>
<h2>
<a href="https://doc.rust-lang.org/cargo/">
8. Cargo
</a>
</h2>
<p>"Cargo is the Rust package manager"</p>
<p>
"Cargo downloads your Rust package’s dependencies,
compiles your packages, makes distributable
packages, and uploads them to crates.io, the Rust
community’s package registry."
</p>
</section>
</section>
<section>
<section>
<h2>9. Tests</h2>
<pre><code class="hljs rust" data-trim>
#[cfg(test)]
mod tests {
#[test]
fn testing() {
}
}
</code></pre>
</section>
</code></pre>
</section>
<section>
<pre><code>
@ -916,7 +897,7 @@ running 1 test
test tests::testing ... ok
</code></pre>
</section>
</section>
</section>
<section>
<section>
@ -971,23 +952,23 @@ fn call_isan(num: &amp;str) -&gt; Result&lt;Success, Error&gt; {
</section>
</section>
<section>
<h2>E agora?</h2>
<ul>
<li><a href="https://rustup.rs/">rustup</a></li>
<li><a href="https://doc.rust-lang.org/book/">The Rust Book</a></li>
<li><a href="https://doc.rust-lang.org/stable/rust-by-example/">Rust By Example</a></li>
<li><a href="https://play.rust-lang.org/?version=stable">Rust Playground</a></li>
<li><a href="https://t.me/rustlangbr">Rust Brasil (Telegram)</a></li>
</ul>
</section>
<section>
<h2>E agora?</h2>
<ul>
<li><a href="https://rustup.rs/">rustup</a></li>
<li><a href="https://doc.rust-lang.org/book/">The Rust Book</a></li>
<li><a href="https://doc.rust-lang.org/stable/rust-by-example/">Rust By Example</a></li>
<li><a href="https://play.rust-lang.org/?version=stable">Rust Playground</a></li>
<li><a href="https://t.me/rustlangbr">Rust Brasil (Telegram)</a></li>
</ul>
</section>
<section data-background='_images/thats-all-folks.jpg'>
<div class="semi-opaque">
<ul class="empty">
<li>Júlio Biason</li>
<li>https://functional.cafe/@juliobiason</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.net">http://presentations.juliobiason.net</a></li>
</ul>

670
terminimal.css

@ -0,0 +1,670 @@
:root {
--accent: rgb(35,176,255);
--accent-alpha-70: rgba(35,176,255,.7);
--accent-alpha-20: rgba(35,176,255,.2);
--background: #1D212C;
--color: white;
--border-color: rgba(255, 255, 255, .1)
}
.button-container {
display:table;
margin-left:auto;
margin-right:auto
}
button,
.button,
a.button {
position:relative;
display:flex;
align-items:center;
justify-content:center;
padding:8px 18px;
margin-bottom:5px;
text-align:center;
border-radius:8px;
border:1px solid transparent;
appearance:none;
cursor:pointer;
outline:none
}
button.outline,
.button.outline,
a.button.outline {
background:transparent;
box-shadow:none;
padding:8px 18px
}
button.outline :hover,
.button.outline :hover,
a.button.outline :hover {
transform:none;
box-shadow:none
}
button.primary,
.button.primary,
a.button.primary {
box-shadow:0 4px 6px rgba(50,50,93,0.11),0 1px 3px rgba(0,0,0,0.08)
}
button.primary:hover,
.button.primary:hover,
a.button.primary:hover {
box-shadow:0 2px 6px rgba(50,50,93,0.21),0 1px 3px rgba(0,0,0,0.08)
}
button.link,
.button.link,
a.button.link {
background:none;
font-size:1rem
}
button.small,
.button.small,
a.button.small {
font-size:.8rem
}
button.wide,
.button.wide,
a.button.wide {
min-width:200px;
padding:14px 24px
}
a.read-more,
a.read-more:hover,
a.read-more:active {
display:inline-flex;
background:none;
box-shadow:none;
padding:0;
max-width:100%
}
.code-toolbar {
margin-bottom:20px
}
.code-toolbar .toolbar-item a {
position:relative;
display:inline-flex;
align-items:center;
justify-content:center;
padding:3px 8px;
margin-bottom:5px;
text-align:center;
font-size:13px;
font-weight:500;
border-radius:8px;
border:1px solid transparent;
appearance:none;
cursor:pointer;
outline:none
}
.header {
display:flex;
flex-direction:column;
position:relative;
}
.header__inner {
display:flex;
align-items:center;
justify-content:space-between
}
.header__logo {
display:flex;
flex:1
}
.header__logo:after {
content:'';
background:repeating-linear-gradient(90deg, var(--accent), var(--accent) 2px, transparent 0, transparent 16px);
display:block;
width:100%;
right:10px
}
.header__logo a {
flex:0 0 auto;
max-width:100%
}
.header .menu {
margin:20px 0 0
}
.header .menu__inner {
display:flex;
flex-wrap:wrap;
list-style:none;
margin:0;
padding:0
}
.header .menu__inner li.active {
color:var(--accent-alpha-70)
}
.header .menu__inner li:not(:last-of-type) {
margin-right:20px;
margin-bottom:10px;
flex:0 0 auto
}
.header .menu__sub-inner {
position:relative;
list-style:none;
padding:0;
margin:0
}
.header .menu__sub-inner:not(:only-child) {
margin-left:20px
}
.header .menu__sub-inner-more {
position:absolute;
background:var(--background);
box-shadow:var(--shadow);
color:white;
border:2px solid;
margin:0;
padding:10px;
list-style:none;
z-index:99;
top:35px;
left:0
}
.header .menu__sub-inner-more-trigger {
color:var(--accent);
user-select:none;
cursor:pointer
}
.header .menu__sub-inner-more li {
margin:0;
padding:5px;
white-space:nowrap
}
.logo {
display:flex;
align-items:center;
text-decoration:none;
background:var(--accent);
color:black;
padding:5px 10px
}
html {
box-sizing:border-box
}
*,
*:before,
*:after {
box-sizing:inherit
}
body {
margin:0;
padding:0;
font-family:Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
font-size:1rem;
line-height:1.54;
background-color:var(--background);
color:var(--color);
text-rendering:optimizeLegibility;
-webkit-font-smoothing:antialiased;
-webkit-overflow-scrolling:touch;
-webkit-text-size-adjust:100%
}
@media (max-width: 683px) {
body {
font-size:1rem
}
}
h1,
h2,
h3,
h4,
h5,
h6 {
display:flex;
align-items:center;
font-weight:bold;
line-height:1.3
}
h1 {
font-size:1.4rem
}
h2 {
font-size:1.3rem
}
h3 {
font-size:1.2rem
}
h4,
h5,
h6 {
font-size:1.15rem
}
a {
color:inherit
}
img {
display:block;
max-width:100%
}
img.left {
margin-right:auto
}
img.center {
margin-left:auto;
margin-right:auto
}
img.right {
margin-left:auto
}
p {
margin-bottom:20px
}
figure {
display:table;
max-width:100%;
margin:25px 0
}
figure.left img {
margin-right:auto
}
figure.center img {
margin-left:auto;
margin-right:auto
}
figure.right img {
margin-left:auto
}
figure figcaption {
font-size:14px;
padding:5px 10px;
margin-top:5px;
background:var(--accent);
color:var(--background)
}
figure figcaption.left {
text-align:left
}
figure figcaption.center {
text-align:center
}
figure figcaption.right {
text-align:right
}
code {
font-family:Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
font-feature-settings:normal;
background:var(--accent-alpha-20);
padding:1px 6px;
margin:0 2px;
font-size:.95rem
}
pre {
font-family:Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
padding:20px;
font-size:.95rem;
overflow:auto;
border-top:1px solid rgba(255,255,255,0.1);
border-bottom:1px solid rgba(255,255,255,0.1)
}
@media (max-width: 683px) {
pre {
white-space:pre-wrap;
word-wrap:break-word
}
}
blockquote {
margin:8px 50px;
padding:8px
}
@media (max-width: 683px) {
blockquote {
padding-right:0
}
}
blockquote:before {
content:'”';
font-family:Georgia, serif;
font-size:3.875rem;
position:absolute;
left:-40px;
top:-20px
}
blockquote p:first-of-type {
margin-top:0
}
blockquote p:last-of-type {
margin-bottom:0
}
blockquote p {
position:relative
}
blockquote p:before {
content:'>';
display:block;
position:absolute;
left:-25px;
color:var(--accent)
}
table {
table-layout:fixed;
border-collapse:collapse;
width:100%;
margin:40px 0
}
table,
th,
td {
border:1px dashed var(--accent);
padding:10px
}
th {
color:var(--accent)
}
ul,
ol {
margin-left:30px;
padding:0
}
ul li,
ol li {
position:relative
}
@media (max-width: 683px) {
ul,
ol {
margin-left:20px
}
}
ul ul,
ul ol,
ol ul,
ol ol {
margin-top:20px
}
ol ol {
list-style-type:lower-alpha
}
.container {
display:flex;
flex-direction:column;
padding:40px;
max-width:864px;
min-height:100vh;
margin:0 auto
}
@media (max-width: 683px) {
.container {
padding:20px
}
}
.content {
display:flex
}
hr {
width:100%;
border:none;
background:var(--border-color);
height:1px
}
.hidden {
display:none
}
.posts {
/* margin:0 auto */
}
.post {
width:100%;
text-align:left;
margin:8px auto;
padding:20px 0
}
@media (max-width: 899px) {
.post {
max-width:660px
}
}
.post .post-meta,
.post .post-meta-inline {
font-size:1rem;
margin-bottom:10px;
color:var(--accent-alpha-70)
}
.post-meta-inline {
display:inline
}
.post-title {
position:relative;
color:var(--accent);
margin:0 0 8px;
border-bottom:var(--border);
font-weight:normal
}
.post-title a {
text-decoration:none
}
.post .post-tags,
.post .post-tags-inline {
margin-bottom:20px;
font-size:1rem;
opacity:.5
}
.post-tags {
display:block
}
.post-tags-inline {
display:inline
}
@media (max-width: 683px) {
.post-tags-inline {
display:block
}
}
.post-content {
margin-top:8px
}
.post-cover {
border:20px solid var(--accent);
background:transparent;
margin:40px 0;
padding:20px
}
@media (max-width: 683px) {
.post-cover {
padding:10px;
border-width:10px
}
}
.post ul {
list-style:none
}
.post ul li:before {
content:'►';
position:absolute;
left:-20px;
color:var(--accent)
}
.post--regulation h1 {
justify-content:center
}
.post--regulation h2 {
justify-content:center;
margin-bottom:10px
}
.post--regulation h2+h2 {
margin-top:-10px;
margin-bottom:20px
}
.post-list .post-date {
color:var(--accent-alpha-70);
text-decoration:none
}
.post-list a {
text-decoration:none
}
.post-list .post-list-title {
text-decoration:underline
}
.post-list .post-tag {
text-decoration:underline
}
.pagination {
margin-top:50px
}
.pagination__title {
display:flex;
text-align:center;
position:relative;
margin:100px 0 20px
}
.pagination__title-h {
text-align:center;
margin:0 auto;
padding:5px 10px;
background:var(--background);
font-size:.8rem;
text-transform:uppercase;
letter-spacing:.1em;
z-index:1
}
.pagination__title hr {
position:absolute;
left:0;
right:0;
width:100%;
margin-top:15px;
z-index:0
}
.pagination__buttons {
display:flex;
align-items:center;
justify-content:center
}
@media (max-width: 683px) {
.pagination__buttons {
flex-direction:column
}
}
.button {
position:relative;
display:inline-flex;
align-items:center;
justify-content:center;
font-size:1rem;
border-radius:8px;
max-width:40%;
padding:0;
cursor:pointer;
appearance:none
}
@media (max-width: 683px) {
.button {
max-width:80%
}
}
.button+.button {
margin-left:10px
}
.button a {
display:flex;
padding:8px 16px;
text-overflow:ellipsis;
white-space:nowrap;
overflow:hidden
}
.button__text {
text-overflow:ellipsis;
white-space:nowrap;
overflow:hidden
}
.footer {
padding:40px 0;
flex-grow:0;
opacity:.5
}
.footer__inner {
display:flex;
align-items:center;
justify-content:space-between;
margin:0;
width:760px;
max-width:100%
}
@media (max-width: 899px) {
.footer__inner {
flex-direction:column
}
}
.footer a {
color:inherit
}
.footer .copyright {
display:flex;
flex-direction:row;
align-items:center;
font-size:1rem;
color:var(--light-color-secondary)
}
.footer .copyright--user {
margin:auto;
text-align:center
}
.footer .copyright>*:first-child:not(:only-child) {
margin-right:10px
}
@media (max-width: 899px) {
.footer .copyright>*:first-child:not(:only-child) {
border:none;
padding:0;
margin:0
}
}
@media (max-width: 899px) {
.footer .copyright {
flex-direction:column;
margin-top:10px
}
}
@media (max-width: 899px) {
.footer .copyright-theme-sep {
display:none
}
}
@media (max-width: 899px) {
.footer .copyright-theme {
font-size:0.75rem
}
}
.footnote-definition {
margin-bottom:8px
}
.footnote-definition p {
display:inline
}
/*!
* Hack typeface https://github.com/source-foundry/Hack
* License: https://github.com/source-foundry/Hack/blob/master/LICENSE.md
*/@font-face {
font-family:'Hack';
src:url("fonts/hack-regular.woff2?sha=3114f1256") format("woff2"),
url("fonts/hack-regular.woff?sha=3114f1256") format("woff");
font-weight:400;
font-style:normal
}
@font-face {
font-family:'Hack';
src:url("fonts/hack-bold.woff2?sha=3114f1256") format("woff2"),
url("fonts/hack-bold.woff?sha=3114f1256") format("woff");
font-weight:700;
font-style:normal
}
@font-face {
font-family:'Hack';
src:url("fonts/hack-italic.woff2?sha=3114f1256") format("woff2"),
url("fonts/hack-italic.woff?sha=3114f1256") format("woff");
font-weight:400;
font-style:italic
}
@font-face {
font-family:'Hack';
src:url("fonts/hack-bolditalic.woff2?sha=3114f1256") format("woff2"),
url("fonts/hack-bolditalic.woff?sha=3114f1256") format("woff");
font-weight:700;
font-style:italic
}
.hide {
display: none;
}
Loading…
Cancel
Save