<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Dietrich Ayala]]></title><description><![CDATA[Working towards true user agency through a distributed web.]]></description><link>/</link><generator>Ghost</generator><lastBuildDate>Tue, 12 May 2020 02:32:38 GMT</lastBuildDate><atom:link href="/rss/index.xml" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA["Experiments in Tab Unloading"]]></title><description><![CDATA[<p><strong>We implemented session restore in Firefox 2, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=328154">thirteen years ago</a>.</strong> This was back when we used CVS, automated tests weren&#39;t yet required, and everything we did was uphill both ways... in snow.</p>
<p>Tab unloading was a feature I <em>really</em> wanted, but it was lower priority, and discussions with our design team always went into the sarlaac pit of heuristics - when is the right time to unload the tab, without annoying the user by having to reload the page when they want it?</p>
<p>Being a <a href="https://metafluff.com/2017/07/21/i-am-a-tab-hoarder/">tab hoarder myself</a>, I wrote an extension that implements this feature for my own benefit, and also to learn a bit about what worked and didn&#39;t. I had to live without it for a bit after the great WebExtension migration, until the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1128502">right API was finally shipped</a> that supported the features I needed.</p>
<p>You can install this extension here: <a href="https://addons.mozilla.org/en-US/firefox/addon/dormancy/">https://addons.mozilla.org/en-US/firefox/addon/dormancy/</a></p>
<p><img src="dormancy.png" alt="Dormancy Options"></p>
<p>I&#39;d like to share a few things I learned while making and running this extension.</p>
<p><strong>TL;DR: My optimal heuristics for tab unloading are &quot;unload tabs 15 minutes after last focused&quot; + &quot;never unload tabs in active window&quot;.</strong></p>
<p>Here are my findings and recommendations for building a tab unloading feature. They&#39;re not exhaustive, just the set of things I learned in my experiments.</p>
<ul>
<li><p>Most important: Do not trust any ideas or assumptions you have about this. You must personally live with different heuristics for a few days or a week. Experience the pain of your assumptions. There&#39;s one assumption that is 100% correct: When this feature is tuned incorrectly, it is SUPER ANNOYING.</p>
</li>
<li><p>Personal and team testing is not enough. Do some research with real users. Write a test extension, and a blog post where people can test and provide feedback. Get as diverse set of testers as possible, and trust their feedback.</p>
</li>
<li><p>This is a feature for power users. The telemetry for tab-counts shows this to be true. The unloading heuristics should take that into account. The users who will ever see this feature in action are tiny subset of overall browser users, so it should be tuned specifically to their behavior. That behavior should be explored in the research (more on this below).</p>
</li>
<li><p>Time-since-tab-was-focused is the most important heuristic for me. While running Dormancy, I learned that 5 minutes of inactivity on a tab is wayyyy too low.  I&#39;ve settled on 15 minutes - it basically never surprises me, and I rarely experience a tab reload.</p>
</li>
<li><p>Ignore-active-window is the second most important heuristic, but only matters for multi-window users obviously. IIRC our telemetry says there aren&#39;t many multi-window users... well, maybe not enough for defaults around this. But for people with multiple long-lived windows, keeping active window alive is <em>fantastic</em>.</p>
</li>
</ul>
<p>About tab usage behavior - I&#39;ve only scratched the surface of this. I wrote a few extensions that reflect my behavior dashboard-style in the toolbar so I can get a sense for levels of activity for different actions:</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tab-count-button/">Show number of open tabs across all windows</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tabs-opened-button/">Show number of tabs opened today</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tabs-closed-button/">Show number of tabs closed today</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tabs-switched-button/">Show number of tab switches today</a></li>
</ul>
<p>These are shipped as separate extensions because you cannot adjust the width of toolbar icons, and I want all counts visible. They&#39;re all one extension, and the <a href="https://github.com/autonome/tabstatistics">source code is on Github</a>.</p>
<p><img src="tabstats.png" alt="Tab Statistics"></p>
<p>I&#39;ve only done some basic counting, but research into more complex interactions and behavior should be done. For example, how people traverse tabs will determine whether the feature really works for them. If they use keyboard shortcuts to move across large sets of tabs, it will not be effective in single window mode using only a timeout, because the last-focused-time will constantly be reset.</p>
<p>If you&#39;d like to learn more, there&#39;s <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=675539">a bug filed for this feature</a>, with many years of discussion.</p>
]]></description><link>/2018/11/27/tab-unloading/index.html</link><guid isPermaLink="true">/2018/11/27/tab-unloading/index.html</guid><category><![CDATA[Firefox]]></category><category><![CDATA[Tabs]]></category><category><![CDATA[UX]]></category><category><![CDATA[Extensions]]></category><category><![CDATA[WebExtensions]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Tue, 27 Nov 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA["Trumplandia: Portland's Independent Businesses and Gordon Sondland"]]></title><description><![CDATA[<p>Hey Portland, this one is going to burn a little.</p>
<p>While the global perception of Portland is of a liberal weirdo wonderland, some of our city&#39;s beloved bars and world-renowned products and brands are part of the Trump support network in the Pacific Northwest.</p>
<p><img src="gordon.png" style="max-width: 600px;"></p>
<p>Meet Gordon Sondland, who <a href="https://www.wweek.com/news/2017/04/21/report-portland-hotel-owner-covertly-steered-cash-to-trump/">donated $1,000,000 for Donald Trump inauguration parties</a>, and has received the ambassadorship to the EU. Read more about him on <a href="https://en.wikipedia.org/wiki/Gordon_Sondland">Wikipedia</a>.</p>
<p>He&#39;s the founder and CEO of <a href="https://provenancehotels.com/who-we-are">Provenance Hotels</a>, a company that owns a group of hotels in the Pacific Northwest, and a few other places around the country..</p>
<p>I started to make a list of these hotels, so I could recommend to people to stay elsewhere. While reading the Provenance website, I found this page:</p>
<p><img src="coconspirators.png" style="max-width: 600px;"></p>
<p>Whoa. These are some of the most successful names in Portland independent businesses. These are the people who make the things I love, and the spaces and menus I enjoy on a Friday night. What the fuck.</p>
<p>The Provenance website lists these <a href="https://provenancehotels.com/co-conspirators">&quot;co-conspirators&quot;</a> (their words, not mine... but apt!) in Portland.</p>
<p>I know these businesses aren&#39;t evil. But I believe that the world around us is constructed by the decisions we make. So I cannot support these businesses while they partner with Provenance Hotel group and Gordon Sondland.</p>
<p>Please support these businesses by letting them know your concern about the part they play in enriching the people that keep Trump in power, and support a civil society  by spending your money elsewhere until they&#39;ve stopped doing business with Provenance.</p>
<ul>
<li>Jacobsen Salt</li>
<li>Salt &amp; Straw</li>
<li>Lightning Bar Collective (Bye and Bye, Sweet Hereafter, Jackknife, Century)</li>
<li>Quin Candy</li>
<li>Austin Howe</li>
<li>Imperial, Vitaly Paley</li>
<li>Feast Portland</li>
<li>Steven Smith Teas</li>
<li>503 Media and Events, David Rae</li>
<li>Gemo Wong, Nike</li>
</ul>
<p>I hope these business will cut ties with Provenance, so I can support them again someday.</p>
<h2 id="hotels-owned-by-provenance">Hotels Owned By Provenance</h2>
<p><a href="https://provenancehotels.com/portfolio">Portfolio of Provenance Hotels Group</a></p>
<ul>
<li>Portland, OR<ul>
<li>Hotel deLuxe</li>
<li>Hotel Lucia</li>
<li>Sentinel</li>
<li>Dossier</li>
<li>Heathman Hotel </li>
<li>Westin Portland</li>
<li>The Benson</li>
</ul>
</li>
<li>Seattle, OR<ul>
<li>Hotel Max</li>
<li>Hotel Theodore</li>
</ul>
</li>
<li>Tacoma, WA<ul>
<li>Hotel Murano</li>
</ul>
</li>
<li>Nashville, TN<ul>
<li>Hotel Preston</li>
</ul>
</li>
<li>New Orleans, LA<ul>
<li>Old No. 77 Hotel and Chandlery</li>
</ul>
</li>
<li>Stillwater, MN<ul>
<li>Lora</li>
</ul>
</li>
</ul>
<h2 id="contribute-feedback-">Contribute? Feedback?</h2>
<p>Contact Dietrich Ayala (<a href="https://twitter.com/dietrich">@dietrich on Twitter</a> or <a href="https://mastodon.social/@dietrich">https://mastodon.social/@dietrich</a> )</p>
<p>If you&#39;re a Portland business owner listed above, and have stopped doing business with Provenance, thank you! Please reach out and I&#39;ll add a note about it.</p>
]]></description><link>/2018/09/13/trumplandia/index.html</link><guid isPermaLink="true">/2018/09/13/trumplandia/index.html</guid><category><![CDATA[Portland]]></category><category><![CDATA[Trump]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Thu, 13 Sep 2018 00:00:00 GMT</pubDate></item><item><title><![CDATA["UTC+5 and Above: My 2017 DevRel Wrap-up"]]></title><description><![CDATA[<p><img src="kids.png" alt="kids"></p>
<p>I&#39;m on the developer relations team at Mozilla. The &quot;devrel&quot; role has many parts, but generally means communicating to developers about web technologies important to Mozilla and <a href="https://www.mozilla.org/en-US/mission/">our mission</a>, and being an advocate for developers in our product development process.</p>
<p>I spent 2017 on typical developer relations activities - coding, writing, speaking - but entirely in UTC+5 and higher timezones. I&#39;d lived in Asia before, and learned how much <em>presence</em> matters in order to learn about a place, and also I wanted to reduce my carbon footprint by not flying back and forth across mega-oceans.</p>
<p>From a &quot;devrel at Mozilla&quot; perspective, I had specific reasons for doing this:</p>
<ul>
<li>The <a href="http://www.internetworldstats.com/top20.htm">largest internet populations are in Asia</a>, as well as the largest <em>offline populations</em>. We need to be where the users are, and where growth will happen in the future.</li>
<li>It&#39;s estimated that <a href="https://www.inc.com/will-yakowicz/shenzhen-city-of-electronics.html">~90% of the world&#39;s electronics are manufactured in Shenzen, China</a>. If we want to make a safer internet, then Shenzhen is a place we <em>must</em> be.</li>
<li>I wanted to learn about how technology decision making is happening - by developers, or otherwise, in as many different communities in Asia as possible.</li>
</ul>
<p>I&#39;ll be publishing a series of briefs on what I learned this year about things like mobile payment patterns and the rise of physical computing, the transient nature of mobile web task workflows, where technical decision making happens, the relationship between the web and messaging apps, cultural and community verticalism, timezone bias, app investor ecosystem, ethical echo-chambers, Chinese maker spaces, a survey of noodle soups across Asia, and more.</p>
<p>But first, here&#39;s my 2017 in review.</p>
<h2 id="firsts">Firsts</h2>
<p>It was a year with a few firsts:</p>
<ul>
<li>First keynote speaking appearances, three different events, each very different from the other.</li>
<li><a href="https://news.ycombinator.com/item?id=14823807">First time at #1 on Hacker News</a></li>
<li>First press briefings, in Taipei and Singapore</li>
<li><a href="https://www.npmjs.com/~dietrich">First modules published on NPM!</a></li>
</ul>
<h2 id="events">Events</h2>
<p>In 2017, I spoke at or facilitated 22 events in 12 different countries.</p>
<p>I specifically chose a diverse set of events, in an effort to learn about communities of technology decision-making outside the typical web developer or open source events. I spoke to high school and university students, designers, developers, open source die-hards, startup founders, entrepreneurs, investors, device manufacturers, academics, and people in various levels and roles in governments.</p>
<p>Some of the speaking happened because I submitted a proposal to conference CFPs, some from events reaching out to Mozilla for a speaker, some because I reached out to the organizer asking to speak, some from just being present and offering to speak, and one because I had a drink with a friend who introduced me to another friend whose dad ran a conference and thought I&#39;d be a good match.</p>
<ul>
<li><a href="http://barcampyangon.org/">Barcamp Yangon, Yangon, Myanmar, Jan 28-29</a>, &quot;Virtuality Reality on the Web&quot;</li>
<li><a href="http://phandeeyar.org/preparing-for-the-app-ocalypse-the-web-and-the-age-of-physical-computing/">Phandeeyar, Yangon, Myanmar, Feb 2</a>, &quot;Preparing for the App-ocalypse: The Web and the Age of Physical Computing&quot;</li>
<li><a href="https://www.facebook.com/events/1905375803079986/">Code for Nepal, Kathmandu, Nepal, Mar 4</a>, &quot;Preparing for the App-ocalypse&quot;</li>
<li><a href="https://www.facebook.com/events/1412248025474505/">Digital Nepal, Janakpur, Nepal, Mar 8</a></li>
<li><a href="https://2017.fossasia.org/schedule.html#s-2866">FOSSAsia, Singapore, Mar 17-19</a>, &quot;Integrated Physical Computing on the Web&quot; (<a href="https://engineers.sg/video/integrated-physical-computing-on-the-web-fossasia-2017--1567">video</a>)</li>
<li><a href="https://www.eventbrite.com/e/thailand-startup-summit-tss-2017-2nd-edition-tickets-29342367812#">Thailand Startup Summit, Bangkok, Thailand, Mar 31</a> (keynote), &quot;Touching the Future: Merging the Physical and Digital for Creative Experiences on the Web&quot;</li>
<li><a href="http://devday.org/en/">Dev Day Danang, Danang, Vietnam, Apr 16</a>, &quot;Preparing for the App-ocalypse: The Web in the Age of Physical Computing&quot;</li>
<li><a href="https://www.thingscon.nl/shenzhen/">ThingsCon Shenzhen, Shenzhen, China, May 17</a>, &quot;App-ocalypse Now: The Future of User Onboarding in IoT&quot;</li>
<li>Tech In Asia Singapore, Singapore, May 17-18</li>
<li>CommunicAsia, Singapore, May 23-25</li>
<li><a href="https://webconf.asia/talks">WebConf.asia, Hong Kong, June 3</a>, &quot;Touching the Future: Designing Physical Experiences with the Web&quot;</li>
<li><a href="https://hkoscon.org/2017/topics/preparing-for-the-app-ocalypse-the-web-in-the-age-of-physical-computing/">HKOSCON, Hong Kong, June 9-10</a> (keynote), &quot;Preparing for the App-ocalypse: The Web in the Age of Physical Computing&quot;</li>
<li><a href="https://www.facebook.com/events/276049929466918/">Mozilla Developer Conference, Taipei, Taiwan, Sept 22</a>, &quot;Designing Physical Experiences: The Web in the Age of Room-Scale Computing&quot;</li>
<li><a href="https://mzl.la/devroadshow">MDN Roadshow</a>, Kuala Lumpur, Malaysia, Sept 23, &quot;Designing Physical Experiences: The Web in the Age of Room-Scale Computing&quot;</li>
<li><a href="https://mzl.la/devroadshow">MDN Roadshow</a>, Penang, Malaysia, Sept 25, &quot;Designing Physical Experiences: The Web in the Age of Room-Scale Computing&quot;</li>
<li><a href="http://www.icmac.asia/">ICMAC</a>, Denpasar, Indonesia, Nov 16-17 (keynote), &quot;(Em)Powering Smart Cities: Designing for Resiliency in the Leapfrog Age&quot;</li>
</ul>
<p>I also spoke at, designed and ran or facilitated various trainings, workshops and briefings:</p>
<ul>
<li>Speaker training for the Mozilla Taipei university program, Jan 17</li>
<li>Facilitator for Common Voice design sprint, Mozilla Taipei, Apr 28-29</li>
<li>Spring Firefox press briefing, Taipei, May 19</li>
<li>Spring Firefox press briefing, Singapore, May 26</li>
<li>Augmented City VR/AR Workshop, VRARA &amp; Intel, Singapore, Jul 15</li>
<li>Speaker training for Mozilla dev conf, Mozilla Taipei, Sept 20</li>
</ul>
<h2 id="intent-to-ship">Intent To Ship</h2>
<p>Early in 2017 I scratched an itch I&#39;d been having around the &quot;Intent to...&quot; messages on Mozilla&#39;s dev.platform mailing list, and Blink&#39;s blink-dev mailing list. These &quot;intent&quot; messages are sent when either of these engines is changing their implementation of the web platform. These messages are extremely useful for communication between the browser vendors - which was validated by how quickly the tweets from this account got picked up by key members of Gecko and Blink development teams, being retweeted and favorited regularly.</p>
<p>Now, nine months after starting the account, it has only ~1600 followers, but they are largely influencers in web/browser devrel, or web platform implementors. And the tweets from the account had 375k impressions in the last month, according to Twitter&#39;s analytics.</p>
<ul>
<li><a href="http://twitter.com/intenttoship">@intenttoship on Twitter</a></li>
<li><a href="https://github.com/autonome/intenttoship-bot">Bot source code on Github</a></li>
<li>The bot runs on Glitch.com, with a cron.org keepy-uppy job</li>
</ul>
<p>Feed-to-tweet is a module I wrote for easily creating Twitter bots driven by feeds </p>
<ul>
<li><a href="https://github.com/autonome/feed-to-tweet">Feed-to-tweet source code on Github</a></li>
<li><a href="https://www.npmjs.com/package/feed-to-tweet">Feed-to-tweet on NPM</a></li>
</ul>
<p>Infinite-rss is a module I wrote for generating test feeds through URL configurations</p>
<ul>
<li><a href="https://github.com/autonome/infinite-rss">Infinite-rss source code on Github</a></li>
<li><a href="https://infinite-rss.glitch.me/?feedTitle=Teletubby%20Nightmares&amp;itemTitleBase=You%27ll%20never%20wake%20up.">Infinite-rss live endpoint on Glitch.com</a></li>
</ul>
<h2 id="performance">Performance</h2>
<p>Around the <a href="https://blog.mozilla.org/blog/2017/11/14/introducing-firefox-quantum/">Quantum launch</a> I started some work around performance testing, digging into some low-level performance characteristics of Firefox while running the <a href="https://mozilla.github.io/arewefastyet-speedometer/2.0/">Speedometer 2.0 benchmark</a>. It resulted in some handy cross-browser automation tooling - I implemented part of Chrome&#39;s Puppeteer API in Node.js.</p>
<p>Once it was easy to run Speedometer with multiple browsers and different versions, I added some measurements of things like CPU usage and disk IO. The work isn&#39;t done yet, but the most interesting learning yet is that it&#39;s beginning to look like the <em>quantity of writes</em>, irrespective of the amount of data, is the determining factor in performance on Mac for this particular test. More to come in 2018 on this.</p>
<ul>
<li><a href="https://github.com/autonome/quantum-testing">Automation scripts for cross-browser Speedometer testing on Mac</a></li>
<li><a href="https://github.com/autonome/puppeteer-fx">Puppeteer for Firefox on Github</a></li>
<li><a href="https://www.npmjs.com/package/puppeteer-fx">Puppeteer for Firefox on NPM</a></li>
</ul>
<h2 id="speech-recognition">Speech Recognition</h2>
<p>I worked with <a href="https://twitter.com/andrenatalbr">Andre Natal</a> to take the work done in the <a href="https://testpilot.firefox.com/experiments/voice-fill">Voice Fill Test Pilot experiment for Firefox</a>, and make it accessible to developers both for web and Node.js use.</p>
<p>Voice Fill is an extension, which uses a cloud-based speech recognition service run by Mozilla. It&#39;s a <em>private</em> cloud service - not connected to any type of account, and no audio is saved on our servers.</p>
<p>This means that developers who want to add speech recognition to their web pages, apps and devices can do so without having to buy into a cloud provider ecosystem.</p>
<p>I started by modularizing the extension code into a single library for web pages.</p>
<ul>
<li>Source is at <a href="https://github.com/mozilla/speaktome-web">speaktome-web on Github</a></li>
<li>Module is at <a href="https://www.npmjs.com/package/speaktome-api">speaktome-api on NPM</a></li>
</ul>
<p>I also wrote a module for using the service from Node.js in your own devices - a RaspberryPi with a USB microphone, for example. This was a fun jaunt through the various libraries that deal with mics and recording and codecs and I only cried a little bit. But it works pretty well now, so time well spent.</p>
<ul>
<li>Source is at <a href="https://github.com/mozilla/speaktome-node">speaktome-node on Github</a></li>
<li>Module is at <a href="https://www.npmjs.com/package/speaktome-node">speaktome-node on NPM</a></li>
</ul>
<h2 id="webextensions">WebExtensions</h2>
<p>I&#39;ve been writing browser extensions for Firefox since 2005, and in 2017 Mozilla made the biggest change in how extensions are written since they were initially added to the browser: The WebExtensions API. It&#39;s a change that sets the stage for Firefox to be much faster and safer while still being customizable. I spent some time migrating some of the extensions I&#39;d written that I just couldn&#39;t live without, and also doing some experimentation with making new browser APIs and a few more experiments.</p>
<ul>
<li><em>Tab hiding</em>: The tab groups extension needs an API for hiding and showing tabs, so I wrote an <a href="https://github.com/autonome/webext-experiment-showOnlyTheseTabs">experimental version of that API</a>.</li>
<li><em>Dormancy</em>: Once the tab.discard API was implemented, I ported Dormancy, an extension that unloads the web content in tabs after five minutes of not being used. <a href="https://github.com/autonome/Dormancy">Source code on Github</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/dormancy/">AMO listing</a></li>
<li><em>Peek</em>: An experiment in quick access to web content without breaking the user workflow. <a href="https://github.com/autonome/Peek">Source code on Github</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/peek/">AMO listing</a></li>
<li><em>Tab Statistics</em>: Extensions for showing different statistics about how you use tabs. It is implemented as a single extension, but since WebExtensions only allows a single menu item per extension, I listed four different versions on AMO, each showing a different piece of information. <a href="https://github.com/autonome/tabstatistics">Source code on Github</a><ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tab-count-button/">Tab Count on AMO</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tabs-opened-button/">Tabs Opened on AMO</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tabs-closed-button/">Tabs Closed</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/tabs-switched-button/">Tab Switches</a></li>
</ul>
</li>
<li><em>Force Google Locale</em>: Detect your locale, and add it to Google URLs. <a href="https://github.com/autonome/forcegooglelocale">Source code on Github</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/force-google-locale/">AMO listing</a></li>
<li><em>Vim Keybindings</em>: HJKL navigation on web pages. <a href="https://github.com/autonome/vimkeybindings">Source code on Github</a>, <a href="https://addons.mozilla.org/en-US/firefox/addon/vimkeybindings/">AMO listing</a></li>
<li><em>Always Right</em>: New tabs in the same place all the time forever. <a href="https://addons.mozilla.org/en-US/firefox/addon/always-right/">AMO listing</a>, <a href="https://github.com/autonome/Always-Right">Source code on Github</a></li>
</ul>
<h2 id="miscellanous-projects">Miscellanous Projects</h2>
<ul>
<li><em>Web and Messaging</em>: Research exploring how the web and messaging apps can play together. <a href="https://github.com/autonome/web-and-messaging">Research on Github</a></li>
<li><em>TreeViewSortable</em>: An extension for the Atom Editor for sorting the file tree in different ways. <a href="https://github.com/autonome/tree-view-sortable">Source code on Github</a></li>
<li><em>Twitter Inline Oembed</em>: Embed Tweets in a single line of code in your blog posts. <a href="https://github.com/autonome/twitter-inline-oembed">Source code on Github</a>, <a href="https://www.npmjs.com/package/twitter-inline-oembed">On NPM</a></li>
</ul>
<h2 id="writing">Writing</h2>
<p>While I had a few posts that I really liked and were successful, I really thought I&#39;d write more this year, and am disappointed by how little I managed to publish. I have a huge number of partially completed posts in my drafts folder. I need to create a habit of flexing the writing muscle regularly.</p>
<p>The big traffic post was about my absurd number of tabs. I did some basic performance testing across a bunch of versions of Firefox, which showed dramatic improvements in startup time even with more than 1000 tabs. I really didn&#39;t expect such a response - <a href="https://news.ycombinator.com/item?id=14823807">#1 on HackerNews</a> (537 comments!), coverage by loads of mainstream tech news outlets like <a href="http://www.zdnet.com/article/firefox-can-open-over-1500-tabs-in-15-seconds/">ZDNET</a>, and <a href="https://www.reddit.com/r/programming/comments/6otuw7/the_new_firefox_and_ridiculous_numbers_of_tabs/">pretty massive comment thread on /r/programming</a>.</p>
<ul>
<li>Jan 11 - <a href="https://medium.com/@dietrich/infectious-ideas-scaling-the-physical-web-c04bd1261fa2">Infectious Ideas: Scaling the Physical Web</a> (Medium post)</li>
<li>Jan 31 - <a href="https://medium.com/@dietrich/barcamp-yangon-2017-technology-community-and-the-largest-unconference-in-the-world-5966687fd84d">Barcamp Yangon 2017: Technology, Community and the Largest Unconference in the World</a> (Medium Post)</li>
<li>Mar 28 - <a href="https://metafluff.com/2017/03/28/fossasia2017/">FOSSAsia 2017</a> (blog post)</li>
<li>Jun 12 - <a href="https://medium.com/the-state-of-responsible-internet-of-things-iot/dietrichayala-115fda22a95a">Trust, Lies and Fitness Wearables</a>, for ThingsCon&#39;s State of Responsible IoT report</li>
<li>Jul 06 - <a href="https://metafluff.com/2017/07/06/aframe-augmented-city/">A-Frame Quickstart for Augmented City</a> (blog post)</li>
<li>Jul 12 - <a href="https://metafluff.com/2017/07/12/augmented-city-vr/">Augmented City - VR</a> (blog post)</li>
<li>Jul 20 - <a href="https://metafluff.com/2017/07/20/augmented-city-singapore/">Augmented City - Singapore</a> (blog post)</li>
<li>Jul 21 - <a href="https://metafluff.com/2017/07/21/i-am-a-tab-hoarder/">The New Firefox and Ridiculous Numbers of Tabs</a> (blog post)</li>
<li>Aug 08 - <a href="https://superyesmore.com/the-secret-of-flow-state-productivity-for-busy-people-a659c99de96aaa3c5e5780ebf3db24e7">The Secret of Flow State - Productivity for Busy People</a>, for SuperYesMore&#39;s Human in the Machine series</li>
<li>Sep 21 - <a href="https://hacks.mozilla.org/2017/09/always-right-a-webextension-migration-story/">Always Right – An Extension Migration Story</a>, for Mozilla Hacks</li>
</ul>
]]></description><link>/2017/12/13/2017-summary/index.html</link><guid isPermaLink="true">/2017/12/13/2017-summary/index.html</guid><category><![CDATA[Firefox]]></category><category><![CDATA[Mozilla]]></category><category><![CDATA[Devrel]]></category><category><![CDATA[Asia]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Wed, 13 Dec 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA["The New Firefox and Ridiculous Numbers of Tabs"]]></title><description><![CDATA[<p><img src="tabs.png" alt="Tabs!"></p>
<p>I&#39;ve got a Firefox profile with 1691 tabs.</p>
<p>I started trying to write down why, but gave up for now. It was becoming an overly long exploration of product design and the future of the web.</p>
<p>It&#39;s Friday. Let&#39;s keep things simple.</p>
<p>As you would expect, Firefox handled this profile quite poorly for a long time. I got used to multi-minute startup time, waiting 15-30 seconds for tabs from external apps to show up, and all manner of non-responsive behavio(u)r.</p>
<p>And then, quite recently, everything changed.</p>
<h2 id="quantum-flow">Quantum Flow</h2>
<p>Right now, more effort is being put into making Firefox fast than I&#39;ve seen since... well, since I&#39;ve been working on Firefox. And I&#39;ve been at Mozilla for more than a decade.</p>
<p>Part of this effort is a project called Quantum Flow - a bunch of engineers making changes that directly impact Firefox responsiveness. To learn more and follow along with these efforts, read <a href="https://ehsanakhgari.org/tag/quantumflow">Ehsan Akhgari&#39;s weekly posts</a>.</p>
<p>A lot of the improvement in this particular scenario is from Kevin Jones&#39; work on bringing the overall cost of unloaded tabs as close to zero as possible. While the major work has landed, the work continues in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=906076">Bug 906076</a>. Huge amounts of thanks for the recent wins for us pathological tab hoarders go to Kevin, Dão Gottwald, Mike de Boer, Tim Taubert, David Teller, Mike Conley, and Gijs Kruitbosch.</p>
<h2 id="test-scenario">Test Scenario</h2>
<p>I took my 1691 tab browser profile, and did a wall-clock measurement of start-up time and memory use for Firefox versions 20, 30, 40, and 50 through 56.</p>
<p>These are my personal results. You might not get the same results. If you test 1691 (or even 1692) tabs and find something totally different, I&#39;d love to hear about it.</p>
<p>Notes:</p>
<ul>
<li><p>I shut down most things on my Macbook (yeah the little one that&#39;s more like a glorified iPad).</p>
</li>
<li><p>I turned off wifi. This is a measurement of Firefox, not the network, nor web page rendering.</p>
</li>
<li><p>I measured by eyeball, using &quot;time cat&quot; on the command line. This might seem weird, but c&#39;mon - I&#39;m measuring <em>minutes</em>. Microsecond precision is not required.</p>
</li>
<li><p>I measured startup time five times, dropping highs and lows. Even that wasn&#39;t really necessary - the times were <em>startingly consistent</em>. With almost 1700 tabs and &gt;5 minute startup, the standard deviation was negligible.</p>
</li>
<li><p>For measuring startup time, I killed the timer when the &quot;server not found&quot; page finished being rendered in the active tab. After lots of testing, I consistently found this to be the point at which the application as a whole became responsive and usable.</p>
</li>
<li><p>For memory, I waited for one minute after the startup measurement point and then grabbed the total value from the bottom of about:memory. I waited one minute, because I observed a consistent spike in memory after startup which went away within the first minute and then stabilized for a long period after. It&#39;s all kinds of initialization that doesn&#39;t need to block the app from starting, but needs to happen once you get to browsing.</p>
</li>
<li><p>I tested Firefox versions 20, 30, 40, and 50 through 56. I tried testing Firefox 10 but it permahung while loading the profile.</p>
</li>
</ul>
<h2 id="start-up-time">Start-up Time</h2>
<p>Graph of startup time with 1691 tabs across Firefox versions 20, 30, 40 and 50 - 56. The Y axis is <em>minutes</em>. Yes, Firefox 51 took almost <em>8 MINUTES</em> to start up. However, as of Firefox 55 it only takes <em>15 seconds</em>. For 1691 tabs. Really. I no longer fear restarts. Lately, I just restart Firefox for fun sometimes.</p>
<p><img src="startup.png" alt="Startup time"></p>
<p>It&#39;s interesting that Firefox startup time got consistently <em>worse</em> over time until Firefox 51. It&#39;d be interesting to do this test with varying numbers of tabs and find out at what point these types of regressions become noticeable.</p>
<h2 id="memory-usage">Memory Usage</h2>
<p>Graph of memory use one minute after startup with 1691 tabs across Firefox versions 20, 30, 40 and 50 - 56. While consistently using around two gigs of memory, we&#39;ve now reduced to <em>less than half a gig</em>. Yes, this is without actual web pages loaded, but look at this, haters: I&#39;ve now got 1.5 gigs of memory to load web pages into that I didn&#39;t have before.</p>
<p><img src="memory.png" alt="Memory use"></p>
<p>The efforts that the Firefox and Gecko and Servo teams are putting into making a SUPERFUCKINGFAST browser are having a real impact, and that&#39;s exciting to see.</p>
]]></description><link>/2017/07/21/i-am-a-tab-hoarder/index.html</link><guid isPermaLink="true">/2017/07/21/i-am-a-tab-hoarder/index.html</guid><category><![CDATA[Firefox]]></category><category><![CDATA[Performance]]></category><category><![CDATA[Tabs]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Fri, 21 Jul 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA["Augmented City - Singapore"]]></title><description><![CDATA[<p>This post is part of the Augmented City series. The <a href="https://metafluff.com/2017/07/06/aframe-augmented-city/">first post is introduced A-Frame</a> as a tool for creating 3D content for the web. The second post introduced <a href="https://metafluff.com/2017/07/12/augmented-city-vr/">VR on the web</a>. These were prep posts for the event attendees. This post is about the design and goals for the <a href="https://www.eventbrite.com/e/vrar-maker-lab-augmented-city-creating-vr-ar-web-content-showcasing-singapore-tickets-35297738486">first event</a>, and how it went.</p>
<p>We brought a group of developers and designers together for a day to explore how a city can be experienced using VR and AR. The day was split into a lightweight ideation workshop in the morning and team coding after lunch. The technical focus was to use A-Frame, a declarative 3D authoring tool for VR on the web, to rapidly prototype the ideas from the morning.</p>
<p><blockquote class="instagram-media" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:28.10185185185185% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/BVJQaVMgKpX/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by rockintosh (@rockintosh)</a> on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-06-10T03:52:06+00:00">Jun 9, 2017 at 8:52pm PDT</time></p></div></blockquote></p>
<script async defer src="//platform.instagram.com/en_US/embeds.js"></script>

<h2 id="event-concept-the-un-hackathon">Event Concept: The Un-Hackathon</h2>
<p>Augmented City is an experimental event series created collaboratively by the <a href="https://m.facebook.com/XR-Alliance-1703741423255746/">XR Alliance</a> and <a href="https://www.mozilla.org">Mozilla</a>. The kickoff of this first installment was supported by <a href="https://www.intel.sg/content/www/xa/en/homepage.html">Intel</a>, and was in Singapore on July 15, 2017.</p>
<p><a href="https://twitter.com/vanradd">Vanessa Radd</a>, <a href="https://twitter.com/chrisgomez">Chris Gomez</a> and I met at <a href="https://metafluff.com/2017/03/28/fossasia2017/">FOSSAsia in March</a>, and they reached out about doing an event together where professionals can learn and create VR and AR experiences together as a group.</p>
<p>We wanted an event that...</p>
<ul>
<li><p>Had a specific theme, instead of an overly broad prompt of &quot;make stuff!&quot;</p>
</li>
<li><p>Was oriented towards experienced professionals, not beginners (there are loads of those events already)</p>
</li>
<li><p>Welcomed both developers and designers</p>
</li>
<li><p>Had a focus on actually <em>making something</em>, not a series of talks</p>
</li>
<li><p>Was <em>not</em> competitive - no &quot;winners&quot; and &quot;losers&quot;, no prizes</p>
</li>
<li><p>Treated the participants humanely: One day, no overnights, start at a reasonable hour, and serve healthy food (no pizza!)</p>
</li>
</ul>
<p>The theme that Chris came up with was &quot;augmented city&quot;, which is flexible and broad enough that we could do a series of events, possibly in different cities, experimenting with the format to refine it over time.</p>
<p><img src="ideation.png" alt="ideation"></p>
<h2 id="event-design-the-un-hackathon">Event Design: The Un-Hackathon</h2>
<p>In May I&#39;d helped out at the <a href="https://moztw.kktix.cc/events/voice-jam">Mozilla VoiceJam</a>, a two-day design sprint with <a href="https://twitter.com/mikehenrty">Michael Henretty</a> and <a href="https://shinglyu.github.io/">Shing Lyu</a>, which invited local designers, researchers and developers to get together to come up with ways to get people to donate their voices for <a href="https://voice.mozilla.org/">Project CommonVoice</a>.</p>
<p>At that event we used some of the human-centered design practices in <a href="https://toolkit.mozilla.org/">Mozilla&#39;s Open Innovation Toolkit</a> to help the group come up with ideas and refine them over two days.</p>
<p>At this event, I wanted to take it a step further and see if we can take a group from innovation prompt to <em>working code</em> in <em>one day</em>.</p>
<p>I wanted the participants to spend time thinking divergently on the overall topic, in order to reset their imaginations - sort of a palate cleanser for the day. I also wanted them thinking divergently within their selected project area, to reduce attachment to previously conceived project ideas (their own, or seeded by our prep materials).</p>
<p>The prompt for the day was:</p>
<blockquote>
<p>&quot;How can we augment or virtualize our experience of Singapore in ways that are interesting, engaging and fun?&quot;</p>
</blockquote>
<p>The main parts of the final program:</p>
<ul>
<li>Prep participants in advance on A-Frame.</li>
<li>Create teams on arrival.</li>
<li>Ideation round on innovation prompt.</li>
<li>Ideation round on project ideas.</li>
<li>Team coding.</li>
</ul>
<p>We wanted a mix of developers and designers, so on the Eventbrite page, offered tickets for each. This means we knew in advance that the ratio was almost 50/50.</p>
<p><img src="teamcam.png" alt="team cam"></p>
<h2 id="how-the-day-went">How The Day Went</h2>
<p><em>Prep:</em> We published a few blog posts to prep the participants for A-Frame and how to do VR on the web, including those in the pre-event emails. However, in a show of hands at the actual event, we found almost nobody read any of the material. Lesson learned! </p>
<p><em>Teams:</em> As we knew the participants were split down the middle, I put post-its marked with numbers in two stacks by the doors, one stack for developers and another for designers, that matched with corresponding numbers on the tables. This way, teams were selected at random, divided evenly by role, and and no time was wasted during the event on team-making. A sound strategy in theory. In reality, the people who showed up were almost exclusively developers.</p>
<p><em>Topic Ideation:</em> This was a sped-up version of the <a href="https://toolkit.mozilla.org/method/idea-generation/">Idea Generation</a> process of diverging then converging ideas from the group, done in teams with post-its at their tables. The teams seemed to have a blast, and the exercise seemed useful in helping design the landscape of ideas for the rest of the day.</p>
<p><em>Project Ideation:</em> We used the same Idea Generation process as before, but seeded it the top two categories from the first ideation round. The goal here was to narrow down all the project ideas generated based on the categories in the first round, into one project idea. It definitely was successful in generating project ideas from categories, but the narrowing didn&#39;t really work - teams had multiple ideas and really needed more time to coalesce on one.</p>
<p><em>Coding:</em> Almost two-thirds of the time of the event was allocated to actually making the selected idea. This was good, as the first two hours was spent getting people up to speed on A-Frame. As people got more comfortable with the tool and dev workflow, the pace and excitement quickened, with people showing the things they got working. Some teams worked together on one idea, some teams worked on their individual ideas, but communicating and sharing as they went.</p>
<p><em>Closing:</em> At 5:30pm, people were still focused and coding, with the occasional whoop when something worked. We did a quick share around the room, had a conversation about how people felt about the event itself, and closed it down.</p>
<p><img src="arjs.png" alt="ar.js"></p>
<h2 id="notes-for-next-time">Notes for Next Time</h2>
<ul>
<li><p>Move any prep material into the event itself. Next time I&#39;d add a one-hour A-Frame bootstrap workshop into the program, maybe even before the ideation section...</p>
</li>
<li><p>Make teams only once everyone is in the door. Was a nice experiment, but too much can go wrong, forcing time to be used to readjust teams later anyway.</p>
</li>
<li><p>Before team-making, do a whole-group activity, even it&#39;s speed intros.</p>
</li>
<li><p>Redesign the ideation parts to be one session with multiple activities that results clearly in <em>one and only one</em> project.</p>
</li>
<li><p>Glitch <em>worked</em>. People were able to get examples up and running in no time at all, and started remixing them to meet their own project needs. </p>
</li>
<li><p>Common issues that came up when working with A-Frame: How to load transparent PNGs, how to position a specific part of a 360 degree photo as the default view, and how to train AR markers, how to use the and reference assets, and what exactly to modify when you&#39;ve got an asset, a link and the actual entity itself.</p>
</li>
<li><p>Things that came easy in A-Frame were almost entirely due to the flow of being able to remix the examples on aframe.io on Glitch. Once I showed people that flow, things really got moving. However, it also meant that the projects all contained the same layouts, default entities, text, etc. Need to find a way to use that flow but encourage visual differentiation.</p>
</li>
<li><p>I need to make a better set of A-Frame starter Glitch examples for AR scenarios based on my demos. Right now they&#39;re too hard to remix.</p>
</li>
</ul>
<p>Overall the event went really well. Most gratifiying was seeing how focused everyone was in the afternoon, and how many people stuck to the theme. People definitely were deep in the flow, using A-Frame to bring their ideas to life, which is a win.</p>
<p>The resources, links and projects from the event are all collected on the <a href="https://github.com/augmented-city/singapore">augmented-city/singapore repo</a> on Github.</p>
<p>See you at the next one!</p>
<p><img src="shareoff.png" alt="share-off"></p>
]]></description><link>/2017/07/20/augmented-city-singapore/index.html</link><guid isPermaLink="true">/2017/07/20/augmented-city-singapore/index.html</guid><category><![CDATA[vr]]></category><category><![CDATA[aframe]]></category><category><![CDATA[webvr]]></category><category><![CDATA[augmented city]]></category><category><![CDATA[singapore]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Thu, 20 Jul 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA["Augmented City - VR"]]></title><description><![CDATA[<p>Hello! This guide is written for the <a href="https://www.eventbrite.com/e/vrar-lab-augmented-city-creating-vr-ar-web-content-showcasing-singapore-tickets-35297738486">Augmented City AR/VR lab</a> in Singapore on July 15th 2017, but might be helpful for anyone looking to jump into A-Frame. The <a href="http://metafluff.com/2017/07/06/aframe-augmented-city/">first post is introduced A-Frame</a> as a tool for creating 3D content for the web. This post introduces VR on the web. The next and final post in the Augmented City prep series will be about AR on the web.</p>
<p><blockquote class="instagram-media" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:28.10185185185185% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/BVJQaVMgKpX/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by rockintosh (@rockintosh)</a> on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-06-10T03:52:06+00:00">Jun 9, 2017 at 8:52pm PDT</time></p></div></blockquote></p>
<script async defer src="//platform.instagram.com/en_US/embeds.js"></script>


<h2 id="vr">VR</h2>
<p>With every passing day, virtual reality is becoming less weird and more a fact of life for developers and designers everywhere.</p>
<p>VR hardware isn&#39;t ubiquitous yet, and is actually still both cumbersome and expensive. Momentum is gathering regardless, both in experimentation and business investment.</p>
<p>The web is the largest deployment surface with the least friction for content of any kind. Given the still early stage that VR is at, being able to make it and publish it on the web provides the innovation vector that is required for VR to succeed.</p>
<h2 id="webvr">WebVR</h2>
<p>WebVR is a standard for exposing VR hardware capabilities to the software context of web applications, and then rendering the page to that hardware. The specification describes an API in JavaScript for enumerating HMDs and controllers, among other things.</p>
<p>Mozilla, Google and others have been working together over the last couple of years to develop the standard, and are now starting to ship the initial versions. The specification was tagged at version 1.1 but is not yet finalized, so implementations may yet change.</p>
<ul>
<li>WebVR spec development is driven by the <a href="https://www.w3.org/community/webvr/">W3C WebVR Community Group</a></li>
<li><a href="https://w3c.github.io/webvr/">WebVR draft specification on W3C&#39;s Github</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/WebVR_API">WebVR API documentation on MDN</a></li>
<li>Most conversation happens on the <a href="https://webvr-slack.herokuapp.com/">WebVR Slack</a></li>
</ul>
<p><img src="simba.png"></p>
<h2 id="browser-support-for-webvr">Browser Support for WebVR</h2>
<ul>
<li>Firefox: Supported on Windows and Android since version 55 (beta at the time of this post), and in nightly builds on Mac.</li>
<li>Chrome: Supported, but off by default, need to flip a flag.</li>
<li>Edge: Supported unprefixed as of build 15002+ on Desktop, Mixed Reality, Mobile and Xbox.</li>
<li>Safari: Unsupported, but Apple just joined the WebVR community group, so there&#39;s a possibility of support but no explicit statement yet.</li>
<li>Samsung: Supported on Samsung Internet Browser for GearVR.</li>
</ul>
<h2 id="mobile-and-the-webvr-polyfill">Mobile and the WebVR Polyfill</h2>
<p>Smartphones can be used for WebVR experiences inside &quot;cardboard&quot; or other devices designed to contain a smartphone for HMD-like experiences.</p>
<p>These most often use the <a href="https://github.com/googlevr/webvr-polyfill">WebVR Polyfill</a>, a JavaScript library created by Google which mimics the WebVR API functionality, rendering the scene for each eye in software. Libraries like Three.js and A-Frame use the polyfill when no hardware is detected.</p>
<p>If you open an A-Frame scene on your mobile phone and touch the HMD icon, the polyfill will kick in and you&#39;ll see the scene rendered for each eye separately, and you can then insert the phone inside a VR viewing device.</p>
<p>The polyfill uses the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Detecting_device_orientation">orientation web API</a>, so even responds to your movement, allowing you to look all around within the scene.</p>
<p><img src="cardboard.jpg"></p>
<h2 id="hmd-support">HMD Support</h2>
<p>Currently both retail versions of the HTC Vive and the Oculus Rift work with Firefox and Chrome&#39;s implementations of WebVR. Instructions for all of these combinations are at <a href="https://mozvr.com/#start">Mozvr.com</a>.</p>
<p>Microsoft Edge only supports their Mixed Reality hardware at this time.</p>
<p>David Rousset <a href="https://www.davrous.com/2017/07/07/from-zero-to-hero-creating-webvr-experiences-with-babylon-js-on-all-platforms/">wrote a great overview</a> of writing a WebVR application that works in all hardware platforms, with this excellent visualization of browsers and hardware platforms. One thing to add is Firefox Android also supports WebVR from version 55.</p>
<p><img src="davidroussetmatrix.jpg"></p>
]]></description><link>/2017/07/12/augmented-city-vr/index.html</link><guid isPermaLink="true">/2017/07/12/augmented-city-vr/index.html</guid><category><![CDATA[vr]]></category><category><![CDATA[aframe]]></category><category><![CDATA[webvr]]></category><category><![CDATA[augmented city]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Tue, 11 Jul 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA["A-Frame Quickstart for Augmented City"]]></title><description><![CDATA[<p>Hello! This guide is written for the <a href="https://www.eventbrite.com/e/vrar-lab-augmented-city-creating-vr-ar-web-content-showcasing-singapore-tickets-35297738486">Augmented City AR/VR lab</a> in Singapore on July 15th 2017, but might be helpful for anyone looking to jump into A-Frame. This first post will orient you to A-Frame itself, and the couple following will focus on VR and AR. Enjoy!</p>
<p><blockquote class="instagram-media" data-instgrm-version="7" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:28.10185185185185% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/BVJQaVMgKpX/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by rockintosh (@rockintosh)</a> on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-06-10T03:52:06+00:00">Jun 9, 2017 at 8:52pm PDT</time></p></div></blockquote></p>
<script async defer src="//platform.instagram.com/en_US/embeds.js"></script>

<h2 id="augmented-city">Augmented City</h2>
<p>The Augmented City event is an all-day workshop focused on quickly prototyping AR/VR experiences on the web, and with a theme of Singapore itself.</p>
<p>What does an augmented Singapore look like? What can it do? What can you do in it? Maybe it tells its own story - its history. Maybe it shows you what music is happening nearby, or which hawker stalls you should try. Maybe lets you see <a href="http://nationalmuseum.sg/exhibitions/exhibition-list/singapore-very-old-tree">trees that used to be</a>, or shows visualizations of the <a href="https://en.wikipedia.org/wiki/Port_of_Singapore#/media/File:KITLV_-_150813_-_Lambert_%26_Co.,_G.R._-_Singapore_-_Port_at_Singapore_-_circa_1890.tif">changing waterline</a> over time as the city grew.</p>
<p>Some more ideas: </p>
<ul>
<li><p>I love <a href="https://www.instagram.com/p/BVl2DJgAwgJ/">these visuals from @rockintosh on Instagam</a> - the ArtScience Museum disintegrating and floating away is fantastic. </p>
</li>
<li><p>Use public data to create 3D and virtual maps with tools like <a href="https://github.com/UDST/vizicities">Vizicities</a>.</p>
</li>
<li><p>Vive put up a post with a bunch of <a href="https://blog.vive.com/us/2017/05/12/experience-history-in-vr/">examples of teaching history through VR</a>, and the BBC made <a href="http://www.bbc.co.uk/taster/projects/romes-invisible-city-vr">this exploration of the Pantheon in Rome</a>. I&#39;ve been playing with a model of Kowloon Walled City in Hong Kong (but it&#39;s not ready yet...). What in Singapore&#39;s history can you recreate virtually?</p>
</li>
<li><p>These <a href="https://www.instagram.com/p/BV9TapglsAq/">&quot;following eyes&quot; from NYPSIDM students</a> here in Singapore are fantastic. Imagiine an AR version, placed all around the city!</p>
</li>
<li><p>Tell a story about the musical history of Singapore, or showcase contemporary music using AR. I like this use of AR for <a href="https://goldcomputing.show/2017/05/30/vinylart/">scanning record covers to listen and learn more about the music they contain</a>.</p>
</li>
<li><p>To be honest, I want an AR app that translates the kopitiam menus into something I can understand so I can order coffee the right way... somehow I always order it wrong!</p>
</li>
</ul>
<p><img src="aframe-example.png"></p>
<h2 id="a-frame">A-Frame</h2>
<p>This guide will help you quickly get up to speed on using A-Frame, Mozilla&#39;s library for declarative authoring of 3D content for virtual reality and augmented reality web experiences. The guide contains links to documentation, learning tools, useful components, tips and tools for debugging, and locations for finding help.</p>
<h2 id="documentation-and-learning">Documentation and Learning</h2>
<ul>
<li>The <a href="https://aframe.io">official A-Frame website</a> has documentation and examples.</li>
<li><a href="https://aframe.io/aframe-school">A-Frame School</a> is a short interactive curriculum for learning A-Frame.</li>
<li>Check out the <a href="https://hacks.mozilla.org/?s=a-frame">A-Frame posts on the Mozilla Hacks blog</a>.</li>
<li>If you&#39;re a podcasty person, check out this <a href="http://voicesofvr.com/538-how-mozilla-is-driving-webvr-content-tooling-with-the-a-frame-framework/">interview with A-Frame core developers</a> on the Voices of VR podcast, to learn more about how A-Frame got to where it is, and where it&#39;s going.</li>
</ul>
<h2 id="start-coding">Start Coding</h2>
<p>Glitch.com lets you author and run full web projects, with HTML, CSS, JavaScript and Node.js. Create a free account and you can start hacking on A-Frame right away. If you&#39;re a more experienced developer, check out the <a href="https://aframe.io/docs/0.6.0/introduction/installation.html">A-Frame installation page</a> to add it to your development environment.</p>
<ul>
<li>Get started with the <a href="http://glitch.com/~aframe">A-Frame Glitch example</a>. Click the link and choose &quot;Remix your own&quot;. Then try moving the objects around, changing their color, or animating them, to get a feel for what A-Frame can do.</li>
<li>Try remixing some more advanced examples like the <a href="https://glitch.com/~aframe-shooting-stars">trippy shooting stars</a> or a <a href="https://glitch.com/~aframe-webcam-component">webcam circus mirror</a>.</li>
<li>Here&#39;s a basic <a href="https://codepen.io/mozvr/pen/BjygdO">A-Frame example on Codepen</a></li>
</ul>
<h2 id="features-and-components">Features and Components</h2>
<p>Some basic things to try:</p>
<ul>
<li><a href="https://aframe.io/docs/0.6.0/components/position.html">Positioning of objects in your scene</a></li>
<li><a href="https://aframe.io/docs/0.6.0/core/animations.html">Animation of objects in your scene</a></li>
<li><a href="https://aframe.io/docs/0.6.0/components/link.html">Link traversal - navigating between different VR web pages!</a></li>
</ul>
<p>A-Frame&#39;s extensibility is an entity component system, which has enabled a huge number of components to be created to add functionality. A few useful modules are listed below. You can <a href="https://aframe.io/docs/0.6.0/introduction/writing-a-component.html">create your own components</a> also.</p>
<ul>
<li>Add physics to your scenes and objects with <a href="https://github.com/donmccurdy/aframe-physics-system">Don McCurdy&#39;s aframe-physics-system component</a>. Check out <a href="https://hacks.mozilla.org/2017/05/having-fun-with-physics-and-a-frame/">Belén Albeza&#39;s guide to A-Frame physics</a> on Mozilla&#39;s Hacks blog.</li>
<li>The <a href="https://github.com/feiss/aframe-environment-component">A-Frame environment component</a> allows you to preconfigure and generate whole worlds.</li>
<li><a href="https://github.com/haydenjameslee/networked-aframe">Networked A-Frame</a> lets you build multi-user easily. Can you think of a way to augment your city by creating social experiences in VR and AR?</li>
</ul>
<p>Other A-Frame Projects To Try</p>
<ul>
<li>Create your own city with the A-Frame <a href="https://github.com/kfarr/aframe-city-builder">City Builder</a></li>
<li>Learn how to build your own <a href="https://css-tricks.com/minecraft-webvr-html-using-frame/">Minecraft in A-Frame</a></li>
<li>Read through this <a href="https://docs.google.com/spreadsheets/d/1VRDoN3AgjJbMZmelCujCDNOVfRIeNJbGpyYlZB5UWgI/edit#gid=0">list of authoring tools</a></li>
<li><a href="https://github.com/aframevr/awesome-aframe">Awesome A-Frame</a> has links to all kinds of A-Frame libraries, examples, projects that will inspire and amaze.</li>
</ul>
<h2 id="objects-and-models">Objects and Models</h2>
<p>A-Frame supports loading glTF, OBJ and COLLADA models, and there are loads of ways to create your models in those formats, as well as find models you can use. Read more on the <a href="https://aframe.io/docs/0.5.0/introduction/models.html">3D Models page on the A-Frame site</a>.</p>
<h2 id="tools-and-debugging">Tools and Debugging</h2>
<p><img src="aframe-inspector.png"></p>
<p>The most important tool for working with A-Frame is the Inspector, shown in the screenshot above. You can read all about <a href="https://aframe.io/docs/0.6.0/introduction/visual-inspector-and-dev-tools.html">A-Frame Inspector and more tools here</a>.</p>
<h2 id="participating-and-getting-help">Participating and Getting Help</h2>
<ul>
<li><a href="https://stackoverflow.com/questions/tagged/aframe">Stack Overflow</a> is the best place to ask a technical question about A-Frame.</li>
<li>The <a href="https://aframevr-slack.herokuapp.com/">A-Frame Slack</a> is fantastic for realtime feedback, community and conversation.</li>
<li>Follow on Twitter at <a href="https://twitter.com/aframevr">@aframevr</a>.</li>
<li>Get inspired by <a href="https://aframe.io/blog/awoa-66/">A Week of A-Frame</a>, weekly blog posts by core team member Kevin Ngo, who writes up all the cool projects, demos and components.</li>
</ul>
<p>Read more on the <a href="https://aframe.io/community/">A-Frame Community page</a>.</p>
<!--
## VR


### Browser Support



### HMD Support


## AR

* ar.js https://github.com/jeromeetienne/AR.js
* argon.js
* Chromium WebAR

* https://trackingjs.com
* angel demo
* my talk demos
* other tracking libs?
* https://artoolkit.github.io/jsartoolkit5/examples/

* look up geo aframe
* https://github.com/buildar/awe.js/tree/master/examples/geo_ar

* my talks

## Standardization Efforts

* webvr community group
* ar community group
* wicg shapes

-->
]]></description><link>/2017/07/06/aframe-augmented-city/index.html</link><guid isPermaLink="true">/2017/07/06/aframe-augmented-city/index.html</guid><category><![CDATA[vr]]></category><category><![CDATA[ar]]></category><category><![CDATA[aframe]]></category><category><![CDATA[webvr]]></category><category><![CDATA[augmented city]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Thu, 06 Jul 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA["FOSSAsia 2017"]]></title><description><![CDATA[<p>Seven years after attending my first FOSSAsia in Ho Chi Min City, I was able to join again this year! The difference is amazing - the conference has grown to be one of the largest open source events in Asia, with more than <a href="http://2017.fossasia.org/speakers.html">200 speakers</a> over three days across 13 tracks and now hosted in Singapore.</p>
<script src="//unpkg.com/twitter-inline-oembed@0.0.1/oembed.js?tweet=https://twitter.com/dietrich/status/842543000320335873"></script>

<p>The conference is entirely open source and volunteer-run, which is really neat. Kudos to the organizers for putting it on, which is a huge amount of work. The focus on free and open source software and tracks on relevant topics like AI, Bitcoin, and IoT combine to make a great collection of people to put in one place for a weekend.</p>
<script src="//unpkg.com/twitter-inline-oembed@0.0.1/oembed.js?tweet=https://twitter.com/dietrich/status/842638503473233921"></script>

<p>Mozilla didn&#39;t directly sponsor this year, but instead sent some of our Tech Speakers who had talks accepted and myself. We were seven people from six countries, speaking about VR, WebAssembly, Web-RTC, security, IoT, AR and more. Big thanks to Bob Reyes, Diky Arga Anggara, Noritada Shimizu, Santosh Viswanatham, Shah Mijanur Rahman and Trishul Goel for speaking at the conference and putting in a bunch of hours at our table every day.</p>
<script src="//unpkg.com/twitter-inline-oembed@0.0.1/oembed.js?tweet=https://twitter.com/dietrich/status/843647232393924609"></script>

<p>The number of speakers was enough of a presence to earn us a table in the exhibition hall, so we took advantage of the opportunity and demo&#39;d A-Frame VR and AR on mobile devices for all three days.</p>
<p>The response was <em>fantastic</em> - lots of people having their first VR experience of any kind, and everyone was mindblown that the demos were built using web technologies, running in a browser, and on a mobile phone.</p>
<p><a data-flickr-embed="true"  href="https://www.flickr.com/photos/comprock/32663678044/in/faves-49503183968@N01/" title="FOSSASIA 2017"><img src="https://c1.staticflickr.com/4/3788/32663678044_8a8e2d7b12_z.jpg" width="640" height="427" alt="FOSSASIA 2017"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script></p>
<p>After three days of rapping with everyone who came by the booth, here are a few impressions:</p>
<ul>
<li><p>Most people, developers included, haven&#39;t strongly engaged in VR yet. If you assume everyone is doing it, you&#39;re probably in the VR industry and you&#39;re wrong. I&#39;ve been demoing VR at conferences for the last couple of years and I always ask if people have tried it before and the answer is usually &quot;no&quot;. VR may be in the limelight in tech news, but the on-the-ground experience says it&#39;s still very early days.</p>
</li>
<li><p>A-Frame has excellent name recognition. This conversation a lot: &quot;This was made with a JavaScript library called A-Frame.&quot; &quot;Oh, A-Frame!&quot; &quot;You&#39;ve used it?&quot; &quot;No, but I&#39;ve heard of it and it looks awesome!&quot;.</p>
</li>
<li><p>Almost nobody was talking about bots.</p>
</li>
<li><p>Almost everybody was talking about AI and machine learning.</p>
</li>
<li><p>People are <em>still</em> asking us about Firefox OS.</p>
</li>
</ul>
<h2 id="conference">Conference</h2>
<p>What I liked:</p>
<ul>
<li>Great crowd. It really feels like a practitioners conference where people are learning reciprocally.</li>
<li>Talk topics are really good. Very little fluff on the schedule. Great mix of interesting and practical topics. Good job by organizers here.</li>
<li>Excellent conference website and apps. They&#39;re writing their own FOSS event management stack, and it seems pretty great so far.</li>
<li>Communication from organizers prior to the event was really good. Combination of emails for important things, and Google Group and Slack for general communication really worked well.</li>
</ul>
<p>What I&#39;d like to see next year:</p>
<ul>
<li>Speakers should not have to pay for tickets.</li>
<li>Need a venue that&#39;s centrally located, easier to navigate and that lets attendees focus on the conference.</li>
<li>Singapore already has lots of events, and is famously expensive for hotel and venue space. To make a truly pan-Asian conference, should move around to different cities.</li>
<li>The schedule was changed at the last minute without warning to speakers, causing some to miss their talks. Need to lock the schedule down, and communicate changes very clearly.</li>
<li>Day two and three each have <em>15</em> tracks! I&#39;d prefer to see a smaller and more focused set of tracks.</li>
</ul>
<h2 id="social-photos-whatnot">Social, Photos, Whatnot</h2>
<ul>
<li><a href="https://www.flickr.com/photos/comprock/32663731524/in/pool-fossasia-2017-singapore/">FOSSAsia pool on Flickr</a></li>
<li><a href="https://www.flickr.com/photos/comprock/albums/72157678094595694">FOSSAsia official photog&#39;s photos</a></li>
<li><a href="https://twitter.com/search?f=tweets&amp;vertical=default&amp;q=%23FOSSASIA&amp;src=tyah">#fossasia on Twitter</a></li>
<li><a href="https://www.instagram.com/explore/tags/fossasia/">#fossasia on Instagram</a></li>
<li><a href="https://twitter.com/search?f=tweets&amp;vertical=default&amp;q=%23fossasia%20from%3Adietrich&amp;src=typd">My FOSSAsia 2017 tweets</a></li>
</ul>
<h2 id="our-talks">Our Talks</h2>
<p>Huge thanks to <a href="https://engineers.sg">Engineers.sg</a>, who recorded almost all of talks. The complete set of FOSSAsia 2017 recorded talks is <a href="https://engineers.sg/conference/fossasia-2017">here on their website</a>.</p>
<ul>
<li><p><a href="https://engineers.sg/video/opensec-and-why-webappsec-matters-fossasia-2017--1547">OpenSec and Why WebAppSec Matters - Shah Mijanur Rahman (SYLHET, Bangladesh)</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/8KK-lQQfYXs?rel=0" frameborder="0" allowfullscreen></iframe>
</li>
<li><p><a href="https://engineers.sg/video/tea-linux-os-designed-for-programmer-developer-fossasia-2017--1591">Tea Linux OS, Designed for Programmer / Developer - Diky Arga Anggara (Semarang, Indonesia)</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/tRa5lLWWY94?rel=0" frameborder="0" allowfullscreen></iframe>
</li>
<li><p><a href="https://engineers.sg/video/creating-your-own-pokemon-world-in-web-based-virtual-reality-workshop-1hr-fossasia-2017--1553">Creating your own Pokemon-world in Web based Virtual Reality - Santosh Viswanatham (Hyderabad, India)</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/e4HbnJ_-u0o?rel=0" frameborder="0" allowfullscreen></iframe>
</li>
<li><p><a href="https://engineers.sg/video/webrtc-future-of-video-chats-fossasia-2017--1548">WebRTC - future of Video Chats - Trishul Goel (Delhi, India)</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/7hEVzSUv7sg?rel=0" frameborder="0" allowfullscreen></iframe>
</li>
<li><p><a href="https://engineers.sg/video/webassembly-now-web-is-a-new-compiler-target-architecture-fossasia-2017--1555">WebAssembly: now web is a new compiler target architecture - Noritada Shimizu (Tokyo, Japan)</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/VAcyLP9RdfQ?rel=0" frameborder="0" allowfullscreen></iframe>
</li>
<li><p><a href="https://engineers.sg/video/integrated-physical-computing-on-the-web-fossasia-2017--1567">Integrated Physical Computing on the Web - Dietrich Ayala (Portland, OR, USA)</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/_TWGDklUlD4?rel=0" frameborder="0" allowfullscreen></iframe>

</li>
</ul>
<h2 id="thanks-fossasia-">THANKS FOSSASIA!</h2>
<p><img src="https://c1.staticflickr.com/4/3729/33465175206_fe8587590e_z.jpg" alt="FOSSAsia 2017 Group Photo"></p>
]]></description><link>/2017/03/28/fossasia2017/index.html</link><guid isPermaLink="true">/2017/03/28/fossasia2017/index.html</guid><category><![CDATA[Events]]></category><category><![CDATA[Asia]]></category><category><![CDATA[2017]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Tue, 28 Mar 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA["Mozfest 2016: Privacy, Vanity, Beacons, Painting, Dilemmas and Tents."]]></title><description><![CDATA[<p>I had the pleasure of being involved in a bunch of different activities at Mozfest this year. What is Mozfest? <a href="https://mozillafestival.org/">From the website:</a></p>
<blockquote>
<p>MozFest is an annual celebration of the open Internet movement. It&#39;s where passionate technologists, educators, and makers come together to explore the future of the open Web.</p>
</blockquote>
<p>Sounds pretty cool... but what does an &quot;annual celebration&quot; of web exploration actually look like? Well, here&#39;s something a bit more of a visual:</p>
<p>Imagine an nine-floor open-plan art school in London, completely taken over for a weekend by over 400 artists, designers, activists, teachers, hackers and makers, putting on hundreds of workshops, talks and building and showing interactive art, games and various other exhibits of thrilling wonder.</p>
<p>It&#39;s truly spectacular and an overwhelming thing to experience.</p>
<p>My biggest wish for Mozfest is for it to leave London - to transform into a regional distributed series of festivals that bring these wonders to the world outside of London (I hear it exists!). Hopefully that will happen someday.</p>
<p>But for now, read on to learn about some of the spaces, projects and exhibits I participated in this year.</p>
<h2 id="-dilemmas-in-connected-spaces-"><strong>Dilemmas in Connected Spaces</strong></h2>
<p><img src="dwygzeg.png" alt="dwygzeg"></p>
<p>Mozfest is composed of a number of &quot;spaces&quot;, most of which are housed on specific floors: Journalism, Science, Arts, Youth, etc. This year I was one of the curators and coordinators of the Dilemmas in Connected Spaces... space.</p>
<p>There are a zillion websites, tutorials, workshops and classes that provide how-to knowledge of IoT, so we decided to not use our space to duplicate those efforts.</p>
<p>Instead, we designed our space to explore the challenges that arise from the ubiquity of connected physical computing devices in our lives. and then built it with 500 cardboard boxes!</p>
<p> <img src="cf3sf0r.png" alt="cf3sf0r"></p>
<p>We divided the space into different zones: The Open IoT Studio, Home, Garden and the Nomad Tent Camp. I decided to explore the dilemma of over-stimulation in our digital lives by running the Nomad Tent Camp, a chill zone where almost nothing was scheduled - a place for weary Mozfest travelers to rest their weary feat, chill out and talk with other explorers. I set up a couple of large spray shelters as tents, and filled the area with comfy chairs. Sure enough, all weekend long we had people coming through and doing naught be relaxing and chatting with strangers they met at this quiet oasis amongst the chaos.</p>
<blockquote>
<p>(Somehow I have no pictures of my own zone! Please use this placeholder to imagine it.)</p>
</blockquote>
<p>If you&#39;d like to learn about the rest of the Dilemmas in Connected Spaces activities, you can follow <a href="https://twitter.com/ileddigital">Jon Rogers</a> and <a href="https://twitter.com/thornet">Michelle Thorne</a>&#39;s <a href="https://twitter.com/openiotstudio">Open IoT Studio</a>, read about <a href="https://twitter.com/cubicgarden">Ian Forrester</a>&#39;s <a href="http://cubicgarden.com/2016/10/23/this-time-next-week-ill-be-at-mozfest-2016/">Home space</a> and hear what <a href="https://twitter.com/msaunby">Michael Saunby</a> did in the Garden on this <a href="https://www.mixcloud.com/Resonance/making-conversations-1-november-2016/">radio interview</a>.</p>
<h2 id="-mozfestation-get-infected-with-ideas-"><strong>Mozfestation.... GET INFECTED... WITH IDEAS!</strong></h2>
<p><a href="https://twitter.com/kc_coffeekid">Katie Caldwell</a>, <a href="https://twitter.com/ezoehunt">Liz Hunt</a> and I worked on a project that came out of their work in the Connected Devices group on <a href="https://github.com/mozilla-magnet/magnet">Project Magnet</a> and some of my Bluetooth experiments called Mozfestation. We wanted a way to encourage people to explore more of the festival than they would&#39;ve otherwise - and to get exposed to as many ideas as possible during the weekend. And I had a 100 beacons...</p>
<p><img src="egfpmlb.png" alt="egfpmlb"></p>
<p>So we made iOS and Android apps for discovering, accessing and saving beacons (a hacked version of Magnet&#39;s React Native app, made web pages for 100 curated things at Mozfest, made a leaderboard for showing top-visited beacons and the users who&#39;d seen the most beacons, and then put posters and flyers all over the festival to let people know about it.</p>
<p><img src="hkhbgrk.png" alt="hkhbgrk"></p>
<p>In the end, it was a ton of work and a ton of fun. We learned a ton about large-scale beacon deployments, minimum-viable-gamification, mobile app uptake tactics and loads more. It was a huge experiment and it was FASCINATING. There&#39;s a lot involved in the design, implementation, festival execution, and the analysis of the data collected, so I&#39;ll go over all of that in a separate post.</p>
<h2 id="-a-painter-3d-painting-in-virtual-reality-">**A-Painter: 3D Painting in Virtual Reality!</h2>
<p>**</p>
<p><img src="apainter_painting.gif" alt="apainter_painting"></p>
<p>One addition to the space was <a href="https://blog.mozvr.com/a-painter/">Mozilla&#39;s A-Painter</a>, a purely web-based virtual reality 3D painting experience. It&#39;s a web app written using <a href="http://aframe.io/">A-Frame</a>, the web toolkit for building 3D and VR experiences in the browser. A-Frame is both incredibly powerful and incredibly easy to use, and it was showing up all over the festival, almost anywhere that someone was doing a session or exhibit about VR.</p>
<p>We set up the A-Painter space next to the nomad tent camp, which is on the 6th floor of the school, where the fashion classes are taught. The whole space is littered with mannequins that have paper-prototypes of clothing concepts on them. We clustered a bunch of these around the space and even used two of them to hold the HTC Vive&#39;s positional sensors.</p>
<p><a href="https://twitter.com/JoelGethinLewis/status/792388060164067329">https://twitter.com/JoelGethinLewis/status/792388060164067329</a></p>
<h2 id="-vanity-trumps-privacy-trumps-vanity-"><strong>Vanity Trumps Privacy Trumps Vanity</strong></h2>
<p>Since the demise of Firefox OS, I&#39;ve been collecting all of the old Flame developer devices that I can get my hands on. These are smartphones, no... <em>computers</em>, packed with sensors, and with screens built-in, and with the ability to run applications built using the web stack but with access to WAY more functionality than traditional web pages. I&#39;ve been using them as IoT devices, art pieces, privacy tools and more. I&#39;ve been playing around with using them as camera arrays, and have a few side-projects (as yet unfinished) doing things like turning them into piecemeal mega-screens, chandeliers, etc.</p>
<p>So when Kevin Fann started talking about his idea for an exhibit at Mozfest that explored the tension between vanity and privacy, all I could think about was how the selfie is a fantastic expression of that tension, and I&#39;ve got all these smartphones... no, <em>cameras</em> lying around.</p>
<p>Kevin, Jordan Gushwa and I designed a walk-through experience with loads of phones on selfie-mode and even a secret hidden camera that records live video and displays out <em>outside</em> the exhibit... so you don&#39;t know you&#39;re being recorded until <em>after</em> you exit.</p>
<p>Kevin created eye-catching frames and placements for all the phones, and selected a few relevant video clips to have repeating on some of the phones. I wrote some code that streamed the live video from the hidden phone over Web-RTC to a Raspberry Pi hooked up to a screen outside the exhibit.</p>
<p>Kevin packed everything up into suitcase, which could not have looked more bomb-like:</p>
<p><img src="2foz1de.png" alt="2foz1de"></p>
<p>Here&#39;s a video tour of the wall in all its glory:</p>
<p><a href="https://twitter.com/dietrich/status/792302372861177856">https://twitter.com/dietrich/status/792302372861177856</a></p>
<p>The end-result was epic: People were <em>mesmerized</em> by so many phones showing them the live camera view of themselves.</p>
<p><img src="kt2nlyt.png" alt="kt2nlyt"></p>
<p>Mozfest 2016. It&#39;s over. I&#39;m exhausted. It was a parade of wonders. I hope someday it will come your way.</p>
<p>Cheers.</p>
<p><img src="obnvpnv.png" alt="obnvpnv"></p>
]]></description><link>/2016/11/mozfest-2016-privacy-vanity-beacons-painting-dilemmas-and-tents/index.html</link><guid isPermaLink="true">/2016/11/mozfest-2016-privacy-vanity-beacons-painting-dilemmas-and-tents/index.html</guid><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Sat, 05 Nov 2016 00:00:00 GMT</pubDate></item><item><title><![CDATA["Harvesting Air Quality Data with a NodeMCU, SensorWeb and IFTTT"]]></title><description><![CDATA[<p><a href="http://sensorweb.io/">Project SensorWeb</a> is an experiment from the <a href="https://wiki.mozilla.org/Connected_Devices/Projects">Connected Devices</a> group at Mozilla in open publishing of environmental data. I am excited about this experiment because we&#39;ve had some <a href="http://topics.oregonlive.com/tag/toxic%20air/">serious air quality discoveries in Portland</a> recently - our air is possibly <a href="http://koin.com/2016/03/02/study-portland-air-among-worst-in-nation/">the worst in the USA</a>, and bad enough that <a href="http://koin.com/2016/02/26/erin-brockovich-joins-portland-air-quality-fight/">mega-activists like Erin Brockovich are getting involved</a>.</p>
<p><img src="screen-shot-2016-07-13-at-5-21-01-pm.png" alt="Screen Shot 2016-07-13 at 5.21.01 PM"></p>
<p>A couple of weeks ago, Eddie and Evan from Project SensorWeb helped me put together a NodeMCU board and a PM2.5 sensor so I could set up an air quality sensor in Portland to report to their network. They&#39;re still setting up the project so I haven&#39;t gotten the configuration info from them yet...</p>
<p>But you don&#39;t need the SensorWeb server to get your sensor up and running and pushing data to your own server! I want a copy of the data for myself anyway, to be able to do my own visualizations and notifications. I can then forward the data on to SensorWeb.</p>
<p>So I started by flashing the current version of the SensorWeb code to the device, which is a Nodemcu 0.9 board with an ESP8266 wifi chip on board, and a PM2.5 sensor attached to it.</p>
<p><img src="2016-07-13-17-05-59.jpg" alt="2016-07-13 17.05.59"></p>
<p>I used <a href="https://rishav006.wordpress.com/2016/06/22/pm2-5-a-sensorweb-project-by-mozilla/">Kumar Rishav&#39;s excellent step-by-step post</a> to get through the process.</p>
<p>Some things I learned along the way:</p>
<ul>
<li>On Mac OS X you need a <a href="https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx">serial port driver</a> in order for the Arduino IDE to detect the board.</li>
<li>After much gnashing of teeth, I discovered that you can&#39;t have the PM2.5 sensor plugged into the board when you flash it.
After getting the regular version flashed correctly, I tested with Kumar&#39;s API key and device id, and confirmed it was reporting the data correctly to the SensorWeb server.</li>
</ul>
<p>Now for the changes.</p>
<ul>
<li>I set up <a href="https://ifttt.com/maker">the Maker channel on IFTTT</a>, which allows me post data to an HTTP endpoint to get it into IFTTT&#39;s system.</li>
<li>I then created a new <a href="https://ifttt.com/recipes/440904-save-pm2-5-data-to-a-spreadsheet">IFTTT recipe that accepts the data from the device and pushes it into a Google spreadsheet</a>.</li>
<li>I forked the SensorWeb code and <a href="https://github.com/autonome/arduino-station/blob/master/station/nodemcu/nodemcu.ino">modified it to post to the Maker channel instead of the SensorWeb server</a>.
I flashed the device and viola, it is publishing data to my spreadsheet.</li>
</ul>
<p>&nbsp;</p>
<p><img src="screen-shot-2016-07-13-at-4-48-28-pm.png" alt="Screen Shot 2016-07-13 at 4.48.28 PM"></p>
<p>And now once SensorWeb is ready to take new devices, I can set up a new IFTTT recipe to forward the posts to them, allowing me to own my own data and also publish to the project!</p>
]]></description><link>/2016/07/harvesting-air-quality-data-with-a-nodemcu-sensorweb-and-ifttt/index.html</link><guid isPermaLink="true">/2016/07/harvesting-air-quality-data-with-a-nodemcu-sensorweb-and-ifttt/index.html</guid><category><![CDATA[arduino]]></category><category><![CDATA[ifttt]]></category><category><![CDATA[iot]]></category><category><![CDATA[iot]]></category><category><![CDATA[mozilla]]></category><category><![CDATA[mozilla]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Thu, 14 Jul 2016 00:00:00 GMT</pubDate></item><item><title><![CDATA["Bubble and Tweak - IoT at the Ends of the Earth"]]></title><description><![CDATA[<p><img src="screen-shot-2016-07-12-at-3-19-07-pm.png" alt="Screen Shot 2016-07-12 at 3.19.07 PM"></p>
<p>Last month I spent a week working on IoT projects with a group of 40 researchers, designers and coders... in Anstruther, a small fishing village in Scotland. Not a high-tech hub, but that was the point. We immersed ourselves in a small community with limited connectivity and interesting weather (and <a href="https://www.tripadvisor.com/Restaurant_Review-g551743-d1898308-Reviews-The_Wee_Chippy-Anstruther_Fife_Scotland.html">fantastic F&amp;C</a>) in order to explore how they use technology and how ubiquitous physical computing might be woven into their lives.</p>
<p>The ideamonsters behind this event were <a href="https://twitter.com/thornet">Michelle Thorne</a> and <a href="https://twitter.com/ileddigital">Jon Rogers</a>, who are putting on a series of these exploratory events around the world this year as part of the Mozilla Foundation&#39;s <a href="https://wiki.mozilla.org/Open_IoT">Open IoT Studio</a>. The two previous editions of this event were a train caravan in India and a fablab sprint in Berlin (which I also attended, and will write up as well. I SWEAR.).</p>
<p>Michelle and Jon will be writing a proper summary of the week as a whole, so I&#39;m going to focus on the project my group built: Bubble.</p>
<p><img src="screen-shot-2016-07-12-at-3-18-39-pm.png" alt="Screen Shot 2016-07-12 at 3.18.39 PM"></p>
<h2 id="-context-"><strong>Context</strong></h2>
<p>From research conducted with local fishing folk, farmers from a bit inland, and a group of teenagers from the local school, we figured out a few things:</p>
<ul>
<li><strong>Mobile connectivity is sparse and unreliable</strong> throughout the whole region. In this particular town, only about half the town had any service.</li>
<li>The important <strong>information, places and things aren&#39;t immediately obvious</strong> unless you know a local.</li>
<li>Just like I was, growing up in a small town: <strong>The kids are just looking for something to do.</strong>
Initially we focused on the teens... fun things like virtual secret messaging at the red telephone boxes. Imagine you connect to the wifi at the phone box, and the captive portal is a web UI for leaving and receiving secret messages. Perhaps they&#39;re only read once before dying, like a hyperlocal Snapchat. Perhaps the system is user-less, mediated only by secret combinations of emojis as keys. The street corner becomes the hangout, physically and digitally.</li>
</ul>
<p>We meandered to public messaging from there, thinking about how there&#39;s so much to learn and share about the physical space. What&#39;s the story behind the messages to fairies that are being left in that phone box? I can see the island off the coast from here - what&#39;s it called and what&#39;s out there? Who the hell is Urquardt and what&#39;s a &quot;wynd&quot;? Maybe we make a public message board as well - disconnected from the internet but connected to anything within view.</p>
<p>We kept going back to the physical space. We talked about a virtual graffiti wall, and then started exploring AR and ways of marking up the surroundings - the people, the history, the local pro-tip on which fish and chips shop is the best. But all of this available only to people in close physical proximity.</p>
<p><img src="screen-shot-2016-07-12-at-3-40-49-pm.png" alt="Screen Shot 2016-07-12 at 3.40.49 PM"></p>
<h2 id="-implementation-"><strong>Implementation</strong></h2>
<p>Given the context and the constraints, as well as watching direction some of the other groups were going in, we started designing a general approach to bringing digital interactivity to disconnected spaces.</p>
<p>The first cut is <strong>Bubble</strong>: A <strong>wi-fi access point</strong> with a <strong>captive portal</strong> that opens a web page that displays an <strong>augmented reality</strong> view of your <strong>immediate surroundings</strong>, with messages overlaid on what you&#39;re seeing:</p>
<p><img src="screen-shot-2016-07-12-at-2-36-26-pm.png" alt="Screen Shot 2016-07-12 at 2.36.26 PM"></p>
<p>A few implementation notes:</p>
<ul>
<li>We used a Raspberry Pi 3, running as a wi-fi access point.</li>
<li>It ran a node.js script that served up the captive portal web UI.</li>
<li>The web UI used getUserMedia to access the device camera awe.js for the AR bits and A-Frame for a VR backup view on iOS.</li>
<li>We designed a logo and descriptive text and then lasercut some plaques to put up where hotspots are.
<strong>Designs, board, battery and boxes:</strong></li>
</ul>
<p><img src="screen-shot-2016-07-12-at-3-58-10-pm.png" alt="Screen Shot 2016-07-12 at 3.58.10 PM">
<strong>Connected to the front-end:</strong></p>
<p><img src="screen-shot-2016-07-12-at-3-57-57-pm.png" alt="Screen Shot 2016-07-12 at 3.57.57 PM"></p>
<p><strong>In the final box:</strong></p>
<p><img src="screen-shot-2016-07-12-at-3-58-33-pm.png" alt="Screen Shot 2016-07-12 at 3.58.33 PM"></p>
<p><strong>Challenges:</strong></p>
<ul>
<li>Captive portals are hobbled web pages. You can&#39;t do things like use getUserMedia to get access to the camera.</li>
<li>iOS doesn&#39;t have <em>any</em> way to let web pages access the camera.</li>
<li>Power can be hard. We talked about solar and other ways of powering these.</li>
<li>Gotta hope they don&#39;t get nicked.
Bubble was an experimental prototype. There are no plans to work further on it at this time. If you&#39;re interested, everything is on Github <a href="https://github.com/autonome/bubble">here</a>. You can read more about the design <a href="https://www.dropbox.com/s/yj11w3g3scwu93q/Bubble_DesignSprint_Scotland.pdf?dl=0">here (PDF)</a>.</li>
</ul>
<p>Thanks to fellow team members <a href="https://twitter.com/juliagratsova">Julia Gratsova</a>, <a href="https://twitter.com/kc_coffeekid">Katie Caldwell</a>, <a href="https://twitter.com/thecreatureslab">Vladan Joler</a>. (Sadly, no Julia in the phonebox!)</p>
<p><img src="screen-shot-2016-07-12-at-3-19-51-pm.png" alt="Screen Shot 2016-07-12 at 3.19.51 PM"></p>
]]></description><link>/2016/07/bubble-and-tweak-iot-at-the-ends-of-the-earth/index.html</link><guid isPermaLink="true">/2016/07/bubble-and-tweak-iot-at-the-ends-of-the-earth/index.html</guid><category><![CDATA[anstruther]]></category><category><![CDATA[iot]]></category><category><![CDATA[iot]]></category><category><![CDATA[mozilla]]></category><category><![CDATA[mozilla]]></category><category><![CDATA[scotland]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Wed, 13 Jul 2016 00:00:00 GMT</pubDate></item><item><title><![CDATA["Fixing a papercut in Firefox's WebIDE"]]></title><description><![CDATA[<p>Web IDE has gone though some twists and turns as a feature in Firefox, but one thing has remained constant for me: When I launch an app, I <em>always</em> want to debug it. Having to repeatedly wait and hit the wrench button has always bothered me. During a development session I may do this hundreds of times.</p>
<p>So I wrote a small Firefox add-on that changes the functionality of the &quot;play&quot; button in Web IDE to also open the Developer Tools once the app has launched.</p>
<p>Warning: It&#39;s not pretty. There&#39;s probably a better way to do it. Take a look at <a href="https://github.com/autonome/webide-autodebug">the source here</a> and let me know if you have ideas.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/webide-auto-debug/">INSTALL</a></p>
<p>A couple of other things I want to add:</p>
<ul>
<li>First force-stop app when you hit Play. Currently the new app source doesn&#39;t get reloaded because the old app instance is running, which is wrong and maddening.</li>
<li>Always show dev tools. The way the pop in and out is very heavy feeling. Just keep them open all the time.</li>
</ul>
]]></description><link>/2016/02/fixing-a-papercut-in-firefoxs-webide/index.html</link><guid isPermaLink="true">/2016/02/fixing-a-papercut-in-firefoxs-webide/index.html</guid><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Tue, 23 Feb 2016 00:00:00 GMT</pubDate></item><item><title><![CDATA["Doublestitch - A Simpler and Cleaner Pocket for Firefox"]]></title><description><![CDATA[<p>I love <strong>Pocket</strong> and I love <strong>Firefox</strong>.</p>
<p>But two things were driving me batty about the Pocket feature built into Firefox:</p>
<ol>
<li>The design of the popup experience when you save a page to Pocket is... unfortunate. It stays up far too long, <strong>and</strong> it doesn&#39;t go away when you switch tabs. Yeah, it stays open for a given URL even when you&#39;re on a tab with a completely different URL! But regardless of whether you think that&#39;s as crazy as I do, I never want to add tags so just don&#39;t need it at all.</li>
</ol>
<p><img src="screen-shot-2016-02-19-at-11-17-56-am.png" alt="Screen Shot 2016-02-19 at 11.17.56 AM"></p>
<ol>
<li>The Pocket toolbar button doesn&#39;t indicate whether you&#39;ve already saved the page or not. You have to click the button to figure it out. Now this might not be a problem for everyone. But the way I use my browser can best be described as &quot;tabsplosion&quot;. I don&#39;t know when or where these tabs come from, or how they get there, or whether I saved it already or not. So this tiny piece of ambient visual signal would be useful for me.</li>
</ol>
<p>So I took a couple of hours over the last few evenings and scratched the itch. I made a Firefox add-on which does the following:</p>
<ul>
<li><p>Adds a new Pocket button to the toolbar. (You can remove the old one by right-clicking it and choosing &quot;Remove from Toolbar&quot;). Mine is red. I want to make one that has nice gold double-stitching on it...</p>
</li>
<li><p>The new button shows a check mark badge when the page is already saved.</p>
</li>
<li><p>You can click the button to either add or remove the page from Pocket.</p>
</li>
<li><p>No popup.</p>
</li>
</ul>
<p>That&#39;s it. Simple, clear and out of your way.</p>
<p><a href="https://addons.mozilla.org/addon/doublestitch/">INSTALL HERE (WARNING: Experimental side-project software. You&#39;ve been warned.)</a></p>
<p>Source code: <a href="https://github.com/autonome/doublestitch">https://github.com/autonome/doublestitch</a></p>
<p>If you try it out, let me know if you find any bugs or have any ideas for improvements!</p>
]]></description><link>/2016/02/doublestitch-a-simpler-and-cleaner-pocket-for-firefox/index.html</link><guid isPermaLink="true">/2016/02/doublestitch-a-simpler-and-cleaner-pocket-for-firefox/index.html</guid><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Sat, 20 Feb 2016 00:00:00 GMT</pubDate></item><item><title><![CDATA["Remixable Quilts for the Web"]]></title><description><![CDATA[<p><a href="https://twitter.com/toolness">Atul Varma</a> set up a <a href="http://quilts.mozillacamp.org/2012/asia/">quilt</a> for MozCamp Asia 2012 which I thought was a fantastic tool for that type of event. It provided an engaging visualization, was collaboratively created, and allowed a quick and easy way to dive further into the details about the participating groups.</p>
<p><a href="http://quilts.mozillacamp.org/2012/asia/"><img src="screenshot-2014-12-18-15-23-19.png" alt="Screenshot 2014-12-18 15.23.19"></a>I wanted to use it for a couple of projects, but the code was tied pretty closely to that specific content and layout.</p>
<p>This week I finally got around to moving the code over to Mozilla Webmaker, so it could be easily copied and remixed. I made a couple of changes:</p>
<ul>
<li>Update font to Open Sans</li>
<li>Make it easy and clear how to re-theme the colors</li>
<li>Allow arbitrary content in squares
The JS code is still a bit too complex for what&#39;s needed, but it works on Webmaker now!</li>
</ul>
<p><a href="https://dietrich.makes.org/thimble/MjAzNzUxNDQ5Ng==/web-quilt"><img src="screenshot-2014-12-18-15-09-42.png" alt="Screenshot 2014-12-18 15.09.42"></a></p>
<p><a href="https://dietrich.makes.org/thimble/MjAzNzUxNDQ5Ng==/web-quilt">View my demo quilt</a>. Hit the &quot;remix&quot; button to clone it and make your own.</p>
<p>The source for the core JS and CSS is at <a href="https://github.com/autonome/quilt">https://github.com/autonome/quilt</a>.</p>
]]></description><link>/2014/12/remixable-quilts-for-the-web/index.html</link><guid isPermaLink="true">/2014/12/remixable-quilts-for-the-web/index.html</guid><category><![CDATA[mozilla]]></category><category><![CDATA[mozilla]]></category><category><![CDATA[quilting]]></category><category><![CDATA[webdev]]></category><category><![CDATA[webmaker]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Fri, 19 Dec 2014 00:00:00 GMT</pubDate></item><item><title><![CDATA["Mozlandia - A Portland mini-guide for Mozillians"]]></title><description><![CDATA[<p>Around 1,100 Mozillians will be in Portland next week. WELCOME!</p>
<p>Here is a list of things I recommend that you see, do, eat and drink and some handy tips. I&#39;ve focused on places that are in or near downtown, though included some spots worth going out of your way for.</p>
<p>That said, downtown is not Portland. Well, obviously it&#39;s part of it, duh. But it&#39;s not overly representative of the Portland you&#39;ve heard so much about. Get out of downtown for an evening or afternoon - and check out one of the neighborhoods. Nothing listed here is very far from downtown - Portland is pretty small.</p>
<p>I&#39;ve left a LOT out. And forgot the rest. If you have recommendations, leave them in the comments.</p>
<p>UPDATE: Blue Star donuts, which are far more delicious but far less penis-shaped than Voodoo donuts, will be <a href="http://pdx.eater.com/2014/11/26/7295121/blue-star-donuts-anniversary-free-beignets-expanded-menu">giving away free beignets on Friday Dec 5</a>.</p>
<p>GENERAL TIPS</p>
<ul>
<li>Portland has no Uber or Uber-like services. If you have Car2Go in your city you can use that here too. <a href="http://gocurb.com/">Curb </a>is the app for local taxi service through a couple of providers. You can get a bus to pretty much anywhere without too much of a wait. Ride the MAX and streetcar if you&#39;re headed to areas that they service.</li>
<li>Oregon has no sales tax. Do your Christmas shopping while you&#39;re here.</li>
<li>It gets dark around 16:30 - 17:00, so factor that into any plans for hikes, etc.</li>
<li>If you go into the mountains, check the road conditions to see if you need chains for the car, or if the area is accessible at all.</li>
<li>Go to Powell&#39;s books. Go a few times. Then go back again. Check out the Science Fiction pillar there - how many have you read?</li>
<li>Get high... for a good view of the city: Have a drink at Departures, dinner at Portland City Grill or visit Pittock Mansion for great views of the city. Even driving over the Fremont bridge (Highway 405) provides a spectacular view of downtown, the Willamette River and our many bridges.</li>
<li>There aren&#39;t a ton of restaurants/bars/coffeehouses that can hold large numbers of people. If you break up into groups of four (max), you&#39;ll have a much better time and the servers, chefs, baristas and bartenders will like you for it.</li>
<li>Be patient. Oregon is home to the slow-food movement in America. Regardless if this explains why your coffee took 20 f<em>*</em>ing minutes to make, it&#39;ll make you feel better to think about that. See also the above note about small group sizes to mitigate the waits.</li>
<li><p>Tipping: I tip a dollar for a good coffee. I generally tip ~20% for any kind of sit-down meal. But I also worked as a barista, server and chef before getting into tech, so I&#39;m biased towards tipping ;)
CARTS - Just the 9th &amp; Alder pod for the purposes of this post. If you&#39;re from California - up here they are not &quot;food trucks&quot;, they are &quot;food carts&quot;... even when they are trucks.</p>
</li>
<li><p>Hoang&#39;s - Get soup #17.</p>
</li>
<li>Nong&#39;s khao man gai - Simple and good and oddly famous.</li>
<li>Wolf &amp; Bear - Israeli street food that is amazing. And vegan.</li>
<li>Güero - Excellent tortas. Add an egg.</li>
<li>La Jarochita 2 - Great Mexican cart. The only Mexican cart (aside from Güero) worth going to at the 9th and Alder cart pod.</li>
<li>Brunch Box - A cart that graduated to a proper storefront, but is right by the 9th and Alder carts. Great egg sandwiches for breakfast (try the Black and Blue) and terribly good burgers the rest of time. Very fast.</li>
<li><p>Kargi Gogo - Georgian food. The country, not the American state. Irakli says it&#39;s legit too.
DRINK</p>
</li>
<li><p>Multnomah Whiskey Library</p>
</li>
<li>Clyde Common</li>
<li>Pepe le Moko</li>
<li>Teardrop</li>
<li><p>Bailey&#39;s Taproom
COFFEE</p>
</li>
<li><p>Courier - They also make fresh canneles daily.</p>
</li>
<li>Heart - Excellent coffee.</li>
<li>Barista</li>
<li>Coffeehouse Northwest</li>
<li>Stumptown</li>
<li>Case Study</li>
<li>Coava - Not downtown but my favorite coffee roaster in town.</li>
<li><p>Ristretto - Not downtown, but fantastic coffee in beautiful spaces. The Nicolai location is especially great - check out the custom metalwork and crazy woodwork, and visit Schoolhouse Electric in the same space.
EAT - I&#39;ve only noted a few of my go-to places, or those that are near where Mozillians are staying, or open late, etc. I&#39;ve got a <a href="https://www.evernote.com/shard/s1/sh/054ed2b6-227a-4934-aaf5-afaeff3f09e6/8b18f677e359bdd1823ec784dc22bfb1">somewhat-up-to-date list here</a> with more recommendations, but there&#39;s just really too much to cover. Go out and explore.</p>
</li>
<li><p>Clyde Common - Always interesting menu, good whiskey selection, great cocktails. Fries + harissa and a cocktail is a great way to end your day and start your evening.</p>
</li>
<li>Tasty and Alder (downtown) - Shared plates, everything is good.</li>
<li>Luc Lac - Vietnamese + cocktails, serves food VERY late, and closest place worth going to that&#39;s also near the Waterfront Marriot.</li>
<li>Bunk - Excellent sandwiches.</li>
<li>Lardo - Excellent sandwiches as well.</li>
<li>Racion - Amazing cocktails and fun Spanish-tinged molecular gastronomy.</li>
<li>Little Big Burger - Fast and good late night burger.</li>
<li><p>Not downtown, but places I always want to go back to...</p>
<ul>
<li>Biwa - Izakaya, open late, always amazing. Burger served only after 11pm.</li>
<li>Tarad - Northern Thai food, open late. Pok Pok gets all the attention but after living in northern Thailand, this is where we go for the real thing.</li>
<li>Mee Sen - Another good Northern Thai food spot we go to.</li>
<li>Podnah&#39;s BBQ - Worth heading up into NE Portland for.</li>
<li>La Taq - Next door to Podnah&#39;s, fantastic Mexican bar food.</li>
<li>Sweedeedee - Most likely to feel like you&#39;re in Portlandia at this spot. Amazing house-baked breads. Tiny. Expect a long wait but good people watching and excellent food.</li>
<li>Por Que No (Mississippi location) - Great tacos.</li>
<li>Ha &amp; VL - Get the special soup of the day, whatever it is.
NEIGHBORHOODS - Places to walk, eat, drink, shop and experience parts of Portland that are far more interesting than downtown.</li>
</ul>
</li>
<li><p>Alberta St - <a href="https://www.google.com/maps/place/Portland,+OR+97211/@45.559091,-122.649713,17z/data=!3m1!4b1!4m2!3m1!1s0x5495a71f16982601:0xcfb5dec4cb0cc592">Between NE 15th Ave and NE 31st Ave</a></p>
</li>
<li>Belmont St - A few blocks on either side of <a href="https://www.google.com/maps/place/Portland,+OR+97214/@45.5164534,-122.6295558,18z/data=!3m1!4b1!4m2!3m1!1s0x5495a093801c7a69:0x3044c74094029fc5">SE Belmont and SE 34th</a></li>
<li>Division St - Between <a href="https://www.google.com/maps/place/Portland,+OR+97202/@45.5048033,-122.634579,17z/data=!3m1!4b1!4m2!3m1!1s0x5495a08423947f4d:0x94ab9ca89f536476">SE 30th and SE 39th</a></li>
<li>East Burnside - From <a href="https://www.google.com/maps/place/Portland,+OR+97214/@45.5117972,-122.6233484,16z/data=!4m2!3m1!1s0x5495a08d8c6660a1:0x65c0bc7bcfa0bfa8">NE Grand Ave to NE 12th Ave</a> and then up and down <a href="https://www.google.com/maps/place/Portland,+OR+97214/@45.5228888,-122.6372625,17z/data=!3m1!4b1!4m2!3m1!1s0x5495a0bf1c10f7e1:0xc2712506ca1f815c">NE 28th and Burnside</a></li>
<li>Hawthorne Blvd - Between <a href="https://www.google.com/maps/place/Portland,+OR+97214/@45.5117972,-122.6233484,16z/data=!4m2!3m1!1s0x5495a08d8c6660a1:0x65c0bc7bcfa0bfa8">SE 32nd Ave and SE 49th Ave</a></li>
<li>N Mississippi Ave - Between <a href="https://www.google.com/maps/place/Portland,+OR+97227/@45.5478202,-122.675562,17z/data=!3m1!4b1!4m2!3m1!1s0x5495a74217de3b6b:0xa592780957a53110">N Fremont Ave and N Skidmore Ave</a></li>
<li>NW 23rd Ave - Between <a href="https://www.google.com/maps/place/Portland,+OR+97210/@45.5262249,-122.6984709,17z/data=!3m1!4b1!4m2!3m1!1s0x549509f13449968b:0x73b4e9cf1403cc8c">W Burnside and NW Thurman Ave</a></li>
<li><p>NE Williams Ave - Between <a href="https://www.google.com/maps/place/Portland,+OR+97212/@45.5507983,-122.6667064,17z/data=!3m1!4b1!4m2!3m1!1s0x5495a73fc02c7eaf:0x471d67f545f071aa">NE Fremont Ave and NE Skidmore Ave</a>
EXCURSIONS</p>
</li>
<li><p>Columbia Gorge - See Multnomah Falls, the view from Vista House, climb Beacon Rock, stop at the Bonneville Dam and see Herman the Sturgeon, drive across the Bridge of the Gods (and back), then go for lunch at one of the Hood River breweries. Some easy/moderate 1-2 hour hikes I like: Angel&#39;s Rest, the Multnomah/Wahkeena Falls loop, Triple Falls,  Horsetail Falls, Punchbowl Falls, <a href="http://www.portlandhikersfieldguide.org/wiki/Columbia_River_Gorge_Hikes">all listed here</a>.</p>
</li>
<li>Mount Hood - Drive out Highway 26 to the historic Timberline Lodge with amazing views of Mt Hood (if it&#39;s clear), then down to Hood River and head home through the Columbia Gorge on Hwy 84.</li>
<li>Mount St Helens - A couple of hours north, but the view of the blast zone and crater from the visitor center on the NW side is well worth it if the view is clear. On the SE side you can hike one mile underground through Ape Cave, and check out the amazing rock formations and brave the cable bridge at Lava Canyon.</li>
<li>Oregon Coast - About two hours drive. Walk the promenade at Seaside, get ice cream at Tillamook, watch storms from the tip of Oregon at the mouth of the Columbia river.</li>
</ul>
]]></description><link>/2014/11/mozlandia-a-portland-mini-guide-for-mozillians/index.html</link><guid isPermaLink="true">/2014/11/mozlandia-a-portland-mini-guide-for-mozillians/index.html</guid><category><![CDATA[mozilla]]></category><category><![CDATA[mozlandia]]></category><category><![CDATA[pdx]]></category><category><![CDATA[portland]]></category><dc:creator><![CDATA[Dietrich Ayala]]></dc:creator><pubDate>Thu, 27 Nov 2014 00:00:00 GMT</pubDate></item></channel></rss>