Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://planet.intertwingly.net/atom.xml

  1. <?xml version="1.0"?>
  2. <feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
  3.  <title>Planet Intertwingly</title>
  4.  <updated>2019-08-18T19:29:51Z</updated>
  5.  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  6.  <author>
  7.    <name>Sam Ruby</name>
  8.    <email>[email protected]</email>
  9.  </author>
  10.  <id>http://planet.intertwingly.net/atom.xml</id>
  11.  <link href="http://planet.intertwingly.net/atom.xml" rel="self" type="application/atom+xml"/>
  12.  <link href="http://pubsubhubbub.appspot.com/" rel="hub"/>
  13.  <link href="http://planet.intertwingly.net/" rel="alternate"/>
  14.  
  15.  <entry xml:lang="en-US">
  16.    <id>https://www.hyperorg.com/blogger/?p=16201</id>
  17.    <link href="https://www.hyperorg.com/blogger/2019/08/18/http-or-www-top-ten-reasons/" rel="alternate" type="text/html"/>
  18.    <link href="https://www.hyperorg.com/blogger/2019/08/18/http-or-www-top-ten-reasons/#comments" rel="replies" type="text/html"/>
  19.    <link href="https://www.hyperorg.com/blogger/2019/08/18/http-or-www-top-ten-reasons/feed/atom/" rel="replies" type="application/atom+xml"/>
  20.    <title xml:lang="en-US">Http or WWW? Top Ten Reasons</title>
  21.    <summary xml:lang="en-US">A geeky mailing list I’m the least geeky person on has been discussing whether https://yoursite.com is preferable to www.yoursite.com. I have no pony in this race, and am in fact against pony racing if only because it requires impossibly small jockeys, but here are my: Top Ten Reasons to prefer www to https:// Easier to […]</summary>
  22.    <updated>2019-08-18T16:11:04Z</updated>
  23.    <published>2019-08-18T15:04:58Z</published>
  24.    <category scheme="https://www.hyperorg.com/blogger" term="humor"/>
  25.    <category scheme="https://www.hyperorg.com/blogger" term="www"/>
  26.    <author>
  27.      <name>davidw</name>
  28.      <uri>http://www.johotheblog.com</uri>
  29.    </author>
  30.    <source>
  31.      <id>https://www.hyperorg.com/blogger/feed/atom/</id>
  32.      <link href="https://www.hyperorg.com/blogger" rel="alternate" type="text/html"/>
  33.      <link href="https://www.hyperorg.com/blogger/feed/atom/" rel="self" type="application/atom+xml"/>
  34.      <subtitle xml:lang="en-US">David Weinberger's blog. Let's just see what happens  - Tagline (c) 1999</subtitle>
  35.      <title xml:lang="en-US">Joho the Blog</title>
  36.      <updated>2019-08-18T16:11:04Z</updated>
  37.    </source>
  38.  </entry>
  39.  
  40.  <entry xml:lang="en-US">
  41.    <id>https://www.hyperorg.com/blogger/?p=16195</id>
  42.    <link href="https://www.hyperorg.com/blogger/2019/08/17/hillary-trump-debates-the-audition-tapes/" rel="alternate" type="text/html"/>
  43.    <link href="https://www.hyperorg.com/blogger/2019/08/17/hillary-trump-debates-the-audition-tapes/#comments" rel="replies" type="text/html"/>
  44.    <link href="https://www.hyperorg.com/blogger/2019/08/17/hillary-trump-debates-the-audition-tapes/feed/atom/" rel="replies" type="application/atom+xml"/>
  45.    <title xml:lang="en-US">Hillary-Trump Debates: The Audition Tapes</title>
  46.    <summary xml:lang="en-US">This is a re-play of something I wrote during the 2016 election. The premise is that the Clinton campaign is auditioning stand-ins for Trump to rehearse the 2016 debates with. Note that Louis CK not yet disgraced, and in any case I the last paragraph of that one is really unclear. You see, he’s snapping […]</summary>
  47.    <updated>2019-08-17T16:12:58Z</updated>
  48.    <published>2019-08-17T15:20:40Z</published>
  49.    <category scheme="https://www.hyperorg.com/blogger" term="humor"/>
  50.    <category scheme="https://www.hyperorg.com/blogger" term="politics"/>
  51.    <category scheme="https://www.hyperorg.com/blogger" term="tarantino"/>
  52.    <category scheme="https://www.hyperorg.com/blogger" term="trump"/>
  53.    <author>
  54.      <name>davidw</name>
  55.      <uri>http://www.johotheblog.com</uri>
  56.    </author>
  57.    <source>
  58.      <id>https://www.hyperorg.com/blogger/feed/atom/</id>
  59.      <link href="https://www.hyperorg.com/blogger" rel="alternate" type="text/html"/>
  60.      <link href="https://www.hyperorg.com/blogger/feed/atom/" rel="self" type="application/atom+xml"/>
  61.      <subtitle xml:lang="en-US">David Weinberger's blog. Let's just see what happens  - Tagline (c) 1999</subtitle>
  62.      <title xml:lang="en-US">Joho the Blog</title>
  63.      <updated>2019-08-17T16:12:58Z</updated>
  64.    </source>
  65.  </entry>
  66.  
  67.  <entry xml:lang="en-US">
  68.    <id>https://tantek.com/2019/228/b1/indiewebcamps-timeline-amsterdam-utrecht</id>
  69.    <link href="https://tantek.com/2019/228/b1/indiewebcamps-timeline-amsterdam-utrecht" rel="alternate" title="IndieWebCamps Timeline 2011-2019: Amsterdam to Utrecht" type="text/html"/>
  70.    <title xml:lang="en-US">IndieWebCamps Timeline 2011-2019: Amsterdam to Utrecht</title>
  71.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><div class="entry-content e-content">
  72. <aside><div class="aside">
  73. <p>
  74. While not a post directly about <a href="https://indieweb.org/2019/">IndieWeb Summit 2019</a>, this post provides a bit of background and is certainly related, so I’m including it in my series of posts about the Summit. Previous post in this series: <a href="https://tantek.com/2019/217/b1/indieweb-summit-2019-start" rel="prev">Reflecting On IndieWeb Summit: A Start</a>
  75. </p>
  76. </div></aside>
  77. <p>
  78. At the beginning of <a href="https://indieweb.org/2019/">IndieWeb Summit 2019</a>, I gave a brief talk on
  79. <a href="https://indieweb.org/2019/state-of-the-indieweb">State of the IndieWeb</a> and mentioned that:
  80. </p>
  81. <blockquote>We've scheduled lots of IndieWebCamps this year and are on track to schedule a record number of different cities as well.</blockquote>
  82. <p>
  83. I had conceived of a graphical representation of the growth of IndieWebCamps over the past nine years, both in number and across the world, but with everything else involved with setting up and running the Summit, ran out of time. However, the idea persisted, and finally this past week, with a little help from <a class="h-card" href="https://aaronparecki.com/">Aaron Parecki</a> re-implementing Dopplr’s algorithm for turning city names into colors, was able to put togther something pretty close to what I’d envisioned:
  84. </p>
  85.  
  86. <table cellpadding="0" cellspacing="0" class="indiewebcamps-timeline">
  87. <tr class="istanbul"><th><a href="https://indieweb.org/Istanbul" title="Istanbul">Istanbul</a></th><td colspan="6"/><td><a href="https://indieweb.org/2017/Istanbul" title="2017/Istanbul"> </a></td><td colspan="2"/></tr>
  88. <tr class="amsterdam"><th><a href="https://indieweb.org/Amsterdam" title="Amsterdam">Amsterdam</a></th><td colspan="8"/><td><a href="https://indieweb.org/2019/Amsterdam" title="2019/Amsterdam"> </a></td></tr>
  89. <tr class="utrecht"><th><a href="https://indieweb.org/Utrecht" title="Utrecht">Utrecht</a></th><td colspan="8"/><td><a href="https://indieweb.org/2019/Utrecht" title="2019/Utrecht"> </a></td></tr>
  90. <tr class="nuremberg"><th><a class="mw-redirect" href="https://indieweb.org/N%C3%BCrnberg" title="N&#xFC;rnberg">Nürnberg</a></th><td colspan="5"/><td><a href="https://indieweb.org/2016/Nuremberg" title="2016/Nuremberg"> </a></td><td><a href="https://indieweb.org/2017/Nuremberg" title="2017/Nuremberg"> </a></td><td><a href="https://indieweb.org/2018/Nuremberg" title="2018/Nuremberg"> </a></td><td/></tr>
  91. <tr class="dusseldorf"><th><a href="https://indieweb.org/D%C3%BCsseldorf" title="D&#xFC;sseldorf">Düsseldorf</a></th><td colspan="4"/><td><a class="mw-redirect" href="https://indieweb.org/2015/D%C3%BCsseldorf" title="2015/D&#xFC;sseldorf"> </a></td><td><a href="https://indieweb.org/2016/D%C3%BCsseldorf" title="2016/D&#xFC;sseldorf"> </a></td><td><a href="https://indieweb.org/2017/D%C3%BCsseldorf" title="2017/D&#xFC;sseldorf"> </a></td><td><a href="https://indieweb.org/2018/D%C3%BCsseldorf" title="2018/D&#xFC;sseldorf"> </a></td><td><a href="https://indieweb.org/2019/D%C3%BCsseldorf" title="2019/D&#xFC;sseldorf"> </a></td></tr>
  92. <tr class="berlin"><th><a href="https://indieweb.org/Berlin" title="Berlin">Berlin</a></th><td colspan="3"/><td><a class="mw-redirect" href="https://indieweb.org/2014/Berlin" title="2014/Berlin"> </a></td><td/><td><a href="https://indieweb.org/2016/Berlin" title="2016/Berlin"> </a></td><td><a href="https://indieweb.org/2017/Berlin" title="2017/Berlin"> </a></td><td><a href="https://indieweb.org/2018/Berlin" title="2018/Berlin"> </a></td><td><a href="https://indieweb.org/2019/Berlin" title="2019/Berlin"> </a></td></tr>
  93. <tr class="edinburgh"><th><a href="https://indieweb.org/Edinburgh" title="Edinburgh">Edinburgh</a></th><td colspan="4"/><td><a href="https://indieweb.org/2015/Edinburgh" title="2015/Edinburgh"> </a></td><td colspan="4"/></tr>
  94. <tr class="oxford"><th><a href="https://indieweb.org/Oxford" title="Oxford">Oxford</a></th><td colspan="7"/><td><a href="https://indieweb.org/2018/Oxford" title="2018/Oxford"> </a></td><td><a href="https://indieweb.org/2019/Oxford" title="2019/Oxford"> </a></td></tr>
  95. <tr class="brighton"><th><a href="https://indieweb.org/Brighton" title="Brighton">Brighton</a></th><td/><td><a class="mw-redirect" href="https://indieweb.org/2012/Brighton" title="2012/Brighton"> </a></td><td><a class="mw-redirect" href="https://indieweb.org/2013/Brighton" title="2013/Brighton"> </a></td><td><a class="mw-redirect" href="https://indieweb.org/2014/Brighton" title="2014/Brighton"> </a></td><td><a href="https://indieweb.org/2015/Brighton" title="2015/Brighton"> </a></td><td><a href="https://indieweb.org/2016/Brighton" title="2016/Brighton"> </a></td><td colspan="2"/><td><a href="https://indieweb.org/2019/Brighton" title="2019/Brighton"> </a></td></tr>
  96. <tr class="newhaven"><th><a href="https://indieweb.org/New_Haven" title="New Haven">New Haven</a></th><td colspan="8"/><td><a href="https://indieweb.org/2019/New_Haven" title="2019/New Haven"> </a></td></tr>
  97. <tr class="baltimore"><th><a href="https://indieweb.org/Baltimore" title="Baltimore">Baltimore</a></th><td colspan="7"/><td><a href="https://indieweb.org/2018/Baltimore" title="2018/Baltimore"> </a></td><td/></tr>
  98. <tr class="cambridge"><th><a href="https://indieweb.org/Cambridge" title="Cambridge">Cambridge</a></th><td colspan="3"/><td><a href="https://indieweb.org/2014/Cambridge" title="2014/Cambridge"> </a></td><td><a href="https://indieweb.org/2015/Cambridge" title="2015/Cambridge"> </a></td><td><a class="new" href="https://indieweb.org/2016/Cambridge" title="2016/Cambridge"> </a></td><td colspan="3"/></tr>
  99. <tr class="newyork"><th><a class="mw-redirect" href="https://indieweb.org/New_York" title="New York">New York</a></th><td colspan="3"/><td><a href="https://indieweb.org/2014/NYC" title="2014/NYC"> </a></td><td/><td><a href="https://indieweb.org/2016/NYC" title="2016/NYC"> </a></td><td><a href="https://indieweb.org/2017/NYC" title="2017/NYC"> </a></td><td><a href="https://indieweb.org/2018/NYC" title="2018/NYC"> </a></td><td><a href="https://indieweb.org/2019/NYC" title="2019/NYC"> </a></td></tr>
  100. <tr class="austin"><th><a href="https://indieweb.org/Austin" title="Austin">Austin</a></th><td colspan="6"/><td><a href="https://indieweb.org/2017/Austin" title="2017/Austin"> </a></td><td/><td><a href="https://indieweb.org/2019/Austin" title="2019/Austin"> </a></td></tr>
  101. <tr class="bellingham"><th><a href="https://indieweb.org/Bellingham" title="Bellingham">Bellingham</a></th><td colspan="6"/><td><a href="https://indieweb.org/2017/Bellingham" title="2017/Bellingham"> </a></td><td colspan="2"/></tr>
  102. <tr class="losangeles"><th><a href="https://indieweb.org/Los_Angeles" title="Los Angeles">Los Angeles</a></th><td colspan="2"/><td><a class="new" href="https://indieweb.org/2013/Los_Angeles" title="2013/Los Angeles"> </a></td><td colspan="2"/><td class="santamonica"><a class="mw-redirect" href="https://indieweb.org/2016/Santa_Monica" title="2016/Santa Monica"> </a></td><td colspan="3"/></tr>
  103. <tr class="sanfrancisco"><th><a class="mw-redirect" href="https://indieweb.org/San_Francisco" title="San Francisco">San Francisco</a></th><td colspan="3"/><td><a href="https://indieweb.org/2014/SF" title="2014/SF"> </a></td><td><a href="https://indieweb.org/2015/SF" title="2015/SF"> </a></td><td colspan="2"/><td><a href="https://indieweb.org/2018/SF" title="2018/SF"> </a></td><td/></tr>
  104. <tr class="portland"><th><a href="https://indieweb.org/Portland" title="Portland">Portland</a></th><td><a href="https://indieweb.org/2011" title="2011"> </a></td><td><a href="https://indieweb.org/2012" title="2012"> </a></td><td><a href="https://indieweb.org/2013" title="2013"> </a></td><td><a href="https://indieweb.org/2014" title="2014"> </a></td><td><a href="https://indieweb.org/2015" title="2015"> </a></td><td><a href="https://indieweb.org/2016" title="2016"> </a></td><td><a href="https://indieweb.org/2017" title="2017"> </a></td><td><a href="https://indieweb.org/2018" title="2018"> </a></td><td><a href="https://indieweb.org/2019" title="2019"> </a></td></tr>
  105. <tr class="years"><th/><td><a href="https://indieweb.org/2011" title="2011">2011</a></td><td><a href="https://indieweb.org/2012" title="2012">2012</a></td><td><a href="https://indieweb.org/2013" title="2013">2013</a></td><td><a href="https://indieweb.org/2014" title="2014">2014</a></td><td><a href="https://indieweb.org/2015" title="2015">2015</a></td><td><a href="https://indieweb.org/2016" title="2016">2016</a></td><td><a href="https://indieweb.org/2017" title="2017">2017</a></td><td><a href="https://indieweb.org/2018" title="2018">2018</a></td><td><a href="https://indieweb.org/2019" title="2019">2019</a></td></tr>
  106. </table>
  107. <p>
  108. I don’t know of any tools to take something like this kind of locations vs years data and graph it as such. So I built an HTML table with a cell for each IndieWebCamp, as well as cells for the colspans of empty space. Each colored cell is hyperlinked to the IndieWebCamp for that city for that year.
  109. </p>
  110. <p>
  111. 2011-2018 and over half of 2019 are IndieWebCamps (and Summits) that have already happened. 2019 includes bars for <a href="https://tantek.com/2019/221/t1/four-indiewebcamps-open-sign-ups">four upcoming IndieWebCamps, which are fully scheduled and open for sign-ups</a>.
  112. </p>
  113. <p>The table markup is copy pasted from the
  114. <a href="https://indieweb.org/Template:indiewebcamps-timeline">IndieWebCamp wiki template</a> where I built it, and you can see the template working live in the context of the <a href="https://indieweb.org/cities">IndieWebCamp Cities</a> page. I’m sure the markup could be improved, suggestions welcome!
  115. </p>
  116. </div></div>
  117.    </content>
  118.    <updated>2019-08-16T21:21:00Z</updated>
  119.    <published>2019-08-16T21:21:00Z</published>
  120.    <source>
  121.      <id>https://tantek.com/updates.atom</id>
  122.      <author>
  123.        <name>Tantek</name>
  124.        <uri>https://tantek.com/</uri>
  125.      </author>
  126.      <link href="https://tantek.com/" rel="alternate" title="Tantek &#xC7;elik" type="text/html"/>
  127.      <link href="https://tantek.com/updates.atom" rel="self" type="application/atom+xml"/>
  128.      <link href="https://pubsubhubbub.superfeedr.com/" rel="hub" type="text/html"/>
  129.      <title xml:lang="en-US">Tantek Çelik</title>
  130.      <updated>2019-08-16T21:21:00Z</updated>
  131.    </source>
  132.  </entry>
  133.  
  134.  <entry>
  135.    <id>tag:www.schneier.com,2019:/blog//2.12166</id>
  136.    <link href="https://www.schneier.com/blog/archives/2019/08/friday_squid_bl_690.html" rel="alternate" type="text/html"/>
  137.    <title>Friday Squid Blogging: Robot Squid Propulsion</title>
  138.    <summary>Interesting research: The squid robot is powered primarily by compressed air, which it stores in a cylinder in its nose (do squids have noses?). The fins and arms are controlled by pneumatic actuators. When the robot wants to move through the water, it opens a value to release a modest amount of compressed air; releasing the air all at once...</summary>
  139.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p>Interesting <a href="https://spectrum.ieee.org/automaton/robotics/robotics-hardware/robot-squid-and-robot-scallop-showcase-bioinspired-underwater-propulsion">research</a>:</p>
  140.  
  141. <blockquote><p>The squid robot is powered primarily by compressed air, which it stores in a cylinder in its nose (do squids have noses?). The fins and arms are controlled by pneumatic actuators. When the robot wants to move through the water, it opens a value to release a modest amount of compressed air; releasing the air all at once generates enough thrust to fire the robot squid completely out of the water.
  142.  
  143. </p><p>The jumping that you see at the end of the video is preliminary work; we're told that the robot squid can travel between 10 and 20 meters by jumping, whereas using its jet underwater will take it just 10 meters. At the moment, the squid can only fire its jet once, but the researchers plan to replace the compressed air with something a bit denser, like liquid CO2, which will allow for extended operation and multiple jumps. There's also plenty of work to do with using the fins for dynamic control, which the researchers say will "reveal the superiority of the natural flying squid movement."</p></blockquote>
  144.  
  145. <p>I can't find the paper online.</p>
  146.  
  147. <p>As usual, you can also use this squid post to talk about the security stories in the news that I haven't covered.</p>
  148.  
  149. <p>Read my blog posting guidelines <a href="https://www.schneier.com/blog/archives/2017/03/commenting_poli.html">here</a>.</p></div>
  150.    </content>
  151.    <updated>2019-08-16T21:05:53Z</updated>
  152.    <published>2019-08-16T21:05:53Z</published>
  153.    <category label="robotics" scheme="http://www.sixapart.com/ns/types#tag" term="robotics"/>
  154.    <category label="squid" scheme="http://www.sixapart.com/ns/types#tag" term="squid"/>
  155.    <author>
  156.      <name>Bruce Schneier</name>
  157.    </author>
  158.    <source>
  159.      <id>tag:www.schneier.com,2014-06-11:/blog//2</id>
  160.      <link href="https://www.schneier.com/blog/" rel="alternate" type="text/html"/>
  161.      <link href="https://www.schneier.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
  162.      <subtitle>A blog covering security and security technology.</subtitle>
  163.      <title>Schneier on Security</title>
  164.      <updated>2019-08-16T21:05:53Z</updated>
  165.    </source>
  166.  </entry>
  167.  
  168.  <entry xml:lang="en-US">
  169.    <id>http://redmonk.com/sogrady/?p=5788</id>
  170.    <link href="http://feedproxy.google.com/~r/tecosystems/~3/HvgpVta6Mzo/" rel="alternate" type="text/html"/>
  171.    <title xml:lang="en-US">Lighting Out for the Territories</title>
  172.    <summary xml:lang="en-US">Months ago when scheduling my annual block of August vacation time, I made the curious decision to split up my three weeks with a work week in the middle. There was some rationale for this, I’m fairly sure, but I can no longer remember what it was and frankly don’t care: if I could go</summary>
  173.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://redmonk.com/sogrady/files/2019/08/IMG_20190809_134858.jpg"><img alt="" class="aligncenter size-large wp-image-5789" height="768" src="http://redmonk.com/sogrady/files/2019/08/IMG_20190809_134858-1024x768.jpg" width="1024"/></a></p>
  174. <p>Months ago when scheduling my annual block of August vacation time, I made the curious decision to split up my three weeks with a work week in the middle. There was some rationale for this, I’m fairly sure, but I can no longer remember what it was and frankly don’t care: if I could go back in time to punch myself for this stupidity, I would.</p>
  175. <p>At any rate, after an idyllic time last week in one of my favorite places in the world up north with the family and our new giant, inflatable unicorn friend, my work week is now concluded which means that it’s time for my vacation to resume. That’s the good news.</p>
  176. <p>The bad news is that this is the portion of my vacation most likely to result in a physical injury to my person, as I’ll be spending the time working on, around, and potentially on top of our house (don’t mentiobn that last part to Kate, please). This is the portion of the vacation that leads coworkers to request hazmat suits and eye protection, friends to send me large packages of bandaids and my wife to establish draconian rules on both approved tasks and required protection equipment to complete them.</p>
  177. <p>As for work, I’m pretty sure that everyone who is waiting on a response for me has it, but I’m entirely sure that a lack of a response while I’m out is not likely to result in anyone dying or even being slightly maimed. So don’t look for me on email, Slack or similar: I’ll be busy pulling doors off hinges or holding a rented belt sander to the side of our house. Unfortunately for you, however, I probably will be on Twitter posting pictures of embarassingly amateur home improvement efforts.</p>
  178. <p>As always, I apologize in advance for whatever happens while I’m out. Large and frequently bad things tend to happen in markets, global climate and geopolitical spheres when I’m away from my desk. I have declined to inform Poseidon of which day I’m planning to take a day off from poorly imitating a contractor to make my annual pilgrimmage up to the waterfall this summer, so all of you in Maine can probably look forward to at least one nice day out of the next stretch.</p>
  179. <p>With that, I’m off to go set my vacation autoresponder. Be excellent to each other while I’m out, and I’ll see you all in September.</p>
  180. <img alt="" height="1" src="http://feeds.feedburner.com/~r/tecosystems/~4/HvgpVta6Mzo" width="1"/></div>
  181.    </content>
  182.    <updated>2019-08-16T20:41:20Z</updated>
  183.    <category term="Uncategorized"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://redmonk.com/sogrady/2019/08/16/lighting-out-for-the-territories-2019/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=lighting-out-for-the-territories-2019</feedburner:origLink>
  184.    <author>
  185.      <name>Stephen O'Grady</name>
  186.    </author>
  187.    <source>
  188.      <id>https://redmonk.com/sogrady</id>
  189.      <logo>http://www.redmonk.com/images/logo_banner.gif</logo>
  190.      <link href="https://redmonk.com/sogrady" rel="alternate" type="text/html"/>
  191.      <link href="http://feeds.feedburner.com/tecosystems" rel="self" type="application/atom+xml"/>
  192.      <link href="http://feeds.feedburner.com/tecosystems" rel="self" type="application/rss+xml"/>
  193.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  194.      <link href="http://creativecommons.org/licenses/by-nd/2.0/" rel="license" type="text/html"/>
  195.      <subtitle xml:lang="en-US">because technology is just another ecosystem</subtitle>
  196.      <title xml:lang="en-US">tecosystems</title>
  197.      <updated>2019-08-16T20:41:20Z</updated>
  198.    </source>
  199.  </entry>
  200.  
  201.  <entry>
  202.    <id>https://blogs.apache.org/foundation/entry/the-apache-news-round-up135</id>
  203.    <link href="https://blogs.apache.org/foundation/entry/the-apache-news-round-up135" rel="alternate" type="text/html"/>
  204.    <title>The Apache News Round-up: week ending 16 August 2019</title>
  205.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Happy Friday! We've had a great week. Let's review what we've been up to:
  206.  
  207.  <p>ASF Annual Report – The Apache® Software Foundation announces Annual Report for 2019 Fiscal Year<br/> - Press release <a href="https://s.apache.org/w7bw1" rel="noreferrer" target="_blank">https://s.apache.org/w7bw1</a><br/> - Full report <a href="https://s.apache.org/FY2019AnnualReport">https://s.apache.org/FY2019AnnualReport</a></p>
  208.  <p>ASF Board – management and oversight of the business affairs of the corporation in accordance with the Foundation's bylaws.<br/> - Next Board Meeting: 21 August 2019. Board calendar and minutes <a href="http://apache.org/foundation/board/calendar.html">http://apache.org/foundation/board/calendar.html</a></p>
  209.  <p>ApacheCon™ – the ASF's official global conference series, bringing Tomorrow's Technology Today since 1998<br/> - Countdown to ApacheCon North America and Europe -- we look forward to seeing you in Las Vegas and Berlin-- REGISTER TODAY! <a href="https://www.apachecon.com/">https://www.apachecon.com/</a><br/> - <span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">Catch the latest on</span><span class="r-18u37iz"> </span><span class="r-18u37iz">ApacheCon™ Big Data, Machine Learning and Streaming Tracks with Track Lead Felix Cheung exclusively on </span><a class="css-4rbku5 css-18t94o4 css-901oao css-16my406 r-1n1174f r-1loqt21 r-1qd0xha r-ad9z0x r-bcqeeo r-1ny4l3l r-1ddef8g r-qvutc0" dir="ltr" href="https://feathercast.apache.org/" rel=" noopener noreferrer" target="_blank" title="https://feathercast.apache.org/">https://feathercast.apache.org/<br/></a></p>
  210.  <p> </p>
  211.  <p>ASF Infrastructure – our distributed team on three continents keeps the ASF's infrastructure running around the clock.<br/> - 7M+ weekly checks yield uptime at 99.96%. Performance checks across 50 different service components spread over more than 250 machines in data centers around the world. <a href="http://www.apache.org/uptime/">http://www.apache.org/uptime/</a></p>
  212.  <p>Apache Code Snapshot – this week, 840 Apache contributors changed 13,780,155 lines of code over 3,721 commits. Top 5 contributors, in order, are: Etienne Chauchot, Mark Robert Miller, Mark Thomas, Tilman Hausherr, and Henrik Krohns.<br/></p>
  213.  <p>Apache Project Announcements – the latest updates by category.</p>
  214.  <p>Content --<br/> - Apache UIMA 2.10.4 released <a href="http://uima.apache.org/" target="_blank">http://uima.apache.org/</a></p>
  215.  <p>Database --<br/> - Apache Druid (Incubating) 0.15.1 release <a href="http://druid.incubator.apache.org">http://druid.incubator.apache.org</a><br/><br/>HTTP --<br/> - Apache HTTP Server 2.4.41 released <a href="http://httpd.apache.org/">http://httpd.apache.org/</a><br/> - Apache <span class="il">Traffic</span> <span class="il">Server</span> 8.0.4 and 7.1.7 are released <a href="https://trafficserver.apache.org/" rel="noreferrer" target="_blank">http://trafficserver.apache.org/</a> <br/></p>
  216.  <p>Libraries --<br/> - Apache Log4j 2.12.1 released <a href="https://logging.apache.org/" rel="noreferrer" target="_blank">http://logging.apache.org/</a><br/> - Apache Commons BeanUtils 1.9.4 released <a href="http://commons.apache.org/proper/commons-beanutils/">http://commons.apache.org/proper/commons-beanutils/</a><br/> - Apache Commons VFS 2.4.1 released <a href="http://commons.apache.org/proper/commons-vfs/">http://commons.apache.org/proper/commons-vfs/</a> <br/></p>
  217.  <p>Network-Server --<br/> - <span class="il">Apache Qpid Proton-J 0.33.2</span> released <a href="http://qpid.apache.org" rel="noreferrer" target="_blank">http://<span class="il">qpid</span>.<span class="il">apache</span>.org</a></p>
  218.  <p> </p>
  219.  <p><strong>Did You Know?</strong> </p>
  220.  <div>
  221.    <p> - Did you know that <span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">at this year's </span>ApacheCon Europe/Berlin<span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0"> include</span><span class="r-18u37iz"><a class="css-4rbku5 css-18t94o4 css-901oao css-16my406 r-1n1174f r-1loqt21 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0" dir="ltr" href="https://twitter.com/MiguelGamino"> </a></span><span class="il">Miguel</span> Gamiño, Executive Vice President Global Cities at Mastercard, <span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">will discuss new models of urban collaboration in response to shared challenges? Learn more at </span><a class="css-4rbku5 css-18t94o4 css-901oao css-16my406 r-1n1174f r-1loqt21 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0" dir="ltr" href="https://t.co/drCzKX9vKM?amp=1" rel=" noopener noreferrer" target="_blank" title="https://aceu19.apachecon.com/session/city-possible-addressing-shared-urban-challenges-harnessing-super-power-collaboration">https://aceu19.apachecon.com/session/city-possible-addressing-shared-urban-challenges-harnessing-super-power-collaboration</a></p>
  222.    <p> - Did you know <span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">ApacheCon North America </span>keynoters include sci-fi author David Brin; IBM Fellow Chris Ferris; "Father of Java" James Gosling; 11-year-old CoderBunnyz CEO Samaira Mehta; the ASF Founders Panel; DataStax co-Founder Jonathan Ellis; plus ASF President Sam Ruby on the State of the Feather, the Apache Community Development panel, and more? <a href="https://www.apachecon.com/acna19/s/#/schedule">https://www.apachecon.com/acna19/s/#/schedule</a></p>
  223.    <div class="css-901oao r-hkyrab r-1qd0xha r-a023e6 r-16dba41 r-ad9z0x r-bcqeeo r-bnwqim r-qvutc0" dir="auto" id="tweet-text" lang="en">
  224.      <p> - Did you know that 202 Top-Level communities are overseeing 332 Apache projects and sub-projects? <a href="https://projects.apache.org/">https://projects.apache.org/</a><br/></p>
  225.    </div>
  226.  </div>
  227.  <p><strong>Apache Community Notices:</strong></p>
  228.  <p> - Celebrating 20 Years Community-led Development "The Apache Way" <a href="https://s.apache.org/ASF20thAnniversary">https://s.apache.org/ASF20thAnniversary</a></p>
  229.  <p> - ASF Founders look back on 20 Years of the ASF <a href="https://blogs.apache.org/foundation/entry/our-founders-look-back-on">https://blogs.apache.org/foundation/entry/our-founders-look-back-on</a></p>
  230.  <p> - The Apache Way to Sustainable Open Source Success <a href="https://s.apache.org/GhnI">https://s.apache.org/GhnI</a></p>
  231.  <p> - Foundation Reports and Statements <a href="http://www.apache.org/foundation/reports.html">http://www.apache.org/foundation/reports.html</a></p>
  232.  <p> - ApacheCon: Tomorrow's Technology Today since 1998 <a href="http://s.apache.org/ApacheCon">http://s.apache.org/ApacheCon</a></p>
  233.  <p> - ASF Annual Report for FY2019 <a href="https://s.apache.org/FY2019AnnualReport">https://s.apache.org/FY2019AnnualReport</a></p>
  234.  <p> - The Apache Software Foundation 2018 Vision Statement <a href="https://s.apache.org/zqC3">https://s.apache.org/zqC3</a></p>
  235.  <p> - Foundation Statement –Apache Is Open. <a href="https://s.apache.org/PIRA">https://s.apache.org/PIRA</a></p>
  236.  <div>
  237.    <p> - "Success at Apache" focuses on the processes behind why the ASF "just works". <a href="https://blogs.apache.org/foundation/category/SuccessAtApache">https://blogs.apache.org/foundation/category/SuccessAtApache</a></p>
  238.  </div>
  239.  <div>
  240.    <p> - Please follow/like/re-tweet the ASF on social media: <a href="https://twitter.com/TheASF">@TheASF on Twitter</a> and on LinkedIn at <a href="https://www.linkedin.com/company/the-apache-software-foundation">https://www.linkedin.com/company/the-apache-software-foundation</a></p>
  241.    <p> - Do friend and follow us on the Apache Community Facebook page <a href="https://www.facebook.com/ApacheSoftwareFoundation/">https://www.facebook.com/ApacheSoftwareFoundation/</a>and Twitter account <a href="https://twitter.com/ApacheCommunity">https://twitter.com/ApacheCommunity</a></p>
  242.  </div>
  243.  <div> </div>
  244.  <div>
  245.    <p> - The list of Apache project-related MeetUps can be found at <a href="http://events.apache.org/event/meetups.html">http://events.apache.org/event/meetups.html</a></p>
  246.  </div>
  247.  <div>
  248.    <p> - Registration is open for ApacheCon North America 9-12 September 2019 <a href="http://apachecon.com/">http://apachecon.com/</a></p>
  249.    <p> - Spark + AI Summit 2019 will be held 15-17 October in Amsterdam <a href="https://databricks.com/sparkaisummit/">https://databricks.com/sparkaisummit/</a></p>
  250.    <p> - Registration open for ApacheCon Europe 22-24 October 2019 <a href="http://apachecon.com/">http://apachecon.com/</a></p>
  251.    <p> - Find out how you can participate with Apache community/projects/activities --opportunities open with Apache Camel, Apache HTTP Server, and more! <a href="https://helpwanted.apache.org/">https://helpwanted.apache.org/</a></p>
  252.  </div>
  253.  <div> - Are your software solutions Powered by Apache? Download &amp; use our "Powered By" logos <a href="http://www.apache.org/foundation/press/kit/#poweredby">http://www.apache.org/foundation/press/kit/#poweredby</a></div>
  254.  <div><br/></div>
  255.  <div>= = =</div>
  256.  <div><br/></div>
  257.  <div>For real-time updates, sign up for Apache-related news by sending mail to [email protected] and follow @TheASF on Twitter. For a broader spectrum from the Apache community, <a href="https://twitter.com/PlanetApache">https://twitter.com/PlanetApache</a> provides an aggregate of Project activities as well as the personal blogs and tweets of select ASF Committers.</div></div>
  258.    </content>
  259.    <updated>2019-08-16T17:24:06Z</updated>
  260.    <published>2019-08-16T17:24:05Z</published>
  261.    <category label="Newsletter" term="Newsletter"/>
  262.    <category scheme="http://roller.apache.org/ns/tags/" term="apache"/>
  263.    <category scheme="http://roller.apache.org/ns/tags/" term="community"/>
  264.    <category scheme="http://roller.apache.org/ns/tags/" term="foundation"/>
  265.    <category scheme="http://roller.apache.org/ns/tags/" term="initiatives"/>
  266.    <category scheme="http://roller.apache.org/ns/tags/" term="news"/>
  267.    <category scheme="http://roller.apache.org/ns/tags/" term="projects"/>
  268.    <category scheme="http://roller.apache.org/ns/tags/" term="round-up"/>
  269.    <category scheme="http://roller.apache.org/ns/tags/" term="software"/>
  270.    <category scheme="http://roller.apache.org/ns/tags/" term="summary"/>
  271.    <category scheme="http://roller.apache.org/ns/tags/" term="weekly"/>
  272.    <author>
  273.      <name>Swapnil M Mane</name>
  274.    </author>
  275.    <source>
  276.      <id>https://blogs.apache.org/foundation/feed/entries/atom</id>
  277.      <link href="https://blogs.apache.org/foundation/feed/entries/atom" rel="self" type="application/atom+xml"/>
  278.      <link href="https://blogs.apache.org/foundation/" rel="alternate" type="text/html"/>
  279.      <subtitle>The voice of the ASF</subtitle>
  280.      <title>The Apache Software Foundation Blog</title>
  281.      <updated>2019-08-16T17:24:06Z</updated>
  282.    </source>
  283.  </entry>
  284.  
  285.  <entry>
  286.    <id>tag:www.oreilly.com,2019-08-16:/ideas/four-short-links-16-august-2019</id>
  287.    <link href="http://feedproxy.google.com/~r/oreilly/radar/atom/~3/U040RiG-UG0/four-short-links-16-august-2019" rel="alternate" type="text/html"/>
  288.    <title>Four short links: 16 August 2019</title>
  289.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><em>Indigenous Data, Personal Device Exploit, Information Operations, and Optical Neural Nets</em></p><ol>
  290. <li>
  291. <a href="https://www.greaterthancode.com/indigenous-data-sovereignty">Indigenous Data Sovereignty</a> -- a podcast with Keoni Mahelona, who is part of Māori team building software to transcribe Māori speech.</li>
  292. <li>
  293. <a href="https://github.com/smealum/butthax">Butthax</a> -- <i>This repository contains code for an exploit chain targeting the Lovense Hush connected buttplug and associated software. This includes fully functional exploit code for a Nordic Semiconductor BLE stack vulnerability affecting all versions of SoftDevices s110, s120 and s130, as well as versions of the s132 SoftDevice 2.0 and under.</i> Have a happy and safe weekend, y'all.</li>
  294. <li>
  295. <a href="https://www.lawfareblog.com/toward-information-operations-kill-chain">Toward an Information Operations Kill Chain</a> (Bruce Schneier) -- <i>it’s time to conceptualize the “information operations kill chain.” Information attacks against democracies, whether they’re attempts to polarize political processes or to increase mistrust in social institutions, also involve a series of steps. And enumerating those steps will clarify possibilities for defense.</i>
  296. </li>
  297. <li>
  298. <a href="https://techxplore.com/news/2019-08-advances-optical-neural-networks.html">Advances in Optical Neural Networks</a> -- <i>After its design and training in a computer using modern deep learning methods, each network is physically fabricated, using for example 3-D printing or lithography, to engineer the trained network model into matter. This 3-D structure of engineered matter is composed of transmissive and/or reflective surfaces that altogether perform machine learning tasks through light-matter interaction and optical diffraction, at the speed of light, and without the need for any power, except for the light that illuminates the input object. This is especially significant for recognizing target objects much faster and with significantly less power compared to standard computer-based machine learning systems.</i> For the performance of a neural network, not the training of it, but still a nifty idea.</li>
  299. </ol>
  300. <p>Continue reading <a href="https://www.oreilly.com/ideas/four-short-links-16-august-2019">Four short links: 16 August 2019.</a></p><img alt="" height="1" src="http://feeds.feedburner.com/~r/oreilly/radar/atom/~4/U040RiG-UG0" width="1"/></div>
  301.    </content>
  302.    <updated>2019-08-16T12:25:00Z</updated><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.oreilly.com/ideas/four-short-links-16-august-2019</feedburner:origLink>
  303.    <author>
  304.      <name>Nat Torkington</name>
  305.    </author>
  306.    <source>
  307.      <id>https://www.oreilly.com</id>
  308.      <author>
  309.        <name>O'Reilly Media</name>
  310.      </author>
  311.      <link href="https://www.oreilly.com" rel="alternate" type="text/html"/>
  312.      <link href="http://feeds.feedburner.com/oreilly/radar/atom" rel="self" type="application/atom+xml"/>
  313.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  314.      <subtitle>All of our Ideas and Learning material from all of our topics.</subtitle>
  315.      <title>All - O'Reilly Media</title>
  316.      <updated>2019-08-16T14:10:53Z</updated>
  317.    </source>
  318.  </entry>
  319.  
  320.  <entry>
  321.    <id>tag:www.schneier.com,2019:/blog//2.12183</id>
  322.    <link href="https://www.schneier.com/blog/archives/2019/08/software_vulner.html" rel="alternate" type="text/html"/>
  323.    <title>Software Vulnerabilities in the Boeing 787</title>
  324.    <summary>Boeing left its software unprotected, and researchers have analyzed it for vulnerabilities: At the Black Hat security conference today in Las Vegas, Santamarta, a researcher for security firm IOActive, plans to present his findings, including the details of multiple serious security flaws in the code for a component of the 787 known as a Crew Information Service/Maintenance System. The CIS/MS...</summary>
  325.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p>Boeing left its software unprotected, and researchers have <a href="https://www.wired.com/story/boeing-787-code-leak-security-flaws/">analyzed it</a> for vulnerabilities:</p>
  326.  
  327. <blockquote><p>At the Black Hat security conference today in Las Vegas, Santamarta, a researcher for security firm IOActive, plans to present his findings, including the details of multiple serious security flaws in the code for a component of the 787 known as a Crew Information Service/Maintenance System. The CIS/MS is responsible for applications like maintenance systems and the so-called electronic flight bag, a collection of navigation documents and manuals used by pilots. Santamarta says he found a slew of memory corruption vulnerabilities in that CIS/MS, and he claims that a hacker could use those flaws as a foothold inside a restricted part of a plane's network. An attacker could potentially pivot, Santamarta says, from the in-flight entertainment system to the CIS/MS to send commands to far more sensitive components that control the plane's safety-critical systems, including its engine, brakes, and sensors. Boeing maintains that other security barriers in the 787's network architecture would make that progression impossible.
  328.  
  329. </p><p>Santamarta admits that he doesn't have enough visibility into the 787's internals to know if those security barriers are circumventable. But he says his research nonetheless represents a significant step toward showing the possibility of an actual plane-hacking technique. "We don't have a 787 to test, so we can't assess the impact," Santamarta says. "We're not saying it's doomsday, or that we can take a plane down. But we can say: This shouldn't happen."</p></blockquote>
  330.  
  331. <p>Boeing denies that there's any problem:</p>
  332.  
  333. <blockquote><p>In a statement, Boeing said it had investigated IOActive's claims and concluded that they don't represent any real threat of a cyberattack. "IOActive's scenarios cannot affect any critical or essential airplane system and do not describe a way for remote attackers to access important 787 systems like the avionics system," the company's statement reads. "IOActive reviewed only one part of the 787 network using rudimentary tools, and had no access to the larger system or working environments. IOActive chose to ignore our verified results and limitations in its research, and instead made provocative statements as if they had access to and analyzed the working system. While we appreciate responsible engagement from independent cybersecurity researchers, we're disappointed in IOActive's irresponsible presentation."</p></blockquote>
  334.  
  335. <p>This being Black Hat and Las Vegas, I'll say it this way: I would bet money that Boeing is wrong. I don't have an opinion about whether or not it's lying.</p></div>
  336.    </content>
  337.    <updated>2019-08-16T11:12:05Z</updated>
  338.    <published>2019-08-16T11:12:05Z</published>
  339.    <category label="air travel" scheme="http://www.sixapart.com/ns/types#tag" term="airtravel"/>
  340.    <category label="hacking" scheme="http://www.sixapart.com/ns/types#tag" term="hacking"/>
  341.    <category label="vulnerabilities" scheme="http://www.sixapart.com/ns/types#tag" term="vulnerabilities"/>
  342.    <author>
  343.      <name>Bruce Schneier</name>
  344.    </author>
  345.    <source>
  346.      <id>tag:www.schneier.com,2014-06-11:/blog//2</id>
  347.      <link href="https://www.schneier.com/blog/" rel="alternate" type="text/html"/>
  348.      <link href="https://www.schneier.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
  349.      <subtitle>A blog covering security and security technology.</subtitle>
  350.      <title>Schneier on Security</title>
  351.      <updated>2019-08-16T21:05:53Z</updated>
  352.    </source>
  353.  </entry>
  354.  
  355.  <entry xml:lang="en-US">
  356.    <id>https://tantek.com/2019/233/e1/homebrew-website-club-sf</id>
  357.    <link href="https://tantek.com/2019/233/e1/homebrew-website-club-sf" rel="alternate" title="Homebrew Website Club SF!" type="text/html"/>
  358.    <title type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml">Event: <a href="https://tantek.com/2019/233/e1/homebrew-website-club-sf">https://tantek.com/2019/233/e1/homebrew-website-club-sf</a></div>
  359.    </title>
  360.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><div class="entry-content e-content">
  361. <p>
  362. When: <time class="dt-start dtstart">2019-08-21 17:30</time>…<time class="dt-end dtend">18:30</time>
  363. <span style="display: block;">
  364. Where: <a class="u-location h-card location" href="https://wiki.mozilla.org/SF">Mozilla San Francisco</a>
  365. </span>
  366. Host: <a class="u-organizer h-card" href="http://tantek.com/">Tantek Çelik</a>
  367. </p>
  368. <div class="p-summary description">
  369. <p><img alt="Homebrew Website Club retro 1980s-style logo." class="u-featured" src="https://indieweb.org/images/b/b1/2017-hwc-80s-retro.jpg" style="width: 100%; height: 300px;"/></p>
  370. <p>Topics for this week:</p>
  371. <ul>
  372. <li>IndieWeb Summit <a href="https://indieweb.org/2019/Schedule">Notes &amp; Videos</a>!</li>
  373. <li>Sign-up for Upcoming IndieWebCamps!
  374. <ul>
  375. <li><a href="https://indieweb.org/2019/Amsterdam">❌  IndieWebCamp Amsterdam</a></li>
  376. <li><a href="https://indieweb.org/2019/Oxford">🏫 IndieWebCamp Oxford</a></li>
  377. <li><a href="https://indieweb.org/2019/NYC">🗽 IndieWebCamp New York City</a></li>
  378. <li><a href="https://indieweb.org/2019/Brighton">🎪 IndieWebCamp Brighton</a></li>
  379. </ul>
  380. </li>
  381. <li>Demos of personal website breakthroughs</li>
  382. <li>Create or update your personal web site!</li>
  383. </ul>
  384. <p>
  385. Join a community with like-minded interests. Bring friends that want a personal site, or are interested in a healthy, independent web!
  386. </p>
  387. <p>
  388. Any questions? Ask in
  389. <a href="https://indieweb.org/discuss">#indieweb Slack or IRC</a>
  390. </p>
  391. <p>
  392. More information:
  393. <a class="u-url" href="https://indieweb.org/events/2019-08-21-homebrew-website-club">IndieWeb Wiki Event Page</a>
  394. </p>
  395. <p>
  396. RSVP:  post an <a href="https://indieweb.org/rsvp">indie RSVP</a> on your own site!
  397. </p>
  398. </div>
  399. </div></div>
  400.    </content>
  401.    <updated>2019-08-16T01:51:00Z</updated>
  402.    <published>2019-08-16T01:51:00Z</published>
  403.    <source>
  404.      <id>https://tantek.com/updates.atom</id>
  405.      <author>
  406.        <name>Tantek</name>
  407.        <uri>https://tantek.com/</uri>
  408.      </author>
  409.      <link href="https://tantek.com/" rel="alternate" title="Tantek &#xC7;elik" type="text/html"/>
  410.      <link href="https://tantek.com/updates.atom" rel="self" type="application/atom+xml"/>
  411.      <link href="https://pubsubhubbub.superfeedr.com/" rel="hub" type="text/html"/>
  412.      <title xml:lang="en-US">Tantek Çelik</title>
  413.      <updated>2019-08-16T21:21:00Z</updated>
  414.    </source>
  415.  </entry>
  416.  
  417.  <entry xml:lang="en">
  418.    <id>https://xkcd.com/2190/</id>
  419.    <link href="https://xkcd.com/2190/" rel="alternate" type="text/html"/>
  420.    <title xml:lang="en">Serena Versus the Drones</title>
  421.    <summary type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><img alt="After the test, she said that if she had a choice, she wouldn&#x2019;t defend herself against drones using a tennis ball and racket, though she would absolutely pick them over other sports equipment. But, she added, &quot;Drones don't bother me.&quot;" src="https://imgs.xkcd.com/comics/serena_versus_the_drones.png" title="After the test, she said that if she had a choice, she wouldn&#x2019;t defend herself against drones using a tennis ball and racket, though she would absolutely pick them over other sports equipment. But, she added, &quot;Drones don't bother me.&quot;"/></div>
  422.    </summary>
  423.    <updated>2019-08-16T00:00:00Z</updated>
  424.    <source>
  425.      <id>https://xkcd.com/</id>
  426.      <author>
  427.        <name>Randall Munroe</name>
  428.      </author>
  429.      <link href="https://xkcd.com/" rel="alternate" type="text/html"/>
  430.      <link href="http://www.xkcd.org/atom.xml" rel="self" type="application/atom+xml"/>
  431.      <title xml:lang="en">xkcd.com</title>
  432.      <updated>2019-08-16T00:00:00Z</updated>
  433.    </source>
  434.  </entry>
  435.  
  436.  <entry xml:lang="en-US">
  437.    <id>https://webkit.org/?p=9454</id>
  438.    <link href="https://webkit.org/blog/9454/changing-page-settings-on-ios-using-web-inspector/" rel="alternate" type="text/html"/>
  439.    <title xml:lang="en-US">Changing Page Settings on iOS Using Web Inspector</title>
  440.    <summary xml:lang="en-US">If you’ve ever used Web Inspector before, chances are you’ve used (or are at least familiar with) the Develop menu.</summary>
  441.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>If you’ve ever used Web Inspector before, chances are you’ve used (or are at least familiar with) the <strong>Develop</strong> menu.  It holds action items and toggles for various settings of the browser, like whether local files (e.g. URLs beginning with <code>file://</code>) can be loaded or whether CSS is applied to each page.</p>
  442. <figure class="widescreen mattewhite">
  443.  <source media="(prefers-color-scheme: dark)"/><img src="https://webkit.org/wp-content/uploads/Develop_Menu_Light.png"/>
  444.  
  445. </figure>
  446. <p>All of these items apply to the entire browser, meaning that if you <strong>Disable Styles</strong> on one page, every other page will be affected.</p>
  447. <p>Additionally, these items have no effect when using Web Inspector to inspect a remote target, like an iOS device or simulator. Checking <strong>Disable Styles</strong> in the <strong>Develop</strong> menu will not have any affect on the remote target.</p>
  448. <p>In order to support this development workflow, Web Inspector has added a device settings menu that allows these settings to be toggled per-page when being remotely inspected.</p>
  449. <p>Clicking on the device settings menu icon will show a popover with many of the same settings as the <strong>Develop</strong> menu.</p>
  450. <figure class="widescreen mattewhite">
  451.  <source media="(prefers-color-scheme: dark)"/><img src="https://webkit.org/wp-content/uploads/Device_Settings_Menu_Light.png"/>
  452.  
  453. </figure>
  454. <p>Since these settings apply per-page and only on the remote target, the corresponding actions in the <strong>Develop</strong> menu are disabled, as they have no effect on a remote target:</p>
  455. <ul>
  456. <li><strong>Disable Images</strong></li>
  457. <li><strong>Disable Styles</strong></li>
  458. <li><strong>Disable JavaScript</strong></li>
  459. <li><strong>Disable Site-specific Hacks</strong></li>
  460. <li><strong>Disable Cross-Origin Restrictions</strong></li>
  461. <li>WebRTC
  462. <ul>
  463. <li><strong>Allow Media Capture on Insecure Sites</strong></li>
  464. <li><strong>Disable ICE Candidate Restrictions</strong></li>
  465. <li><strong>Use Mock Capture Devices</strong></li>
  466. </ul>
  467. </li>
  468. </ul>
  469. <p>Along these lines, the device settings menu is only shown when using Web Inspector to inspect a remote target.</p>
  470. <p>Device settings are <em>not</em> preserved between Web Inspector sessions.  Closing Web Inspector (or disconnecting the inspected device) will cause all previously set device settings for the inspected page to reset.</p>
  471. <p>Device settings are preserved across navigations, however, so long as Web Inspector stays open/connected.</p>
  472. <h2 id="UserAgent">User Agent</h2>
  473. <p>The first item in the device settings menu is the <strong>User Agent</strong> editor.  It contains a list of <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent">common user agents</a>, as well as an option to input a <a href="https://en.wikipedia.org/wiki/User_agent#Use_in_HTTP">custom user agent</a> (<strong>Other…</strong>).</p>
  474. <p>Each time the <strong>User Agent</strong> is modified, the inspected page will automatically reload so that the new <strong>User Agent</strong> is applied.</p>
  475. <h2 id="Disable">Disable Toggles</h2>
  476. <p>Each of these toggles, when checked, disables a specific piece of functionality in the inspected page.</p>
  477. <ul>
  478. <li><strong>Images</strong> will prevent any not-yet loaded images from loading, but will have no effect on any already loaded images.</li>
  479. <li><strong>Styles</strong> will immediately disable all CSS on the page, including inline <code>&lt;style&gt;</code>s and any <code>style</code> DOM attributes.</li>
  480. <li><strong>JavaScript</strong> will cause the page to ignore any <em>future</em> JavaScript from being run, including new <code>&lt;script&gt;</code> elements (the underlying resource isn’t even requested) and callbacks for previously added event listeners.</li>
  481. <li><strong>Site-specific Hacks</strong> controls whether workarounds are made by WebKit to support compatibility on certain sites.
  482. <ul>
  483. <li>A list of these sites can be found in <a href="https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/page/Quirks.cpp">Source/WebCore/page/Quirks.cpp</a>.</li>
  484. <li>If you develop a site that is found in that list, we <em>strongly</em> encourage developing and testing with <strong>Site-specific Hacks</strong> <em>disabled</em>.</li>
  485. </ul>
  486. </li>
  487. <li><strong>Cross-Origin Restrictions</strong> controls whether <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS">CORS</a> rules/restrictions are active for any <em>future</em> network requests.</li>
  488. </ul>
  489. <h2 id="WebRTC">WebRTC Toggles</h2>
  490. <p>These toggles focus specifically on functionality related to <a href="https://webrtc.org/">WebRTC</a>.</p>
  491. <ul>
  492. <li><strong>Allow Media Capture on Insecure Sites</strong> will allow <a href="https://webkit.org/blog/7726/announcing-webrtc-and-media-capture/">WebRTC media capture</a> to be used/tested on insecure (e.g. non-https) pages for any <em>future</em> calls of <code>getUserMedia</code>.</li>
  493. <li><strong>Disable ICE Candidate Restrictions</strong> will prevent <a href="https://webkit.org/blog/7763/a-closer-look-into-webrtc/">host ICE candidates from being filtered</a> for <em>new</em> connection attempts.</li>
  494. <li><strong>Use Mock Capture Devices</strong> will replace all <a href="https://webkit.org/blog/7726/announcing-webrtc-and-media-capture/">capture devices</a> with a mock “Bip-Bop” device for any <em>future</em> calls of <code>getUserMedia</code>.<br/>
  495. <figure style="margin: 0.5em;"><img class="preserve-color wp-image-9459" src="https://webkit.org/wp-content/uploads/Mock_Capture_Device.png" title="Mock Capture Device"/></figure>
  496. </li>
  497. <li><strong>Disable Encryption</strong> will cause <em>future</em> connections to be established and <em>future</em> streams (from those connections) to be transmitted <em>without</em> any form of encryption.</li>
  498. </ul>
  499. <h2>Feedback</h2>
  500. <p>You can try out changing device settings with iOS 12.2 or later. Let us know how it works for you. Send feedback on Twitter (<a href="https://twitter.com/webkit">@webkit</a>, <a href="https://twitter.com/dcrousso">@dcrousso</a>) or by <a href="https://feedbackassistant.apple.com/">filing a bug</a>.</p></div>
  501.    </content>
  502.    <updated>2019-08-15T20:14:35Z</updated>
  503.    <published>2019-08-02T05:56:25Z</published>
  504.    <category scheme="https://webkit.org" term="Web Inspector"/>
  505.    <author>
  506.      <name/>
  507.      <uri>https://devinrousso.com/</uri>
  508.    </author>
  509.    <source>
  510.      <id>https://webkit.org/feed/atom/</id>
  511.      <link href="https://webkit.org" rel="alternate" type="text/html"/>
  512.      <link href="https://webkit.org/blog/feed/atom/" rel="self" type="application/atom+xml"/>
  513.      <subtitle xml:lang="en-US">Open Source Web Browser Engine</subtitle>
  514.      <title xml:lang="en-US">Blog – WebKit</title>
  515.      <updated>2019-08-15T20:14:35Z</updated>
  516.    </source>
  517.  </entry>
  518.  
  519.  <entry xml:lang="en-us">
  520.    <id>https://www.blog.google/products/chromebooks/whats-new-august2019/</id>
  521.    <link href="http://feedproxy.google.com/~r/blogspot/MKuf/~3/DAYeO42OlAU/" rel="alternate" type="text/html"/>
  522.    <title>What’s new in Chrome OS: better audio, camera and notifications</title>
  523.    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="block-paragraph"><div class="rich-text"><p>Every Chromebook runs on Chrome OS, which updates every six weeks to keep your device speedy, smart and secure. Each Chrome OS update happens in the background, without interrupting what you’re doing. Here’s some of what’s new on Chromebook this August. <br/></p></div></div><div class="block-paragraph"><div class="rich-text"><h3>Control your media in one place</h3><p>New media controls make it easier for you to pause or play sound from a tab or an app. Have you ever had dozens of tabs and apps open and struggled to turn off a specific tab’s audio? If so, we think you’ll find this change helpful—especially for those moments when you start watching a YouTube video and you want to quickly pause your music.</p><p>Starting this month, you can open your system menu and see all of the tabs or apps on your Chromebook that are playing audio tracks and control them from one place.</p></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--large h-c-grid__col h-c-grid__col--6 h-c-grid__col--offset-3 "><img alt="media1" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/images/Screenshot_2019-08-16_at_11.48.56_AM.max-1000x1000.png"/></figure></div></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--large h-c-grid__col h-c-grid__col--6 h-c-grid__col--offset-3 "><img alt="media2" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/images/Screenshot_2019-08-16_at_11.48.46_AM_K3jgg.max-1000x1000.png"/></figure></div></div></div><div class="block-paragraph"><div class="rich-text"><h3>Take great photos on your Chromebook</h3><p>The Chromebook camera app has been updated to make taking photos and videos easier. Portrait mode is now available on Google Pixel Slate and we are working on bringing it to other Chromebooks. We’ve introduced an updated interface for navigating between new modes, like square mode and portrait mode.</p><p>Now, open your camera app, take a selfie with a landscape or square crop, and access it easily in your Downloads folder.</p></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--large h-c-grid__col h-c-grid__col--6 h-c-grid__col--offset-3 "><img alt="camera_final" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/images/camera_final.max-1000x1000.png"/></figure></div></div></div><div class="block-paragraph"><div class="rich-text"><h3>Clear your notifications faster</h3><p>With Chrome OS, you can access all your favorite apps from the Google Play Store. In response to your feedback, it’s now easier for you to check and clear notifications from Play Store apps on your Chromebook. Starting this month, easily dismiss your notifications with the “Clear all” button.</p></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--large h-c-grid__col h-c-grid__col--6 h-c-grid__col--offset-3 "><img alt="notification1" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/images/Screenshot_2019-08-16_at_11.48.18_AM.max-1000x1000.png"/></figure></div></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--large h-c-grid__col h-c-grid__col--6 h-c-grid__col--offset-3 "><img alt="notification2" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/images/Screenshot_2019-08-16_at_11.48.01_AM.max-1000x1000.png"/></figure></div></div></div><div class="block-paragraph"><div class="rich-text"><p>We’ll be back in around six weeks to share more of what’s new in Chrome OS. </p></div></div><img alt="" height="1" src="http://feeds.feedburner.com/~r/blogspot/MKuf/~4/DAYeO42OlAU" width="1"/></div>
  524.    </summary>
  525.    <content>This August, audio controls, the camera app and notification management have improved on Chromebooks.</content>
  526.    <updated>2019-08-15T17:30:00Z</updated>
  527.    <category term="Chromebooks"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.blog.google/products/chromebooks/whats-new-august2019/</feedburner:origLink>
  528.    <source>
  529.      <id>https://www.blog.google/</id>
  530.      <logo>https://www.blog.google/static/blogv2/images/google.a51985becaa6.png</logo>
  531.      <author>
  532.        <name>Google</name>
  533.      </author>
  534.      <link href="https://www.blog.google/" rel="alternate" type="text/html"/>
  535.      <link href="http://feeds.feedburner.com/blogspot/MKuf" rel="self" type="application/rss+xml"/>
  536.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  537.      <subtitle>Insights from Googlers into our products, technology, and the Google culture.</subtitle>
  538.      <title>The Official Google Blog</title>
  539.      <updated>2019-08-16T19:29:07Z</updated>
  540.    </source>
  541.  </entry>
  542.  
  543.  <entry xml:lang="en-us">
  544.    <id>https://www.blog.google/products/search/explore-college-opportunities-new-search-features/</id>
  545.    <link href="http://feedproxy.google.com/~r/blogspot/MKuf/~3/iLoy5_xg0No/" rel="alternate" type="text/html"/>
  546.    <title>Explore college opportunities with new Search features</title>
  547.    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="block-paragraph"><div class="rich-text"><p>Summer is winding down, and students across the country are heading back to the classroom. For many students in high school, it’s time to think about their next steps after graduation. While some students may have a certain school or cost considerations in mind, many others may not know where to start or what options are available to them.</p><br/><p>The <a href="https://www.blog.google/products/search/college-search-google/">college search feature</a> we launched last year helps students get quick access to information about four-year U.S. universities, including acceptance rates, costs and student outcomes like graduation rates. As this year’s college search season kicks off, we’re expanding our college search features to include two-year colleges and popular certificate and associate programs available at four-year institutions. A new list feature makes it easier to discover a wide range of schools and explore different fields of study.</p></div></div><div class="block-paragraph"><div class="rich-text"><h3>Considering 2-year colleges</h3><p>When you use your mobile device to  search for any two-year college in the U.S, you’ll get information about the programs offered, cost of attendance and more. Because many community college students often stay close to home while enrolled in these programs, we show the in-state tuition, as well as total cost with books and housing, to give a better view into what you’ll pay depending on your individual circumstances.</p><p><br/></p></div></div><div class="block-image_carousel"><div class="h-c-page article-module"><div class="article-module glue-pagination h-c-carousel h-c-carousel--simple h-c-carousel--dark ng-cloak"><div class="h-c-carousel__wrap"><ul class="glue-carousel ng-cloak"><li class="h-c-carousel__item article-carousel__slide"><figure><div class="article-carousel__slide-img"><span class="h-u-visually-hidden">sb_cc_2_RESIZE.gif</span></div></figure></li><li class="h-c-carousel__item article-carousel__slide"><figure><div class="article-carousel__slide-img"><span class="h-u-visually-hidden">Itasca_cc_RESIZE.gif</span></div></figure></li><li class="h-c-carousel__item article-carousel__slide"><figure><div class="article-carousel__slide-img"><span class="h-u-visually-hidden">nm_mi_RESIZE.gif</span></div></figure></li></ul><div class="h-c-carousel__paginate glue-pagination-previous"><div class="h-c-carousel__paginate-wrap"><svg xmlns="http://www.w3.org/2000/svg" class="h-c-icon h-c-icon--keyboard-arrow-left"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#mi-keyboard-arrow-right"/></svg></div></div><div class="h-c-carousel__paginate glue-pagination-next"><div class="h-c-carousel__paginate-wrap"><svg xmlns="http://www.w3.org/2000/svg" class="h-c-icon h-c-icon--keyboard-arrow-right"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#mi-keyboard-arrow-right"/></svg></div></div></div><div class="h-c-carousel__navigation"><div class="glue-pagination-page-list"/></div></div></div></div><div class="block-paragraph"><div class="rich-text"><h3>A new take on college lists </h3><p>If you’re still narrowing your options, our new exploration tool—available on both mobile and desktop—lets you explore a range of schools based on factors like fields of study or geography. Search for something like “hotel management schools in Georgia” and click “more” to jump into the list.</p><p><br/></p></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--medium h-c-grid__col h-c-grid__col--4 h-c-grid__col--offset-4 "><img alt="colleges-list-ui.gif" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/original_images/colleges-list-ui.gif"/></figure></div></div></div><div class="block-paragraph"><div class="rich-text"><p>This feature makes it easy to compare costs, graduation rates, campus life and other characteristics to find the college that best fits your needs. You can also filter by specific location or distance, region, size and acceptance rates.</p><p>These features use <a href="https://support.google.com/websearch/answer/9005864?p=college_search">public information</a> from the U.S. Department of Education’s College Scorecard and Integrated Postsecondary Education Data System (comprehensive datasets available for U.S. colleges and universities). We’ve worked with education researchers, experts, nonprofit organizations, high school counselors, and admissions professionals to build these features to meet the needs of students.</p><p>These features will be available today in the U.S., and we’ll continue to find new ways to make information easily available and helpful as you search for future education opportunities.</p><p><br/></p></div></div><img alt="" height="1" src="http://feeds.feedburner.com/~r/blogspot/MKuf/~4/iLoy5_xg0No" width="1"/></div>
  548.    </summary>
  549.    <content>We’re expanding our college search features to include two-year colleges and popular certificate and associate programs available at four-year institutions.</content>
  550.    <updated>2019-08-15T17:00:00Z</updated>
  551.    <category term="Search"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.blog.google/products/search/explore-college-opportunities-new-search-features/</feedburner:origLink>
  552.    <source>
  553.      <id>https://www.blog.google/</id>
  554.      <logo>https://www.blog.google/static/blogv2/images/google.a51985becaa6.png</logo>
  555.      <author>
  556.        <name>Google</name>
  557.      </author>
  558.      <link href="https://www.blog.google/" rel="alternate" type="text/html"/>
  559.      <link href="http://feeds.feedburner.com/blogspot/MKuf" rel="self" type="application/rss+xml"/>
  560.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  561.      <subtitle>Insights from Googlers into our products, technology, and the Google culture.</subtitle>
  562.      <title>The Official Google Blog</title>
  563.      <updated>2019-08-16T19:29:08Z</updated>
  564.    </source>
  565.  </entry>
  566.  
  567.  <entry xml:lang="en-us">
  568.    <id>https://www.blog.google/products/google-play/play-books-new-experimental-features/</id>
  569.    <link href="http://feedproxy.google.com/~r/blogspot/MKuf/~3/RD6YaTwePOs/" rel="alternate" type="text/html"/>
  570.    <title>How a love of reading turned into new features for Play Books</title>
  571.    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="block-paragraph"><div class="rich-text"><p>Have you ever wondered how new features are developed at Google? We start with a problem that needs to be solved, then consider what the best solution might be, so that our products can be more helpful. And, when we can, we like to get feedback from you (and Googlers themselves) before we officially launch so we can refine and improve.</p><p>Beta Features is new from Play Books, and it lets you test out experimental features on the web. This project originated with Dan Kimberg, a software engineer who joined the Play Books team to perfect a product he’d been a longtime fan of. Self-proclaimed bookworm and lifetime lover of literature, Dan was eager to personalize his library and make it easier to browse and organize his collection of books. He knew that other readers out there probably felt the same way—so he got to work.</p><p>These features may lack a bit of polish; they might evolve, improve, disappear or transform into new Play Books product updates. They’re experimental, and Dan and the team want to hear what’s most helpful to you. We sat down with Dan to learn more about the inspiration behind Beta Features.</p></div></div><div class="block-paragraph"><div class="rich-text"><h3>What led you to the Play Books team?</h3><p>I’ve been an avid reader my whole life, but I wasn’t always working in the world of books. I've been a software engineer at Google for eight years on different teams. And before coming to Google, I spent nearly 20 years as a researcher in cognitive neuroscience, using brain imaging to try to understand how the mind works. </p><p>Before joining the Play Books team I filed around 50 feature requests, and I'd been thinking idle thoughts about how technology could improve reading, listening, (and writing) since I was a teenager. </p></div></div><div class="block-paragraph"><div class="rich-text"><h3>What inspired you to develop Beta Features?</h3><p>As a constant reader, I used to go on vacation and pack 20 books because I didn’t know what I’d end up wanting to read. Throughout my years of reading physical books, there were some fundamental frustrations that inspired me to think differently about how technology can make reading more enjoyable. Physical books don’t give you the flexibility of selecting the right font size for you, not all printed books are well bound, page size varies and long lines of text may not be conducive to your reading style. Now, with the help of technology, I can try to solve some of those frustrations for others (and now I can bring as many books as I want on vacation).<br/></p></div></div><div class="block-paragraph"><div class="rich-text"><h3>Which Beta Features are available now to test out—and which is your favorite?</h3><p>First, there’s Custom Shelves—my personal favorite and the most frequently requested feature from our users. It lets you organize your shelves in a more useful and personal way. For example, I’ve titled one of my Custom Shelves "Re-read me"—this is for books I've read but would like to revisit, so they don't get lost in the jumble of other books.</p><p>You’ll also be able to search quickly for a particular book within your library, or sort your library using different criteria—like author, title, last read and price. The last Beta Feature is a new shelf called Ready to Read, which shows you the books you haven’t finished yet to help you quickly pick up where you left off. </p></div></div><div class="block-paragraph"><div class="rich-text"><h3>How can you get started testing?</h3><p>Head to <a href="https://play.google.com/books">play.google.com/books</a>, click the Settings button, and select “Beta Features” to get started. You can enable all features or just the ones you find most useful. If you’d like to submit feedback on the Beta Features after you’ve tried them out, or want to send us a feature request you’ve been dreaming up, click on the Settings icon and then select Send Feedback.</p></div></div><img alt="" height="1" src="http://feeds.feedburner.com/~r/blogspot/MKuf/~4/RD6YaTwePOs" width="1"/></div>
  572.    </summary>
  573.    <content>Google Play Books announces new experimental features.</content>
  574.    <updated>2019-08-15T16:00:00Z</updated>
  575.    <category term="Google Play"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.blog.google/products/google-play/play-books-new-experimental-features/</feedburner:origLink>
  576.    <source>
  577.      <id>https://www.blog.google/</id>
  578.      <logo>https://www.blog.google/static/blogv2/images/google.a51985becaa6.png</logo>
  579.      <author>
  580.        <name>Google</name>
  581.      </author>
  582.      <link href="https://www.blog.google/" rel="alternate" type="text/html"/>
  583.      <link href="http://feeds.feedburner.com/blogspot/MKuf" rel="self" type="application/rss+xml"/>
  584.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  585.      <subtitle>Insights from Googlers into our products, technology, and the Google culture.</subtitle>
  586.      <title>The Official Google Blog</title>
  587.      <updated>2019-08-16T19:29:07Z</updated>
  588.    </source>
  589.  </entry>
  590.  
  591.  <entry xml:lang="en-us">
  592.    <id>https://www.blog.google/outreach-initiatives/education/socratic-by-google/</id>
  593.    <link href="http://feedproxy.google.com/~r/blogspot/MKuf/~3/nwrcg1KvWFg/" rel="alternate" type="text/html"/>
  594.    <title>When students get stuck, Socratic can help</title>
  595.    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div class="block-paragraph"><div class="rich-text"><p>In building educational resources for teachers and students, we’ve spent a lot of time talking to them about challenges they face and how we can help. We’ve heard that students often get “stuck” while studying. When they have questions in the classroom, a teacher can quickly clarify—but it’s frustrating for students who spend hours trying to find answers while studying on their own. </p><p><a href="https://apps.apple.com/app/apple-store/id1014164514?pt=9008&amp;ct=aug15-keyword&amp;mt=8">Socratic</a>, a mobile learning app we acquired last year, now uses AI technology to help high school and university students when they’re doing school work outside the classroom. It guides them through the resources that are available, and identifies the core underlying concepts that will lead them to answers to their questions.</p><p>With the latest improvements, here are a few ways Socratic has become even more helpful for students.</p><h3>Get help at any moment</h3><p>Students can take a photo of a question or use their voice to ask a question, and we’ll find the most relevant resources from across the web.  If they’re struggling to understand textbook content or handouts, they can take a picture of the page and check out alternative explanations of the same concepts.</p></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--medium h-c-grid__col h-c-grid__col--4 h-c-grid__col--offset-4 "><img alt="Solving a math equation and a physics problem with Socratic&#x2019;s help" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/original_images/askaquestion.gif"/><div class="rich-text"><p> Solving a math equation and a physics problem with Socratic’s help</p><p><br/></p></div></figure></div></div></div><div class="block-paragraph"><div class="rich-text"><h3>Understand the underlying concepts</h3><p/><p>To help students working on complex problems, we’ve built and trained algorithms that look at a student’s question and automatically identify the relevant underlying concepts. From there, we can find the videos, concept explanations, and online resources to help them work through their questions. For students who want to learn even more, we break down the concepts into smaller, easy-to-understand lessons. </p></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--medium h-c-grid__col h-c-grid__col--4 h-c-grid__col--offset-4 "><img alt="Socratic takes a problem, X-rays it, and extracts the underlying concepts." src="https://storage.googleapis.com/gweb-uniblog-publish-prod/original_images/googleai_v2.gif"/><div class="rich-text"><p>Socratic takes a problem, X-rays it, and extracts the underlying concepts.</p></div></figure></div></div></div><div class="block-paragraph"><div class="rich-text"><h3>Browse helpful topic explanations for quick reference</h3><p>To help students who are reviewing what they’ve learned or studying for a test, we’ve worked with educators to create subject guides on over 1,000 higher education and high school topics. It takes two taps to look up any topic they need to brush up on, get the key points, and then go deeper with helpful resources on the web.</p></div></div><div class="block-image_full_width"><div class="article-module h-c-page"><div class="h-c-grid"><figure class="article-image--medium h-c-grid__col h-c-grid__col--4 h-c-grid__col--offset-4 "><img alt="Scroll on the Socratic app to find study guides and resources" src="https://storage.googleapis.com/gweb-uniblog-publish-prod/original_images/explorer_56kHA30.gif"/><div class="rich-text"><p>Scroll on the Socratic app to find study guides and resources</p></div></figure></div></div></div><div class="block-paragraph"><div class="rich-text"><p>You can leave feedback in the app- we’d love to hear from you. It’s available today on <a href="https://apps.apple.com/app/apple-store/id1014164514?pt=9008&amp;ct=aug15-keyword&amp;mt=8">iOS</a> and will be available on Android in the fall. </p></div></div><img alt="" height="1" src="http://feeds.feedburner.com/~r/blogspot/MKuf/~4/nwrcg1KvWFg" width="1"/></div>
  596.    </summary>
  597.    <content>Socratic helps high school and university students with school work outside the classroom.</content>
  598.    <updated>2019-08-15T16:00:00Z</updated>
  599.    <category term="AI"/>
  600.    <category term="Education"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.blog.google/outreach-initiatives/education/socratic-by-google/</feedburner:origLink>
  601.    <source>
  602.      <id>https://www.blog.google/</id>
  603.      <logo>https://www.blog.google/static/blogv2/images/google.a51985becaa6.png</logo>
  604.      <author>
  605.        <name>Google</name>
  606.      </author>
  607.      <link href="https://www.blog.google/" rel="alternate" type="text/html"/>
  608.      <link href="http://feeds.feedburner.com/blogspot/MKuf" rel="self" type="application/rss+xml"/>
  609.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  610.      <subtitle>Insights from Googlers into our products, technology, and the Google culture.</subtitle>
  611.      <title>The Official Google Blog</title>
  612.      <updated>2019-08-16T19:29:08Z</updated>
  613.    </source>
  614.  </entry>
  615.  
  616.  <entry>
  617.    <id>tag:www.oreilly.com,2019-08-15:/ideas/labeling-transforming-and-structuring-training-data-sets-for-machine-learning</id>
  618.    <link href="http://feedproxy.google.com/~r/oreilly/radar/atom/~3/d6dHo41R0os/labeling-transforming-and-structuring-training-data-sets-for-machine-learning" rel="alternate" type="text/html"/>
  619.    <title>Labeling, transforming, and structuring training data sets for machine learning</title>
  620.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><img src="https://d3ucjech6zwjp8.cloudfront.net/600x450/detected-with-yolo--schreibtisch-mit-objekten_crop-0b41e56b6733ed84ef9f163c4e04a908.jpg"/></p><p><em>The O’Reilly Data Show Podcast: Alex Ratner on how to build and manage training data with Snorkel.</em></p><p>In this episode of the <a href="https://www.oreilly.com/ideas/topics/oreilly-data-show-podcast">Data Show</a>, I speak with <a href="https://ajratner.github.io/">Alex Ratner</a>, project lead for Stanford’s <a href="http://snorkel.org">Snorkel</a> open source project; Ratner also recently garnered a faculty position at the University of Washington and is currently working on a company supporting and extending the Snorkel project. Snorkel is a framework for building and managing training data. Based on our <a href="https://www.oreilly.com/data/free/ai-adoption-in-the-enterprise.csp">survey</a> from earlier this year, labeled data remains <a href="https://www.oreilly.com/ideas/the-quest-for-high-quality-data">a key bottleneck</a> for organizations building machine learning applications and services.</p>
  621.  
  622. <p>Ratner was <a href="https://www.oreilly.com/ideas/creating-large-training-data-sets-quickly">a guest on the podcast</a> a little over two years ago when Snorkel was a relatively new project. Since then, Snorkel has added more features, expanded into computer vision use cases, and now boasts many users, including Google, Intel, IBM, and <a href="http://snorkel.org">other organizations</a>. Along with his thesis advisor <a href="https://www.oreilly.com/ideas/software-2-and-snorkel">professor Chris Ré of Stanford</a>, Ratner and his collaborators have long championed the importance of building tools aimed squarely at helping teams build and manage training data. With today’s release of Snorkel version 0.9, we are a step closer to having <a href="https://www.oreilly.com/ideas/the-quest-for-high-quality-data">a framework that enables the programmatic creation of training data sets</a>.</p><p>Continue reading <a href="https://www.oreilly.com/ideas/labeling-transforming-and-structuring-training-data-sets-for-machine-learning">Labeling, transforming, and structuring training data sets for machine learning.</a></p><img alt="" height="1" src="http://feeds.feedburner.com/~r/oreilly/radar/atom/~4/d6dHo41R0os" width="1"/></div>
  623.    </content>
  624.    <updated>2019-08-15T11:30:00Z</updated><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.oreilly.com/ideas/labeling-transforming-and-structuring-training-data-sets-for-machine-learning</feedburner:origLink>
  625.    <author>
  626.      <name>Ben Lorica</name>
  627.    </author>
  628.    <source>
  629.      <id>https://www.oreilly.com</id>
  630.      <author>
  631.        <name>O'Reilly Media</name>
  632.      </author>
  633.      <link href="https://www.oreilly.com" rel="alternate" type="text/html"/>
  634.      <link href="http://feeds.feedburner.com/oreilly/radar/atom" rel="self" type="application/atom+xml"/>
  635.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  636.      <subtitle>All of our Ideas and Learning material from all of our topics.</subtitle>
  637.      <title>All - O'Reilly Media</title>
  638.      <updated>2019-08-18T19:19:43Z</updated>
  639.    </source>
  640.  </entry>
  641.  
  642.  <entry>
  643.    <id>tag:www.schneier.com,2019:/blog//2.12182</id>
  644.    <link href="https://www.schneier.com/blog/archives/2019/08/bypassing_apple.html" rel="alternate" type="text/html"/>
  645.    <title>Bypassing Apple FaceID's Liveness Detection Feature</title>
  646.    <summary>Apple's FaceID has a liveness detection feature, which prevents someone from unlocking a victim's phone by putting it in front of his face while he's sleeping. That feature has been hacked: Researchers on Wednesday during Black Hat USA 2019 demonstrated an attack that allowed them to bypass a victim's FaceID and log into their phone simply by putting a pair...</summary>
  647.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p>Apple's FaceID has a liveness detection feature, which prevents someone from unlocking a victim's phone by putting it in front of his face while he's sleeping. That feature has been <a href="https://threatpost.com/researchers-bypass-apple-faceid-using-biometrics-achilles-heel/147109/">hacked</a>:</p>
  648.  
  649. <blockquote><p>Researchers on Wednesday during <a href="https://threatpost.com/researchers-bypass-apple-faceid-using-biometrics-achilles-heel/147109/">Black Hat USA 2019</a> demonstrated an attack that allowed them to bypass a victim's FaceID and log into their phone simply by putting a pair of modified glasses on their face. By merely placing tape carefully over the lenses of a pair glasses and placing them on the victim's face the researchers demonstrated how they could bypass Apple's FaceID in a specific scenario. The attack itself is difficult, given the bad actor would need to figure out how to put the glasses on an unconscious victim without waking them up.</p></blockquote></div>
  650.    </content>
  651.    <updated>2019-08-15T11:19:12Z</updated>
  652.    <published>2019-08-15T11:19:12Z</published>
  653.    <category label="Apple" scheme="http://www.sixapart.com/ns/types#tag" term="apple"/>
  654.    <category label="biometrics" scheme="http://www.sixapart.com/ns/types#tag" term="biometrics"/>
  655.    <category label="hacking" scheme="http://www.sixapart.com/ns/types#tag" term="hacking"/>
  656.    <category label="identification" scheme="http://www.sixapart.com/ns/types#tag" term="identification"/>
  657.    <author>
  658.      <name>Bruce Schneier</name>
  659.    </author>
  660.    <source>
  661.      <id>tag:www.schneier.com,2014-06-11:/blog//2</id>
  662.      <link href="https://www.schneier.com/blog/" rel="alternate" type="text/html"/>
  663.      <link href="https://www.schneier.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
  664.      <subtitle>A blog covering security and security technology.</subtitle>
  665.      <title>Schneier on Security</title>
  666.      <updated>2019-08-16T21:05:53Z</updated>
  667.    </source>
  668.  </entry>
  669.  
  670.  <entry>
  671.    <id>tag:www.oreilly.com,2019-08-15:/ideas/four-short-links-15-august-2019</id>
  672.    <link href="http://feedproxy.google.com/~r/oreilly/radar/atom/~3/T3PN0Q4ouzc/four-short-links-15-august-2019" rel="alternate" type="text/html"/>
  673.    <title>Four short links: 15 August 2019</title>
  674.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><em>Data Businesses, Data Science Class, Tiny Mouse, and Training Bias</em></p><ol>
  675. <li>
  676. <a href="https://kwokchain.com/2019/04/09/making-uncommon-knowledge-common/">Making Uncommon Knowledge Common</a> -- <i>The Rich Barton playbook is building data content loops to disintermediate incumbents and dominate search, and then using this traction to own demand in their industries.</i>
  677. </li>
  678. <li>
  679. <a href="https://github.com/data-ppf/data-ppf.github.io/wiki/Syllabus">Data: Past, Present, and Future</a> -- <i>Data and data-empowered algorithms now shape our professional, personal, and political realities. This course introduces students both to critical thinking and practice in understanding how we got here, and the future we now are building together as scholars, scientists, and citizens.</i> The way "Intro to Data Science" classes ought to be.</li>
  680. <li>
  681. <a href="https://www.kickstarter.com/projects/swiftpoint/tracpoint">Clever Travel Mouse</a> -- very small presenter tool, mouse and pointer.</li>
  682. <li>
  683. <a href="https://boingboing.net/2019/08/14/white-aligned-english.html">Training Bias in "Hate Speech Detector" Means Black Speech is More Likely to be Censored</a> (BoingBoing) -- <i>The authors do a pretty good job of pinpointing the cause: the people who hand-labeled the training data for the algorithm were themselves biased, and incorrectly, systematically misidentified AAE writing as offensive. And since machine learning models are no better than their training data (though they are often worse!), the bias in the data propagated through the model.</i>
  684. </li>
  685. </ol>
  686. <p>Continue reading <a href="https://www.oreilly.com/ideas/four-short-links-15-august-2019">Four short links: 15 August 2019.</a></p><img alt="" height="1" src="http://feeds.feedburner.com/~r/oreilly/radar/atom/~4/T3PN0Q4ouzc" width="1"/></div>
  687.    </content>
  688.    <updated>2019-08-15T11:05:00Z</updated><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.oreilly.com/ideas/four-short-links-15-august-2019</feedburner:origLink>
  689.    <author>
  690.      <name>Nat Torkington</name>
  691.    </author>
  692.    <source>
  693.      <id>https://www.oreilly.com</id>
  694.      <author>
  695.        <name>O'Reilly Media</name>
  696.      </author>
  697.      <link href="https://www.oreilly.com" rel="alternate" type="text/html"/>
  698.      <link href="http://feeds.feedburner.com/oreilly/radar/atom" rel="self" type="application/atom+xml"/>
  699.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  700.      <subtitle>All of our Ideas and Learning material from all of our topics.</subtitle>
  701.      <title>All - O'Reilly Media</title>
  702.      <updated>2019-08-18T19:19:43Z</updated>
  703.    </source>
  704.  </entry>
  705.  
  706.  <entry>
  707.    <id>https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces55</id>
  708.    <link href="https://blogs.apache.org/foundation/entry/the-apache-software-foundation-announces55" rel="alternate" type="text/html"/>
  709.    <title>The Apache® Software Foundation Announces Annual Report for 2019 Fiscal Year</title>
  710.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><strong><em>
  711. World's largest Open Source foundation’s 300+ freely-available, enterprise-grade Apache projects power some of the most visible and widely used applications in computing today.
  712.  
  713. </em></strong></p>
  714.  <p><strong>Wakefield, MA —13 August 2019—</strong> The Apache® Software Foundation (ASF), the all-volunteer developers, stewards, and incubators of more than 350 Open Source projects and initiatives, announced today the availability of the annual report for its 2019 fiscal year, which ended 30 April 2019.
  715.  
  716. </p>
  717.  <p>Celebrating its 20th Anniversary, the world's largest Open Source foundation’s "Apache Way" of community-driven development is the process behind hundreds of freely-available (100% no cost), enterprise-grade Apache projects that serve as the backbone for some of the most visible and widely used applications in Artificial Intelligence and Deep Learning, Big Data, build management, Cloud Computing, content management, DevOps, IoT and Edge computing, mobile, servers, and Web frameworks, among many other categories. </p>
  718.  <p>The ubiquity of Apache software is undeniable, with Apache projects managing exabytes of data, executing teraflops of operations, and storing billions of objects in virtually every industry. Apache software is an integral part of nearly every end user computing device, from laptops to tablets to phones.
  719.  
  720. Apache software is used in every Internet-connected country on the planet.</p>
  721.  <p>
  722.  
  723. Highlights include:
  724. </p>
  725.  <p> </p>
  726.  <ol>
  727.    <li>
  728. ASF codebase is conservatively valued at least $20B, using the COCOMO 2 model;
  729. </li>
  730.    <li>Continued guardianship of 190M+ lines of code in the Apache repositories;</li>
  731.    <li>Total of 10 Platinum Sponsors, 9 Gold Sponsors, 11 Silver Sponsors, 25 Bronze Sponsors, and 6 Platinum Targeted Sponsors, 5 Gold Targeted Sponsors, 3 Silver Targeted Sponsors, and 10 Bronze Targeted Sponsors;
  732. </li>
  733.    <li>35 new individual ASF Members elected, totalling 766;
  734. </li>
  735.    <li>Exceeded 7,000 code Committers;
  736. </li>
  737.    <li>202 Top-Level communities overseeing 332 Apache projects and sub-projects;
  738. </li>
  739.    <li>17 newly-graduated Top-Level Projects from the Apache Incubator;
  740. </li>
  741.    <li>47 projects currently undergoing development in the Apache Incubator;
  742. </li>
  743.    <li>Top 5 most active/visited Apache projects: Hadoop, Kafka, Lucene, POI, ZooKeeper;
  744. </li>
  745.    <li>Top 5 Apache repositories by number of commits: Camel, Hadoop, HBase, Beam, and Flink;
  746. </li>
  747.    <li>Top 5 Apache repositories by lines of code: NetBeans, OpenOffice, Flex (combined), Mynewt (combined), and Trafodion;
  748. </li>
  749.    <li>35M page views per week across apache.org;
  750. </li>
  751.    <li>9M+ source code downloads from Apache mirrors (excluding convenience binaries);</li>
  752.    <li>3,280 Committers changed 71,186,324 lines of code over 222,684 commits;
  753. </li>
  754.    <li>18,750 authors sent 1,402,267 emails on 570,469 topics across 1,131 mailing lists;
  755. </li>
  756.    <li>Top 5 most active mailing lists ([email protected] + [email protected]): Flink, Beam, Lucene, Ignite, and Kafka;
  757. </li>
  758.    <li>Automated Gitbox across ~1,800 git repositories containing ~75GB of code and repository history;
  759. </li>
  760.    <li>Each GitHub account monitored for security compliance;
  761. </li>
  762.    <li>GitHub traffic: Top 5 most active Apache sources --clones: Thrift, Cordova, Arrow, Airflow, and Beam;
  763. </li>
  764.    <li>GitHub traffic: Top 5 most active Apache sources --visits: Spark, Camel, Flink, Kafka, and Airflow;
  765. </li>
  766.    <li>24th anniversary of the Apache HTTP Server (20 years under the ASF umbrella);
  767. </li>
  768.    <li>770 Individual Contributor License Agreements (ICLAs) signed;
  769. </li>
  770.    <li>28 Corporate Contributor License Agreements signed;
  771. </li>
  772.    <li>26 Software Grant Agreements signed; and
  773. </li>
  774.    <li>ASF is a mentoring organization in Google Summer of Code for 14th consecutive year.
  775.  
  776. </li>
  777.  </ol>
  778.  <p> </p>
  779.  <p>The full report is available online at <a href="https://s.apache.org/FY2019AnnualReport">https://s.apache.org/FY2019AnnualReport</a> </p>
  780.  <p><strong>
  781.  
  782. About The Apache Software Foundation (ASF)</strong> <br/>Established in 1999, the all-volunteer Foundation oversees more than 350 leading Open Source projects, including Apache HTTP Server —the world's most popular Web server software. Through the ASF's merit-based process known as "The Apache Way," more than 770 individual Members and 7,000 Committers across six continents successfully collaborate to develop freely available enterprise-grade software, benefiting billions of users worldwide: thousands of software solutions are distributed under the Apache License; and the community actively participates in ASF mailing lists, mentoring initiatives, and ApacheCon, the Foundation's official user conference, trainings, and expo. The ASF is a US 501(c)(3) charitable organization, funded by individual donations and corporate sponsors including Aetna, Alibaba Cloud Computing, Anonymous, ARM, Baidu, Bloomberg, Budget Direct, Capital One, Cerner, Cloudera, Comcast, Facebook, Google, Handshake, Huawei, IBM, Indeed, Inspur, Leaseweb, Microsoft, ODPi, Pineapple Fund, Pivotal, Private Internet Access, Red Hat, Target, Tencent, Union Investment, Workday, and Verizon Media. For more information, visit <a href="http://apache.org/">http://apache.org/</a> and <a href="https://twitter.com/TheASF">https://twitter.com/TheASF
  783. </a></p>
  784.  <p>
  785.  
  786. © The Apache Software Foundation. "Apache", "Airlow", "Apache Airflow", "Arrow", "Apache Arrow", "Beam", "Apache Beam", "Camel", "Apache Camel", "Cordova", "Apache Cordova", "Flex", "Apache Flex", "Flink", "Apache Flink", "Hadoop", "Apache Hadoop", "HBase", "Apache HBase", "Ignite", "Apache Ignite", "Kafka", "Apache Kafka", "Lucene", "Apache Lucene", "Mynewt", "Apache Mynewt", "NetBeans", "Apache NetBeans", "OpenOffice", "Apache OpenOffice", "POI", "Apache POI", "Spark", "Apache Spark", "Trafodion", "Apache Trafodion", "ZooKeeper", "Apache ZooKeeper", and "ApacheCon" are registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries. All other brands and trademarks are the property of their respective owners.
  787. </p>
  788.  <p>
  789.  
  790.  
  791.  
  792. # # #
  793. </p></div>
  794.    </content>
  795.    <updated>2019-08-15T04:32:42Z</updated>
  796.    <published>2019-08-13T16:58:14Z</published>
  797.    <category label="General" term="General"/>
  798.    <category scheme="http://roller.apache.org/ns/tags/" term="2019"/>
  799.    <category scheme="http://roller.apache.org/ns/tags/" term="annual"/>
  800.    <category scheme="http://roller.apache.org/ns/tags/" term="apache"/>
  801.    <category scheme="http://roller.apache.org/ns/tags/" term="fiscal"/>
  802.    <category scheme="http://roller.apache.org/ns/tags/" term="foundation"/>
  803.    <category scheme="http://roller.apache.org/ns/tags/" term="fy2019"/>
  804.    <category scheme="http://roller.apache.org/ns/tags/" term="report"/>
  805.    <category scheme="http://roller.apache.org/ns/tags/" term="software"/>
  806.    <category scheme="http://roller.apache.org/ns/tags/" term="year"/>
  807.    <author>
  808.      <name>Sally</name>
  809.    </author>
  810.    <source>
  811.      <id>https://blogs.apache.org/foundation/feed/entries/atom</id>
  812.      <link href="https://blogs.apache.org/foundation/feed/entries/atom" rel="self" type="application/atom+xml"/>
  813.      <link href="https://blogs.apache.org/foundation/" rel="alternate" type="text/html"/>
  814.      <subtitle>The voice of the ASF</subtitle>
  815.      <title>The Apache Software Foundation Blog</title>
  816.      <updated>2019-08-16T17:24:06Z</updated>
  817.    </source>
  818.  </entry>
  819.  
  820.  <entry xml:lang="en-US">
  821.    <id>https://webkit.org/?p=9507</id>
  822.    <link href="https://webkit.org/blog/9507/announcing-the-webkit-tracking-prevention-policy/" rel="alternate" type="text/html"/>
  823.    <title xml:lang="en-US">Announcing the WebKit Tracking Prevention Policy</title>
  824.    <summary xml:lang="en-US">Today we are publishing the WebKit Tracking Prevention Policy, covering: What types of tracking WebKit will prevent.</summary>
  825.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>Today we are publishing the <a href="https://webkit.org/tracking-prevention-policy">WebKit Tracking Prevention Policy</a>, covering:</p>
  826. <ul>
  827. <li>What types of tracking WebKit will prevent.</li>
  828. <li>When other tracking countermeasures come into play such as limiting capabilities and informed user consent.</li>
  829. <li>How WebKit handles unintended impact of our tracking prevention.</li>
  830. </ul>
  831. <p>We’d like to thank Mozilla for their <a href="https://wiki.mozilla.org/Security/Anti_tracking_policy">anti-tracking policy</a> which served as inspiration for ours.</p>
  832. <p>Please send us your comments or questions about this policy to <a href="https://twitter.com/webkit">@webkit</a> on Twitter.</p></div>
  833.    </content>
  834.    <updated>2019-08-15T01:46:18Z</updated>
  835.    <published>2019-08-14T22:44:55Z</published>
  836.    <category scheme="https://webkit.org" term="News"/>
  837.    <author>
  838.      <name/>
  839.    </author>
  840.    <source>
  841.      <id>https://webkit.org/feed/atom/</id>
  842.      <link href="https://webkit.org" rel="alternate" type="text/html"/>
  843.      <link href="https://webkit.org/blog/feed/atom/" rel="self" type="application/atom+xml"/>
  844.      <subtitle xml:lang="en-US">Open Source Web Browser Engine</subtitle>
  845.      <title xml:lang="en-US">Blog – WebKit</title>
  846.      <updated>2019-08-15T20:14:35Z</updated>
  847.    </source>
  848.  </entry>
  849.  
  850.  <entry>
  851.    <id>tag:www.schneier.com,2019:/blog//2.12181</id>
  852.    <link href="https://www.schneier.com/blog/archives/2019/08/side-channel_at_2.html" rel="alternate" type="text/html"/>
  853.    <title>Side-Channel Attack against Electronic Locks</title>
  854.    <summary>Several high-security electronic locks are vulnerable to side-channel attacks involving power monitoring....</summary>
  855.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p>Several high-security electronic locks are vulnerable to <a href="https://www.reuters.com/article/us-locks-cyber-exclusive/exclusive-high-security-locks-for-government-and-banks-hacked-by-researcher-idUSKCN1UW26Z">side-channel attacks</a> involving power monitoring.<br/>
  856. </p></div>
  857.    </content>
  858.    <updated>2019-08-14T17:36:54Z</updated>
  859.    <published>2019-08-14T17:36:54Z</published>
  860.    <category label="hacking" scheme="http://www.sixapart.com/ns/types#tag" term="hacking"/>
  861.    <category label="locks" scheme="http://www.sixapart.com/ns/types#tag" term="locks"/>
  862.    <category label="side-channel attacks" scheme="http://www.sixapart.com/ns/types#tag" term="sidechannelattacks"/>
  863.    <category label="vulnerabilities" scheme="http://www.sixapart.com/ns/types#tag" term="vulnerabilities"/>
  864.    <author>
  865.      <name>Bruce Schneier</name>
  866.    </author>
  867.    <source>
  868.      <id>tag:www.schneier.com,2014-06-11:/blog//2</id>
  869.      <link href="https://www.schneier.com/blog/" rel="alternate" type="text/html"/>
  870.      <link href="https://www.schneier.com/blog/atom.xml" rel="self" type="application/atom+xml"/>
  871.      <subtitle>A blog covering security and security technology.</subtitle>
  872.      <title>Schneier on Security</title>
  873.      <updated>2019-08-16T21:05:53Z</updated>
  874.    </source>
  875.  </entry>
  876.  
  877.  <entry>
  878.    <id>tag:www.oreilly.com,2019-08-14:/ideas/four-short-links-14-august-2019</id>
  879.    <link href="http://feedproxy.google.com/~r/oreilly/radar/atom/~3/-bSyI_Ur54k/four-short-links-14-august-2019" rel="alternate" type="text/html"/>
  880.    <title>Four short links: 14 August 2019</title>
  881.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><em>Hardware Deplatforming, Hiring Groupthink, Loot Boxes and Problem Gambling, and Interoperability and Privacy</em></p><ol>
  882. <li>
  883. <a href="https://boingboing.net/2019/08/13/getting-deplatformed-from-appl.html">Getting Deplatformed from Apple</a> (BoingBoing) -- <i>It turned out that getting locked out of his Apple account made all of Luke's Apple hardware almost useless.</i> I think it should be illegal to do this. I believe in deplatforming (with appropriate boundaries and appeal) but breaking my hardware is bollocks.</li>
  884. <li>
  885. <a href="https://hbr.org/2019/08/how-to-avoid-groupthink-when-hiring">How to Avoid Groupthink When Hiring</a> (HBR) -- abridged process: <i>First, make it clear to interviewers that they should not share their interview experiences with each other before the final group huddle. Next, ask each interviewer to perform a few steps before the group huddle: distill their interview rating to a single numerical score; write down their main arguments for and against hiring this person and their final conclusion; If interviewers are emailing in their numerical scores and thoughts on a candidate, don’t include the entire group in the email. Finally, the hiring managers should take note of the average score for a candidate.</i>
  886. </li>
  887. <li>
  888. <a href="https://www.gamesindustry.biz/articles/2019-08-08-loot-boxes-a-matter-of-life-or-death">Loot Boxes a Matter of "Life or Death," says Researcher</a> -- <i>"There's one clear message that I want to get across today, and it stands in stark contrast to mostly everything you've heard so far," Zendle said. "The message is this: spending money on loot boxes is linked to problem gambling. The more money people spend on loot boxes, the more severe their problem gambling is. This isn't just my research. This is an effect that has been replicated numerous times across the world by multiple independent labs. This is something the games industry does not engage with."</i>
  889. </li>
  890. <li>
  891. <a href="https://boingboing.net/2019/08/13/interoperability-and-privacy.html">Interoperability and Privacy</a> (BoingBoing) -- latest in the tear that Cory's been on about how to deal with the centralized power of BigSocial.</li>
  892. </ol>
  893. <p>Continue reading <a href="https://www.oreilly.com/ideas/four-short-links-14-august-2019">Four short links: 14 August 2019.</a></p><img alt="" height="1" src="http://feeds.feedburner.com/~r/oreilly/radar/atom/~4/-bSyI_Ur54k" width="1"/></div>
  894.    </content>
  895.    <updated>2019-08-14T11:00:00Z</updated><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://www.oreilly.com/ideas/four-short-links-14-august-2019</feedburner:origLink>
  896.    <author>
  897.      <name>Nat Torkington</name>
  898.    </author>
  899.    <source>
  900.      <id>https://www.oreilly.com</id>
  901.      <author>
  902.        <name>O'Reilly Media</name>
  903.      </author>
  904.      <link href="https://www.oreilly.com" rel="alternate" type="text/html"/>
  905.      <link href="http://feeds.feedburner.com/oreilly/radar/atom" rel="self" type="application/atom+xml"/>
  906.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  907.      <subtitle>All of our Ideas and Learning material from all of our topics.</subtitle>
  908.      <title>All - O'Reilly Media</title>
  909.      <updated>2019-08-18T19:19:43Z</updated>
  910.    </source>
  911.  </entry>
  912.  
  913.  <entry xml:lang="en">
  914.    <id>https://xkcd.com/2189/</id>
  915.    <link href="https://xkcd.com/2189/" rel="alternate" type="text/html"/>
  916.    <title xml:lang="en">Old Game Worlds</title>
  917.    <summary type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><img alt="Ok, how many coins for a cinnamon roll?" src="https://imgs.xkcd.com/comics/old_game_worlds.png" title="Ok, how many coins for a cinnamon roll?"/></div>
  918.    </summary>
  919.    <updated>2019-08-14T00:00:00Z</updated>
  920.    <source>
  921.      <id>https://xkcd.com/</id>
  922.      <author>
  923.        <name>Randall Munroe</name>
  924.      </author>
  925.      <link href="https://xkcd.com/" rel="alternate" type="text/html"/>
  926.      <link href="http://www.xkcd.org/atom.xml" rel="self" type="application/atom+xml"/>
  927.      <title xml:lang="en">xkcd.com</title>
  928.      <updated>2019-08-16T00:00:00Z</updated>
  929.    </source>
  930.  </entry>
  931.  
  932.  <entry xml:lang="en-US">
  933.    <id>https://www.symphonious.net/?p=2268</id>
  934.    <link href="https://www.symphonious.net/2019/08/14/into-eth-2-adding-artemis/" rel="alternate" type="text/html"/>
  935.    <title xml:lang="en-US">Into Eth 2 – Adding Artemis</title>
  936.    <summary xml:lang="en-US">Continuing our adventures in setting up a private beacon chain… Previously we got an Eth 1 chain with the deposit contract and successfully sent a deposit to register a new validator.  So far though, we have no way of telling if it actually worked. What we need is an actual beacon chain client.  Enter Artemis…Step […]</summary>
  937.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>Continuing our adventures in setting up a private beacon chain… Previously we got an Eth 1 chain with the deposit contract and successfully sent a deposit to register a new validator.  So far though, we have no way of telling if it actually worked. What we need is an actual beacon chain client.  Enter Artemis…</p><h2>Step 3 – Add a Beacon Chain Client</h2><p>We’ll be using Artemis, partly because I’m incredibly biased and partly because it happens to support the exact version of the deposit contract we’ve deployed (what a coincidence!).</p><p>We’ll need a <a href="https://github.com/ajsutton/private-beaconchain/blob/d681f51bc9627fbf499369d921a31e88cfb8edd1/artemis/config.toml">config file</a> for it, the vast majority of which is boiler plate I copied and probably don’t actually need.  The important bit though is we need to point it at our Pantheon node so it can query the ETH1 chain data. We also need to tell it the address of our deposit contract:</p><pre>[deposit]<br/># normal, test, simulation<br/># "test" pre-production<br/># "simulation" to run a simulation of deposits with ganache-cli, if a inputFile is included the file will replay the deposits<br/># "normal" production, must include contractAddr and nodeUrl<br/>mode = "normal"<br/>...<br/>contractAddr = "0xdddddddddddddddddddddddddddddddddddddddd"<br/>nodeUrl = "http://eth1:8545"</pre><p>Note that “eth1” is the name we gave to our Pantheon docker image. Docker will do its magic to resolve that to Pantheon’s IP address inside the container.</p><p>And then we have some relatively standard docker boiler plate in our <a href="https://github.com/ajsutton/private-beaconchain/blob/d681f51bc9627fbf499369d921a31e88cfb8edd1/artemis/run.sh">run.sh</a> script for it.</p><p>If you’ve followed all the steps from part 1 and actually sent a deposit transaction, when you run Artemis after a few moments it should create a JSON file in artemis/output/artemis.json containing something like:</p><pre>{<br/>  "amount": 32000000000,<br/>  "eventType": "Deposit",<br/>  "merkle_tree_index": "0",<br/>  "pubkey": "0x88526BB3800ABB7BA3E4DF4255D043AA661EDDBBFDC0B8C3209034B7EEA65EB3C32AAF0E5D19E8998A1CE5E2B9B64299",<br/>  "withdrawal_credentials": "0x008098BD37974616EC6DA256B5D2650E2363D011B7CEF902F7CCBFE938CBA0EA"<br/>}</pre><p>Which is a record indicating it has received and recognised our deposit. Pretty much nothing else happens though because we still don’t have enough validators to actually get the beacon chain started.  I suspect running some 65,000 validators on my laptop might be a little ambitious so the next step is likely to be tweaking config to reduce the number of validators required before the chain starts.</p><img alt="" height="1" src="http://feeds.feedburner.com/~r/symphonious/~4/fF05c-qbaCY" width="1"/></div>
  938.    </content>
  939.    <updated>2019-08-13T22:13:47Z</updated>
  940.    <published>2019-08-13T22:13:47Z</published>
  941.    <category scheme="https://www.symphonious.net" term="Code and Geek Stuff"/>
  942.    <category scheme="https://www.symphonious.net" term="Ethereum"/>
  943.    <author>
  944.      <name>Adrian Sutton</name>
  945.      <uri>http://www.symphonious.net</uri>
  946.    </author>
  947.    <source>
  948.      <id>https://www.symphonious.net/feed/atom/</id>
  949.      <icon>https://www.symphonious.net/wp-content/uploads/2018/06/cropped-Music-32x32.png</icon>
  950.      <link href="https://www.symphonious.net" rel="alternate" type="text/html"/>
  951.      <link href="http://feeds.feedburner.com/symphonious" rel="self" type="application/atom+xml"/>
  952.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  953.      <subtitle xml:lang="en-US">Living in a state of accord.</subtitle>
  954.      <title xml:lang="en-US">Symphonious</title>
  955.      <updated>2019-08-13T22:13:47Z</updated>
  956.    </source>
  957.  </entry>
  958.  
  959.  <entry xml:lang="en-US">
  960.    <id>https://www.symphonious.net/?p=2263</id>
  961.    <link href="https://www.symphonious.net/2019/08/13/into-eth-2-eth-1-and-the-deposit-contract/" rel="alternate" type="text/html"/>
  962.    <title xml:lang="en-US">Into Eth 2 – Eth 1 and the Deposit Contract</title>
  963.    <summary xml:lang="en-US">I’ve started a little side-project to setup a “private beacon chain”.  The aim is to better understand how the beacon chain works and start to discover some of the things still required to be built or fixed in clients before it can officially launch.So what is a private beacon chain? It’s intended to be an […]</summary>
  964.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>I’ve started a little side-project to setup a “private beacon chain”.  The aim is to better understand how the beacon chain works and start to discover some of the things still required to be built or fixed in clients before it can officially launch.</p><p>So what is a private beacon chain? It’s intended to be an entirely self-contained, runs-on-my-laptop instance of the beacon chain, run as a small-scale simulation of how the real beacon chain will be fired up.</p><p>I’ve collected all the various scripts and config together in a <a href="https://github.com/ajsutton/private-beaconchain">git repo</a> so you follow along from home if you like. Be warned, there is absolutely no polish and not even a lot of thought about organisation in there.</p><h3>Step 1 – An Ethereum 1 Chain</h3><p>First of all we need an Ethereum 1 chain that will be the source of our deposits for beacon chain validators. That’s pretty easy with Pantheon, but let’s complicate matters a little by using Docker. First we’re going to need a network which will eventually (hopefully) hold a whole bevy of different Eth 2 clients all happily interoperating on our beacon chain.  So:</p><pre>docker network create beacontest</pre><p>Then we need a genesis config for our private Eth 1 chain.  I’ve copied the genesis Pantheon uses by default in dev mode with a couple of tweaks I’ll explain later.  Here’s the <a href="https://github.com/ajsutton/private-beaconchain/blob/6587c4acdeb2071f0b58adb740a131aac4c81512/pantheon/eth1-genesis.json">full file</a>.  There are a few accounts that have been allocated lots of ETH and the private keys are included in the config so it’s easy to import to MetaMask or other tools (don’t use these keys for anything real!).</p><p>Finally there’s a <a href="https://github.com/ajsutton/private-beaconchain/blob/dc67d7e66138438cb95897a232757f55de950595/pantheon/run.sh">simple little script to run Pantheon</a> using that file, in our docker network, exposing a bunch of ports and generally being setup to be useful for what we want to do.</p><h2>Step 2 – Deposit Funds</h2><p>Our beacon chain can’t become active until we have enough people who have deposited funds into the beacon chain contract to become validators. Obviously, that means we’ll need a beacon chain contract.</p><h3>Step 2.1 Deploy the Deposit Contract</h3><p>It turns out, the beacon chain contract has changed a bunch of times in different versions of the spec. This is painfully confusing because docs or examples you read usually don’t mention which version of the spec and you can waste many hours trying to interact with the wrong contract.</p><p>We will be using version 0.7.1 of the spec. Here’s that version of the <a href="https://github.com/ethereum/eth2.0-specs/blob/dev/specs/core/0_deposit-contract.md">deposit contract spec</a> and the <a href="https://github.com/ethereum/eth2.0-specs/blob/v0.7.1/deposit_contract/contracts/validator_registration.v.py">deposit contract code</a>.</p><p>To make life simpler, I’ve taken the runtime byte code for that contract and <a href="https://github.com/ajsutton/private-beaconchain/blob/dc67d7e66138438cb95897a232757f55de950595/pantheon/eth1-genesis.json#L25">added it into the genesis config</a> at the fixed address 0xdddddddddddddddddddddddddddddddddddddddd. Note when including contracts in the genesis config you need the runtime byte code, not the constructor byte code you’d normally send as transaction data. Remix makes this easy with it’s “Runtime Bytecode” tab.</p><h3>Step 2.2 Deposit Some ETH</h3><p>The deposit contract spec helpfully tells us that there’s a deposit method we need to call which takes three arguments: pubkey: bytes[48], withdrawal_credentials: bytes[32], signature: bytes[96]</p><p>Unhelpfully it gives us almost no clue what those parameters actually mean or how to generate them.</p><p>I haven’t yet found a nice stand-alone way to generate the required parameters, so I wound up shoving an extra class into my local checkout of the Artemis codebase – <a href="https://gist.github.com/ajsutton/e3287814f408ec778ab0353124f5a952">GenerateKeys.java</a> right next to the existing Artemis.java which has the main method.  There are three key steps:</p><ol><li>Generate two BLS key pairs. One for the validator to use and one for the ETH 2 account that our funds will be sent to if we choose to leave the validator pool.<ul><li>The withdrawal keys can be kept offline until you actually withdraw the funds whereas the validator keys need to be online so the validator can sign things and do its job.</li></ul></li><li>Encode the public key of the validator key pair using the compressed form with big endian encoding.<ul><li>This will be the first argument – pubKey.</li><li><del>Don’t ask me why it’s called compressed encoding when it appears to be exactly the same length as the uncompressed form.</del> UPDATE: Ben Edgington helpfully points out that an uncompressed key is actually 96 bytes – I’d been misled by a well-meaning error message when the real problem was I was using little endian instead of big.</li></ul></li><li>Calculate the SHA256 hash of the public key of the withdrawal key pair, in big endian encoding. Replace the first byte with 0 (the BLS_WITHDRAWAL_PREFIX_BYTE).<ul><li>This will be the withdrawal commitment</li></ul></li><li>Calculate the signature. This requires serialising the DepositData object that will ultimately be created by Eth2 clients in response to our deposit in SSZ with hash trees and stuff. Don’t ask me, I just called the existing Artemis code… That then gets signed using the validator’s private key.<ul><li>This proves you actually <em>have</em> the private key matching the public key you’re trying to register as a validator.</li><li>WARNING: This signature is <em>not</em> checked by the deposit contract, only be Eth2 clients. So if you get it or the public key wrong your deposit will be ignored by the beacon chain and you won’t get your ETH back.</li></ul></li></ol><p>Now that we know what parameters we need to pass, we just need to create a transaction with the required 32 ETH and those parameters encoded as a call to the deposit method.  I wrote an <a href="https://github.com/ajsutton/private-beaconchain/blob/1242411cc7a0e8410e2a6574a293e569e1087a50/deposit/index.js">especially ugly bit of JavaScript</a> to do that. You’ll need to install the npm dependencies first with:</p><pre>npm install</pre><p>and can then send our deposit with:</p><pre>node index.js</pre><p>At this point, if we actually had an ETH2 client, it would recognise that deposit as creating our first validator. Setting up our ETH2 client will be step 3 but I’m not writing that up today.  And, spoiler alert, we’re actually going to need another 65535 validators before the beacon chain will actually start, but that’s a problem for another day.</p><img alt="" height="1" src="http://feeds.feedburner.com/~r/symphonious/~4/IBPwN5ip4Ao" width="1"/></div>
  965.    </content>
  966.    <updated>2019-08-13T21:41:00Z</updated>
  967.    <published>2019-08-13T06:25:06Z</published>
  968.    <category scheme="https://www.symphonious.net" term="Code and Geek Stuff"/>
  969.    <category scheme="https://www.symphonious.net" term="Ethereum"/>
  970.    <author>
  971.      <name>Adrian Sutton</name>
  972.      <uri>http://www.symphonious.net</uri>
  973.    </author>
  974.    <source>
  975.      <id>https://www.symphonious.net/feed/atom/</id>
  976.      <icon>https://www.symphonious.net/wp-content/uploads/2018/06/cropped-Music-32x32.png</icon>
  977.      <link href="https://www.symphonious.net" rel="alternate" type="text/html"/>
  978.      <link href="http://feeds.feedburner.com/symphonious" rel="self" type="application/atom+xml"/>
  979.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  980.      <subtitle xml:lang="en-US">Living in a state of accord.</subtitle>
  981.      <title xml:lang="en-US">Symphonious</title>
  982.      <updated>2019-08-13T22:13:47Z</updated>
  983.    </source>
  984.  </entry>
  985.  
  986.  <entry xml:lang="en-us">
  987.    <id>https://www.tbray.org/ongoing/When/201x/2019/08/06/Jeanneau-795</id>
  988.    <link href="https://www.tbray.org/ongoing/When/201x/2019/08/06/Jeanneau-795" rel="alternate" type="text/html"/>
  989.    <link href="http://www.tbray.org/ongoing/When/201x/2019/08/06/Jeanneau-795#comments" rel="replies" type="application/xhtml+xml"/>
  990.    <title xml:lang="en-us">Jeanneau 795 Review</title>
  991.    <summary type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml">In Europe this boat is called the <a href="https://www.jeanneau.com/en/boats/9-merry-fisher/27-merry-fisher-795">Merry Fisher 795</a> and in  the New World, the <a href="https://www.jeanneauamerica.com/en/boats/19-nc/86-nc-795">NC 795</a>.  I’ve owned it for a few months and improved it a bit and taken it a few places and feel like sharing</div>
  992.    </summary>
  993.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p>In Europe this boat is called the
  994. <a href="https://www.jeanneau.com/en/boats/9-merry-fisher/27-merry-fisher-795">Merry Fisher 795</a> and in
  995. the New World, the
  996. <a href="https://www.jeanneauamerica.com/en/boats/19-nc/86-nc-795">NC 795</a>.  I’ve owned it for a few months and improved it a bit
  997. and taken it a few places and feel like sharing.</p>
  998. <h2 id="p-1">Why review?</h2>
  999. <p>At this point, regular readers are thinking <em>WTF, boat review?!?</em> I’ve only
  1000. been on a handful, I’ve only owned one since 2012, I’m still occasionally baffled by nautical jargon, and my command of
  1001. knots remains imperfect.</p>
  1002. <p>Here’s why. When you go shopping for a refrigerator or car or coffee-maker or TV or (especially) camera, there are loads of
  1003. excellent detailed skeptical-voiced reviews you can read before you cough up the money.
  1004. Boats (which cost more money than most of those things) are different. All the online
  1005. reviews seem to be from dealers or magazine-writers on the comp, and are by and large paeans of praise.</p>
  1006. <img alt="Jeanneau 795" src="https://www.tbray.org/ongoing/When/201x/2019/08/06/XT300842.png"/>
  1007. <p>There are owners’ forums out there, but they tend to focus on specific problems and solutions.  What’s especially missing
  1008. is “I have one of these, here are the good parts and bad parts.”</p>
  1009. <p>I’m not completely unqualified. It’s been at my dock for a few months, I’ve installed improvements, I’ve piloted twenty-plus
  1010. hours on it, motored through extreme beauty and nasty scary rough water, taken guests on pleasure cruises and a grouchy family
  1011. on a tired commute, and used it as an office for a few afternoons.</p>
  1012. <p>So I’ll see if I can beg a few links from other 795 owners on the forums and get this a bit of GoogleJuice with the aim of better
  1013. equipping other boat shoppers like me.</p>
  1014. <h2 id="p-8">Facts</h2>
  1015. <p>Jeanneau
  1016. <a href="https://fr.wikipedia.org/wiki/Jeanneau">has been making boats since 1957</a>. That link is to French Wikipedia; the English
  1017. version is mostly empty and I should fix it up. The interesting, complicated story is
  1018. <a href="http://www.jeanneau-owners.com/history.html">nicely told in English</a> by Malcolm Perrins on a Jeanneau-owners community
  1019. site. The company,
  1020. since its founding by Henry Jeanneau, has been sold multiple times to US and French companies and is now owned by
  1021. <a href="https://www.beneteau.com">Beneteau</a>.</p>
  1022. <p>The dealer told me that the Jeanneau powerboats are built in Poland<span class="dashes"> —</span> this made him happy because for
  1023. some obscure reason it leads to favorable import-tax treatment.  The Jeanneau America site says “Built in America” and the first
  1024. version of this piece doubted that, but a reader from Michigan wrote “We have the NC 895. It is built in Cadillac Michigan. They
  1025. took the old Fourwinns plant.”</p>
  1026. <p>Our boat’s curtains are labeled “Made in France” and the appliances such as chargers and thrusters and fridges are Eurobuilt and
  1027. their manuals have Italian or French as the first language, with English further back in the book. So I’m inclined to believe the
  1028. France/Poland story in this case.</p>
  1029. <p>People who are buying a boat care a lot about dimensions because one of the hardest parts is finding a place that’s big enough
  1030. and deep enough to park it. The 795 is 7.34m or or 24’4" long, and 2.99m or 9’9" wide, with a hull depth of a mere 0.56m or
  1031. 1’10"<span class="dashes"> —</span> that’s with the outboard hoisted, which is how you normally park it.</p>
  1032. <p>The 795 comes with a Yamaha outboard, either 150 or 200hp, and
  1033. <a href="https://app.jeanneau.com/static/media/document/cdf71cdc7feef6185a87d83ba9fc3356.pdf?_ga=2.194503533.1188026391.1565547335-1033419146.1565066803&amp;_gac=1.208455206.1565547335.EAIaIQobChMIk-Sqobb74wIVyMDACh0jQQCxEAAYASAAEgIQGvD_BwE">lots
  1034. of options</a>. It’s got a modest-sized berth in the bow, a tiny
  1035. but functional head (as in bathroom), and similarly tiny stove and fridge.  What electronics you get apparently depends on the
  1036. dealer.</p>
  1037. <h2 id="p-6">Good: Engine</h2>
  1038. <p>We have the
  1039. <a href="https://yamahaoutboards.com/en-us/home/outboards/350-150-hp/in-line-4">Yamaha F200</a> and since it’s an <i>out</i>board,
  1040. there’s more room <i>in</i>side the boat. I’d never really been aware of this line of motors but now when I walk around any marina I
  1041. see that somewhere between a third and a half of the powerboats are wearing them. So, right in the middle of the mainstream.</p>
  1042. <p>It’s got a very decent little electronic control screen on the dashboard and the docs are clear and comprehensive.</p>
  1043. <p>We set it at 4500RPM and it pushes the boat along at a little over 40km/h, depending on wind and waves. If you open it wide up on
  1044. smooth water you can get up
  1045. well over fifty clicks but the experience is <em>not</em> relaxing, or cheap either.</p>
  1046. <h2 id="p-9">Good: Comfort</h2>
  1047. <p>Not just good, excellent.  The pilothouse has room for a driver and two more people in comfort, four if they’re not
  1048. chunky or need extra personal space. (Protip: The aft bench is way more comfy.) The cockpit out back has forward-facing seating
  1049. for three with a cushion to lean back on, and then a couple more benches but they’re less comfy.
  1050. We’ve been out for a slow cruise on a warm night to watch fireworks with seven aboard and
  1051. it was just fine. </p>
  1052. <img alt="Fireworks in English Bay, photographed from a Jeanneau 795" src="https://www.tbray.org/ongoing/When/201x/2019/08/06/IMG_20190731_221148.png"/>
  1053. <p>The pilothouse is really the best feature. It  has a sliding “Alaska bulkhead” which means a glass door that closes, leaving the
  1054. motor and its racket outside; inside, you can have a civilized conversation without shouting.</p>
  1055. <h2 id="p-24">Good: Swimming platform</h2>
  1056. <p>It’s just big enough and has a nice practical swimming ladder. We’ve used it every time we’ve been to the cabin. I shot that
  1057. fireworks picture above sitting on the platform dangling my feet in the Pacific; very relaxing.</p>
  1058. <h2 id="p-7">Bad: Living quarters</h2>
  1059. <p>While they advertise two berths, realistically there’s just not enough space for more than one couple and they’d better be
  1060. intimate. What with the tiny fridge and stove, I don’t think this is the boat for a lengthy family
  1061. cruise up a wild coastline.</p>
  1062. <h2 id="p-10">Good: Windshield</h2>
  1063. <p>And I mean awesome. This puppy’s front glass is the size of a small European nation and when you’re sailing home with the sun
  1064. behind you in a long Canadian sunset with the mountains filling the sky in front, well, there just aren’t words for that.</p>
  1065. <img alt="Vancouver through Jeanneau 795 windshield" src="https://www.tbray.org/ongoing/When/201x/2019/08/06/IMG_20190811_154813.png"/>
  1066. <div class="caption"><p>Coming into a Vancouver from a weekend at the cottage; about two thirds of the windshield are shown.
  1067. That’s the West End at the left and the Burrard Street
  1068. Bridge behind the wiper. The little grey screen on the left is the Yamaha engine readout; some timing thing prevents
  1069. the Pixel 2 from photographing it properly.</p></div>
  1070. <p>The wipers’ coverage isn’t that great, leaving swathes of uncleaned glass in dirty weather, but you can see the
  1071. important stuff. And it comes with a windshield-washing squirter system just like your car’s, which turns out to be
  1072. brilliant when you hit big waves and they splash up and want to leave sticky salt crystals where you’re trying to look out. You
  1073. load it with windshield fluid from the gas station.</p>
  1074. <p>It’s worth mentioning the side windows too, which open and close easily and let loads of fresh air in at cruising speed without
  1075. blasting your head off, and seem completely rain-proof too.</p>
  1076. <h2 id="p-12">Good: Bow thruster</h2>
  1077. <p>This is magic. We have a nice easy tie-up along the side of a dock, not crammed into a little slip, but it’s on the left as
  1078. you come in and the boat wants to be tied up with its right side to the dock, so a 180° turn in tight quarters is called for.
  1079. With the thruster and a light touch, it’s reasonably straightforward.  The thruster is also useful as compensation for any dumb
  1080. piloting errors around the dock<span class="dashes"> —</span> of course, these <em>never</em> happen when I’m at the wheel.</p>
  1081. <h2 id="p-13">Good: It’s hackable</h2>
  1082. <p>In the Jeanneau owners’ community I found an active boat-improvement culture; they’re always adding something or replacing
  1083. something else.
  1084. By dint of extensive research from primary sources, by which I mean watching YouTube videos, I have learned how to attach things to
  1085. fiberglass (Protip: Get a countersink bit for your drill) and have so far improved ours by fastening the fire extinguisher to a
  1086. handy bulkhead, equipping the head with a toilet-paper rod, and installing a garbage-bag holder. Call me Ishmael.</p>
  1087. <p>There are a variety of surfaces suitable for equipping with electronic upgrades or just decorations.  We’ve decorated a couple
  1088. with family photos.</p>
  1089. <h2 id="p-14">Bad: Documentation</h2>
  1090. <p>Hailing from the technology space means that I should be restrained in criticizing other professions’ end-user documentation.
  1091. The boat came with a nice Jeanneau-branded satchel full of dead trees; the quality of exposition and language is, well,
  1092. mixed. Highlights are the books for the Yamaha engine and the boat itself.  The low point is the Lowrance navigation electronics tome,
  1093. obviously executed by manic pixies on acid.  The information is more or less all there but requires deep digging and Zen calm to
  1094. extract.</p>
  1095. <p>My favorite though is the anchor-winch system, which is written in impenetrably-nautical English. Fortunately it’s
  1096. accompanied by a diagram with all the parts carefully named and numbered.  Unfortunately, about half the nautical names studding the
  1097. text do not appear in the picture.</p>
  1098. <p>To be fair, I managed to figure it out well enough to anchor us (in shallow water with nearly no wind) for
  1099. firework-watching.</p>
  1100. <img alt="My niece capturing a water-color of Indian Arm" src="https://www.tbray.org/ongoing/When/201x/2019/08/06/IMG_20190722_131917.png"/>
  1101. <div class="caption"><p>My niece Anne capturing a water-color impression of
  1102. <a href="https://en.wikipedia.org/wiki/Indian_Arm">Indian Arm</a>.</p></div>
  1103. <h2 id="p-15">Good: Piloting</h2>
  1104. <p>The driver’s seat is comfy, the steering and throttle are crisp and responsive, and the view forward and aft is excellent.
  1105. Steering at speed is a little heavier and slower than our previous inboard-outboard, but it’s plenty good enough to
  1106. dodge a floating log. I’d actually like a bigger steering wheel that’s closer to me, so there’s another boat-improvement
  1107. project.</p>
  1108. <h2 id="p-16">Good: Access</h2>
  1109. <p>Getting from the cockpit around to the foredeck, and up and down the sides for washing and so on, is all dead easy.  The cabin is
  1110. a little off-center, leaving a walkway along one side; and both sides have intelligently-placed handholds to make things easy
  1111. and safe.</p>
  1112. <h2 id="p-17">Bad: Flat bottom</h2>
  1113. <p>The draft is remarkably small and the bottom, compared to the last boat, is pretty flat. This means that when you hit big
  1114. waves, for example a ferry wake that you stupidly failed to notice until you were right on top of it cruising at 40km/h, you tend to
  1115. skip along from wave to wave, hitting each one with a jarring “slap” of the flat bottom.  This can fling passengers about a bit
  1116. in a seriously uncomfortable way. Protip: Be on the sharp lookout for incoming waves and slow the hell down.</p>
  1117. <p>I’m not a bossy skipper but we have imposed one rule: If you want to move around the cabin, say so and we’ll slow down while you
  1118. do. This after I nearly put my niece in orbit when she was going to get her backpack and I slammed on the brakes because I
  1119. thought I saw some peril out front.</p>
  1120. <h2 id="p-18">Good: Home office</h2>
  1121. <p>I’m doing WFB (work from boat) one afternoon most weeks now, and it’s just terrific. The aft passenger-side bench is reasonably
  1122. ergonomic and the table’s at a sane height. I often make a cup of tea and stash a snack in the fridge.  I have taken conference
  1123. calls, drafted and reviewed documents, reviewed code, and once (cackling with glee) checked in code to the AWS production
  1124. repository.</p>
  1125. <p>I haven’t convinced any colleagues to come down for an in-boat meeting yet; it’s just a matter of time. But I’m just not
  1126. gonna install whiteboards.</p>
  1127. <h2 id="p-19">Mixed: Online community</h2>
  1128. <p>The biggest is the
  1129. <a href="http://jeanneau.proboards.com/">Owners’ Forum</a>, which is OK but suffers from Jeanneau having so many products. There’s
  1130. also a group on Facebook, obviously.  I’ve picked up valuable tips in both places.</p>
  1131. <h2 id="p-20">Bad: Missing pieces</h2>
  1132. <p>There’s no automatic bilge pump, which I find shocking, but on the other hand I have to say it stays almost bone-dry down
  1133. there, even with mixed hot &amp; cold weather, bashing through pretty rough seas, several days of heavy rain, and regular
  1134. thorough washing (the honeymoon is still on).</p>
  1135. <p>There’s no horn; our previous boat had one and while I only ever used it once or twice, I was glad of it.</p>
  1136. <p>There’s no built-in heater. Our journeys typically aren’t long enough to need one on the water, but this might be an issue in
  1137. home-office mode. Multiple owners have installed diesel heaters, and I have a nice little AC space heater that I’ll try out when on shore
  1138. power.  Similarly, there’s no air conditioner, which is more of a problem than you might think up here at 49°30'N because the
  1139. pilothouse has so much glass, it’s a greenhouse.</p>
  1140. <img alt="Jeanneau 795 tied up at Keats Island" src="https://www.tbray.org/ongoing/When/201x/2019/08/06/XT301274.png"/>
  1141. <p>There are only two cleats, fore and aft. When you’re tying up to a floating dock for a weekend in Howe Sound (see above), which
  1142. after all is part of the Pacific, you really want one and ideally two spring lines along with the basic fore and aft.  Several
  1143. owners have figured out how to install an extra central cleat, and I’ll look to do that.</p>
  1144. <h2 id="p-21">And your conclusion is?</h2>
  1145. <p>Count the “Good”, “Bad”, and “Mixed” headlines above. The good stuff wins, by a wide margin.  I’ve got no standing to say whether
  1146. or not this is a winner or loser against the competition because I haven’t owned the competition. What I can say, a few months in,
  1147. is that it meets our needs very well.</p>
  1148. <h2 id="p-22">Accessorizing</h2>
  1149. <p>Here are the things I’ve purchased to improve the experience:</p>
  1150. <ol>
  1151. <li><p><a href="https://amzn.to/33uqhfE">SeaTeak 62634 Insulated Four-Drink Binocular Rack</a><span class="dashes"> —</span> I have two of these things
  1152. velcro’ed down behind the sink.  The binoc-shaped spaces also work for big coffee mugs with handles.</p></li>
  1153. <li><p><a href="https://amzn.to/2YYqiZZ">Dell Ultra HD 4K 24-Inch Monitor P2415Q</a><span class="dashes"> —</span> just the right
  1154. size for outboarding to my company MBPro, and comes with USB so I only need one plug to power everything.  I need to install something to
  1155. hang it up on the berth bulkhead when not in use, at the moment it’s lying face-down on the mattress, which is OK but takes space.</p></li>
  1156. <li><p><a href="https://amzn.to/2KH1wVe">4.5" 12V Stepless Speed Car Fan</a><span class="dashes"> —</span> sold by different vendors
  1157. in the US &amp; Canada. Like I said, it can get toasty in the pilothouse but this guy takes care of it just by keeping the air
  1158. moving.</p></li>
  1159. <li><p><a href="https://www.boatoutfitters.com/rod-holder-mount-flagpole">Rod Holder Mount Boat
  1160. Flagpole</a><span class="dashes"> —</span> the 795 has two fishing-rod holders but no flagpole.  Hey-presto!  The Canadian flag
  1161. looks great out there but we haven’t figured out which minor ensign to fly beneath it. Patti Smith fan club? Antifa emblems? Not
  1162. sure.</p></li>
  1163. <li><p>From Davis Instruments, Shockles
  1164. <a href="https://amzn.to/2YZrFn2">LineSnubbers</a> and
  1165. <a href="https://www.davisinstruments.com/product/linegrabber/">LineGrabbers</a>; nothing specific to this boat, just a coincidence
  1166. that I discovered them recently.  If you tie up where it might get rough, you need these.</p></li>
  1167. </ol>
  1168. <h2 id="p-5">Summary</h2>
  1169. <p>My relationship with the previous boat was pretty prosaic. It got us back and forth to the cabin and was kind of charming with
  1170. its wood trim, but it always needed fixing and there were important subsystems I never learned to understand.  This is a whole
  1171. different kettle of fish. I’m starting to
  1172. develop sympathy with the oft-repeated Kenneth Grahame quote from <cite>The Wind in the Willows</cite>:</p>
  1173. <blockquote><p><i>Believe me, my young friend, there is nothing<span class="dashes"> —</span> absolutely
  1174. nothing<span class="dashes"> —</span> half so much worth doing as simply messing about in boats. Simply messing… about in
  1175. boats<span class="dashes"> —</span> or with boats. In or out of ’em, it doesn’t matter. Nothing seems really to matter, that’s
  1176. the charm of it. Whether you get away, or whether you don’t; whether you arrive at your destination or whether you reach somewhere
  1177. else, or whether you never get anywhere at all, you’re always busy, and you never do anything in particular; and when you’ve done it
  1178. there’s always something else to do, and you can do it if you like, but you’d much better not.</i></p></blockquote></div>
  1179.    </content>
  1180.    <updated>2019-08-12T23:44:27Z</updated>
  1181.    <published>2019-08-06T19:00:00Z</published>
  1182.    <category scheme="https://www.tbray.org/ongoing/What/" term="The World/Boating"/>
  1183.    <category scheme="https://www.tbray.org/ongoing/What/" term="The World"/>
  1184.    <category scheme="https://www.tbray.org/ongoing/What/" term="Boating"/>
  1185.    <source>
  1186.      <id>https://www.tbray.org/ongoing/</id>
  1187.      <icon>http://www.tbray.org/favicon.ico</icon>
  1188.      <logo>http://www.tbray.org/ongoing/rsslogo.jpg</logo>
  1189.      <author>
  1190.        <name>Tim Bray</name>
  1191.      </author>
  1192.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  1193.      <link href="https://www.tbray.org/ongoing/" rel="alternate" type="text/html"/>
  1194.      <link href="https://www.tbray.org/ongoing/ongoing.atom" rel="self" type="application/atom+xml"/>
  1195.      <link href="https://www.tbray.org/ongoing/comments.atom" rel="replies" type="text/html"/>
  1196.      <rights xml:lang="en-us">All content written by Tim Bray and photos by Tim Bray Copyright Tim Bray, some rights reserved, see /ongoing/misc/Copyright</rights>
  1197.      <subtitle xml:lang="en-us">ongoing fragmented essay by Tim Bray</subtitle>
  1198.      <title xml:lang="en-us">ongoing by Tim Bray</title>
  1199.      <updated>2019-08-13T16:33:02Z</updated>
  1200.    </source>
  1201.  </entry>
  1202.  
  1203.  <entry xml:lang="en">
  1204.    <id>https://xkcd.com/2188/</id>
  1205.    <link href="https://xkcd.com/2188/" rel="alternate" type="text/html"/>
  1206.    <title xml:lang="en">E Scooters</title>
  1207.    <summary type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><img alt="Obviously battery technology and prices have driven a lot of the scooter explosion, but I feel like Dean Kamen must be at least a little grumpy about how much people laughed at the idea of the Segway." src="https://imgs.xkcd.com/comics/e_scooters.png" title="Obviously battery technology and prices have driven a lot of the scooter explosion, but I feel like Dean Kamen must be at least a little grumpy about how much people laughed at the idea of the Segway."/></div>
  1208.    </summary>
  1209.    <updated>2019-08-12T00:00:00Z</updated>
  1210.    <source>
  1211.      <id>https://xkcd.com/</id>
  1212.      <author>
  1213.        <name>Randall Munroe</name>
  1214.      </author>
  1215.      <link href="https://xkcd.com/" rel="alternate" type="text/html"/>
  1216.      <link href="http://www.xkcd.org/atom.xml" rel="self" type="application/atom+xml"/>
  1217.      <title xml:lang="en">xkcd.com</title>
  1218.      <updated>2019-08-16T00:00:00Z</updated>
  1219.    </source>
  1220.  </entry>
  1221.  
  1222.  <entry xml:lang="en-US">
  1223.    <id>https://tantek.com/2019/222/t1/endless-fog-sfrc</id>
  1224.    <link href="https://tantek.com/2019/222/t1/endless-fog-sfrc" rel="alternate" title="" type="text/html"/>
  1225.    <title/>
  1226.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><a class="auto-link figure u-bridgy-flickr-photo" href="https://fastly.4sqi.net/img/general/original/476_IzEDn30BXycWwNeqA78NGR-14MsEGZWAyzSy5s9Y-Rw.jpg"><img alt="Muir beach facing south, fog covering a lot of the hill." class="auto-embed u-photo" src="https://fastly.4sqi.net/img/general/width960/476_IzEDn30BXycWwNeqA78NGR-14MsEGZWAyzSy5s9Y-Rw.jpg"/></a><a class="auto-link figure u-bridgy-flickr-photo" href="https://fastly.4sqi.net/img/general/original/476_9dKkp60qhMVn5yKVf5VVpR9jN3jyeqUU_kpgdzfAyfc.jpg"><img alt="Looking up Fox trail disappearing into the fog" class="auto-embed u-photo" src="https://fastly.4sqi.net/img/general/width960/476_9dKkp60qhMVn5yKVf5VVpR9jN3jyeqUU_kpgdzfAyfc.jpg"/></a><a class="auto-link figure u-bridgy-flickr-photo" href="https://fastly.4sqi.net/img/general/original/476_koTk7MamKVKgagUdJdmYqfYlLa0wWYO_tGLa3KiEDWI.jpg"><img alt="Muir beach facing north, fog obscuring the houses onthe hill." class="auto-embed u-photo" src="https://fastly.4sqi.net/img/general/width960/476_koTk7MamKVKgagUdJdmYqfYlLa0wWYO_tGLa3KiEDWI.jpg"/></a>It’s not always sunshine and flowers. Sometimes it’s endless #<span class="p-category auto-tag">fog</span>. Or miscommunication and isolation. Still grateful for 11 miles and nearly 2k' at #<span class="p-category auto-tag">SFRC</span> to #<span class="p-category auto-tag">MuirBeach</span>(1) and back.<br class="auto-break"/><br class="auto-break"/>We can choose to be frustrated or grateful. To blame (ourselves, others), or be patient, accepting, and choose to be the best we can in the circumstances. We can anticipate conflict, or be open to hope and reconnection. It starts inside with the outlook we choose, and manifests with the words and actions we choose.<br class="auto-break"/><br class="auto-break"/>#<span class="p-category auto-tag">run</span> #<span class="p-category auto-tag">runner</span> #<span class="p-category auto-tag">Marin</span> #<span class="p-category auto-tag">MarinHeadlands</span> #<span class="p-category auto-tag">trail</span> #<span class="p-category auto-tag">trailrun</span> #<span class="p-category auto-tag">50ktraining</span> #<span class="p-category auto-tag">ultratraining</span> #<span class="p-category auto-tag">optoutside</span> #<span class="p-category auto-tag">getoutside</span> #<span class="p-category auto-tag">befierce</span> #<span class="p-category auto-tag">pushyourself</span> #<span class="p-category auto-tag">facethemountain</span> #<span class="p-category auto-tag">fitstrongfierce</span> #<span class="p-category auto-tag">nofilter</span></div>
  1227.    </content>
  1228.    <updated>2019-08-11T06:32:00Z</updated>
  1229.    <published>2019-08-11T06:32:00Z</published>
  1230.    <source>
  1231.      <id>https://tantek.com/updates.atom</id>
  1232.      <author>
  1233.        <name>Tantek</name>
  1234.        <uri>https://tantek.com/</uri>
  1235.      </author>
  1236.      <link href="https://tantek.com/" rel="alternate" title="Tantek &#xC7;elik" type="text/html"/>
  1237.      <link href="https://tantek.com/updates.atom" rel="self" type="application/atom+xml"/>
  1238.      <link href="https://pubsubhubbub.superfeedr.com/" rel="hub" type="text/html"/>
  1239.      <title xml:lang="en-US">Tantek Çelik</title>
  1240.      <updated>2019-08-16T21:21:00Z</updated>
  1241.    </source>
  1242.  </entry>
  1243.  
  1244.  <entry>
  1245.    <id>tag:www.crummy.com,2019-08-09:09:45:08-nycb</id>
  1246.    <link href="http://www.crummy.com/2019/08/09/0" rel="alternate" type="text/html"/>
  1247.    <title>Secretly Public Domain: Update</title>
  1248.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">My <a href="https://www.crummy.com/2019/07/22/0">"Secretly Public Domain"</a> project got a lot of attention, which is great, but it also gave me a lot more work to do and pointed to some things that hadn't been explained very well. I've done that work, and here's an update:
  1249.  
  1250. <p><b>Topline number is 73%</b>
  1251.  
  1252. </p><p>My original estimate was that 80% of pre-1963 books were not renewed. This was based on a couple of inaccurate assumptions, the big one being that I was counting works originally published in a foreign country. Those works might have lapsed into the public domain at some point, but the US copyright has since been restored by treaty. So their renewal status isn't really relevant.
  1253.  
  1254. </p><p>Of the books where renewal status <i>is</i> relevant, here are the most recent statistics:
  1255.  
  1256. </p><ul>
  1257. <li>73% have no renewal record at all.
  1258. </li><li>19% have a renewal record that's an excellent match.
  1259. </li><li>8% are in a grey area. They have one or more renewal records, but none of them are an excellent match. One of them might be legit, or they might all be renewals for totally different books. They need to be checked manually.
  1260. </li></ul>
  1261.  
  1262. <p><b>Credits</b>
  1263.  
  1264. </p><p>The <a href="https://botsin.space/@SecretlyPublicDomain">"Secretly Public Domain" bot</a> was a publicity stunt to draw attention to the machine-readable registration records. It <a href="https://www.vice.com/en_us/article/kz4e3e/millions-of-books-are-secretly-in-the-public-domain-you-can-download-them-free">worked great</a>, but it also drew attention to me, the person doing the publicity stunt, even though I had basically nothing to do with the original work. For the record, here are the people who actually did the work. The project inside NYPL was run by Sean Redmond, Greg Cram, and Josh Hadro (now of IIIF). The work of making the copyright records machine-readable was done by <a href="https://www.dataconversionlaboratory.com/">Data Conversion Laboratory</a>.
  1265.  
  1266. </p><p><b>Buried treasure</b>
  1267.  
  1268. </p><p>Most of the books whose copyright wasn't renewed are really obscure titles, but without looking very hard I found a very well-known science fiction novel that has no renewal record. I'm not mentioning the name as an incentive to get people to look at the data themselves. It's probably not the only well-known work whose copyright wasn't renewed.
  1269.  
  1270. </p><p><b>How to make your own list</b>
  1271.  
  1272. </p><p>My original estimate of 80% was based on the quick and dirty script I used to write the Mastodon bot. To fix the "foreign works" problem and to produce a dataset that would stand up to scrutiny, I published <a href="https://github.com/leonardr/cce-python">a Python library</a> specifically for handling this data. It's got business logic for making determinations like "was this book published in a foreign country" and "how well does this renewal record match this registration record". You run the scripts and at the end you have a bunch of JSON files with consolidated data. If you think there are bad assumptions, you can change the business logic and run the scripts again.
  1273.  
  1274. </p><p><b>How to see the data</b>
  1275.  
  1276. </p><p>There were a number of requests for this data in a tabular form. I totally understand where this is coming from, and it's certainly the easiest way to get into the data, but it's tricky, because converting the JSON to tabular data destroys information that would be useful for taking the next step (see below).
  1277.  
  1278. </p><p>So, I've done the best I can. I added a script to the end of my Python workflow which generates three huge tab-separated files, and I put those files in the <a href="https://github.com/leonardr/cce-spreadsheets">cce-spreadsheets</a> project. This should be good for getting an overview of which books were renewed, which weren't, and which are foreign publications.
  1279.  
  1280. </p><p><b>What's next?</b>
  1281.  
  1282. </p><p>Discovering that a book published in 1950 is in the public domain, doesn't make a free digitized version of that book automatically appear. Somebody has to do the work. At this point we go from fast data processing to really slow research and digitization work. You or I can now make a near-complete list of unrenewed books in a few minutes, but that list just represents an enormous to-do list for someone.
  1283.  
  1284. </p><p>There are basically three "someones" who might step up here: Project Gutenberg, Hathi Trust, and Internet Archive.
  1285.  
  1286. </p><p><i>Project Gutenberg</i>
  1287.  
  1288. </p><p>As I mentioned earlier, Project Gutenberg digitized the copyright renewal records some time ago, and they use them all the time. They have <a href="https://www.gutenberg.org/wiki/Gutenberg:Copyright_How-To#Rule_6:_Failure_of_U.S._Works_to_Comply_With_Renewal_Requirements_Prior_to_1964">a section of their Copyright How-To</a> explaining how to check whether a particular title was renewed, and whether the renewal matters. There are other steps to clear a pre-1963 work: you have to verify that the author lived in the US at the time, stuff like that. The newly digitized registration records can help with some of this, and my data processing script that combines registration and renewal can help with more of it, but there's still some manual work you have to do for each book.
  1289.  
  1290. </p><p>Once that work is done, Project Gutenberg volunteers will locate a copy of the book, scan it, and OCR it (assuming there's no existing scan). Then they'll proofread it and put out HTML and plain-text editions. As you can imagine, this process takes a really long time, but the result is a clean, accurate copy of the book that can be read on its own or reused in other projects. The catch is that somebody has to care enough about a specific book to go through all this trouble.
  1291.  
  1292. </p><p><i>Hathi Trust</i>
  1293.  
  1294. </p><p>Hathi Trust already has scans of a lot of these 1924-1963 books. They just don't make these scans available to the public, because as far as they know, all these books are still under copyright. If they were convinced otherwise, they'd open up the scans—they opened up almost all of their 1923 stuff this January when the 95-year copyright term finally expired. So we have to make a case for opening up these books.
  1295.  
  1296. </p><p>Earlier, NYPL took the highest-circulating 1924-1963 books in our research collection and checked to see which ones lacked a renewal record. We sent the list to Hathi Trust, and they did their own verification and opened up some of the books: <a href="https://babel.hathitrust.org/cgi/pt?id=mdp.39015008300397&amp;view=1up&amp;seq=7"><i>The Americans in Santo Domingo</i></a> from 1928 is an example. Once Hathi opens up a scan, it's available to the public. It also becomes possible for Gutenberg et al. to turn the raw scan into something more readable.
  1297.  
  1298. </p><p>In the near future, people at NYPL (not me) will be talking to people at Hathi Trust about what kind of evidence is necessary, in general, to convince them that the copyright on a 1924-1963 book has lapsed. Then we'll be able to give them a list of all the books where we can find that kind of evidence. There'll still be a verification process on the Hathi Trust side -- at the very least, they have to go through the book and make sure it doesn't contain unauthorized reprints from other books -- but it should streamline things quite a bit.
  1299.  
  1300. </p><p><i>Internet Archive</i>
  1301.  
  1302. </p><p>Internet Archive is a wild card here. They scan a lot of books, and I could see them treating the "unrenewed" list as a big list of additional books to scan, but it would be a new undertaking. Making unrenewed works available is something Project Gutenberg volunteers do already, and it's something that Hathi Trust could do relatively easily, but with Internet Archive it's more the <i>sort</i> of thing they'd do.
  1303.  
  1304. </p><p><b>Data problems</b>
  1305.  
  1306. </p><p>That 8% of grey area, where it's not clear whether or not a book was renewed, points to the general difficulty of meshing together two sets of public records published across half a century and digitized by different people. The grey area represents a lot of manual work that has to be done, and of course there's always the fear that a book that seems to be free and clear actually isn't: the title page says "printed in Canada", or the smoking-gun copyright renewal didn't show up because its ID number was typed wrong.
  1307.  
  1308. </p><p>There's going to be a lot of manual work in the process of clearing these books, but there's no reason to wait until everything's perfect to get started. My preference is to cast a very wide net, try to find any renewal that might <i>possibly</i> be related to a registration, and make the grey area as big as possible. We know that a majority of  1924-1963 books will always come up "no renewal", because there are way more registrations than renewals. We can deal with those and then take a closer look at the grey area.
  1309.  
  1310. </p><p><b>Other media</b>
  1311.  
  1312. </p><p>A couple of people asked whether it was possible to do this for other media. The good news is that there are volumes of the Catalog of Copyright Entries for:
  1313.  
  1314. </p><ul>
  1315.  
  1316. <li>"Books, Pamphlets, Serials, and Contributions to Periodicals"
  1317. </li><li>"Periodicals"
  1318. </li><li>"Drama and Works Prepared for Oral Delivery"
  1319. </li><li>"Music"
  1320. </li><li>"Maps and Atlases"
  1321. </li><li>"Works of Art; Reproductions of Works of Art; Scientific and Technical Drawings; Photographic Works; Prints and Pictoral Illustrations"
  1322. </li><li>"Commercial Prints and Labels"
  1323. </li><li>"Motion Pictures and Filmstrips"
  1324. </li></ul>
  1325.  
  1326. <p>All of these books have scans hosted at the Internet Archive. You can get an overview by looking at Penn's index of the CCE from a specific year, <a href="https://onlinebooks.library.upenn.edu/cce/1960r.html">let's say 1960</a>.
  1327.  
  1328. </p><p>As far as I know--and I do know about one big exception--the rules here are the same as for books. If something wasn't registered, or the registration wasn't renewed, then the copyright on a work first published in the US 1924-1963 has lapsed.
  1329.  
  1330. </p><p>Now, the bad news. We have scans of the Catalog of Copyright Entries, but the only bits where both the registration and renewals are machine-readable is "Part 1 Class A". That's the "Books" part of "Books, Pamphlets, Serials, and Contributions to Periodicals", and it represents only about 30% of the total.
  1331.  
  1332. </p><p>If you want to see whether there's a renewal record for a fishing map of Kansas, or a magazine article, or a cool retro ad, or a classic film noir, or a vintage restaurant placemat, it is quite possible, but it's a huge pain. And you can forget about running the numbers on <i>all</i> the movies or <i>all</i> the restaurant placemats. We don't have a good picture of what's in there.
  1333.  
  1334. </p><p>The situation is this way because the Catalog of Copyright Entries is huge, and digitizing it is boring/expensive. Up to this point, book nerds are the only nerds who've put in the time and money to make "their" part of the CCE machine-readable. NYPL has plans to give this same treatment to the entire CCE, but the crucial part of the plan where we have money to pay someone to do this is currently missing; it's a matter for fundraising.
  1335.  
  1336. </p><p>The second piece of bad news regards music. When we in 2019 think about "music", we think of sound recordings. When the CCE thinks about "music", it's thinking about the underlying composition—basically the stuff that would go on the sheet music. Until 1972 there was no federal-level copyright on sound recordings, and the result is that music copyrights are a bigger mess than other types of copyright. I do not want to get into territory I don't understand, but suffice to say that for a vinyl record to be in the public domain, it's necessary but not sufficient that the copyright on the underlying composition have expired. So the CCE can only help so much.</p></div>
  1337.    </content>
  1338.    <updated>2019-08-10T11:35:51Z</updated>
  1339.    <published>2019-08-09T13:45:08Z</published>
  1340.    <source>
  1341.      <id>tag:www.crummy.com,1997-12-20:12:00:00-NewsBruiser-nycb</id>
  1342.      <author>
  1343.        <name>Leonard Richardson</name>
  1344.        <email>[email protected]</email>
  1345.      </author>
  1346.      <link href="https://www.crummy.com/" rel="alternate" type="text/html"/>
  1347.      <link href="http://www.crummy.com/nb/nb.cgi/syndicate/nycb?version=Atom" rel="self" type="application/atom+xml"/>
  1348.      <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Licensed under a <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative Commons License</a></div>
  1349.      </rights>
  1350.      <subtitle>Your chicken, your egg, your problem</subtitle>
  1351.      <title>News You Can Bruise</title>
  1352.      <updated>2019-08-10T11:35:51Z</updated>
  1353.    </source>
  1354.  </entry>
  1355.  
  1356.  <entry>
  1357.    <id>http://www.russellbeattie.com/blog/try-my-game</id>
  1358.    <link href="http://www.russellbeattie.com/blog/try-my-game" rel="alternate" type="text/html"/>
  1359.    <title>Try my game!</title>
  1360.    <updated>2019-08-10T07:07:59Z</updated>
  1361.    <author>
  1362.      <name>Russell Beattie</name>
  1363.      <email>[email protected]</email>
  1364.    </author>
  1365.    <source>
  1366.      <id>http://www.russellbeattie.com/blog/atom</id>
  1367.      <icon>http://www.russellbeattie.com/favicon.ico</icon>
  1368.      <logo>http://www.russellbeattie.com/blog/images/russellbeattie_icon.jpg</logo>
  1369.      <author>
  1370.        <name>Russell Beattie</name>
  1371.        <email>[email protected]</email>
  1372.      </author>
  1373.      <link href="http://www.russellbeattie.com/blog" rel="alternate" type="text/html"/>
  1374.      <link href="http://www.russellbeattie.com/blog/feed" rel="self" type="application/atom+xml"/>
  1375.      <title>Russell Beattie</title>
  1376.      <updated>2019-08-10T07:07:59Z</updated>
  1377.    </source>
  1378.  </entry>
  1379.  
  1380.  <entry xml:lang="en-US">
  1381.    <id>https://tantek.com/2019/221/t1/four-indiewebcamps-open-sign-ups</id>
  1382.    <link href="https://tantek.com/2019/221/t1/four-indiewebcamps-open-sign-ups" rel="alternate" title="" type="text/html"/>
  1383.    <title/>
  1384.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml">IndieWebCamps open for sign-ups!<br class="auto-break"/>❌ Amsterdam 9/28-29 before #<span class="p-category auto-tag">ViewSource</span> <a class="auto-link" href="https://indieweb.org/2019/Amsterdam">https://indieweb.org/2019/Amsterdam</a><br class="auto-break"/>🏫 Oxford 9/28 <a class="auto-link" href="https://indieweb.org/2019/Oxford">https://indieweb.org/2019/Oxford</a><br class="auto-break"/>🗽 NYC 10/5-6 <a class="auto-link" href="https://indieweb.org/2019/NYC">https://indieweb.org/2019/NYC</a><br class="auto-break"/>🎪 Brighton 10/19-20 before #<span class="p-category auto-tag">MozFest</span> <a class="auto-link" href="https://indieweb.org/2019/Brighton">https://indieweb.org/2019/Brighton</a><br class="auto-break"/>#<span class="p-category auto-tag">indieweb</span> #<span class="p-category auto-tag">openweb</span></div>
  1385.    </content>
  1386.    <updated>2019-08-09T21:52:00Z</updated>
  1387.    <published>2019-08-09T21:52:00Z</published>
  1388.    <source>
  1389.      <id>https://tantek.com/updates.atom</id>
  1390.      <author>
  1391.        <name>Tantek</name>
  1392.        <uri>https://tantek.com/</uri>
  1393.      </author>
  1394.      <link href="https://tantek.com/" rel="alternate" title="Tantek &#xC7;elik" type="text/html"/>
  1395.      <link href="https://tantek.com/updates.atom" rel="self" type="application/atom+xml"/>
  1396.      <link href="https://pubsubhubbub.superfeedr.com/" rel="hub" type="text/html"/>
  1397.      <title xml:lang="en-US">Tantek Çelik</title>
  1398.      <updated>2019-08-16T21:21:00Z</updated>
  1399.    </source>
  1400.  </entry>
  1401.  
  1402.  <entry xml:lang="en-US">
  1403.    <id>http://openid.net/?p=34392</id>
  1404.    <link href="https://openid.net/2019/08/09/registration-open-for-openid-foundation-workshop-at-verizon-media-on-monday-september-30-2019/" rel="alternate" type="text/html"/>
  1405.    <title xml:lang="en-US">Registration Open for OpenID Foundation Workshop at Verizon Media on Monday, September 30, 2019</title>
  1406.    <summary xml:lang="en-US">OpenID Foundation Workshops provide technical insight and influence on current Internet identity standards. The workshops provide updates on all OpenID Foundation working groups as well the OpenID Certification Program.  Please note  we’ve added a technology leaders discussion on key digital identity topics to the agenda. The goal is to encourage open discussion to help inform [...]</summary>
  1407.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p style="font-weight: 400;">OpenID Foundation Workshops provide technical insight and influence on current Internet identity standards. The workshops provide updates on all OpenID Foundation working groups as well the OpenID Certification Program.</p>
  1408. <p style="font-weight: 400;"> Please note  we’ve added a technology leaders discussion on key digital identity topics to the agenda. The goal is to encourage open discussion to help inform one another on security challenges in the identity ecosystem. As part of this expanded agenda, we’ll have a panel session during lunch led by OpenID Foundation Chairman, Nat Sakimura, with identity leader panelists from from member organizations that will be discussing the latest issues in digital identity.</p>
  1409. <p style="font-weight: 400;">Leading technologists from Verizon Media, Google, Microsoft, Amazon, Yubico, Verizon and others will update key issues and discuss how they help meet social, enterprise and government Internet identity challenges.</p>
  1410. <p style="font-weight: 400;">This workshop precedes Internet Identity Workshop XXVIX in Mountain View, October 1-3, 2019.</p>
  1411. <p> </p>
  1412. <p><strong>Workshop Registration</strong></p>
  1413. <p>Registration for this workshop is required so please do so prior to Tuesday, September 24, 2019: <a href="https://www.eventbrite.com/e/openid-foundation-workshop-at-verizon-media-september-2019-tickets-67281736485" rel="noopener noreferrer" target="_blank">https://www.eventbrite.com/e/openid-foundation-workshop-at-verizon-media-september-2019-tickets-67281736485 </a></p>
  1414. <p style="font-weight: 400;"><strong>Workshop Agenda</strong></p>
  1415. <p style="font-weight: 400;">Welcome &amp; Introduction: Lovlesh Chhabra — Verizon Media and Don Thibeau – OpenID Foundation<br/>
  1416. A Panel Discussion Over Lunch — Current Digital Identity Topics</p>
  1417. <ul style="font-weight: 400;">
  1418. <li>Host: Nat Sakimura – OpenID Foundation Chairman</li>
  1419. <li>Panelist: Lovlesh Chhabra – Verizon Media</li>
  1420. <li>Panelist: John Summers – Akamai</li>
  1421. <li>Panelist: Google representative</li>
  1422. <li>Panelist: PayPal representative</li>
  1423. </ul>
  1424. <p style="font-weight: 400;">Identity UX Session — George Fletcher – Verizon Media<br/>
  1425. Impact of Intelligent Tracking Protection and SameSite Cookie Designation — George Fletcher – Verizon Media<br/>
  1426. Shared Signals Update – TBC<br/>
  1427. OpenID Certification Program Update: Mike Jones – Microsoft<br/>
  1428. OpenID Foundation Working Group Updates</p>
  1429. <ul style="font-weight: 400;">
  1430. <li>OpenID Connect: Mike Jones – Microsoft</li>
  1431. <li>Enhanced Authentication Protocol (EAP): Mike Jones – Microsoft</li>
  1432. <li>Fast Federation (FastFed): Darin McAdams – Amazon</li>
  1433. <li>Financial API (FAPI): Nat Sakimura – OpenID Foundation Chairman</li>
  1434. <li>HEART (Health Relationship Trust Profile): TBC</li>
  1435. <li>iGov (International Government Assurance Profile): Maria Vachino — Easy Dynamics</li>
  1436. <li>MODRNA (Mobile OpenID Connect Profile): Bjorn Hjelm – Verizon</li>
  1437. <li>Research &amp; Education: Davide Vaghetti – GARR</li>
  1438. <li>RISC (Risk and Incident and Sharing Coordination): TBC</li>
  1439. </ul>
  1440. <p style="font-weight: 400;">Verizon Media is providing lunch for attendees and will be served starting at 11:30AM. This workshop includes a working lunch panel session that we’ll start promptly at 12:00pm PT.</p>
  1441. <p style="font-weight: 400;"><strong>Workshop Location &amp; Logistics</strong></p>
  1442. <p style="font-weight: 400;">Yahoo Campus, 701 1st Avenue, Sunnyvale, CA — Building C</p>
  1443. <ol style="font-weight: 400;">
  1444. <li>Reserved parking spots will be available on the 3rd floor of the parking garage attached to Building C.</li>
  1445. <li>When arriving to pick-up you visitor badge, please tell security at the entrance that you are here for the OpenID Foundation Workshop in Building C, 2nd floor, Classroom 4.</li>
  1446. </ol>
  1447. <p> </p>
  1448. <p style="font-weight: 400;">Thank you to Verizon Media for hosting and providing directed funding support of this event. We look forward to seeing you on Monday, September 30th in Sunnyvale.</p>
  1449. <p style="font-weight: 400;">Don Thibeau<br/>
  1450. Executive Director<br/>
  1451. OpenID Foundation</p></div>
  1452.    </content>
  1453.    <updated>2019-08-09T12:02:10Z</updated>
  1454.    <published>2019-08-09T12:02:10Z</published>
  1455.    <category scheme="https://openid.net" term="Uncategorized"/>
  1456.    <author>
  1457.      <name>Mike Leszcz</name>
  1458.    </author>
  1459.    <source>
  1460.      <id>https://openid.net/feed/atom/</id>
  1461.      <link href="https://openid.net" rel="alternate" type="text/html"/>
  1462.      <link href="https://openid.net/feed/atom/" rel="self" type="application/atom+xml"/>
  1463.      <link href="https://openid.net/?pushpress=hub" rel="hub" type="text/html"/>
  1464.      <subtitle xml:lang="en-US">The Internet Identity Layer</subtitle>
  1465.      <title xml:lang="en-US">OpenID</title>
  1466.      <updated>2019-08-09T12:02:10Z</updated>
  1467.    </source>
  1468.  </entry>
  1469.  
  1470.  <entry>
  1471.    <id>https://blogs.apache.org/foundation/entry/the-apache-news-round-up134</id>
  1472.    <link href="https://blogs.apache.org/foundation/entry/the-apache-news-round-up134" rel="alternate" type="text/html"/>
  1473.    <title>The Apache News Round-up: week ending 9 August 2019</title>
  1474.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Happy Friday! Let's take a look back on our activities over the past week:
  1475.  
  1476. <p>
  1477. Success at Apache – the monthly blog series that focuses on the people and processes behind why the ASF "just works".<br/>
  1478.  - "The Path To Berlin" by Isabel Drost-Fromm <a href="https://s.apache.org/aq48m">https://s.apache.org/aq48m</a>
  1479. </p>
  1480.  
  1481. <p>ASF Board – management and oversight of the business affairs of the corporation in accordance with the Foundation's bylaws.<br/> - Next Board Meeting: 21 August 2019. Board calendar and minutes <a href="http://apache.org/foundation/board/calendar.html">http://apache.org/foundation/board/calendar.html</a></p>
  1482.  
  1483. <p>ApacheCon™ – the ASF's official global conference series, bringing Tomorrow's Technology Today since 1998<br/>
  1484.  
  1485.  - Register today for ApacheCon North America and Europe. We look forward to seeing you in Las Vegas and Berlin! <a href="https://www.apachecon.com/">https://www.apachecon.com/</a><br/>
  1486.  
  1487. </p><p>ASF Infrastructure – our distributed team on three continents keeps the ASF's infrastructure running around the clock.<br/> - 7M+ weekly checks yield uptime at 99.98%. Performance checks across 50 different service components spread over more than 250 machines in data centers around the world. <a href="http://www.apache.org/uptime/">http://www.apache.org/uptime/</a></p>
  1488.  
  1489. <p>Apache Code Snapshot – this week, 830 Apache contributors changed 1,165,840 lines of code over 3,701 commits. Top 5 contributors, in order, are: Daniel Gruno, Etienne Chauchot, Andrea Cosentino, Claus Ibsen, and Tilman Hausherr.</p>
  1490.  
  1491. <p>Apache Project Announcements – the latest updates by category.</p>
  1492.  
  1493. <p>
  1494. Big Data -- <br/>
  1495.  - Apache Accumulo 2.0.0 released <a href="http://accumulo.apache.org/"> http://accumulo.apache.org/</a><br/>
  1496.  - Apache Ranger 2.0.0 released <a href="http://ranger.apache.org/"> http://ranger.apache.org/</a>
  1497.  
  1498. </p>
  1499.  
  1500.  
  1501. <p>
  1502. Embedded OS -- <br/>
  1503.  - Apache Mynewt 1.7.0 and Apache NimBLE 1.2.0 released <a href="http://mynewt.apache.org/"> http://mynewt.apache.org/ </a>
  1504.  
  1505. </p>
  1506.  
  1507.  
  1508. <p>
  1509. Libraries -- <br/>
  1510.   - Apache Tika 1.22 released <a href="http://tika.apache.org/"> http://tika.apache.org/ </a>
  1511. <br/>
  1512.   - Apache Tuweni (Incubating) 0.8.1 released <a href="http://tuweni.incubator.apache.org/"> http://tuweni.incubator.apache.org/ </a>
  1513. <br/>
  1514.   - Apache Commons DBCP 2.7.0 released <a href="http://commons.apache.org/dbcp/">http://commons.apache.org/dbcp/ </a>
  1515. <br/>
  1516.   - Apache Groovy 2.5.8 and 3.0.0-beta-3 released <a href="http://groovy.apache.org/">http://groovy.apache.org/</a>
  1517.  
  1518. </p>
  1519.  
  1520.  
  1521. <p/>
  1522. <p>
  1523.  <strong>Did You Know?</strong>
  1524.  </p><div>
  1525.    
  1526.      <p>
  1527.          - Did you know that the Geospatial Track at ApacheCon North America is organized in collaboration with the Open Geospatial Consortium?<br/> Learn more at <a href="https://feathercast.apache.org/2019/07/31/apachecon-qa-with-geospatial-software-track-leader-george-percivall-of-open-geospatial-consortium/">https://feathercast.apache.org/2019/07/31/apachecon-qa-with-geospatial-software-track-leader-george-percivall-of-open-geospatial-consortium/ </a>
  1528.      </p>
  1529.    
  1530. <p>
  1531.  - Did you know that 11-year-old ApacheCon keynoter Samaira Mehta will hold a "Yes, 1 Billion Kids Can Code" Hackathon to help kids (first grade and up) to learn how to code? Register at <a href="https://www.eventbrite.com/e/yes-1-billion-kids-can-code-registration-66834093573">https://www.eventbrite.com/e/yes-1-billion-kids-can-code-registration-66834093573</a>
  1532. </p>      
  1533.  
  1534. <p>
  1535.  - Did you know that you can have swag from your favorite Apache project added to the ComDev store on RedBubble <a href="https://www.redbubble.com/people/comdev">https://www.redbubble.com/people/comdev</a> ? Grab the project logo from <a href="http://www.apache.org/logos/">http://www.apache.org/logos/</a> and request it be added by emailing <a href="mailto:[email protected]"> [email protected]</a>
  1536. </p>
  1537.  
  1538.      
  1539.  </div>
  1540. <p/>
  1541.  
  1542.  
  1543.  
  1544. <p><strong>Apache Community Notices:</strong></p>
  1545. <p> - Celebrating 20 Years Community-led Development "The Apache Way" <a href="https://s.apache.org/ASF20thAnniversary">https://s.apache.org/ASF20thAnniversary</a></p>
  1546.    <p> - ASF Founders look back on 20 Years of the ASF <a href="https://blogs.apache.org/foundation/entry/our-founders-look-back-on">https://blogs.apache.org/foundation/entry/our-founders-look-back-on</a></p>
  1547.    <p> - The Apache Way to Sustainable Open Source Success <a href="https://s.apache.org/GhnI">https://s.apache.org/GhnI</a></p>
  1548.    <p> - Foundation Reports and Statements <a href="http://www.apache.org/foundation/reports.html">http://www.apache.org/foundation/reports.html</a></p>
  1549.    <p> - ApacheCon: Tomorrow's Technology Today since 1998 <a href="http://s.apache.org/ApacheCon">http://s.apache.org/ApacheCon</a></p>
  1550.    <p> - ASF Operations Summary: Q2 FY2019 <a href="https://s.apache.org/d2Fq">https://s.apache.org/d2Fq</a></p>
  1551.    <p> - ASF Annual Report for FY2018 <a href="https://s.apache.org/FY2018AnnualReport">https://s.apache.org/FY2018AnnualReport</a></p>
  1552.    <p> - The Apache Software Foundation 2018 Vision Statement <a href="https://s.apache.org/zqC3">https://s.apache.org/zqC3</a></p>
  1553.    <p> - Foundation Statement –Apache Is Open. <a href="https://s.apache.org/PIRA">https://s.apache.org/PIRA</a></p>
  1554.    <div>
  1555.      <p> - "Success at Apache" focuses on the processes behind why the ASF "just works". <a href="https://blogs.apache.org/foundation/category/SuccessAtApache">https://blogs.apache.org/foundation/category/SuccessAtApache</a></p>
  1556.    </div>
  1557.    <div>
  1558.      <p> - Please follow/like/re-tweet the ASF on social media: <a href="https://twitter.com/TheASF">@TheASF on Twitter</a> and on LinkedIn at <a href="https://www.linkedin.com/company/the-apache-software-foundation">https://www.linkedin.com/company/the-apache-software-foundation</a></p>
  1559.      <p> - Do friend and follow us on the Apache Community Facebook page <a href="https://www.facebook.com/ApacheSoftwareFoundation/">https://www.facebook.com/ApacheSoftwareFoundation/</a>and Twitter account <a href="https://twitter.com/ApacheCommunity">https://twitter.com/ApacheCommunity</a></p>
  1560.    </div>
  1561.    <div>
  1562.      <p><a href="https://feathercast.apache.org/"/></p>
  1563.    </div>
  1564.    <div>
  1565.      <p> - The list of Apache project-related MeetUps can be found at <a href="http://events.apache.org/event/meetups.html">http://events.apache.org/event/meetups.html</a></p>
  1566.    </div>
  1567.    <div>
  1568.      <p> - Registration is open for ApacheCon North America 9-12 September 2019 <a href="http://apachecon.com/">http://apachecon.com/</a></p>
  1569.      <p> - Spark + AI Summit 2019 will be held 15-17 October in Amsterdam <a href="https://databricks.com/sparkaisummit/">https://databricks.com/sparkaisummit/</a></p>
  1570.      <p> - Registration open for ApacheCon Europe 22-24 October 2019 <a href="http://apachecon.com/">http://apachecon.com/</a></p>
  1571.      <p> - Find out how you can participate with Apache community/projects/activities --opportunities open with Apache Camel, Apache HTTP Server, and more! <a href="https://helpwanted.apache.org/">https://helpwanted.apache.org/</a></p>
  1572.    </div>
  1573.    <div> - Are your software solutions Powered by Apache? Download &amp; use our "Powered By" logos <a href="http://www.apache.org/foundation/press/kit/#poweredby">http://www.apache.org/foundation/press/kit/#poweredby</a></div>
  1574.    <div><br/></div>
  1575.    <div>= = =</div>
  1576.    <div><br/></div>
  1577.    <div>For real-time updates, sign up for Apache-related news by sending mail to [email protected] and follow @TheASF on Twitter. For a broader spectrum from the Apache community, <a href="https://twitter.com/PlanetApache">https://twitter.com/PlanetApache</a> provides an aggregate of Project activities as well as the personal blogs and tweets of select ASF Committers.</div></div>
  1578.    </content>
  1579.    <updated>2019-08-09T09:24:48Z</updated>
  1580.    <published>2019-08-09T09:24:48Z</published>
  1581.    <category label="Newsletter" term="Newsletter"/>
  1582.    <category scheme="http://roller.apache.org/ns/tags/" term="apache"/>
  1583.    <category scheme="http://roller.apache.org/ns/tags/" term="community"/>
  1584.    <category scheme="http://roller.apache.org/ns/tags/" term="foundation"/>
  1585.    <category scheme="http://roller.apache.org/ns/tags/" term="initiatives"/>
  1586.    <category scheme="http://roller.apache.org/ns/tags/" term="news"/>
  1587.    <category scheme="http://roller.apache.org/ns/tags/" term="projects"/>
  1588.    <category scheme="http://roller.apache.org/ns/tags/" term="round-up"/>
  1589.    <category scheme="http://roller.apache.org/ns/tags/" term="software"/>
  1590.    <category scheme="http://roller.apache.org/ns/tags/" term="summary"/>
  1591.    <category scheme="http://roller.apache.org/ns/tags/" term="weekly"/>
  1592.    <author>
  1593.      <name>Swapnil M Mane</name>
  1594.    </author>
  1595.    <source>
  1596.      <id>https://blogs.apache.org/foundation/feed/entries/atom</id>
  1597.      <link href="https://blogs.apache.org/foundation/feed/entries/atom" rel="self" type="application/atom+xml"/>
  1598.      <link href="https://blogs.apache.org/foundation/" rel="alternate" type="text/html"/>
  1599.      <subtitle>The voice of the ASF</subtitle>
  1600.      <title>The Apache Software Foundation Blog</title>
  1601.      <updated>2019-08-16T17:24:06Z</updated>
  1602.    </source>
  1603.  </entry>
  1604.  
  1605.  <entry>
  1606.    <id>tag:www.antipope.org,2019:/charlie/blog-static//1.4150</id>
  1607.    <link href="http://www.antipope.org/charlie/blog-static/2019/08/upcoming-events-4.html" rel="alternate" type="text/html"/>
  1608.    <title>Upcoming events</title>
  1609.    <summary>Next week I'm off to the land mass to the west of me, visiting Dublin and Belfast for the World Science Fiction Convention, then the following weekend Belfast for Titancon, the EuroCon (European annual SF convention). This is not without...</summary>
  1610.    <content type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><p>Next week I'm off to the land mass to the west of me, visiting Dublin and Belfast for the <a href="https://dublin2019.com">World Science Fiction Convention</a>, then the following weekend Belfast for <a href="https://titancon.com/2019/index.php">Titancon</a>, the EuroCon (European annual SF convention). This is not without complication: sensing vulnerability, my ancient and venerable washing machine picked this week to finally expire, forcing me to embark on a perilous quest for a replacement—not to mention a launderette with service wash facilities—during the Edinburgh Festival. (Which is why this update is late.)</p>
  1611.  
  1612. <p>(<em>Note: this is not a solicitation for advice on whether a hand-powered mangle and hot tub combination is more environmentally sound than a Miele TwinDos automatic washer-drier, or the best way to dry my jeans in the toilet, or suchlike helpfulness. As I approach my 55th birthday I'm pretty sure I'm on top of these issues.</em>)</p>
  1613.  
  1614. <p>Anyway, I'm on the program at both conventions, and I'm posting an abbreviated version of my schedule below the fold.</p>
  1615.  
  1616.        <p>NOTE: Updates to the schedules for both conventions are best found via the <a href="https://events.grenadine.co">Grenadine Event Guide mobile app</a> (which both conventions are using for program updates—it's free to download).</p>
  1617.  
  1618. <p>I'll try to amend this page as changes/additions happen.</p>
  1619.  
  1620. <p><strong>Worldcon schedule</strong></p>
  1621.  
  1622. <ul>
  1623. <li><p>Thursday 15th: <strong>Panel: Writing Robot &amp; Non-human intelligence</strong> (1200-1250, Wicklow, Hall-1 (CCD)) (with Christopher Husberg, Martha Wells, Mika Koverola)</p></li>
  1624. <li><p>Thursday 15th: <strong>Panel: Wild Cards: Wild West Trivia</strong> (1400-1530, Liffey-B, (CCD)) (with George R. R. Martin, Mary Anne Mohanraj, Carrie Vaughn, Paul Cornell, Peadar Ó Guilín, Emma Newman)</p></li>
  1625. <li><p>Friday 16th: <strong>Signing</strong> (1530-1620, Signing space, Point Square Dublin)</p></li>
  1626. <li><p>Saturday 17th: <strong>Panel: Technology we can't believe we're still using</strong> (1300-1350, ECOCEM Room (CCD)) (with Alison Scott, Tom Merritt (Sword and Laser), Dave O'Neill)</p></li>
  1627. <li><p>Saturday 17th: <strong>Reading</strong> (content TBA) (1500-1520, ECOCEM Room (CCD))</p></li>
  1628. <li><p>Sunday 18th: <strong>Panel: the politics of horror</strong> (1200-1300, Wicklow Room-1 (CCD)) (with F. Brett Cox (Norwich University), Rosanne Rabinowitz, Cristina Alves)</p></li>
  1629. <li><p>Monday 19th: <strong>Panel: AIs and the female image</strong> (1030-1130, Odeon 1 Point Square Dublin)(with Madeline Ashby, Pat Cadigan, Dr V Anne Smith (University of St Andrews), Dr. Sara L. Uckelman (Durham University))</p></li>
  1630. <li><p>Monday 19th: 1300-1400: <strong>Kaffeeklatch</strong> (CCD Level 3 Foyer, requires sign-up in advance)</p></li>
  1631. </ul>
  1632.  
  1633. <p><strong>Eurocon schedule</strong></p>
  1634.  
  1635. <ul>
  1636. <li><p>Thursday 22nd: <strong>Panel: Cthulhu/Loki 2020</strong> (1600-1700, Waterfront, Hilton Belfast) (with Misha, Renee Sieber, Petra, A Ming)</p></li>
  1637. <li><p>Thursday 22nd: <strong>Titancon literature night</strong> (1900-2200, Waterfront, Hilton Belfast)</p></li>
  1638. <li><p>Friday 23rd: <strong>Signing</strong> (1100-1200, Dealer's room)</p></li>
  1639. </ul></div>
  1640.    </content>
  1641.    <updated>2019-08-09T08:29:04Z</updated>
  1642.    <published>2019-08-09T08:29:04Z</published>
  1643.    <author>
  1644.      <name>Charlie Stross</name>
  1645.      <uri>http://www.antipope.org/mt/mt-cp.cgi?__mode=view&amp;blog_id=1&amp;id=2</uri>
  1646.    </author>
  1647.    <source>
  1648.      <id>tag:www.antipope.org,2010-01-01:/charlie/blog-static//1</id>
  1649.      <link href="http://www.antipope.org/charlie/blog-static/" rel="alternate" type="text/html"/>
  1650.      <link href="http://www.antipope.org/charlie/blog-static/atom.xml" rel="self" type="application/atom+xml"/>
  1651.      <subtitle>Being the blog of Charles Stross, author, and occasional guests ...</subtitle>
  1652.      <title>Charlie's Diary</title>
  1653.      <updated>2019-08-18T18:31:04Z</updated>
  1654.    </source>
  1655.  </entry>
  1656.  
  1657.  <entry xml:lang="en">
  1658.    <id>https://xkcd.com/2187/</id>
  1659.    <link href="https://xkcd.com/2187/" rel="alternate" type="text/html"/>
  1660.    <title xml:lang="en">Geologic Time</title>
  1661.    <summary type="xhtml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml"><img alt="Ok, well, we'll be sure to pay you sometime soon, geologically speaking." src="https://imgs.xkcd.com/comics/geologic_time.png" title="Ok, well, we'll be sure to pay you sometime soon, geologically speaking."/></div>
  1662.    </summary>
  1663.    <updated>2019-08-09T00:00:00Z</updated>
  1664.    <source>
  1665.      <id>https://xkcd.com/</id>
  1666.      <author>
  1667.        <name>Randall Munroe</name>
  1668.      </author>
  1669.      <link href="https://xkcd.com/" rel="alternate" type="text/html"/>
  1670.      <link href="http://www.xkcd.org/atom.xml" rel="self" type="application/atom+xml"/>
  1671.      <title xml:lang="en">xkcd.com</title>
  1672.      <updated>2019-08-16T00:00:00Z</updated>
  1673.    </source>
  1674.  </entry>
  1675.  
  1676.  <entry>
  1677.    <id>urn:uuid:80cb5906-dd12-448e-971b-542bb0848e35</id>
  1678.    <link href="http://plasmasturm.org/log/canonloglines/" rel="alternate" type="text/html"/>
  1679.    <title>Canonical Log Lines</title>
  1680.    <summary>A simple pattern to simplify harnessing the power of logs</summary>
  1681.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><cite><a href="https://stripe.com/gb/blog/canonical-log-lines" title="Fast and flexible observability with canonical log lines">Brandur Leach</a></cite>:</p>
  1682.  <blockquote cite="https://stripe.com/gb/blog/canonical-log-lines">
  1683.    <p>Although logs offer additional flexibility in the examples above, we’re still left in a difficult situation if we want to query information <em>across</em> the lines in a trace. [… At Stripe, we] use <strong>canonical log lines</strong> to help address this. They’re a simple idea: in addition to their normal [<a href="https://brandur.org/logfmt">logfmt</a>-structured] log traces, requests […] also emit one long log line at the end that pulls all its key telemetry into one place. [… They] are a simple enough idea that implementing them tends to be straightforward regardless of the tech stack in use. […] Over the years our implementation has been hardened to maximize the chance that canonical log lines are emitted for <em>every</em> request, even if an internal failure or other unexpected condition occurred.</p>
  1684.  </blockquote></div>
  1685.    </content>
  1686.    <updated>2019-08-08T23:35:14Z</updated>
  1687.    <published>2019-08-08T23:35:14Z</published>
  1688.    <category label="Seen" scheme="http://plasmasturm.org/" term="seen"/>
  1689.    <source>
  1690.      <id>urn:uuid:41632386-0f0d-11da-9fcb-dd680b0526e0</id>
  1691.      <icon>http://plasmasturm.org/favicon.ico</icon>
  1692.      <author>
  1693.        <name>Aristotle Pagaltzis</name>
  1694.        <email>[email protected]</email>
  1695.      </author>
  1696.      <link href="http://plasmasturm.org/" rel="alternate" type="text/html"/>
  1697.      <link href="http://plasmasturm.org/feeds/plasmasturm/" rel="self" type="application/atom+xml"/>
  1698.      <subtitle>musings in human and machine language</subtitle>
  1699.      <title>plasmasturm.org</title>
  1700.      <updated>2019-08-08T23:35:14Z</updated>
  1701.    </source>
  1702.  </entry>
  1703.  
  1704.  <entry xml:lang="en-US">
  1705.    <id>https://netsplit.com/?p=195</id>
  1706.    <link href="https://netsplit.com/swiftui/borders/" rel="alternate" type="text/html"/>
  1707.    <title xml:lang="en-US">Borders</title>
  1708.    <summary xml:lang="en-US">It seems a little odd to write a post about borders, since every post so far has already used them without calling them out. In all of the examples I’ve added borders to views and used the result in the previews, rather than drawing them in by hand. But I haven’t actually shown the code […]</summary>
  1709.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>It seems a little odd to write a post about borders, since every post so far has already used them without calling them out. In all of the examples I’ve added borders to views and used the result in the previews, rather than drawing them in by hand.</p>
  1710.  
  1711.  
  1712.  
  1713. <p>But I haven’t actually shown the code to do that, and it turns out that they’re slightly more interesting than you might expect.</p>
  1714.  
  1715.  
  1716.  
  1717. <p>There is a single method for specifying the border for a view:</p>
  1718.  
  1719.  
  1720. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">border</span>&lt;S&gt;<span class="hljs-params">(<span class="hljs-number">_</span> content: S, width: CGFloat = <span class="hljs-number">1</span>)</span></span> -&gt; some <span class="hljs-type">View</span> <span class="hljs-keyword">where</span> <span class="hljs-type">S</span> : <span class="hljs-type">ShapeStyle</span></code></pre>
  1721.  
  1722.  
  1723. <p>The first parameter is required and specifies a <em>shape style, </em>there’s a quite a few options for that, but fortunately <code>Color</code> confirms to the <code>ShapeStyle</code> protocol so for the simplest cases all we need to do is specify a color.</p>
  1724.  
  1725.  
  1726.  
  1727. <p>The second parameter is optional and specifies the width of the border, defaulting to a single pixel.</p>
  1728.  
  1729.  
  1730.  
  1731. <p>So it wouldn’t be a surprise that to draw a single pixel yellow border around a <code>Text</code> we would use code like this:</p>
  1732.  
  1733.  
  1734. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1735.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1736.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1737.            .font(.title)
  1738.            .border(<span class="hljs-type">Color</span>.yellow)
  1739.    }
  1740. }</code></pre>
  1741.  
  1742.  
  1743. <p>And this produces the same example I’ve used before, except with the border that’s always been in the preview actually stated in code now:</p>
  1744.  
  1745.  
  1746.  
  1747. <figure class="wp-block-image"><img alt="text with a border" class="wp-image-52" src="https://netsplit.com/wp-content/uploads/2019/07/title_text.png"/></figure>
  1748.  
  1749.  
  1750.  
  1751. <p>But now time for the first surprise.</p>
  1752.  
  1753.  
  1754.  
  1755. <p>You might expect that a border works a lot like a <a href="https://netsplit.com/swiftui/flexible-frames/">frame</a> or <a href="https://netsplit.com/swiftui/modifying-views/">padding</a>, adding a view around the <code>Text</code> with enough space to draw the border, and positioning the child inside it.</p>
  1756.  
  1757.  
  1758.  
  1759. <p>Except they don’t, we can demonstrate this by increasing the width of the border:</p>
  1760.  
  1761.  
  1762. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1763.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1764.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1765.            .font(.title)
  1766.            .border(<span class="hljs-type">Color</span>.yellow, width: <span class="hljs-number">4</span>)
  1767.    }
  1768. }</code></pre>
  1769.  
  1770.  
  1771. <p>If this worked like padding, the border would increase in width around the text; instead we see something quite different:</p>
  1772.  
  1773.  
  1774.  
  1775. <figure class="wp-block-image"><img alt="text with a thick border" class="wp-image-207" src="https://netsplit.com/wp-content/uploads/2019/08/text_border_thick.png"/></figure>
  1776.  
  1777.  
  1778.  
  1779. <p>Instead of surrounding the text, the border has overlaid it. In fact, <code>.border</code> creates a <a href="https://netsplit.com/swiftui/secondary-views/">secondary view</a> on its child, and draws the border overlaid on top of it.</p>
  1780.  
  1781.  
  1782.  
  1783. <figure class="wp-block-pullquote"><blockquote><p><code>.border</code> creates a secondary view on its child, and draws the border overlaid on top of it</p></blockquote></figure>
  1784.  
  1785.  
  1786.  
  1787. <p>If we wanted the border around the view instead, we have to combine it with <code>.padding</code>:</p>
  1788.  
  1789.  
  1790. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1791.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1792.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1793.            .font(.title)
  1794.            .padding(<span class="hljs-number">4</span>)
  1795.            .border(<span class="hljs-type">Color</span>.yellow, width: <span class="hljs-number">4</span>)
  1796.    }
  1797. }</code></pre>
  1798.  
  1799.  
  1800. <p>This creates the <code>Text</code> view, and then <code>.padding</code> creates another view around that with additional padding added, and then <code>.border</code> adds a secondary view to the padding view, and draws overlaid on that:</p>
  1801.  
  1802.  
  1803.  
  1804. <figure class="wp-block-image"><img alt="text with thick border and padding" class="wp-image-208" src="https://netsplit.com/wp-content/uploads/2019/08/text_border_padding.png"/></figure>
  1805.  
  1806.  
  1807.  
  1808. <p>It’s important to note the distinction that the border is on the padding view; combined effects can be performed by carefully placing the overlays in the correct place:</p>
  1809.  
  1810.  
  1811. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1812.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1813.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1814.            .font(.title)
  1815.            .border(<span class="hljs-type">Color</span>.red)
  1816.            .padding(<span class="hljs-number">4</span>)
  1817.            .border(<span class="hljs-type">Color</span>.yellow, width: <span class="hljs-number">4</span>)
  1818.            .border(<span class="hljs-type">Color</span>.red)
  1819.    }
  1820. }</code></pre>
  1821.  
  1822.  
  1823. <p>Here we create a red border overlaid on the <code>Text</code>, and then use padding to draw a thicker yellow border around the <code>Text</code>, and finally overlaid another red border onto the padding:</p>
  1824.  
  1825.  
  1826.  
  1827. <figure class="wp-block-image"><img alt="text with three borders" class="wp-image-210" src="https://netsplit.com/wp-content/uploads/2019/08/text_bordered_border.png"/></figure>
  1828.  
  1829.  
  1830.  
  1831. <p>The total border width is 5px since it includes the additional pixel-wide border overlaid on the <code>Text</code>, or put another way, the yellow part of the border is 3px wide since the outer pixel is overlaid by the red border added to it.</p></div>
  1832.    </content>
  1833.    <updated>2019-08-08T19:58:19Z</updated>
  1834.    <published>2019-08-08T19:58:17Z</published>
  1835.    <category scheme="https://netsplit.com" term="SwiftUI"/>
  1836.    <author>
  1837.      <name>scott</name>
  1838.    </author>
  1839.    <source>
  1840.      <id>https://netsplit.com/feed/atom/</id>
  1841.      <link href="https://netsplit.com" rel="alternate" type="text/html"/>
  1842.      <link href="http://netsplit.com/feed/atom/" rel="self" type="application/atom+xml"/>
  1843.      <subtitle xml:lang="en-US">Scott James Remnant</subtitle>
  1844.      <title xml:lang="en-US">Netsplit.com</title>
  1845.      <updated>2019-08-08T19:58:19Z</updated>
  1846.    </source>
  1847.  </entry>
  1848.  
  1849.  <entry xml:lang="en-US">
  1850.    <id>https://netsplit.com/?p=183</id>
  1851.    <link href="https://netsplit.com/swiftui/modifying-views/" rel="alternate" type="text/html"/>
  1852.    <title xml:lang="en-US">Padding</title>
  1853.    <summary xml:lang="en-US">In views have fixed sizes, we introduced the idea that all views in SwiftUI are fixed in size, for example a Text view has the size required to render the string provided: Creates a view with the exact bounds necessary: We also showed that the .frame modifier actually creates a new view with the dimensions […]</summary>
  1854.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>In <a href="https://netsplit.com/swiftui/views-have-fixed-sizes/">views have fixed sizes</a>, we introduced the idea that all views in SwiftUI are fixed in size, for example a <code>Text</code> view has the size required to render the string provided:</p>
  1855.  
  1856.  
  1857. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1858.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1859.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1860.            .font(.title)
  1861.    }
  1862. }</code></pre>
  1863.  
  1864.  
  1865. <p>Creates a view with the exact bounds necessary:</p>
  1866.  
  1867.  
  1868.  
  1869. <figure class="wp-block-image"><img alt="text view" class="wp-image-52" src="https://netsplit.com/wp-content/uploads/2019/07/title_text.png"/></figure>
  1870.  
  1871.  
  1872.  
  1873. <p>We also showed that the <code>.frame</code> modifier actually creates a new view with the dimensions specifies, and positions the <code>Text</code> view within it, such that:</p>
  1874.  
  1875.  
  1876. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1877.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1878.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1879.            .font(.title)
  1880.            .frame(width: <span class="hljs-number">200</span>, height: <span class="hljs-number">200</span>)
  1881.    }
  1882. }</code></pre>
  1883.  
  1884.  
  1885. <p>Actually creates two views, a <code>.frame</code> that is 200×200 in size, and a <code>Text</code> within it with the exact bounds necessary to render its contents:</p>
  1886.  
  1887.  
  1888.  
  1889. <figure class="wp-block-image"><img alt="text inside frame" class="wp-image-55" src="https://netsplit.com/wp-content/uploads/2019/07/title_text_multiline.png"/></figure>
  1890.  
  1891.  
  1892.  
  1893. <p>We looked into this process further in <a href="https://netsplit.com/swiftui/flexible-frames/">flexible frames</a>, introduced the concept of <em>layout neutral</em> views that report their own size based on their children, and showed that in either dimension <code>.frame</code> can have a fixed size, be layout neutral, or through minimum and maximum size constraints base its own size on that proposed by its own parent.</p>
  1894.  
  1895.  
  1896.  
  1897. <p>We’ll now take a look at another useful modifier view, one that adds padding around its child view, and has a number of different forms that we can use:</p>
  1898.  
  1899.  
  1900. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">padding</span><span class="hljs-params">(<span class="hljs-number">_</span> length: CGFloat)</span></span> -&gt; some <span class="hljs-type">View</span>
  1901. <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">padding</span><span class="hljs-params">(<span class="hljs-number">_</span> insets: EdgeInsets)</span></span> -&gt; some <span class="hljs-type">View</span>
  1902. <span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">padding</span><span class="hljs-params">(<span class="hljs-number">_</span> edges: Edge.Set = .all, <span class="hljs-number">_</span> length: CGFloat? = <span class="hljs-literal">nil</span>)</span></span> -&gt; some <span class="hljs-type">View</span></code></pre>
  1903.  
  1904.  
  1905. <p>The first form sets the padding of all edges to the length specified.</p>
  1906.  
  1907.  
  1908.  
  1909. <p>The second form sets the padding of each of the edges to the specific individual values you specify through the <code>EdgeInsets</code> value.</p>
  1910.  
  1911.  
  1912.  
  1913. <p>The third form sets the padding of the set of edges you specify to the length supplied, leaving other edges unpadded. The third form also allows you to specify <code>nil</code> as the length, instead of zero, which instructs SwiftUI to use a system default amount of padding appropriate for the situation.</p>
  1914.  
  1915.  
  1916.  
  1917. <p>Default values for all parameters of the third form are provided, which uses the system default padding for all edges, we’ll use that in our example:</p>
  1918.  
  1919.  
  1920. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1921.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1922.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1923.            .font(.title)
  1924.            .padding()
  1925.    }
  1926. }</code></pre>
  1927.  
  1928.  
  1929. <p>The <code>.padding</code> modifier is no different from modifiers like <code>.frame</code>, it doesn’t modify the <code>Text</code> in any way, it instead creates a new view that adds padding, and positions the <code>Text</code> view inside it as a child:</p>
  1930.  
  1931.  
  1932.  
  1933. <figure class="wp-block-image"><img alt="text with padding" class="wp-image-189" src="https://netsplit.com/wp-content/uploads/2019/08/text_padding.png"/></figure>
  1934.  
  1935.  
  1936.  
  1937. <p>The layout process is actually a little more interesting than just adding padding, and is almost but not quite layout neutral. It in fact works something like we see for <a href="https://netsplit.com/swiftui/stacks/">stacks</a> when considering spacing.</p>
  1938.  
  1939.  
  1940.  
  1941. <ol><li>Parent proposes a size to the padding view.</li><li>Padding view subtracts the appropriate padding length from each edge.</li><li>Padding view proposes this smaller size to its child.</li><li>Child decides on its size.</li><li>Padding view takes the child’s size, adds the appropriate padding length back to each edge, and sets that to its own size.</li><li>Parent positions the padding view within its bounds.</li></ol>
  1942.  
  1943.  
  1944.  
  1945. <p>Thus a <code>.padding</code> view always tightly wraps its child (aside from the padding itself), with both being positioned by the parent frame, but at the same time adds an additional constraint (the padding) to the size the child can be.</p>
  1946.  
  1947.  
  1948.  
  1949. <p>We can demonstrate this by placing the <code>.padding</code> inside a frame:</p>
  1950.  
  1951.  
  1952. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  1953.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  1954.        <span class="hljs-type">Text</span>(<span class="hljs-string">"Nogitsune Takeshi"</span>)
  1955.            .font(.title)
  1956.            .padding()
  1957.            .frame(width: <span class="hljs-number">200</span>, height: <span class="hljs-number">200</span>)
  1958.    }
  1959. }</code></pre>
  1960.  
  1961.  
  1962. <p>The <code>.frame</code> has a fixed size of 200×200, the <code>.padding</code> view subtracts the system default padding of 16px (in this case) from each side, and supplies the <code>Text</code> with a proposed size of 168×168.</p>
  1963.  
  1964.  
  1965.  
  1966. <p>That’s too small for <code>Text</code> to layout on one line, but still enough room to wrap over two lines, so it returns its size appropriately to do that. <code>.padding</code> adds back the padding before returning its size, and the <code>.frame</code> positions the padding view inside it.</p>
  1967.  
  1968.  
  1969.  
  1970. <figure class="wp-block-image"><img alt="text with padding inside frame" class="wp-image-190" src="https://netsplit.com/wp-content/uploads/2019/08/text_padding_frame.png"/></figure>
  1971.  
  1972.  
  1973.  
  1974. <p>As we can see, the padding view still tightly wraps the <code>Text</code>, it isn’t increased in height or width to try and fill the parent frame, and is centered within it instead.</p></div>
  1975.    </content>
  1976.    <updated>2019-08-08T19:58:10Z</updated>
  1977.    <published>2019-08-08T03:11:13Z</published>
  1978.    <category scheme="https://netsplit.com" term="SwiftUI"/>
  1979.    <author>
  1980.      <name>scott</name>
  1981.    </author>
  1982.    <source>
  1983.      <id>https://netsplit.com/feed/atom/</id>
  1984.      <link href="https://netsplit.com" rel="alternate" type="text/html"/>
  1985.      <link href="http://netsplit.com/feed/atom/" rel="self" type="application/atom+xml"/>
  1986.      <subtitle xml:lang="en-US">Scott James Remnant</subtitle>
  1987.      <title xml:lang="en-US">Netsplit.com</title>
  1988.      <updated>2019-08-08T19:58:19Z</updated>
  1989.    </source>
  1990.  </entry>
  1991.  
  1992.  <entry xml:lang="en-US">
  1993.    <id>https://netsplit.com/?p=198</id>
  1994.    <link href="https://netsplit.com/swiftui/secondary-views-in-practice/" rel="alternate" type="text/html"/>
  1995.    <title xml:lang="en-US">Secondary Views in Practice</title>
  1996.    <summary xml:lang="en-US">A secondary view, be it background or overlay, can be any view. We know from flexible frames that we can create views of fixed sizes, sizes based on their children, or sizes based on their parent. And we saw above that the proposed size of a secondary view is the fixed size of a parent. […]</summary>
  1997.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>A <a href="https://netsplit.com/swiftui/secondary-views/">secondary view</a>, be it background or overlay, can be any view. We know from <a href="https://netsplit.com/swiftui/flexible-frames/">flexible frames</a> that we can create views of fixed sizes, sizes based on their children, or sizes based on their parent. And we saw above that the proposed size of a secondary view is the fixed size of a parent.</p>
  1998.  
  1999.  
  2000.  
  2001. <p>So let’s put all this together, and build something cool! A hit points bar for our character that shows how much damage they’ve taken.</p>
  2002.  
  2003.  
  2004.  
  2005. <p>We ideally want the size of the hit points bar to be flexible to our needs, as we’ll use it in a few different places. For the character list, something like the following code would be ideal:</p>
  2006.  
  2007.  
  2008. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  2009.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  2010.        <span class="hljs-type">HStack</span> {
  2011.            <span class="hljs-type">Image</span>(<span class="hljs-string">"rogue"</span>)
  2012.            <span class="hljs-type">VStack</span>(alignment: .leading) {
  2013.                <span class="hljs-type">Text</span>(<span class="hljs-string">"Hasty River"</span>)
  2014.                    .font(.title)
  2015.                <span class="hljs-type">HitPointBar</span>(hitPoints: <span class="hljs-number">60</span>, damageTaken: <span class="hljs-number">27</span>)
  2016.                    .font(.caption)
  2017.                    .frame(width: <span class="hljs-number">200</span>)
  2018.            }
  2019.        }
  2020.    }
  2021. }</code></pre>
  2022.  
  2023.  
  2024. <p>First let’s start by having some text say how many hit points they have left, we’ll want this somewhere in the bar, so it’s a good point to start:</p>
  2025.  
  2026.  
  2027. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">HitPointBar</span> : <span class="hljs-title">View</span> </span>{
  2028.    <span class="hljs-keyword">var</span> hitPoints: <span class="hljs-type">Int</span>
  2029.    <span class="hljs-keyword">var</span> damageTaken: <span class="hljs-type">Int</span>
  2030.  
  2031.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  2032.        <span class="hljs-type">Text</span>(<span class="hljs-string">"\(hitPoints-damageTaken)/\(hitPoints)"</span>)
  2033.    }
  2034. }</code></pre>
  2035.  
  2036.  
  2037. <p>That’s actually already enough to get started, the <code>Text</code> has a fixed size and the <code>HitPointBar</code> view is layout-neutral, so the <code>.frame</code> we supply above sets the width. While the <code>Text</code> has no font size specified of its own, it inherits it from the environment so we can set it on the <code>HitPointBar</code>; the <code>.frame</code> is layout-neutral in height, so inherits the height from the caption-sized <code>Text</code>:</p>
  2038.  
  2039.  
  2040.  
  2041. <figure class="wp-block-image"><img alt="hit point bar with just text" class="wp-image-165" src="https://netsplit.com/wp-content/uploads/2019/07/hitpointbar_text.png"/></figure>
  2042.  
  2043.  
  2044.  
  2045. <p>I added the border to the view to verify the frame, but that’s already not bad. However the <code>.border</code> was on the <code>.frame</code> outside the view, if we look inside we see that the <code>Text</code> has its usual fixed size and is just positioned within it.</p>
  2046.  
  2047.  
  2048.  
  2049. <p>We still need the <code>HitPointBar</code> itself to fill this. In <a href="https://netsplit.com/swiftui/flexible-frames/">flexible frames</a> I introduced infinite frames as frames that fill their parent, so we can use one of those:</p>
  2050.  
  2051.  
  2052. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">HitPointBar</span> : <span class="hljs-title">View</span> </span>{
  2053.    <span class="hljs-keyword">var</span> hitPoints: <span class="hljs-type">Int</span>
  2054.    <span class="hljs-keyword">var</span> damageTaken: <span class="hljs-type">Int</span>
  2055.  
  2056.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  2057.        <span class="hljs-type">Text</span>(<span class="hljs-string">"\(hitPoints-damageTaken)/\(hitPoints)"</span>)
  2058.            .frame(minWidth: <span class="hljs-number">0</span>, maxWidth: .infinity)
  2059.    }
  2060. }</code></pre>
  2061.  
  2062.  
  2063. <p>We make the frame of the text have the size of the parent in width (which we then fix in the <code>ContentView</code>), while still allow it to be layout neutral in height.</p>
  2064.  
  2065.  
  2066.  
  2067. <p>The result looks the same:</p>
  2068.  
  2069.  
  2070.  
  2071. <figure class="wp-block-image"><img alt="hit point bar with text and frame" class="wp-image-165" src="https://netsplit.com/wp-content/uploads/2019/07/hitpointbar_text.png"/></figure>
  2072.  
  2073.  
  2074.  
  2075. <p>But this time I’m able to place the <code>.border</code> around the <code>.frame</code> inside the <code>HitPointBar</code>. The text is positioned within that frame, and this frame can be the foundation of the rest of the view.</p>
  2076.  
  2077.  
  2078.  
  2079. <p>Once you learn to rely on the fixed sizes of views, and layout-neutral behavior of combinations of views, it’s actually easy to create flexible custom views by using the layout system rather than fighting it.</p>
  2080.  
  2081.  
  2082.  
  2083. <p>Okay so let’s add a secondary view to make the bar. Nothing says damage and hit points like a red lozenge:</p>
  2084.  
  2085.  
  2086. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">HitPointBar</span> : <span class="hljs-title">View</span> </span>{
  2087.    <span class="hljs-keyword">var</span> hitPoints: <span class="hljs-type">Int</span>
  2088.    <span class="hljs-keyword">var</span> damageTaken: <span class="hljs-type">Int</span>
  2089.  
  2090.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  2091.        <span class="hljs-type">Text</span>(<span class="hljs-string">"\(hitPoints-damageTaken)/\(hitPoints)"</span>)
  2092.            .foregroundColor(<span class="hljs-type">Color</span>.white)
  2093.            .frame(minWidth: <span class="hljs-number">0</span>, maxWidth: .infinity)
  2094.            .background(<span class="hljs-type">Color</span>.red)
  2095.            .cornerRadius(<span class="hljs-number">8</span>)
  2096.    }
  2097. }</code></pre>
  2098.  
  2099.  
  2100. <p>Pay attention to the ordering of things, and remember that <code>.frame</code> creates a new view around the <code>Text</code> inside it. We deliberately attach the <code>.background</code> secondary view to this frame, which is taking its width from its parent and its height from its children views.</p>
  2101.  
  2102.  
  2103.  
  2104. <p>We then apply a <code>.cornerRadius</code> to the combination of the frame and secondary view, which encases them both in a clipping view that masks the boundaries. This means it’ll apply to the <code>Text</code>, background color, and anything else we added.</p>
  2105.  
  2106.  
  2107.  
  2108. <p>We also set the foreground color of the <code>Text</code> to white for better contrast.</p>
  2109.  
  2110.  
  2111.  
  2112. <figure class="wp-block-image"><img alt="hit point bar with text and background" class="wp-image-166" src="https://netsplit.com/wp-content/uploads/2019/07/hitpointbar_red_background.png"/></figure>
  2113.  
  2114.  
  2115.  
  2116. <p>Looking good, but we want that hit point bar to be filled with green if they’ve taken no damage, filled green from the left and red from the right according to how many hit points they have left.</p>
  2117.  
  2118.  
  2119.  
  2120. <p>That wouldn’t be too hard if the size of the view was fixed, but we’ve deliberately decided to make it flexible and up to the parent. Worse, we’ve decided that the height is going to be dictated by dynamic type, so is flexible as well.</p>
  2121.  
  2122.  
  2123.  
  2124. <p>There’s a tool for this, the <a href="https://netsplit.com/swiftui/geometry-reader/">geometry reader</a>, and while it always expands to fill its entire parent, when we use it as a secondary view, the parent is the view it’s attached to.</p>
  2125.  
  2126.  
  2127.  
  2128. <p>For clarity I like to separate out complex secondary views into a separate property, so we first rewrite our control to do this:</p>
  2129.  
  2130.  
  2131. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">HitPointBar</span> : <span class="hljs-title">View</span> </span>{
  2132.    <span class="hljs-keyword">var</span> hitPoints: <span class="hljs-type">Int</span>
  2133.    <span class="hljs-keyword">var</span> damageTaken: <span class="hljs-type">Int</span>
  2134.  
  2135.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  2136.        <span class="hljs-type">Text</span>(<span class="hljs-string">"\(hitPoints-damageTaken)/\(hitPoints)"</span>)
  2137.            .foregroundColor(<span class="hljs-type">Color</span>.white)
  2138.            .frame(minWidth: <span class="hljs-number">0</span>, maxWidth: .infinity)
  2139.            .background(background)
  2140.            .cornerRadius(<span class="hljs-number">8</span>)
  2141.    }
  2142.  
  2143.    <span class="hljs-keyword">var</span> background: some <span class="hljs-type">View</span> {
  2144.        <span class="hljs-type">Color</span>.red
  2145.    }
  2146. }</code></pre>
  2147.  
  2148.  
  2149. <p>Now we know we’re going to want two things in this geometry view, a green color from the left for the hit points remaining, and a red color from the right for the damage taken.</p>
  2150.  
  2151.  
  2152.  
  2153. <p>There’s a few different ways to achieve that, and they’re all equally valid. For this example we’ll have the red color fill the entire view, and place a green color in front of it, so we’re going to need a z-axis stack for that with a leading alignment.</p>
  2154.  
  2155.  
  2156.  
  2157. <p>This all then goes inside the <code>GeometryReader</code>:</p>
  2158.  
  2159.  
  2160. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-keyword">var</span> background: some <span class="hljs-type">View</span> {
  2161.    <span class="hljs-type">GeometryReader</span> { g <span class="hljs-keyword">in</span>
  2162.        <span class="hljs-type">ZStack</span>(alignment: .leading) {
  2163.            <span class="hljs-type">Rectangle</span>()
  2164.                .fill(<span class="hljs-type">Color</span>.red)
  2165.            <span class="hljs-type">Rectangle</span>()
  2166.                .fill(<span class="hljs-type">Color</span>.green)
  2167.                .frame(width: g.size.width
  2168.                    * <span class="hljs-type">CGFloat</span>(<span class="hljs-keyword">self</span>.hitPoints - <span class="hljs-keyword">self</span>.damageTaken)
  2169.                    / <span class="hljs-type">CGFloat</span>(<span class="hljs-keyword">self</span>.hitPoints))
  2170.            }
  2171.        }
  2172.    }</code></pre>
  2173.  
  2174.  
  2175. <p>In general terms this view looks like something you’ve written before.</p>
  2176.  
  2177.  
  2178.  
  2179. <p>The <code>GeometryReader</code> expands to fill the proposed size given by the parent, except this time that proposed size is the size of the frame we put around the text, based on the text size.</p>
  2180.  
  2181.  
  2182.  
  2183. <p>A <code>ZStack</code> containing two views with leading alignment is nothing special, the first is a <code>Rectangle</code> filled with red—switching from just using the color for maximum readability, and the second is also a <code>Rectangle</code> just filled with the green instead.</p>
  2184.  
  2185.  
  2186.  
  2187. <p>The second <code>Rectangle</code> is constrained in size by placing it inside a frame, layout neutral in height, but fixed in width to that derived from the percentage of hit points remaining and the width returned by the <code>GeometryReader</code>.</p>
  2188.  
  2189.  
  2190.  
  2191. <p>The result is the flexible hit point bar we wanted:</p>
  2192.  
  2193.  
  2194.  
  2195. <figure class="wp-block-image"><img alt="hit point bar with text and progress" class="wp-image-168" src="https://netsplit.com/wp-content/uploads/2019/07/hitpointbar.png"/></figure>
  2196.  
  2197.  
  2198.  
  2199. <hr class="wp-block-separator"/>
  2200.  
  2201.  
  2202.  
  2203. <p>Imagery used in previews by <a href="https://www.deviantart.com/kaiseto">Kaiseto</a>, original images and derived here licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons 3.0 BY-NC-SA</a>.<br/></p></div>
  2204.    </content>
  2205.    <updated>2019-08-08T16:43:00Z</updated>
  2206.    <published>2019-08-08T03:15:49Z</published>
  2207.    <category scheme="https://netsplit.com" term="SwiftUI"/>
  2208.    <author>
  2209.      <name>scott</name>
  2210.    </author>
  2211.    <source>
  2212.      <id>https://netsplit.com/feed/atom/</id>
  2213.      <link href="https://netsplit.com" rel="alternate" type="text/html"/>
  2214.      <link href="http://netsplit.com/feed/atom/" rel="self" type="application/atom+xml"/>
  2215.      <subtitle xml:lang="en-US">Scott James Remnant</subtitle>
  2216.      <title xml:lang="en-US">Netsplit.com</title>
  2217.      <updated>2019-08-08T19:58:19Z</updated>
  2218.    </source>
  2219.  </entry>
  2220.  
  2221.  <entry xml:lang="en-US">
  2222.    <id>https://netsplit.com/?p=201</id>
  2223.    <link href="https://netsplit.com/swiftui/geometry-reader/" rel="alternate" type="text/html"/>
  2224.    <title xml:lang="en-US">Geometry Reader</title>
  2225.    <summary xml:lang="en-US">For most layout needs we can combine stacks and flexible frames, allowing us to make views and controls put together from fixed size primitives views upwards. For more complex layout needs, another option is to use GeometryReader. This is a construct that acts like an infinite frame, proposing the size of its parent to its […]</summary>
  2226.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>For most layout needs we can combine <a href="https://netsplit.com/swiftui/stacks/">stacks</a> and <a href="https://netsplit.com/swiftui/flexible-frames/">flexible frames</a>, allowing us to make views and controls put together from <a href="https://netsplit.com/swiftui/views-have-fixed-sizes/">fixed size</a> primitives views upwards.</p>
  2227.  
  2228.  
  2229.  
  2230. <p>For more complex layout needs, another option is to use <code>GeometryReader</code>. This is a construct that acts like an infinite frame, proposing the size of its parent to its children, and choosing its parent size as its own.</p>
  2231.  
  2232.  
  2233.  
  2234. <p>As an added feature, it passes the proposed size received to the builder as a closure argument. For example we can layout an image at a maximum of half of the size of the parent, while maintaining aspect ratio, with: </p>
  2235.  
  2236.  
  2237. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">ContentView</span> : <span class="hljs-title">View</span> </span>{
  2238.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  2239.        <span class="hljs-type">GeometryReader</span> { g <span class="hljs-keyword">in</span>
  2240.            <span class="hljs-type">ZStack</span> {
  2241.                <span class="hljs-type">Image</span>(<span class="hljs-string">"barbarian"</span>)
  2242.                    .resizable()
  2243.                    .aspectRatio(contentMode: .fit)
  2244.                    .frame(maxWidth: g.size.width / <span class="hljs-number">2</span>,
  2245.                           maxHeight: g.size.height / <span class="hljs-number">2</span>)
  2246.            }
  2247.            .frame(width: g.size.width, height: g.size.height)
  2248.        }
  2249.    }
  2250. }</code></pre>
  2251.  
  2252.  
  2253. <p>The <code>GeometryReader</code> acts exactly like the infinite frame we saw in <a href="https://netsplit.com/swiftui/flexible-frames/">flexible frames</a>, it proposes the size of its parent to its child, but it also passes that proposed size <code>g</code> to our view builder.</p>
  2254.  
  2255.  
  2256.  
  2257. <p>And just like the infinite frame, the geometry reader doesn’t use the size of the child when deciding its own size; instead it always returns the proposed size from the parent as its own size.</p>
  2258.  
  2259.  
  2260.  
  2261. <p>An important gotcha is that within the view builder we need to do our own sizing, positioning and alignment; <code>ZStack</code> is perfect for this. We still need to position that, so we place it inside a frame that has the same size as the reader parent, and let the stack be centered inside it.</p>
  2262.  
  2263.  
  2264.  
  2265. <p>Finally inside the stack we place our image, and place that inside a frame that constrains its width and height to half the size of the reader.</p>
  2266.  
  2267.  
  2268.  
  2269. <figure class="wp-block-image"><img alt="image in geometryreader" class="wp-image-121" src="https://netsplit.com/wp-content/uploads/2019/07/geometryreader.png"/></figure>
  2270.  
  2271.  
  2272.  
  2273. <h2>In Secondary Views</h2>
  2274.  
  2275.  
  2276.  
  2277. <p>With access to the proposed size of the parent, <code>GeometryReader</code> can seem powerful, but the resulting fixed size equally that can limit their usefulness. When combined with <a href="https://netsplit.com/swiftui/secondary-views/">secondary views</a> they become even more convenient.</p>
  2278.  
  2279.  
  2280.  
  2281. <p>As we saw above, when free floating, a geometry reader expands to fill the size proposed by the parent.</p>
  2282.  
  2283.  
  2284.  
  2285. <p>But because the proposed parent size of a secondary view is the fixed size decided by the view its attached to, that is the proposed size. Thus <code>GeometryReader</code> inside a secondary view returns the size of the view it’s attached to.</p>
  2286.  
  2287.  
  2288.  
  2289. <figure class="wp-block-pullquote"><blockquote><p><code>GeometryReader</code> inside a secondary view returns the size of the view it’s attached to</p></blockquote></figure>
  2290.  
  2291.  
  2292.  
  2293. <p>For clarity I like to separate out complex secondary views into a separate property:</p>
  2294.  
  2295.  
  2296. <pre class="wp-block-code"><code class="hljs language-swift"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">OverlaiedImage</span> : <span class="hljs-title">View</span> </span>{
  2297.    <span class="hljs-keyword">var</span> body: some <span class="hljs-type">View</span> {
  2298.        <span class="hljs-type">Image</span>(<span class="hljs-string">"barbarian"</span>)
  2299.            .resizable()
  2300.            .aspectRatio(contentMode: .fit)
  2301.            .overlay(overlay)
  2302.    }
  2303.  
  2304.    <span class="hljs-keyword">var</span> overlay: some <span class="hljs-type">View</span> {
  2305.        <span class="hljs-type">GeometryReader</span> { g <span class="hljs-keyword">in</span>
  2306.            <span class="hljs-type">Image</span>(<span class="hljs-string">"overlay"</span>)
  2307.                .resizable()
  2308.                .frame(width: g.size.width, height: g.size.height / <span class="hljs-number">2</span>)
  2309.                .position(y: g.size.height / <span class="hljs-number">2</span>)
  2310.        }
  2311.    }
  2312. }</code></pre>
  2313.  
  2314.  
  2315. <p>In this example the <code>Image</code> in the body is allowed to be resizable while maintaining its own aspect ratio, with the ultimate bounds of that determined by whatever uses our <code>OverlaidImage</code> custom view.</p>
  2316.  
  2317.  
  2318.  
  2319. <p>We then use an <code>.overlay</code> secondary view to draw another image over the bottom half of that image.</p>
  2320.  
  2321.  
  2322.  
  2323. <p>In order to constrain that to the bottom half we need to know the size of the <code>Image</code> we’re drawing over, and the <code>GeometryReader</code> works for this because it’s in the secondary view.</p>
  2324.  
  2325.  
  2326.  
  2327. <hr class="wp-block-separator"/>
  2328.  
  2329.  
  2330.  
  2331. <p>Imagery used in previews by <a href="https://www.deviantart.com/kaiseto">Kaiseto</a>, original images and derived here licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons 3.0 BY-NC-SA</a>.<br/></p></div>
  2332.    </content>
  2333.    <updated>2019-08-08T16:42:43Z</updated>
  2334.    <published>2019-08-08T16:42:41Z</published>
  2335.    <category scheme="https://netsplit.com" term="SwiftUI"/>
  2336.    <author>
  2337.      <name>scott</name>
  2338.    </author>
  2339.    <source>
  2340.      <id>https://netsplit.com/feed/atom/</id>
  2341.      <link href="https://netsplit.com" rel="alternate" type="text/html"/>
  2342.      <link href="http://netsplit.com/feed/atom/" rel="self" type="application/atom+xml"/>
  2343.      <subtitle xml:lang="en-US">Scott James Remnant</subtitle>
  2344.      <title xml:lang="en-US">Netsplit.com</title>
  2345.      <updated>2019-08-08T19:58:19Z</updated>
  2346.    </source>
  2347.  </entry>
  2348.  
  2349.  <entry>
  2350.    <id>tag:joi.ito.com,2019:/weblog//1.5721</id>
  2351.    <link href="http://feedproxy.google.com/~r/joi-ito/weblog/~3/Iozn7O79x2Y/is-philanthropy.html" rel="alternate" type="text/html"/>
  2352.    <title>Is philanthropy a bad excuse for limiting strong government?</title>
  2353.    <summary>Ethan Zuckerman thoughtfully and appropriately points out that one big missing question in my recent Wired piece on measuring philanthropic impact is whether some of this positive societal change should be in the hands of government instead of philanthropists. He...</summary>
  2354.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.ethanzuckerman.com/blog/2019/08/05/philanthropy-and-the-hand-off-what-happens-if-government-cant-scale-social-experiments/">Ethan Zuckerman thoughtfully and appropriately points out</a> that one big missing question in <a href="https://www.wired.com/story/joi-ito-impact-investing/">my recent Wired piece</a> on measuring philanthropic impact is whether some of this positive societal change should be in the hands of government instead of philanthropists. He correctly points out that since the Reagan/Thatcher era of the 80s, we've started shrinking the role of government and have started to see big philanthropists and the private sector being called on to do what government used to do. <a href="http://www.ethanzuckerman.com/blog/2013/10/15/google-cars-versus-public-transit-the-uss-problem-with-public-goods/">In a post from 2013</a>, Ethan wonders why he doesn't have rail solution to his commuting problem from Western Massachusetts. He suggests that without government, things like railway system are difficult to fund - the market isn't the best solution for many social goods.</p>
  2355.  
  2356. <p>I think the idea about whether we should be doubling down on philanthropy or fixing government and increasing government resources is a great question and probably the right one. I think the idea of fixing the government and turning the corner on the privatization is a daunting idea, but something we need to discuss.</p>
  2357.        
  2358.    <img alt="" height="1" src="http://feeds.feedburner.com/~r/joi-ito/weblog/~4/Iozn7O79x2Y" width="1"/></div>
  2359.    </content>
  2360.    <updated>2019-08-07T19:32:23Z</updated>
  2361.    <published>2019-08-07T13:27:17Z</published>
  2362.    <category scheme="http://www.sixapart.com/ns/types#category" term="Philanthropy"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://joi.ito.com/weblog/2019/08/07/is-philanthropy.html</feedburner:origLink>
  2363.    <author>
  2364.      <name>Joichi Ito</name>
  2365.      <uri>https://joi.ito.com</uri>
  2366.    </author>
  2367.    <source>
  2368.      <id>tag:joi.ito.com,2008-05-17:/weblog//1</id>
  2369.      <link href="https://joi.ito.com/weblog/" rel="alternate" type="text/html"/>
  2370.      <link href="http://feeds.feedburner.com/joi-ito/weblog" rel="self" type="application/atom+xml"/>
  2371.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  2372.      <subtitle>Joi Ito's conversation with the living web.</subtitle>
  2373.      <title>Joi Ito's Web</title>
  2374.      <updated>2019-08-07T19:32:23Z</updated>
  2375.    </source>
  2376.  </entry>
  2377.  
  2378.  <entry xml:lang="en-US">
  2379.    <id>https://www.w3.org/blog/?p=18062</id>
  2380.    <link href="https://www.w3.org/blog/2019/08/changes-to-the-publication-schedule-for-the-publishing-working-group/" rel="alternate" type="text/html"/>
  2381.    <title>Changes to the Publication Schedule for the Publishing Working Group</title>
  2382.    <summary>The Publishing Working Group has made changes to its deliverables schedule and content in recent weeks and would like to provide an update on the changes we have decided to make, and why. A few weeks ago the group resolved to suspend work for now on the Web Publications specification due to a lack of […]</summary>
  2383.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The Publishing Working Group has made changes to its deliverables schedule and content in recent weeks and would like to provide an update on the changes we have decided to make, and why. A few weeks ago the group resolved to suspend work for now on the Web Publications specification due to a lack of implementer and industry resource availability to complete the work in the chartered timeframe. There was not a clear and immediate business case for the specification. After meetings with the Steering Committee, we have decided to proceed with specifications that have a clear and immediate business need and/or will facilitate future work.</p>
  2384. <p>In the coming weeks the PWG will publish a series of notes based on the work we have done so far. The first of these will be our <a href="https://www.w3.org/TR/pwp-ucr/">Use Cases and Requirements document</a>, followed by the note version of the <a href="https://www.w3.org/TR/wpub/">Web Publications</a> document, and then later this month the first draft for our <a href="https://w3c.github.io/lpf/">Lightweight Packaging Format</a>. An update to the working draft of the <a href="https://www.w3.org/TR/audiobooks">Audiobooks Specification</a> that reflects the changes to the structure of our projects is also expected later this month. This update will include some changes in response to feedback we have received.</p>
  2385. <p>The final document we intend to publish is a specification for a <a href="https://www.github.com/w3c/pub-manifest">Publication Manifest</a>. This specification allows us to take the best of the work we have completed thus far and open it up to the digital publishing and web communities. One of the reasons we are bringing this part of the document to the rec track is to facilitate future profiles. Audiobooks will be the first specification to reference the structure of the Publication Manifest, but we expect future profiles to use it as well, like the work of the <a href="https://www.w3.org/community/bdcomacg/">BDCoMA Community Group</a> and <a href="https://www.w3.org/community/publishingcg/">Publishing Community Group</a>. We look forward to seeing future ideas using this specification, and encourage anyone interested to join us or provide feedback via our <a href="https://github.com/w3c/publ-wg">GitHub repository</a>.</p></div>
  2386.    </content>
  2387.    <updated>2019-08-07T18:27:00Z</updated>
  2388.    <category term="Digital Publishing"/>
  2389.    <category term="Working Group"/>
  2390.    <author>
  2391.      <name>Wendy Reid</name>
  2392.    </author>
  2393.    <source>
  2394.      <id>https://www.w3.org/blog</id>
  2395.      <link href="https://www.w3.org/blog/feed/" rel="self" type="application/rss+xml"/>
  2396.      <link href="https://www.w3.org/blog" rel="alternate" type="text/html"/>
  2397.      <subtitle>Leading the Web to its Full Potential</subtitle>
  2398.      <title>W3C Blog</title>
  2399.      <updated>2019-08-18T02:29:31Z</updated>
  2400.    </source>
  2401.  </entry>
  2402.  
  2403.  <entry xml:lang="en-US">
  2404.    <id>http://redmonk.com/jgovernor/?p=5045</id>
  2405.    <link href="http://feedproxy.google.com/~r/JamesGovernorsMonkchips/~3/M0iaZYje_GA/" rel="alternate" type="text/html"/>
  2406.    <title xml:lang="en-US">DevOpsWorld 2019: See You There</title>
  2407.    <summary xml:lang="en-US">I am delivering the closing keynote at DevOpsWorld next week in San Francisco. I am pretty excited about it. The event is run by CloudBees. I’m on a European roadshow with them this year, which has been really fun, meeting customers and folks in the Jenkins and wider Continuous Integration ecosystem, but the chance to</summary>
  2408.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://redmonk.com/jgovernor/files/2019/08/event-highlights2-sf.png"><img alt="" class="aligncenter  wp-image-5046" height="347" src="http://redmonk.com/jgovernor/files/2019/08/event-highlights2-sf.png" width="345"/></a></p>
  2409. <p><span style="font-weight: 400;">I am delivering the closing keynote at DevOpsWorld next week in San Francisco. I am pretty excited about it. The event is run by CloudBees. I’m on a <a href="https://www.cloudbees.com/cloudbees-days#global-tour">European roadshow</a> with them this year, which has been really fun, meeting customers and folks in the Jenkins and wider Continuous Integration ecosystem, but the chance to keynote is SF is obviously exciting. </span></p>
  2410. <p><span style="font-weight: 400;">Without giving too much away my talk is going to be about the next big period of industry growth, particularly from the perspective of where we’re and how we’re going to find enough developers and IT personnel to take us forward in solving the world scale challenges we face. I have titled it <strong>The Next Wave of Growth: Towards 100m developers</strong>.  I will talk about diversity and inclusion, geography, distributed development, our changing lingua franca, open source, the cloud, remote and distributed work, energy consumption, why bikes are awesome, learning platforms and treating people better. I hope that sounds like something you’ll enjoy.</span></p>
  2411. <p>I am also looking forward to the event to learn more from CloudBees about its vision for the future of software delivery as a business process, which it’s calling Software Delivery Management. We live, after all, in an era defined by the 2011 Mark Andreesen essay – Software Is Eating The World, in which he argued that the most valuable companies in the world – such as Amazon, Google and Netflix are actually software companies. Value chains in all industries have become software-driven and software optimised. That means everyone needs to get better at writing software, and make the best use of their assets. One of the most interesting new frontiers in software development is the focus on data about the delivery process to drive better decision-making and outcomes. Full telemetry across the software delivery lifecycle, across every pull request, check in, Jira ticket, every job and deploy. Master Data Management for software delivery. Enterprises are finally embracing Continuous Delivery wholeheartedly enough to need tools to better understand how effective they’re becoming in writing and delivering new digital services. Digital Transformation requires management information.</p>
  2412. <p>Further down the stack JenkinsX is an exciting project, bridging Jenkins with Kubernetes, allowing for portable pipelines that can either run on premises as Jenkins jobs or in Google Cloud using Tekton, an open-source framework for creating continuous integration and delivery (CI/CD) systems.</p>
  2413. <p>Obviously I will also take the time to evangelise Progressive Delivery, helping enterprises understand how they can lower risk by taking advantage of Continuous Integration patterns such as blue/green deployments, canarying, and A/B testing, making the blast radius of a new service a choice rather than an accident waiting to happen. My colleague Rachel Stephens will also be at the event, talking about Feature management using feature flags. Look forward to seeing you there. Hit me up if you’d like to talk about the changing face of software development</p>
  2414. <p>You can buy a ticket <a href="https://web.cvent.com/event/eac49765-9235-4b96-aaba-3bcb9cc837c3/summary?RefId=SiteButton">here</a>.</p>
  2415. <p><span style="font-weight: 400;"> </span></p>
  2416. </div>
  2417.    </content>
  2418.    <updated>2019-08-07T15:56:00Z</updated>
  2419.    <category term="Uncategorized"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://redmonk.com/jgovernor/2019/08/07/devopsworld-2019-see-you-there/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=devopsworld-2019-see-you-there</feedburner:origLink>
  2420.    <author>
  2421.      <name>James Governor</name>
  2422.    </author>
  2423.    <source>
  2424.      <id>https://redmonk.com/jgovernor</id>
  2425.      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
  2426.      <link href="https://redmonk.com/jgovernor" rel="alternate" type="text/html"/>
  2427.      <link href="http://feeds.feedburner.com/JamesGovernorsMonkchips" rel="self" type="application/atom+xml"/>
  2428.      <link href="http://feeds.feedburner.com/JamesGovernorsMonkchips" rel="self" type="application/rss+xml"/>
  2429.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  2430.      <link href="http://creativecommons.org/licenses/by-nc-sa/2.0/" rel="license" type="text/html"/>
  2431.      <subtitle xml:lang="en-US">An industry analyst blog looking at software ecosystems and convergence</subtitle>
  2432.      <title xml:lang="en-US">James Governor's Monkchips</title>
  2433.      <updated>2019-08-07T19:52:14Z</updated>
  2434.    </source>
  2435.  </entry>
  2436.  
  2437.  <entry xml:lang="en-US">
  2438.    <id>http://redmonk.com/jgovernor/?p=5041</id>
  2439.    <link href="http://feedproxy.google.com/~r/JamesGovernorsMonkchips/~3/gMtfPHOuwu0/" rel="alternate" type="text/html"/>
  2440.    <title xml:lang="en-US">HashiConf EU 2019: The Service Mesh push and Progressive Delivery</title>
  2441.    <summary xml:lang="en-US">As enterprises commit to building microservices to enable greater software development velocity the market for infrastructure to manage and enable these microservices is beginning to mature. HashiCorp is ready to be a platform supplier for these tools, building on its existing beachheads, most notably Consul. That was pretty much my hot take from HashiConf EU</summary>
  2442.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://redmonk.com/jgovernor/files/2019/08/electric-coffee-truck.jpg"><img alt="" class="aligncenter wp-image-5042" height="488" src="http://redmonk.com/jgovernor/files/2019/08/electric-coffee-truck-1024x768.jpg" width="651"/></a></p>
  2443. <p>As enterprises commit to building microservices to enable greater software development velocity the market for infrastructure to manage and enable these microservices is beginning to mature.</p>
  2444. <p>HashiCorp is ready to be a platform supplier for these tools, building on its existing beachheads, most notably Consul. That was pretty much my hot take from HashiConf EU in Amsterdam last month. The event was held in Westergasfabriek, an old Amsterdam gasworks, which is appropriate given the focus on repurposing, refactoring and building on legacy infrastructure as well as new platforms. HashiCorp is pragmatic – it builds cool products that also work with uncool platforms. The Cloud Operating Model can apply whether you’re running VMs, containers, bare metal or mainframes. While everyone else out here is telling you to rehost on Kubernetes, HashiCorp remembers its roots: its earliest tool Vagrant was built specifically for managing virtual machines. While everyone else is still trying to work out whether hybrid is a thing, whether multi cloud is a thing, whether they should support containers or Lambdas, HashiCorp gets on with it, delivering products that span cloud and on prem, flattening networks with a Cloud Operating Model and effective, well thought out, service interfaces. Enter the multiverse.</p>
  2445. <p>Regarding the conference itself – the aforementioned venue was excellent. The catering was extremely high quality and the coffee service was the best I have ever had at a tech conference other than my own – thanks <a href="https://www.bitterandreal.nl/">Bitter and Real</a>. Arguably even the gorgeous coffee truck was a metaphor for refreshing your legacy environments – the 1971 Citroën HY Van has been retooled as an electric vehicle, which is kind of wonderful. The truck even has solar panels – this <a href="https://sprudge.com/more-coffee-less-fossil-fuel-bitter-real-is-the-netherlands-eco-coffee-truck-133869.html">post</a> tells you more, including details of their coffee machines and equipment. The folks at Bitter and Real are fantastic. Please look them out for your own events.</p>
  2446. <p>All of these details matter, in an industry crowded with tech events. Create lovely experiences, with plenty of breaks, and crisp story-telling, and you definitely stand out.</p>
  2447. <p>HashiCorp has an enviable ability to explain complex things in a straightforward way – what struck me most at the event was that HashiCorp yet again did a better job of explaining service mesh than another other vendor. Start with first principles, then use cases, then features.</p>
  2448. <h1>Service mesh as architecture pattern</h1>
  2449. <p>Service mesh introduces “sidecars” into service topologies, where the logic for monitoring and controlling communications between each microservice runs in a sidecar alongside the microservice itself. The sidecar manages traffic and provides consistency for observability, security and routing.</p>
  2450. <p>Services should use logical names for routing, rather than being hard-wired to network addresses. With modern applications chances are high you’re running multiple regions, and multiple VPCs. But Kubernetes needs an overlay network, and as soon as the topology becomes more complex, connecting to a VM or another K8s cluster, the developer potentially has to worry about complex, manual network configuration. It’s possible that two different Kubernetes clusters can create the same IP space, so you might have two pods, in 2 clusters, with identical IP addresses. Not good.</p>
  2451. <p>The more complex the service topology the harder the networking problems become – this is even more true in topologies that include microservices that don’t run on Kubernetes. That “multi” story again. That’s the role Consul fills. It automatically routes network traffic, including for example firewall rules, with end to end encryption, across multiple platforms.</p>
  2452. <p>HashiCorp co-founder Mitchell Hashimoto claimed in his keynote: “It makes the network seem flat from a developer perspective.”</p>
  2453. <h1>Design and operating model</h1>
  2454. <p>HashiCorp design’s philosophy is important here. The goal of Consul is to unify everything, so that it “works everywhere”, exposing features in a consistent way in any environment. It also needs to “integrate and feel natural”. Thus, for example, supporting Helm, the Kubernetes package manager.</p>
  2455. <p>As co-founder Armon Dadger explained in a<a href="https://cloudblogs.microsoft.com/opensource/2018/04/12/hashicorp-co-founder-on-simplifying-infrastructure-management/"> blog post</a> last year:</p>
  2456. <p>“Our fundamental belief is that technology will continue to march forward and innovate and evolve. And yet, workflows mostly stay the same. What I mean by that is we still have to provision our application — at some point we were provisioning a mainframe, then we were provisioning bare metal, then we were provisioning VMs, now we might be provisioning containers in the cloud. So, the specific thing that we are provisioning has changed, but the fact that we have to provision and manage the lifecycle hasn’t. Core workflow is fundamental.”</p>
  2457. <p>The Cloud Operating Model as defined by HashiCorp is a set of disciplines and workflows spanning 4 pillars each of which maps to an IT function – run (development), connect (networking), secure (security), and provision (operations) and run. HashiCorp tooling maps to this view of the world like so:</p>
  2458. <p>One strength of this portfolio is that each product maps to a particular buyer and budget. In the enterprise software business it is useful to have products that customers know how to buy and that salespeople know how to sell.</p>
  2459. <p>Terraform is very widely used, accounting for a non trivial amount of AWS infrastructure provisioning globally. Vault too, has a dedicated buyer in security, and has seen widespread deployment in customers doing distributed software deployment. HashiCorp now sees Consul as the next key area to tackle. Nomad, which is aimed at the most mature IT organisations is by nature a smaller market. Most enterprises organisations are still primarily running legacy processes and infrastructure.</p>
  2460. <h1>Consul as beachhead</h1>
  2461. <p>The Day One HashiConf keynote primarily focused on enhancements to Consul, and the Consul Connect service mesh. As Hashimoto explained routing must be represented in terms of logical, rather than physical, services. This is especially true with event-based architectures because, with serverless functions and Lambdas, parts of the service may effectively not even exist until the service is actually invoked. Distributed services are dynamic and ephemeral. Networks need to be logical constructs for naming, authorisation, and routing.</p>
  2462. <p>For use cases like canarying, where you send some traffic from version 1 of a service to version 2, before moving the rest of the traffic there.</p>
  2463. <p style="padding-left: 40px;">“I don’t want my web server to have to know about all of that.“</p>
  2464. <p>Or indeed, your application developer – they should ideally be focusing on the app, not the network plumbing. Hashimoto said there are two ways to think about Consul, given it’s designed to solve the service networking challenge.</p>
  2465. <ol>
  2466. <li>As a traditional service discovery and management platform</li>
  2467. <li>As a service mesh</li>
  2468. </ol>
  2469. <p>The real news from HashiConf was that HashiCorp is using <a href="https://www.envoyproxy.io/">Envoy</a> as a proxy or “mesh gateway” within a service mesh, managed and configured by Consul. This is another big win for Envoy, which is now the industry standard sidecar for service mesh architectures. Note that AWSCloud also adopted Envoy for AWS App Mesh.</p>
  2470. <p>Consul 1.6 offers full Layer 7 services, with HTTP routing, and traffic splitting. It has an Autojoin provider for 3rd party services to connect to Kubernetes, with Catalog sync to Consul. HashiCorp is also further integrating Consul and Nomad. For example Nomad 0.10, announced in the HashiConf EU 2019 keynote, introduces shared namespaces so that you don’t have to manually deploy sidecar proxies. If you’re deploying Redis for example, Nomad will automatically wire and connect the sidecar.</p>
  2471. <h1>Conway’s Law for infrastructure</h1>
  2472. <p><a href="http://redmonk.com/jgovernor/files/2019/08/banks-and-progressive-delivery.jpg"><img alt="" class="aligncenter wp-image-5043" height="488" src="http://redmonk.com/jgovernor/files/2019/08/banks-and-progressive-delivery.jpg" width="650"/></a></p>
  2473. <p>The next speaker was Paul Banks, Consul Engineering Lead at HashiCorp, who did an excellent job of further explaining service mesh in a great talk titled <a href="https://youtu.be/GXDpeZo78UY">Multi-cloud Service Mesh Networking For Humans</a> (I <strong>highly</strong> recommend you watch it). Banks started, as many good tech talks do, with Conway’s Law:</p>
  2474. <p style="padding-left: 40px;">“Organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations.”</p>
  2475. <p>Banks made the distinction between service mesh as architectural pattern and service mesh as feature set. Service mesh features include dynamic routing, service identity, resiliency patterns (circuit breakers, retries), and consistent observability. Banks said that in the multi everything world you’re going to have many organisations which have different tech teams working in different tech stacks, with different CI/CD, security approaches and so on. You want to decouple and separate concerns, and avoid duplication of effort. Say reliable communications – for example, retries, away from the different application teams.</p>
  2476. <p style="padding-left: 40px;">“Service mesh is like Conway’s Law for infrastructure”</p>
  2477. <p>The architectural approach is to have dynamic traffic management, dynamic runtime configuration, observability, and a central API, and most importantly make it useful and useful enough that it becomes “the default path for delivering apps in your organisation”.</p>
  2478. <p style="padding-left: 40px;">“Infrastructure teams can build things on top of the network, like sophisticated rollout mechanisms, automate incident responses, and things like that that can then be provided as a service to applications without affecting application code. You can’t expect teams to go through laborious canarying processes, unless you make it easy.</p>
  2479. <p style="padding-left: 40px;">“Progressive delivery is a kind of umbrella term for a bunch of practices that have been around for quite a while. I would imagine the vast majority of this audience have done at least one of these before”.</p>
  2480. <p>I must admit I was pretty excited that Banks used Progressive Delivery as a way to build on his narrative. RedMonk has had scores of conversations with vendors about the Service Mesh architectural pattern over the last couple of years. The lack of clarity in most of them, combined with aggressive cheer-leading, led me to coin the term Progressive Delivery because I felt we needed a better language of use cases to explain the value of service mesh patterns and architectures. Organisations need to reduce the risk when they do rollouts. You need to have dynamic configuration in your infrastructure, you need consistent observability, and you need an API for management and configurations. Banks said organisations like Netflix and Linkedin were releasing papers about their practices that come under the umbrella of progressive delivery.</p>
  2481. <p>Another key use case for service mesh is security. Use mutual Transport Layer Security (TLS) instead of IP firewalls for example, to manage encryption centrally across all of your services.</p>
  2482. <p>Organisations have to continually improve the reliability of services, as apps become more complex. We need to establish and automate best practices on how to do things – around for example short time outs, limited retries, rate limiting, to prevent cascading failures. Service mesh can provide those features, for example setting policies for example that apps need rate limiting.</p>
  2483. <p>Finally Banks talked about observability.</p>
  2484. <p>“You need a holistic view so that you can understand, debug, and innovate. Service mesh can help because you get consistent metrics and tooling across that you can enable across all systems. You can enable tracing… …We’re seeing tools so you can automate canarying, and auto scaling, automate. Control systems need input and output, with consistent data. You need consistent data about who’s performing what action, and how its performing. A service mesh gives you that. You need to complete that feedback loop, with a centralised API and control plane”</p>
  2485. <p>Banks then demonstrated dynamic traffic routing with a hilarious demo of Canary deployment. The demo showed a web service routing 100% of its traffic to v1 environment, then moving some traffic to v2, with Grafana for visualisation. Banks wanted a visual, dynamic way to approach the demo, rather than curl and command line.</p>
  2486. <p style="padding-left: 40px;">“I am very proud to announce that I finally found a use for the Touch Bar on my Mac.”</p>
  2487. <p>Progressive delivery by Touch Bar made for a great, funny engaging demo.</p>
  2488. <h1>Thoughts on the landscape</h1>
  2489. <p>It’s 2019 so apparently everyone has a service mesh. Istio has been the most hyped – it has solid corporate backing from IBM, Google, Pivotal and SAP. These companies now need to do a better job of nailing use cases. Usability is another area that needs work. Tetrate is startup focusing on making Istio easier to use, founded by some of its project principals. Aspen Mesh is another Istio distro.</p>
  2490. <p>Envoy is the default proxy in Istio, and it has its own momentum. It has the backing of Amazon Web Services and now HashiCorp.</p>
  2491. <p>Linkerd is another service mesh option, developed by Buoyant. The founding team of William Morgan and Oliver Gould have production experience on their side, having done as much as anyone to popularise the service mesh pattern based on their experiences running microservices at scale at Twitter. They have some impressive high scale customer names – including Chase, Comcast, Expedia, and Walmart. Also engineers like the product, which is helpful.</p>
  2492. <h1>In Conclusion</h1>
  2493. <p>At a glance HashiCorp has some strong advantages in the service mesh space. It tells the best story on service mesh, which is also an evolutionary narrative, based on extending Consul networking and integrating with legacy environments, rather than rehosting everything on Kubernetes. HashiCorp identifies buyers and sell to them effectively. Consul sells to the networking organisational function, which is now being tasked with managing software defined networks, with service routing using a Layer 7 model.</p>
  2494. <p>Consul Connect is looking like a market maker.</p>
  2495. <p> </p>
  2496. <p> </p>
  2497. <p>disclosure: Aspen Mesh, AWS, Google, IBM, Pivotal, and Red Hat are all clients. This post is independent of any client relationships however.</p>
  2498. <p>Related posts:</p>
  2499. <p><a href="https://redmonk.com/jgovernor/2018/08/06/towards-progressive-delivery/">Towards Progressive Delivery</a></p>
  2500. <p><a href="https://redmonk.com/jgovernor/2019/07/10/progressive-delivery-at-gitlab/">Progressive Delivery at GitLab</a></p>
  2501. <p><a href="https://redmonk.com/jgovernor/2019/02/25/progressive-delivery-at-sumo-logic/">Progressive Delivery at Sumo Logic</a></p>
  2502. </div>
  2503.    </content>
  2504.    <updated>2019-08-07T14:32:06Z</updated>
  2505.    <category term="Uncategorized"/>
  2506.    <category scheme="http://rss.financialcontent.com/stocksymbol" term="TLS"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://redmonk.com/jgovernor/2019/08/07/hashiconf-eu-2019-the-service-mesh-push/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hashiconf-eu-2019-the-service-mesh-push</feedburner:origLink>
  2507.    <author>
  2508.      <name>James Governor</name>
  2509.    </author>
  2510.    <source>
  2511.      <id>https://redmonk.com/jgovernor</id>
  2512.      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
  2513.      <link href="https://redmonk.com/jgovernor" rel="alternate" type="text/html"/>
  2514.      <link href="http://feeds.feedburner.com/JamesGovernorsMonkchips" rel="self" type="application/atom+xml"/>
  2515.      <link href="http://feeds.feedburner.com/JamesGovernorsMonkchips" rel="self" type="application/rss+xml"/>
  2516.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  2517.      <link href="http://creativecommons.org/licenses/by-nc-sa/2.0/" rel="license" type="text/html"/>
  2518.      <subtitle xml:lang="en-US">An industry analyst blog looking at software ecosystems and convergence</subtitle>
  2519.      <title xml:lang="en-US">James Governor's Monkchips</title>
  2520.      <updated>2019-08-07T19:52:14Z</updated>
  2521.    </source>
  2522.  </entry>
  2523.  
  2524.  <entry xml:lang="en-US">
  2525.    <id>http://redmonk.com/jgovernor/?p=5039</id>
  2526.    <link href="http://feedproxy.google.com/~r/JamesGovernorsMonkchips/~3/xiFAN6hdmbI/" rel="alternate" type="text/html"/>
  2527.    <title xml:lang="en-US">Kubernetes Matures: On Operator Experience, industry updates from Docker, Pivotal and Mesosphere.</title>
  2528.    <summary xml:lang="en-US">Kubernetes has firmly established itself as the industry standard for container orchestration. There is basically no other game in town at this point. But when it comes to user experience there is plenty to play for – we’re still early in a secular shift. So far a lot of the Kubernetes build-out has been very</summary>
  2529.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>Kubernetes has firmly established itself as the industry standard for container orchestration. There is basically no other game in town at this point. But when it comes to user experience there is plenty to play for – we’re still early in a secular shift. So far a lot of the Kubernetes build-out has been very much full stack, with the expectation that the developer is also an operator. This needs to change. Specialisation will be required for Kubernetes to continue to flourish. Operator Experience and Developer Experience are not the same thing – they concern two different personae.</p>
  2530. <p>At which point I want to mention a couple of clients that recently asked for quotes for press releases about their wholehearted adoption of Kubernetes. Both Docker and Pivotal began as conflicted about Kubernetes, given their own architecture choices and legacies, but have little if any choice but to focus on encouraging and enabling Kubernetes adoption today. One reason I find both companies’ story arcs so interesting is that Docker essentially invented developer experience for containers, while Pivotal created a market around operator customers with Cloud Foundry, inspired by Heroku, for organisations to run their own PaaS platforms as internal service providers.</p>
  2531. <p>The key design point for Docker Enterprise 3.0 is improving the Kubernetes experience. It makes a lot of sense for Docker to take this approach. While Docker’s own Swarm orchestration platform offered a simpler experience that some early adopters still prefer, the Kubernetes market is substantially bigger. The opportunity for Docker is to bridge Docker desktop and Kubernetes experiences with a managed experience that makes sense to enterprise customers and buyers. Here’s my quote in the <a href="https://www.prnewswire.com/news-releases/new-docker-enterprise-3-0-expands-platform-to-drive-high-velocity-application-innovation-from-the-desktop-to-the-cloud-300840860.html">Docker press release</a>.</p>
  2532. <p style="padding-left: 40px;">“Increasing application development velocity and digital agility are a strategic imperative for companies in all sectors today. Developer experience is the killer app,” said RedMonk co-founder, James Governor. “Docker Kubernetes Service and Docker Application aim to package and simplify developer and operator experience, making modern container based workflows more accessible to developers and operators alike.”</p>
  2533. <p>So what about Pivotal Software? From the <a href="https://www.businesswire.com/news/home/20190716005345/en/Pivotal-Kubernetes-Easier-Developers-Operators">press release</a>:</p>
  2534. <p style="padding-left: 40px;">“Kubernetes is a runaway train right now, and organizations are struggling to keep deployments and management on track. They want to standardize processes, tools, and people, but face a fragmented, complex, and rapidly changing environment. Pivotal has a history of standardizing and documenting cloud-native tools and methods, and is now applying that experience to Kubernetes and associated technology—like Istio. It is finessing the industry shift to Kubernetes by taking management features from the Pivotal Application Service, and re-applying them.”</p>
  2535. <p>Kubernetes is extremely sophisticated, but with great sophistication comes great complexity. As the broader stack is becoming clearer, we’re also seeing some dependencies emerge (for example in the Istio stack, with its Mixer, Pilot, Galley and Citadel components), which is kind of ironic for a platform intended to run microservices. Some folks were surprised when a Google Kubernetes Engine (GKE) upgrade in Google Cloud Platform also upgraded Istio.</p>
  2536. <blockquote class="twitter-tweet">
  2537. <p dir="ltr" lang="en">I've upgraded GKE to 1.13 and boom 💥 Istio went from 1.0 to 1.1. Then policy and mixer went into crash loop backoff, galley responded with TLS handshake timeouts and same with the gateway. Like all distributed systems, restarting things in a **specific** order fixed it 😜</p>
  2538. <p>— Stefan Prodan (@stefanprodan) <a href="https://twitter.com/stefanprodan/status/1138506758635347968?ref_src=twsrc%5Etfw">June 11, 2019</a></p></blockquote>
  2539. <p/>
  2540. <p>A bit ironic given that Stefan is building Flagger, an automated tool for canarying and blue/green deployments, designed to prevent rollouts going awry by making an application or service runs in the environment before cutting over to it. But there you go.</p>
  2541. <p>When I spoke to the Pivotal Service Mesh (PAS) team recently about Istio, and the danger of breaking a customer app when upgrading Kubernetes, they said they’d made some design choices to mitigate that kind of risk, based on their experience running operations at scale with customers. The Operator Experience I mentioned before – you can’t break one thing when you upgrade another at a customer like Bank of America, Comcast or Orange. Pivotal has focused engineering on isolating functions such as telemetry and logging aggregation, with a more prescriptive view on exposing services, rather than exposing every low level API.</p>
  2542. <p>Shannon Coen, Product Manager at Pivotal Software, said that while customers asked for more access to lower level APIs, there was a trade off involved. Pivotal’s strength is in offering velocity, and a feedback loop, with an opinionated stack. The primary users of Pivotal Software are the Platform Engineering Team, providing services to an Application Development Team. It’s a different design point.</p>
  2543. <p>By acquiring Heptio, and with contributions from Pivotal, VMware is now the second main contributor to Kubernetes. Quite the commitment.</p>
  2544. <p><a href="http://redmonk.com/jgovernor/files/2019/08/K8s-contributors.jpg"><img alt="" class="aligncenter wp-image-5040" height="344" src="http://redmonk.com/jgovernor/files/2019/08/K8s-contributors-1024x543.jpg" width="649"/></a></p>
  2545. <p>As if we needed any further evidence that Kubernetes user experience is the industry focus now, <a href="https://d2iq.com/blog/mesosphere-is-now-d2iq">Mesosphere has just rebranded as D2IQ</a>, to underline the fact Mesos is no longer its core engineering focus. The D2 stands for Day Two, when an environment is running in production, rather than just being under development. Again, this reflects an operator focus.</p>
  2546. <p>As Kubernetes matures we’re going to see a great focus on operator roles. Industry history can tell us a lot here. VMware began as a platform for dev/test and QA, only latterly becoming the production environment of choice for enterprise workloads. I call this the VMware pattern, and it’s a common pattern for platform maturation. Specialisation and certification emerges in more mature markets as markets become commoditised.  A Kubernetes admin is not going to be the same person as someone that deploys an application on Kubernetes.</p>
  2547. <p>See for example Google Cloud Run, which is designed to abstract the back end. It’s a tool for developers to target and use.</p>
  2548. <p>VMware/Pivotal, IBM/RedHat, Google, are pulling their assets and go to market plans together for this market maturation. Microsoft has a Kubernetes play but is not packaging as effectively for Kubernetes consolidation as yet. That’s the anyone-but-Amazon club. Meanwhile Amazon Web Services is pragmatic and tactical about containers – customers want Kubernetes support and so they’ll provide it. Operations and Productions are generally where the money is, which is where the industry is coalescing now.</p>
  2549. <p>Disclosure: Google Cloud, IBM, Red Hat, Microsoft, Pivotal, and VMware are all clients, but this research was published independently of client relationships.</p>
  2550. <p>Related posts:</p>
  2551. <p><a href="https://redmonk.com/jgovernor/2018/10/26/pivotal-transactions-kubernetes-and-taking-an-axe-to-long-term-support/">Pivotal, Transactions and Taking an Axe to Long Term Support</a></p>
  2552. <p><a href="https://redmonk.com/jgovernor/2019/04/17/thomas-kurian-and-google-cloud-convenience-is-the-killer-app/">Thomas Kurian and Google Cloud: Convenience is the Killer App</a></p>
  2553. <p><a href="https://redmonk.com/jgovernor/2017/12/15/on-aws-and-pivotal-opinions-and-overlaps/">On AWS and Pivotal, opinions and overlaps</a></p>
  2554. <p><a href="https://redmonk.com/jgovernor/2018/05/25/kubernetes-won-so-now-what/">Kubernetes won – so now what?</a></p>
  2555. <p><a href="https://redmonk.com/sogrady/2018/11/07/vmware-heptio/">The Kubernetes World: VMware Acquires Heptio</a></p>
  2556. <p> </p>
  2557. <p> </p>
  2558. </div>
  2559.    </content>
  2560.    <updated>2019-08-07T11:03:57Z</updated>
  2561.    <category term="Uncategorized"/>
  2562.    <category scheme="http://rss.financialcontent.com/stocksymbol" term="GKE"/>
  2563.    <category scheme="http://rss.financialcontent.com/stocksymbol" term="PAS"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://redmonk.com/jgovernor/2019/08/07/kubernetes-matures-on-operator-experience-industry-updates-from-docker-pivotal-and-mesosphere/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=kubernetes-matures-on-operator-experience-industry-updates-from-docker-pivotal-and-mesosphere</feedburner:origLink>
  2564.    <author>
  2565.      <name>James Governor</name>
  2566.    </author>
  2567.    <source>
  2568.      <id>https://redmonk.com/jgovernor</id>
  2569.      <logo>http://creativecommons.org/images/public/somerights20.gif</logo>
  2570.      <link href="https://redmonk.com/jgovernor" rel="alternate" type="text/html"/>
  2571.      <link href="http://feeds.feedburner.com/JamesGovernorsMonkchips" rel="self" type="application/atom+xml"/>
  2572.      <link href="http://feeds.feedburner.com/JamesGovernorsMonkchips" rel="self" type="application/rss+xml"/>
  2573.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  2574.      <link href="http://creativecommons.org/licenses/by-nc-sa/2.0/" rel="license" type="text/html"/>
  2575.      <subtitle xml:lang="en-US">An industry analyst blog looking at software ecosystems and convergence</subtitle>
  2576.      <title xml:lang="en-US">James Governor's Monkchips</title>
  2577.      <updated>2019-08-07T19:52:14Z</updated>
  2578.    </source>
  2579.  </entry>
  2580.  
  2581.  <entry xml:lang="en-US">
  2582.    <id>https://www.symphonious.net/?p=2261</id>
  2583.    <link href="https://www.symphonious.net/2019/08/07/adding-a-dco-signed-off-by-to-every-commit-in-a-git-repo/" rel="alternate" type="text/html"/>
  2584.    <title xml:lang="en-US">Adding a DCO Signed-off-by to every commit in a git repo</title>
  2585.    <summary xml:lang="en-US">If you’re switching from a CLA model to a DCO model you may want to add a Signed-off-by line to every existing commit so that you can run automated DCO checks over the entire repository.  Doing this obviously assumes that your CLA sets things up so that you are actually in a position to provide […]</summary>
  2586.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>If you’re switching from a CLA model to a DCO model you may want to add a Signed-off-by line to every existing commit so that you can run automated DCO checks over the entire repository.  Doing this obviously assumes that your CLA sets things up so that you are actually in a position to provide a DCO sign-off.</p><p>Once you’re happy with all the legalities, the change is a single command using git filter-branch:</p><pre>git filter-branch --msg-filter "cat - &amp;&amp; echo &amp;&amp; echo 'Signed-off-by: Some Person &lt;[email protected]&gt;'"</pre><img alt="" height="1" src="http://feeds.feedburner.com/~r/symphonious/~4/wQVOaBTlYjs" width="1"/></div>
  2587.    </content>
  2588.    <updated>2019-08-07T02:56:52Z</updated>
  2589.    <published>2019-08-07T02:56:52Z</published>
  2590.    <category scheme="https://www.symphonious.net" term="Code and Geek Stuff"/>
  2591.    <category scheme="https://www.symphonious.net" term="Note To Self"/>
  2592.    <author>
  2593.      <name>Adrian Sutton</name>
  2594.      <uri>http://www.symphonious.net</uri>
  2595.    </author>
  2596.    <source>
  2597.      <id>https://www.symphonious.net/feed/atom/</id>
  2598.      <icon>https://www.symphonious.net/wp-content/uploads/2018/06/cropped-Music-32x32.png</icon>
  2599.      <link href="https://www.symphonious.net" rel="alternate" type="text/html"/>
  2600.      <link href="http://feeds.feedburner.com/symphonious" rel="self" type="application/atom+xml"/>
  2601.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  2602.      <subtitle xml:lang="en-US">Living in a state of accord.</subtitle>
  2603.      <title xml:lang="en-US">Symphonious</title>
  2604.      <updated>2019-08-13T22:13:47Z</updated>
  2605.    </source>
  2606.  </entry>
  2607.  
  2608.  <entry xml:lang="en-US">
  2609.    <id>https://webkit.org/?p=9497</id>
  2610.    <link href="https://webkit.org/blog/9497/release-notes-for-safari-technology-preview-89/" rel="alternate" type="text/html"/>
  2611.    <title xml:lang="en-US">Release Notes for Safari Technology Preview 89</title>
  2612.    <summary xml:lang="en-US">Safari Technology Preview Release 89 is now available for download for macOS Mojave and the macOS Catalina beta.</summary>
  2613.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="https://webkit.org/blog/6017/introducing-safari-technology-preview/">Safari Technology Preview</a> Release 89 is now <a href="https://webkit.org/downloads/">available for download</a> for macOS Mojave and the macOS Catalina beta. If you already have Safari Technology Preview installed, you can update in the Software Update pane of System Preferences on macOS.</p>
  2614. <p>This release covers WebKit revisions <a href="https://trac.webkit.org/log?stop_rev=247433&amp;&amp;rev=248024&amp;limit=999">247433-248024</a>.</p>
  2615. <h3>JavaScript</h3>
  2616. <ul>
  2617. <li>Implemented nullish coalescing with the <code>??</code> operator for ESNext (<a href="https://trac.webkit.org/changeset/247819/webkit/">r247819</a>)</li>
  2618. </ul>
  2619. <h3>Web API</h3>
  2620. <ul>
  2621. <li>Added <code>referrerpolicy</code> attribute support for <code>&lt;script&gt;</code> elements (<a href="https://trac.webkit.org/changeset/247509/webkit/">r247509</a>)</li>
  2622. <li>Changed <code>window.openDatabase</code> to be overridable (<a href="https://trac.webkit.org/changeset/247434/webkit/">r247434</a>)</li>
  2623. <li>Fixed an IndexedDB error where the starting version change transaction may be neglected (<a href="https://trac.webkit.org/changeset/247649/webkit/">r247649</a>)</li>
  2624. <li>Fixed the ability to unbold selected text when the system font is used (<a href="https://trac.webkit.org/changeset/247439/webkit/">r247439</a>)</li>
  2625. <li>Made storing cross-origin top-level prefetches in HTTP cache optional (<a href="https://trac.webkit.org/changeset/247860/webkit/">r247860</a>)</li>
  2626. <li>Moving right by word boundary right before an object element followed by a <code>&lt;br&gt;</code> element hangs (<a href="https://trac.webkit.org/changeset/247881/webkit/">r247881</a>)</li>
  2627. <li>Removed support for <code>beforeload</code> on <code>link=prefetch</code> (<a href="https://trac.webkit.org/changeset/247481/webkit/">r247481</a>)</li>
  2628. </ul>
  2629. <h3>Compatibility</h3>
  2630. <ul>
  2631. <li>Fixed Daring Fireball long press highlights that were unnecessarily inflated due to false illegibility (<a href="https://trac.webkit.org/changeset/247792/webkit/">r247792</a>)</li>
  2632. <li>Fixed contextual menu actions for YouTube videos (<a href="https://trac.webkit.org/changeset/247901/webkit/">r247901</a>)</li>
  2633. </ul>
  2634. <h3>Accessibility</h3>
  2635. <ul>
  2636. <li>Exposed the <code>aria-label</code> attribute for <code>&lt;video&gt;</code> elements (<a href="https://trac.webkit.org/changeset/247891/webkit/">r247891</a>)</li>
  2637. </ul>
  2638. <h3>Media</h3>
  2639. <ul>
  2640. <li>Enabled a WebRTC debug mode without encryption (<a href="https://trac.webkit.org/changeset/247438/webkit/">r247438</a>)</li>
  2641. <li>Fixed support for FLAC-in-MP4 (<a href="https://trac.webkit.org/changeset/247934/webkit/">r247934</a>)</li>
  2642. </ul>
  2643. <h3>Web Inspector</h3>
  2644. <ul>
  2645. <li>Added support for <code>console.screenshot</code> with detached (not in main DOM tree) <code>&lt;img&gt;</code> and <code>&lt;picture&gt;</code> elements (<a href="https://trac.webkit.org/changeset/247814/webkit/">r247814</a>)</li>
  2646. <li>Added support for <code>console.screenshot</code> with <code>ImageData</code> and <code>ImageBitmap</code> (<a href="https://trac.webkit.org/changeset/247812/webkit/">r247812</a>)</li>
  2647. <li>Added a “Show Grid” navigation item for the Images collection in the Resources tab (<a href="https://trac.webkit.org/changeset/248004/webkit/">r248004</a>)</li>
  2648. <li>Added an indicator/separator around items in the Images collection in the Resources tab (<a href="https://trac.webkit.org/changeset/248019/webkit/">r248019</a>)</li>
  2649. <li>Add special case for <code>about:blank</code> resources to show “Resource has no content” message (<a href="https://trac.webkit.org/changeset/247747/webkit/">r247747</a>)</li>
  2650. <li>Fixed display of <code>application/xml</code> content for XHR requests (<a href="https://trac.webkit.org/changeset/247533/webkit/">r247533</a>)</li>
  2651. <li>Fixed issues toggling multiple breakpoints when they’re collapsed into one line (<a href="https://trac.webkit.org/changeset/247639/webkit/">r247639</a>)</li>
  2652. <li>Fixed Command-X (⌘X) to cut selected properties in the Styles sidebar (<a href="https://trac.webkit.org/changeset/247760/webkit/">r247760</a>)</li>
  2653. <li>Made the Changes panel in the Elements Tab render with LTR text direction (<a href="https://trac.webkit.org/changeset/247492/webkit/">r247492</a>)</li>
  2654. </ul>
  2655. <h3>WebGPU</h3>
  2656. <ul>
  2657. <li>Implemented errors for GPURenderPipeline creation (<a href="https://trac.webkit.org/changeset/247764/webkit/">r247764</a>)</li>
  2658. <li>Added descriptive error messages in WHLSL (<a href="https://trac.webkit.org/changeset/247834/webkit/">r247834</a>)</li>
  2659. <li>Changed checker to <code>setError()</code> when a property access node can’t commit its base type in WHLSL (<a href="https://trac.webkit.org/changeset/247676/webkit/">r247676</a>)</li>
  2660. <li>Changed to return the zero-value enum in the enum-from-integer constructor when the integer is not a valid enum value in WHLSL (<a href="https://trac.webkit.org/changeset/247675/webkit/">r247675</a>)</li>
  2661. <li>Made enums work in WHLSL (<a href="https://trac.webkit.org/changeset/247666/webkit/">r247666</a>)</li>
  2662. <li>Updated matrix memory layout to match HLSL by laying out columns linearly in WHLSL (<a href="https://trac.webkit.org/changeset/247468/webkit/">r247468</a>)</li>
  2663. </ul></div>
  2664.    </content>
  2665.    <updated>2019-08-07T00:28:45Z</updated>
  2666.    <published>2019-08-07T17:00:11Z</published>
  2667.    <category scheme="https://webkit.org" term="Safari Technology Preview"/>
  2668.    <author>
  2669.      <name/>
  2670.    </author>
  2671.    <source>
  2672.      <id>https://webkit.org/feed/atom/</id>
  2673.      <link href="https://webkit.org" rel="alternate" type="text/html"/>
  2674.      <link href="https://webkit.org/blog/feed/atom/" rel="self" type="application/atom+xml"/>
  2675.      <subtitle xml:lang="en-US">Open Source Web Browser Engine</subtitle>
  2676.      <title xml:lang="en-US">Blog – WebKit</title>
  2677.      <updated>2019-08-15T20:14:35Z</updated>
  2678.    </source>
  2679.  </entry>
  2680.  
  2681.  <entry>
  2682.    <id>https://blogs.apache.org/foundation/entry/success-at-apache-the-path</id>
  2683.    <link href="https://blogs.apache.org/foundation/entry/success-at-apache-the-path" rel="alternate" type="text/html"/>
  2684.    <title>"Success at Apache: The Path To Berlin"</title>
  2685.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><div><strong><em>by Isabel Drost-Fromm</em></strong></div>
  2686.  <div><br/></div>
  2687.  
  2688. "A decade ago" - according to common wisdom for software engineering that's the equivalent of the stone age: The only constant is change - and rapid change at that.
  2689.  <p> </p>
  2690. This blog post is going to tell an entirely different story: One about what persistence, patience and continuous engagement can accomplish. One about what can happen when people are working together.
  2691.  <p> </p>
  2692.  
  2693. It was over a decade ago, in 2008, when I met with people interested in the then-hyped Apache Hadoop project to create a quarterly meetup on everything data analytics, text mining, scalable data storage. That was when the (Apache) Hadoop Get Together
  2694. Berlin took place at newthinking store - a co-working space and event location before that format itself was turned into a business model <a href="http://blog.isabel-drost.de/posts/scaling-user-groups336.html">http://blog.isabel-drost.de/posts/scaling-user-groups336.html</a>.
  2695. <p> </p>
  2696.  
  2697. A year later it was clear that an ApacheCon EU was unlikely to happen in Europe. When Simon Willnauer, Jan Lehnardt and myself approached The Apache Software Foundation about holding the event in Berlin - the kind people at Apache who did have experience with ApacheCon successfully stopped us: Given the baggage around the event, the trademark implication, the expectation that all sorts of different people had as well as the pure <a href="http://blog.isabel-drost.de/posts/how-hard-can-it-be-organising-a-conference.html">http://blog.isabel-drost.de/posts/how-hard-can-it-be-organising-a-conference.html</a> logistics of
  2698. creating an event that's bigger than 100 people, that was a safe and likely wise decision.
  2699. <p> </p>
  2700. What they didn't achieve though was to stop us from running some event the following year: We at least wanted to give friends from the Big Data and search communities an excuse to make their employers pay for a trip to Berlin in summer: <a href="http://blog.isabel-drost.de/posts/my-highly-subjective-berlin-buzzwords-recap290.html">http://blog.isabel-drost.de/posts/my-highly-subjective-berlin-buzzwords-recap290.html</a>. This was possible due to some lucky conditions we found ourselves in:
  2701. Knowing  conference organisers who were willing to share their know-how such as legal issues and boundaries with us
  2702. Finding an event company (newthinking.de) that was supporting the idea.
  2703. <p> </p>  Being employed by a company <a href="https://www.neofonie.de/">https://www.neofonie.de/</a> that saw value in sponsoring the event by allowing me to do so during my  working hours.
  2704. <p> </p>
  2705. While successful, part of the ASF community was still missing though. Fast forward several years to 2017, a new conference concept was born. Under the name of FOSS Backstage, we focus on the one topic that every project at Apache has to deal with: Governance, legal, security, economics <a href="https://blogs.apache.org/foundation/entry/success-at-apache-cookie-monster">https://blogs.apache.org/foundation/entry/success-at-apache-cookie-monster</a>
  2706. Issues that are not an Apache exclusive issue, but true for everyone - individuals as well as legal entities - involved in open source projects.
  2707. <p> </p>
  2708. The only caveat: We had intentionally left all technical content out of scope for FOSS Backstage. For the data analytics crowd the event was conveniently co-located with Berlin Buzzwords. For the remaining content, Sharan Foga kindly volunteered for coordinating to run an Apache Roadshow alongside FOSS Backstage together with newthinking for two days after Berlin Buzzwords and in parallel to FOSS Backstage. With a name different than ApacheCon this left quite some room for experimenting beyond the traditional ApacheCon format.
  2709. <p>
  2710. Little over a year after that ApacheCon finally is on its way to the city of Berlin: With https://twitter.com/plainschwarz as event organisers, in collaboration with the Apache Software Foundation - with Myrle Krantz as event chair to coordinate between the ASF and the local event team.
  2711. </p><p>
  2712. In retrospect, the series of events was an interesting journey. There's a couple of lessons I've learned that carry over to open source software development - but also a few that are distinctly different.
  2713. </p><p>
  2714. 1.Patches welcome - turn people that come with feature requests into active contributors
  2715. </p><p>
  2716. Instead of accepting feature requests from people, it helps to pull them in to submit their own patches: Early on there were requests for a barcamp, for a lightning talk session, for trainings. My response back then: Submit the idea through the CfP form, find someone to run it and we'll run it through the regular submission process adding it to the schedule if it fits.  
  2717. </p><p>
  2718. For the trainings we went for a slightly different approach: Instead of directly offering them ourselves we reached out to established training providers suggesting to run with a co-location/ co-promotion approach.
  2719. </p><p>
  2720. For those that asked for free tickets we would turn them into helping hands - either on site, during setup or (in the first year) as local guides taking groups of up to twenty people out for dinner in a restaurant close by that they had selected.
  2721. </p><p>
  2722. For those that asked for more content on some specific topic we offered the  option of organising a deep dive satellite event on Wednesday after the conference at one of the many companies willing to host these in Berlin.
  2723. </p><p>
  2724. In general we left a lot of room and freedom to those who wanted to get involved and add content to the event that they found missing.
  2725. </p><p>
  2726.  
  2727.  
  2728. </p><p/>
  2729. 2. Decisions are made by those doing the work
  2730. <p>
  2731. While feedback is important, there is a limit to what can feasibly be realised for any given conference budget. While we value feedback from anyone involved, the final decisions need to be taken by those actively contributing time to the event. As a result, that also means that not all feedback can always be taken into account - at least not right away, maybe at a later stage or in a different event, the consecutive year or just taken as an impulse to come up with new fresh ideas.
  2732. </p><p>
  2733. 3. "It's done when it's done" is not an option
  2734. </p><p>
  2735. Conferences are slightly different from open source releases in that there are hard deadlines - in combination with a fixed budget coming in from attendees and sponsors and some hard features that cannot be postponed to the next release (unless you're organising a remote only conference, running without a venue is pretty much impossible.) That circumstance makes organisation slightly more prone to conflict than your average open source project: There's no cheap way to go down both paths and only at the very last minute decide which is better - or even offering both options.
  2736. </p><p>
  2737. 4. Balancing public and private communication
  2738. </p><p>
  2739. At Apache we value public communication: Often having discussions in the open invites others to participate and shows where contributions are needed. When it comes to budget, ticket pricing, communication with sponsors, contracts including specific prices for venues this approach becomes a whole lot harder. Even though it helps to provide a dedicated mailing list for program committee members as well as interested attendees to get in touch.
  2740. </p><p>
  2741. It also helps to make some of the planning background public - either while discussions are ongoing, or at least after a conclusion has been reached: http://blog.isabel-drost.de/posts/berlin-buzzwords-scheduling-behind-the-scenes118.html (caveat: the algorithm has changed substantially since this was published, but the article did help answer a lot of questions.)
  2742. </p><p>
  2743. One downside to this mode of operation is that people who potentially could provide valuable insight or help out have no idea of what is going on. Another downside is that for the outside world it becomes invisible how large a team it takes to make the event successful. As a tiny fix for that we always tried to make the team involved publicly known.
  2744. </p><p>
  2745. 5. Bringing people together
  2746. </p><p>
  2747. At Apache we have a tradition to work asynchronously - on archived, searchable, referenceable mailing lists. Without that way of working we wouldn't be able to build bridges across timezones, geographies, cultures and organisations. It wouldn't be possible to collaborate for people with wildly different time schedules. Despite all this hearing people speak when reading their texts makes it easier to understand their tone correctly. Despite all this there are topics that are best shared face to face only for deniability reasons. Despite all this, meeting someone in person who so far has been communicating only remotely with you can be a ton of fun. I hope that you will join that fun in October in Berlin: Looking forward to seeing you there!
  2748.  </p><p> </p>
  2749.  
  2750. Join us! ApacheCon Europe/Berlin 22-24 October 2019 <a href="https://aceu19.apachecon.com/">https://aceu19.apachecon.com/</a>
  2751.  
  2752.  <div><br/></div>
  2753.  <p> </p>
  2754.  <div><em>Isabel Drost-Fromm is a former board member of The Apache Software Foundation, co-founder of Apache Mahout and mentored several incubating projects. Interested in all things search and text mining with a thorough background in open source project management and open collaboration she is working Europace AG as Open Source Strategist. True to the nature of people living in Berlin she loves having friends fly in for a brief visit –- as a result she co-founded and is still one the creative heads behind both, Berlin Buzzwords, a tech conference on all things search, scale and storage as well as FOSS Backstage, a conference on all things Free and Open Source behind the scenes and how it interrelates with business and InnerSource. She is a member of the inaugural Open Source and Intellectual Property Advisory Group of the United Nations Technology Labs (UNTIL).</em></div>
  2755.  <div>
  2756.    <p style="font-style: italic;"><span style="font-style: normal;">= = =</span></p>
  2757.  </div>
  2758.  <p>"Success at Apache" is a monthly blog series that focuses on the processes behind why the ASF "just works" <a href="https://blogs.apache.org/foundation/category/SuccessAtApache">https://blogs.apache.org/foundation/category/SuccessAtApache</a> </p><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/><p/></div>
  2759.    </content>
  2760.    <updated>2019-08-06T13:18:59Z</updated>
  2761.    <published>2019-08-06T13:18:59Z</published>
  2762.    <category label="SuccessAtApache" term="SuccessAtApache"/>
  2763.    <category scheme="http://roller.apache.org/ns/tags/" term="apache"/>
  2764.    <category scheme="http://roller.apache.org/ns/tags/" term="apacheway"/>
  2765.    <category scheme="http://roller.apache.org/ns/tags/" term="berlin"/>
  2766.    <category scheme="http://roller.apache.org/ns/tags/" term="communities"/>
  2767.    <category scheme="http://roller.apache.org/ns/tags/" term="community"/>
  2768.    <category scheme="http://roller.apache.org/ns/tags/" term="drost"/>
  2769.    <category scheme="http://roller.apache.org/ns/tags/" term="fromm"/>
  2770.    <category scheme="http://roller.apache.org/ns/tags/" term="isabel"/>
  2771.    <category scheme="http://roller.apache.org/ns/tags/" term="just"/>
  2772.    <category scheme="http://roller.apache.org/ns/tags/" term="people"/>
  2773.    <category scheme="http://roller.apache.org/ns/tags/" term="processes"/>
  2774.    <category scheme="http://roller.apache.org/ns/tags/" term="success"/>
  2775.    <category scheme="http://roller.apache.org/ns/tags/" term="works"/>
  2776.    <author>
  2777.      <name>Sally</name>
  2778.    </author>
  2779.    <source>
  2780.      <id>https://blogs.apache.org/foundation/feed/entries/atom</id>
  2781.      <link href="https://blogs.apache.org/foundation/feed/entries/atom" rel="self" type="application/atom+xml"/>
  2782.      <link href="https://blogs.apache.org/foundation/" rel="alternate" type="text/html"/>
  2783.      <subtitle>The voice of the ASF</subtitle>
  2784.      <title>The Apache Software Foundation Blog</title>
  2785.      <updated>2019-08-16T17:24:06Z</updated>
  2786.    </source>
  2787.  </entry>
  2788.  
  2789.  <entry>
  2790.    <id>tag:www.crummy.com,2019-08-04:20:41:45-nycb</id>
  2791.    <link href="http://www.crummy.com/2019/08/04/0" rel="alternate" type="text/html"/>
  2792.    <title>July Film Roundup</title>
  2793.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul>
  2794. <li><i>Long Day's Journey Into Night</i> (2018): You know I like an arthouse film now and again. I'm glad they tried something different, but I wasn't really feeling this one. I did like the 3D section, but it probably doesn't make sense unless you sit through the first half. The second half felt like an escape room, which is pretty cool, but the first half was the random, disconnected clues written on scraps of paper which you need to assemble to solve the escape room.
  2795.  
  2796. </li><li><i>Bathtubs Over Broadway</i> (2018): Recommended by good ol' Pat Rafferty, this documentary is both a survey of a forgotten art form, and the story of a snarky person who discovers sincerity. I was hoping for a lot more in-depth on the survey, but I liked Steve Young's term of "comedy poisoning" for diagnosing his own snark. Really fun overall.
  2797.  
  2798. </li><li><i>Any Number Can Win</i> (1963): A.k.a. <i>Melody en sous-sol</i>, a.k.a. <i>The Caper That Sank</i>, a.k.a. <i>Never Steal Anything Wet</i> (just kidding). This had really fun heist planning and aftermath, but the heist itself, a dialogue-light bit clearly inspired by <i>Rififi</i>, was a little dull, and the romance subplot was a snoozefest. I much prefered the noir opening, where the aging heistmaster gets out of prison only to discover that Modernism has consumed the world and Jacques Tati is filming <i>Playtime</i> in his home town. Had a real <i>Reginald Perrin</i> vibe.
  2799.  
  2800. </li><li><i>The Burglars</i> (1971): A.k.a. <i>Le Casse</i>. This movie starts with a huge nerd-out as the titular burglars invade a beautiful 1960s mansion and crack the safe with a specialized piece of equipment that, e.g. uses Scantron-like cards to program a key-cutting machine. Includes long sequences where Jean-Paul Belmondo is looking stuff up in the service manual, a manual which is either the most detailed prop in the entire movie, written in good manual English, or... this is a real piece of equipment with a real service manual? I guess they gotta make safe keys somehow. I would love to know more about this machine!
  2801.  
  2802. <p>Also, as long as I'm focusing on details most people don't care about, in the granary office at the end of this movie there's a hatrack which strongly resembles what Duchamp's <i>Hat Rack</i> would look like if it were actually a readymade.
  2803.  
  2804. </p><p>Often I focus on these little things because the rest of the movie was boring, but although the heist that opens <i>The Burglars</i> is the best part of the movie, there's a ton of good stuff here. There's a cool car chase, good stunts, excellent cat-and-mouse between Belmondo and Omar Sharif. The fashions and design are swinging '60s throughout. Bad parts: the ending is pretty weak, there's a doesthegoldfishdie.com moment near the beginning, and an ugly scene where Belmondo's character slaps a woman around and it's played for laughs—unnecessary and really hard to stomach.
  2805.  
  2806. </p></li><li><i>The Bishop's Wife</i> (1947): It's no <i>Wings of Desire</i>, but it covers some of the same ground. The minor characters are fun. Cary Grant's character is the ultimate service top, and it's wonderful to watch him be oblivious to society's rules about who does things for whom. One of these gags is reprised twice in a way that reminded me of Billy Wilder. IMDB says uncredited writing credit for... Billy Wilder!  Trivia says he was just called in to redo a couple scenes, though. You can tell he didn't have full rein over the screenplay because the characters fulfill their dreams.
  2807.  
  2808.  
  2809. </li></ul></div>
  2810.    </content>
  2811.    <updated>2019-08-05T00:46:34Z</updated>
  2812.    <published>2019-08-05T00:41:45Z</published>
  2813.    <source>
  2814.      <id>tag:www.crummy.com,1997-12-20:12:00:00-NewsBruiser-nycb</id>
  2815.      <author>
  2816.        <name>Leonard Richardson</name>
  2817.        <email>[email protected]</email>
  2818.      </author>
  2819.      <link href="https://www.crummy.com/" rel="alternate" type="text/html"/>
  2820.      <link href="http://www.crummy.com/nb/nb.cgi/syndicate/nycb?version=Atom" rel="self" type="application/atom+xml"/>
  2821.      <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Licensed under a <a href="http://creativecommons.org/licenses/by-sa/2.0/">Creative Commons License</a></div>
  2822.      </rights>
  2823.      <subtitle>Your chicken, your egg, your problem</subtitle>
  2824.      <title>News You Can Bruise</title>
  2825.      <updated>2019-08-10T11:35:51Z</updated>
  2826.    </source>
  2827.  </entry>
  2828.  
  2829.  <entry xml:lang="en-US">
  2830.    <id>https://programmingzen.com/?p=2097</id>
  2831.    <link href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/g1oLiCUpb6w/" rel="alternate" type="text/html"/>
  2832.    <link href="https://programmingzen.com/exploring-mathematics-with-matplotlib-and-python/#comments" rel="replies" type="text/html"/>
  2833.    <link href="https://programmingzen.com/exploring-mathematics-with-matplotlib-and-python/feed/atom/" rel="replies" type="application/atom+xml"/>
  2834.    <title xml:lang="en-US">Exploring Mathematics with Matplotlib and Python</title>
  2835.    <summary type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>We, humans, are visual creatures. We evolved reasonable abstraction capabilities but we shine when we can visualize the problem at hand. This is why I’m a big fan of Data Visualization as a discipline. Data has the answers. Visualization helps us better understand and interpret them. (For a great introduction to the subject, consider taking […]</p>
  2836. <p>The post <a href="https://programmingzen.com/exploring-mathematics-with-matplotlib-and-python/" rel="nofollow">Exploring Mathematics with Matplotlib and Python</a> appeared first on <a href="https://programmingzen.com" rel="nofollow">Programming Zen</a>.</p></div>
  2837.    </summary>
  2838.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>We, humans, are visual creatures. We evolved reasonable abstraction capabilities but we shine when we can visualize the problem at hand.</p>
  2839.  
  2840.  
  2841.  
  2842. <p>This is why I’m a big fan of Data Visualization as a discipline. Data has the answers. Visualization helps us better understand and interpret them.</p>
  2843.  
  2844.  
  2845.  
  2846. <p>(For a great introduction to the subject, consider taking the <a href="https://www.coursera.org/learn/python-for-data-visualization" rel="noreferrer noopener" target="_blank">Data Visualization course</a> by my colleague Alex Aklson, Ph.D.) </p>
  2847.  
  2848.  
  2849.  
  2850. <p>Perhaps, above all, I like the exploratory nature of visualizing data. We must be mindful of <a href="https://en.wikipedia.org/wiki/Apophenia" rel="noreferrer noopener" target="_blank">clustering illusions</a> and type I errors, but it’s fun to explore unbridled, feeding our intuition and the part of our brain that seeks patterns.</p>
  2851.  
  2852.  
  2853.  
  2854. <p>Let’s consider an example. Take a look at this list of numbers.</p>
  2855.  
  2856.  
  2857.  
  2858. <p class="has-background has-pale-cyan-blue-background-color">[21, 71, 41, 35, 41, 83, 48, 62, 26, 40, 46, 90, 50, 23, 11, 86, 95, 4, 50, 25, 93, 19, 67, 10, 27, 38, 78, 6, 71, 15, 11, 13, 10, 89, 3, 52, 98, 65, 97, 17, 64, 25, 33, 78, 28, 25, 85, 68, 2, 72, 63, 50, 9, 2, 52, 61, 62, 73, 89, 77, 10, 95, 5, 85, 46, 89, 70, 47, 20, 51, 6, 4, 51, 44, 79, 24, 63, 55, 99, 92, 29, 63, 16, 78, 15, 6, 91, 85, 8, 71, 23, 63, 67, 28, 44, 86, 83, 98, 57, 91]</p>
  2859.  
  2860.  
  2861.  
  2862. <p>Notice anything interesting?</p>
  2863.  
  2864.  
  2865.  
  2866. <p>If you look at it hard enough, chances are your brain will come up with something. Don’t feel bad if it didn’t as this is just a list of 100 random numbers (technically, pseudo-random numbers).</p>
  2867.  
  2868.  
  2869.  
  2870. <p>If we chart these points, we get a representation of this randomness.</p>
  2871.  
  2872.  
  2873.  
  2874. <div class="wp-block-image"><figure class="aligncenter"><img alt="100 random draws." class="wp-image-2104" src="https://i2.wp.com/programmingzen.com/wp-content/uploads/2019/08/random-100.png?fit=1024%2C704&amp;ssl=1"/></figure></div>
  2875.  
  2876.  
  2877.  
  2878. <p>There is no pattern to be had. Charting these scattered points is not entirely useless, however.</p>
  2879.  
  2880.  
  2881.  
  2882. <p>Knowing full well that my brain will try to find a pattern, I let it play and noticed something. Nothing too surprising, but some dots appear to line up. This can easily be seen above y = 40, for example.</p>
  2883.  
  2884.  
  2885.  
  2886. <p>Well, big deal, some numbers are randomly repeated. Yes, but… now, I’m curious. How often are numbers repeated?</p>
  2887.  
  2888.  
  2889.  
  2890. <p>Let’s chart once more, this time using the frequency of occurrence on the y-axis.</p>
  2891.  
  2892.  
  2893.  
  2894. <div class="wp-block-image"><figure class="aligncenter"><img alt="Frequency of random occurrences with N=100." class="wp-image-2105" src="https://i2.wp.com/programmingzen.com/wp-content/uploads/2019/08/100.png?fit=1024%2C704&amp;ssl=1"/></figure></div>
  2895.  
  2896.  
  2897.  
  2898. <p>This looks a little less random, doesn’t it? With this set of 100 draws, the range appears to be between 0 (the number wasn’t drawn) and 4 repetitions (in the case of number 63).</p>
  2899.  
  2900.  
  2901.  
  2902. <p>(This conjured some unrelated thoughts about the <a href="https://en.wikipedia.org/wiki/Survivorship_bias" rel="noreferrer noopener" target="_blank">survivorship bias</a>. I humorously imagined the top dots on the chart selling books to the lower dots about how to succeed. But I digress.)</p>
  2903.  
  2904.  
  2905.  
  2906. <p>It’s also visually obvious that there are fewer and fewer numbers as the frequency of repetition goes up. This makes sense. The odds of a number being present at least once are fairly high:</p>
  2907.  
  2908.  
  2909.  
  2910. <p style="text-align: center;"><img alt="\displaystyle P_{1} = 1 - (\frac{99}{100})^{100} \approx 0.6339 \approx 63\%" class="latex" src="https://s0.wp.com/latex.php?latex=%5Cdisplaystyle+P_%7B1%7D+%3D+1+-+%28%5Cfrac%7B99%7D%7B100%7D%29%5E%7B100%7D+%5Capprox+0.6339+%5Capprox+63%5C%25&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\displaystyle P_{1} = 1 - (\frac{99}{100})^{100} \approx 0.6339 \approx 63\%"/></p>
  2911.  
  2912.  
  2913.  
  2914. <p>While the odds of it being repeated 100 times are virtually zero:</p>
  2915.  
  2916.  
  2917.  
  2918. <p style="text-align: center;"><img alt="\displaystyle P_{100} = \frac{1}{100^{100}} = 1\times{10}^{-200} \approx 0\%" class="latex" src="https://s0.wp.com/latex.php?latex=%5Cdisplaystyle+P_%7B100%7D+%3D+%5Cfrac%7B1%7D%7B100%5E%7B100%7D%7D+%3D+1%5Ctimes%7B10%7D%5E%7B-200%7D+%5Capprox+0%5C%25&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\displaystyle P_{100} = \frac{1}{100^{100}} = 1\times{10}^{-200} \approx 0\%"/></p>
  2919.  
  2920.  
  2921.  
  2922. <p>Every other frequency falls in between these two bounds.</p>
  2923.  
  2924.  
  2925.  
  2926. <p>Okay, cool, with 100 draws we seem to have quite a few numbers repeating 3 times, with one number even repeating 4 times.</p>
  2927.  
  2928.  
  2929.  
  2930. <h2>A hypothesis emerges</h2>
  2931.  
  2932.  
  2933.  
  2934. <p>We can hypothesize that as the number of draws increases, we might see a larger number of maximum repetitions as well. With 100, we comfortably hit 3 repetitions with several numbers, and we even had a 4. What happens with 1000, 10,000, 100,000 draws?</p>
  2935.  
  2936.  
  2937.  
  2938. <p>It feels like the odds of a number appearing even more frequently by chance should go up.</p>
  2939.  
  2940.  
  2941.  
  2942. <p>In other words, the maximum number of repetitions, as a function of the number of draws, should diverge. Very slowly, mind you, but it should diverge.</p>
  2943.  
  2944.  
  2945.  
  2946. <p>Hmm, slowly diverge. Logarithmically, perhaps? Just a hunch, but let’s throw caution to the wind, and hazard an even stronger hypothesis.</p>
  2947.  
  2948.  
  2949.  
  2950. <p>With n=100, observation leads us to a fairly safe guess. Namely, it’s very likely that at least one number will repeat at least 3 times. 3, in our case, happens to be <img alt="\log{n} + 1" class="latex" src="https://s0.wp.com/latex.php?latex=%5Clog%7Bn%7D+%2B+1&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\log{n} + 1"/>.</p>
  2951.  
  2952.  
  2953.  
  2954. <p>I bet the odds aren’t too bad for <img alt="\log{n} + 2" class="latex" src="https://s0.wp.com/latex.php?latex=%5Clog%7Bn%7D+%2B+2&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\log{n} + 2"/> either, but <img alt="\log{n} + 1" class="latex" src="https://s0.wp.com/latex.php?latex=%5Clog%7Bn%7D+%2B+1&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\log{n} + 1"/> seems extremely likely.</p>
  2955.  
  2956.  
  2957.  
  2958. <p>So our guess/hypothesis becomes:</p>
  2959.  
  2960.  
  2961.  
  2962. <p class="has-background has-pale-cyan-blue-background-color">Given n integers randomly selected from 1 to n, there is a high probability that at least one number will be repeated at least log n + 1 times.</p>
  2963.  
  2964.  
  2965.  
  2966. <p>This would imply:</p>
  2967.  
  2968.  
  2969.  
  2970. <table class="wp-block-table aligncenter has-fixed-layout"><tbody><tr><td>n</td><td>Repetitions</td></tr><tr><td>1000</td><td>4</td></tr><tr><td>10,000</td><td>5</td></tr><tr><td>100,000</td><td>6</td></tr></tbody></table>
  2971.  
  2972.  
  2973.  
  2974. <p>Let’s fire up good ol’ Python and see where we land.</p>
  2975.  
  2976.  
  2977.  
  2978. <p>When I ran the code (shown at the end) for n = 1000 I got the following chart.</p>
  2979.  
  2980.  
  2981.  
  2982. <div class="wp-block-image"><figure class="aligncenter"><img alt="Frequency of random occurrences with N=1000. " class="wp-image-2122" src="https://i1.wp.com/programmingzen.com/wp-content/uploads/2019/08/1000.png?fit=1024%2C704&amp;ssl=1"/></figure></div>
  2983.  
  2984.  
  2985.  
  2986. <p>Look at all those points on y = 4. Even <img alt="\log{n} + 2 = 5" class="latex" src="https://s0.wp.com/latex.php?latex=%5Clog%7Bn%7D+%2B+2+%3D+5&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\log{n} + 2 = 5"/> is holding up. Methinks, we are onto something.</p>
  2987.  
  2988.  
  2989.  
  2990. <p>Let’s try n = 10,000.</p>
  2991.  
  2992.  
  2993.  
  2994. <div class="wp-block-image"><figure class="aligncenter"><img alt="Frequency of random occurrences with N=10,000." class="wp-image-2123" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2019/08/10000.png?fit=1024%2C704&amp;ssl=1"/></figure></div>
  2995.  
  2996.  
  2997.  
  2998. <p>Yup. We expected some numbers to be repeated 5 times, and we got quite a few of those.</p>
  2999.  
  3000.  
  3001.  
  3002. <p>Okay, time to bring out the big guns. n=100,000.</p>
  3003.  
  3004.  
  3005.  
  3006. <div class="wp-block-image"><figure class="aligncenter"><img alt="Frequency of random occurrences with N=100,000." class="wp-image-2124" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2019/08/100_000.png?fit=1024%2C704&amp;ssl=1"/></figure></div>
  3007.  
  3008.  
  3009.  
  3010. <p>It looks like it still holds. There is a multitude of numbers with 6 repetitions.</p>
  3011.  
  3012.  
  3013.  
  3014. <h2>So what</h2>
  3015.  
  3016.  
  3017.  
  3018. <p>OK, so we started off with random data and through visualization and a bit of intuition, we came up with a pretty neat (if conservative) rule about how often numbers repeat by chance. Along with some room to refine our guess and experiment further.</p>
  3019.  
  3020.  
  3021.  
  3022. <p>This is the essence of science. You observe phenomena, formulate a hypothesis, and then try to prove or disprove it through experimentation.</p>
  3023.  
  3024.  
  3025.  
  3026. <p>Now, before the rigorous mathematicians among my readers have a conniption, all this doesn’t prove the hypothesis above. Of course.</p>
  3027.  
  3028.  
  3029.  
  3030. <p>What does highly likely even mean in this context? Is it 90%, or 99.999% How does it vary as n varies? You’ll want to analytically verify this and calculate what the actual odds for the occurrence of at least <img alt="\log{n} + 1" class="latex" src="https://s0.wp.com/latex.php?latex=%5Clog%7Bn%7D+%2B+1&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\log{n} + 1"/> and <img alt="\log{n} + 2" class="latex" src="https://s0.wp.com/latex.php?latex=%5Clog%7Bn%7D+%2B+2&amp;bg=ffffff&amp;fg=000&amp;s=0" title="\log{n} + 2"/> repetitions are.</p>
  3031.  
  3032.  
  3033.  
  3034. <p>I have not had the time to take this further step (the solution is likely not as trivial as it first looks). At the risk of enraging you with a flashback from your college days, I’m afraid I’ll have to leave this as an exercise for the reader. <img alt="&#x1F609;" class="wp-smiley" src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f609.png" style="height: 1em;"/></p>
  3035.  
  3036.  
  3037.  
  3038. <p>But this fun exploration is what got us to the hypothesis and these follow up questions in the first place. Historically, people have often figured out some mathematical relation or hint of it before they could rigorously prove it or had the exact answer.</p>
  3039.  
  3040.  
  3041.  
  3042. <p>The Babylonians come to mind, as they might have figured out the Pythagorean Theorem before they had a rigorous proof:</p>
  3043.  
  3044.  
  3045.  
  3046. <blockquote class="wp-block-quote" style="text-align: left;"><p>The famous and controversial Plimpton 322 clay tablet, believed to date from around 1800 BCE, suggests that the Babylonians may well have known the secret of right-angled triangles (that the square of the hypotenuse equals the sum of the square of the other two sides) many centuries before the Greek Pythagoras. The tablet appears to list 15 perfect Pythagorean triangles with whole number sides, although some claim that they were merely academic exercises, and not deliberate manifestations of Pythagorean triples.</p><cite>— <a href="https://www.storyofmathematics.com/sumerian.html" rel="noreferrer noopener" target="_blank">Luke Mastin</a></cite></blockquote>
  3047.  
  3048.  
  3049.  
  3050. <p>Computer simulation and data visualization have just opened us up to a world of mathematical exploration not previously accessible to any human.</p>
  3051.  
  3052.  
  3053.  
  3054. <h2>Plotting in Python with Matplotlib</h2>
  3055.  
  3056.  
  3057.  
  3058. <p>If all the math above isn’t very interesting to you, the Python 3 code I used to plot the charts may be of greater interest.</p>
  3059.  
  3060.  
  3061.  
  3062. <p>This is the code in its entirety.</p>
  3063.  
  3064.  
  3065.  
  3066. <pre class="wp-block-code"><code>
  3067. import matplotlib.pyplot as plt
  3068. import random
  3069.  
  3070. MAX_NUM = 1000
  3071.  
  3072. x_values = range(1, MAX_NUM + 1)
  3073. values = [random.randint(1, MAX_NUM) for x in x_values]
  3074. y_values = [values.count(x) for x in x_values]
  3075.  
  3076. plt.style.use("seaborn")
  3077. fig, ax = plt.subplots()
  3078. ax.scatter(x_values, y_values, s=10)
  3079.  
  3080. ax.set_title(f"Random Number Occurrences (N = {MAX_NUM})", fontsize=18)
  3081. ax.set_xlabel("Number", fontsize=14)
  3082. ax.set_ylabel("Occurrences", fontsize=14)
  3083.  
  3084. ax.tick_params(axis="both", which="major", labelsize=14)
  3085.  
  3086. plt.show()</code></pre>
  3087.  
  3088.  
  3089.  
  3090. <p>Let’s break it down. We start off by importing <code>pyplot</code> from <code>matplotlib</code> and <code>random</code> since we’ll be generating pseudo-random numbers.</p>
  3091.  
  3092.  
  3093.  
  3094. <p>In truth, we could use <code>secrets</code> for better randomness, but it’s overkill here and the results are unaffected.</p>
  3095.  
  3096.  
  3097.  
  3098. <pre class="wp-block-code"><code>
  3099. import matplotlib.pyplot as plt
  3100. import random</code></pre>
  3101.  
  3102.  
  3103.  
  3104. <p><br/>We then set our input size (<code>MAX_NUM</code>), generate that number of random values (<code>values</code>) and aggregate their frequency in <code>y_values</code>.</p>
  3105.  
  3106.  
  3107.  
  3108. <pre class="wp-block-code"><code>
  3109. MAX_NUM = 1000
  3110.  
  3111. x_values = range(1, MAX_NUM + 1)
  3112. values = [random.randint(1, MAX_NUM) for x in x_values]
  3113. y_values = [values.count(x) for x in x_values]</code></pre>
  3114.  
  3115.  
  3116.  
  3117. <p><br/>Here we set some styling for the chart so that it looks a bit better. We pick the <code>seaborn</code> style, set the thickness of the dots (10 made them fairly visible), and set the labels for the axes.</p>
  3118.  
  3119.  
  3120.  
  3121. <pre class="wp-block-code"><code>
  3122. plt.style.use("seaborn")
  3123. fig, ax = plt.subplots()
  3124. ax.scatter(x_values, y_values, s=10)
  3125.  
  3126. ax.set_title(f"Random Number Occurrences (N = {MAX_NUM})", fontsize=18)
  3127. ax.set_xlabel("Number", fontsize=14)
  3128. ax.set_ylabel("Occurrences", fontsize=14)
  3129.  
  3130. ax.tick_params(axis="both", which="major", labelsize=14)</code></pre>
  3131.  
  3132.  
  3133.  
  3134. <p>Finally, we show the graph.</p>
  3135.  
  3136.  
  3137.  
  3138. <pre class="wp-block-code"><code>
  3139. plt.show()</code></pre>
  3140.  
  3141.  
  3142.  
  3143. <p>Let me know if you enjoy this type of exploration and I might create a few more posts like this. Or conversely, feel free to tell me why I’m wrong about everything, in the comments below. <img alt="&#x1F642;" class="wp-smiley" src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" style="height: 1em;"/></p>
  3144.  
  3145.  
  3146.  
  3147. <p><em>Special thanks to John McGowan of <a href="http://www.mathematical-software.com/" rel="noreferrer noopener" target="_blank">Mathematical Sofware</a>. I’m immensely grateful for his comments on an earlier draft of the article, although any errors remain my own.</em></p>
  3148. <p>The post <a href="https://programmingzen.com/exploring-mathematics-with-matplotlib-and-python/" rel="nofollow">Exploring Mathematics with Matplotlib and Python</a> appeared first on <a href="https://programmingzen.com" rel="nofollow">Programming Zen</a>.</p>
  3149. <img alt="" height="1" src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/g1oLiCUpb6w" width="1"/></div>
  3150.    </content>
  3151.    <updated>2019-08-03T20:39:37Z</updated>
  3152.    <published>2019-08-03T20:36:47Z</published>
  3153.    <category scheme="https://programmingzen.com" term="Programming"/>
  3154.    <category scheme="https://programmingzen.com" term="data visualization"/>
  3155.    <category scheme="https://programmingzen.com" term="exploration"/>
  3156.    <category scheme="https://programmingzen.com" term="math"/>
  3157.    <category scheme="https://programmingzen.com" term="matplotlib"/>
  3158.    <category scheme="https://programmingzen.com" term="python"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://programmingzen.com/exploring-mathematics-with-matplotlib-and-python/</feedburner:origLink>
  3159.    <author>
  3160.      <name>Antonio Cangiano</name>
  3161.      <uri>https://antoniocangiano.com</uri>
  3162.    </author>
  3163.    <source>
  3164.      <id>https://programmingzen.com/feed/atom/</id>
  3165.      <link href="https://programmingzen.com" rel="alternate" type="text/html"/>
  3166.      <link href="http://feeds.feedburner.com/ZenAndTheArtOfRubyProgramming" rel="self" type="application/atom+xml"/>
  3167.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  3168.      <subtitle xml:lang="en-US">Meditations on programming, startups, and technology</subtitle>
  3169.      <title xml:lang="en-US">Programming Zen</title>
  3170.      <updated>2019-08-03T20:39:37Z</updated>
  3171.    </source>
  3172.  </entry>
  3173.  
  3174.  <entry>
  3175.    <id>tag:joi.ito.com,2019:/weblog//1.5688</id>
  3176.    <link href="http://feedproxy.google.com/~r/joi-ito/weblog/~3/nH4qu_b69g0/2019-applied-et-1.html" rel="alternate" type="text/html"/>
  3177.    <title>2019 Applied Ethical and Governance Challenges in AI - Notes from Part 3: Intervention</title>
  3178.    <summary>Applied Ethical and Governance Challenges in Artificial Intelligence (AI) Part 3: Intervention We recently completed the third and final section of our course that I co-taught with Jonathan Zittrain and TA'ed by Samantha Bates, John Bowers and Natalie Saltiel. The...</summary>
  3179.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p dir="ltr"><strong>Applied Ethical and Governance Challenges in Artificial Intelligence (AI)</strong></p>
  3180. <p dir="ltr"><strong>Part 3: Intervention</strong></p>
  3181. <p>We recently completed the third and final section of our course that I co-taught with Jonathan Zittrain and TA'ed by Samantha Bates, John Bowers and Natalie Saltiel. The plan was to try to bring the discussion of diagnosis and prognosis in for a landing and figure out how to intervene.</p>
  3182. <p dir="ltr"><span>The first class of this section (the eighth class of the course) looked at the use of algorithms in decision making. One paper that we read was the most recent in a series of papers by Jon Kleinberg, Sendhil Mullainathan and Cass Sunstein that supported the use of algorithms in decision making such as pretrial risk assessments - the particular paper we read focused on the use of algorithms for measuring the bias of the decision making. Sendhil Mullainathan, one of the authors of the paper joined us in the class. The second paper was by Rodrigo Ochigame, a history and science and technology in society (STS) student who criticized the fundamental premise of reducing notions such as "fairness" to "computationals formalisms" such as algorithms. The discussion which at points took the form of a lively debate was extremely interesting and helped us and the students see how important it is to question the framing of the questions and the assumptions that we often make when we begin working on a solution without coming to a societal agreement of the problem.</span></p>
  3183. <p dir="ltr"><span>In the case of pretrial risk assessments, the basic question about whether rearrests are more of an indicator of policing practice or the "criminality of the individual" fundamentally changes whether the focus should be on the "fairness" and accuracy of the prediction of the criminality of the individual or whether we should be questioning the entire system of incarceration and its assumptions.</span></p>
  3184. <p dir="ltr"><span>At the end of the class, Sendhil agreed to return to have a deeper and longer conversation with my </span><a href="https://www.media.mit.edu/projects/HAL/people/"><span>Humanizing AI in Law (HAL) team</span></a><span> to discuss this issue further.</span></p>
  3185. <p>In the next class, we discussed the history of causal inference and how statistics and correlation have dominated modern machine learning and data analysis. We discussed the difficulties and challenges in validating causal claims but also the importance of causal claims. In particular, we looked at how legal precedent has from time to time made references to the right to individualized sentencing. Clearly, risk scores used in sentencing that are protected by trade secrets and confidentiality agreements challenge the right to due process as expressed in the <a href="https://harvardlawreview.org/2017/03/state-v-loomis/"><em>Wisconsin v. Loomis</em></a> case as well as the right to an individualized sentence.</p>
  3186. <p dir="ltr"><span>The last class focused on adversarial examples and technical debt - which helped us think about when and how policies and important "tests" and controls can and should be put in place vs when, if ever, we should just "move quickly and break things." I'm not sure if it was the consensus of the class, but I felt that somehow we needed a new design process that allowed for the creation of design stories and "tests" that could be developed by the users and members of the affected communities that were integrated into the development process - participant design that was deeply integrated into something that looked like agile development story and test development processes. Fairness and other contextual parameters are dynamic and can only be managed through interactions with the systems in which the algorithms are deployed. Figuring out a way to somehow integrate the dynamic nature of the social system seems like a possible approach for mitigating a category of technical debt and designing systems untethered from the normative environments in which they are deployed.</span></p>
  3187. <p>Throughout the course, I observed students learning from one another, rethinking their own assumptions, and collaborating on projects outside of class. We may not have figured out how to eliminate algorithmic bias or come up with a satisfactory definition of what makes an autonomous system interpretable, but we did find ourselves having conversations and coming to new points of view that I don't think would have happened otherwise.</p>
  3188. <p dir="ltr"><span>It is clear that integrating humanities and social science into the conversation about law, economics and technology is required for us to navigate ourselves out of the mess that we've created and to chart a way forward into a our uncertain future with our increasingly algorithmic societal systems.</span></p>
  3189. <p dir="ltr"><span>- Joi</span></p>
  3190. <p><strong>Syllabus Notes</strong></p>
  3191. <p dir="ltr"><em>By Samantha Bates</em></p>
  3192. <p dir="ltr">In our final stage of the course, the intervention stage, we investigated potential solutions to the problems we identified earlier in the course. Class discussions included consideration of the various tradeoffs of implementing potential solutions and places to intervene in different systems. We also investigated the balance between waiting to address potential weaknesses in a given system until after deployment versus proactively correcting deficiencies before deploying the autonomous system.</p>
  3193. <p dir="ltr"><strong>Class Session 8: Intervening on behalf of fairness</strong><span> </span></p>
  3194. <p dir="ltr"><span>This class was structured as a conversation involving two guests, University of Chicago Booth School of Business Professor Sendhil Mullainathan and MIT PhD student Rodrigo Ochigame. As a class we debated whether elements of the two papers were reconcilable given their seemingly opposite viewpoints. </span></p>
  3195. <ul>
  3196. <li dir="ltr">
  3197. <p dir="ltr"><a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3329669&amp;download=yes"><span>"Discrimination in the Age of Algorithms"</span></a><span> by Jon Kleinberg, Jens Ludwig, Sendhil Mullainathan, and Cass R. Sunstein (February 2019).</span></p>
  3198. </li>
  3199. <li dir="ltr">
  3200. <p dir="ltr"><span>[FORTHCOMING] "The Illusion of Algorithmic Fairness" by Rodrigo Ochigame (2019)</span></p>
  3201. </li>
  3202. </ul>
  3203. <p dir="ltr"><span>The main argument in "Discrimination in the Age of Algorithms" is that algorithms make it easier to identify and prevent discrimination. The authors point out that current obstacles to proving discrimination are primarily caused by opacity around human decision making. Human decision makers can make up justifications for their decisions after the fact or may be influenced by bias without even knowing it. The authors argue that by making algorithms transparent, primarily through the use of counterfactuals, we can determine which components of the algorithm are causing a biased outcome. The paper also suggests that we allow algorithms to consider personal attributes such as race and gender in certain contexts because doing so could help counteract human bias. For example, if managers consistently give higher performance ratings to male workers over female workers, the algorithm won't be able to figure out that managers are discriminating against women in the workplace if it can't incorporate data about gender. But if we allow the algorithm to be aware of gender when calculating work productivity, it may be able to uncover existing biases and prevent them from being perpetuated. </span></p>
  3204. <p>The second assigned reading, "The Illusion of Algorithmic Fairness," demonstrates that attempts to reduce elements of fairness to mathematical equations have persisted throughout history. Discussions about algorithmic fairness today mirror many of the same points of contention reached in past debates about fairness, such as whether we should optimize for utility or optimize for fair outcomes. Consequently, fairness debates today have inherited some assumptions from these past discussions. In particular, we "take many concepts for granted including probability, risk, classification, correlation, regression, optimization, and utility." The author argues that despite our technical advances, fairness remains "irreducible to a mathematical property of algorithms, independent from specific social contexts." He shows that any attempt at formalism will ultimately be influenced by the social and political climate of the time. Moreover, researchers frequently use misrepresentative, historical data to create "fair" algorithms. The way that the data is framed and interpreted can be misrepresentative and frequently reinforces existing discrimination (for example, predictive policing algorithms predict future policing, not future crime.)</p>
  3205. <p dir="ltr"><span>These readings set the stage for a conversation about how we should approach developing interventions. While "Discrimination in the Age of Algorithms" makes a strong case for using algorithms (in conjunction with counterfactuals) to improve the status quo and make it easier to prove discrimination in court, "The Illusion of Algorithmic Fairness" cautions against trying to reduce components of fairness to mathematical properties. The "Illusion of Algorithmic Fairness" paper shows that this is not a new endeavor. Humans have tried to standardize the concept of fairness as early as 1700 and we have proved time and again that determining what is fair and what is unfair is much too complicated and context dependent to model in an algorithm.</span></p>
  3206. <p dir="ltr"><strong>Class Session 9: Intervening on behalf of interpretability </strong></p>
  3207. <p dir="ltr"><span>In our second to last class, we discussed causal inference, how it differs from correlative machine learning techniques, and its benefits and drawbacks. We then considered how causal models could be deployed in the criminal justice context to generate individualized sentences and what an algorithmically informed individualized sentence would look like. </span></p>
  3208. <ul>
  3209. <li dir="ltr">
  3210. <p dir="ltr"><span>The Book of Why</span><span> by Judea Pearl and Dana Mackenzie, Basic Books (2018). Read Introduction. </span></p>
  3211. </li>
  3212. <li dir="ltr">
  3213. <p dir="ltr"><a href="http://www.scotusblog.com/wp-content/uploads/2017/02/16-6387-op-bel-wis.pdf"><span>State of Wisconsin v. Eric Loomis</span></a><span> (2016), paragraphs 11-28 and 67-74.</span></p>
  3214. </li>
  3215. </ul>
  3216. <p dir="ltr"><span>The </span><span>Book of Why </span><span>describes the emerging field of causal inference, which attempts to model how the human brain works by considering cause and effect relationships. The introduction delves a little into the history of causal inference and explains that it took time for the field to develop because it was nearly impossible for scientists to communicate causal relationships using mathematical terms. We've now devised ways to model what the authors call "the do-operator" (which indicates that there was some action/form of intervention that makes the relationship causal rather than correlative) through diagrams, mathematical formulas and lists of assumptions.</span></p>
  3217. <p dir="ltr"><span>One main point of the introduction and the book is that "data are dumb" because they don't explain why something happened. A key component of causal inference is the creation of counterfactuals to help us understand what would have happened had certain circumstances been different. The hope with causal inference is that it will be less impacted by bias because causal inference models do not look for correlations in data, but rather focus on the "do-operator." A causal inference approach may also make algorithms more interpretable because counterfactuals will offer a better way to understand how the AI makes decisions.</span></p>
  3218. <p dir="ltr"><span>The other assigned reading, </span><span>State of Wisconsin v. Eric Loomis</span><span>, is a 2016 case about the use of risk assessment tools in the criminal justice system. In </span><span>Loomis</span><span>, the court used a risk assessment tool, COMPAS, to determine the defendant's risk of pretrial recidivism, general recidivism, and violent recidivism. The key question in this case was whether the judge should be able to consider the risk scores when determining a defendant's sentence. The State Supreme Court in this case decided that judges could consider the risk score because they also take into account other evidence when making sentencing decisions. For the purposes of this class, the case provided a lede into a discussion about the right to an individualized sentence and whether risk assessment scores can result in more fair outcomes for defendants. However, it turns out that risk assessment tools should not be employed if the goal is to produce individualized sentences. Despite their appearance of generating unique risk scores for defendants, risk assessment scores are not individualized as they compare information about an individual defendant to data about similar groups of offenders to determine that individual's recidivism risk. </span></p>
  3219. <p><strong>Class Session 10: Intervening against adversarial examples and course conclusion</strong></p>
  3220. <p dir="ltr"><span>We opened our final class with a discussion about adversarial examples and technical debt before wrapping up the course with a final reflection on the broader themes and findings of the course. </span></p>
  3221. <ul>
  3222. <li dir="ltr">
  3223. <p dir="ltr"><span>"</span><a href="https://perma.cc/PP9V-N4E6"><span>Hidden Technical Debt in Machine Learning Systems</span></a><span>" by D. Sculley et al., NIPS (2015)</span></p>
  3224. </li>
  3225. </ul>
  3226. <p dir="ltr"><span>The term "technical debt" refers to the challenge of keeping machine learning systems up to date. While technical debt is a factor in any type of technical system, machine learning systems are particularly susceptible to collecting a lot of technical debt because they tend to involve many layers of infrastructure (code and non code). Technical debt also tends to accrue more in systems that are developed and deployed quickly. In a time crunch, it is more likely that new features will be added without deleting old ones and that the systems will not be checked for redundant features or unintended feedback loops before they are deployed. In order to combat technical debt, the authors suggest several approaches including, fostering a team culture that encourages simplifying systems and eliminating unnecessary features and creating an alert system that signals when a system has run up against pre-programmed limits and requires review. </span></p>
  3227. <p dir="ltr"><span>During the course retrospective, students identified several overarching themes of the class including, the effectiveness and importance of interdisciplinary learning, the tendency of policymakers and industry leaders to emphasize short term outcomes over long term consequences of decisions, the challenge of teaching engineers to consider the ethical implications of their work during the development process, and the lack of input from diverse groups in system design and deployment. </span></p>
  3228.        
  3229.    <img alt="" height="1" src="http://feeds.feedburner.com/~r/joi-ito/weblog/~4/nH4qu_b69g0" width="1"/></div>
  3230.    </content>
  3231.    <updated>2019-08-03T05:53:25Z</updated>
  3232.    <published>2019-04-27T23:36:29Z</published>
  3233.    <category scheme="http://www.sixapart.com/ns/types#category" term="Ethics and Governance in AI"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://joi.ito.com/weblog/2019/04/28/2019-applied-et-1.html</feedburner:origLink>
  3234.    <author>
  3235.      <name>Joichi Ito</name>
  3236.      <uri>https://joi.ito.com</uri>
  3237.    </author>
  3238.    <source>
  3239.      <id>tag:joi.ito.com,2008-05-17:/weblog//1</id>
  3240.      <link href="https://joi.ito.com/weblog/" rel="alternate" type="text/html"/>
  3241.      <link href="http://feeds.feedburner.com/joi-ito/weblog" rel="self" type="application/atom+xml"/>
  3242.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  3243.      <subtitle>Joi Ito's conversation with the living web.</subtitle>
  3244.      <title>Joi Ito's Web</title>
  3245.      <updated>2019-08-07T19:32:23Z</updated>
  3246.    </source>
  3247.  </entry>
  3248.  
  3249.  <entry xml:lang="en-US">
  3250.    <id>http://openid.net/?p=34389</id>
  3251.    <link href="https://openid.net/2019/08/02/notice-of-vote-for-implementers-draft-of-fapi-client-initiated-backchannel-authentication-ciba-profile/" rel="alternate" type="text/html"/>
  3252.    <title xml:lang="en-US">Notice of Vote for Implementer’s Draft of FAPI Client Initiated Backchannel Authentication (CIBA) Profile</title>
  3253.    <summary xml:lang="en-US">The official voting period will be between Friday, August 16 and Friday, August 23, 2019, following the 45 day review of the specification. For the convenience of members, voting will actually open early on Friday, August 9, providing for a two-week voting period. The FAPI working group page is https://openid.net/wg/fapi/. If you’re not already a [...]</summary>
  3254.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>The official voting period will be between Friday, August 16 and Friday, August 23, 2019, following the <a href="https://openid.net/2019/07/01/public-review-period-for-fapi-client-initiated-backchannel-authentication-ciba-profile-started/">45 day review</a> of the specification. For the convenience of members, voting will actually open early on Friday, August 9, providing for a two-week voting period.</p>
  3255. <p>The FAPI working group page is <a href="https://openid.net/wg/fapi/">https://openid.net/wg/fapi/</a>. If you’re not already a member, or if your membership has expired, please consider joining to participate in the approval vote. Information on joining the OpenID Foundation can be found at <a href="https://openid.net/foundation/members/registration">https://openid.net/foundation/members/registration</a>.</p>
  3256. <p>The vote will be conducted at <a href="https://openid.net/foundation/members/polls/186">https://openid.net/foundation/members/polls/186</a>.</p>
  3257. <p>– Michael B. Jones, OpenID Foundation Secretary</p></div>
  3258.    </content>
  3259.    <updated>2019-08-02T22:17:41Z</updated>
  3260.    <published>2019-08-02T22:17:41Z</published>
  3261.    <category scheme="https://openid.net" term="News"/>
  3262.    <category scheme="https://openid.net" term="Specs"/>
  3263.    <category scheme="https://openid.net" term="Working Group"/>
  3264.    <category scheme="https://openid.net" term="FAPI"/>
  3265.    <category scheme="https://openid.net" term="Implementer's Draft"/>
  3266.    <category scheme="https://openid.net" term="specification"/>
  3267.    <category scheme="https://openid.net" term="vote"/>
  3268.    <author>
  3269.      <name>Mike Jones</name>
  3270.      <uri>https://mbj.signon.com/</uri>
  3271.    </author>
  3272.    <source>
  3273.      <id>https://openid.net/feed/atom/</id>
  3274.      <link href="https://openid.net" rel="alternate" type="text/html"/>
  3275.      <link href="https://openid.net/feed/atom/" rel="self" type="application/atom+xml"/>
  3276.      <link href="https://openid.net/?pushpress=hub" rel="hub" type="text/html"/>
  3277.      <subtitle xml:lang="en-US">The Internet Identity Layer</subtitle>
  3278.      <title xml:lang="en-US">OpenID</title>
  3279.      <updated>2019-08-09T12:02:10Z</updated>
  3280.    </source>
  3281.  </entry>
  3282.  
  3283.  <entry>
  3284.    <id>tag:joi.ito.com,2019:/weblog//1.5684</id>
  3285.    <link href="http://feedproxy.google.com/~r/joi-ito/weblog/~3/Wo2Co1RIvXo/2019-applied-et.html" rel="alternate" type="text/html"/>
  3286.    <title>2019 Applied Ethical and Governance Challenges in AI - Notes from Part 1: Diagnosis</title>
  3287.    <summary>Jonathan Zittrain and I are co-teaching a class together for the third time. This year, the title of the course is Applied Ethical and Governance Challenges in Artificial Intelligence. It is a seminar, which means that we invite speakers for...</summary>
  3288.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p dir="ltr">Jonathan Zittrain and I are co-teaching a class together for the third time. This year, the title of the course is Applied Ethical and Governance Challenges in Artificial Intelligence. It is a seminar, which means that we invite speakers for most of the classes and usually talk about their papers and their work. The speakers and the papers were mostly curated by our amazing teaching assistant team - Samantha Bates, John Bowers and Natalie Satiel.</p>
  3289. <p dir="ltr"><span>One of the things that Sam does is help prepare for the class by summarizing the paper and the flow of the class and I realized that it was a waste for this work to just be crib notes for the instructors. I asked Sam for permission to publish the notes and the syllabus on my blog as a way for people to learn some of what we are learning and start potentially interesting conversations.</span></p>
  3290. <p dir="ltr"><span>The course is structured as three sets of three classes on three focus areas. Previous classes were more general overviews of the space, but as the area of research matured, we realized that it would be more interesting to go deep in key areas than to go over what a lot of people probably already know.</span></p>
  3291. <p>We chose three main topics: fairness, interpretability, and adversarial examples. We then organized the classes to hit each topic three times, starting with diagnosis (identifying the technical root of the problem), then prognosis (exploring the social impact of those problems) then intervention (considering potential solutions to the problems we've identified while taking into account the costs and benefits of each proposed solution). See the diagram below for a visual of the structure.</p>
  3292. <p dir="ltr"><span>The students in the class are half MIT and half Harvard students with diverse areas of expertise including software engineering, law, policy and other fields. The class has really been great and I feel that we're going deeper on many of the topics than I've ever gone before. The downside is that we are beginning to see how difficult the problems are. Personally, I'm feeling a bit overwhelmed by the scale of the work we have ahead of us to try to minimize the harm to society by the deployment of these algorithms.</span></p>
  3293. <p dir="ltr"><span>We just finished the prognosis phase and are about to start intervention. I hope that we find something to be optimistic about as we enter that phase.</span></p>
  3294. <p dir="ltr"><span>Please find below the summary and the syllabus for the introduction and the first phase - the diagnosis phase - by Samantha Bates along with links to the papers.</span></p>
  3295. <p>The tl;dr summary of the first phase is... we have no idea how to define fairness and it probably isn't reducible to a formula or a law, but it is dynamic. Interpretability sounds like a cool word, but as Zachary Lipton said in his talk to our class, it is a "wastebasket taxon" like the word "antelope" where we call anything that sort of looks like an antelope, an antelope, even if it has really no relationship with other antelopes. A bunch of students from MIT made it very clear to us that we are not prepared for adversarial attacks and that it was unclear whether we could build algorithms that were both robust against these attacks and still functionally effective.</p>
  3296. <p><strong>Part 1: Introduction and Diagnosis</strong></p>
  3297. <p><em>By Samantha Bates</em></p>
  3298. <p dir="ltr"><span><img height="440" src="https://lh3.googleusercontent.com/mbxEwNyXALP8zp3eT85A1SAkUzbzNL28CGygZ1S6yoYxBhSclO-PpX4kID5j0mapz2efUy4EOl_g5uTJtbg-ISe5QiV5KWmlug-reMn1jSAW4pyievAPG0CtNXISIrsj--Dv75PB" width="587"/></span></p>
  3299. <p dir="ltr"/>
  3300. <p dir="ltr"><em><strong>Syllabus Notes: Introduction and Diagnosis Stage</strong></em></p>
  3301. <p dir="ltr"><span>This first post summarizes the readings assigned for the first four classes, which encompasses the introduction and the diagnosis stage. In the diagnosis stage, the class identified the core problems in AI related to fairness, interpretability, and adversarial examples and considered how the underlying mechanisms of autonomous systems contributed to those problems. As a result, our class discussions involved defining terminology and studying how the technology works. Included below is the first part of the course syllabus along with notes summarizing the main takeaways from each of the assigned readings.</span></p>
  3302. <p dir="ltr"><strong>Class Session 1: Introduction</strong><span> </span></p>
  3303. <p dir="ltr"><span>In our first class session, we presented the structure and motivations behind the course, and set the stage for later class discussions by assigning readings that critique the current state of the field.</span></p>
  3304. <ul>
  3305. <li dir="ltr">
  3306. <p dir="ltr"><span>"</span><a href="https://perma.cc/4JM9-E4HC"><span>Artificial Intelligence -- The Revolution Hasn't Happened Yet</span></a><span>" by Michael Jordan, Medium (April 2018)</span></p>
  3307. </li>
  3308. <li dir="ltr">
  3309. <p dir="ltr"><span>"</span><a href="https://perma.cc/H6Q9-HZZD"><span>Troubling Trends in Machine Learning Scholarship</span></a><span>" by Zachary C. Lipton &amp; Jacob Steinhardt (July 2018)</span></p>
  3310. </li>
  3311. </ul>
  3312. <p dir="ltr"><span>Both readings challenge the way Artificial Intelligence (AI) research is currently conducted and talked about, but from different perspectives. Michael Jordan's piece is mainly concerned with the need for more collaboration across disciplines in AI research. He argues that we are experiencing the creation of a new branch of engineering that needs to incorporate non-technical as well as engineering challenges and perspectives. "Troubling Trends in Machine Learning Scholarship" focuses more on falling standards and non-rigorous research practices in the academic machine learning community. The authors rightly point out that academic scholarship must be held to the highest standards in order to preserve public and academic trust in the field.</span></p>
  3313. <p dir="ltr"><span>We chose to start out with readings that critique the current state of the field because they encourage students to think critically about the papers they will read throughout the semester. Just as the readings show that the use of precise terminology and explanation of thought are particularly important to prevent confusion, we challenge students to carefully consider how they present their own work and opinions. The readings set the stage for our deep dives into specific topic areas (fairness, interpretability, adversarial AI) and also set some expectations about how students should approach the research we will discuss throughout the course.</span></p>
  3314. <p dir="ltr"><strong>Class Session 2: Diagnosing problems of fairness </strong></p>
  3315. <p dir="ltr"><span>For our first class in the diagnosis stage, the class was joined by Cathy O'Neil, a data scientist and activist who has become one of the leading voices on fairness in machine learning.</span></p>
  3316. <ul>
  3317. <li dir="ltr">
  3318. <p dir="ltr"><span>Weapons of Math Destruction </span><span>by Cathy O'Neil, Broadway Books (2016). Read Introduction and Chapter 1: "Bomb Parts: What Is a Model?"</span></p>
  3319. </li>
  3320. <li dir="ltr">
  3321. <p dir="ltr"><span>[OPTIONAL] "</span><a href="https://perma.cc/8QD4-JQAS"><span>The scored society: due process for automated predictions</span></a><span>" by Danielle Keats Citron and Frank Pasquale, Washington Law Review (2014)</span></p>
  3322. </li>
  3323. </ul>
  3324. <p dir="ltr"><span>Cathy O'Neil's book, </span><span>Weapons of Math Destruction</span><span>, is a great introduction to predictive models, how they work, and how they can become biased. She refers to flawed models that are opaque, scalable, and have the potential to damage lives (frequently the lives of the poor and disadvantaged) as Weapons of Math Destruction (WMDs). She explains that despite good intentions, we are more likely to create WMDs when we don't have enough data to draw reliable conclusions, use proxies to stand in for data we don't have, and try to use simplistic models to understand and predict human behavior, which is much too complicated to accurately model with just a handful of variables. Even worse, most of these algorithms are opaque, so the people impacted by these models are unable to challenge their outputs.</span></p>
  3325. <p dir="ltr"><span>O'Neil demonstrates that the use of these types of models can have serious unforeseen consequences. Because WMDs are a cheap alternative to human review and decision-making, WMDs are more likely to be deployed in poor areas, and thus tend to have a larger impact on the poor and disadvantaged in our society. Additionally, WMDs can actually lead to worse behavior. In O'Neil's example of the Washington D.C. School District's model that used student test scores to identify and root out ineffective teachers, some teachers changed their students' test scores in order to protect their jobs. Although the WMD in this scenario was deployed to improve teacher effectiveness, it actually had the opposite effect by creating an unintended incentive structure. </span></p>
  3326. <p dir="ltr"><span>The optional reading, "The Scored Society: Due Process for Automated Predictions," discusses algorithmic fairness in the credit scoring context. Like Cathy O'Neil, the authors contend that credit scoring algorithms exacerbate existing social inequalities and argue that our legal system has a duty to change that. They propose opening the credit scoring and credit sharing process to public review while also requiring that credit scoring companies educate individuals about how different variables influence their scores. By attacking the opacity problem that Cathy O'Neil identified as one of three characteristics of WMDs, the authors believe the credit scoring system can become more fair without infringing on intellectual property rights or requiring that we abandon the scoring models altogether.</span></p>
  3327. <p dir="ltr"><strong>Class Session 3: Diagnosing problems of interpretability</strong><span> </span></p>
  3328. <p dir="ltr"><span>Zachary Lipton, an Assistant Professor at Carnegie Mellon University who is working intensively on defining and addressing problems of interpretability in machine learning, joined the class on Day 3 to discuss what it means for a model to be interpretable.</span></p>
  3329. <ul>
  3330. <li dir="ltr">
  3331. <p dir="ltr"><span>"</span><a href="https://perma.cc/6MV7-HLHB"><span>The Mythos of Model Interpretability</span></a><span>" by Zachary C. Lipton, ArXiv (2016)</span></p>
  3332. </li>
  3333. <li dir="ltr">
  3334. <p dir="ltr"><span>[OPTIONAL] "</span><a href="https://perma.cc/U7FF-NPZ5"><span>Towards a rigorous Science of Interpretable Machine Learning</span></a><span>" by Finale Doshi-Velez and Been Kim, ArXiv (2017)</span></p>
  3335. </li>
  3336. </ul>
  3337. <p>Class session three was our first day discussing interpretability, so both readings consider how best to define interpretability and why it is important. Lipton's paper asserts that interpretability reflects a number of different ideas and that its current definitions are often too simplistic. His paper primarily raises stage-setting questions: What is interpretability? In what contexts is interpretability most necessary? Does creating a model that is more transparent or can explain its outputs make it interpretable?</p>
  3338. <p dir="ltr"><span>Through his examination of these questions, Lipton argues that the definition of interpretability depends on why we want a model to be interpretable. We might demand that a model be interpretable so that we can identify underlying biases and allow those affected by the algorithm to contest its outputs. We may also want an algorithm to be interpretable in order to provide more information to the humans involved in the decision, to give the algorithm more legitimacy, or to uncover possible causal relationships between variables that can then be tested further. By clarifying the different circumstances in which we demand interpretability, Lipton argues that we can get closer to a working definition of interpretability that better reflects its many facets.</span></p>
  3339. <p dir="ltr"><span>Lipton also considers two types of proposals to improve interpretability: increasing transparency and providing post-hoc explanations. The increasing transparency approach can apply to the entire model (simulatability), meaning that a user should be able to reproduce the model's output if given the same input data and parameters. We can also improve transparency by making the different elements of the model (the input data, parameters, and calculations) individually interpretable, or by showing that during the training stage, the model will come to a unique solution regardless of the training dataset. However, as we will discuss further during the interventions stage of the course, providing more transparency at each level does not always make sense depending on the context and the type of model employed (for example a linear model vs. a neural network model). Additionally, improving the transparency of a model may decrease the model's accuracy and effectiveness. A second way to improve interpretability is to require post-hoc interpretability, meaning that the model must explain its decision-making process after generating an output. Post-hoc explanations can take the form of text, visuals, saliency maps, or analogies that show how a similar decision was reached in a similar context. Although post-hoc explanations can provide insight into how individuals affected by the model can challenge or change its outputs, Lipton cautions that these explanations can be unintentionally misleading, especially if they are influenced by our human biases.</span></p>
  3340. <p dir="ltr"><span>Ultimately, Lipton's paper concludes that it is extremely challenging to define interpretability given how much it depends on external factors like context and the motivations for making a model interpretable. Without a working definition of the term it remains unclear how to determine whether a model is interpretable. While the Lipton paper focuses more on defining interpretability and considering why it is important, the optional reading, "Towards a rigorous Science of Interpretable Machine Learning," dives deeper into the various methods used to determine whether a model is interpretable. The authors define interpretability as the "ability to explain or present in understandable terms to a human" and are particularly concerned about the lack of standards for evaluating interpretability.</span></p>
  3341. <p dir="ltr"><strong>Class Session 4: Diagnosing vulnerabilities to adversarial examples</strong><span> </span></p>
  3342. <p dir="ltr">In our first session on adversarial examples, the class was joined by <a href="https://www.labsix.org/">LabSix</a>, a student-run AI research group at MIT that is doing cutting-edge work on adversarial techniques. LabSix gave a primer on adversarial examples and presented some of its own work.</p>
  3343. <ul>
  3344. <li dir="ltr">
  3345. <p dir="ltr"><span>"</span><a href="https://perma.cc/3ZQQ-A7MY"><span>Motivating the Rules of the Game for Adversarial Example Research</span></a><span>" by Justin Gilmer et al., ArXiv (2018).</span></p>
  3346. </li>
  3347. <li dir="ltr">
  3348. <p dir="ltr"><span>[RECOMMENDED] "</span><a href="https://perma.cc/W2FG-CNNC"><span>Intriguing properties of neural networks</span></a><span>" by Christian Szegedy et al., ArXiv (2013)</span></p>
  3349. </li>
  3350. </ul>
  3351. <p dir="ltr"><span>The Gilmer et. al. paper is an accessible introduction to adversarial examples that defines them as "inputs to machine learning models that an attacker has intentionally designed to cause the model to make a mistake."</span><span> The main thrust of the paper is an examination of the different scenarios in which an attacker may employ adversarial examples. The authors develop a taxonomy to categorize these different types of attacks: "indistinguishable perturbation, content-preserving perturbation, non-suspicious input, content-constrained input, and unconstrained input." For each category of attack, the authors explore the different motivations and constraints of the attacker. By gaining a better understanding of the different types of attacks and the tradeoffs of each type, the authors argue that the designers of machine learning systems will be better able to defend against them.</span></p>
  3352. <p dir="ltr"><span>The paper also includes an overview of the perturbation defense literature, which the authors criticize for failing to consider adversarial example attacks in plausible, real-world situations. For example, a common hypothetical situation posed in the defense literature is an attacker perturbing the image of a stop sign in an attempt to confuse a self-driving car. The Gilmer et. al. paper; however, points out that the engineers of the car would have considered and prepared for naturally occurring misclassification errors caused by the system itself or real world events (for example, the stop sign could be blown over by the wind). The authors also argue that there are likely easier, non technical methods that the attackers could use to confuse the car, so the hypothetical is not the most realistic test case. The authors' other main critique of the defense literature is that it does not acknowledge how improving certain aspects of a system's defense structure can make other aspects of the system less robust and thus more vulnerable to attack. </span></p>
  3353. <p>The recommended reading by Christian Szegedy et. al. is much more technical and requires some machine learning background to understand all of the terminology. Although it is a challenging read, we included it in the syllabus because it introduced the term "adversarial examples" and laid some of the foundation for research on this topic.</p>
  3354. <p><span id="docs-internal-guid-76e57edd-7fff-9106-ac59-f41ccc99903a"><br/><br/></span></p>
  3355.        
  3356.    <img alt="" height="1" src="http://feeds.feedburner.com/~r/joi-ito/weblog/~4/Wo2Co1RIvXo" width="1"/></div>
  3357.    </content>
  3358.    <updated>2019-08-02T16:04:02Z</updated>
  3359.    <published>2019-03-07T21:25:10Z</published>
  3360.    <category scheme="http://www.sixapart.com/ns/types#category" term="Ethics and Governance in AI"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://joi.ito.com/weblog/2019/03/07/2019-applied-et.html</feedburner:origLink>
  3361.    <author>
  3362.      <name>Joichi Ito</name>
  3363.      <uri>https://joi.ito.com</uri>
  3364.    </author>
  3365.    <source>
  3366.      <id>tag:joi.ito.com,2008-05-17:/weblog//1</id>
  3367.      <link href="https://joi.ito.com/weblog/" rel="alternate" type="text/html"/>
  3368.      <link href="http://feeds.feedburner.com/joi-ito/weblog" rel="self" type="application/atom+xml"/>
  3369.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  3370.      <subtitle>Joi Ito's conversation with the living web.</subtitle>
  3371.      <title>Joi Ito's Web</title>
  3372.      <updated>2019-08-07T19:32:23Z</updated>
  3373.    </source>
  3374.  </entry>
  3375.  
  3376.  <entry>
  3377.    <id>tag:joi.ito.com,2019:/weblog//1.5685</id>
  3378.    <link href="http://feedproxy.google.com/~r/joi-ito/weblog/~3/4fR_VoaJk64/applied-ethical.html" rel="alternate" type="text/html"/>
  3379.    <title>2019 Applied Ethical and Governance Challenges in AI - Notes from Part 2: Prognosis</title>
  3380.    <summary>This is the second of three parts of the syllabus and summaries prepared by Samantha Bates who TAs the Applied Ethical and Governance Challenges in Artificial Intelligence course which I co-teach with Jonathan Zittrain. John Bowers and Natalie Satiel are...</summary>
  3381.    <content type="xhtml" xml:lang="en-us"><div xmlns="http://www.w3.org/1999/xhtml"><p dir="ltr"><span>This is the second of three parts of the syllabus and summaries prepared by Samantha Bates who TAs the Applied Ethical and Governance Challenges in Artificial Intelligence course which I co-teach with Jonathan Zittrain. John Bowers and Natalie Satiel are also TAs for the course. </span><a href="https://joi.ito.com/weblog/2019/03/07/2019-applied-et.html"><span>I posted Part I</span></a><span> earlier in the month.</span></p>
  3382. <p dir="ltr">My takeaways:</p>
  3383. <p dir="ltr">In Part I, we defined the space and tried to frame and understand some of the problems. We left with concerns about the reductionist, poorly defined and oversimplified notions of fairness and explainability in much of the literature. We also left feeling quite challenged by how the technical community will face new risks such as adversarial attacks and approaches like it.</p>
  3384. <p dir="ltr">In Part II, we continue our journey into a sense of despair about AI ethics and governance. In Solon Barocas and Andrew D. Selbst's paper "Big Data's Disparate Impact," they walk us through the state of the law around discrimination and fairness using Title VII of the US Civil Rights Act as an example. The authors show us that while it was enacted to address discrimination concerns raised by the civil rights movement, the law has evolved away from trying to correct societal inequities through remedies such as affirmative action. Instead, the law has focused more and more on fairness of processes and less on redistribution or on resolving historical inequity. As a result, the law has adopted a more technical notion of fairness - a kind of actuarial "all lives matter" sort of approach. During Part I, when we discussed the biased <a href="https://www.reuters.com/article/us-amazon-com-jobs-automation-insight/amazon-scraps-secret-ai-recruiting-tool-that-showed-bias-against-women-idUSKCN1MK08G">Amazon hiring tool</a>, one of the proposed remedies was to "put our thumb on the scale" and just boost the scores of women and minorities. The Barocas and Selbst paper demonstrates that this type of solution is no longer supported by the law. The sense is that the engineers thought, "of course there must be a law prohibiting discrimination, we can use that." In fact, that law punts on redistribution or societal inequity. Jonathan pointed out that treatment of social inequality in Tort law is similar. If you run over a rich person and a poor person at the same time, you have to pay the rich family more - the calculation of damages is based on the victim's future earning power. Tort law, like Title VII, says, "there may be societal inequities, but we're not solving that problem here."</p>
  3385. <p dir="ltr">Sandra Wachter's paper proposing counterfactuals as a way to provide explainability is an excellent idea and feels like one way forward in the explainability debate. However, even Sandra seems concerned about whether laws such as the GDPR will actually be able to require companies to provide such explanations. We also had some concerns about the limits of counterfactuals in identifying biases or providing the "best" answer depending on the person - limits Sandra identifies in her paper.</p>
  3386. <p dir="ltr">Finally, we take adversarial attacks from the theoretical to a specific example in <a href="http://science.sciencemag.org/content/363/6433/1287">a recent paper</a> that Jonathan and I wrote with John Bowers, Samuel Finlayson, Andrew L. Beam, and Isaac S. Kohane about the risks of adversarial attacks on medical AI systems.</p>
  3387. <p dir="ltr"><span>Please see Samantha's summaries and links to the readings below for a more complete overview of the three classes in Part II.</span></p>
  3388. <p dir="ltr">- Joi</p>
  3389. <p dir="ltr"><span/><strong>Part 2: Prognosis</strong></p>
  3390. <p dir="ltr"><em>By Samantha Bates</em></p>
  3391. <p dir="ltr"><strong>Syllabus Notes: Prognosis Stage</strong></p>
  3392. <p dir="ltr"><span>Welcome to part 2 of our Ethical and Governance Challenges in AI syllabus! In part 1, the assigned readings and class discussion focused on understanding how the </span><span>social, technical, and philosophical roots </span><span>of autonomous systems contribute to problems related to fairness, interpretability, and adversarial examples. In the second stage of the course, the prognosis stage, the class considered the social implications of these problems. Perhaps the most significant takeaway from this stage was the realization that many of these problems are social or political problems and cannot be addressed through solely a legal or technical approach. </span></p>
  3393. <p><strong>Class Session 5: Prognosticating the impacts of unfair AI</strong></p>
  3394. <p dir="ltr"><span>Solon Barocas, an Assistant Professor at Cornell University, joined the class for the first day of the prognosis stage. We discussed his paper, "Big Data's Disparate Impact," which offered a legal and technical perspective on the use of algorithms in employment. </span></p>
  3395. <ul>
  3396. <li dir="ltr">
  3397. <p dir="ltr"><span>"</span><a href="https://perma.cc/YFW7-36L7"><span>Big Data's Disparate Impact</span></a><span>" by Solon Barocas and Andrew D. Selbst, California Law Review (2016)</span></p>
  3398. </li>
  3399. </ul>
  3400. <p dir="ltr"><span>On the first day of the prognosis stage, the focus of the class shifted from examining the technical mechanisms underlying autonomous systems to looking at the societal impact of those systems. The Barocas and Selbst paper discusses how data collection and data labeling can perpetuate existing biases both intentionally and unintentionally. The authors outline five main ways that datasets can be discriminatory: </span></p>
  3401. <ol>
  3402. <li dir="ltr">
  3403. <p dir="ltr"><span>Our own human biases may be integrated into a dataset when a human data miner determines the parameters that an autonomous system will use to make decisions. </span></p>
  3404. </li>
  3405. <li dir="ltr">
  3406. <p dir="ltr"><span>The training data might already be biased depending on how it was collected and how it was labeled. </span></p>
  3407. </li>
  3408. <li dir="ltr">
  3409. <p dir="ltr"><span>Data mining models consider a limited number of data points and thus may draw conclusions about an individual or a group of people based on data that is not representative of the subject. </span></p>
  3410. </li>
  3411. <li dir="ltr">
  3412. <p dir="ltr"><span>As Cathy O'Neil mentioned, prejudice may be introduced if the data points the model uses to make decisions are proxies for class membership.</span></p>
  3413. </li>
  3414. <li dir="ltr">
  3415. <p dir="ltr"><span>Discriminatory data mining could be intentional. However, the authors argue that unintentional discrimination is more common and harder to identify.</span></p>
  3416. </li>
  3417. </ol>
  3418. <p dir="ltr"><span>While there is legal doctrine that addresses discrimination in employment, the authors demonstrate that it is difficult to apply in practice, particularly in the data mining context. Title VII creates liability for intentional discrimination (disparate treatment) and for unintentional discrimination (disparate impact), but it is difficult to prove either type. For example, in order to hold employers liable for unintentional discrimination, the plaintiff must show that an alternative, nondiscriminatory method exists that will accomplish the same goals as the discriminatory practice. They must also prove that when presented with the alternative, the employer refused to consider it. Typically, an employer can mount a successful defense if they can prove they were unaware of the alternative or if there is a legitimate business reason for policies that may be discriminatory (the business necessity defense). </span></p>
  3419. <p>Bias in data mining is so difficult to identify, prove, and rectify in part because as a society, we have not determined the role of the law in addressing discrimination. According to one theory, the anticlassification theory, the law has an obligation to ensure that decision makers do not discriminate against protected classes in society. The opposing theory, the antisubordination theory, advocates a more hands-on approach and states that the law should work to "eliminate status-based inequality" at the societal level by actively improving the lives of marginalized groups. Our current society favors the anticlassification approach in part because the court established early on that antidiscrimination law was not solely intended to improve access to opportunities for protected classes. And while the authors demonstrate how data mining can exacerbate existing biases in the hiring context, there is a societal trade-off between prioritizing efficient decision making and eliminating bias.</p>
  3420. <p dir="ltr"><span>This reading also raises the question of who is responsible for fixing the problem. Barocas and Selbst emphasize that the majority of data mining bias is unintentional and that it may be very difficult to identify bias and employ technical fixes to eliminate it. At the same time, there are political and social factors that make fixing this problem in the legal system equally difficult, so who should be in charge of addressing it? The authors suggest that as a society, we may need to reconsider how we approach discrimination issues more generally.</span></p>
  3421. <p dir="ltr"><strong>Class Session 6: Prognosticating the impacts of uninterpretable AI</strong><span> </span></p>
  3422. <p dir="ltr"><span>For our sixth session, the class talked with Sandra Wachter, a lawyer and research fellow at the Oxford Internet Institute, about the possibility of using counterfactuals to make autonomous systems interpretable. </span></p>
  3423. <ul>
  3424. <li dir="ltr">
  3425. <p dir="ltr"><span>"</span><a href="https://perma.cc/TPX7-Y689"><span>Counterfactual Explanations Without Opening the Black Box: Automated Decisions and the GDPR</span></a><span>" by Sandra Wachter et al., Harvard Journal of Law and Technology (2018)</span></p>
  3426. </li>
  3427. <li dir="ltr">
  3428. <p dir="ltr"><span>[OPTIONAL] "</span><a href="https://perma.cc/EFQ3-MH9F"><span>Algorithmic Transparency for the Smart City</span></a><span>" by Robert Brauneis &amp; Ellen P. Goodman, Yale Journal of Law and Technology (2018)</span></p>
  3429. </li>
  3430. </ul>
  3431. <p>In our last discussion about interpretability, the class concluded that it is impossible to define the term "interpretability" because it greatly depends on the context of the decision and the motivations for making the model interpretable. The Sandra Wachter et al. paper essentially says that defining "interpretability" is not important and that instead we should focus on providing a way for individuals to learn how to change or challenge a model's output. While the authors point out that making these automated systems more transparent and devising some way to hold them accountable will improve the public's trust in AI, they primarily consider how to design autonomous models that will meet the explanation requirements of the GDPR. The paper's proposed solution is to generate counterfactuals for individual decisions (both positive and negative) that "provide reasons why a particular decision was received, offer grounds to contest it, and provide limited 'advice' on how to receive desired results in the future."</p>
  3432. <p>Not only would counterfactuals exceed the explainability requirements of the GDPR, the authors argue that counterfactuals would lay the groundwork for a legally binding right to explanation. Due to the difficulty of explaining the technical workings of an automated model to a lay person, legal concerns about protecting trade secrets and IP, and the danger of violating the privacy of data subjects, it has been challenging to provide more transparency around AI decision making. However, counterfactuals can serve as a workaround to these concerns because they indicate how a decision would change if certain inputs had been different rather than disclose information about the internal workings of the model. For example, a counterfactual for a bank loan algorithm might tell someone who was denied a loan that if their annual income had been $45,000 instead of $30,000, they would have received the loan. Without explaining any of the technical workings of the model, the counterfactual in this example can tell the individual the rationale behind the decision and how they can change the outcome in the future. Note that counterfactuals are not a sufficient solution to problems involving bias and unfairness. It may be possible for counterfactuals to provide evidence that a model is biased. However, because counterfactuals only show dependencies between a specific decision and particular external facts, they cannot be relied upon to expose all potential sources of bias or confirm that a model is not biased.</p>
  3433. <p>The optional reading, "Algorithmic Transparency for the Smart City," investigates the transparency around the use of big data analytics and predictive algorithms by city governments. The authors conclude that poor documentation and disclosure practices as well as trade secrecy concerns frequently prevented city governments from getting the information they needed to understand how the model worked and its implications for the city. The paper expands upon the barriers to understanding an autonomous model that are mentioned in the Watcher et. al. paper and also presents a great example of scenarios in which counterfactual explanations could be deployed.</p>
  3434. <p dir="ltr"><strong>Class Session 7: Prognosticating the impacts of adversarial examples</strong><span> </span></p>
  3435. <p dir="ltr"><span>In our third prognosis session, the class continued its discussion about adversarial examples and considered potential scenarios, specifically in medical insurance fraud, in which they could be used to our benefit and detriment. </span></p>
  3436. <ul>
  3437. <li dir="ltr">
  3438. <p dir="ltr"><span>"Adversarial attacks on artificial intelligence systems as a new healthcare policy consideration" by Samuel Finlayson, Joi Ito, Jonathan Zittrain et al., preprint (2019)</span></p>
  3439. </li>
  3440. <li dir="ltr">
  3441. <p dir="ltr"><span>"</span><a href="https://perma.cc/W46R-2GL7"><span>Law and Adversarial Machine Learning</span></a><span>" by Ram Shankar Siva Kumar et al., ArXiv (2018)</span></p>
  3442. </li>
  3443. </ul>
  3444. <p/>
  3445. <p dir="ltr"><span>In our previous session about adversarial examples, the class discussion was primarily focused on understanding how adversarial examples are created. The readings delve more into how adversarial examples can be used to our benefit and also to our detriment. "Adversarial attacks on artificial intelligence systems as a new healthcare policy consideration" considers the use of adversarial examples in health insurance fraud. The authors explain that doctors sometimes use a practice called "upcoding", when they submit insurance claims for procedures that are much more serious than were actually performed, in order to receive greater compensation. Adversarial examples could exacerbate this problem. For instance, a doctor could make slight perturbations to an image of a benign mole that causes an insurance company's autonomous billing code infrastructure to misclassify it as a malignant mole. Even as insurance companies start to require additional evidence that insurance claims are valid, adversarial examples could be used to trick their systems. </span></p>
  3446. <p>While insurance fraud is a serious problem in medicine, it is not always clearly fraudulent. There are also cases when doctors might use upcoding to improve a patient's experience by making sure they have access to certain drugs or treatments that would ordinarily be denied by insurance companies. Similarly, the "Law and Adversarial Machine Learning" paper encourages machine learning researchers to consider how the autonomous systems they build can both benefit individual users and also be used against them. The authors caution researchers that oppressive governments may use the tools they build to violate the privacy and free speech of their people. At the same time, people living in oppressive states could employ adversarial examples to evade the state's facial recognition systems. Both of these examples demonstrate that deciding what to do about adversarial examples is not straightforward.</p>
  3447. <p dir="ltr"><span>The papers also make recommendations for crafting interventions for problems caused by adversarial examples. In the medical context, the authors suggest that the "procrastination principle," a concept from the early days of the internet that argued against changing the Internet's architecture to preempt problems, might be applicable to adversarial examples as well. The authors caution that addressing problems related to adversarial examples in healthcare too early could create ineffective regulation and prevent innovation in the field. Instead the authors propose extending existing regulations and taking small steps, such as creating "fingerprint" hashes of the data submitted as part of an insurance claim, to address concerns about adversarial examples.</span></p>
  3448. <p dir="ltr"><span>In the "Law and Adversarial Machine Learning" paper, the authors emphasize that lawyers and policymakers need help from machine learning researchers to create the best machine learning policies possible. As such, they recommend that machine learning developers assess the risk of adversarial attacks and evaluate existing defense systems on their effectiveness in order to help policymakers understand how laws may be interpreted and how they should be enforced. The authors also suggest that machine learning developers build systems that make it easier to determine whether an attack has occurred, how it occurred and who might be responsible. For example, designers could devise a system that can "alert when the system is under adversarial attack, recommend appropriate logging, construct playbooks for incident response during an attack, and formulate a remediation plan to recover from an attack." Lastly, the authors remind machine learning developers to keep in mind how machine learning and adversarial examples may be used to both violate and protect civil liberties.</span></p>
  3449.        
  3450.    <img alt="" height="1" src="http://feeds.feedburner.com/~r/joi-ito/weblog/~4/4fR_VoaJk64" width="1"/></div>
  3451.    </content>
  3452.    <updated>2019-07-31T16:20:25Z</updated>
  3453.    <published>2019-03-25T23:05:24Z</published>
  3454.    <category scheme="http://www.sixapart.com/ns/types#category" term="Ethics and Governance in AI"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://joi.ito.com/weblog/2019/03/26/applied-ethical.html</feedburner:origLink>
  3455.    <author>
  3456.      <name>Joichi Ito</name>
  3457.      <uri>https://joi.ito.com</uri>
  3458.    </author>
  3459.    <source>
  3460.      <id>tag:joi.ito.com,2008-05-17:/weblog//1</id>
  3461.      <link href="https://joi.ito.com/weblog/" rel="alternate" type="text/html"/>
  3462.      <link href="http://feeds.feedburner.com/joi-ito/weblog" rel="self" type="application/atom+xml"/>
  3463.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  3464.      <subtitle>Joi Ito's conversation with the living web.</subtitle>
  3465.      <title>Joi Ito's Web</title>
  3466.      <updated>2019-08-07T19:32:23Z</updated>
  3467.    </source>
  3468.  </entry>
  3469.  
  3470.  <entry>
  3471.    <id>urn:uuid:d840d2d4-540b-47cb-91ef-d795e84f7651</id>
  3472.    <link href="http://plasmasturm.org/log/tabletimpact/" rel="alternate" type="text/html"/>
  3473.    <title>Glimmer of hope</title>
  3474.    <summary>Fraser Speirs on the long-term effect of the tablet</summary>
  3475.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><cite><a href="https://www.speirs.org/blog/2019/7/27/on-switching-from-ipad-to-chromebook-in-school" title="On Switching from iPad to Chromebook in School">Fraser Speirs</a></cite>:</p>
  3476.  <blockquote cite="https://www.speirs.org/blog/2019/7/27/on-switching-from-ipad-to-chromebook-in-school">
  3477.    <p>It’s also worth noting the significant impact that the rise of tablets has had on the design and capability of laptops. In 2010, laptops weighed four-plus pounds – not including a weighty charger – and got 3–4 hours of battery life. Today, they’ve halved in weight and more than doubled in battery life while getting faster, more robust and more flexible. In the final analysis, I think that the long-term effect of tablets will be that they forced laptops to get better.</p>
  3478.  </blockquote></div>
  3479.    </content>
  3480.    <updated>2019-07-31T10:23:59Z</updated>
  3481.    <published>2019-07-31T10:23:59Z</published>
  3482.    <category label="Seen" scheme="http://plasmasturm.org/" term="seen"/>
  3483.    <source>
  3484.      <id>urn:uuid:41632386-0f0d-11da-9fcb-dd680b0526e0</id>
  3485.      <icon>http://plasmasturm.org/favicon.ico</icon>
  3486.      <author>
  3487.        <name>Aristotle Pagaltzis</name>
  3488.        <email>[email protected]</email>
  3489.      </author>
  3490.      <link href="http://plasmasturm.org/" rel="alternate" type="text/html"/>
  3491.      <link href="http://plasmasturm.org/feeds/plasmasturm/" rel="self" type="application/atom+xml"/>
  3492.      <subtitle>musings in human and machine language</subtitle>
  3493.      <title>plasmasturm.org</title>
  3494.      <updated>2019-08-08T23:35:14Z</updated>
  3495.    </source>
  3496.  </entry>
  3497.  
  3498.  <entry>
  3499.    <id>http://www.allthingsdistributed.com/2019/07/aws-launches-middle-east-bahrain-region</id>
  3500.    <link href="http://www.allthingsdistributed.com/2019/07/aws-launches-middle-east-bahrain-region.html" rel="alternate" type="text/html"/>
  3501.    <title>Expanding the cloud to the Middle East: Introducing the AWS Middle East (Bahrain) Region</title>
  3502.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><img src="https://www.allthingsdistributed.com/images/bahrain.png" width="650"/></p>
  3503.  
  3504. <p>I'm happy to announce today that the new AWS Middle East (Bahrain) Region is now open! This is our first AWS Region in the Middle East and I'm excited by the opportunities the availability of hyper scale infrastructure will bring to organizations of all sizes. Starting today, developers, startups, and enterprises, as well as government, education, and non-profit organizations can run their applications and serve end users across the region from data centers located in the Middle East.</p>
  3505.  
  3506. <p>With this launch, our infrastructure now spans 69 Availability Zones across 22 geographic regions around the world. We have also announced plans for nine more Availability Zones in three more AWS Regions in Indonesia, Italy, and South Africa coming online in the next few years. The new AWS Middle East (Bahrain) Region offers three Availability Zones (AZs) at launch. AZs refer to data centers in separate distinct locations within a single Region that are engineered to be operationally independent of other AZs, with independent power, cooling, physical security, and are connected via a low latency network. AWS customers focused on running highly available applications can architect their applications to run in multiple AZs to achieve even higher fault-tolerance.</p></div>
  3507.    </content>
  3508.    <updated>2019-07-30T17:00:00Z</updated>
  3509.    <source>
  3510.      <id>http://www.allthingsdistributed.com/</id>
  3511.      <author>
  3512.        <name>Werner Vogels</name>
  3513.        <email>[email protected]</email>
  3514.      </author>
  3515.      <link href="http://www.allthingsdistributed.com/atom.xml" rel="self" type="application/atom+xml"/>
  3516.      <link href="http://www.allthingsdistributed.com/" rel="alternate" type="text/html"/>
  3517.      <title>All Things Distributed</title>
  3518.      <updated>2019-07-30T08:32:47Z</updated>
  3519.    </source>
  3520.  </entry>
  3521.  
  3522.  <entry xml:lang="en-US">
  3523.    <id>https://www.w3.org/blog/?p=18036</id>
  3524.    <link href="https://www.w3.org/blog/2019/07/w3c-at-view-source-conference/" rel="alternate" type="text/html"/>
  3525.    <title>W3C at View Source conference</title>
  3526.    <summary>If you are into the open Web and want to catch up on current and future exciting Web developments, then register to the View Source conference which W3C is helping organize in Amsterdam, on September 30 and October 1st! This year, the conference highlights how browser vendors and others, create and support Web standards. In […]</summary>
  3527.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0"><a href="https://www.w3.org/blog/wp-content/uploads/2019/07/Visual-ViewSource19.png"><img alt="View Source Amsterdam 2019" class="alignright wp-image-18040 size-medium" height="109" src="https://www.w3.org/blog/wp-content/uploads/2019/07/Visual-ViewSource19-300x109.png" width="300"/></a>If you are into the open Web and want to catch up on current and future exciting Web developments, then register to the <a href="https://2019.viewsourceconf.org/" rel="noopener noreferrer" target="_blank">View Source conference</a> </span><span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">which W3C is helping organize in Amsterdam, on September 30 and October 1st! </span></p>
  3528. <p><span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">This year, the conference highlights how browser vendors and others, create and support Web standards. In addition of <a href="https://mozilla-tito-vs.netlify.com/#schedule" rel="noopener noreferrer" target="_blank">two full days of talks</a>, this 5th edition gives more space to collaboration and sharing via breakout sessions and engagement programs, called “Conversation Corners”. </span></p>
  3529. <p><span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">W3C is staffing one of these corners, “<strong>Meet the W3C</strong>“, on Tuesday 1st October, at 3pm.  The <a href="https://www.w3.org/developers/" rel="noopener noreferrer" target="_blank">W3C developers</a> team, <a href="https://www.w3.org/People/#dom" rel="noopener noreferrer" target="_blank">Dominique Hazaël-Massieux</a> and <a href="https://www.w3.org/People/#mcf" rel="noopener noreferrer" target="_blank">Marie-Claire Forgue</a>, along with Yoav Weiss (co-chair of the <a href="https://discourse.wicg.io/">Web Platform Incubator Community Group</a>) and W3C Staff <a href="https://www.w3.org/People/#hidde" rel="noopener noreferrer" target="_blank">Hidde de Vries</a>, are ready to answer any questions you may have on how Web standards are built and how you too can get involved.</span></p>
  3530. <p>View Source Amsterdam is produced by Mozilla and was formed in collaboration with Microsoft, Google, Samsung, and W3C through the <a href="https://www.w3.org/blog/2017/10/w3c-to-work-with-mdn-on-web-platform-documentation/">MDN Product Advisory Board</a>. W3C supports and takes part to ensure exposure of ongoing standardization efforts to which developers can contribute. <span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0"><a href="https://ti.to/mdn/view-source-amsterdam-2019" rel="noopener noreferrer" target="_blank">Get your ticket now</a></span>!</p>
  3531. <h4>A whole week of Web!</h4>
  3532. <p>Looking to celebrate the whole week of Web? On Tuesday October 1st, there’s a post-View Source &amp; pre-Fronteers social event. Hosted by the folks at <a href="https://about.poki.com/" rel="noopener noreferrer" target="_blank">Poki</a>, who are on a mission to make <a href="https://poki.com/" rel="noopener noreferrer" target="_blank">Web games</a> awesome again. Space is limited though, so <a href="https://ti.to/mdn/view-source-amsterdam-2019-day2-social" rel="noopener noreferrer" target="_blank">RSVP here</a>.</p>
  3533. <p>On Wednesday 2 October, the Web activities continue with a <strong>Hack on MDN</strong> event, a day with a lot of hacking, chatting, food, and fun around <a href="https://developer.mozilla.org/" rel="noopener noreferrer" target="_blank">MDN</a>, the collaborative documentation platform for Web standards. The MDN team is looking for help and contributions in many areas, such as fleshing out MDN’s data about browser compatibility, and documenting Web standards, including HTML, CSS, JavaScript, and Web APIs.</p>
  3534. <p><span class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">Finally, extend your week’s experience with the <a href="https://fronteers.nl/congres/2019" rel="noopener noreferrer" target="_blank">Fronteers Conference</a>, 3-4 October, in Amsterdam too! Organized by <a href="https://fronteers.nl/about" rel="noopener noreferrer" target="_blank">Fronteers</a>, the Dutch professional association for front-end developers and W3C member, this event is one of Europe’s premiere conferences on front-end Web development. Check out their awesome <a href="https://fronteers.nl/congres/2019/schedule" rel="noopener noreferrer" target="_blank">program</a> and the spectacular line-up of <a href="https://fronteers.nl/congres/2019/speakers" rel="noopener noreferrer" target="_blank">19 speakers</a>!
  3535. </span></p></div>
  3536.    </content>
  3537.    <updated>2019-07-30T12:38:42Z</updated>
  3538.    <category term="Conference"/>
  3539.    <category term="Developers"/>
  3540.    <category term="Open Web"/>
  3541.    <author>
  3542.      <name>Marie-Claire Forgue</name>
  3543.    </author>
  3544.    <source>
  3545.      <id>https://www.w3.org/blog</id>
  3546.      <link href="https://www.w3.org/blog/feed/" rel="self" type="application/rss+xml"/>
  3547.      <link href="https://www.w3.org/blog" rel="alternate" type="text/html"/>
  3548.      <subtitle>Leading the Web to its Full Potential</subtitle>
  3549.      <title>W3C Blog</title>
  3550.      <updated>2019-08-18T02:29:31Z</updated>
  3551.    </source>
  3552.  </entry>
  3553.  
  3554.  <entry xml:lang="en-US">
  3555.    <id>https://www.w3.org/blog/?p=18033</id>
  3556.    <link href="https://www.w3.org/blog/2019/07/harmonized-accessibility-testing/" rel="alternate" type="text/html"/>
  3557.    <title>Harmonized Accessibility Testing</title>
  3558.    <summary>The first accessibility testing tools and methodologies emerged soon after first publication of the W3C Web Content Accessibility Guidelines (WCAG) in 1999. Already back then some of these implemented slightly different interpretations of WCAG. For example, a method may mistakenly fail text alternatives that are too long when that is not actually defined by WCAG. […]</summary>
  3559.    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The first accessibility testing tools and methodologies emerged soon after first publication of the <a href="https://www.w3.org/WAI/standards-guidelines/wcag/">W3C Web Content Accessibility Guidelines (WCAG)</a> in 1999. Already back then some of these implemented slightly different interpretations of WCAG. For example, a method may mistakenly fail text alternatives that are <em>too long</em> when that is not actually defined by WCAG. Another method may correctly mark that as a warning because it is advisory good practice. At the end, following one method could yield different results from following another.</p>
  3560. <p>This is not good. People trying to follow WCAG are confused by such conflicting results and waste a lot of valuable time trying to resolve these conflicts rather than actually implementing accessibility. It also reduces credibility and sheds negative light on accessibility overall. It is something that W3C and others have been trying to address for literally decades now.</p>
  3561. <p>For many years it seemed like developers of accessibility testing tools and methodologies protected the interpretations that they spend time and effort evolving. Using a uniform set of test rules seemed like losing the competitive edge and potentially losing out on business. Yet that is not true and the overall mindset in the field seems to be changing. More transparency, reliability, and credibility benefits everyone.</p>
  3562. <p>This is basically what the work on <a href="https://www.w3.org/WAI/standards-guidelines/act/">Accessibility Conformance Testing (ACT)</a> is about. Several developers of accessibility testing tools, testing methodologies, and other experts came together to develop a specification that defines a common format for writing test rules — the <a href="https://www.w3.org/TR/act-rules-format/">ACT Rules Format 1.0</a> specification.</p>
  3563. <p>Today ACT Rules Format 1.0 is a stable draft (called W3C Proposed Recommendation) with examples of <strong><a href="https://act-rules.github.io/rules/">ACT Rules</a></strong> being continuously developed by the <a href="https://www.w3.org/community/act-r/">W3C ACT Rules Community Group (CG)</a>. Hopefully some of these rules will soon be formally published by the <a href="https://www.w3.org/WAI/GL/">W3C Accessibility Guidelines Working Group (AGWG)</a>, along with the final version of the specification as a completed W3C standard.</p>
  3564. <p>While this only one more step of many along the long road towards harmonizing accessibility testing, it marks an important milestone. We now have a stable draft with demonstrated implementations, which you can help complete and leverage:</p>
  3565. <ul>
  3566. <li>If you are a developer of accessibility testing tools and methodologies or interested in this field, consider joining the <a href="https://www.w3.org/community/act-r/">W3C ACT Rules Community Group (CG)</a> to help develop and review test rules</li>
  3567. <li>If you use accessibility testing tools and methodologies, consider asking your vendor or developer how they implement <a href="https://act-rules.github.io/rules/">ACT Rules</a> developed by the community group</li>
  3568. <li>If you have comments on the <a href="https://www.w3.org/TR/act-rules-format/">ACT Rules Format 1.0</a> specification, consider commenting by 24 September 2019 at the latest</li>
  3569. <li>If you work for a W3C Member organization, consider asking your W3C Advisory Committee (AC) Representative if your organization supports the publication of this specification as a completed W3C standard</li>
  3570. <li>If you support accessibility, consider spreading the word on this work on harmonizing accessibility testing</li>
  3571. </ul>
  3572. <p>This work, in particular the development of <a href="https://act-rules.github.io/rules/">ACT Rules</a> through the <a href="https://www.w3.org/community/act-r/">W3C ACT Rules Community Group (CG)</a>, is supported EC-funded <a href="https://www.w3.org/WAI/about/projects/wai-tools/">WAI-Tools Project</a>. I want to take this opportunity to thank the funders and the many pioneers in past and recent efforts to make this work happen.</p></div>
  3573.    </content>
  3574.    <updated>2019-07-30T09:11:06Z</updated>
  3575.    <category term="Accessibility"/>
  3576.    <category term="Testing"/>
  3577.    <author>
  3578.      <name>Shadi Abou-Zahra</name>
  3579.    </author>
  3580.    <source>
  3581.      <id>https://www.w3.org/blog</id>
  3582.      <link href="https://www.w3.org/blog/feed/" rel="self" type="application/rss+xml"/>
  3583.      <link href="https://www.w3.org/blog" rel="alternate" type="text/html"/>
  3584.      <subtitle>Leading the Web to its Full Potential</subtitle>
  3585.      <title>W3C Blog</title>
  3586.      <updated>2019-08-18T02:29:31Z</updated>
  3587.    </source>
  3588.  </entry>
  3589.  
  3590.  <entry>
  3591.    <id>tag:www.ianbicking.org,2019-07-30:blog/2019/07/kling-axes-of-politics-technocrats.html</id>
  3592.    <link href="https://www.ianbicking.org/blog/2019/07/kling-axes-of-politics-technocrats.html" rel="alternate" type="text/html"/>
  3593.    <title>Kling’s Axes of Politics, and the Technocrats</title>
  3594.    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In <a href="https://cdn.cato.org/libertarianismdotorg/books/ThreeLanguagesOfPolitics.pdf">Arnold Kling’s <em>The Three Languages Of Politics</em></a> he argues that we don’t all exist along some set of objective political axes, left and right, or even the classic <a href="https://en.wikipedia.org/wiki/Nolan_Chart">two-dimensional spectrum</a> (or even <a href="https://en.wikipedia.org/wiki/File:Revised_NPOV_political_chart.jpg">three dimensions</a>). Instead different groups use different axes, or different dichotomies, to look at the world. <em>Because</em> we don’t share a common idea of good vs. bad, thus we cannot agree on what is good and bad, and so we disagree politically.</p>
  3595. <p>The free <span class="caps">PDF</span> of the book is linked above if you want to read his exposition. I first encountered it in a <a href="http://www.econtalk.org/kling-on-the-three-languages-of-politics/">podcast</a>. The idea is simple:</p>
  3596. <ul>
  3597. <li><strong>Liberals</strong> view political conflict as <strong>oppressed vs. oppressor</strong></li>
  3598. <li><strong>Conservatives</strong> view political conflict as <strong>civilization vs. barbarism</strong></li>
  3599. <li><strong>Libertarians</strong> view political conflict as <strong>freedom vs. coercion</strong></li>
  3600. </ul>
  3601. <p>None of this is meant to speak to the virtue or correctness of these political philosophies. Nor does political discourse directly reveal these beliefs. That’s why it’s so confusing: everyone is talking to the audience, slipping into different imagined value systems in the almost-useless attempt to “convince” someone of something. But underneath a conservative’s argument is an argument “you should do this in support of civilization and against barbarism”, while a liberal makes another argument “we must support these oppressed people in opposition to these oppressors” – applied to a specific political conflict the arguments bear no resemblance to each other and are entirely unconvincing to the other group.</p>
  3602. <p>Looking at political views using these underlying value systems has helped me make more sense of the world. Instead of being shocked at the hypocrisy of other people’s beliefs, it gives me a chance to feel some sense of empathy. It’s not always a forgiving lens: for instance, looking at modern conservatism as an expressions of a battle between civilization and barbarism makes it all seem even more racist. But at least things make sense, and the wildly different reactions different groups have to the same event or idea makes more sense.</p>
  3603. <p>(I don’t believe in this libertarian axis. It’s too close to the outward expression of libertarianism. If it was correct I think it would explain why anarchists and libertarians – outwardly sharing a value system of freedom vs. coercion – express their politics so differently.)</p>
  3604. <p>As helpful as these axes are, I looked at them and didn’t see myself. I often self-identify as liberal, but I know in my heart I am not. The axis of <em>oppressed vs. oppressor</em> makes that clearer to me: this is not my primary narrative lens, it’s not how I construct stories for myself when deciding how I feel about something.</p>
  3605. <p>My first reaction, maybe because my primary narrative is one of hubris, is that <strong>I</strong> am a <strong>realist</strong>. I’m above it all! Everyone else is stuck in their personal narratives, I just try to see things how they are.</p>
  3606. <p>This is nonsense of course. Even my younger self was suspicious of self-proclaimed “realists”, but an older me is confident it is self-indulgent bullshit, a way of projecting biases and perspectives onto an imagined truth without bothering to investigate what truth really is. The only realist is someone who knows the limits of their narrow perspective too well to call themselves a realist.</p>
  3607. <p>Still there’s nothing inherent in these three political groups and three axes. So I offer this additional axis:</p>
  3608. <ul>
  3609. <li><strong>Technocrats</strong> view political conflict as <strong>progress vs. superstition</strong></li>
  3610. </ul>
  3611. <p>I thought about “progress vs. regression”, but that seems too easy. They are logical opposites, sure, but they don’t express what draws me emotionally to one side and repels me from the other. Other options might be “progress vs. corruption” or “progress vs. romanticism.” It’s important to capture <strong>how change feels to people in the group</strong>.</p>
  3612. <p>I’m not even sure if these are “value systems” so much as <strong>descriptions of what winning and losing feels like</strong>. We imagine politics is (or should be) the making of rational arguments about different policies. Instead I think we tell each other stories about how we might win or lose. I don’t know the implications, but right now everyone feels like they are losing. Everyone.</p>
  3613. <p>Understanding how I frame winning and losing helps me be more at peace with the disagreements I have with other people, especially the people with whom I am close. I don’t want to condemn them those people, I don’t want to declare them as “wrong” (even only in my head). Agreeing to disagree by <em>understanding why we disagree</em> feels right.</p>
  3614. <p>I could continue with this post and argue why my axis is the correct axis. But I truly do not believe that it is. We’re better off with many value systems: there are many things I don’t care about, but that someone should care about. It’s not just balance, it’s like an ecology of individuals making up a moral society. (And yet, not every ecology is healthy…)</p></div>
  3615.    </summary>
  3616.    <updated>2019-07-30T05:00:00Z</updated>
  3617.    <author>
  3618.      <name>Ian Bicking</name>
  3619.    </author>
  3620.    <source>
  3621.      <id>https://www.ianbicking.org/</id>
  3622.      <link href="https://www.ianbicking.org/" rel="alternate" type="text/html"/>
  3623.      <link href="https://www.ianbicking.org/feeds/atom.xml" rel="self" type="application/atom+xml"/>
  3624.      <title>Ian Bicking: a blog</title>
  3625.      <updated>2019-07-30T05:00:00Z</updated>
  3626.    </source>
  3627.  </entry>
  3628.  
  3629.  <entry xml:lang="en-US">
  3630.    <id>https://programmingzen.com/?p=2008</id>
  3631.    <link href="http://feedproxy.google.com/~r/ZenAndTheArtOfRubyProgramming/~3/srwWnCDfiZs/" rel="alternate" type="text/html"/>
  3632.    <link href="https://programmingzen.com/kindle-vs-kobo/#comments" rel="replies" type="text/html"/>
  3633.    <link href="https://programmingzen.com/kindle-vs-kobo/feed/atom/" rel="replies" type="application/atom+xml"/>
  3634.    <title xml:lang="en-US">Kindle vs Kobo: Choosing the Right E-reader Ecosystem</title>
  3635.    <summary type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p>This post is about the Kindle vs Kobo ecosystems. If you prefer video, you can watch the video below from my new Tony on Tech channel. This is a brand new channel so feedback is appreciated. I recently ordered a new e-reader. The biggest decision was not so much which specific device to buy, but […]</p>
  3636. <p>The post <a href="https://programmingzen.com/kindle-vs-kobo/" rel="nofollow">Kindle vs Kobo: Choosing the Right E-reader Ecosystem</a> appeared first on <a href="https://programmingzen.com" rel="nofollow">Programming Zen</a>.</p></div>
  3637.    </summary>
  3638.    <content type="xhtml" xml:lang="en-US"><div xmlns="http://www.w3.org/1999/xhtml"><p class="has-background has-pale-cyan-blue-background-color">This post is about the <strong>Kindle vs Kobo</strong> ecosystems. If you prefer video, you can watch the video below from my new <a href="https://www.youtube.com/channel/UCpcYHwpexj4Uddn9A-1l2YA">Tony on Tech</a> channel. This is a brand new channel so feedback is appreciated.</p>
  3639.  
  3640.  
  3641.  
  3642. <figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
  3643.  
  3644. </div></figure>
  3645.  
  3646.  
  3647.  
  3648. <p>I recently ordered a new e-reader. The biggest decision was not so much which specific device to buy, but rather which ecosystem to marry into. Will the device I buy tie me to the Kindle ecosystem or the Kobo ecosystem? And which one is better?</p>
  3649.  
  3650.  
  3651.  
  3652. <h2>Kindle vs Kobo</h2>
  3653.  
  3654.  
  3655.  
  3656. <p>I owned both in the past and I did quite a bit of research to make up my mind this time around, so I’m sharing what I found with you.</p>
  3657.  
  3658.  
  3659.  
  3660. <p>When you buy a device like the recently announced <a href="https://amzn.to/32wYECj" rel="noreferrer noopener" target="_blank">Kindle Oasis 3</a> or the <a href="https://amzn.to/2XPOZIk" rel="noreferrer noopener" target="_blank">Kindle Paperwhite 4</a>, you essentially receive a fairly locked down device. EPUB files are not supported, and you’ll need to convert them to the MOBI format before being able to read them on your Kindle.</p>
  3661.  
  3662.  
  3663.  
  3664. <p>There are programs like <a href="https://calibre-ebook.com/" rel="noreferrer noopener" target="_blank">Calibre </a>to help you out with the process, but it’s still an extra step you must take and the results are not always perfect. On the plus side, you get access to Amazon’s huge catalog of books. Kobo has a giant catalog as well but it doesn’t quite match the Kindle Store. </p>
  3665.  
  3666.  
  3667.  
  3668. <p>Since Kobo offers devices that are more open, you’ll be able to buy EPUB from anywhere else on the web and read them on your Kobo device.</p>
  3669.  
  3670.  
  3671.  
  3672. <p>Still, there are definitely books that are only available on Kindle so you will occasionally run into a book you can’t have on Kobo. Kindle also offers you seamless integration with Goodreads (since Goodreads was bought by Amazon) which is nice if you keep track of your library there.</p>
  3673.  
  3674.  
  3675.  
  3676. <h2>Plenty of Books Available for Both</h2>
  3677.  
  3678.  
  3679.  
  3680. <p>The catalog size is really not a major issue. Both will make most people happy. The bigger difference here is one of philosophy.</p>
  3681.  
  3682.  
  3683.  
  3684. <p>If you are the kind of person who loves open source, you might dislike Amazon’s total control on the device. Kobo isn’t open source either, but it’s certainly more flexible and will read a variety of open formats, including the aforementioned EPUB.</p>
  3685.  
  3686.  
  3687.  
  3688. <p>It’s worth noting that Kobo books are mostly DRM EPUB, but nobody forbids you from buying DRM-free EPUB books (like <a href="https://pragprog.com/book/actb2/technical-blogging-second-edition" rel="noreferrer noopener" target="_blank">my own</a>) and reading them on your Kobo device.</p>
  3689.  
  3690.  
  3691.  
  3692. <h2>A Tale of Two Countries</h2>
  3693.  
  3694.  
  3695.  
  3696. <p>The differences I outlined so far are true regardless of where you live, but some important pros and cons are very much dependent on your location.</p>
  3697.  
  3698.  
  3699.  
  3700. <h3>Kindle vs Kobo in the US</h3>
  3701.  
  3702.  
  3703.  
  3704. <p>If you live in the US, the newest kindle devices will allow you to play audiobooks from <a href="https://amzn.to/2Y3FF33" rel="noreferrer noopener" target="_blank">Audible</a> (.com) through Bluetooth headphones.</p>
  3705.  
  3706.  
  3707.  
  3708. <p>You also can pay a monthly fee to receive access to Kindle Unlimited, which is a collection of over 1 million books available on an all-you-can-read basis, the book equivalent of Netflix if you will.</p>
  3709.  
  3710.  
  3711.  
  3712. <p>Many of these titles are indie or quite niche, but you’ll also find very popular titles like Harry Potter and The Handmaid’s Tale. </p>
  3713.  
  3714.  
  3715.  
  3716. <p>If you have Amazon Prime, you’ll also get access to Prime Reading which is a very small collection of Kindle books you get to read for free.</p>
  3717.  
  3718.  
  3719.  
  3720. <p>To date, there are about 1000 books in there, so don’t get too excited about it, but hey, if you’re already paying for Amazon Prime, you get them for free.</p>
  3721.  
  3722.  
  3723.  
  3724. <p>In the US, you also get to borrow and read on your Kindle, eBooks from the public library system through Overdrive. You can also lend and borrow ebooks from other Kindle users for up to 14 days.</p>
  3725.  
  3726.  
  3727.  
  3728. <h3>Kindle vs Kobo Outside the US</h3>
  3729.  
  3730.  
  3731.  
  3732. <p>Outside of the US, the story is quite a bit different. For example, in Canada, the Kindle catalog is smaller (including Kindle Unlimited), you can’t lend and borrow ebooks from friends, and you can’t borrow library ebooks on your Kindle e-reader.</p>
  3733.  
  3734.  
  3735.  
  3736. <p>Books tend to also be more expensive than their US counterpart, but in Canada, we are used to paying a premium for everything, except maple syrup and poutine. <img alt="&#x1F642;" class="wp-smiley" src="https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f642.png" style="height: 1em;"/></p>
  3737.  
  3738.  
  3739.  
  3740. <p>The newest Kindle devices don’t currently support Audible.ca either. This point is particularly annoying when you consider how much Amazon has been pressuring Canadians to switch from the US site to the Canadian one.</p>
  3741.  
  3742.  
  3743.  
  3744. <h2>Kobo’s Strengths</h2>
  3745.  
  3746.  
  3747.  
  3748. <p>Kobo, being originally a Canadian company, fares much better in Canada, by allowing people to borrow ebooks from the public library through Overdrive directly from the device, making the process even smoother than the one experienced by American Kindle users.</p>
  3749.  
  3750.  
  3751.  
  3752. <p>Integration with the Pocket service is also great, as it allows you to read longer articles you stored in your Pocket account while browsing the web on your desktop. </p>
  3753.  
  3754.  
  3755.  
  3756. <p>The closest thing Kindle has to this is offered by a third-party service called Instapaper, but it’s not as seamless in my experience.</p>
  3757.  
  3758.  
  3759.  
  3760. <p>Nevertheless, if you are an American reader, Kindle is a no-brainer, unless you have ideological reasons against getting an Amazon device. This is why it is estimated that over 83% of ebook readers in the US are Kindles.</p>
  3761.  
  3762.  
  3763.  
  3764. <p>Kobo is the second-largest player in America, and their partnership with Walmart will only help them out. But Amazon’s offering in the US is tough to beat unless you, again, take issue at the lack of open formats on the platform or really need a larger device, since Amazon discontinued e-ink devices with screens larger than 7″.</p>
  3765.  
  3766.  
  3767.  
  3768. <p>But if you are in Canada, the Kindle proposition starts to be a lot less appealing. To me, the lack of support for public libraries, in particular, is a major blow. </p>
  3769.  
  3770.  
  3771.  
  3772. <p>If you are an avid reader like I am, the cost of the device becomes almost irrelevant if you need to buy every book you read. And it’s not just me thinking this way. The majority of e-readers in the hands of Canadians are Kobo devices for a reason.</p>
  3773.  
  3774.  
  3775.  
  3776. <h2>The Device I ordered</h2>
  3777.  
  3778.  
  3779.  
  3780. <p>And that’s why I ordered a <a href="http://www.jdoqocy.com/c2111zw41w3JQRQLONOJLNRLKQNS?url=https%3A%2F%2Fwww.chapters.indigo.ca%2Fen-ca%2Fgifts%2Fproduct%2F681495007639-item.html&amp;cjsku=68149500763" rel="noreferrer noopener" target="_blank">Kobo Forma</a>, which is the equivalent of the Kindle Oasis 3, only it has an 8″ screen instead of the 7 inches of the Oasis.</p>
  3781.  
  3782.  
  3783.  
  3784. <div class="wp-block-image"><figure class="aligncenter is-resized"><img alt="" class="wp-image-2023" height="400" src="https://i2.wp.com/programmingzen.com/wp-content/uploads/2019/07/kobo-forma.jpg?resize=400%2C400&amp;ssl=1" width="400"/>The Kobo Forma</figure></div>
  3785.  
  3786.  
  3787.  
  3788. <p>It doesn’t support Bluetooth for audiobooks, but then again, in Canada, neither does the Oasis, and I listen to audiobooks on my phone while driving or at the gym, in any case.</p>
  3789.  
  3790.  
  3791.  
  3792. <p>One valid alternative would be to buy one of those Chinese Android tablets with e-ink displays, such as the <a href="https://amzn.to/2XTosoN" rel="noreferrer noopener" target="_blank">Onyx Boox series</a>. </p>
  3793.  
  3794.  
  3795.  
  3796. <p>Being Android devices, they will allow you to install both the Kindle and Kobo apps, as well as Overdrive, and any other regular Android app.</p>
  3797.  
  3798.  
  3799.  
  3800. <p>This way you could have the Kindle catalog and the ability to borrow library books, even in Canada. However, these devices tend to be quite a bit more expensive than even the top of the line Kindle or Kobo, they are not exactly bug-free, and perhaps they lose something by adding more capabilities.</p>
  3801.  
  3802.  
  3803.  
  3804. <p>If you are looking for an e-reader, less might be more. Part of the beauty of a device like the Kindle and Kobo lies in their distraction-free nature. The devices are simply not capable of doing much else but reading.</p>
  3805.  
  3806.  
  3807.  
  3808. <p>With a full-fledged tablet, even with an e-ink screen, you’re way more likely to become distracted.</p>
  3809. <p>The post <a href="https://programmingzen.com/kindle-vs-kobo/" rel="nofollow">Kindle vs Kobo: Choosing the Right E-reader Ecosystem</a> appeared first on <a href="https://programmingzen.com" rel="nofollow">Programming Zen</a>.</p>
  3810. <img alt="" height="1" src="http://feeds.feedburner.com/~r/ZenAndTheArtOfRubyProgramming/~4/srwWnCDfiZs" width="1"/></div>
  3811.    </content>
  3812.    <updated>2019-07-28T17:12:39Z</updated>
  3813.    <published>2019-07-17T21:06:28Z</published>
  3814.    <category scheme="https://programmingzen.com" term="Technology"/>
  3815.    <category scheme="https://programmingzen.com" term="e-reader"/>
  3816.    <category scheme="https://programmingzen.com" term="kindle"/>
  3817.    <category scheme="https://programmingzen.com" term="kindle vs kobo"/>
  3818.    <category scheme="https://programmingzen.com" term="kobo"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">https://programmingzen.com/kindle-vs-kobo/</feedburner:origLink>
  3819.    <author>
  3820.      <name>Antonio Cangiano</name>
  3821.      <uri>https://antoniocangiano.com</uri>
  3822.    </author>
  3823.    <source>
  3824.      <id>https://programmingzen.com/feed/atom/</id>
  3825.      <link href="https://programmingzen.com" rel="alternate" type="text/html"/>
  3826.      <link href="http://feeds.feedburner.com/ZenAndTheArtOfRubyProgramming" rel="self" type="application/atom+xml"/>
  3827.      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
  3828.      <subtitle xml:lang="en-US">Meditations on programming, startups, and technology</subtitle>
  3829.      <title xml:lang="en-US">Programming Zen</title>
  3830.      <updated>2019-08-03T20:39:37Z</updated>
  3831.    </source>
  3832.  </entry>
  3833. </feed>
  3834.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//planet.intertwingly.net/atom.xml

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda